Skip to content

test(docs-hygiene): run the write-for-humans grounding eval and post its probe result #12025

Description

@kyle-sexton

Parent #7591's done-when reads "The write-for-humans eval slice carries a Probe result: comment", and Q526 ships a grounding rule in /docs-hygiene:write-for-humans only if an eval shows the gap; the lane cannot run evals (comment 6556369883) and only a host with the claude CLI can, so this separate slice runs the cases slice S2 adds. The eval passes are model usage under the Claude subscriptions or the accounts' promotional API credits, which the owner's standing direction section 3 calls "Not cost, so spend it freely" (docs/contracts/loop-lane/README.md:351); each pass still sets a --max-cost-usd ceiling.

Done when

  • claude plugin eval runs the wfh-grounding-* cases with and without the docs-hygiene plugin, at each case's runs: count. Each pass sets a --max-cost-usd ceiling.
  • A comment on this issue whose first line starts with Probe result: gives:
    • the CLI version;
    • the ceiling used;
    • per case and arm, the grounding grader's pass count over its runs;
    • the verdict: gap shown when the with-plugin arm fails the grounding grader in at least one run of any case, otherwise no gap.
  • The probe result is also committed: a PR adds the Probe result: verdict line to each wfh-grounding-* case's description in case.yaml, adds a .changes/docs-hygiene/*.md fragment with bump: none, and closes this issue.
  • When the gap is shown, an issue to add the rule to /docs-hygiene:write-for-humans is filed as a sub-issue of domain-driven-design: glossary layout, pressure-test observe, write-for-humans eval #7591, with Parent: #7591 in its body, and is linked in the comment. When no gap is shown, the comment says the rule does not ship.

Out of scope

  • Writing the grounding rule in this slice.

Parent: #7591

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.
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 1, 2026
  4. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Claim: Backlog HITL host-run worker is running this probe on branch host-run/12025-wfh-grounding-probe (stacked on #12034). The Probe result comment follows from the coordinator.

  5. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Probe result: Host run. Ran the /docs-hygiene:write-for-humans grounding eval (wfh-grounding-readme, wfh-grounding-howto) with and without the docs-hygiene plugin. Verdict: gap shown.

    What ran

    • Claude Code 2.1.316 on the subscription login, model claude-opus-5-5 pinned with --model (12 of 12 traces). The judge was the CLI default (haiku), 3 votes per verdict.
    • Cases from test(docs-hygiene): add eval cases for the write-for-humans grounding gap #12034 (slice S2, open and unmerged) at head 03bf0daa986712f193618021ead0090eff99b5bf. If test(docs-hygiene): add eval cases for the write-for-humans grounding gap #12034's case files change before it merges, this probe is stale and must re-run.
    • /evals:validate (validate-cases.py) on the suite before and after the edit: no FAIL. The only warnings were judge calibration for the samples/ answers.
    • Command, one suite, in a capped claude.slice scope with a short TMPDIR: claude plugin eval <copy>/docs-hygiene --case 'wfh-grounding-*' --ablation with-without -j 2 --model claude-opus-5-5 --disallow-tools Agent Task Bash --max-cost-usd 20 --trust-plugin --no-publish --keep-temp. Each case's own runs: 3 was used.
    • Ceiling: --max-cost-usd 20. The CLI reported $1.45 notional spend, with no partial result.
    • The first attempt, run against the worktree path, refused every run with a git directory of the plugin registers more linked worktrees than can be screened. The second run used an rsync copy of the plugin in a directory outside any git repository, as /evals:plugin-eval describes.
    • The cases grant Skill, Read, Glob and Grep only. No Bash, so neither the Docker-store refusal nor the sandbox-socket failure applies.
    • Validity: run-validity.py --runs 3 gave VALID: complete, no run errors, no permission denials, 12 of 12 traces resolved, and the skill fired in 6 of 6 with-arm runs. Warnings:
      • judge model not recorded (it was the CLI default);
      • one split judge vote (readme, with-arm run 3: PASS FAIL FAIL);
      • the how-to without-arm was already at 1.00, so it is left out of the delta.

    Scores (terms-grounded grader, passes over runs)

    Case With plugin Without plugin Skill fired (with)
    wfh-grounding-readme 0/3 0/3 3/3
    wfh-grounding-howto 3/3 3/3 3/3
    • Total n = 12 runs (2 cases, 2 arms, 3 runs each). Delta with minus without is +0.00 on both cases.
    • In every with-arm README run the skill fired, and the judge still failed the README on grounding checkpoint, collector and tail set. The result records votes only, not which term failed. Under the issue's rule (a with-arm grounding fail in at least one run of any case), the gap is shown.

    Done when

    • Met: claude plugin eval ran both wfh-grounding-* cases with and without the plugin at each case's runs: 3, under a --max-cost-usd 20 ceiling.
    • Met: this record is the Probe result: comment, with the CLI version, the ceiling, per-case and per-arm pass counts, and the verdict.
    • Met on the branch, PR pending: commit 21132fbe15 adds the Probe result: verdict line to each case's description and adds .changes/docs-hygiene/host-run-12025-wfh-grounding-probe-ce98e335.md with bump: none. The commit message carries Closes #12025.
    • Unmet: the follow-up sub-issue of domain-driven-design: glossary layout, pressure-test observe, write-for-humans eval #7591 (add the grounding rule to /docs-hygiene:write-for-humans) is not filed yet. This worker may not file issues, so the coordinator files it and adds its link to this comment.

    Branch: host-run/12025-wfh-grounding-probe, head 21132fbe15b54fa9c4086f341a8aae176a178822. It is stacked on #12034's commit 03bf0daa98, because the cases exist only there. scripts/check-affected.sh --tests on the committed head gave 13 passed and 3 skipped. Pushed. No PR is open.

    Target labels: add none; remove host-run.

    Follow-up filed: #12085 (sub-issue of #7591).

  6. removed
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 1, 2026
  7. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 1, 2026
  8. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor
    No description provided.
  9. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 1, 2026
  10. melodic-automation-lanes commented on Nov 1, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped on this issue (host-only): the run reports the work needs a host run the lane cannot make.
    It added host-run and removed agent-ready: an agent run on a host builds it, and it waits on no decision from a person.

    In the run's words:

    host-only: the host-run probe result posted on this issue is stale, so it cannot be committed as the cases' verdict. Its own comment says it ran the cases at #12034 head 03bf0da and that a change to those case files before merge makes it stale and requires a re-run. #12034 merged (a948531) with a later commit, cafdc26, that changed the PASS rule in both wfh-grounding-*/graders/terms-grounded.md files, the exact grader the verdict rests on. The rule now judges grounding only and no longer requires a dropped term's fact to be restated, which can turn a FAIL into a PASS. The verdict (gap shown, README with-arm 0/3) may therefore not hold. Re-running claude plugin eval on the merged cases needs a host with the claude CLI, which this lane does not have.

    What the run says it did not do:

    • Re-running claude plugin eval on the merged wfh-grounding-* cases with and without docs-hygiene, under a --max-cost-usd ceiling: this lane has no claude CLI and cannot run evals
    • Adding the Probe result verdict line to each wfh-grounding-* case.yaml description and the .changes/docs-hygiene bump: none fragment: held until a probe matching main's graders exists
    • Tidy, review, verify and checks pipeline steps: skipped because the run made no change

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41350324634

    To hand it back to the lane, remove host-run and add agent-ready again.

  11. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor

    Intake triage did not triage this issue after 2 dispatches, so the sweep no longer dispatches it and labeled it needs-triage for a maintainer. Triage it by hand, and read the runs for why intake did not:

  12. github-actions commented on Nov 1, 2026

    @github-actions
    Contributor

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

    Size: Small
    Complexity: Low
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: this slice runs the write-for-humans grounding eval with and without the plugin, posts a Probe result: comment, and commits the verdict line to the case descriptions. The latest comment reports the host run finished. It gives the verdict "gap still shown", with the README case at 0/3 with the plugin. The branch is pushed, but no PR is open yet, so the remaining work is opening that PR. The follow-up for the rule is tracked in #12085. I found no duplicates.

    Automated triage, applied by the lanes App.

  13. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    Probe result: Host run. Re-ran the /docs-hygiene:write-for-humans grounding eval (wfh-grounding-readme, wfh-grounding-howto) with and without the docs-hygiene plugin on current main, which now carries the grounding rule. Verdict: gap still shown. The README case fails the terms-grounded grader in 3 of 3 with-plugin runs.

    What ran

    • Claude Code 2.1.316 on the subscription login. Model claude-opus-5-5, pinned with --model (12 of 12 traces). The judge was the CLI default, 3 votes per verdict.
    • Plugin source: git archive of origin/main at f7dde4f0e40a88d2153cade94904be555a100b5d, extracted to a directory outside any git repository. The last docs-hygiene change on that head is 24c6e71e07 (feat(docs-hygiene): add a grounding rule to write-for-humans #12098), which adds the rule "Introduce each concept before a sentence relies on it, or name it as assumed knowledge" to plugins/docs-hygiene/skills/write-for-humans/SKILL.md:51. The cases and the reworded terms-grounded grader came from test(docs-hygiene): add eval cases for the write-for-humans grounding gap #12034 (a948531806).
    • /evals:validate (validate-cases.py) on the suite gave no FAIL. The only warnings were judge calibration for the samples/ answers, and Bash, Edit and Write grants on unrelated cases.
    • Command, one suite, in a capped claude.slice scope with a short TMPDIR on disk: claude plugin eval <copy>/docs-hygiene --case 'wfh-grounding-*' --ablation with-without -j 2 --model claude-opus-5-5 --disallow-tools Agent Task Bash --max-cost-usd 20 --trust-plugin --no-publish --keep-temp. Each case's own runs: 3 was used. Started when one other suite was running (count 1, under the cap of 2).
    • Ceiling: --max-cost-usd 20. The CLI reported $1.44 notional spend, 234 s wall time, no partial result. The CLI exits 1 when a case fails, as it did here.
    • Validity: run-validity.py --runs 3 gave VALID: complete, no run errors, no permission denials, 12 of 12 traces resolved, and the skill fired in 6 of 6 with-arm runs. Warnings:
      • the judge model is not recorded (it was the CLI default);
      • two split judge votes, both in the README without-arm (runs 1 and 2: PASS FAIL FAIL);
      • the how-to without-arm was already at 1.00, so it is left out of the delta.

    Scores (terms-grounded grader, passes over runs)

    Case With plugin Without plugin Skill fired (with)
    wfh-grounding-readme 0/3 (all votes FAIL FAIL FAIL) 0/3 3/3
    wfh-grounding-howto 3/3 3/3 3/3
    • Total n = 12 runs (2 cases, 2 arms, 3 runs each). Delta (with minus without) is +0.00 on both cases.
    • Which term failed is not recorded: the judge explanation holds votes only. The judged README text in the result file shows two candidates, the same in all three with-arm runs. tail set appears in none of them.
      • collector is used in the first paragraph ("sends each new line to your log collector", "to the log collector", "to the collector"). No README says what the collector is or names it as assumed knowledge.
      • checkpoint is used one sentence before its definition ("loglet records a checkpoint. A checkpoint is the byte offset…"). The grader requires the definition at or before the first sentence that relies on the term.
    • Inference, not verified: the new rule covers "each project-specific term or name a sentence needs" (SKILL.md:51). The model may treat "collector" as general vocabulary, outside that scope. A fix for feat(docs-hygiene): add a grounding rule to /docs-hygiene:write-for-humans #12085 has two possible levers. Widening the rule's scope would reach collector. Requiring the definition at or before the first use would reach checkpoint. A re-probe with the judge's reasoning, or a per-term grader, would show which term fails.

    Done when, #12085 (sub-issue of #7591)

    Done when, #12025

    • Met: claude plugin eval ran both wfh-grounding-* cases with and without the plugin at runs: 3, under --max-cost-usd 20.
    • Met: this record starts with Probe result: and gives the CLI version, the ceiling, per-case and per-arm pass counts, and the verdict.
    • Met on the branch, PR pending: commit 032f4597ec adds the Probe result: verdict line (gap shown, Claude Code 2.1.316, main f7dde4f0e4) to both case descriptions. It also adds .changes/docs-hygiene/host-run-12025-wfh-grounding-probe-main-7c1e4a09.md with bump: none. The commit message carries Closes #12025.
    • Met: the follow-up sub-issue feat(docs-hygiene): add a grounding rule to /docs-hygiene:write-for-humans #12085 was filed and is linked.

    Branch: host-run/12025-wfh-grounding-probe-main, from main at f7dde4f0e4, head 032f4597ec6355cc7cabf5c4ef538b6d0fdf0eba. scripts/check-affected.sh --tests on the committed head gave 13 passed and 3 skipped. Pushed. No PR is open.

    Target labels: add none; remove host-run.

    Follow-up for the rule: #12085 stays open. The rule shipped in #12098, but the README with-arm still fails (0/3).

  14. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 1, 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

    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.needs-triageNot yet classified. Floor until a type and one priority tier are set.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