Skip to content

feat(skill-quality): read the description target and warn thresholds from settings #11971

Description

@kyle-sexton

Refs #7582

Blocked by: #11954
Blocked by: #11965

Outcome

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.

Out of scope

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 1, 2026
  2. added theissue type on Nov 1, 2026
  3. added
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 1, 2026
  4. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 1, 2026
  5. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
  6. kyle-sexton commented on Nov 7, 2026

    @kyle-sexton
    MemberAuthor

    D22 proof for PR #12157 (#7555 criterion 3).

    Check: check-skill.sh check 30 reads description_target (default 250, INFO) and description_warn (default 419, WARN) from the convention-home cascade (default, team skill-quality.yaml, personal skill-quality.local.yaml). Slice: #11971. PR: #12157

    Commits

    • Merge: aca26bc3b797231dee89efb2aee101d5c0904178
    • Parent (aca26bc3b7^1): a33d0b315fb7195434b32e762ba362cc44f82e5c

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions