You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First dogfood run of /coupling:reduce (dry-run, scope scripts/, PR #2913) produced 8 verified findings. One is apply-lane (shipped separately as a chore/decouple-scripts-test-git-helpers PR); these 7 are route-lane — cross-file or architectural, surfaced for human decision per the detector-findings doctrine, never auto-applied. Each was reproduced against the tree before filing (evidence commands in the ledger; grep-reproducible).
Ranked by strength × degree × distance × volatility:
Seven checkers re-implement base-ref validation + changed-file resolution (connascence of algorithm, 7 scripts). Divergence already live: check-changed-skills.sh:53 and check-docs-only.sh:63 lack the NUL-safety/--diff-filter=d invariant that check-shell-portability.sh:259 / check-skill-portability.sh:135 carry. Remediation: extract scripts/lib/changed-files.sh (resolve_base/changed_paths), mirroring the scripts/lib/sync-cluster.sh precedent.
Portability-gate bugfix did not propagate between twin scanners: the ci: harden shell-portability-lint detection precision (sed -i spellings, portability-scope precision, awk operand edge case) #1513 awk-operand fail-open guard exists in check-shell-portability.sh:141-144 and is absent from check-skill-portability.sh (verified 1 vs 0). Remediation: extract scripts/lib/token-scan.sh (token loading, operand guard, mode dispatch); both gates become parameterizations. The missing guard itself may deserve an immediate one-line fix ahead of the extraction.
affected-tests.sh scrapes sync-*.sh source text for src=/copies=( (content coupling, 5 producers, comment-guarded). Remediation: each sync script publishes a --print-manifest surface; the consumer invokes instead of scraping.
fetch-depth: 0 + origin/$BASE_REF incantation replicated across 20 CI jobs (connascence of value + execution order; only the stale-base lane fetches the base explicitly). Remediation: composite action .github/actions/checkout-with-base owning depth, base fetch, and BASE_REF export.
docs_only string contract fans out to 46 references in ci.yml (connascence of meaning; the inverse-polarity invariant is maintained by a prose comment). Remediation: hoist scope resolution into one job; consumers read needs.scope.outputs.docs_only.
Test-harness scaffolding re-declared in 23 suites in two dialects (20 PASS/FAIL counter files vs 3 TAP-ish). Remediation: scripts/lib/test-harness.sh in one dialect, sourced.
One # comment/blank-stripped line format, five bespoke parsers over ~10 scripts/*.txt data files — check-shell-portability.sh itself parses it two different ways (lines 183 vs 194). Remediation: scripts/lib/read-list.shread_active_lines defining comment/escape semantics once.
Full typed ledger (edges, strength, degree, locality, volatility, evidence) lives in the memory-tier artifact .work/coupling/coupling-ledger.md of the machine that ran the pass; re-running /coupling:reduce dry-run scripts regenerates it from current state.
Also deferred from the apply-lane batch: check-stale-base-overlap.test.sh:21 hand-rolls git init -q -b main; git_init_test_repo has no init-args seam, so adopting it there needs a tiny helper extension first (route: extend test-git-helpers.sh with an optional initial-branch argument).
First dogfood run of
/coupling:reduce(dry-run, scopescripts/, PR #2913) produced 8 verified findings. One is apply-lane (shipped separately as achore/decouple-scripts-test-git-helpersPR); these 7 are route-lane — cross-file or architectural, surfaced for human decision per the detector-findings doctrine, never auto-applied. Each was reproduced against the tree before filing (evidence commands in the ledger; grep-reproducible).Ranked by
strength × degree × distance × volatility:check-changed-skills.sh:53andcheck-docs-only.sh:63lack the NUL-safety/--diff-filter=dinvariant thatcheck-shell-portability.sh:259/check-skill-portability.sh:135carry. Remediation: extractscripts/lib/changed-files.sh(resolve_base/changed_paths), mirroring thescripts/lib/sync-cluster.shprecedent.check-shell-portability.sh:141-144and is absent fromcheck-skill-portability.sh(verified 1 vs 0). Remediation: extractscripts/lib/token-scan.sh(token loading, operand guard, mode dispatch); both gates become parameterizations. The missing guard itself may deserve an immediate one-line fix ahead of the extraction.affected-tests.shscrapessync-*.shsource text forsrc=/copies=((content coupling, 5 producers, comment-guarded). Remediation: each sync script publishes a--print-manifestsurface; the consumer invokes instead of scraping.fetch-depth: 0+origin/$BASE_REFincantation replicated across 20 CI jobs (connascence of value + execution order; only the stale-base lane fetches the base explicitly). Remediation: composite action.github/actions/checkout-with-baseowning depth, base fetch, andBASE_REFexport.docs_onlystring contract fans out to 46 references inci.yml(connascence of meaning; the inverse-polarity invariant is maintained by a prose comment). Remediation: hoist scope resolution into one job; consumers readneeds.scope.outputs.docs_only.PASS/FAILcounter files vs 3 TAP-ish). Remediation:scripts/lib/test-harness.shin one dialect, sourced.# comment/blank-strippedline format, five bespoke parsers over ~10scripts/*.txtdata files —check-shell-portability.shitself parses it two different ways (lines 183 vs 194). Remediation:scripts/lib/read-list.shread_active_linesdefining comment/escape semantics once.Full typed ledger (edges, strength, degree, locality, volatility, evidence) lives in the memory-tier artifact
.work/coupling/coupling-ledger.mdof the machine that ran the pass; re-running/coupling:reduce dry-run scriptsregenerates it from current state.Also deferred from the apply-lane batch:
check-stale-base-overlap.test.sh:21hand-rollsgit init -q -b main;git_init_test_repohas no init-args seam, so adopting it there needs a tiny helper extension first (route: extendtest-git-helpers.shwith an optional initial-branch argument).