Skip to content

chore(vocabulary): add the retired-sense vocabulary checker with its allowlist #13178

Description

@kyle-sexton

Parent

Refs: #12750. Epic: #12646. Source: PLAN Phase 10, topic planning-chain-consolidation.

Depends on

None.

Outcome

A vocabulary checker script reports each use of AC3's six retired senses in the files it is given, and skips every sense on its allowlist, each allowlist entry named with its reason. It takes --sense <id> (repeatable; all six when absent) and path arguments (the whole repository when absent), always excludes docs/adr, docs/upstream, docs/standards and CHANGELOG files, prints path:line: <sense>: <text> per match, and exits 1 on any match, 0 on none. It is not yet a required check: the sense slices of #12750 use it as their done-when, and the last slice wires it into CI.

Demo: run the checker over docs/contracts/rendered-views/README.md: it reports the "Choosing the rung" heading and the "Default ladder" heading and exits 1; run it over plugins/session-flow/skills/find-handoff: it exits 0 (rung-N files are allowlisted).

The Brief (Problem, Goal, Constraints) is in the epic body.

Decisions

  • Q5-Q12: Retired senses and their replacements: rung for the view form or medium choice (now form, or medium / fallback chain step); default ladder (now fallback chain); overlay for the config cascade's personal layer (now personal override); tier for precedence (now scope, ADR 0075's word); surface for a config file (name the file or setting); contract for the Brief (now Brief). The workflow stage reads Interview.
  • D8: The checker carries an allowlist of senses that stay.
  • Allowlist rule (agent choice recorded on chore(vocabulary): retire rung, default ladder, overlay and the other clashing senses with a checker #12750): every use of these words that is not one of the six retired senses stays, and the issue's Out of scope bars renaming it.

Key interfaces

check-vocabulary [--sense <id>]... [<path>...]
sense ids: rung, default-ladder, overlay, tier-precedence, surface-config, contract-brief
output: <path>:<line>: <sense>: <matched text>      exit 1 on any match, 0 on none
rules and allowlist: one data file beside the script; each rule a pattern for the retired
sense (matched in context, for example overlay beside personal, layer, .local, cascade, or
gitignore; rung beside text, diagram, page, video, medium or view), each allowlist entry a
path glob or phrase plus its reason

Allowlist entries to ship, each with its reason (not the retired sense):

  • rung: the autonomy ladder (D8); enforcement-ladder rungs and ids; the toolchain resolution ladder; the github method ladder; loop-lane and pr-pipeline rungs; find-handoff's rung-N reference files; the education explanation rung (a layer of explanation, not a view form); recommend-skills' candidate ladder.
  • overlay: disk-hygiene's policy overlay; machine-health's catalog overlay (both their own plugin-local mechanism, not the config cascade's personal layer); visual overlays (CSS, UI, video, image, brand) in user-interface, planning's page styles, playwright, animation, pixel-art, ai-briefing's brand overlay, gaming; songwriting's research text; developer-experience's agentic overlay harness; testing's judge-calibration fixtures (verbatim copies of other plugins' code).
  • tier: the rendered-views View tiers (the page's interactivity level); enforcement-ladder tiers; memory tier; model tiers.
  • surface: the interview surface (terminal, page, shared session); a plugin's skills and commands as its surfaces; emitting surfaces.
  • contract: versioned docs/contracts, and interface contracts at design.

Done when

  • The checker and a test of it ship; the test covers one hit and one allowlisted miss per sense, the always-excluded paths, --sense, path arguments and both exit codes.
  • Each allowlist entry above is in the data file with its reason; the Demo commands print what it says.
  • No workflow runs the checker yet.

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.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
  2. added theissue type on Nov 4, 2026
  3. added
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 4, 2026
  4. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: add a vocabulary checker script with a data file of per-sense rules and a reasoned allowlist. It takes --sense and path arguments, always excludes the ADR, upstream, standards and CHANGELOG paths, and exits 1 on any match. A test ships with it, and no workflow runs it yet. The outcome, interfaces, allowlist entries and done-when items are exact, so nothing is missing. I found no duplicates among the open issues.

    Automated triage, applied by the lanes App.

  5. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  6. github-actions commented on Nov 4, 2026

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

    @kyle-sexton
    MemberAuthor

    Delivered: closing as completed.
    Agent choice, not an owner answer.

    #13194 (c66d469, merged 14:11:19Z) says Closes #13178, but the issue did not close on the merge, so this closes it by hand so its dependents unblock.

    • The checker and its test ship: scripts/check-vocabulary.py, scripts/test_check_vocabulary.py and scripts/check-vocabulary.test.sh (c66d469).
    • The allowlist is in the data file with its reasons: scripts/vocabulary-senses.json (c66d469).
    • No workflow runs the checker: git grep check-vocabulary origin/main -- .github/workflows finds nothing.
  8. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Closing on the delivery record above (issuecomment-6633257467): #13194 delivered every criterion; the merge did not auto-close it.

  9. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
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

    priority: mediumReal value, no hard deadline; normal backlog flow.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