feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479) - #563
Conversation
…ll (#479) Absorb 7 session-prompt execution rules into /work-items:work's execute step so the skill owns them instead of a hand prompt, delegating anything a sibling skill already owns rather than restating it. - Orchestrator-dispatch as the documented default for autonomous execution, chaining to /implementation:implement-dispatch for mechanics (#451) - Dispatch brief carries the /source-control:pull-request contract forward (#462) - Post-green review pass; VALID-but-deferred finding requires a filed follow-up issue cited in the reply and ## Related, then hand off to /source-control:babysit-prs - High-blast-radius pre-PR full-diff gate - Concurrency and batch caps resolve from new userConfig scalars; batch cap bounds a cycle, never the loop; same-plugin serialization deferred (#464) - Staleness pre-check skips a frontier item with an open PR (interim, retire on #463) - Explicit never-merge boundary Bumps work-items to 0.13.0 with CHANGELOG, README, and eval coverage. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KyLj6oaFVTE6xFuoYCC2KC
|
Claude finished @kyle-sexton's task in 5m 1s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
SummaryA clean absorption of the 7 v4 rules into the execute step. The cross-skill delegation pattern is well-applied throughout ( Finding 1 — MEDIUM · Correctness gap: the orchestrator PR-creation step is implicit but never statedFile: The execute sub-step dispatches a worker for "source edits in its own out-of-tree worktree" and the flow then has a diff gate "before a PR is opened" followed by a "post-green review pass." These three steps collectively imply that the orchestrator (not the worker) opens the PR by chaining to The risk: the execute bullet also says the worker MUST follow "every step of the consuming project's development workflow." If that workflow says "create a PR" (as many project CLAUDE.md files do), a worker can create the PR itself before the orchestrator's diff gate even runs, rendering the gate useless. The scope-fence restricts "source edits" but the SKILL.md never adds "PR creation is forbidden in the worker brief / handled orchestrator-side." Suggested addition — between the diff gate and the post-green pass, one sentence:
Finding 2 — LOW-MEDIUM · Clarity:
|
|
Claude finished @kyle-sexton's task in 3m 20s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
SummaryThe cross-skill delegation pattern is well applied throughout — Finding 1 — MEDIUM · Correctness gap: orchestrator PR-creation step is implicit but never statedFile: The diff gate bullet reads "Before a PR is opened…" and the review pass reads "After CI is green…" — implying the orchestrator opens the PR between the two. But the PR-creation action is never actually stated: there's no bullet saying "chain to The follow-on risk: the execute bullet (line 143) requires the worker to "follow every step of the consuming project's development workflow." Many project CLAUDE.md files and workflow skills include a PR-creation step. Without an explicit scope-fence exclusion, a worker can open the PR before the orchestrator's diff gate runs, making the gate a no-op. Suggested fix — between the diff gate and post-green pass bullets, add:
Finding 2 — LOW-MEDIUM · "Owning subagent" for CI-found fixes is ambiguousFile:
The worker subagent completed and returned its result before CI ran. Its out-of-tree worktree may have been cleaned up by
Each interpretation has different implications for the worktree lifecycle. Since the principle "orchestrator never edits source" applies here, the intent is clearly to re-dispatch — but the worktree lifecycle contract with Finding 3 — LOW-MEDIUM ·
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3b3e988de8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The interim already-in-flight staleness check (Step 4) said to skip a frontier item that "already has an open PR" but named no detection method, leaving agents to invent their own and vary silently. Point at the two conventions the skill already establishes: the item's `<type>/<N>-` head branch pattern and the `Closes #<number>` closing keyword the branch parse injects. Bounds implementation variance without new machinery; the check still retires on #463. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PR Review — feat(work-items): absorb v4 loop-prompt execution rulesTasks
What the second commit fixedCommit Three prior findings still openFinding 1 — MEDIUM (carried from both prior reviews) Finding 2 — LOW-MEDIUM (carried from 2nd review) Finding 3 — LOW-MEDIUM (carried from both reviews) New findingFinding 4 — LOW (new) No action neededEval #1 reconciliation and Eval #3 are accurate. Version bump, CHANGELOG, README are correct and consistent. |
|
Review-response — PR-review comment posted 2026-07-19T23:29Z (3 findings)
"Other notes (no action needed)" — acknowledged; all confirmed correct/no-op, nothing to change. |
|
Review-response — PR-review comment posted 2026-07-19T23:35Z (5 findings)
"Other notes (no action needed)" — acknowledged; all confirmed correct/no-op. |
# Conflicts: # plugins/work-items/.claude-plugin/plugin.json # plugins/work-items/CHANGELOG.md
…tended, defer enforcement (#572, #573) The absorbed execute step asserted guarantees the review found untrue: the userConfig concurrency/batch caps read as the operative limits, and the orchestrator-dispatch flow read as an operational end-to-end autonomous path. Neither holds today (implement-dispatch hardcodes its 3-5 wave cap and reads no userConfig; nothing reads the batch cap; nothing provisions a non-default branch before the dispatch preflight). Narrow the wording so the merged docs do not over-promise, and point each gap at its tracking issue: - SKILL.md: caps are the *intended* values; enforcement not yet wired (#573). Autonomous branch/worktree provisioning, PR-creation timing, and fix-subagent re-dispatch deferred with an interim note (#572), matching the #463/#464 pattern. - plugin.json: both userConfig descriptions state enforcement is unwired (#573); fixed a double-encoded em-dash mojibake in the batch-cap description. - README: Configuration section reframed to intended values + enforcement note (#573). No behavior change; documentation-only truthfulness fix. Enforcement remains tracked in #572 and #573. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 22s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
What
|
| Finding | Source | Status |
|---|---|---|
| Orchestrator PR-creation step implicit (MEDIUM) | Reviews 1, 2, 3 | ✓ Deferred to #572 — explicit deferral note in SKILL.md:143 |
| "Owning subagent" ambiguity for CI-found fixes (LOW-MEDIUM) | Reviews 2, 3 | ✓ Deferred to #572 — same deferral note covers all three facets |
| Branch suggestion in autonomous mode (LOW) | Review 3 | ✓ Deferred to #572 — deferral note covers the branch/worktree seam |
work_dispatch_concurrency_cap cap relationship (LOW-MEDIUM) |
Reviews 1, 2, 3 | ✓ Deferred to #573 — "not yet wired" stated explicitly |
work_cycle_batch_cap enforcement not explained (LOW) |
Review 2 | ✓ Deferred to #573 — enforcement status now explicit |
| Already-in-flight detection missing (LOW) | Reviews 1, 2 | ✓ Fixed in 8686c76 — two-convention detection clause added |
| Codex P1: worker branch before autonomous dispatch | Codex | ✓ Deferred to #572 — same deferral note |
| Codex P2: caps not wired | Codex | ✓ Deferred to #573 — same deferral note |
One observation (non-blocking)
CHANGELOG "Added" section (line 31–35): the "Concurrency and batch caps as userConfig" entry says "the execute step resolves them from config with no hardcoded literal." This is technically accurate — the SKILL.md does reference ${user_config.…} variables rather than hardcoded values — but a reader scanning just the CHANGELOG would not know that enforcement is deferred to #573. The SKILL.md and plugin.json are explicit; the CHANGELOG is the only surface that doesn't carry the enforcement caveat.
This is not a merge blocker since the SKILL.md and manifest are the operative surfaces. If you want consistency, one parenthetical ("enforcement wired in #573") would close the gap.
Other notes (no action needed)
- Evals reconciliation: Eval feat: markdown-formatter plugin (pilot migration) #3 expectation "Concurrency and batch caps resolve from
${user_config…}with no hardcoded literal" tests the documented interface (variables, not literals) rather than actual enforcement — still valid with the new "intended" wording. ✓ plugin.jsonuserConfig schema: Both entries havemin: 1,type: number, and accurate descriptions matching the SKILL.md deferral language. ✓- Deferral pattern consistency: The
#572/#573deferral approach matches the#463/#464pattern used elsewhere in the skill. ✓ - Version 0.13.0 and CHANGELOG format: Correct for feature additions; format consistent with existing entries. ✓
- CLAUDE.md alignment: Repo-agnostic, configurable without editing the plugin, plugin-form-safe, no PII/secrets, versioned. ✓
The PR is ready to merge. The approach of documenting what works now and explicitly tracking what doesn't is the right call — all open seams have tracking issues and the skill is honest about its current guarantees.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bd3d24b7c4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…fline local-markdown binding (#563) The interim already-in-flight staleness check (Step 4) made a PR-host lookup unconditional, but the supported local-markdown provider is offline-only — never a coordination surface, touches no gh/curl (tracker CONTRACT.md). In that binding the check had no PR host to query and would either stall the pre-claim checks or reach for a forbidden network tool. State the fail-open path: when no PR host is configured or available, skip the check and proceed to claim. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 26s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
What
|
| Finding | Source | Status |
|---|---|---|
| Orchestrator PR-creation step implicit (MEDIUM) | Reviews 1–3 | ✓ Deferred to #572 — explicit deferral note at SKILL.md:143 |
| "Owning subagent" for CI-found fixes ambiguous (LOW-MEDIUM) | Reviews 2–3 | ✓ Deferred to #572 — same deferral note |
work_dispatch_concurrency_cap cap relationship unstated (LOW-MEDIUM) |
Reviews 1–3 | ✓ Deferred to #573 — "enforcement not yet wired" explicit at SKILL.md:147 |
work_cycle_batch_cap enforcement not explained (LOW) |
Review 2 | ✓ Deferred to #573 — same deferral note |
| Already-in-flight detection missing (LOW) | Reviews 1–2 | ✓ Fixed in 8686c76 — two-convention detection clause |
| Autonomous branch/worktree seam (Codex P1) | Codex + Review 3 | ✓ Deferred to #572 |
| Caps not wired (Codex P2) | Codex | ✓ Deferred to #573 |
| Offline local-markdown check blocks on no PR host (Codex P2 re-review) | Codex | ✓ Fixed in 751fadb — fail-open path added |
One non-blocking observation
The fail-open trigger condition "no PR host is configured or available" is slightly open to interpretation — "available" could mean pre-configured (a static config check) or a failed network attempt (a runtime exception path). Given the interim nature of this heuristic and the fact that local-markdown is the only documented offline binding, the ambiguity is harmless in practice. If the deferral to #463 resolves before this wording is revisited, it will retire anyway.
Other notes (no action needed)
- Fail-open semantics: "skip it and proceed to claim" is the correct behavior — a duplicate branch at claim time is recoverable, a stall or a forbidden network-tool call is not. ✓
- Scope of change: The fix appends only to the already-in-flight bullet and does not touch detection conventions, the interim/retire signal, or any other step. ✓
- CHANGELOG / README / plugin.json / evals.json: Unchanged in
751fadb— no updates needed for a documentation truthfulness pass on an interim check. ✓
The PR is ready to merge. All findings from four review rounds are either fixed in-branch or explicitly deferred with tracking issues; the skill is honest about its current guarantees at every surface.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 751fadb9e5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ELOG bullets (#572, #573) The 0.13.0 CHANGELOG entry still over-promised where the SKILL/README/plugin.json prose was already narrowed: the caps bullet read "resolves them from config with no hardcoded literal" with no enforcement caveat, and the dispatch bullet described the orchestrator-dispatch flow with no end-to-end caveat. Add both, matching the narrowed prose: caps are the intended values with enforcement tracked in #573; the autonomous dispatch handoff is not yet guaranteed end-to-end, deferred to #572. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 19s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
What
|
| Finding | Status |
|---|---|
| Orchestrator PR-creation step implicit (MEDIUM) | ✓ SKILL.md:143 deferral note → #572 |
| "Owning subagent" for CI-found fixes ambiguous (LOW-MEDIUM) | ✓ SKILL.md:143 deferral note → #572 |
work_dispatch_concurrency_cap cap relationship unstated (LOW-MEDIUM) |
✓ SKILL.md:147 + CHANGELOG:35 → #573 |
work_cycle_batch_cap enforcement not explained (LOW) |
✓ SKILL.md:147 + CHANGELOG:35 → #573 |
| Already-in-flight detection missing (LOW) | ✓ Fixed 8686c76 — two-convention detection clause |
| Branch suggestion in autonomous mode / worktree seam (LOW) | ✓ SKILL.md:143 deferral note → #572 |
Offline local-markdown blocked by mandatory PR-host lookup |
✓ Fixed 751fadb — fail-open path added |
| CHANGELOG over-promised on enforcement + dispatch handoff | ✓ Fixed 9a5370c — caveats added matching SKILL.md/plugin.json prose |
Other notes (no action needed)
- Surface consistency: All four operative surfaces (SKILL.md, README,
plugin.json, CHANGELOG) now consistently disclose: caps are intended with enforcement tracking in#573; autonomous dispatch handoff is not guaranteed end-to-end with design tracking in#572. ✓ - Commit message: Accurately describes the over-promise, the fix, and the narrowing target. ✓
- Co-authorship trailer:
Claude Opus 4.8— consistent with the authorship pattern used across this PR's commits. ✓ - No other files changed: Correct — only
CHANGELOG.mdneeded updating; SKILL.md, README, andplugin.jsonwere already fully narrowed inbd3d24b. ✓
The PR is ready to merge. All findings from five review rounds are either fixed in-branch or explicitly deferred with tracking issues; the skill is honest about its current guarantees at every surface.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9a5370c311
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…y-in-flight check (#563) The interim already-in-flight detection (Step 4) matched only `Closes #N` in a candidate PR body, but /source-control:pull-request recognizes all nine GitHub closing keywords (close/closes/closed, fix/fixes/fixed, resolve/resolves/resolved, case-insensitive, optional colon). A PR opened from an orphan or noncanonical branch that links the item via `Fixes #N` or `Resolved #N` was missed, so after lease expiry /work-items:work could reclaim and dispatch duplicate work for an already-open PR. Recognize all nine forms with exact-number boundaries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 58s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
What
|
| Finding | Status |
|---|---|
| Orchestrator PR-creation step implicit (MEDIUM) | ✓ Deferred to #572 — explicit deferral note at SKILL.md:143 |
| "Owning subagent" for CI-found fixes ambiguous (LOW-MEDIUM) | ✓ Deferred to #572 — same deferral note |
work_dispatch_concurrency_cap cap relationship unstated (LOW-MEDIUM) |
✓ Deferred to #573 — "enforcement not yet wired" explicit |
work_cycle_batch_cap enforcement not explained (LOW) |
✓ Deferred to #573 — same deferral note |
| Already-in-flight detection missing (LOW) | ✓ Fixed 8686c76 — two-convention detection clause |
| Autonomous branch/worktree seam (Codex P1) | ✓ Deferred to #572 |
| Caps not wired (Codex P2) | ✓ Deferred to #573 |
Offline local-markdown blocked by mandatory PR-host lookup |
✓ Fixed 751fadb — fail-open path added |
| CHANGELOG over-promised on enforcement + dispatch handoff | ✓ Fixed 9a5370c — caveats added matching SKILL.md/plugin.json prose |
| Match all nine issue-closing keywords (Codex P2) | ✓ Fixed 2e317ad — full nine-form detection clause with source pointer |
Other notes (no action needed)
- Scope: Only
SKILL.mdchanged. No CHANGELOG update for the keyword expansion — defensible since the already-in-flight check is an interim heuristic (retire on#463); the CHANGELOG entries document the primary feature additions. - Commit message: Accurately describes the before/after, names the affected forms, and explains the duplicate-dispatch risk. ✓
- Co-authorship trailer: Consistent with prior commits in this PR. ✓
The PR is ready to merge. All findings across six review rounds are either fixed in-branch or explicitly deferred with tracking issues; every operative surface (SKILL.md, README, plugin.json, CHANGELOG) is consistent in disclosing current guarantees.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 2e317adeb1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…tier claim (#563) The never-merge boundary said "consistent with /source-control:babysit-prs never merging" — accurate only for babysit-prs's safe default tier. Its opt-in worker and autopilot tiers DO merge behind a deterministic readiness gate (babysit-prs SKILL.md frontmatter + tier table). The bullet's main claim (work itself never merges) stands; qualify the babysit-prs sub-clause so the autonomous handoff carries the correct lifecycle/safety contract. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 49s —— View job PR Review — feat(work-items): absorb v4 loop-prompt execution rules into work skill (#479)Tasks
What
|
| Finding | Status |
|---|---|
| Orchestrator PR-creation step implicit (MEDIUM) | ✓ Deferred to #572 — explicit deferral note at SKILL.md:143 |
| "Owning subagent" for CI-found fixes ambiguous (LOW-MEDIUM) | ✓ Deferred to #572 — same deferral note |
work_dispatch_concurrency_cap cap relationship unstated (LOW-MEDIUM) |
✓ Deferred to #573 — "enforcement not yet wired" explicit at SKILL.md:147 |
work_cycle_batch_cap enforcement not explained (LOW) |
✓ Deferred to #573 — same deferral note |
| Already-in-flight detection missing (LOW) | ✓ Fixed 8686c76 — two-convention detection clause |
| Autonomous branch/worktree seam (Codex P1) | ✓ Deferred to #572 |
| Caps not wired (Codex P2) | ✓ Deferred to #573 |
Offline local-markdown blocked by mandatory PR-host lookup (Codex P2) |
✓ Fixed 751fadb — fail-open path added |
| CHANGELOG over-promised on enforcement + dispatch handoff | ✓ Fixed 9a5370c — caveats added matching SKILL.md/plugin.json prose |
| Match all nine issue-closing keywords (Codex P2) | ✓ Fixed 2e317ad — full nine-form detection clause with source pointer |
| Never-merge bullet inaccurate for babysit-prs opt-in tiers (Codex P2) | ✓ Fixed 6b959eb — qualified to safe default + parenthetical for opt-in tiers |
Other notes (no action needed)
- Scope: Only
SKILL.mdline 153 changed. No CHANGELOG entry for this correction — defensible since this is a prose-accuracy fix on the handoff description, not a behavior change. - Commit message: Accurately diagnoses the before/after, names the affected tiers, and explains why the main claim stands while only the sub-clause needed correction. ✓
- Surface consistency: The fix uses the same "deterministic readiness gate" language consistent with babysit-prs SKILL.md's "deterministic gate scripts" and "deterministic merge gate" phrasing. ✓
The PR is ready to merge. All findings from seven review rounds are either fixed in-branch or explicitly deferred with tracking issues; every operative surface is consistent in disclosing current guarantees.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6b959ebf6e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…le (#572) (#1244) Closes #572 ## Summary Resolves the previously-deferred autonomous orchestrator-dispatch lifecycle — the seam that spanned `/work-items:work`, `/implementation:implement-dispatch`, `/source-control:worktree`, and `/source-control:pull-request`, where each sibling skill's preflight assumed the others already solved provisioning and PR-creation timing. Adopts the posted decision brief's **Option A (orchestrator-owned PR invocation)**, reconciled with the interim worker-side-provisioning workaround already landed in `work-loop`. The lifecycle is now specified end-to-end across its three facets: - **Provisioning is worker-side.** The dispatched worker materializes its own out-of-tree worktree as its first step (via `/source-control:worktree`'s non-entering seam when installed, or a plain `git worktree add`) and works it via `git -C` **without entering it** — matching `implement-dispatch`'s existing worktree-cwd contract, and avoiding any dependency on `EnterWorktree`-in-a-subagent. The orchestrator never invokes `/source-control:worktree create` (its `EnterWorktree` terminal would transition the orchestrator's own session). The worker commits, pushes, and brings the branch current with the default branch before returning the worktree path + branch; a worker that cannot provision parks and escalates. - **PR creation is orchestrator-owned.** After the worker returns and the pre-PR diff gate passes, the orchestrator opens the PR via a new **`/source-control:pull-request create --pushed --worktree <path>`** PR-only entry that re-resolves branch and diff from the target worktree (ignoring the session-cwd pre-computed context), passes the branch explicitly to `parse-branch-issue.sh` so `Closes #N` is parsed from the worker's branch, skips commit/push/rebase, and calls `gh pr create --head <branch>`. The worker scope-fence forbids PR creation; detection of a consuming project's own PR stage lives in the orchestrator (invoke-vs-defer). - **Fix re-dispatch + worktree persistence.** Branch-owned fixes (failing CI, review findings) re-dispatch a fresh scope-fenced subagent into the *same persisted worktree* — the worktree is the state carrier across dispatches. It persists through the whole PR lifecycle and is cleaned up only by whoever merges, never by the `work` lane. `work-loop`'s former interim `#572` workaround (SKILL + evals) is reframed as the now-canonical behavior it inherits from `work`. ### Authority The `needs-human` + `wayfind: design` decision was delegated to the session by the operator (session `d557362f` handoff, "have you do ALL of these"); the delegation is the human decision. A decision-adoption comment is posted on #572. Labels are left in place — repo convention keeps `needs-human` / `wayfind: design` on issues through close (e.g. #1065, #1041, #696, #695, #684 all retain them closed). ## Test plan - **changelog-parity `--check-bump origin/main`:** green — all three bumped plugins (work-items 0.22.1→0.23.0, implementation 0.7.8→0.8.0, source-control 0.25.1→0.26.0) carry a matching `## [<version>]` CHANGELOG entry. - **markdownlint-cli2** over all 9 changed markdown files: 0 errors. - **skill-quality static gate** (`check-skill.sh`) on all 5 changed skills (`work`, `work-loop`, `implement-dispatch`, `pull-request`, `worktree`): PASS, 0 errors (only pre-existing line-count / Gotchas / quote-style warnings inherited from base). - **`check-skill-portability`, `check-skill-leaf-names`, `check-orphaned-fixtures`, `check-silent-skips`:** all green. - **Both changed `evals.json`** (`work`, `work-loop`) validate against `plugins/skill-quality/reference/evals.schema.json`. - Docs-only change (SKILL/reference/CHANGELOG/manifest prose + version bumps); no shell or hook logic touched, so `preflight.test.sh` and the shared-lib tests are unaffected. ## Related - #573 — sibling from the same PR #563 review (cap-enforcement wiring); independent gap, implemented after this PR merges. This PR deliberately does not touch its `userConfig` cap scope. - #563 / #479 — source of the deferral (MERGED); absorbed the execute step and deferred this design to #572. - #451 / #462 — orchestrator-dispatch and PR-contract-forward lane lineage referenced by the execute step. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…#573) (#1247) Closes #573 ## Summary Wires the previously-inert `work_dispatch_concurrency_cap` to real enforcement and removes the `work_cycle_batch_cap` knob that bound nothing — adopting the posted decision brief's **Option 1** (verify-then-recommend: "wire concurrency for real; remove the batch cap from `userConfig`"). Both scalars had shipped as tunable execution caps that no code read, sitting against this repo's `PLUGIN-PHILOSOPHY.md` ("schema used honestly"; "a silently skipped feature is a defect"). - **Concurrency cap — now enforced through a single real parameter.** `/implementation:implement-dispatch` gains an optional `--wave-cap <N>` argument that overrides its internal "3–5 concurrent dispatch waves" default. `/work-items:work`'s autonomous execute step resolves `${user_config.work_dispatch_concurrency_cap}` and threads it into the delegated dispatch as `--wave-cap` when the operator set it, passing nothing when it is unset so implement-dispatch's internal 3–5 default still applies. The value now reaches real fan-out behavior through that one parameter. - **Default-preservation is load-bearing, so the manifest `default: 3` is removed.** The brief guarantees the internal 3–5 stays the default when the cap is unpassed. That only holds if an unset key stays distinguishable from a configured one. Per the plugins-reference, a declared `default` is "the value used when the user provides nothing" — an unset-but-defaulted key would resolve `${user_config.…}` to a hard `3`, collapsing the 3–5 range. Dropping `default` (keeping `min: 1`) leaves a surviving `${user_config.…}` placeholder on unset — the exact "unset" signal `work` already keys off — so implement-dispatch owns the real default range. (This is also robust against the currently-unimplemented-upstream `default` substitution noted in #1242.) - **Batch cap removed, not downgraded.** `work` selects and executes exactly one item per invocation — it has no "cycle" to count, so `work_cycle_batch_cap` had no honest in-skill enforcement point. The autonomous per-cycle item budget already exists and is enforced as the `work-loop` lane's adaptive item cap (`work_loop_item_cap_*`). A future, demonstrated need for a distinct loop-side batch budget reopens as a `/loop`-side concern rather than an indefinite inert knob. Consistent with the just-merged #572 lifecycle: the concurrency value rides the same `work` → `implement-dispatch` delegation, worker-side provisioning and orchestrator-owned PR creation are untouched. ### Authority The `needs-human` + `wayfind: design` decision was delegated to the session by the operator (session `d557362f` handoff, "have you do ALL of these"); the delegation is the human decision. A decision-adoption comment is posted on #573. Labels are left in place per the repo convention that keeps `needs-human` / `wayfind: design` on issues through close (as #572 / #1244 did). ## Test plan - **changelog-parity `--check-bump origin/main`:** green — both bumped plugins (implementation 0.8.0→0.9.0, work-items 0.23.0→0.24.0) carry a matching `## [<version>]` entry. - **skill-quality static gate (`check-skill.sh`)** on the three changed skills (`implement-dispatch`, `work`, `work-loop`): PASS, 0 errors; all base-ref trigger phrases preserved (8/8 `work`, 7/7 `work-loop`). - **markdownlint-cli2** over the changed markdown (SKILLs via check-skill; `README.md` + both `CHANGELOG.md` directly): 0 errors. - **All three changed `evals.json`** validate against `plugins/skill-quality/reference/evals.schema.json`; a new implement-dispatch eval (id 7) covers `--wave-cap N` → cap N while eval id 1 keeps the unset → 3–5 assertion. - Docs-only change (SKILL / manifest / README / CHANGELOG / evals prose + version bumps); no shell or hook logic touched. ## Related - #572 / #1244 — sibling from the same PR #563 review (deferred config-vs-enforcement gaps); merged the orchestrator-dispatch lifecycle this cap wiring rides. This PR completes the cap-enforcement half #1244 deliberately left out of scope. - #563 / #479 — source of the deferral (MERGED); introduced the two caps as `userConfig` and deferred their enforcement to #573. - #464 — same-plugin serialization (still deferred; unchanged here). - #1242 — documents the currently-unimplemented-upstream `userConfig` `default` substitution the default-removal above is robust against. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…w replies fetch-all-pr-comments.sh never projected the GitHub REST field that marks an inline review comment as a threaded reply, so callers reading the script's output saw the key absent even for properly-threaded replies GraphQL confirmed were linked. Reproduced against live PR #563 data: the raw pulls/<pr>/comments response correctly carries in_reply_to_id — the script's jq mapping for the inline surface simply dropped it. Adds in_reply_to_id to all three surfaces (sourced from the raw field for inline comments; null for general/review, which have no reply-parent concept). Additive schema change, no breaking impact on existing consumers. Closes #587 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ge() range Two follow-ups from review of 431a27e: - The in_reply_to_id docstring asserted "the id of the inline comment this one replies to" and steered callers away from the REST cross-check that reference/review-discipline.md and skills/pull-request/SKILL.md already prescribe. Live PR #563 data shows GitHub sets the field to the THREAD-OPENING comment id, not the immediately-preceding reply (every parent referenced in that thread set was itself a root comment) — the docstring now states that correctly and stops contradicting the two canonical reference docs, which were never wrong. - usage()'s `sed -n '2,18p'` range was written against the old (pre-fix) header length. Adding the in_reply_to_id block pushed the Usage/Env overrides sections past line 18 without updating the range, so --help silently truncated before showing them. Range corrected to 2,30p and verified against actual --help output. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…w replies (#1350) ## Summary - `fetch-all-pr-comments.sh` never projected the GitHub REST `in_reply_to_id` field into its unified output schema for inline review comments, so any caller reading the script's own output saw the key absent (surfacing as `None`/`null` downstream) even for comments that GraphQL confirmed were properly threaded replies. - Reproduced against live PR #563 data: `gh api repos/melodic-software/claude-code-plugins/pulls/563/comments` correctly carries `in_reply_to_id` on reply comments (e.g. id `3611618764` → `in_reply_to_id: 3611576636`) — the script's `jq` mapping for the inline surface simply dropped the field on the way out. - Added `in_reply_to_id: .in_reply_to_id` to the inline mapping, and `in_reply_to_id: null` to the general/review mappings (those surfaces have no reply-parent concept). Purely additive to the schema — no existing consumer (`babysit_findings.py`, `babysit_classify.py`) reads this key today, so nothing breaks. - Bumped `source-control` to 0.26.3 with a matching CHANGELOG entry. Closes #587 ## Test plan - [x] Reproduced root cause against live GitHub API data for PR #563 before writing the fix (Bug Investigation Rule) - [x] Added 4 new regression-test cases to `fetch-all-pr-comments.test.sh`: top-level inline comment → `in_reply_to_id: null`; threaded inline reply → true parent id; general/review comments → `in_reply_to_id: null` - [x] Full suite: `bash plugins/source-control/scripts/fetch-all-pr-comments.test.sh` — 21/21 pass - [x] `shellcheck` clean on both modified scripts ## Related N/A 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Summary
Absorbs the proven v4 loop-prompt execution rules into the work-items
workskill (#479's rule-lifecycle: prompt rule → proven over days → skill absorption). The seven absorbed rules land as durable skill behavior; week-priority directives and batch numbers deliberately stay prompt-level. Composed atop main's 0.12.3 as 0.13.0.Fix
local-markdowntracker binding per tracker CONTRACT.md (skip + proceed to claim; never reaches for a network tool).Verification
Closes #479
Related
status: readyissues with an open PR stay pickable — no in-review state (re-pick risk) #463/repo: per-change version bump + top-insert CHANGELOG serialize concurrent same-plugin PRs (conflict by construction) #464 remain as pre-declared interim carve-outs)## Related) — no template scaffolds the required sections #462 / work-items(work):status: readyissues with an open PR stay pickable — no in-review state (re-pick risk) #463 / repo: per-change version bump + top-insert CHANGELOG serialize concurrent same-plugin PRs (conflict by construction) #464 (related lane-rule lineage)