diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index da1ab3a..363c67c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -28,7 +28,7 @@ "name": "overnight-multi-issue-implementation", "source": "./plugins/overnight-multi-issue-implementation", "description": "Overnight autonomous workflow that takes a cluster of related GitHub issues (typically a P1 review-panel finding set) and ships them to merged stacked PRs by morning. Builds on subagent-driven-development with overnight-specific discipline: stacked PRs (so PR2 doesn't wait on a human PR1-merge mid-night), pre-flight tracker-id audit (concurrent sessions on main steal IDs), final PR-level code review before proposing merge, review findings preserved as PR comments before squash. Sister to overnight-review-client-delivery and overnight-insight-discovery.", - "version": "1.3.0" + "version": "1.3.1" }, { "name": "large-redesign-parallel-branch-collision-audit", diff --git a/README.md b/README.md index f60f032..4acb26e 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,7 @@ All three plugins encode patterns from real overnight runs. `overnight-review-cl ## Version history +- **2026-08-06** — `overnight-multi-issue-implementation` → **v1.3.1** (SKILL + both manifests + bundle `VERSION`): drops an unsourceable figure from the entry below. The "never truncate a findings payload" lesson described the lost finding as sitting in a "553-line pre-registration". That was true of the document the reviewer read; five blocking findings were then fixed on the branch before it merged, roughly doubling it, and it now stands at about 1,100 lines — a figure with no vintage attached, in a document the skill's own readers cannot re-derive it from. The length was decoration; "a pre-registration that had no power statement anywhere" carries the whole point, so the count is gone rather than dated. The same audit **retracted a rate**: "about one in four" is no longer claimed, because the host repo reopened its own count (a sixth instance surfaced, and two of the five were documents written from scratch). It now reads "common enough to budget a round for, not a measured rate". Everything else checked out against the source — the six-findings/five-arrived split, the ±0.03-versus-0.17 margin behind "about five times finer", and the 269 → 314 test counts are all recorded in the run's own handoffs. This is the skill's own "a fix ships a fresh instance of the defect it repairs" rule firing on the release that introduced it. - **2026-08-06** — `overnight-multi-issue-implementation` → **v1.3.0** (SKILL + both manifests + bundle `VERSION`, which had drifted a patch behind): seven lessons from a single overnight run of 17 items — 20 merged PRs, 4 orchestrated workflows, 91 subagents, ~11 hours. **Never `.slice()` a findings payload** (three reviewers returned six critical findings; the merging agent received five, and every visible signal still said the gate had worked — make the actor count what it received against what it answered, and keep the run journal as the recovery path). **Coordinating with sessions you do not control**: claim your intent and your file list on a shared in-repo board before you start, append rather than replace, and don't take the claim down while your PRs are open. **Amend a running orchestration through a file on disk, not the script** — editing the script changes every agent prompt and a resume then re-runs completed work instead of replaying it from cache. A **third kind of collision** neither pre-flight audit can see (the same piece of work under two names, in a live session's uncommitted tree). **Baseline numbers in your own brief go stale mid-run** — measure, never quote. **What an autonomous run may and may not decide** (an assumption is a default, not a ruling; for pre-registered questions disclose rather than compute; an un-run unit is "no result", not "inconclusive"; production changes only in the reverting direction and only on unanimous authorisation from the run's own reviewers, with anything that is not a revert still waiting for a person; merging is a separate grant from changing production). And a **verbatim line for every reviewer prompt** — "Check whether this change ships a fresh instance of the defect it repairs." — which caught five of the twenty merged PRs, every one by re-deriving a number rather than by reading the diff. - **2026-07-17** — `overnight-multi-issue-implementation` → **v1.2.0** (SKILL + manifests, fixing a manifest-version drift): adds **Phase 0 — backlog triage + owner-ruling application** for unvalidated issue clusters (triage biased against dismissal with adversarial verification of dismissals only; owner cut-line ratification via an interactive review page; rulings baked as greppable issue comments before any build; decision-session / build-session split with a wave-ordered kickoff prompt; follow-up ruling rounds handled additively; successor-before-close sequencing). Also documents that the close-keyword issue trap fires from **docs-only planning PR bodies** ("then close #N" in a kickoff-prompt addendum closes the live tracker on merge). Extracted from a real large-backlog triage-and-rulings run. Cross-links the new [`interactive-feedback-report`](https://github.com/wan-huiyan/interactive-feedback-report) skill. - **2026-06-02** — Standing convention added: review every **non-trivial PR** with the `roundtable:agent-review-panel` skill (all agents `model: opus`) before squash-merge; trivial/docs-only PRs may skip the full panel. Reconciled with the per-PR tier rubric (the panel is the heavyweight tier; single-reviewer tiers remain for low-risk PRs). `overnight-multi-issue-implementation` SKILL → v1.1.1, `subagent-review-tier-calibration-for-overnight-pr-chains` SKILL → v1.0.1. diff --git a/VERSION b/VERSION index f0bb29e..3a3cd8c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.0 +1.3.1 diff --git a/plugins/overnight-multi-issue-implementation/.claude-plugin/plugin.json b/plugins/overnight-multi-issue-implementation/.claude-plugin/plugin.json index e101366..7170a81 100644 --- a/plugins/overnight-multi-issue-implementation/.claude-plugin/plugin.json +++ b/plugins/overnight-multi-issue-implementation/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "overnight-multi-issue-implementation", "description": "Overnight autonomous workflow that takes a cluster of related GitHub issues (typically a P1 review-panel finding set) and ships them to merged stacked PRs by morning. Builds on subagent-driven-development with overnight-specific discipline: stacked PRs (so PR2 doesn't wait on a human PR1-merge mid-night), pre-flight tracker-id audit (concurrent sessions on main steal IDs), final PR-level code review before proposing merge, review findings preserved as PR comments before squash. Sister to overnight-review-client-delivery and overnight-insight-discovery. v1.2.0 adds Phase 0 for unvalidated backlogs: stale-issue triage biased against dismissal, owner cut-line ratification, rulings baked as issue comments, and a wave-ordered kickoff prompt.", - "version": "1.3.0", + "version": "1.3.1", "author": { "name": "wan-huiyan" }, diff --git a/plugins/overnight-multi-issue-implementation/SKILL.md b/plugins/overnight-multi-issue-implementation/SKILL.md index 38bbd4e..d012588 100644 --- a/plugins/overnight-multi-issue-implementation/SKILL.md +++ b/plugins/overnight-multi-issue-implementation/SKILL.md @@ -16,7 +16,7 @@ description: | work (use plain `subagent-driven-development`), polishing an existing deliverable (use `overnight-review-client-delivery`), or generating insights from data (use `overnight-insight-discovery`). author: wan-huiyan + Claude Code -version: 1.3.0 +version: 1.3.1 date: 2026-05-29 --- @@ -174,7 +174,7 @@ still says the gate worked. Observed: three reviewers returned **six** critical findings; the merging agent received `JSON.stringify(reviews).slice(0, 9000)` and **five arrived**. The sixth was cut mid-object. It was the worst of the six — a keep-or-kill decision resting on a margin about five times finer than the -data could resolve, in a 553-line pre-registration with no power statement anywhere. Three +data could resolve, in a pre-registration that had no power statement anywhere. Three reviewers dispatched, three verdicts returned, findings commented on the PR, PR merged. Nothing looked wrong. @@ -233,9 +233,13 @@ REJECT with categorized findings. *"Check whether this change ships a fresh instance of the defect it repairs."* On the observed run **five of twenty merged PRs did** — a correction to a figure with no corpus named printed a figure with no corpus named; a document about uncited copied numbers contained an uncited copied number. -About one in four, on documents. It was the single most common review finding, ahead of ordinary -regressions, and **every instance was caught by someone re-deriving a number, never by reading the -diff**. Budget a round for it. +It was the single most common review finding, ahead of ordinary regressions, and **every instance +was caught by someone re-deriving a number, never by reading the diff**. + +**Don't turn that into a rate.** The run's own count of five was reopened afterwards by the repo +that hosted it: a sixth instance turned up in a PR body, and two of the five were documents written +from scratch, where "the defect it existed to repair" is a stretch. **Budget a round for it as +something common, not as a measured rate** — the number was never the useful part. **And tell reviewers that dropping an honest POSITIVE is drift too.** A summary that omits the reassuring facts its source carries is not "conservative" — it is inaccurate in the direction nobody @@ -729,7 +733,8 @@ lessons appear: payload, and was recovered only because the merging agent said the payload looked cut → "Never truncate a findings payload". - Five of the twenty merged PRs shipped a fresh instance of the defect they - repaired; every one was caught by re-deriving a number → the verbatim + repaired — a count the host repo later reopened, so read it as "common", not + as a rate. Every one was caught by re-deriving a number → the verbatim reviewer line in the tier rubric. - The published test counts moved under the run (`server 269` → `314`) and an item quoted its own brief → the stale-baseline rule.