docs/plans/2026-06-15-registry-changelog-entry-files.md
Objective: Rearchitect registry changelog authoring; done when stable per-entry MDX generation avoids historical JSON churn and checks pass; plan docs/plans/2026-06-15-registry-changelog-entry-files.md.
Goal plan: docs/plans/2026-06-15-registry-changelog-entry-files.md
Template: docs/plans/templates/major-task.md
Primary template: docs/plans/templates/major-task.md
Applied packs:
Major source:
tooling/data/plate-ui-changelog.mdx as the canonical authoring source with stable per-entry MDX while preserving the generated public changelog JSON contract.git blame line numbers.Major lane:
tooling/scripts/generate-ui-changelog-entries.mjs, generator tests, registry changelog source files, generated apps/www/src/registry/changelog/** artifactsCompletion threshold:
tooling/data/plate-ui-changelog.mdx is no longer the canonical source for new registry UI changelog entries.apps/www/src/registry/changelog/index.json, components.json, and event JSON files.node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/2026-06-15-registry-changelog-entry-files.md
passes.Verification surface:
bun test tooling/scripts/generate-ui-changelog-entries.test.mjs.Constraints:
Boundaries:
Output budget strategy:
git diff --name-status for churn.rg and sed outputs.Blocked condition:
Major state:
Current verdict:
Completion 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 every completion threshold
above is satisfied, final evidence is recorded, and
node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/2026-06-15-registry-changelog-entry-files.md
passes.Start Gates:
| Gate | Applies | Evidence |
|---|---|---|
major-task loaded | yes | Read .agents/skills/major-task/SKILL.md. |
| Active goal checked or created | yes | get_goal returned none; create_goal created this objective. |
| Source of truth read before analysis | yes | Read user request plus generator, source MDX, tests, and consumers. |
| Major lane selected | yes | Architecture plus code-changing execution. |
| Decision criteria stated | yes | Listed above. |
| Existing repo patterns / prior decisions checked | yes | Current generator/consumer/source patterns audited. |
| Helper stack selected | yes | major-task + autogoal; no external helper needed yet. |
| External research decision recorded | no | N/A: local repo source settles this. |
| Implementation expectation recorded | yes | Implementation expected and in scope. |
| Workspace authority selected | yes | /Users/zbeyens/git/plate tooling and apps/www generated artifacts own this behavior. |
| Branch / PR expectation decided | yes | Use a new branch from main; PR expected after verification if code changes. |
| Output budget strategy recorded | yes | Recorded above. |
| Docs pack selected | yes | Applied because source entries are MDX. |
docs-creator loaded | no | N/A: this is data/source MDX, not user-facing docs prose. |
| Docs lane selected | no | N/A: not a docs-authoring task. |
| Target docs and nearest sibling docs read | no | N/A: no docs page copy targeted. |
| Docs style doctrine read | no | N/A: not writing public reference docs. |
| Documented source owner identified | yes | Registry changelog source/generator owns the generated public docs data. |
Work Checklist:
Completion Gates:
| Gate | Applies | Required action | Evidence |
|---|---|---|---|
| Named verification threshold | yes | Run repo audit, focused tests, idempotence proof, review, and PR gate | pnpm check passed; focused test/typecheck/lint/idempotence/autoreview evidence recorded below |
| Current-state source audit | yes | Map current owner, boundaries, constraints, and affected surfaces | Generator, tests, generated registry changelog JSON, source entry files, generated type, and live agent rules/templates audited |
| Decision criteria closure | yes | Mark each criterion satisfied, narrowed, rejected, or blocked with evidence | Per-entry files avoid monolith line/row drift; explicit metadata avoids live blame/PR drift; public JSON schema preserved |
| Options / tradeoffs / rejection record | yes | Record viable options, chosen recommendation, and why alternatives lose | Recorded below: monolith-with-fixes and JSON-first authoring rejected; per-entry MDX selected |
| Review / pressure pass | yes | Run selected reviewer/lens or record N/A with reason | Agent-native source audit done; .agents/skills/autoreview/scripts/autoreview --mode local clean after two accepted fixes |
| Review findings closure | yes | Fix or explicitly reject accepted/actionable findings and record closure proof | Fixed multi-row metadata swallowing and file-relative source line numbers; final autoreview clean |
| External-source audit | no | Cite official/local clone/external sources when used, or record N/A | N/A: local repo source settled the architecture |
| Implementation gates | yes | If code changed, close primary-template and touched-surface gates; otherwise N/A | Generator, source files, generated JSON, rules, templates, and tests updated; checks passed |
| Final handoff contract | yes | Record recommendation, evidence, caveats, residual risk, and next owner | Recorded below; next owner is PR review after branch push |
| Final lint | yes | Run pnpm lint:fix or scoped equivalent when files changed | pnpm lint:fix passed after Biome normalized one generator file |
| Output budget discipline | yes | Verify no unbounded high-volume command output was streamed, or record the accidental output and recovery | One broad diff command overflowed context; recovered with capped git diff --name-status, rg, and counts |
| Goal plan complete | yes | Run node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/2026-06-15-registry-changelog-entry-files.md | Passed |
| Docs source-backed claim audit | yes | Verify docs claims against current source or record N/A | N/A for public docs pages; source MDX and agent-rule text verified with rg |
| Docs links / routes / previews | no | Verify leaf links, routes, anchors, and preview names or record N/A | N/A: no docs route/link/preview edited |
| Docs MDX/content parser | yes | Run docs-app parser/type surface for MDX/content changes, or record N/A | pnpm --filter www typecheck passed and ran fumadocs-mdx; pnpm check also passed |
| Plugin page specifics | no | For plugin pages, apply docs-creator kit/manual/API rules; otherwise N/A | N/A: no plugin docs page edited |
Phase / pass table:
| Phase | Status | Evidence | Next |
|---|---|---|---|
| Intake and source read | done | User request plus generator/source/tests/consumer files read | current-state map |
| Current-state map | done | Existing monolithic source, generated JSON, consumer type, and agent rules audited | options |
| Options and recommendation | done | Per-entry MDX chosen over monolith patching and JSON-first authoring | review |
| Review / pressure pass | done | Autoreview found two real defects; both fixed; final autoreview clean | implementation decision |
| Implementation or plan artifact | done | Generator, tests, source entries, generated JSON, and rules/templates updated | verification |
| Verification | done | Lint, focused tests, docs typecheck, idempotence, autoreview, and pnpm check passed | closeout |
| Closeout | done | Plan evidence recorded; commit/PR remains | final response |
Findings:
tooling/data/plate-ui-changelog.mdx made one canonical file carry every registry changelog entry, so inserting or editing one section could shift source.line / source.row metadata for historical generated events.apps/www/src/registry/changelog/*.json, index.json, and components.json; they do not need the authoring source to stay monolithic.Decisions and tradeoffs:
apps/www/src/registry/changelog/entries/*.mdx is the canonical source.change, release, diagnostics, legacy release info); row comments own stable row IDs/kind/migration notes.node tooling/scripts/generate-ui-changelog-entries.mjs --write formats generated JSON through Biome so a second run is clean.Implementation notes:
tooling/data/plate-ui-changelog.mdx and migrated the 20 current generated events into 20 source MDX files under apps/www/src/registry/changelog/entries/.source.kind: "entry-mdx" and file-relative source lines.apps/www/src/lib/registry-changelog.ts source kind typing..agents/rules/*, synced .agents/skills/* with pnpm install, and updated plan templates so future agents use the new entry-source path.Review fixes:
<!-- entry: ... --> comment. Fixed by stopping the continuation scan before metadata comments and added coverage for second-row metadata.source.line was body-relative while source.path was file-relative. Fixed by carrying frontmatter line offset through the parser and regenerated JSON with actual MDX row line numbers.Error attempts:
| Error / failed attempt | Count | Next different move | Resolution |
|---|---|---|---|
| Generated JSON was not idempotent before formatting | 1 | Format generated output inside the CLI write path | Added Biome format step for generated JSON and proved repeat generation keeps the same diff set |
| Biome rejected inline number regexp in frontmatter parser | 1 | Hoist regexp to a top-level constant | Added FRONTMATTER_NUMBER_PATTERN; pnpm lint:fix passed |
| Broad parallel diff inspection exceeded output context | 1 | Use capped git diff --name-status, rg, file counts, and representative diffs | Recovered with scoped/capped audits |
| Autoreview found parser swallowed multi-row metadata | 1 | Fix parser ownership of metadata comment boundaries | Fixed and tested |
| Autoreview found source lines were body-relative | 1 | Carry frontmatter line offset into row parsing | Fixed and regenerated JSON |
Verification evidence:
pnpm install passed and synced generated skills after .agents/rules/* edits.rg -n "tooling/data/plate-ui-changelog\\.mdx" .agents docs/plans/templates AGENTS.md returns no active-rule/template hits.find apps/www/src/registry/changelog/entries -name '*.mdx' | wc -l returns 20.node tooling/scripts/generate-ui-changelog-entries.mjs --write writes 20 events from 20 source entries.--write runs plus diff -u /tmp/changelog-diff-before.txt /tmp/changelog-diff-after.txt produced no diff.apps/www/src/registry/changelog/2026-06-14-fix-shadcn-editor-kit-install-paths.json reports row line 13, matching the actual MDX row.bun test tooling/scripts/generate-ui-changelog-entries.test.mjs passed: 13 tests, 0 failures.pnpm --filter www typecheck passed, including docs source parity and registry source checks.pnpm lint:fix passed after Biome normalized one generator file..agents/skills/autoreview/scripts/autoreview --mode local final run passed: clean, no accepted/actionable findings.pnpm check passed. It reported the existing sidebar hook warning and repeated Detected multiple @platejs/core instances! diagnostic during tests, but exited 0 with all build/typecheck/test gates green.node .agents/skills/autogoal/scripts/check-complete.mjs docs/plans/2026-06-15-registry-changelog-entry-files.md passed.Final handoff contract:
pnpm check passed.pnpm install; pnpm lint:fix; bun test tooling/scripts/generate-ui-changelog-entries.test.mjs; pnpm --filter www typecheck; repeat node tooling/scripts/generate-ui-changelog-entries.mjs --write diff proof; .agents/skills/autoreview/scripts/autoreview --mode local; pnpm check.Timeline:
pnpm install.pnpm check passed.Reboot status:
| Question | Answer |
|---|---|
| Where am I? | Closeout after full verification |
| Where am I going? | Commit, push, PR |
| What is the goal? | Stable per-entry registry changelog authoring without historical generated JSON churn |
| What have I learned? | Monolithic MDX line/row metadata and live inference were the root churn sources |
| What have I done? | Implemented per-entry MDX source files, regenerated artifacts, updated rules/templates, fixed review findings, and passed checks |
Open risks: