Skip to content

Releases

v2.8.0 — Usage and Cost Analytics API, Security posture card, Claude Tag, IP allowlist readiness

Choose a tag to compare

@whchoi98 whchoi98 released this 14 Nov 01:41

English

Cost data now comes from Anthropic's Usage and Cost Analytics API, with the legacy reports as a fallback. The release also adds a Security posture card to Audit, Claude Tag active users to Trends, and readiness for an organization IP allowlist.

Added

  • Audit: a "Security posture" card shows the current result of every control on the Security posture page in claude.ai Organization settings: how many failed, were never attested, passed, or are informational. Failed and unattested controls are listed first with their current and recommended values; the full list opens by section. The data comes from the Compliance API's Security posture endpoint (beta). Who attested and any comment are not shown.
  • Audit: a change to a Security posture attestation (org_security_control_attestation_updated) now counts as a risk event.
  • Trends: Claude Tag (Claude in Slack) active users appear as their own line in "Active users by product". The count is Slack users, including people who have not linked a Claude account, so it can be higher than total active users; a note says so when the line has people on it.
  • The collector archives each linked user's Claude Tag active days and messages in two new claude_code_analytics columns, and the chatbot's SQL tool knows about them.
  • IP allowlist readiness. An organization owner can now restrict the organization to a list of IP ranges, and that list also covers the Compliance API.
    • When Anthropic refuses the server's address, every page shows a banner that says why, and /api/health reports the time of the refusal.
    • The collector Lambda runs inside the dashboard VPC so it leaves through the same NAT gateway addresses as the server (collectorFixedEgress in infra/cdk.json).
    • A runbook lists the addresses to allow and the recovery steps.

Changed

  • Cost data now comes from the Usage and Cost Analytics API (beta). Anthropic marked the four report endpoints the Cost pages were built on as legacy on 2026-10-29. Figures are the same: a live comparison matched to six decimals.
    • If the new API rejects a call, the server retries on the legacy report and keeps that organization there for 30 minutes. CCD_COST_API=legacy pins the legacy reports.
    • /api/cost/live reports which API served it in cost_api.
  • Cost: the Claude in Slack product is labeled "Claude Tag (Slack)", the name Trends uses.

Validation

  • Server and structure checks: 100 passed, including new tests for the cost API adapter, the cost routes against a stubbed upstream, the Security posture shaper and the IP-allowlist detector.
  • Frontend regression tests: 148 passed.
  • Desktop and mobile browser checks: 68 passed on the production build with synthetic API responses, including the Security posture card and the Claude Tag line.
  • An independent code review found no structural defects. Its four findings (one intermittently failing test, a fallback that could call both APIs repeatedly, an unverified paging path, and unmasked emails in control values) were all fixed before deployment.
  • Live data, both organizations: the new cost API and the legacy reports produced identical results through the dashboard's own reshaping code, for organization totals, per-user spend by model, product and RBAC group, and per-user tokens. The Security posture endpoint returned results for both organizations.
  • Production (2026-11-14): storage, collector and compute were deployed; ECS task definition :130, both tasks healthy. After deployment the cost cache warm-up finished with no failures for both organizations and the server logged no fallback to the legacy reports. The collector ran once from inside the VPC with no errors, and Athena reads the new Claude Tag columns.
  • Not verified: the IP-allowlist banner has not been seen against a real refusal, because no allowlist is on. The ALB origin-verification change in this release's source (infra/lib/compute-stack.ts) is not applied through CloudFormation yet; it needs the listener imported first, and the live listener already enforces the header.

한국어

비용 데이터를 Anthropic의 Usage and Cost Analytics API에서 가져오고, 기존 리포트는 폴백으로 둡니다. 감사 페이지에 보안 태세 카드를, 추세 페이지에 Claude Tag 활성 사용자를 추가했고, 조직 IP 허용 목록에 대비했습니다.

추가

  • 감사: "보안 태세" 카드를 추가했습니다. claude.ai 조직 설정의 Security posture 페이지에 있는 통제 항목별 현재 결과를 실패, 미확인, 통과, 참고용 개수로 보여 줍니다. 실패하거나 확인되지 않은 항목을 현재 값, 권장 값과 함께 먼저 나열하고, 전체 목록은 섹션별로 펼쳐 볼 수 있습니다. 데이터는 Compliance API의 Security posture 엔드포인트(베타)에서 가져옵니다. 누가 확인했는지와 코멘트는 표시하지 않습니다.
  • 감사: Security posture 확인 내용이 바뀐 이벤트(org_security_control_attestation_updated)를 위험 이벤트로 분류합니다.
  • 추세: "제품별 활성 사용자"에 Claude Tag(Slack의 Claude) 활성 사용자를 별도 선으로 그립니다. Claude 계정을 연결하지 않은 사람까지 포함한 Slack 사용자 수라서 전체 활성 사용자보다 클 수 있고, 선에 사용자가 있을 때 이를 안내합니다.
  • 컬렉터가 계정을 연결한 사용자의 Claude Tag 활동일과 메시지 수를 claude_code_analytics의 새 컬럼 두 개로 보관하고, 챗봇의 SQL 도구도 이 컬럼을 압니다.
  • IP 허용 목록 대비. 조직 소유자가 조직을 IP 범위 목록으로 제한할 수 있게 됐고, 이 목록은 Compliance API에도 적용됩니다.
    • Anthropic이 서버 주소를 거부하면 모든 페이지에 이유를 알리는 배너를 띄우고, /api/health가 거부 시각을 알려 줍니다.
    • 컬렉터 Lambda를 대시보드 VPC 안에서 실행해 서버와 같은 NAT 게이트웨이 주소로 나가게 했습니다(infra/cdk.json의 collectorFixedEgress).
    • 허용할 주소와 복구 절차를 런북으로 정리했습니다.

변경

  • 비용 데이터를 Usage and Cost Analytics API(베타)에서 가져옵니다. 비용 페이지가 쓰던 리포트 네 개를 Anthropic이 2026-10-29에 legacy로 지정했습니다. 수치는 같습니다. 실데이터 비교에서 소수 여섯 자리까지 일치했습니다.
    • 새 API가 호출을 거부하면 서버가 기존 리포트로 다시 시도하고 그 조직을 30분 동안 기존 리포트에 둡니다. CCD_COST_API=legacy로 기존 리포트를 고정할 수 있습니다.
    • /api/cost/live가 어느 API로 응답했는지 cost_api로 알립니다.
  • 비용: Claude in Slack 제품 라벨을 추세 페이지와 같은 "Claude Tag (Slack)"로 바꿨습니다.

검증

  • 서버·구조 검사: 100건 통과 (비용 API 어댑터, 가짜 업스트림을 쓴 비용 라우트, 보안 태세 변환 함수, IP 허용 목록 감지의 새 테스트 포함)
  • 프런트엔드 회귀 테스트: 148건 통과
  • 데스크톱·모바일 브라우저 검사: 합성 API 응답으로 프로덕션 빌드에서 68건 통과 (보안 태세 카드와 Claude Tag 선 포함)
  • 독립 코드 리뷰에서 구조적 결함은 없었습니다. 지적된 네 가지(간헐적으로 실패하는 테스트 하나, 두 API를 반복해서 함께 부를 수 있는 폴백, 확인되지 않은 페이지 조회 경로, 통제 항목 값 안의 마스킹되지 않은 이메일)는 배포 전에 모두 고쳤습니다.
  • 실제 데이터(두 조직): 새 비용 API와 기존 리포트를 대시보드의 변환 코드에 넣은 결과가 같았습니다. 조직 합계, 모델별·제품별·RBAC 그룹별 사용자 지출, 사용자별 토큰을 비교했습니다. Security posture 엔드포인트도 두 조직 모두 결과를 돌려줬습니다.
  • 운영(2026-11-14): storage, collector, compute 스택을 배포했습니다. ECS 태스크 정의 :130, 두 태스크 모두 정상입니다. 배포 뒤 비용 캐시 예열이 두 조직 모두 실패 없이 끝났고, 기존 리포트로 폴백했다는 로그는 없습니다. 컬렉터는 VPC 안에서 한 번 실행해 오류가 없었고, Athena가 새 Claude Tag 컬럼을 읽습니다.
  • 확인하지 못한 것: 허용 목록이 켜져 있지 않아 IP 차단 배너를 실제 차단 상황에서 보지 못했습니다. 이 릴리스 소스에 든 ALB 오리진 검증 변경(infra/lib/compute-stack.ts)은 아직 CloudFormation으로 적용되지 않았습니다. 리스너 import가 먼저 필요하고, 라이브 리스너는 이미 헤더를 검사하고 있습니다.

v2.7.1 — Display fixes: billions, model versions, single-day dates, chart legends

Choose a tag to compare

@whchoi98 whchoi98 released this 31 Oct 03:38

English

A patch release of display fixes: large numbers, model names, single-day labels, chart legends and the Korean UI now read the way the data is. The public brochure gains a release timeline and a link-preview card.

Changed

  • Brochure: a release timeline at the bottom of the page lists the main versions, newest first, each linked to its release notes. Shared links now preview with a dedicated 1200×630 card (site/img/og.png, regenerated by scripts/generate-og-image.mjs). The preview had used a full-page dashboard screenshot, which link previews cropped.

Fixed

  • Large numbers now read in billions: 11.3 billion input tokens showed as 11317.7M, and values that round up to the next unit (such as 999,960) no longer read 1000.0k.
  • Model names keep their version dots: claude-opus-4-7 reads "opus 4.7" instead of "opus 4 7" on Cost, Agentic, User Search and the user detail panel, and Executive's top model no longer shows the raw id. One shared helper replaces the four copies.
  • Audit: the event-type and top-actor charts label every bar. Every other label had been hidden.
  • Korean UI: the Analyze page subtitle used the wrong particle after "Sonnet 5.5".
  • Overview: the lines-of-code hint and the tool acceptance chart named the day they show instead of saying "today". Both are one day: the end of the selected range, or the latest finished day when the range ends later.
  • Chart legends keep their text readable: legends had colored each label like its series, so pale series such as Rejected looked switched off. The color now stays on the legend dot.
  • Accepted and Rejected are translated in the Korean UI (Overview, Claude Code, user detail panel).
  • Claude Code: the acceptance-rate rings get one color each and a legend that names every tool with its rate. All rings had been the same color with only a percentage, so the rates could not be told apart.
  • Cost: the subtitle names the cost reports API when the page shows live data. It had always said "Spend Report", the label from when the page read only the CSV export.

Validation

  • Server and structure checks: 96 passed.
  • Frontend regression tests: 148 passed, including new boundary tests for compact numbers and model labels.
  • Desktop/mobile browser checks: 68 passed against the production build with synthetic API responses, including a test that the single-day labels follow the server's finalized date.
  • Each fix had an independent code review before it was deployed. Two regressions it found were fixed first: ring labels that overflowed short arcs, and an end-to-end test that did not exercise the server-clamped date.
  • Production: the fixes went out on 2026-10-29 (ECS task definitions :126 and :127). This release changes only the version label, deployed on 2026-10-31 (task definition :128, both tasks healthy).
  • Brochure: structural check 32 ok, content review 88/100, no horizontal overflow at 320–1600px.

한국어

