Repository navigation
fix(dashboard): recognize R in Code by Language, Quarto/R Markdown as docs - #72
Conversation
|
Ran the checks at the head and verified the premises against Premises, all confirmed:
Head: unit 201/203 (the 2 are Specific credit for one thing that's easy to miss. You noticed that the existing Quarto fixture would now clear the corpus arm on its own — silently converting a test that isolated the render-toolchain arm into one that no longer tested it — and added 1. The PR under-describes its own blast radiusIt's framed as a categorization/display fix. It's also a classification change. Measured across four fixtures, Three things fall out of that: For Quarto, nothing reclassifies. The reclassification is specifically R Markdown. I think that flip is correct — an R Markdown analysis project is exactly the research population BL-5/v3.2 exists to score fairly, and your has-tests gate correctly protects the fourth fixture (an R package with 2. The version collision is three-way (blocking, mechanical)You, #70 and #71 all bump
So the three are code-compatible; two of them just need renumbering to 2.10.4 / 2.10.5 in both twins plus the assertions. I'm planning to take #71 first since it's the branch that un-reds 3. No
|
- Add the missing CHANGELOG.md entry -- this PR was the only one of the five open PRs without one, which the .githooks/pre-commit ledger-gate should have caught (confirmed: it was bypassed with --no-verify for this upstream-targeted branch, same precedent as other PRs, but the entry itself was never written). - DASHBOARD_VERSION 2.10.3 -> 2.10.5: 2.10.3 is independently claimed by a sibling PR, 2.10.4 by another, both open the same day. - Pin the classification consequence review found under-described: a bare .Rmd analysis repo (no toolchain marker) flips doc_only False -> True and softens its "No test infrastructure" risk from HIGH to a doc-only advisory. Quarto repos do NOT reclassify (already doc_only via the toolchain-marker fallback; only their reported metrics change) -- confirmed by direct reproduction against both upstream/main (pre-fix: doc_only=False, HIGH risk) and this branch (post-fix: doc_only=True, softened risk) with the identical fixture. New test_rmd_analysis_repo_flips_doc_only_and_softens_the_test_risk, RED-verified against a temporary pre-fix scanner checkout before landing (git stash alone does not RED-verify a change already baked into a prior commit on this branch -- had to swap in the actual pre-fix file content). Verified: python3 -m unittest tools/test_methodology_dashboard.py 204/204 (198 prior + 6 original + 1 new); the 2 failures on this base are pre-existing and fixed by a sibling PR, not this one. bin/check-links OK. Twins byte-identical. Rebased onto upstream/main (clean, no conflict -- this PR had no CHANGELOG.md entry to collide with). Reviewed-by: KJ5HST <review comment on PR KJ5HST#72> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6380139 to
3082d71
Compare
…s docs SOURCE_EXTS already had .r (R always counted toward Source LOC), but LANG_MAP had no entry for it, so R never got its own row in the Code by Language breakdown -- found scanning a real R package (603 .r files, 77,773 LOC, present in Source but invisible per-language). .qmd (Quarto) and .rmd (R Markdown) were in neither SOURCE_EXTS nor DOC_EXTS, so a file with either extension outside a docs/ path fell through categorize_file's whole ladder to "other" -- not source, not docs, not even LOC-counted (LOC is skipped entirely for "other"). Added both to DOC_EXTS: they are literate-document formats (prose with embedded code), the same bucket .md already lives in. Updated the doc-only corpus-disjunction comment, which described a pure-Quarto repo's .qmd as never counted as docs -- no longer true after this change (a pure-LaTeX repo's .tex still isn't). Added a new fixture + test isolating the render-toolchain arm of that disjunction from the doc-corpus arms, since the existing Quarto fixture's own doc_loc now also clears the corpus threshold on its own and no longer exercises the toolchain arm in isolation. DASHBOARD_VERSION 2.10.2 -> 2.10.3 (also independently proposed by two other currently-open PRs against unrelated changes; whichever merges last will need a fresh bump at that time). RED-first: all 6 new/changed assertions confirmed failing against unmodified upstream/main before either constant was touched. Full suite 203/203 minus 2 pre-existing failures unrelated to this change (FRAMEWORK_INSTALLED_SOURCE not yet extended for context_budget.py, same baseline reproduced against a clean upstream/main worktree). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Add the missing CHANGELOG.md entry -- this PR was the only one of the five open PRs without one, which the .githooks/pre-commit ledger-gate should have caught (confirmed: it was bypassed with --no-verify for this upstream-targeted branch, same precedent as other PRs, but the entry itself was never written). - DASHBOARD_VERSION 2.10.3 -> 2.10.5: 2.10.3 is independently claimed by a sibling PR, 2.10.4 by another, both open the same day. - Pin the classification consequence review found under-described: a bare .Rmd analysis repo (no toolchain marker) flips doc_only False -> True and softens its "No test infrastructure" risk from HIGH to a doc-only advisory. Quarto repos do NOT reclassify (already doc_only via the toolchain-marker fallback; only their reported metrics change) -- confirmed by direct reproduction against both upstream/main (pre-fix: doc_only=False, HIGH risk) and this branch (post-fix: doc_only=True, softened risk) with the identical fixture. New test_rmd_analysis_repo_flips_doc_only_and_softens_the_test_risk, RED-verified against a temporary pre-fix scanner checkout before landing (git stash alone does not RED-verify a change already baked into a prior commit on this branch -- had to swap in the actual pre-fix file content). Verified: python3 -m unittest tools/test_methodology_dashboard.py 204/204 (198 prior + 6 original + 1 new); the 2 failures on this base are pre-existing and fixed by a sibling PR, not this one. bin/check-links OK. Twins byte-identical. Rebased onto upstream/main (clean, no conflict -- this PR had no CHANGELOG.md entry to collide with). Reviewed-by: KJ5HST <review comment on PR KJ5HST#72> Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3082d71 to
c4fd879
Compare
…tream PRs, 4 merged Reviewed and responded to maintainer feedback on PRs KJ5HST#68-KJ5HST#72 one at a time. KJ5HST#68 needed no action (maintainer merged unassisted). KJ5HST#69/KJ5HST#70 each got one targeted fix. KJ5HST#71's own fix was found not to work by the maintainer; rewritten in-branch as a real per-file signature gate (operator-directed) rather than merged-then-follow-up. KJ5HST#72 was reviewed separately mid-session and got three fixes (missing CHANGELOG entry, version collision, an under-described classification consequence pinned with a new regression test). upstream/main moved three times during the session (PR merges landing mid-work), forcing repeated CHANGELOG.md-prepend-collision rebases, resolved with explicit operator go-ahead each time. KJ5HST#68/KJ5HST#69/KJ5HST#70/KJ5HST#71 are now all MERGED upstream. KJ5HST#72 remains open with a real multi-file code conflict against the cumulative merged state -- deliberately left unresolved per operator direction rather than rushed. Two process deviations disclosed in the S82 receipt, not hidden: no Phase 1B claim stub was written at session start, and a commit landed on PR KJ5HST#70 after an operator 'yes' that answered a different question -- caught by the operator directly, not self-caught. Operator's direction was to leave the KJ5HST#70 push as-is. Self-score 7/10; predecessor S81 evaluated at 8/10 (see HANDOFFS.md for both full write-ups). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…directed Also reconciles S82's own receipt: `commit:` answer slot was still `pending`; the commit that flipped that block to `status: complete` is 62168e6 itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…s a byproduct Local main had not merged upstream/main since a2a7275 (PR KJ5HST#66), so it was 21 commits behind: PRs KJ5HST#68/KJ5HST#69/KJ5HST#70/KJ5HST#71's own merges, plus two of the maintainer's own S9/S10 sessions this fork's ledger never recorded. PR KJ5HST#72's 4-file conflict was really "local main is stale," not a defect in the PR itself. Resolved file by file (git merge --no-commit, no --strategy shortcut): - CHANGELOG.md/HANDOFFS.md: discarded upstream's re-sent content that this fork had already archived on its own side; appended the 3 genuinely-new upstream-only actions (issue KJ5HST#65's structural tests, the AGENTS.md/citation cleanup, FM KJ5HST#28 + context_budget.py) at the tail, dated by their true date. - CLAUDE.md: kept this fork's own docs/RELEASE_HISTORY.md extraction (BL-9 L3) over upstream's un-extracted inline history (confirmed byte-identical content); FM count 27->28 auto-merged cleanly. - tools/methodology_dashboard.py + starter-kit/ twin: kept this fork's more evolved _FRAMEWORK_INSTALLED_CONTENT derived-table design over upstream's separately-maintained _FRAMEWORK_FILE_SIGNATURES dict (same underlying fix, built independently on each side after PR KJ5HST#71's review cycle); ported context_budget.py/.context-budget.json's real signature values into it. DASHBOARD_VERSION 2.15.1 -> 2.15.2. - bin/check-handoff: kept this fork's richer stub-schema logic, added upstream's --all mode (validate_ledger/scan had already auto-merged cleanly). --all immediately found and fixed a real pre-existing defect: a stray bare ``` in HANDOFFS.md was silently swallowing S72's receipt whole. - bin/check-learnings: arrived from upstream's issue KJ5HST#65 work, written against upstream's inline-table layout; retargeted at this fork's own extracted FRAMEWORK_LEARNINGS.md (S34, BL-9) and given a table-header-row anchor instead of a section-heading one, plus a reserved-number exception for the file's own documented `KJ5HST#14` gap. Immediately surfaced BL-35 (raised, not fixed) -- two malformed rows live since S40/S41. - bin/tests.sh: kept all of this fork's own Tests 23-31; renumbered upstream's new tests 23-25 -> 32-34 and its untitled context_budget.py block -> 35; rewrote Tests 32-34 to target this fork's real files/anchors dynamically (not hardcoded upstream-only text) and to assert on each mutation's specific finding rather than "any failure." - bin/_manifest.py: added context_budget.py (TRACKED) after this fork's own methodology_trim.py entry; .context-budget.json (SEED) had already auto-merged in cleanly elsewhere in the file. - starter-kit/BOOTSTRAP.md: added .context-budget.json to the never-overwrite row and context_budget.py to the tracked row (Test 28 caught the gap). - README.md: combined both sides' bin/ tree rows. Verified: python3 -m unittest tools.test_methodology_dashboard 299/299; python3 bin/check-links OK; python3 bin/check-handoff --all OK (modulo this session's own still-open S83 claim stub); python3 bin/check-learnings reports exactly BL-35's 2 disclosed findings; bin/tests.sh 225/229 (Test 9's pre-existing baseline + 3 findings tied to this session's own still-pending S83 receipt, all confirmed resolving once that receipt is completed at close-out); twins re-confirmed byte-identical throughout. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… upstream merge, self-score 8/10 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rebased branch outside any session Phase 0 orientation found PR KJ5HST#72 already mergeable_state:clean on GitHub, though S83's receipt says its rebased branch was NOT pushed. The PR timeline shows the operator force-pushed it twice outside any session, landing exactly the sha S83's next_steps specified. Non-commit outward action, no prior ledger record (FM KJ5HST#27) -- reconciled, not altered. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… self-score 8/10 Also reconciled a Phase 0 gap (operator pushed PR KJ5HST#72's branch outside any session, unrecorded) before task selection. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…fied, not synced into local main Operator reported the merge; independently re-verified in an isolated worktree at the merge commit (5c59f0b) rather than trusting the report or the commit messages -- unittest 208/208, bin/tests.sh 114/114, both review requests (version collision resolved, classification test) confirmed present. Local main deliberately not synced here: a real 4-file conflict exists because BL-34's fix was built twice independently against two different base trees (once on local main directly, once on the PR KJ5HST#72 branch against a clean upstream/main). Reconciling is a real judgment call, deferred to a dedicated sync. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rded, self-score 8/10 Sync of local main with upstream/main deliberately deferred: a real 4-file conflict exists because BL-34's fix was built twice independently against two different base trees. Verify+record scoped as this session's deliverable; the sync itself needs a real judgment call, left for a dedicated pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…BL-34's 4-file conflict Real 3-way merge (git merge upstream/main --no-commit, no strategy shortcut), file by file. Upstream moved further than S86's own claim scoped (v3.7 tagged, issue KJ5HST#67 independently fixed) between claim and this commit -- re-derived the actual conflict shape rather than trusting the snapshot (Learning KJ5HST#13), then resolved the full scope rather than narrowing back. CLAUDE.md/docs/RELEASE_HISTORY.md: kept this fork's own extraction (BL-9 L3) over upstream's reintroduced inline history; appended upstream's new v3.7 entry to RELEASE_HISTORY.md with a fork note that every functional item in it had already reached this fork independently before the tag (S83's merge, BL-34, this fork's own S62 issue-KJ5HST#67 fix). CHANGELOG.md: newer-dated upstream entries (v3.7 release narration, issue KJ5HST#67 fix) placed above this fork's own 2026-08-11 entries; dropped one orphaned duplicate (upstream's own BL-31/PR#71 narration -- same event this fork's BL-31 entries already cover, integrated at S83). tools/methodology_dashboard.py + starter-kit twin: kept this fork's own BL-34 comments/DASHBOARD_VERSION (2.15.2) throughout -- functionally identical to upstream's leaner upstream-targeted wording. For issue KJ5HST#67's stale-copy remedy, kept this fork's own `--sync [DIR]` single-project scoping design over upstream's `cp`-based one -- more general, already covered by ~15 existing Row 13/14 tests. README.md's auto-merged "What's New in v3.7" section described upstream's cp-based remedy; corrected the one inaccurate bullet to match what this fork actually ships. tools/test_methodology_dashboard.py: kept BL-34 comment flavor; adopted upstream's new `test_rmd_analysis_repo_flips_doc_only_and_softens_the_test_ risk` (genuinely new, never landed on this fork's own main, only on the separate PR KJ5HST#72 branch); dropped upstream's whole `TestCliRemedyProportion ality` class as redundant with this fork's own more thorough --sync-target coverage -- one of its assertions (`assertIn("cp ", err)`) would have failed against this fork's correct, already-tested `--sync [DIR]` design, not caught a real defect. HANDOFFS.md: upstream's S11 (issue KJ5HST#67 fix) merged in, dated later than this session's own recent entries but placed BELOW this session's S86 stub -- `check-handoff --allow-pending` exempts only the file's literal newest block, so a later-dated but still-open receipt above an in-flight one breaks the exemption (found live: two stacked pending stubs, both flagged red under --allow-pending). Upstream's own S12 (the v3.6->v3.7 release session, still `status: pending` at upstream/main's tip) is deliberately NOT recorded -- a pending stub is a live claim, not settled history; a future sync should re-check for its completion rather than assume this one reconciled it. Receipt count corrected 24 -> 28. Verified: python3 -m unittest tools.test_methodology_dashboard 300/300; bash bin/tests.sh 228/229 (Test 9's pre-existing github-source gap aside); bin/check-links OK (88/22); bin/check-learnings OK (22 rows, 0 findings); bin/check-handoff --all --allow-pending OK (28 receipts); twins byte-identical. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…4 fully CHANGELOG.md entry narrating the aa378ab merge's file-by-file resolution. BL-34's BACKLOG.md entry gets a SYNCED paragraph; header updated to drop "local main not yet synced". BL-34 is now fully closed -- both the PR KJ5HST#72 merge and the local sync are done. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…-57 row, plan status, fork Learning KJ5HST#72 The BL-54 row and detail record the fix, the operator's option C with the options measured, and that the item stays open only for its upstream PR. BL-57's next step becomes P6-P11, and the plan's status line says adopters can sync from fork main again. Fork Learning KJ5HST#72: a rejected design option is a ready-made mutant. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…history; nothing upstream-facing Receipt complete (check-handoff OK): predecessor S217 scored 8, self 8. Gate citations: fork main (clone of f92a55b) 11/11, identical to Phase 0; the branch (clone of 252a4b6) 10/10, suite 170/0/0. Fork Learning KJ5HST#92 with D3's retire-or-refuse: rows KJ5HST#16, KJ5HST#64, KJ5HST#72, KJ5HST#91 considered, none retires. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
SOURCE_EXTSalready had.r(R source always counted toward Source LOC), butLANG_MAPhad no entry for it, so R never got its own row in the Code by Language breakdown. Found scanning a real R package: 603.rfiles, 77,773 LOC — present in Source, invisible per-language..qmd(Quarto) and.rmd(R Markdown) were in neitherSOURCE_EXTSnorDOC_EXTS, so a file with either extension outside adocs/path fell all the way throughcategorize_file's ladder to"other"— not source, not docs, not even LOC-counted (LOC is skipped entirely for"other"). Added both toDOC_EXTS: they're literate-document formats (prose with embedded code), the same bucket.mdalready lives in.Also updated the doc-only corpus-disjunction comment (it described a pure-Quarto repo's
.qmdas never counted as docs — no longer true; a pure-LaTeX repo's.texstill isn't), and added a new fixture + test that isolates the render-toolchain arm of that disjunction from the doc-corpus arms, since the existing Quarto fixture's owndoc_locnow also clears the corpus threshold on its own.DASHBOARD_VERSION2.10.2→2.10.3(also independently proposed by #70 and #71 for unrelated changes — whichever of the three merges last will need a fresh bump at that time; not something this PR can pre-empt).RED-first: all 6 new/changed assertions confirmed failing against unmodified
upstream/mainbefore either constant was touched. Full suite 203/203 minus 2 pre-existing failures unrelated to this change (FRAMEWORK_INSTALLED_SOURCEnot yet extended forcontext_budget.py— same baseline reproduced against a cleanupstream/mainworktree; #71 already addresses it).Edit: addressed all three review findings.
1. Missing
CHANGELOG.mdentry — added. This was the only one of the five open PRs without one. Confirmed why: the.githooks/pre-commitledger gate was deliberately bypassed with--no-verifyfor this upstream-targeted commit (the correct call — that hook enforces this fork's own ledger convention, which doesn't apply to an upstream branch), but the entry itself was simply never written, unlike the sibling PRs. Added now, describing the change, the classification consequence below, and verification.2. Version collision — now three-way, resolved.
#70and#71(open the same day) have since moved to2.10.4and kept2.10.3respectively, so this PR now takes2.10.5in both twins +test_dashboard_version.3. Under-described blast radius — pinned with a new test, not split to a follow-on. You're right that Quarto repos don't actually reclassify (already
doc_onlyvia the toolchain-marker fallback; this PR only fixes their reported metrics) but bare.Rmddoes — no toolchain marker at all, so adding.rmdtoDOC_EXTSis what newly clears the corpus disjunction for that class. Verified by direct reproduction with the same fixture shape (a.Rhelper + several.Rmdfiles, no_quarto.yml/_bookdown.yml) against both trees:New test
test_rmd_analysis_repo_flips_doc_only_and_softens_the_test_riskpins exactly this — RED-verified against a genuine pre-fix scanner checkout (not justgit stash, since the underlying fix was already a committed diff on this branch, not working-tree state) before landing.Re-verified
python3 -m unittest tools/test_methodology_dashboard.py— 204/204 (198 prior + 6 original + 1 new; the 2 pre-existing failures on this base are fixed by fix(dashboard): extend framework-installed exclusion for context-budget gate #71, not this PR)python3 bin/check-links— OK (83 links / 21 files)tools/andstarter-kit/twins confirmed byte-identicalmain(a2a7275→ post-docs(skills): re-ground the /caveman row's remaining unsupported claim #68-merge) — clean, no conflict (this PR had noCHANGELOG.mdentry to collide with before this edit)🤖 Generated with Claude Code