Conversation
Introduce opaque CLI tokens (cli_<hex>) as a replacement for short-lived Supabase JWTs in CLI authentication. Tokens are stored as SHA-256 hashes in the database with 30-day TTL, revocation support, and last_used_at tracking. A unified authenticateRequest() routes by token prefix (cli_* vs eyJ*) for dual-path support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Device authorize route now creates CLI tokens instead of passing Supabase session tokens. Token polling returns cli_* tokens with 30-day expiry. The /me and /analysis/user endpoints use authenticateRequest() for unified CLI + web authentication. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CLI now stores long-lived cli_* tokens via system keychain (keytar). Legacy Supabase JWTs (eyJ* prefix) are detected and cleared with a one-time upgrade prompt. Token store simplified to single access_token (no refresh token needed for 30-day CLI tokens). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extend enterprise types with MemberTokenUsage, MemberAntiPattern, MemberProjectActivity, MemberGrowthSnapshot, and team-level aggregates. Mock data factory generates 12 members across 2 teams with realistic distributions. Hooks provide useMember(), useOrgAntiPatterns(), and other data accessors ready for API replacement. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New components for the enterprise overview dashboard: - GrowthLeaderboard: ranked member table with MoM/WoW deltas and filters - TokenUsagePanel: per-member token consumption metrics - AntiPatternHeatmap: horizontal bar chart of anti-pattern distribution - TeamStrengthsPanel: aggregated domain strengths across team - ProjectActivityFeed: recent project activity timeline - MemberProfileHeader: individual member identity + score + growth - MemberDimensionChart: radar-style dimension scores for a member - MemberAntiPatternList: per-member anti-pattern breakdown Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enterprise overview redesigned with 5 manager-actionable sections: GrowthLeaderboard, TokenUsagePanel, AntiPatternHeatmap, TeamStrengths, ProjectActivityFeed. New dynamic [memberId] route provides individual member drill-down with profile header, dimension chart, anti-pattern list, and project activity. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…hat display Terminal radar chart replaced with horizontal bar chart renderer for reliable cross-terminal rendering. New ChatDisplay class provides LLM-style streaming animation for live analysis results with progressive discovery messages, typing indicators, and milestone-based bear expressions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Lambda analysis handler now validates CLI tokens (cli_*) alongside Supabase JWTs. Landing footer and download section receive minor layout adjustments. Analysis orchestrator updated for compatibility with deterministic scoring pipeline changes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Collaborator
Author
🔍 Automated Code Review — Ship-It Phase 7Reviewed by: 5 parallel agents (CLAUDE.md compliance, bug scan, git history, prior PR patterns, code comments) Issues Found (2 actionable, 3 informational)🟡 Actionable (score ≥ 80)1. Korean text in Slack notification — score: 85
2. Silent catch without error logging — score: 90
ℹ️ Informational (score < 80, non-blocking)
Summary
🤖 Generated with Claude Code |
sungmanch
added a commit
that referenced
this pull request
Feb 10, 2026
- Translate Korean Slack notification to English (CLAUDE.md language policy) - Add error logging in JWT validation catch block (No Fallback Policy) - Replace non-null assertion with nullish coalescing for expires_in - Add .catch() to fire-and-forget last_used_at updates in both cli-token.ts and lambda/analysis.ts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
cli_<hex>) with SHA-256 hashed storage, replacing short-lived Supabase JWTs. UnifiedauthenticateRequest()supports both token types across all API endpoints and Lambda.[memberId]drill-down page with profile header, dimension chart, and anti-pattern list.Changes
feat(auth): CLI token infrastructure (cli-token.ts, authenticate-request.ts, migration)feat(api): Device flow + token + /me + /analysis/user updated for CLI tokensfeat(cli): Token store simplified, legacy JWT upgrade pathfeat(enterprise): Types, mock data (12 members/2 teams), hooksfeat(enterprise): 8 new UI components (leaderboard, heatmap, profiles, etc.)feat(enterprise): Dashboard overview + member detail pagesrefactor(cli): Bar chart renderer + ChatDisplay streaming enginefeat: Lambda CLI token auth + minor UI/pipeline tweaksTest Plan
npx tsc --noEmit)npx no-ai-slop→ sign in → token stored in keychain/dashboard/enterpriserenders overview with mock data/dashboard/enterprise/members/[id]renders profileGenerated with Claude Code using /ship-it