표기 결함을 고친 패치 릴리스입니다. 큰 수, 모델명, 하루치 지표 날짜, 차트 범례, 한국어 UI가 데이터에 맞게 보입니다. 공개 브로셔에는 릴리스 기록과 링크 미리보기 카드를 더했습니다.

변경

  • 브로셔: 페이지 하단에 주요 버전을 최신 순으로 모은 릴리스 기록을 두고, 각 버전을 릴리스 노트로 연결했습니다. 링크를 공유할 때 보이는 미리보기 이미지는 1200×630 전용 카드(site/img/og.png, scripts/generate-og-image.mjs로 다시 생성)로 바꿨습니다. 그동안은 대시보드 전체 화면 캡처를 써서 미리보기에서 위아래가 잘렸습니다.

수정

  • 큰 수를 십억 단위로 표시합니다. 입력 토큰 113억 개가 11317.7M으로 보였고, 999,960처럼 다음 단위로 반올림되는 값이 1000.0k로 보이던 문제도 고쳤습니다.
  • 모델명의 버전 점을 살립니다. 비용, 에이전틱, 사용자 검색, 사용자 상세 패널에서 claude-opus-4-7이 "opus 4 7" 대신 "opus 4.7"로 보이고, 경영 요약의 최상위 모델도 원본 ID 대신 같은 이름으로 보입니다. 네 곳에 복제돼 있던 함수를 공용 함수 하나로 합쳤습니다.
  • 감사: 이벤트 유형·상위 행위자 차트가 모든 막대에 라벨을 붙입니다. 그동안 라벨이 한 칸씩 건너뛰어 숨겨졌습니다.
  • 한국어 UI: 분석 페이지 부제에서 "Sonnet 5.5" 뒤 조사를 바로잡았습니다.
  • 개요: 코드 라인 KPI 보조 문구와 도구 수락 차트가 "오늘" 대신 실제로 보여 주는 날짜를 표시합니다. 둘 다 하루치 값으로, 선택한 기간의 마지막 날(그날이 아직 확정되지 않았으면 가장 최근 확정일)입니다.
  • 차트 범례 글자를 읽기 쉽게 했습니다. 범례가 글자를 계열 색으로 칠해 '거절'처럼 연한 계열이 꺼진 토글처럼 보였습니다. 이제 색은 범례 점에만 남습니다.
  • 한국어 UI에서 Accepted·Rejected를 '수락'·'거절'로 번역합니다(개요, Claude Code, 사용자 상세 패널).
  • Claude Code: 도구별 수락률 링에 각각 다른 색을 주고, 도구 이름과 수락률을 담은 범례를 붙였습니다. 링이 모두 같은 색에 수치만 있어 어느 값이 어느 도구인지 알 수 없었습니다.
  • 비용: 라이브 데이터일 때 부제에 비용 리포트 API를 밝힙니다. CSV만 읽던 시절의 "Spend Report" 라벨이 늘 붙어 있었습니다.

검증

  • 서버·구조 검사 96건 통과.
  • 프런트엔드 회귀 테스트 148건 통과(축약 숫자와 모델명 경계 테스트 추가).
  • 데스크톱·모바일 브라우저 검사 68건 통과. 운영 빌드와 합성 API 응답으로 실행했으며, 하루치 지표 날짜가 서버의 확정일을 따르는지 확인하는 테스트가 포함됩니다.
  • 각 수정은 배포 전에 독립 코드 리뷰를 거쳤습니다. 리뷰가 찾은 회귀 두 건(짧은 호에서 넘치던 링 라벨, 서버가 조정한 날짜를 검증하지 않던 E2E 테스트)을 먼저 고쳤습니다.
  • 운영: 수정 사항은 2026-10-29에 배포됐습니다(ECS 태스크 정의 :126, :127). 이번 릴리스에서 바뀐 앱 코드는 버전 표기뿐이며, 2026-10-31에 배포했습니다(태스크 정의 :128, 두 태스크 정상).
  • 브로셔: 구조 검사 32건 통과, 콘텐츠 리뷰 88점, 320–1600px에서 가로 넘침 없음.

v2.7.0 — Chat and Cowork unified, group activity, plugin catalog, artifacts

Choose a tag to compare

@whchoi98 whchoi98 released this 29 Oct 09:48

English

The dashboard now reads Chat and Cowork unified, the new product that people's chat and Cowork activity moves to. The release also adds group activity, a members-and-instructions card, a plugin catalog and an artifacts card.

Added

  • Chat and Cowork unified: the dashboard now reads the new chat_cowork_unified product. People on the unified experience report most of their chat and Cowork activity there instead of under chat and Cowork, so the Chat and Cowork pages had been dropping toward zero as people moved. The second organization had moved entirely by October.
    • Chat, Cowork, Users, User Productivity, User Search, Agentic, Adoption and the user detail panel count unified activity together with chat and Cowork. A note says how much of the window came through unified.
    • Trends and Cowork chart unified active users as a separate line. One person can be counted on both sides, so the two are not added.
    • Cost labels the chat_cowork_unified product.
    • The collector archives the unified fields in new columns, and the chatbot's SQL tool knows about them.
  • User Productivity: an "Activity by group" table compares RBAC groups over the selected range.
  • Audit: a "Members and custom instructions" card shows members by built-in role and how many saved Instructions for Claude or Cowork global instructions. Only administrators in the unmasked group see the text itself.
  • Adoption:
    • a plugin catalog from the Plugins API (beta) with install policy, available updates and scan status
    • an artifacts card: artifacts created per product and type, and how many were shared or published. The collector archives artifacts daily in a new artifacts_daily table.

Changed

  • Per-user cost and usage reports now read actor.email_address, and activity summaries read data. API version 2026-10-21 removes the older actor.email and summaries fields; the API already returns both replacements.

