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
{{ message }}
Repository navigation
feat(skill-quality): read the description target and warn thresholds from settings #11971
The description standard is written in the skill criteria, and its thresholds are settings with named defaults.
Decisions
D82, Q183, Q184: one what-sentence, "Use when" with one trigger per branch, at most three probe-proven hook terms. Target 250, warn above 419, fail at 1,024. Settings: description target 250; warn 419 (1,024 fixed).
Done when
Skill criteria state the description standard: one what-sentence, "Use when" with one trigger per branch, and at most three probe-proven hook terms.
skill-quality:check reads the description target (default 250) and the warn threshold (default 419) as settings resolved through the convention home that config-cascade: settings resolution and convention home #7571 delivered, and fails at 1,024 characters as a fixed limit. A test changes the warn setting and observes the warning move.
Commands (one detached worktree per commit, tests run one at a time)
# red: the merge's check-skill.test.sh copied over the parent's
cp <merge>/plugins/skill-quality/scripts/check-skill.test.sh <parent>/plugins/skill-quality/scripts/check-skill.test.sh
env -C <parent> PATH=... GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_NOSYSTEM=1 bash scripts/run-test-file.sh plugins/skill-quality/scripts/check-skill.test.sh
# green: the merge commit
env -C <merge> PATH=... GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_NOSYSTEM=1 bash scripts/run-test-file.sh plugins/skill-quality/scripts/check-skill.test.sh
Output filtered with grep -E "check 30|^FAIL|assertions|failed"; the full suite ran each time.
Red (parent, exit 1)
ok - check 30 stays quiet at exactly 419 chars and 160 body lines, printing the medians as INFO
FAIL - check 30 should WARN on 420 chars, exit 0 (rc=0): INFO: description length 420/1536 chars
FAIL - check 30 should print the default settings and an INFO above the target: INFO: description length 300/1536 chars
FAIL - check 30 should WARN at the team layer's description_warn 280, exit 0 (rc=0): INFO: description length 300/1536 chars
FAIL - check 30 should take the personal layer's description settings: INFO: description length 300/1536 chars
FAIL - check 30 should name the invalid value and fall back to the default 419: INFO: description length 300/1536 chars
FAIL - check 30 should read no docs/conventions layer when the region binds team-conv: INFO: description length 300/1536 chars
FAIL - check 30 should WARN at team-conv's description_warn 290, exit 0 (rc=0): INFO: description length 300/1536 chars
FAIL - check 30 should WARN on two pointer lines and fall back to the defaults: INFO: description length 300/1536 chars
...
8 assertion(s) failed
exit=1
Green (merge, exit 0)
ok - check 30 stays quiet at exactly 419 chars and 160 body lines, printing the medians as INFO
ok - check 30 WARNs (exit 0) on a 420-char description
ok - check 30 prints the default description settings and an INFO above the target
ok - check 30 moves the description warning to the team layer's description_warn
ok - check 30 lets the personal layer override the team layer key by key
ok - check 30 drops an out-of-range description_warn and resolves to the default, not the team value
ok - check 30 ignores docs/conventions when the pointer region binds another home
ok - check 30 reads the description settings from the bound convention home
ok - check 30 WARNs on an unresolvable pointer region and uses the default settings
...
all assertions passed
exit=0
Planted violation. The key case is a 300-character description with a team-layer description_warn: 280. The parent ignores the setting: 300 is under its fixed 419, so it prints no WARN. The merge WARNs at 280. The 420-character failure on the parent is a message-wording change only. The parent already WARNed at 420, with "Pocock's measured max" where the new text names "the description_warn setting 419 from default", so that row is not evidence for the settings read.
Verdict: PROVEN. The 7 settings cases are red on the parent and green on the merge.
Activity
github-actions commentedon Nov 1, 2026
kyle-sexton commentedon Nov 7, 2026
D22 proof for PR #12157 (#7555 criterion 3).
Check:
check-skill.shcheck 30 readsdescription_target(default 250, INFO) anddescription_warn(default 419, WARN) from the convention-home cascade (default, teamskill-quality.yaml, personalskill-quality.local.yaml). Slice: #11971. PR: #12157Commits
aca26bc3b797231dee89efb2aee101d5c0904178aca26bc3b7^1):a33d0b315fb7195434b32e762ba362cc44f82e5cCommands (one detached worktree per commit, tests run one at a time)
Output filtered with
grep -E "check 30|^FAIL|assertions|failed"; the full suite ran each time.Red (parent, exit 1)
Green (merge, exit 0)
Planted violation. The key case is a 300-character description with a team-layer
description_warn: 280. The parent ignores the setting: 300 is under its fixed 419, so it prints no WARN. The merge WARNs at 280. The 420-character failure on the parent is a message-wording change only. The parent already WARNed at 420, with "Pocock's measured max" where the new text names "the description_warn setting 419 from default", so that row is not evidence for the settings read.Verdict: PROVEN. The 7 settings cases are red on the parent and green on the merge.