chore: graduate the friction-log inbox to GitHub Issues (#54-#56) - #57
Conversation
The inbox was AT its 150-line budget with an explicit "sweep required before the next entry" tripwire. Run inline in the skill's documented LLM-only mode: scripts/triage_friction_log.py and scripts/finalize_triage.py are not vendored yet (blocked on #6), so the parse/draft/sweep steps were done by hand against the doctrine. Three entries graduated: #54 every verification claim must name the command that establishes it #55 safety-critical rule 1 should name a tightening threshold #56 removing a mechanism requires enumerating what it was rejecting #54 supersedes the inbox entry's own narrower proposal ("wrap-up should fact-check the handoff"): the pattern turned out to be broader than the handoff, and two instances this session (#51, #53) are generated by ENGINES, so they reproduce in every adopter regardless of who is authoring. Three further entries needed no ticket — their proposed fixes had ALREADY SHIPPED in #31, which the triage checked rather than assuming: "reading is not running" -> panel contract items 4-5 (execute, mutation-test) exist "fix rounds introduce bugs" -> rule 3 now carries the blast-radius stopping criterion "concurrent lenses corrupt" -> contract item 7 mandates isolated worktrees Everything else was already tagged with an issue id (#10, #18, #19, #33) or recorded a guard working correctly with "No change proposed". The sweep moves the whole prior inbox verbatim into kit-friction-log-archive.md with headings demoted one level, matching finalize_triage.py's documented behaviour. Verified: all 120 body lines present in the archive, all three section headings demoted, nothing dropped. Inbox 150 -> 32 lines. Claude-Session: https://claude.ai/code/session_01V27wAgECMEApqAvmJMFyqm
|
Warning Review limit reached
Next review available in: 24 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
✨ 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. Comment |
Review findings on #57. All LOW; the content-preservation core held. - the active file's intro still said "entries below are the ones that are not yet issue-shaped" — after the sweep there are no entries below. It is preserved verbatim per the doctrine's "H1 + intro", so an engine run would have left it too; reworded to describe the marker convention instead. - the archive header named TWO buckets for the un-graduated remainder; there are three. The 11th entry (a guard firing correctly, "No change proposed") is neither already-tagged nor already-shipped. Both files now give the full 11-entry accounting: 3 graduated + 3 already shipped + 4 already tagged + 1 no-change. - a line wrapped so it began `#31 —`. Not an ATX heading under CommonMark (no space after `#`) and no kit tooling mis-parses it — both `init.sh` and `archive_plan_sessions.py` match `"## "` with the space — but an unfortunate wrap in a file whose own sweep engine is heading-anchored. Reflowed. Also updates the handoff, which this PR's own sweep had just falsified: it said "the friction log is AT budget (150/150) and triage-friction-log is now blocking". It is 32 lines and not blocking. Step 5 of the doctrine constrains the finalize commit to the two doc paths, so this is a deliberate scope deviation — `session-start` reads the handoff and would otherwise hand the next session a false blocking signal, which is precisely the failure #54 (filed in this PR) exists to stop. Re-verified with the stronger check the reviewer used, rather than the set-membership one the PR body originally cited: the entire original body, demoted, appears as one CONTIGUOUS byte-identical block in the archive — which establishes verbatim-and-in-order, not merely present. Claude-Session: https://claude.ai/code/session_01V27wAgECMEApqAvmJMFyqm
Review record — one correctness lens, not a panelCodeRabbit is rate-limited on this head (detected on both the comment surface and the check description). One isolated fresh-context lens ran instead — deliberately one, not the panel, and the receipt says so. Blast radius here is records, and the one failure mode that matters — did the sweep lose anything — is a correctness question, not an adversarial one. Verdict: content preservation clean, no HIGH or MEDIUM. Nine LOW findings; six fixed in 9fa6fd3, three answered below. The verification that matteredThe lens re-derived the sweep integrity with a stronger method than the one I originally cited, and it holds: the entire original body, demoted, appears as one contiguous byte-identical block in the archive — which establishes verbatim and in order, where my It also independently verified the part I most wanted checked — all three "already shipped in #31" determinations are true ( Fixed in 9fa6fd3
Answered, not changedThe PR is not a draft, and the doctrine says it should be. Deliberate. Range spelled three ways — No Receipt: |
The inbox was at its 150-line budget carrying an explicit "sweep required before the next entry" tripwire. Run inline in the skill's documented LLM-only mode —
scripts/triage_friction_log.pyandscripts/finalize_triage.pyare not vendored yet (blocked on #6), so the parse / draft / sweep steps were done by hand against the doctrine.Graduated (3)
safety-critical-changes.mdrule 1 should name a tightening threshold#54 supersedes the inbox entry's own proposal. That entry suggested "wrap-up should fact-check the handoff". The pattern turned out to be broader than the handoff and broader than authorship: two instances this session (#51, #53) are generated by engines, so they reproduce identically in every adopter no matter who is writing. The filed version promotes panel contract item 8 — "state what was verified clean, and how" — from review time to authoring time, which is the form that binds engine output too.
Needed no ticket — their fixes had already shipped (3)
Checked rather than assumed, which is the part of triage most worth doing:
All three landed in #31. Filing them would have produced three issues that were already closed on arrival.
Everything else was already tagged with an issue id (#10, #18, #19, #33) or recorded a guard working correctly with "No change proposed".
The sweep
Moves the whole prior inbox verbatim into
kit-friction-log-archive.mdwith headings demoted one level, matchingfinalize_triage.py's documented behaviour, and rewrites the active file as H1 + intro + the new graduation marker.Verified rather than asserted (per #54, filed in this very PR):
An earlier revision of this section cited
lines NOT found in archive: 0, which isset membership and does not establish the verbatim-and-in-order claim the prose
made. Caught by review — and an instance of exactly what #54, filed in this PR, is
about. The check above is the one that establishes it.
Config drift found during pre-flight
Worth flagging separately: this repo's own
config/dev-model.yamlstill carries unstamped placeholders —tracker.backend: linear,tracker.project_name: "My Project Dev",tracker.url: "",notify.backend: slack— while the actual tracker is GitHub Issues on this repo (19 issues filed today) and notify is unused.The kit is the template repo, so it never ran
./init.shagainst itself. Nothing reads those keys today, which is why it has gone unnoticed — buttriage-friction-logis the first workflow that would have, and a vendoredtriage_friction_log.pywould resolvetracker.backend: linearand try to file into Linear. Not fixed here to keep this PR to one concern.https://claude.ai/code/session_01V27wAgECMEApqAvmJMFyqm