Validation

  • Server and structure checks: 96 passed (new suites for the unified readers and the directory and catalog shapers, plus a check of every archived column against the Glue table definitions).
  • Frontend regression tests: 144 passed.
  • Desktop/mobile browser checks: 66 passed against the production build with synthetic API responses, including unified folding and the four new cards.
  • An independent code review found no critical or major issues; its six minor findings were fixed before the deploy.
  • Real data: the unified field shapes were taken from the archived raw responses (second organization, 2026-10-25: chat and Cowork daily active users 0, unified 1–5). A collector run on 2026-10-26 archived artifacts for both organizations, and Athena reads the new unified columns (the second organization: chat messages 0, unified chat messages 14).
  • Production (2026-10-29): storage, collector and compute stacks deployed; ECS task definition :124, both tasks healthy; the Glue tables were updated in place.
  • Not yet exercised against the live API: the group rollup, the members-and-instructions listing and the plugin catalog. Each card shows a "not available" state if its request fails.

한국어

사람들의 채팅·Cowork 활동이 옮겨 가고 있는 새 제품 Chat·Cowork 통합을 대시보드가 읽습니다. 그룹별 활동, 멤버와 지침 카드, 플러그인 카탈로그, 아티팩트 카드도 추가했습니다.

추가

  • Chat·Cowork 통합(Chat and Cowork unified): 새 제품 값 chat_cowork_unified를 읽습니다. 통합 환경으로 옮긴 사람은 채팅과 Cowork 활동 대부분이 기존 chat·Cowork가 아닌 이 제품으로 집계돼, 전환이 진행될수록 Chat·Cowork 페이지 수치가 0에 가까워지고 있었습니다. 두 번째 조직은 10월에 완전히 전환됐습니다.
    • Chat, Cowork, 사용자, 사용자 생산성, 사용자 검색, Agentic, 도입 페이지와 사용자 상세 패널이 통합 활동을 chat·Cowork와 함께 집계합니다. 기간 중 통합에서 나온 비중을 안내 문구로 보여 줍니다.
    • 추세와 Cowork 페이지는 통합 활성 사용자를 별도 선으로 그립니다. 한 사람이 양쪽에 함께 집계될 수 있어 둘을 더하지 않습니다.
    • 비용 페이지에 chat_cowork_unified 제품 라벨을 추가했습니다.
    • 컬렉터가 통합 필드를 새 컬럼으로 보관하고, 챗봇의 SQL 도구도 이 컬럼을 압니다.
  • 사용자 생산성: 선택한 기간의 RBAC 그룹별 활동을 비교하는 "그룹별 활동" 표를 추가했습니다.
  • 감사: 기본 역할별 멤버 수와 "Claude에 대한 지침"·Cowork 전역 지침을 저장한 멤버 수를 보여 주는 "멤버와 사용자 지정 지침" 카드를 추가했습니다. 지침 원문은 unmasked 그룹의 관리자에게만 보입니다.
  • 도입:
    • Plugins API(beta)의 플러그인 카탈로그: 설치 정책, 업데이트 여부, 검사 상태
    • 아티팩트 카드: 제품·유형별로 생성된 아티팩트와 그중 공유·게시된 수. 컬렉터가 아티팩트를 매일 새 artifacts_daily 테이블로 보관합니다.

변경

  • 사용자별 비용·사용량 리포트는 actor.email_address를, 활동 요약은 data를 읽습니다. API 버전 2026-10-21에서 기존 actor.email·summaries 필드가 빠지며, 대체 필드는 이미 API가 함께 돌려주고 있습니다.

검증

  • 서버·구조 검사: 96건 통과 (통합 헬퍼, 디렉터리·카탈로그 가공 함수의 새 테스트와, 보관하는 모든 컬럼을 Glue 테이블 정의와 대조하는 검사 포함)
  • 프런트엔드 회귀 테스트: 144건 통과
  • 데스크톱·모바일 브라우저 검사: 합성 API 응답으로 프로덕션 빌드에서 66건 통과 (통합 합산과 신규 카드 4종 포함)
  • 독립 코드 리뷰에서 critical·major 문제는 없었고, minor 6건은 배포 전에 모두 고쳤습니다.
  • 실제 데이터: 통합 필드 구조는 보관된 원본 응답으로 확인했습니다(두 번째 조직, 2026-10-25: chat·Cowork 일간 활성 사용자 0, 통합 1~5명). 2026-10-26 컬렉터 실행에서 두 조직 모두 아티팩트가 보관됐고, Athena가 새 통합 컬럼을 읽습니다(두 번째 조직: chat 메시지 0, 통합 chat 메시지 14).
  • 운영(2026-10-29): storage·collector·compute 스택을 배포했습니다. ECS 태스크 정의 :124, 두 태스크 모두 정상이며 Glue 테이블은 교체 없이 제자리 갱신됐습니다.
  • 아직 실제 API로 확인하지 못한 것: 그룹 집계, 멤버·지침 목록, 플러그인 카탈로그. 요청이 실패하면 각 카드는 "불러올 수 없음"으로 표시됩니다.

v2.6.0 — Chatbot on Claude Sonnet 5.5

Choose a tag to compare

@whchoi98 whchoi98 released this 29 Oct 09:35

English

The chatbot now runs on Claude Sonnet 5.5.

Changed

  • Chatbot (Analyze page and floating chat): the model moved from Claude Sonnet 4.6 to Claude Sonnet 5.5 (global.anthropic.claude-sonnet-5-5 inference profile). The follow-up question generator uses the same model.
    • Requests no longer send temperature. Sonnet 5.5 rejects non-default sampling values.
    • Extended thinking stays off (between_tools). Chat runs at effort medium. Without these settings Sonnet 5.5 would think by default, and the follow-up call's small token budget would run out before its JSON.
    • Sonnet 5.5 returns longer notes between tool calls as reasoning blocks. The chat stream shows them like before and sends them back unchanged on the next tool hop.
    • A declined request now shows a status message instead of an empty answer.

Validation

  • Server and structure checks: 94 passed (chat tools suite: 60 passed, 4 new).
  • Frontend regression tests: 144 passed.
  • Desktop/mobile browser checks: 62 passed against the production build with synthetic API responses.
  • Live Bedrock calls to global.anthropic.claude-sonnet-5-5 in ap-northeast-2, made before the deploy: the follow-up request returned three parsed questions. The tool loop also completed with parallel calls and with sequential calls. In the sequential run, a between-tool note came back as a reasoning block and was sent back on the next hop.
  • Production (2026-10-29): the code shipped in commit 989605e as ECS task definition :123. Both tasks run one image digest and are healthy, with no error logs after the rollout. The sidebar shows 2.6.0 after the next deploy.
  • Not verified: that Bedrock reports a Sonnet 5.5 refusal as content_filtered. A refusal could not be reproduced.

한국어

챗봇 모델이 Claude Sonnet 5.5로 바뀌었습니다.

변경

  • 챗봇(분석 페이지·플로팅 채팅): 모델을 Claude Sonnet 4.6에서 Claude Sonnet 5.5(global.anthropic.claude-sonnet-5-5 inference profile)로 바꿨습니다. 후속 질문 생성도 같은 모델을 씁니다.
    • 요청에서 temperature를 뺐습니다. Sonnet 5.5는 기본값이 아닌 sampling 값을 거부합니다.
    • 확장 사고(extended thinking)는 끈 상태(between_tools)로 두고, 채팅은 effort medium으로 실행합니다. 이 설정이 없으면 Sonnet 5.5가 기본으로 사고를 켜서, 후속 질문 호출의 작은 토큰 예산이 JSON보다 먼저 소진됩니다.
    • Sonnet 5.5는 도구 호출 사이의 긴 메모를 reasoning 블록으로 돌려줍니다. 채팅 스트림은 이를 전처럼 보여 주고, 다음 도구 호출 단계에 그대로 다시 보냅니다.
    • 요청이 거절되면 빈 답변 대신 상태 메시지를 보여 줍니다.

검증

  • 서버·구조 검사: 94건 통과 (챗 도구 테스트 60건, 신규 4건)
  • 프런트엔드 회귀 테스트: 144건 통과
  • 데스크톱·모바일 브라우저 검사: 합성 API 응답으로 프로덕션 빌드에서 62건 통과
  • 배포 전 ap-northeast-2에서 global.anthropic.claude-sonnet-5-5를 직접 호출했습니다. 후속 질문 요청은 질문 3개를 정상 파싱했습니다. 도구 호출 루프는 병렬 호출과 순차 호출 모두 끝까지 완료됐고, 순차 호출에서 도구 사이 메모가 reasoning 블록으로 와서 다음 단계에 그대로 다시 보내졌습니다.
  • 운영(2026-10-29): 커밋 989605e의 코드를 ECS 태스크 정의 :123으로 롤아웃했습니다. 두 태스크가 같은 이미지 다이제스트로 정상 동작하며, 롤아웃 이후 오류 로그는 0건입니다. 사이드바의 2.6.0 표기는 다음 배포 후 반영됩니다.
  • 검증하지 못한 것: Bedrock이 Sonnet 5.5의 거절을 content_filtered로 보고하는지는 거절을 재현하지 못해 확인하지 못했습니다.

v2.5.1 — Claude Code label format, chatbot paragraph breaks

Choose a tag to compare

@whchoi98 whchoi98 released this 05 Oct 09:20

English

A patch release with two display fixes found while refreshing the public brochure's screenshots.

Fixed

  • Claude Code: the "Acceptance Rates" radial labels printed raw floats (for example 78.00417…). They now show one decimal and a percent sign, like the tooltip.
  • Chatbot: text streamed before a tool call ran straight into the next hop's answer, so a heading such as ## Top 5 rendered inline. The stream now puts a paragraph break before each new text block. The text sent back to the model is unchanged.

Validation

  • Server and structure checks: 94 passed (chat tools suite: 56 passed, 4 new).
  • Frontend regression tests: 144 passed.
  • Desktop/mobile browser checks: 62 passed against the production build with synthetic API responses.
  • Production (2026-10-05): rolled out as ECS task definition :122; both tasks run one image digest and are healthy, with no error logs after the rollout.

한국어

공개 브로셔 스크린샷을 새로 만들다 발견한 표시 문제 두 가지를 고친 패치 릴리스입니다.

수정

  • Claude Code: "도구별 수락률" 원형 차트 라벨이 78.00417…처럼 원시 소수로 나오던 문제를 고쳤습니다. 툴팁처럼 소수 첫째 자리 퍼센트로 표시합니다.
  • 챗봇: 도구 호출 전에 스트리밍된 문장이 다음 단계 답변과 붙어 ## Top 5 같은 제목이 본문처럼 보이던 문제를 고쳤습니다. 새 텍스트 블록 앞에 문단 구분을 넣어 스트리밍하며, 모델에 다시 보내는 대화 내용은 바뀌지 않습니다.

검증

  • 서버·구조 검사: 94건 통과 (챗 도구 테스트 56건, 신규 4건)
  • 프런트엔드 회귀 테스트: 144건 통과
  • 데스크톱·모바일 브라우저 검사: 합성 API 응답으로 프로덕션 빌드에서 62건 통과
  • 운영(2026-10-05): ECS 태스크 정의 :122로 롤아웃했습니다. 두 태스크가 같은 이미지 다이제스트로 정상 동작하며, 롤아웃 이후 오류 로그는 0건입니다.

v2.5.0 — API updates: per-product adoption, lighter audit traffic, admin-only archived names

Choose a tag to compare

@whchoi98 whchoi98 released this 26 Sep 03:28

English

This release follows the latest Claude Enterprise Analytics and Compliance API changes. It adds per-product adoption and skill/connector detail, cuts the dashboard's own Compliance traffic by about 90%, and makes audit file and artifact names archived before 2026-09-24 visible to administrators only.

Added

  • Trends: active users by product (Claude Code, Chat, Cowork, Claude Design, Office Agents, Claude Science) with a DAU/WAU/MAU switch. The data comes from per-product fields the summaries endpoint already returns. Products an organization doesn't report are not drawn.
  • Adoption:
    • skill display names
    • a skill usage and spend table: invocations, share status, estimated overage spend, attributed list-price value
    • a connector tool-call table: read, write and unclassified calls, write share, managed-auth users
    • a labeled third-party plugin bucket
  • Cost: Office Agents and Claude in Slack labels.

Changed

  • Audit:
    • Risk and login classification now follows the Compliance API's activity types. Before this, the Login KPI counted nothing.
    • All 11 actor kinds are identified instead of "unknown", including admin keys, service accounts, SCIM, federated identities and Anthropic access.
    • File and artifact events explain that names are no longer returned (2026-09-24).
  • Audit: live walks request 1000-event pages with the documented last_id cursor, about 10× fewer Compliance requests and self-generated audit events. Past custom windows use a server-side created_at range and now show their events.
  • Audit archive: file and artifact names (and published-artifact descriptions) archived before 2026-09-24 are visible to administrators (the unmasked group) only. Archive queries and the chatbot read compliance_daily_redacted views for everyone else. The stored data is unchanged.
  • Collector: the daily audit archive fetches each UTC day as a bounded query, about 3 requests per day instead of 110–150 per run. It writes a day only once it is complete and no longer overwrites pre-2026-09-24 partitions that may still hold file names.
  • Chatbot:
    • Follow-up suggestions use structured output, and answers can run to 16k tokens.
    • The cost tool no longer claims per-user cost is unavailable.
    • Tool routing lives in the tool descriptions only.
    • The compliance schema hint covers actor kinds, the name removal and what *_viewed events mean.

Fixed

  • Summaries: the exclusive ending_date was sent as inclusive, so every window dropped its newest day and the 1d preset sent a zero-width range.
  • Archive-served days reported 0 for Claude Chat project counts. User rows are now read from the raw sidecar.
  • Cost totals and the daily trend skipped code-execution spend (rows with no product and model). Its execution-span counts stay out of the request KPI.
  • Users pagination stopped after the first page because engagement responses carry no has_more.
  • Archive query and chatbot SQL error messages are now email-masked like result rows. Athena errors can quote row values.
  • Spend limits: a $0 cap counts as at-limit, and each member keeps one row (monthly first) even if other periods appear.

Validation

  • Server and structure checks: 94 passed (SQL sanitizer suite: 30 passed).
  • Frontend regression tests: 144 passed.
  • Desktop/mobile browser checks: 62 passed against the production build with synthetic API responses.
  • Production (2026-09-26):
    • Audit prewarm cold walk dropped from 56–60 s to about 6 s.
    • Name-redacted Athena views return 0 file names, titles or artifact descriptions across 939,634 archived events. Row counts are unchanged.
    • The new collector archived two days per organization in 3 pages each, with unchanged event counts.

한국어

최신 Claude Enterprise Analytics·Compliance API 변경을 반영한 릴리스입니다. 제품별 도입 현황과 스킬·커넥터 상세를 추가했고, 대시보드 자체의 Compliance 요청을 약 90% 줄였습니다. 2026-09-24 이전에 보관된 감사 파일·아티팩트 이름은 관리자만 볼 수 있게 했습니다.

추가

  • 추세: 제품별 활성 사용자 차트를 추가했습니다(Claude Code, Chat, Cowork, Claude Design, Office Agents, Claude Science). DAU/WAU/MAU를 전환할 수 있고, summaries가 이미 주던 제품별 필드를 씁니다. 조직에 보고되지 않는 제품은 그리지 않습니다.
  • 도입:
    • 스킬 표시 이름
    • 스킬 사용·지출 표: 호출 수, 공유 범위, 초과 지출 추정, 정가 가치
    • 커넥터 도구 호출 표: 읽기·쓰기·미분류 호출, 쓰기 비중, 관리형 인증 사용자
    • third-party 플러그인 집계 버킷 표시
  • 비용: Office Agents, Claude in Slack 라벨을 추가했습니다.

변경

  • 감사:
    • 위험·로그인 분류가 Compliance API의 활동 타입을 따릅니다. 이전에는 로그인 KPI가 한 건도 세지 못했습니다.
    • 행위자 11종을 'unknown' 대신 각각 식별합니다(admin 키, 서비스 계정, SCIM, 페더레이션, Anthropic 접근 등).
    • 파일·아티팩트 이벤트에는 이름이 더 이상 제공되지 않는다는 안내를 표시합니다(2026-09-24).
  • 감사 조회: 라이브 워크가 1000건 페이지와 문서화된 last_id 커서를 씁니다. Compliance 요청과 자체 감사 이벤트가 약 10분의 1로 줄었습니다. 과거 사용자 지정 기간은 서버측 created_at 범위로 조회해서 해당 기간의 이벤트가 표시됩니다.
  • 감사 아카이브: 2026-09-24 이전에 보관된 파일·아티팩트 이름(게시된 아티팩트 설명 포함)은 관리자(unmasked 그룹)만 봅니다. 그 밖의 사용자는 아카이브 질의와 챗봇에서 compliance_daily_redacted 뷰를 읽습니다. 저장된 데이터는 바꾸지 않았습니다.
  • collector: 일일 감사 아카이브를 UTC 하루씩 경계 쿼리로 받습니다. 요청이 실행당 110~150건에서 하루 약 3건으로 줄었습니다. 완결된 날짜만 쓰고, 파일 이름이 남아 있을 수 있는 2026-09-24 이전 파티션은 덮어쓰지 않습니다.
  • 챗봇:
    • 후속 질문 제안에 structured output을 쓰고, 답변 최대 길이를 16k 토큰으로 늘렸습니다.
    • 비용 도구가 더 이상 사용자별 비용이 없다고 답하지 않습니다.
    • 도구 선택 기준은 도구 설명에만 둡니다.
    • compliance 스키마 힌트에 행위자 종류, 이름 제공 중단, *_viewed 이벤트의 의미를 반영했습니다.

