feat: plan_snapshot field on ClaudeJob + architecture doc (#23)

* feat: add plan_snapshot field to ClaudeJob schema

Nullable String? column on claude_jobs captures the task's
implementation_plan at claim time — immutable baseline for drift detection.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: update ClaudeJob lifecycle with plan_snapshot

Document state machine snapshot capture/reset, plan_snapshot field
rationale, and drift-detection baseline semantics.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: remove duplicate header labels on backlog page

Both the product H1 + description in the page header and the
"Product Backlog" panel-title in the PBI panel duplicated info
already visible in the NavBar. Removed both, keeping the right-aligned
action bars (activate/sprint/settings, plus filters/+PBI) intact.

PanelNavBar component is unchanged — Stories and Taken panels keep
their titles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-04-30 19:43:47 +02:00 committed by GitHub
parent 8877ea469d
commit 794f7afd2e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 89 additions and 94 deletions

View file

@ -92,14 +92,8 @@ export default async function ProductBacklogPage({ params, searchParams }: Props
return (
<div className="flex flex-col h-full">
{/* Product header */}
<div className="px-4 py-3 border-b border-border bg-surface-container-low shrink-0 flex items-center justify-between">
<div>
<h1 className="font-medium text-foreground">{product.name}</h1>
{product.description && (
<p className="text-xs text-muted-foreground mt-0.5">{product.description}</p>
)}
</div>
{/* Product header — actions only; product-naam zit al in NavBar */}
<div className="px-4 py-3 border-b border-border bg-surface-container-low shrink-0 flex items-center justify-end">
<div className="flex items-center gap-3">
{user?.active_product_id !== id && (
<ActivateProductButton productId={id} isDemo={isDemo} redirectTo={`/products/${id}`} />