Skip to content

feat(lib): add a current-facts-not-targets check for conventions files #9827

Description

@kyle-sexton

Refs #6594. Slice 4 of 4. Blocked by #9801 (slice 1, the owner doc). Runs in parallel with slices 2 and 3.

Problem

Setup runs wrote targets as current facts ("every command supports non-interactive flags"), which would make an agent hang on commands that do not (#6594 Problem 4). Only developer-experience guards against it, and only in model prose (plugins/developer-experience/skills/setup/SKILL.md:95-99, the ## Not yet rule). No shared, deterministic check exists for other adopting plugins.

Fix

  • Add a shared checker under lib/ (for example lib/check-convention-facts.mjs, generated into plugins/developer-experience/lib/ through scripts/sync-shared-copies.sh with a scripts/cross-plugin-source-registry.txt row) that reads a conventions .md and prints one finding per line for each universal claim (every, all, always, never, each followed by a statement about the repository) outside the ## Not yet section, with file:line. It is advisory: exit 0 with findings printed, exit 2 on a usage error. Label it heuristic in its header.
  • Have developer-experience setup's check step 5 call it and list its findings for the model to verify, keeping the model's own verification.
  • Document the rule (current facts only; targets go under ## Not yet or a work item) in the ## Current facts, not targets section of docs/conventions/setup-lifecycle/README.md.

Done when

  • bash lib/check-convention-facts.test.sh (or the .test.mjs the repository's test runner picks up) exits 0, with cases for: a universal claim outside ## Not yet reported with its line number; the same sentence under ## Not yet not reported; a file with no claims printing nothing
  • grep -c 'check-convention-facts' plugins/developer-experience/skills/setup/SKILL.md prints 1 or more
  • bash scripts/sync-shared-copies.sh --check exits 0 (the DX copy is generated and registered in scripts/cross-plugin-source-registry.txt)
  • A developer-experience changelog fragment exists in the PR diff, per ADR 0048
  • grep -c '## Not yet' docs/conventions/setup-lifecycle/README.md prints 1 or more
  • ci-status is green on the PR head

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 24, 2026
  2. github-actions commented on Oct 24, 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: #9801

    Understood: add an advisory, heuristic lib/ checker that flags universal claims ("every", "all", "always", "never", "each") in conventions files outside ## Not yet, with file:line. It would be synced into developer-experience, called from setup check step 5, and documented in the setup-lifecycle conventions README. The done-when list is concrete and checkable, and the approach is clear. The issue names #9801 (the owner doc, slice 1) as a prerequisite, so it is listed as blocking. I found no duplicate among the open issues I was given.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 24, 2026
  4. added
    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.
    status: needs-decisionAwaiting a human or maintainer judgment call.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Oct 24, 2026
  5. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: a Feature needs an open parent issue a listed human filed that awaits no decision. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  6. kyle-sexton commented on Oct 26, 2026

    @kyle-sexton
    MemberAuthor

    Released for re-triage under the owner's 2026-10-26 rule: a person is involved only for "1. A change in original intent/vision 2. Something comes up during implementation ... that alters intent/vision or the primary design 3. If there is a HIGH/CRITICAL security issue". None applies here, so the hold label came off and intake triage runs again now.

    To hold this issue again, add needs-human (or status: needs-decision) and name which of the three applies.

  7. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    status: needs-decisionAwaiting a human or maintainer judgment call.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Oct 26, 2026
  8. melodic-automation-lanes commented on Oct 26, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: admission moved the issue to status: confirmed; its comment says why.

  9. kyle-sexton commented on Oct 27, 2026

    @kyle-sexton
    MemberAuthor

    Released for re-triage under the owner's 2026-10-26 rule: a person is involved only for "1. A change in original intent/vision 2. Something comes up during implementation ... that alters intent/vision or the primary design 3. If there is a HIGH/CRITICAL security issue". None applies here, so the hold label came off and intake triage runs again now.

    To hold this issue again, add needs-human (or status: needs-decision) and name which of the three applies.

  10. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Oct 27, 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.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Fields

    No fields configured for Feature.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions