Repository navigation
App v1 Issue #6: 仪表盘 installation 列表 + 切换 #177
Copy link
Copy link
Closed
Labels
acceptedAccepted for development (Module 4 trigger)Accepted for development (Module 4 trigger)accepted-by-claudeClaude self-acceptance after clarify loop (Module 4 trigger, distinct from maintainer accepted)Claude self-acceptance after clarify loop (Module 4 trigger, distinct from maintainer accepted)stage:failedA module failed; needs maintainer triageA module failed; needs maintainer triagetest:retry-3Auto-retry 3/3: re-running Module 4 with test feedbackAuto-retry 3/3: re-running Module 4 with test feedbacktriageNewly opened; awaiting triage botNewly opened; awaiting triage bottype:featureNew capabilityNew capabilityverifiedModule 5 self-verify passedModule 5 self-verify passedverify:retry-3Verify retry 3/3: self-verify failed, re-running Module 4 to fixVerify retry 3/3: self-verify failed, re-running Module 4 to fix
Description
Summary
App v1 仪表盘第一块:列用户可访问的 installation + 点击进入详情页 + "Set as active" cookie 切换。
PRD 用户故事:US-001(安装 App 后 30 秒看到 dashboard 列已授权 repo)。
Acceptance Criteria
/dashboard显示用户 GitHub/user/installations列表,每行交叉 DBinstallations表显示 repoFullName / runs count / installedAt- 缺失 DB 行(webhook 未到位)时优雅降级显示 "Webhook pending"
/dashboard/installations/[id]显示该 installation 元数据 + 最近 10 个 runs- 详情页每次访问都重新通过 GitHub API 校验 session 用户仍能访问该 installation(防 IDOR)
- "Set as active" server action 写 1 年 cookie
gitautodev_active_installation - cookie httpOnly + sameSite=lax + production secure
- SSE live updates 留 Issue fix: replace div click target with semantic button for Safari compatibility #7,本期不做
pnpm typecheck / lint / build全绿
Out of scope
- SSE live updates(Issue fix: replace div click target with semantic button for Safari compatibility #7)
- BYOK 配置 UI(Issue make the app faster #8)
- 用量计费页(Issue Add export functionality #9)
- Stripe(Issue Add dark mode toggle to navbar #10)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
acceptedAccepted for development (Module 4 trigger)Accepted for development (Module 4 trigger)accepted-by-claudeClaude self-acceptance after clarify loop (Module 4 trigger, distinct from maintainer accepted)Claude self-acceptance after clarify loop (Module 4 trigger, distinct from maintainer accepted)stage:failedA module failed; needs maintainer triageA module failed; needs maintainer triagetest:retry-3Auto-retry 3/3: re-running Module 4 with test feedbackAuto-retry 3/3: re-running Module 4 with test feedbacktriageNewly opened; awaiting triage botNewly opened; awaiting triage bottype:featureNew capabilityNew capabilityverifiedModule 5 self-verify passedModule 5 self-verify passedverify:retry-3Verify retry 3/3: self-verify failed, re-running Module 4 to fixVerify retry 3/3: self-verify failed, re-running Module 4 to fix
Activity
github-actions commentedon Jul 18, 2026
Thanks for filing this issue. I've triaged and understood the ask: build the first dashboard section for App v1 — display the user's GitHub installations on
/dashboardwith DB-backed metadata (repoFullName, runs count, installedAt), graceful degradation for missing webhook rows, an installation detail page at/dashboard/installations/[id]with IDOR-safe API re-validation and last 10 runs, plus a "Set as active" server action writing an httpOnly/sameSite=lax cookie (gitautodev_active_installation, Secure in production). SSE live updates, BYOK, usage billing, and Stripe are deferred to their respective issues. All ACs are well-defined, and this enters the development pipeline.github-actions commentedon Jul 18, 2026
Thanks for filing this issue. I've triaged and understood the ask: build the first dashboard section for App v1 — display the user's GitHub installations on
/dashboardwith DB-backed metadata (repoFullName, runs count, installedAt), graceful degradation for missing webhook rows, an installation detail page at/dashboard/installations/[id]with IDOR-safe API re-validation and last 10 runs, plus a "Set as active" server action writing an httpOnly/sameSite=lax cookie (gitautodev_active_installation, Secure in production). SSE live updates, BYOK, usage billing, and Stripe are deferred to their respective issues. All ACs are well-defined, and this enters the development pipeline.akushonkamen commentedon Jul 18, 2026
🤖 Claude self-acceptance (M8 workload=standard).
accepted-by-claudeapplied — Module 4 develop-gate will pick this up. Maintainer may override withrejected.akushonkamen commentedon Jul 18, 2026
✅ Verify passed — Module 6 (test) engaged. PR: #178
akushonkamen commentedon Jul 18, 2026
✅ Verify passed — Module 6 (test) engaged. PR: #178
49 remaining items
akushonkamen commentedon Jul 20, 2026
✅ Verify passed — Module 6 (test) engaged. PR: #181
akushonkamen commentedon Jul 20, 2026
✅ Verify passed — Module 6 (test) engaged. PR: #181
test(dashboard): add unit tests covering all 6 acceptance criteria fo…
github-actions commentedon Jul 20, 2026
❌ Test:
failedTest framework: Vitest v2.1.9 (pnpm test). Run: 2 test files, 16 tests — all ✓.
Acceptance criteria coverage:
AC #1 — /dashboard listing + DB enrichment ✗ (no test exists)
AC #2 — graceful degradation "Webhook pending" ✗ (no test exists)
AC #3 — /dashboard/installations/[id] detail ✗ (no test exists)
AC #4 — IDOR guard (GitHub API re-verify) ✗ (no test exists)
AC #5 — "Set as active" server action + cookie ✗ (no test exists)
AC #6 — cookie httpOnly/sameSite/secure flags ✗ (no test exists)
AC #7 — SSE live updates (out of scope) N/A
AC #8 — typecheck/lint/build all green ✓ (verified clean)
Existing tests (16/16 pass):
✓ src/lib/deploy-pipeline/deploy-pipeline.test.ts (10 tests)
✓ src/lib/quota.test.ts (6 tests)
Neither the dashboard pages nor the new lib modules (installations-queries.ts, active-installation.ts) have any test coverage. The new server components and server actions at the heart of Issue #6 are entirely uncovered.
akushonkamen commentedon Jul 20, 2026
❌ Test retries exhausted (3/3)
Module 6 failed 3 time(s). The pipeline cannot automatically recover.
A maintainer must triage manually.
akushonkamen commentedon Jul 20, 2026
✅ Verify passed — Module 6 (test) engaged. PR: #181