Repository navigation
Closed
Closed
Copy link
Labels
host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.Needs an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A 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.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Description
Refs: #7591
Outcome
/docs-hygiene:write-for-humans grounds each concept before a sentence relies on it. The #12025 probe showed the gap: with the skill loaded and fired, the wfh-grounding-readme case failed the terms-grounded grader in 3 of 3 runs, the same as without the plugin (Claude Code 2.1.316).
Done when
- The skill states the rule: introduce each concept before a sentence relies on it, or name it as knowledge the reader is assumed to have.
-
wfh-grounding-readmegrades grounding deterministically (test(docs-hygiene): grade wfh-grounding-readme grounding with a deterministic regex #12941), and the measured with-plugin rate on main's rule and on each preregistered lever is recorded here withrun-validity.pyVALID;wfh-grounding-howtostill passes. (Owner decision 2026-11-03 ~21:4xZ, option A, replacing "with-plugin rate at least 0.6 and at least 0.3 above without": four preregistered levers stayed at 0-3 of 10, identical text spread 0 to 3, and deleting the rule never lowered the rate beyond that spread, so the bar measured sampling noise, not the skill's wording. The README case stays in the suite to track the gap.)
Out of scope
- Other write-for-humans criteria.
Metadata
Metadata
Assignees
Labels
host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.Needs an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A 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.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Type
Fields
No fields configured for Feature.
Activity
github-actions commentedon Nov 1, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Small
Complexity: Low
Uncertainty: Knowable
Flags: none
Blocked by: none
Understood: #12098 added the grounding rule to the skill, so done-when 1 is met. Done-when 2 is still open. The latest probe shows
wfh-grounding-readmefailing terms-grounded 0/3 in the with-plugin arm, while the how-to case passes. The likely cause is that the rule only names project-specific terms, which is unverified. The remaining work is to widen the rule's scope, or require a definition at or before first use, then re-probe. The re-probe may need a run outside this lane. No likely duplicates found.Automated triage, applied by the lanes App.
github-actions commentedon Nov 1, 2026
melodic-automation-lanes commentedon Nov 1, 2026
The lanes App's pull request #12098 merged with
Refs:, so this issue stays open and nothing starts the lane on it again. work-unblock removedstatus: readyandagent-ready, so the hourly triage sweep sends it back to intake triage. Admission then parks it atstatus: confirmedfor a check of what that pull request left, until a**Decision recorded.**comment says what is left or someone closes it.kyle-sexton commentedon Nov 1, 2026
Probe on main f7dde4f (Claude Code 2.1.316, VALID): the rule from #12098 is in the skill (SKILL.md:51), but
wfh-grounding-readmestill fails terms-grounded 0/3 in the with-plugin arm; how-to passes 3/3. Every with-arm README leavescollectorundefined, and usescheckpointone sentence before defining it. The likely cause is that the rule names only "project-specific" terms (UNVERIFIED). Next step: widen the rule's scope, or require the definition at or before first use, then re-probe. Done-when 1 is met; done-when 2 is not.github-actions commentedon Nov 1, 2026
The triage sweep dispatched intake triage for this issue (attempt 1 of 2).
2 remaining items
melodic-automation-lanes commentedon Nov 1, 2026
Not admitted to the issue lane: merged pull request #12098 names it with
Refs:after its newest decision or refinement comment, so its work may already be done: close the issue if it is, or post a comment whose first line is**Decision recorded.**saying what is left, which sends it back through intake. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).melodic-automation-lanes commentedon Nov 1, 2026
The latest triage verdict holds nothing: admission moved the issue to
status: confirmed; its comment says why.kyle-sexton commentedon Nov 2, 2026
Claimed by a Backlog HITL host-run worker: changing the grounding rule in /docs-hygiene:write-for-humans so a term is defined at or before its first use, then re-probing wfh-grounding-readme. Branch host-run/12085-wfh-grounding-first-use. Time box 90 min.
kyle-sexton commentedon Nov 2, 2026
Host run. Reworded the grounding rule's test in
/docs-hygiene:write-for-humansand re-probed thewfh-grounding-*eval twice. Verdict: improved, not done. The README with-plugin arm went from 0/3 to 2/3 in both probes, and the done-when needs 3/3.What changed (branch
host-run/12085-wfh-grounding-first-use)plugins/docs-hygiene/skills/write-for-humans/SKILL.md:51: the rule title is unchanged, so it still matches done-when 1 word for word. The test column now says three things:The example column gains a negative case: "Run
stash export… A vault is a folder…" puts the definition one sentence late. The example words avoid the eval's own terms..changes/docs-hygiene/host-run-12085-wfh-grounding-first-use-5d81c3a2.md,bump: patch.The stumble evidence is in the commit messages, not the skill body. It is the test(docs-hygiene): run the write-for-humans grounding eval and post its probe result #12025 probe on main
f7dde4f0e4: VALID, with-arm 0/3. Every with-arm README leftcollectorundefined and usedcheckpointone sentence before defining it.What ran
claude-opus-5-5, pinned with--model(12 of 12 traces in each probe). The judge was the CLI default, 3 votes per verdict.git archiveof the committed head, extracted outside any git repository. Each was one suite in a cappedclaude.slicescope with a short on-disk TMPDIR. The running-suite count was 0 at each launch.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, at each case'sruns: 3.--max-cost-usd 20per probe. The CLI reported $1.39 and $1.41 notional spend, with no partial result.Scores (terms-grounded grader, passes over runs; n = 12 runs per probe)
run-validity.pyf7dde4f0e4)2ffea86411(reworded test)94a81df5da(plus a post-draft first-use check)Validity warnings in both probes: the judge model is not recorded; the how-to without-arm is at the 1.00 ceiling, so it is left out of the delta; and there are split votes. Probe 1 split on README with-arm run 3 (FAIL PASS PASS, a pass) and without-arm run 1. Probe 2 split on README with-arm run 1 (PASS FAIL FAIL, a fail) and without-arm run 1.
The skill fired in 6 of 6 with-arm runs in each probe.
Hand check of the failing with-arm READMEs. Both make the same slip in the opening paragraph:
checkpointwas defined at or before first use in the probe 1 failure. In probe 2, a heading usedcheckpointbefore the body defined it.The post-draft check (probe 2) did not move the with-arm score. It was reverted in
225851286b, so the branch tree equals probe 1's head2ffea86411. A standing line that does not change behavior does not ship.I stopped after the one planned revision. Rerunning the same wording until a probe hits 3/3 would only select a lucky sample.
Done when (#12085)
SKILL.md:51is unchanged ("Introduce each concept before a sentence relies on it, or name it as assumed knowledge"), and the test now requires the definition at or before first use.wfh-grounding-readmepasses terms-grounded in the with-plugin arm in 2 of 3 runs, not 3 of 3 (probe 1, VALID; probe 2 repeats 2/3).wfh-grounding-howtostill passes 3/3, andrun-validity.pygave VALID.Options for the remaining gap (decided from evidence, no owner decision needed)
Refs: #12085. It moves the README with-arm from 0/3 to 2/3, and the how-to case does not regress. Recommended. Basis: probes 1 and 2 above.runscount to measure the rate more tightly than n=3. Either is a new probe, not a rerun of this wording.The skill-creator case
grounds-each-concept-before-relying-on-it(skills/write-for-humans/evals/evals.json) is not run byclaude plugin evaland was not probed.Branch:
host-run/12085-wfh-grounding-first-use, from mainfd0c36f751, head225851286b. Commits:2ffea86411(reworded test),94a81df5da(first-use check),225851286b(revert of the check).scripts/check-affected.sh --testsgave 14 passed, 2 skipped on2ffea86411and on94a81df5da. The head tree is identical to2ffea86411. Pushed. No PR is open.Target labels: add none; remove none.
kyle-sexton commentedon Nov 2, 2026
Taken over by lane 1 (melo-lap-001, hub assignment 2026-11-02 16:5xZ); the 00:13Z Backlog HITL claim's 90-min box ended with the 02:45Z report. Plan: one new lever from option 2 there (an opening-paragraph example in the rule's example column), probed on wfh-grounding-* with the same command and n=3, VALID required. If README with-arm reaches 3/3 and how-to holds, ship with Closes; otherwise ship option 1 (the reworded test, 0/3 -> 2/3) with Refs: #12085 and record the gap.
kyle-sexton commentedon Nov 2, 2026
Lane 1 probe of the next change (option 2 in the 02:45Z report): did not ship.
2ffea86411.claude-opus-5-5,--ablation with-without, runs 3.run-validity.pyreturned VALID.kyle-sexton commentedon Nov 2, 2026
Lane 1: the revised done-when 2 was measured once on main 971e449 (preregistered, VALID, 10 runs, Claude Code 2.1.316, claude-opus-5-5). It is not met.
run-validity.py: VALID.What the run shows:
Result: the rule now on main (#12199) lifts the README case by 0.3 over no plugin, but it does not reach 0.6. Two levers have been tried and neither moved the opening-sentence slip. Lane 1 releases its claim. Next lever for whoever picks this up: make the terms-grounded judge deterministic or better calibrated before trying another wording change, so that the rate can be measured at all. Data: 40 kept traces, on the lane 1 host.
kyle-sexton commentedon Nov 3, 2026
Claimed by lane 3 (hub host-run order, oldest first). Plan: address the judge noise lane 1 measured on wfh-grounding-readme (README judge agreement 15/20) by making that grounding check deterministic where the rule allows it, or recalibrating its LLM grader; then re-measure the revised done-when 2 (10 runs, with/without, Opus, VALID) and ship or record the result.
kyle-sexton commentedon Nov 3, 2026
Lane 3 result: revised done-when 2 is not met, under either grader.
Grader. The README case's
terms-groundedLLM grader split votes on same-shape openings (lane 1: README judge agreement 15/20). It is now a deterministic regex that applieswrite-for-humansSKILL.md's own rule ("Its definition goes in that sentence or an earlier one, never the next") to the three planted terms (collector, checkpoint, tail set), with 24 samples (9 pass, 15 fail, including lane 1's openings) thatvalidate-cases.pychecks offline. The opening "…to a collector. The collector is…" grades FAIL under it, fixed in the preregistration before any run. This is stricter than the old judge, which passed some of those openings.Measurement of record (preregistered, Claude Code 2.1.317,
claude-opus-5-5subject and judge,--ablation with-without --runs 10,run-validity.pyVALID; how-to judge unanimous 20/20):With-plugin rate 0.1 (bar 0.6) and margin 0.1 (bar 0.3) fail; how-to holds. Under the old judge the rate was 0.5 (lane 1, 19:30Z 11-02), also below the bar, so the verdict does not depend on the grader change.
Where the gap is. Per term, with plugin: checkpoint grounded in 8/10 runs (2/10 without), so the rule works there. Collector fails in 9/10, every time with the same opening one sentence late: "…sends each new line to a/the/your (log) collector. The collector is…". That is the opening-sentence slip the two earlier levers (#12199's reworded test, lane 1's example) also missed.
Next. The grader and samples ship in a PR with
Refs: #12085(it measures the rule, it does not meet done-when 2). The open lever is a skill change aimed at the opening sentence specifically, preregistered with the negative controlrewrite-a-plugin.mdrequires. Spend this pass 13.55 USD list (calibration 0.83, a voided run 6.09 whose regex backtracked under the CLI's engine, the run of record 6.63).kyle-sexton commentedon Nov 3, 2026
Lane 3, third lever on the opening sentence: did not move the result; not shipped.
Lever. Row 51 of
write-for-humans/SKILL.md(test and example cells): when a definition needs a sentence of its own, that sentence comes before the sentence that uses the term, including a product's opening sentence. Basis: in the run of record all 9 failing with-arm READMEs had a use-plus-gloss opening of 28-37 words, and the sentence-length rule (sentence-rules.md:62, split past about 25 words) pushes a same-sentence gloss into the next sentence; the two earlier levers both offered a same-sentence gloss.Measurement (preregistered, Claude Code 2.1.317,
claude-opus-5-5subject and judge, 10 runs, VALID; deterministic grader from #12941):Per term with plugin, collector / checkpoint / tail set: before 1/8/10, after 2/7/10, control 0/7/10; without plugin 0/1/9.
Reading. Done-when 2 is not met (0.1 against 0.6). The control does not separate from the change (mean terms-grounded 0.50 each), so this suite cannot detect a loss from row 51's wording, and the change is unmeasurable under
rewrite-a-plugin.md. Checkpoint's lift with the plugin (7-8/10 against 1/10 without) survives deleting row 51, so it comes from elsewhere in the skill. Three wording levers have now missed the same slip: "…sends each new line to a collector. The collector is…".Next. One preregistered lever of a different kind: a post-draft check step in the skill that finds each term's first use and moves its definition into or before that sentence. If that also misses, the remaining options change done-when 2 and go to the owner. Spend this lever 10.51 USD list.
kyle-sexton commentedon Nov 3, 2026
Lane 3, fourth lever (a post-draft check step): did not ship.
Step (one bullet under "After writing" in
write-for-humans/SKILL.md, row 51 as on main): for each term a reader may not know, find the first sentence that uses it; if its definition comes later, move the definition into that sentence or one before it; if that would pass the length limit, put a short defining sentence first.Measurement (preregistered, Claude Code 2.1.317,
claude-opus-5-5subject and judge, 10 runs each, all VALID; three suites launched together):Reading. Done-when 2 fails (0.0 and 0.3 against 0.6). The two suites running the same after text scored 0/10 and 3/10, so the 0.2 gap to the control is within the spread of identical text and does not count as separation. Across the four levers (#12199's test, lane 1's example, the row 51 opening rule, this step), the README with-plugin rate stayed between 0/10 and 3/10 under the deterministic grader, and deleting the rule never lowered it measurably. On this evidence the skill's wording does not control the README result (judgment); the opening-sentence slip ("…to a collector. The collector is…") persists at about the same rate with or without each change.
Spend across lane 3's passes on this issue: 13.55 + 10.51 + 14.89 = 38.95 USD list. The owner decides the next step: done-when 2 was set against the old judge, and every remaining path changes it.
kyle-sexton commentedon Nov 3, 2026
Owner decision recorded. The owner chose option A on 2026-11-03 ("go w/ recommended"): reword done-when 2 to what the evidence supports and close. The rule is on main (#12199);
wfh-grounding-readmegrades grounding deterministically (#12941) and stays in the suite to track the gap. Record: issuecomment-6614703444 (run of record, 1/10 vs 0/10), issuecomment-6615599860 (row 51 opening rule, 1/10, control 0/10), issuecomment-6615766380 (post-draft check step, 0/10 and 3/10 on identical text, control 1/10); all VALID. Lane 3 spend 38.95 USD list.