수정

  • summaries: 배타 경계인 ending_date를 포함 경계로 보내서, 모든 기간에서 최신일이 빠지고 1d 프리셋은 폭이 0인 요청이 되던 문제를 고쳤습니다.
  • 아카이브에서 서빙하는 날짜의 Claude Chat 프로젝트 수가 0으로 나오던 문제를 고쳤습니다. 이제 사용자 행을 raw 사이드카에서 읽습니다.
  • 비용 합계와 일별 추세에서 코드 실행 비용(제품·모델이 없는 행)이 빠지던 문제를 고쳤습니다. 실행 구간 수는 요청 수 KPI에 넣지 않습니다.
  • 사용자 목록 페이지네이션이 engagement 응답에 has_more가 없어 첫 페이지에서 멈추던 문제를 고쳤습니다.
  • 아카이브 질의와 챗봇 SQL의 오류 메시지도 결과 행처럼 이메일을 마스킹합니다. Athena 오류에는 행 값이 인용될 수 있습니다.
  • 지출 한도: $0 한도를 한도 도달로 집계하고, 다른 기간의 한도 행이 와도 멤버마다 한 행(월 단위 우선)만 남깁니다.

검증

  • 서버·구조 검사 94개 통과(SQL 검사기 30개 통과).
  • 프런트엔드 회귀 테스트 144개 통과.
  • 프로덕션 빌드와 합성 API 응답으로 데스크톱·모바일 브라우저 검사 62개 통과.
  • 운영 확인(2026-09-26):
    • 감사 prewarm의 콜드 워크가 56~60초에서 약 6초로 줄었습니다.
    • 이름 가림 Athena 뷰에서 보관 이벤트 939,634건 전체에 파일명·제목·아티팩트 설명이 0건입니다. 행 수는 원본과 같습니다.
    • 새 collector가 org별 이틀치를 날짜당 3페이지로 아카이브했고, 이벤트 수는 그대로였습니다.

v2.4.0 — Navigation, CSV exports and reliable data loading

Choose a tag to compare

@whchoi98 whchoi98 released this 22 Sep 00:16

English

This release adds faster page navigation, filtered CSV exports and keyboard support, and hardens organization-scoped requests and chat cancellation.

Added

  • Search dashboard pages with Ctrl/⌘+K and Enter. Organization and group scope carry over during navigation.
  • Export filtered, sorted Users and Cost Live tables as UTF-8 CSV with the same email visibility as the screen and spreadsheet-formula protection.
  • Localized retry controls, keyboard table sorting, mobile focus management, and automated frontend/browser regression tests.

Fixed

  • Isolate Cost Live's last successful response by organization and prevent old snapshot times appearing during a date switch. Search totals follow the displayed rows.
  • Validate custom dates and keep calendar labels in UTC. Cancel/Escape restores picker focus.
  • Cancel obsolete API requests, handle malformed responses and timeouts, and wait for refetch completion. Late callbacks from previous organizations or windows cannot interrupt current requests.
  • Prevent Korean IME confirmation from sending a chat message. Stop/reset/navigation revoke stream ownership so late responses cannot repopulate another conversation.
  • Recover from blocked browser storage, select only the active changelog language, and keep audit filters and long Markdown content within mobile screens.

Changed

  • Load each page and the floating chat panel on demand, with recovery around page rendering.
  • Pause automatic cost refreshes while hidden, viewing history, or waiting for a request.
  • Update security fixes in the build, router, upload and query-parser dependencies while retaining Node 20 and React 18 compatibility.
  • Synchronize README, API, architecture, onboarding and module guides; add a documentation index, Codex contributor guidance and ADR-0021 for frontend recovery and exports.

Validation

  • Server and structure checks: 91 passed.
  • Frontend regression tests: 144 passed.
  • Desktop/mobile browser checks: 56 passed against the production build with synthetic API responses.
  • Node 20-compatible production build; root dependency audit: 0 vulnerabilities at verification time.

한국어

메뉴 탐색, 검색 결과 CSV 내보내기와 키보드 사용성을 추가하고 조직별 조회·채팅 취소를 보강한 릴리스입니다.

추가

  • Ctrl/⌘+K와 Enter를 이용한 메뉴 검색·이동. 조직·그룹 선택 유지.
  • 사용자·비용 실시간 표의 검색·정렬 결과를 UTF-8 CSV로 다운로드. 화면과 같은 이메일 공개 범위와 수식 실행 방지 적용.
  • 조회 재시도, 키보드 정렬, 모바일 메뉴 포커스 관리, 프런트엔드·브라우저 회귀 테스트.

수정

  • 비용 실시간의 마지막 성공 응답을 조직별로 분리하고, 날짜 변경 중 이전 스냅샷 시간이 표시되는 문제 수정. 표 합계는 검색된 행 기준으로 계산.
  • 직접 입력한 날짜 검증과 UTC 날짜 표시. 취소·Escape로 날짜 선택기 포커스 복귀.
  • 오래된 조회 취소, 응답 형식·시간 초과 처리, 실제 완료까지 기다리는 재조회. 이전 조직·기간의 지연 콜백이 현재 조회를 중단하지 않도록 보강.
  • 한국어 조합 확정 Enter의 채팅 전송 방지. 중지·초기화·화면 이동 후 오래된 응답이 대화를 다시 채우지 않도록 처리.
  • 브라우저 저장소 접근 제한 시 시작 실패, 변경 내역의 언어별 분리, 모바일 감사 필터·긴 Markdown 콘텐츠 넘침 수정.

변경

  • 화면과 플로팅 채팅 패널을 사용할 때 불러오고, 화면 오류 발생 시 메뉴를 유지하며 복구 동작 제공.
  • 숨겨진 탭·과거 조회·진행 중 요청에서는 실시간 비용 자동 갱신을 일시 중지.
  • Node 20·React 18 호환 범위에서 빌드·라우터·업로드·쿼리 파서 의존성 보안 패치 적용.
  • README·API·아키텍처·온보딩·모듈 안내를 동기화하고, 문서 목차·Codex 작업 안내·프런트엔드 복구와 내보내기를 기록한 ADR-0021 추가.

검증

  • 서버·구조 검사 91항목 통과.
  • 프런트엔드 회귀 테스트 144개 통과.
  • 프로덕션 빌드의 데스크톱·모바일 브라우저 검사 56개 통과(샘플 API 사용).
  • Node 20 호환 빌드, 검증 시점 루트 의존성 취약점 0건.

Full changelog: v2.3.0...v2.4.0

v2.3.0 — Cost Live MTD History (15-min Snapshot Archive + EOD Reconstruction)

Choose a tag to compare

@whchoi98 whchoi98 released this 01 Sep 22:38

See CHANGELOG.md for the full narrative.

Added

  • MTD snapshot archive + history view on Cost Live — the Spend Limits API has no history parameters, so the server now archives each org's payload to S3 every 15 minutes (spend_mtd/date=…/HHMM.json, 15-min slots dedupe the two Fargate tasks). New /api/cost/spend-limits/snapshots + /at endpoints; the page gains a date picker, archived-times dropdown, snapshot stamp, and a Back-to-Live button (auto-refresh freezes on history views). Intraday history begins at this deploy.
  • End-of-day reconstruction for pre-archive dates — approximated from user_cost_report (month-start → date, approx: true banner; no limits/utilization). Verified against cost_report's month total to the cent.

Fixed (caught by the pre-deploy adversarial review)

  • View-transition payload mismatch — old numbers no longer flash under a new view's labels.
  • "Live" badge no longer renders on archived/reconstructed views.

Changed

  • Cost Live wording: near-real-time/거의 실시간 → real-time/실시간.

v2.2.0 — Cost Live (MTD) · Dynamic Freshness Horizon · v2.2 Data Expansion

Choose a tag to compare

@whchoi98 whchoi98 released this 01 Sep 16:17

See CHANGELOG.md for the full narrative.

Added

  • Cost Live (MTD) page (/cost-live, sidebar '비용 실시간') — per-member calendar-month spend from the near-real-time Spend Limits API (the Console's own source), with an MTD total KPI, a sortable all-members table + total row, group scoping, and a 60s auto-refresh that bypasses the server TTL (?fresh=1, 15s floor, fetched_at stamp, stale degrade on failure).
  • Dynamic engagement finalization horizon (server/freshness.js) — the today−3 clamp is now learned per org (typically today−2): hourly probe + 400 named-day parsing; /api/health reports live bufferDays; multi-day presets gain a day of freshness automatically.
  • v2.2 analytics data expansion — plugins collection (plugins_daily + /plugins/range + Adoption card), cowork plugin/artifact counters, last_activity_date.
  • Identity-aware email masking (ADR-0020) — Cognito unmasked group sees raw emails; fails closed to masked.
  • iOS/iPadOS installable PWA (manifest-only; deliberately no service worker).

Fixed

  • Long custom windows' live cost queries no longer collapse under 429s (limit=31 daily-bucket pages + jittered retry ladder — the 2026-08-27 incident).

v2.0.4 — Console MTD column on the Cost page

Choose a tag to compare

@whchoi98 whchoi98 released this 10 Aug 21:08

The Cost page's Top-10 estimated-cost table now shows the Anthropic Console's month-to-date number next to each user.

Why: "the dashboard's estimated cost differs from the Claude Code admin console ($972 MTD there)" — root-caused live against both upstream systems. The Console member list reads the Spend Limits system (period_to_date_spend — near-real-time, calendar month), while the dashboard's per-user cost reads the Analytics user_cost_report (range-windowed, ~4h watermark, 30-day correction). During the investigation the Console figure ticked $975.00 → $976.63 within minutes while user_cost_report still summed $546 — the entire gap was post-watermark usage by a currently-active user. Neither number is wrong; they answer different questions at different freshness.

Added

  • MTD column on "Top 10 by Estimated Cost", joined by lower-cased email from the already-fetched /api/cost/spend-limits — the same figure the Console shows, so freshness/window gaps are self-explanatory on one screen. Missing members render —; a failed spend-limits fetch just drops the column. Caveat line + en/ko i18n keys.

Fixed

  • Caveat pairing sentence gated on the live source — the pre-deploy adversarial review confirmed it would contradict the adjacent CSV-fallback caveats whenever the live per-user report flaps (spend-limits rides its own keep-warm cache and stays populated through exactly those flaps). The sentence now renders only when live user_cost_report rows are the actual source.

Full changelog: CHANGELOG.md