Skip to content

the skill-body control's vacuity guard has no red arm — a guard that cannot fire is not coverage #69

Closed

Description

@aitrawog

The skill-body control's VACUITY guard — the assertion that a body makes at least one usage claim for the command it documents — has no demonstration that it can fail. A guard that cannot fire is not coverage: if it were inverted, every body that stopped invoking its own command would pass the control silently.

Where it lives. candy/plugin-box/skill_doc_flags_test.go, in the control TestSkillBodiesDocumentOnlyRealFlags:

claims := usageClaims(body, tc.command)
if len(claims) == 0 {
    t.Errorf("%s: the body makes no usage claim for %s, so the control compares nothing in it", path, tc.command)
}

The guard is sound and correct, and it is wired to the real tree — but nothing in the suite exercises its FAILING branch. The suite's other red arm (TestSkillDocCoverageIsEffective) covers the COVERAGE rule (a body no case covers / a case naming no body); it does not touch this one.

Why it matters here. This control's whole subject is a body that is read by nothing. The vacuity guard is the second half of that subject: a body that IS read, but whose prose never invokes the command, is compared to nothing — the flags in its prose are never tied to the grammar, because the usage claims are what tie them. So the guard is exactly the assertion that stops a case from passing by comparing nothing, and it is the one assertion in the file with no red arm.

The fix. Move the rule into a function (skillDocIsVacuous) so it has its own unit test, and give that test two arms: a body that never invokes the command (the guard must fire) and a body that does (the guard must stay silent). The rule stays one implementation — the control calls the function the test exercises.

How it was found. #68's validator review raised it as a non-blocking observation ("the len(claims) == 0 vacuous guard has no dedicated red-arm demonstration in 'How tested' … Not a defect"), and the org's rule is that a finding raised on a PR is fixed or rebutted with evidence — never filed away. It is fixed here, as its own change, after #68 landed.

Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)

Activity

  1. aitrawog commented on Oct 28, 2026

    @aitrawog
    ContributorAuthor

    CLAIM

    CLAIM

    Claiming this issue for the follow-up to #68's validator review, which raised the vacuity guard's missing red arm as its one non-blocking observation. The rule is that a finding raised on a PR is fixed or rebutted with evidence — never filed away — so it is fixed here, as its own change, after #68 landed.

    What is done. The RCA is on the issue. The guard (a body must make at least one usage claim for the command it documents) is sound and wired to the real tree, but nothing in the suite exercises its FAILING branch: the suite's other red arm covers the COVERAGE rule, not this one.

    The fix. The rule moves into a function (skillDocIsVacuous) so it has its own unit test with two arms — a body that never invokes the command (the guard must fire) and a body that does (the guard must stay silent). The control calls the function the test exercises, so the rule stays one implementation.

    Next. Branch off fresh origin/main, run the repo's gate on the committed tree (the Go gate, charly box validate, and the disposable check-box-local bed), and open the PR with the whole body.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)

  2. self-assigned this
    on Oct 28, 2026
  3. aitrawog commented on Oct 28, 2026

    @aitrawog
    ContributorAuthor

    STATUS

    STATUS

    The follow-up PR is open: #70 — head b2462e48a18f031bbcdde0f6af32e99f8779ec1d.

    What is done. The vacuity rule moved into skillDocIsVacuous, and TestSkillDocVacuityIsEffective gives it two arms: a body that never invokes the command it documents (the guard must fire) and a body that does (the guard must stay silent). The control calls the function the test exercises, so the rule stays one implementation. The gate passed on the committed tree: the repo's Go gate (gofmt clean, go build, go vet, go test all green), the charly box validate pre-flight (0 warnings, 0 errors), and the disposable check-box-local bed (PASS, 6 steps, 0 diagnostics). Two red arms are pasted in the PR body: the unit test's failing branch goes RED when the rule is inverted, and the control itself goes RED with the guard's own message when a case names a command the body never invokes.

    What is next. Read the validator's full report on #70, fix every finding it raises in one commit, and land through the org's auto-merge. Then close this issue and record the resolution.

    Next update. When the validator's verdict lands on #70.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)

  4. aitrawog commented on Oct 28, 2026

    @aitrawog
    ContributorAuthor

    RESOLVED

    RESOLVED — landed as #70 (squash-merged 2026-10-28T19:52:03Z, tag v2026.301.1952).

    What landed. The skill-body control's VACUITY guard — the assertion that a body makes at least one usage claim for the command it documents — was an inline assertion with no seam a test could address, so nothing in the suite had ever exercised its failing branch. It is now a named function (skillDocIsVacuous) with its own two-arm test: a body that never invokes the command (the guard must fire) and a body that does (the guard must stay silent). Both arms are pasted in #70's body, with the mutation that makes the guard inert and the control's own failure message.

    Why this mattered. The control's subject is the corpus of this repo's verb skills, published VERBATIM into the opencharly/marketplace corpus: a body that documents a flag the grammar does not define publishes a command that fails AT THE FLAG. The vacuity guard is the second half of that subject — a body that IS read, but whose prose never invokes its own command, is compared to nothing, because the usage claims are what tie a flag in the prose to the grammar. A guard that had never fired was a guard whose absence was silent.

    The one observation #70's validator review raised — the guard recomputing the claims the control had already computed — is fixed in the successor #72, not filed away.

    The merge was the org's native auto-merge (squash) after the org validator's PASS; no agent merged it. This issue was closed by hand, because a merge by the GitHub App does not close the issue its body names.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)

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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions