Skip to content

GOVERNANCE.md and README.md Both Say CI Is Lint-Only, and the Validate Hook Runs the Test Suite #1684

Closed

Description

@ptr727

Two carried surfaces say this repository's CI is lint-only. Its own validate hook has run the script test suite on every pull request for some time, so the claim is false in both places, and spec/type-model.md defines the term in a way the tree does not meet.

The claim

GOVERNANCE.md "Repository Layout", on the .github/workflows/ row:

The hub's own CI is lint-only and its own release source-only

README.md:

CI is lint-only. There is no build or unit test. The PR gate runs markdownlint, cspell, JSON validation (jq parses registry/, spec/, and repo-config/, plus the spec/validate.py cross-reference and shape checks), and actionlint, and exposes the ruleset-bound Check pull request workflow status job aggregator.

What actually runs

.github/actions/validate/action.yml carries an unconditional "Run script self-tests step":

uvx coverage@latest run --source=scripts,spec,host-setup -m unittest discover -s scripts/tests
uvx coverage@latest run --source=scripts,spec,host-setup --append spec/audit.py --selftest
uvx coverage@latest run --source=scripts,spec,host-setup --append spec/workflow_reuse.py --selftest
uvx coverage@latest run --source=scripts,spec,host-setup --append host-setup/agent-safety/claude/gh-write-guard.py --selftest

That action's own description: names "the script self-test suite". It runs on every pull request here. So "there is no build or unit test" is false of the second half, and "CI is lint-only" is false of the category.

spec/type-model.md defines lint-only as "there is no build/test/package for it in this repo", which this tree does not meet.

Why it matters

A reader concludes no tests gate a pull request here and does not run scripts/tests locally before pushing. OPERATIONS.md "Local Verification" prescribes exactly that run, so the two documents disagree about whether this repository has a test suite at all.

What a fix has to settle

Three things, and only the first is wording.

  1. Both sentences, since a fix to one leaves the other standing. README.md's PR-gate enumeration is separately incomplete: it omits editorconfig-checker, the prose gate, the repo gate and the Python lint. Whether that list becomes complete or becomes explicitly non-exhaustive, in the shape CODESTYLE.md already uses, is part of the decision.
  2. The registry entry. registry/repos.json declares this repository types: ["source-only", "docs"], and neither is lint-only, so the prose term may simply be wrong rather than the classification being wrong. Worth confirming which of the two is the defect before either moves.
  3. Whether the coverage run belongs in the claim at all. The self-tests run under coverage, and OPERATIONS.md reports a threshold, so "no unit test" is wrong in a way that also touches how this repository describes its own gate set.

Not this issue

Found while implementing #1155 items 1 to 3. The .github/workflows/ row is rewritten there for a different defect, its description of the fleet's reusable task workflows, and that change restates the lint-only clause without originating it. Filed rather than folded in, because the fix spans README.md and the registry and needs the decision above.

Activity

  1. ptr727 commented on Sep 18, 2026

    @ptr727
    OwnerAuthor

    The GOVERNANCE.md half shipped in #1685 as eb2d44f, since Copilot raised the same defect against the row that pull request rewrites and the maintainer chose to fold it in rather than leave a live thread pointing here.

    That row now reads that the hub's own CI runs the fleet doc-lint set and its own script self-test suite, and that its own release is source-only.

    What is still open here, unchanged. Both are decisions rather than rewordings, which is why they did not ride along:

    1. README.md carries the same claim, "CI is lint-only. There is no build or unit test", and its PR-gate enumeration is separately incomplete: it omits editorconfig-checker, the prose gate, the repo gate, the Python lint, and now the composite-action schema check that #1686 adds. Whether that list becomes complete or becomes explicitly non-exhaustive, in the shape CODESTYLE.md already uses, is the call.
    2. spec/type-model.md defines lint-only as "there is no build/test/package for it in this repo", and registry/repos.json declares this repository types: ["source-only", "docs"], which does not include lint-only at all. So the prose term may simply be wrong rather than the classification being wrong, and confirming which is the defect comes before either moves.
  2. added 2 commits that reference this issue on Sep 18, 2026
  3. ptr727 commented on Oct 23, 2026

    @ptr727
    OwnerAuthor

    Closed under the maintainer's decision (ptr727, 2026-10-23) on #3391: the backlog keeps real bugs with a stated failure, features the maintainer wants, and open decisions. A finding the review loop filed on code or text a change did not touch, a refactor or consolidation chore, a tracker, a wording item, or a guard shape no session has produced is closed rather than worked. Reopen with the input and the wrong result if this issue states one.

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions