docs/plans/2026-05-28-sync-shadcn-header-scope.md
Objective:
Create a planning-only sync-shadcn header scoped audit: resolve the tracked
upstream shadcn range, inventory header-relevant upstream changes from
../shadcn/apps/v4 against apps/www, write durable docs/sync/shadcn
artifacts and status planning pointers, then stop for user review without
patching apps/www.
Flow mode: planning mode by default: one-shot execution to write a reviewable range plan, then stop for user review. Implementation mode starts only on a later user instruction that accepts a named plan and slice. Use collaborative planning only when the user asks to decide policy before any range plan is written.
Goal plan: docs/plans/2026-05-28-sync-shadcn-header-scope.md
Primary template: docs/plans/templates/sync-shadcn.md
Applied packs:
docs if docs/content pages are edited during an accepted implementationbrowser if browser-visible docs UI is editedagent-native if .agents/**, .claude/**, .codex/**, skills,
commands, prompts, or user-action tooling are editedSync source:
shadcn-ui/ui../shadcn../shadcn/apps/v4apps/wwwdocs/sync/shadcn/status.jsondocs/sync/shadcn/decisions.mddocs/sync/shadcn/runs/<date>-<base>-to-<target>/Completion threshold:
apps/v4 file is classified in a durable
inventory, decision counts reconcile to the upstream TSV, the plan lists
recommended slices and real questions, lastPlannedCommit points at the
target, lastSyncedCommit is unchanged, the final response asks the user to
review the plan and invoke sync-shadcn again with the accepted plan/slice,
and
node .agents/rules/autogoal/scripts/check-complete.mjs docs/plans/2026-05-28-sync-shadcn-header-scope.md
passes.status.json, and
node .agents/rules/autogoal/scripts/check-complete.mjs docs/plans/2026-05-28-sync-shadcn-header-scope.md
passes.Verification surface:
../shadcn git commands for fetch/pull, base/target resolution, ancestry,
upstream commit list, and apps/v4 file status.upstream-name-status.tsv, upstream-numstat.tsv,
upstream-commits.txt, focused patch files, inventory.md, and plan.md.apps/www, content/docs, docs/sync/shadcn, and relevant
docs/solutions/** notes.docs/sync/shadcn/status.json.Constraints:
build:registry.apps/www during planning-only runs.lastSyncedCommit until every upstream row through the target
is accounted for and the user accepts the final accounting.Boundaries:
docs/sync/shadcn/**, this goal plan, and generated
run artifacts.Output budget strategy:
git diff --name-status,
git diff --numstat, git log --oneline, wc -l, and narrow sed/rg
reads.Blocked condition:
Sync state:
4a4dc8eb0fc793d8e9225e780183ad605f15d2c2360e8a19c3ee13ac78b656027462007c8bdaa6d5headerdocs/sync/shadcn/runs/2026-05-28-4a4dc8e-to-360e8a1-headerlastSyncedCommitCurrent verdict:
sync-shadcn command-menuCompletion rule:
update_goal(status: complete) while any required checklist item
remains unchecked. If an item does not apply, check it and add
N/A: <reason>.update_goal(status: complete) until the range plan or accepted
implementation evidence is recorded below and
node .agents/rules/autogoal/scripts/check-complete.mjs docs/plans/2026-05-28-sync-shadcn-header-scope.md
passes.docs/sync/shadcn/status.json, and the
run artifact directory are the durable state.Start Gates:
| Gate | Applies | Evidence |
|---|---|---|
autogoal loaded and active goal checked/created | yes | create_goal created active objective; create-goal-scratchpad.mjs --template sync-shadcn --title "sync shadcn header scope" produced this plan |
sync-shadcn skill/rule read | yes | User supplied .agents/skills/sync-shadcn/SKILL.md; scoped planning lane for header selected |
| Output budget strategy recorded before broad upstream commands | yes | Output budget strategy section records capped output and artifact-first diffs before upstream diff/log commands |
docs/sync/shadcn/status.json read | yes | lastSyncedCommit=4a4dc8eb0fc793d8e9225e780183ad605f15d2c2; lastPlannedCommit=360e8a19c3ee13ac78b656027462007c8bdaa6d5; one partial sync recorded |
docs/sync/shadcn/decisions.md read | yes | Durable decisions read; header/nav default is smart merge; v0/create/charts/colors/theme exclusions are settled |
| Prior migration plans/solution notes checked | yes | Read docs restart comparison, base migration progress, shadcn header nav locale note, sidebar parity note, registry/init notes, Fumadocs pageTree note, shadcn-parity rule, and memory registry note for docs restart context |
../shadcn clone exists and was fetched/pulled intentionally | yes | test -d ../shadcn/.git, git -C ../shadcn fetch origin main --tags, and test -d ../shadcn/apps/v4 passed |
| Base and target refs resolved to exact SHAs | yes | Base 4a4dc8eb0fc793d8e9225e780183ad605f15d2c2; target 360e8a19c3ee13ac78b656027462007c8bdaa6d5 |
| Base ancestry or ref problem proven | yes | git -C ../shadcn merge-base --is-ancestor "$BASE" "$TARGET" returned success |
| Planning-only vs implementation mode decided | yes | This activation is scoped planning only; no apps/www patching or task delegation |
| User-review boundary recorded | yes | Planning mode stops with plan path and review request; implementation needs a later accepted plan/slice |
Work Checklist:
docs/sync/shadcn/runs/.upstream-name-status.tsv,
upstream-numstat.tsv, and upstream-commits.txt.apps/v4 row is classified in inventory.md with
status, path, subsystem, Plate owner, decision, and evidence.needs-question rows are isolated; settled policy is not re-asked.docs/sync/shadcn/status.json update semantics are recorded:
lastPlannedCommit, lastPlan, partial sync, or baseline advancement.sync-shadcn again with the accepted plan path and slice.Completion Gates:
| Gate | Applies | Required action | Evidence |
|---|---|---|---|
| Named verification threshold | yes | Prove the scoped planning threshold named above | Fresh scoped plan and inventory written under docs/sync/shadcn/runs/2026-05-28-4a4dc8e-to-360e8a1-header |
| Upstream range artifacts exist | yes | Verify required run artifacts are non-empty | upstream-name-status.tsv, upstream-numstat.tsv, upstream-commits.txt, header-scope.patch, and focused patch files exist; command output recorded byte/row counts |
| Inventory completeness | yes | Reconcile inventory.md row count with upstream-name-status.tsv | Node check returned { inventoryRows: 739, tsvRows: 739, match: true } |
| Decision accounting | yes | Verify decision counts cover every upstream row and no hidden question remains | summary.json records 739 rows: 672 exclude, 62 no-op, 3 plate-fork, 2 smart-merge; 0 needs-question |
| Status JSON parse and semantics | yes | Parse docs/sync/shadcn/status.json; verify planned/synced commit semantics | JSON parse passed; lastPlan points at header scoped plan, lastFullPlan preserves the full plan, lastSyncedCommit unchanged |
| Source-backed Plate mapping | yes | Record local rg/file evidence for every actionable adoption, fork, exclusion, or question group | Plan records line evidence for layout, site-header, logo, mobile-nav, command-menu, decisions.md, and prior solution notes |
| Planning-only no implementation edits | yes | Verify no apps/www implementation patch was made, or record accepted implementation scope | Only docs/plans/**, docs/sync/shadcn/**, and docs/sync/shadcn/status.json were written in this activation |
| Accepted implementation verification | N/A | If a slice was accepted, run focused proof | No implementation slice was accepted in this activation |
| Browser surface changed | N/A | Capture browser proof when accepted implementation touches visible docs UI | Planning artifacts only; no browser-visible source patch |
| Package manifests, lockfile, or install graph changed | N/A | Run pnpm install and package checks when touched | No package or lockfile edit in this activation |
| Agent rules or skills changed | N/A | Run pnpm install and verify generated skill sync when touched | No agent rule or skill edit in this activation |
| CI-controlled generated output | yes | Verify no generated registry/template output was manually edited | No apps/www/public/r, apps/www/public/rd, or templates/** output was edited |
| Baseline advancement | yes | Advance lastSyncedCommit only if complete and accepted; otherwise record why unchanged | lastSyncedCommit unchanged because scoped plan covers only 7 candidate rows and command-menu styling is deferred |
| User review boundary | yes | In planning mode, stop and ask the user to review the plan | Final handoff will ask for plan review and later accepted plan/slice before implementation |
| Output budget discipline | yes | Verify broad output was artifacted/capped | Broad diffs saved to artifacts; chat output used counts and focused file reads |
| Goal plan complete | yes | Run node .agents/rules/autogoal/scripts/check-complete.mjs docs/plans/2026-05-28-sync-shadcn-header-scope.md | Passed |
Phase / pass table:
| Phase | Status | Evidence | Next |
|---|---|---|---|
| Intake and baseline read | completed | status, decisions, prior plans, solution notes, memory registry, and skill policy read | done |
| Upstream range evidence | completed | base/target resolved, ancestry proven, 739-row TSV and patch artifacts written | done |
| Classification and local mapping | completed | inventory.md and summary.json classify all rows; header line evidence recorded | done |
| Plan artifact and status update | completed | plan.md written; status.json updated to header scoped plan while preserving lastFullPlan | done |
| User review stop | completed | final response will ask for review before implementation | done |
| Accepted implementation | N/A | planning-only activation; no accepted slice | none |
| Verification and baseline decision | completed | inventory row count reconciled; status semantics checked; baseline unchanged | done |
| Closeout | completed | autogoal checker to run before final | done |
Decision counts:
| Decision | Count | Notes |
|---|---|---|
adopt-upstream | 0 | No direct header row needs pure adoption in this scoped lane |
smart-merge | 2 | command-menu.tsx deferred; docs-sidebar.tsx adjacent/out of header scope |
plate-fork | 3 | site-header.tsx, mobile-nav.tsx, and lib/config.ts preserve Plate header decisions |
exclude-upstream | 672 | Rhea/create/theme/product/style rows, including header-adjacent announcement copy |
delete-plate-residue | 0 | No header-owned residue found in this scoped activation |
no-op | 62 | Layout already adopted plus out-of-scope generated/routing rows |
needs-question | 0 | Command-menu is deferred by existing user decision, not a new question |
Recommended merge slices:
| Order | Slice | Class | Files | Why | Verification |
|---|---|---|---|---|---|
| 1 | Header accounting only | plate-fork / no-op | site-header.tsx, mobile-nav.tsx, config/site.ts, app/layout.tsx | Plate already has/adopts the useful header shell pieces and intentionally preserves Plate product links, logo Home, locale, Discord, GitHub, MCP, and create/v0 exclusion | Source audit only; no implementation patch |
| 2 | Command-menu trigger styling | smart-merge deferred | command-menu.tsx | Upstream trigger styling is the only remaining header-mounted candidate; user said command-menu later | Later sync-shadcn command-menu lane with typecheck/lint/browser proof |
Questions:
Findings:
360e8a19c3ee13ac78b656027462007c8bdaa6d5.Home text nav item.Decisions and tradeoffs:
lastPlan to the header plan but preserves the full-range plan in lastFullPlan.lastSyncedCommit stays unchanged because this plan is scoped and command-menu remains deferred.Error attempts:
| Error / failed attempt | Count | Next different move | Resolution |
|---|---|---|---|
| None yet | 0 |
Verification evidence:
git -C ../shadcn fetch origin main --tags succeeded.4a4dc8eb0fc793d8e9225e780183ad605f15d2c2; target: 360e8a19c3ee13ac78b656027462007c8bdaa6d5.git -C ../shadcn merge-base --is-ancestor "$BASE" "$TARGET" succeeded.docs/sync/shadcn/runs/2026-05-28-4a4dc8e-to-360e8a1-header.inventoryRows=739, tsvRows=739, match=true.docs/sync/shadcn/status.json parses and leaves lastSyncedCommit unchanged.Final handoff:
4a4dc8e..360e8a1docs/sync/shadcn/runs/2026-05-28-4a4dc8e-to-360e8a1-header/plan.mddocs/sync/shadcn/runs/2026-05-28-4a4dc8e-to-360e8a1-header/inventory.mdlastPlan points at the header scoped plan, lastFullPlan preserves the full plan, lastSyncedCommit unchangedTimeline:
header planning: autogoal active, status/decisions/prior notes read, output budget recorded, and review boundary set.../shadcn, resolved base/target, proved ancestry, wrote 739-row upstream artifacts, generated header scoped plan/inventory/summary, and updated status JSON.Reboot status:
| Question | Answer |
|---|---|
| Where am I? | Header scoped plan complete; final review handoff next |
| Where am I going? | User review boundary; implementation only after later accepted plan/slice |
| What is the goal? | Produce a planning-only sync-shadcn header scoped audit and stop for review |
| What have I learned? | Header has 5 direct rows; only command-menu trigger styling remains deferred |
| What have I done? | Wrote scoped run artifacts, updated status JSON, and verified inventory counts |
Open risks:
lastPlan now points at the scoped header plan; lastFullPlan preserves the broader range plan for full-sync review.