Skip to content

feat(dashboard): Phase 4 — Jobs tab rewrite (migration banner, issues card, editor, override/unfork)#220

Open
JKHeadley wants to merge 1 commit into
mainfrom
echo/dashboard-jobs-ui
Open

feat(dashboard): Phase 4 — Jobs tab rewrite (migration banner, issues card, editor, override/unfork)#220
JKHeadley wants to merge 1 commit into
mainfrom
echo/dashboard-jobs-ui

Conversation

@JKHeadley
Copy link
Copy Markdown
Owner

Summary

Ships the Phase 4 Dashboard rewrite from INSTAR-JOBS-AS-AGENTMD spec §Dashboard UX + §Operator Experience. The existing Jobs tab is extended in-place with the spec's named surfaces.

Frontend: migration banner, Issues card (sort by severity, filter by class, per-item dismiss), namespace badges (instar / user / fork), lockTrust warning indicator, Override / Edit / Unfork action buttons with ELI16 confirmation copy, editor modal with manifestVersion OCC token.

Backend: 6 new endpoints — /jobs/:slug/save, /disable, /enable, /override, /unfork, /unfork-backups. GET /jobs extended with hasUserFork. Unfork-backups retention: 30 days OR last 10 per slug.

5 integration tests pass.

Not in this PR

  • Drift digest visual surface (depends on classifier output being populated in production CI).
  • Unrestricted-tools four-screen confirmation UI.
  • CLI parity for the new endpoints.

Test plan

  • 5 mutation-endpoint integration cases pass
  • Lint + type-check + build pass
  • CI green

🤖 Generated with Claude Code

Implements INSTAR-JOBS-AS-AGENTMD spec §Dashboard UX + §Operator
Experience. Existing Jobs tab extended with the spec's named surfaces.

Frontend (dashboard/index.html):
- Migration banner: reads /jobs/migration-status, renders confirm or
  roll-back buttons.
- Issues card: reads /jobs/reconcile, severity-sorted, per-class filter,
  per-item dismiss.
- Namespace badges (instar/user/fork) and lockTrust warning on rows.
- Two new filter chips: Instar defaults, Your jobs.
- Override + Edit + Unfork buttons in detail panel with ELI16 copy.
- Editor modal with frontmatter form + body textarea + manifestVersion
  OCC. 409 → reload-or-lose modal.

Backend (src/server/routes.ts):
- POST /jobs/:slug/save (atomic two-rename via AgentMdAtomicSave;
  refuses instar/ writes; 409 on stale OCC token)
- POST /jobs/:slug/disable (stampDisabledAtBodyHash)
- POST /jobs/:slug/enable (clearDisabledAtBodyHash)
- POST /jobs/:slug/override (copy instar→user, idempotent)
- POST /jobs/:slug/unfork (archive to .unfork-backups + restore default)
- GET /jobs/:slug/unfork-backups (list newest-first)
- GET /jobs extended with hasUserFork
- pruneUnforkBackups helper: 30-day OR last-10-per-slug retention.

Tests: 5 integration cases in
tests/integration/jobs-phase4-mutation-endpoints.test.ts.
Lint + type-check + build pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 14, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
instar Ready Ready Preview, Comment May 14, 2026 3:48am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants