Skip to content

Wrap-up: the kit now practises Principle #1 on itself#20

Merged
topij merged 2 commits into
mainfrom
chore/wrap-up-session
Jul 25, 2026
Merged

Wrap-up: the kit now practises Principle #1 on itself#20
topij merged 2 commits into
mainfrom
chore/wrap-up-session

Conversation

@topij

@topij topij commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Session wrap-up, plus the resolution of the dogfooding gap the assessment opened with: this repo's own handoff and friction log were unrendered skeletons. The kit wasn't doing the one thing Principle #1 requires.

Why it needed a structural fix rather than just filling them in

docs/handoff.md and docs/friction-log.md are the skeletons shipped to adopters. Writing real session blocks there would ship this repo's narrative into every adopting repo and destroy the devkit-template: unrendered marker that init.sh's seeding depends on — reopening the #8 bug from the other side.

So the kit's own files are docs/kit-*.md, with the reasoning recorded at the config keys. An adopter's config keeps the plain names; only the template repo needs the indirection.

That is a workaround, and I filed the real fix as #18: kit-manifest.json already carries the adopter_owned boundary, but nothing consumes it for installing — the quickstart is still cp -r. A manifest-aware installer would let kit-*.md go back to the plain names.

Changes

  • config paths.* + doc_budgets repointed to docs/kit-*.md
  • docs/kit-handoff.md — first real session block: six PRs, 83 → 196 tests, what was decided, what was learned, and the Phase 3 next step
  • docs/kit-friction-log.md — the friction that isn't yet issue-shaped, plus a note that most of this session's friction routed straight to GitHub Issues, which is Principle feat: add Codex-compatible workflows #2's prescribed routing rather than a neglected inbox
  • kit_doctor: kit-*.md added to ADOPTER_OWNED so they're never compared as drift
  • the marker test split in two — shipped skeletons asserted by literal filename (reading paths.handoff would now check the kit's live plan instead), plus a new test asserting the kit's own plan is real: no marker, no placeholder dates. The second half is what makes the dogfooding a mechanism rather than an intention.

Also filed

#19--record-review accepts a receipt while the primary bot is merely queued, which is exactly how #16's four findings landed post-merge. Includes the confounder that CodeRabbit reports state: SUCCESS even when rate-limited, so check state alone is not a usable signal.

Verification

196 tests pass. Both self-checks clean:

$ uv run scripts/check_doc_budget.py
✓ docs/kit-handoff.md 84/400 lines
✓ docs/kit-friction-log.md 35/150 lines

$ python scripts/kit_doctor.py
  ✓ docs/kit-handoff.md: in use
  ✓ docs/kit-friction-log.md: in use

Previously those last two read ⚠ still an unrendered template.

Session wrap-up, and the resolution of the dogfooding gap the assessment found:
this repo's own handoff and friction log were unrendered skeletons, so the kit
was not doing the one thing Principle #1 requires.

It could not simply be fixed by filling them in. docs/handoff.md and
docs/friction-log.md are the SKELETONS shipped to adopters — writing real
session blocks there would ship this repo's narrative into every adopting repo
and destroy the 'devkit-template: unrendered' marker the seeding logic depends
on. So the kit's own files are docs/kit-*.md, with the indirection explained at
the config keys. An adopter's config keeps the plain names; only the template
repo needs this.

- config paths + doc_budgets repointed to docs/kit-*.md
- docs/kit-handoff.md: first real session block (six PRs, 83 -> 196 tests, what
  was decided, what was learned, and the Phase 3 next step)
- docs/kit-friction-log.md: the friction that is NOT yet issue-shaped, plus a
  note that most of this session's friction routed straight to GitHub Issues —
  which is Principle #2's prescribed routing, not a neglected inbox
- kit_doctor: kit-*.md added to ADOPTER_OWNED so they are never compared
- the marker test split in two: shipped skeletons asserted by LITERAL filename
  (reading paths.handoff would now check the kit's live plan instead), plus a new
  test asserting the kit's own plan is real — no marker, no placeholder dates

Filed while wrapping up: #18 (the cp -r quickstart can't tell kit-owned from
adopter-owned; the manifest already encodes the boundary, nothing consumes it for
installing — landing that would let kit-*.md go back to the plain names) and #19
(a receipt can be recorded while the primary bot is merely queued, which is how
#16's findings landed post-merge).

196 tests pass. check_doc_budget and kit_doctor both clean: the kit's own
narrative docs now report 'in use' rather than 'still an unrendered template'.
@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@topij, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 33 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ee5212e7-3baa-481b-a5d1-da8f6c5c3a55

📥 Commits

Reviewing files that changed from the base of the PR and between f79bbb5 and 5a27c3d.

📒 Files selected for processing (9)
  • config/dev-model.yaml
  • docs/getting-started.md
  • docs/kit-friction-log-archive.md
  • docs/kit-friction-log.md
  • docs/kit-handoff-history.md
  • docs/kit-handoff.md
  • kit-manifest.json
  • scripts/kit_doctor.py
  • scripts/tests/test_kitconfig.py
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/wrap-up-session

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Found by the fallback review pass on this PR. getting-started.md still described
init.sh as seeding the narrative docs 'only if they don't already exist' — the
rule #8 replaced, and the one that could never fire (the kit ships those files,
so a copy-in always landed them first).

Swept the other docs/handoff.md references while I was there and deliberately
left them: README's what's-inside table, parallel-dev.md, adopt.md, and the two
flywheel skills all describe what an ADOPTER gets, where the plain filenames are
correct. Only this repo's own config uses kit-*.md.
@topij
topij merged commit 5dc9f03 into main Jul 25, 2026
3 checks passed
@topij
topij deleted the chore/wrap-up-session branch July 25, 2026 06:27
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.

1 participant