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 #12243
Outcome
The /source-control:pull-request body is cut through progressive disclosure: action-specific detail moves to reference files read on demand, and the hub keeps routing and gates. This is one of five slices under #12243; the first cut (/source-control:worktree) landed in #12387, whose recipe this follows.
Size at origin/main 3bd42cabfe: body 50,149 bytes (SKILL.md with frontmatter stripped, the method #12387 used); the skill directory holds 799,595 tracked bytes. A cut that moves about half the body is a diff well under the 262,144-byte cap. The binding limit is the paired eval run each cut needs, so each skill is its own PR.
Done when
- The hub's body bytes fall, measured the same way. Moved text sits verbatim in
reference/(or an action file), and every citation of it (tests, hooks, scripts, fixtures, README) is repointed. -
/docs-hygiene:compress comparereturns VERDICT PASS with no SEMANTIC LOSS. - The
pull-request-*cases inplugins/source-control/evals/run on the before and after copies with/evals:plugin-eval --baseline <before.json> --margin <m>, on a roundrun-validity.pymarks VALID on both arms, and the after arm is non-inferior (plugins/playbooks/skills/skill-authoring/reference/skill-criteria.md, "Cutting text").
Related
- perf: cut the bodies of the most-invoked skills through progressive disclosure - part 1 of 2 #12243 (parent), perf(source-control): move the worktree nesting measurement out of the skill hub #12387 (cut 1 recipe), perf: cut the bodies of the most-invoked skills through progressive disclosure - part 2 of 2 #12244 (after figure).
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
Work status
confirmed
Activity
github-actions commentedon Nov 3, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Medium
Complexity: Medium
Uncertainty: Knowable
Flags: none
Blocked by: none
Understood: cut the
/source-control:pull-requestskill body through progressive disclosure. Move action detail verbatim to reference files, repoint every citation, and pass the compress compare and the paired eval non-inferiority check. The eval and compare steps may need a host run, which admission routes.#12655 (comment)
This decision settles the open question about the measured-fire case, so nothing more is asked.
Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Nov 3, 2026
Not admitted to the issue lane: its done-when asks for what an unattended lane run cannot perform: item 1 (measure-over-time: "The hub's body bytes fall, measured the same way. Moved text sits verbatim in..."), item 3 (a model eval run: "The pull-request-* cases in plugins/source-control/evals/ run on the before a..."); recommended split: keep the other items here as the admissible issue and move these to a child issue for the host queue (
host-run); it carries host-run. 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 3, 2026
The latest triage verdict holds nothing: admission moved the issue to
status: confirmed; its comment says why.kyle-sexton commentedon Nov 3, 2026
Claim. Backlog HITL host-run worker is taking this now, with #12468: its pull-request cut is this slice, so one PR serves both.
kyle-sexton commentedon Nov 3, 2026
Claim. Backlog HITL host-run worker is taking done-when 3 (the paired pull-request-* eval for #12739) now, resuming the earlier run that stopped in a host lockup.
1 remaining item
kyle-sexton commentedon Nov 3, 2026
Negative control, preregistered before the first paid run.
#12739 cut the pull-request skill's body and merged without the negative control that
plugins/playbooks/skills/skill-authoring/reference/rewrite-a-plugin.md:60-66and:79require. This runs it after the fact.pull-request-*cases inplugins/source-control/evals/.claude-opus-5-5), same flags (--runs 2 -j 2 --scaffold --ablation none --keep-temp):plugins/source-control/skills/pull-request/.SKILL.mdbody deleted (frontmatter kept).run-validity.py --runs 2 --scaffoldedon both arms, plus--own-copy-search-warnson degraded only.noise-report.py <degraded> --baseline <before> --margin 0.05.case drop). Cases whose degraded runs carry a guard denial are left out of that comparison. If neither holds, the body cut is unmeasurable by this suite.kyle-sexton commentedon Nov 3, 2026
Host run. Done-when 3: a paired eval of every
pull-request-*case inplugins/source-control/evals/, run on a before arm with #12739's diff reverted and on an after arm at main.What ran (Claude Code 2.1.317, subscription login, isolated HOME, the claude.slice scope):
git archivecopies of the case-fix branch head f400737, which is origin/main 1e321c6 plus the case fix. The before copy has perf(source-control): move the pull-request monitor checklists to monitor.md #12739's diff (5f63e3d) reverted underplugins/source-control/skills/pull-request/only, anddiff -rqshows the copies differ only in that directory.claude plugin eval <before copy> --case 'pull-request-*' --runs 1 -j 2 --scaffold --ablation none --keep-temp --model claude-opus-5-5. Every non-slash case loaded the pull-request skill (11 of 11). The 10ci-modecases open with the slash command.--runs 2, on each arm. Before 18:39 to 18:52Z, after 18:39 to 18:55Z, both under the host's heavy-run lock at load < 2.run-validity.py --runs 2 --scaffolded --measured-fire pull-request-ready-hands-pr-to-explain-changeon each arm. The reason for the flag is in the Decision recorded comment on this issue.noise-report.py <after> --baseline <before> --margin 0.05.Verdicts:
verdict: VALID (warnings: measured cases fired in 0 of 2 runs, models)verdict: VALID (warnings: measured cases fired in 0 of 2 runs, models)with-arm mean: 0.91, 95% interval 0.82 to 0.99 (normal, 21 cases)with-arm mean: 0.90, 95% interval 0.81 to 0.98 (normal, 21 cases)with-arm change (this minus baseline), paired over 21 cases: -0.01, 95% interval -0.05 to +0.03compare verdict: non-inferior at margin 0.05 (the interval's lower end -0.05 is at or above -0.05)Done-when 3: met. Both arms are VALID, and the after arm is non-inferior at margin 0.05. The lower end sits exactly on the margin.
Findings:
pull-request-dirty-worktree-stashes-before-checkoutwith its plain prompt on main fired the skill in 0 of 4 runs. Each time the model stashed withgit stash push --include-untrackedand rangit switch mainitself. The case-fix PR names the skill in that prompt, so the case now tests behavior, not triggering. The trigger gap belongs to the skill's description and trigger probes (/skill-quality:check measure-invocation).pull-request-ready-hands-pr-to-explain-changeloaded the pull-request skill but never handed off toexplain-change: 0 of 2 runs per arm, the same on both arms, so perf(source-control): move the pull-request monitor checklists to monitor.md #12739 did not cause it.reference/ready-for-review.md2.5.5 carries the instruction in both arms.modelsWARN). The round passed no--judge-model, the same on both arms, and neither the result nor the traces record which judge model ran.PR: the case fix is in #12915.
Target labels: add none; remove host-run.
kyle-sexton commentedon Nov 3, 2026
Host run. The negative control for #12739's pull-request body cut, run after the fact and preregistered in #12655 (comment).
What ran (Claude Code 2.1.317, subscription login, isolated HOME, the claude.slice scope, under the host's heavy-run lock at load 0.97):
git archivecopies of origin/main e3bf854: before has perf(source-control): move the pull-request monitor checklists to monitor.md #12739's diff (5f63e3d) reverted underplugins/source-control/skills/pull-request/; degraded is the before copy with the pull-requestSKILL.mdbody deleted (frontmatter kept).diff -rqshows they differ only in that file. The earlier round's before copy was not reused: it was built on the unmerged case-fix branch and differs from main in two files.claude plugin eval <copy> --case 'pull-request-*' --runs 2 -j 2 --scaffold --ablation none --keep-temp --model claude-opus-5-5on both arms, launched together 19:38:58Z; degraded ended 19:51:42Z, before 19:54:04Z.run-validity.py --runs 2 --scaffoldedon before; the same plus--own-copy-search-warnson degraded.noise-report.py <degraded> --baseline <before> --margin 0.05.Verdicts:
verdict: INVALID (the skill did not fire in 3 with-arm runs of a should-trigger case)verdict: INVALID (4 permission denials in the traces; the skill did not fire in 4 with-arm runs of a should-trigger case)with-arm mean: 0.91, 95% interval 0.84 to 0.98 (normal, 21 cases)with-arm mean: 0.85, 95% interval 0.76 to 0.94 (normal, 21 cases)with-arm change (this minus baseline), paired over 21 cases: -0.06, 95% interval -0.14 to +0.02case drop: case pull-request-create-default-open-state-ready with-arm fell from 1.00 to 0.50, a third or more; name its cause and prove it before shippingcase drop: case pull-request-create-verification-ends-left-out with-arm fell from 1.00 to 0.50, a third or more; name its cause and prove it before shippingcompare verdict: not shown non-inferior at margin 0.05 (the interval's lower end -0.14 is below -0.05), and 2 case(s) dropped by a third or moreValidity:
pull-request-dirty-worktree-stashes-before-checkoutfired 0 of 2 per arm. Its plain prompt on main never fires the skill (the earlier host run's finding; the prompt fix is in the unmerged test(source-control): name the pull-request skill in the dirty-worktree eval case #12915).pull-request-ready-hands-pr-to-explain-changealso missed once on before and twice on degraded.cdinto the copy's skill directory, orsedon its reference file), inci-mode-escalates-instead-of-cutting-criterion-line,ci-mode-fixes-markdown-lint,ci-mode-makes-room-without-cutting-criterion-lineandready-hands-pr-to-explain-change.--own-copy-search-warnsdid not downgrade them.Means with those cases left out (per-case mean over both runs):
Result: two readings, for the coordinator to pick.
case drop, as inrewrite-a-plugin.md:63-64): detect, through the 2case drops. Neither falls on a denial case, so both hold with those cases left out. Each drop is consistent across runs: both degraded runs of each case scored 0.50, against 1.00 and 1.00 on before. One judge vote increate-default-open-state-readyrun 2 was split (FAIL FAIL PASS).The degraded copy keeps
reference/, and the traces show it searching its own copy for the lost text; reads that were not denied may have recovered much of the procedure, which would explain the small mean fall.Traces are kept under the run's TMPDIR for the coordinator.
Target labels: add none; remove none.
kyle-sexton commentedon Nov 3, 2026
Decision recorded.
(agent; not an owner decision)
The negative controls for #12739 (#12655) and #12704 (#12666) both detect a loss, so both cuts stand.
Basis:
plugins/playbooks/skills/skill-authoring/reference/rewrite-a-plugin.md:60-75. A suite detects a loss on acase dropor a 0.15 fall. A case whose degraded runs carry a denial cannot decide the control, so the drop or fall must hold with those cases left out.#12655 (pull-request): detect.
case drops,create-default-open-state-readyandcreate-verification-ends-left-out, 1.00 to 0.50 each in both degraded runs. Neither case had a denial.dirty-worktree, already reported as a triggering finding;ready-hands-pr-to-explain-change) sit in other cases.#12666 (commit): detect.
no-push-no-pr) left out, it falls 0.213.case drops,conventional-heredoc-trailer(1.00 to 0.60) andexec-bit-backstop(1.00 to 0.33).Target labels: add none; remove none.
kyle-sexton commentedon Nov 3, 2026
Correction: the "both controls detect" decision above is withdrawn until a clean re-run.
In both controls the before arm read INVALID on run-validity, because some with-arm runs never fired the skill. The decision leaned on cases unaffected by those runs. That is a looser reading than this lane's own rule, which reads numbers only from runs that pass validity.
rewrite-a-plugin.md:60-75permits leaving out degraded-side cases that have denials. It does not permit an INVALID before arm.Next: re-run both controls on current main. #12915 has merged and fixed the dirty-worktree case. A control counts only when the before arm reads VALID; the degraded arm may leave out cases with denials, per the doc. If a clean control does not detect a loss (a
case dropor a 0.15 fall), that cut is unmeasurable and its skill body reverts to the before text by PR. Both cuts stay merged until the re-run reports.kyle-sexton commentedon Nov 4, 2026
Host run. The clean re-run of the negative control for #12739's pull-request body cut, preregistered in #12655 (comment). It replaces the earlier control, whose before arm read INVALID.
What ran (Claude Code 2.1.318, subscription login, isolated HOME, the claude.slice scope, under the host's heavy-run lock at load 3.46):
git archivecopies of origin/main 97ba98f. That base includes test(source-control): name the pull-request skill in the dirty-worktree eval case #12915, the dirty-worktree case fix, and no commit since the earlier base (e3bf854) touchesskills/pull-request/. The before arm has perf(source-control): move the pull-request monitor checklists to monitor.md #12739's diff (5f63e3d) reverted underplugins/source-control/skills/pull-request/only, and the patch applied with no fuzz. The degraded arm is the before copy with the pull-requestSKILL.mdbody deleted and its frontmatter kept.diff -rqshows the two differ only in that file. Following the preregistration, "before" is the pre-cut text, not the current hub.claude plugin eval <copy> --case 'pull-request-*' --runs 2 -j 2 --scaffold --ablation none --keep-temp --model claude-opus-5-5on both arms, launched together at 00:38:44Z. Before ended at 00:52:41Z, degraded at 00:54:48Z.run-validity.py --runs 2 --scaffolded --measured-fire pull-request-ready-hands-pr-to-explain-changeon before; the same plus--own-copy-search-warnson degraded.--measured-fireflag applies this suite's validity decision, perf(source-control): cut the pull-request skill body through progressive disclosure #12655 (comment), used in the done-when 3 round. That case loads the pull-request skill, but its graded call is the hand-off to explain-change. The earlier control left the flag out, and that, together with the then-unfixed dirty-worktree prompt, is what made its before arm read INVALID. The flag only marks that case's skill-fired check as a measured rate; it leaves no case out of any score.noise-report.py <degraded> --baseline <before> --margin 0.05.Verdicts:
verdict: VALID (warnings: measured cases fired in 0 of 2 runs, models). No denials in 42 traces, and every session started.verdict: VALID (warnings: measured cases fired in 0 of 2 runs, models). No denials in 42 traces, so no case is left out.with-arm mean: 0.78, 95% interval 0.66 to 0.90 (normal, 21 cases)with-arm change (this minus baseline), paired over 21 cases: -0.11, 95% interval -0.21 to -0.01case drop: case pull-request-create-refs-remaining-fallback-line with-arm fell from 1.00 to 0.62. Degraded scored 1.00 and 0.25 in its two runs.case drop: case pull-request-create-refs-writes-remaining with-arm fell from 1.00 to 0.17. Degraded scored 0.17 in both runs.case drop: case pull-request-create-verification-ends-left-out with-arm fell from 1.00 to 0.50. Degraded scored 0.50 in both runs.Result: detect. Both arms read VALID, and the noise report calls 3
case drops over all 21 cases, with none left out. The mean falls only 0.11, under the 0.15 threshold, so the call rests on the case drops, whichrewrite-a-plugin.md:65-66accepts on their own. #12739's cut stands.Finding, unchanged from the done-when 3 round:
pull-request-ready-hands-pr-to-explain-changehanded off to explain-change in 0 of 2 runs on each arm.Traces are kept under the run's TMPDIR for the coordinator.
Target labels: add none; remove none.