plan: single structured root CHANGELOG (B + C)#374
Conversation
|
Warning Rate limit exceeded
To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing. β How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. π¦ How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. βΉοΈ Review infoβοΈ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: π Files selected for processing (1)
β¨ Finishing Touchesπ§ͺ Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Review rate limit: 0/1 reviews remaining, refill in 30 minutes and 36 seconds.Comment |
There was a problem hiding this comment.
Pull request overview
Adds a new Dark Factory plan proposing a shift from per-package Changesets-generated changelogs to a single, structured root CHANGELOG.md, optimized for cross-release narrative and agent-friendly retrieval in TKOβs fixed-version monorepo.
Changes:
- Introduces a plan documenting current changelog pain points in a 27-package fixed-version group.
- Evaluates options (A/B/C) and recommends B+C: one root changelog plus structured per-release entries.
- Sketches the intended implementation surface (custom Changesets changelog generator + version wrapper script + workflow change + one-time cleanup).
| - **Single-action release flow.** Tracked in | ||
| `plans/single-action-release.md` β about pipeline triggers, not | ||
| artifact shape. |
There was a problem hiding this comment.
This plan links to plans/single-action-release.md, but that file doesnβt exist in plans/ on this branch. Update the reference to point at an existing plan (or include the referenced plan file in this PR) so readers can follow the intended cross-plan dependency.
| - **Single-action release flow.** Tracked in | |
| `plans/single-action-release.md` β about pipeline triggers, not | |
| artifact shape. | |
| - **Single-action release flow.** Tracked separately as release | |
| automation work β about pipeline triggers, not artifact shape. |
Adversarial reviewVerified against repo state on Verified β
Findings
VerdictDirection is right and the dark-factory framing fits TKO's reality (fixed group, agent-readable artifact). Request changes for: blockers #2, #3, #4 before this becomes the implementation; #5β#8 reframe in the doc; #9β#11 nits. Coordinate landing order with #377. |
The default changesets-per-package layout assumes Lerna-era independent packages with separate audiences. TKO ships as a 27-package fixed group on one version line β same body lands in 8 changelogs on 4.1.0. Plan recommends B + C together for 4.2.0: - B: single root CHANGELOG.md, no per-package files - C: structured release entries (curated summary + bullet highlights + package list + changeset references) Rationale for B+C together: the same custom changelog generator that makes B work is the hook C needs for structured output, so doing them in one PR is one piece of work, not two. A and "B then C later" both left on the table for context. Documents the implementation surface (tools/changesets/version.cjs + root-changelog.cjs, .changeset/config.json swap, one-time cleanup of packages/*/CHANGELOG.md), authoring discipline (placeholder summary mergeable as-is for trivial patches), and verification. Out of scope: pipeline reforms (covered in plans/single-action-release.md). https://claude.ai/code/session_01Jnv99bwWtFWFmsyL7A2cJv
Three rounds of adversarial review took the recommendation from B+C β A only β A with a wrapper rather than a custom generator. - Custom getReleaseLine cannot reach root CHANGELOG (no package / version context, no FS side-effect contract). Plan now spells out why a wrapper is required and what the interface limitations are. - Wrapper snapshots per-package CHANGELOGs and .changeset/*.md frontmatter pre-run, so dedup keys on declared package list (intentional scope), not bumped fixed-group set (always 27). - Pre/post diff captures just-written bytes precisely; "topmost heading" was ambiguous on re-run. - Root heading is bare `## X.Y.Z` (date in body line); GFM slug stable; per-package stub anchors `#410` etc resolve correctly. - Drop Prettier reference; Biome doesn't format Markdown. - Workflow invocation: `node tools/changesets/version.cjs` (matches existing tools/release-version.cjs pattern), not `bunx node ...`. Recommendation: A only (root narrative + per-package stubs). B and C explicitly rejected with reasoning preserved. Adversarial review: three subagent passes. First flagged 5 blockers in the initial generator-only design (interface limitations); second confirmed the wrapper architecture is sound and flagged 3 remaining blockers (bunx-node syntax, slug collision with date in heading, dedup on declared vs bumped). All three addressed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
a3ccb98 to
766aa5b
Compare
Summary
The default
changeset versionwrites aCHANGELOG.mdper package. With TKO's 27-package fixed-version group, a single cross-cutting concern lands in eight package files verbatim βmodernize-utils-dead-polyfillsdid exactly this on the 4.1.0 cut. To answer "what landed in 4.1.0?" an agent has to find every CHANGELOG, dedupe, and reconstruct a story we already wrote once in.changeset/*.md.This plan replaces that with a single root
CHANGELOG.mdcarrying structured per-release entries (B + C combined).Options surveyed
Recommendation: B + C together
The same custom changelog generator that makes B work is the hook C needs for structured output β doing them in one PR is one piece of work, not two. The maintainer (or agent acting as release manager) edits a placeholder summary before merging the version PR; for trivial patch releases, the placeholder ships as-is.
Implementation surface
tools/changesets/root-changelog.cjsβ implements the ChangesetsgetReleaseLine/getDependencyReleaseLineinterface.tools/changesets/version.cjsβ wrapschangeset version, deletes per-package CHANGELOGs, aggregates into one structured root entry..changeset/config.jsonβ points at the custom generator.release.ymlβ one-line change toversion: node tools/changesets/version.cjs.rm packages/*/CHANGELOG.md builds/*/CHANGELOG.md.Tradeoffs
Out of scope
plans/single-action-release.md/ PR plan: collapse release to a single human actionΒ #373).tko.io/, not CHANGELOG).Test plan
https://claude.ai/code/session_01Jnv99bwWtFWFmsyL7A2cJv
Generated by Claude Code