fix(docs-hygiene,session-flow): wire remaining memory_dir consumers to shared parse-concern-value helper#847
Conversation
…o shared parse-concern-value helper
audit-noise's convention-roots scan hand-rolled the same naive
${val%%#*}-first strip #482 fixed at its two hot sites (interior-# truncation
in a quoted value) plus a worse defect unique to this copy: collapsing ALL
interior whitespace via ${val//[[:space:]]/}. noise-shapes.sh now resolves
memory_dir/contract_dir through the shared parse-concern-value.sh helper
(materialized from lib/parse-concern-value.sh into
scripts/lib/parse-concern-value.sh, registered in
scripts/sync-parse-concern-value.sh's copies array), matching the ratified
upstream-SSOT + sync-materialization pattern from #482/#756.
The session-flow handoff skill's structure.md placeholder note ("resolve it
first", no mechanism named) now points at the shared helper via the retro
skill's Phase 1.1 as the worked call form -- a doc pointer only, since handoff
has no script of its own to rewire.
The broader tracker-seam-resolution class (#470/#469/#432/#365/#369) is
explicitly out of scope per the operator's ratified bounded-widen ruling.
Closes #474
…ue.sh copy Windows git did not carry the executable bit through the prior commit for the new plugins/docs-hygiene/skills/audit-noise/scripts/lib/parse-concern-value.sh copy, unlike its two siblings (100755). The exec-bit gate in CI flags a 100644 shebang file, and the copy must be directly invocable to match the sync-parse-concern-value.sh precedent.
|
Claude finished @kyle-sexton's task in 3m 26s —— View job PR Review — fix(docs-hygiene,session-flow): wire remaining memory_dir consumers to shared parse-concern-value helper
Verdict: approve with minor observations. The change is clean, correctly scoped, and follows the project's established patterns well. No blockers found. What this doesReplaces the hand-rolled parser in Correctness ✓Byte-identity verified. The new copy at Sync script registration is correct. The new entry in The
Test coverage — adequate, one gap notedThe regression test added at Minor gap: The PR description claims testing of the unquoted interior-whitespace defect ("old Security observationsLow — raw_line=$(sed -n "s/^${key}:[[:space:]]*//p" "$concern_file" | head -1)The comment documents the assumption ("keys are Not a blocker for this PR. Minor notes
CHANGELOG heading style: SummaryAll three defects in the old inline parser are correctly eliminated. The materialized copy is byte-identical with correct permissions, sync registration is clean, version bumps are correct, and the regression test is solid. Approve. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Claude finished @kyle-sexton's task in 2m 22s —— View job Security Review — PR #847
FindingsSUGGESTION — Low exploitability | Confidence: CONFIRMEDUnvalidated
raw_line=$(sed -n "s/^${key}:[[:space:]]*//p" "$concern_file" | head -1)
What can actually go wrong:
Important: no shell code execution is possible here. Suggested guard at the top of the argument-validation block: if [[ ! "$key" =~ ^[a-z_]+$ ]]; then
echo "parse-concern-value: key must match [a-z_]+: $key" >&2
exit 2
fiClean areasEverything else reviewed cleanly:
No CRITICAL or IMPORTANT findings. The single SUGGESTION above is a forward-hardening item; the PR is safe to merge as-is given all current callers pass hardcoded keys. |
Resolves a version-stacking conflict in session-flow: origin/main landed 0.12.0 (new orient skill, hardened keep-going) after this branch bumped 0.11.0 -> 0.11.1. Restacked this PR's handoff doc-pointer fix on top as 0.12.1, preserving both CHANGELOG entries and origin's current nine-skill description. docs-hygiene had no collision -- the PR the conflict was suspected to be from (#846) is still open, not merged.
#846 (whole-page existence pre-check for audit-noise) merged to main moments ago and independently bumped docs-hygiene 0.8.0 -> 0.8.1 with a different CHANGELOG entry -- an exact version collision with this branch's own 0.8.0 -> 0.8.1 bump (git's 3-way merge silently kept one side since the version-string edit was textually identical on both, which would have masked this PR's fix entry). Restacked this PR's convention-roots parser fix on top as 0.8.2, keeping #846's 0.8.1 entry intact beneath it.
|
Claude finished @kyle-sexton's task in 2m 40s —— View job PR Review — fix(docs-hygiene,session-flow): wire remaining memory_dir consumers to shared parse-concern-value helper
Verdict: approve. Two prior Claude reviews covered this thoroughly; the change is correct and the outstanding suggestions from those reviews remain low-priority. Direct verification on the working tree confirms what the diff shows. What's hereThis PR replaces the three-bug hand-rolled parser in Verified on the working treeByte-identity and permissions — confirmed. Ran All three copies are byte-for-byte identical to Sync script registration — correct. The new entry in
CHANGELOG/version consistency — correct.
Open items from prior reviews — status
Neither item blocks merge. Both were explicitly called out as non-blocking in the prior reviews. No new issues foundThe implementation is scoped, the fix is correct, and the materialization pattern matches the two prior sites exactly. |
|
Claude finished @kyle-sexton's task in 2m 14s —— View job Security Review — PR #847
FindingsNo CRITICAL or IMPORTANT findings. SUGGESTION — Low exploitability | Confidence: CONFIRMEDUnvalidated raw_line=$(sed -n "s/^${key}:[[:space:]]*//p" "$concern_file" | head -1)
Current blast radius is zero. Both call sites in What breaks with a bad key:
This finding is pre-existing in the SSOT ( Suggested guard in the SSOT (apply via if [[ ! "$key" =~ ^[a-z_]+$ ]]; then
echo "parse-concern-value: key must match [a-z_]+: $key" >&2
exit 2
fiClean areasEverything else reviewed cleanly:
The PR is safe to merge as-is. The single SUGGESTION above is a forward-hardening item for the SSOT — not a blocker. |
|
Tower merge-sit (T4 dark, stall protocol): CLEAN, 22/22 green, 0 unresolved threads, conflict recomposition verified (both CHANGELOG entries preserved, versions stacked 0.12.1/0.8.2). This was generated by AI (control tower, session 6). |
Summary
Final wiring of the ratified bounded-widen scope on #474: fold the last two verified hand-rolled
memory_dir/contract_dircopies into #482's already-landedparse-concern-value.shhelper (merged via #756).plugins/docs-hygiene/skills/audit-noise/scripts/lib/noise-shapes.sh—audit_noise_convention_roots_patternhand-rolled the same naive${val%%#*}-first strip claude-memory + session-flow: memory_dir seam parsing residuals — '#' truncation in quoted values, absent-config save-point fallback #482 fixed at its two hot sites (truncates a quoted value at an interior#), plus a defect unique to this copy:${val//[[:space:]]/}collapsed all interior whitespace, and there was no quote-stripping. Now resolves both keys through the shared helper, materialized toplugins/docs-hygiene/skills/audit-noise/scripts/lib/parse-concern-value.sh(byte-identical + mode-identical,100755, to the two existing copies) and registered inscripts/sync-parse-concern-value.sh'scopiesarray — the same upstream-SSOT + sync-materialization pattern as the two prior sites (installed plugins are cache-isolated and cannotsourcea sibling's file).plugins/session-flow/skills/handoff/context/structure.mdL116 — replaced the placeholder note (# the concern file's memory_dir when set — resolve it first, no mechanism named) with a pointer to the shared helper via the retro skill's Phase 1.1 as the worked call form. Doc note only: the handoff skill has no script of its own to rewire.Per the operator's ratified bounded-widen decision (2026-07-19T23:26Z) and the tower's 2026-07-21 decision comment on #474, the broader tracker-seam-resolution class (#470/#469/#432/#365/#369) stays explicitly OUT of scope.
Version bumps stack past two independently-merged sibling PRs that landed while this one was open: docs-hygiene
0.8.0→0.8.2(stacks past #846's0.8.1, an exact version collision resolved by re-numbering this PR's entry on top and preserving #846's CHANGELOG entry underneath); session-flow0.11.0→0.12.1(stacks past a merged0.12.0that added theorientskill).Related
parse-concern-value.shhelper and its first two consumers; this PR extends it to the remaining two per the ratified bounded-widen scope.docs-hygieneto0.8.1; this PR's version was restacked to0.8.2on top, both CHANGELOG entries preserved.Test plan
bash plugins/docs-hygiene/skills/audit-noise/scripts/detect.test.sh— 34/34 pass, including a new regression case: a quotedmemory_dir: ".scratch#dir/" # trailing commentnow correctly resolves to.scratch#dir(flags.scratch#dir/foo/as a concrete slice) instead of the old parser's silent truncation.#+ trailing comment + trailing slash: old[.scratch](wrong — truncated inside the quotes) vs new[.scratch#dir](correct).[mydir](wrong — collapsed) vs new[my dir](correct, surrounding whitespace trimmed only).scripts/sync-parse-concern-value.sh --check— all 3 plugin copies matchlib/parse-concern-value.sh.scripts/check-cross-plugin-source-drift.sh --check— no unregistered/drifted clusters (the three copies have distinct within-plugin relpaths, so the generic drift check doesn't need to cluster them; the dedicated sync gate already covers them).scripts/check-changelog-parity.sh --checkand--check-bump origin/main— both touched plugins (docs-hygiene0.8.0→0.8.2,session-flow0.11.0→0.12.1) carry matching CHANGELOG entries.shellcheck+shfmt -d— clean on all new/edited scripts.scripts/validate-plugins.sh— all manifests + catalog valid.Closes #474
Co-authored-by: Claude Fable 5 noreply@anthropic.com