fix: bump overnight-insight-discovery so its wrap-corruption fix ships (1.1.1) - #21
Merged
Conversation
…s (1.1.1) Same undeliverable-fix problem as #20, one plugin over. PR #19 repaired a mid-token line wrap in this plugin's description -- a `description: |` block scalar joins lines with a SPACE, so the wrapped token injected as "exploratory- data-analysis" instead of "exploratory-data-analysis". main passes the gate. But the version stayed at 1.1.0, so `claude plugin update` had nothing to do and the corruption was still live on a fully-updated install. Confirmed by running the v2.2.1 gate against the active installed payload after updating every marketplace and plugin. Bumps plugin.json + the marketplace entry to 1.1.1. Surgical regex on the version string only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
wan-huiyan
added a commit
that referenced
this pull request
Aug 6, 2026
…vernight run taught (1.3.0) Source: a single overnight run of 17 items -- 20 merged PRs, 4 orchestrated workflows, 91 subagents, ~11 hours. Every addition below is something that cost real work on that night, not a guess about what might go wrong. Seven additions to the SKILL body, all verified absent from 1.2.2 by grep before splicing: 1. Never truncate a findings payload. Three reviewers returned six critical findings; the merging agent was handed `JSON.stringify(reviews).slice(0, 9000)` and five arrived. The sixth was cut mid-object and was the worst of the six. Three reviewers dispatched, three verdicts returned, findings commented on the PR, PR merged -- nothing looked wrong. Rules: never slice a findings list; make the merging agent report received-vs-answered and treat a mismatch as blocking; the run journal holds each agent's true return value when the orchestrator's own view was truncated. Same family as a green suite that ran zero tests. 2. Coordinating with sessions you do not control. The existing collision audits assume the other work is a branch you can diff. Increasingly it is another live agent session whose files are not committed. Claim your intent -- id, state, plain label, and the file list -- on a committed shared board before starting. It worked: a parallel session read the board, saw two of its three tasks already claimed, and did only the third. Append, never replace (two sessions each wrote a one-element array and the second erased the first). Don't drop the claim while your PRs are open. Nothing expires it, so take it down at the end. 3. Amend a running orchestration through a file on disk, not the script. Guardrail text is embedded in every agent prompt, so editing the script changes every call signature and a resume re-runs completed work instead of replaying from cache -- on this run that would have discarded eight finished PRs. Point the script at a plan file and append dated addenda. Check which phase is running first: an addendum after the last agent started is a note to nobody. 4. A third kind of collision neither pre-flight audit can see: the same piece of work, in two places, under two names, in a live session's uncommitted tree and declared against a different issue. Gate rather than parallelise, then extract the piece into a tested module and prove the refactor changed no result by diffing both paths' outputs. 5. The baseline numbers in your own brief go stale mid-run. A parallel PR re-derived the published test counts while the run was in flight; the guardrail text said 269, the truth became 314, and a later item quoted its own brief. Measure the baseline on your own rebase; never carry a count from a document. An item pasted a stale count inside the PR that existed to fix stale counts. 6. What an autonomous run may and may not decide. An assumption is a default, not a ruling, and never overrides a standing decision or a pre-registration. For pre-registered questions the conservative action is DISCLOSE, not COMPUTE. An un-run unit is "no result", not "inconclusive". Production changes only in the reverting direction and only on unanimous reviewer authorisation, asked as a separate explicit field. Merging its own PRs is a separate grant from changing production -- neither is implied by the instruction to implement. 7. A verbatim line for every reviewer prompt: "Check whether this change ships a fresh instance of the defect it repairs." Five of the twenty merged PRs did -- a correction to a figure with no corpus named printed a figure with no corpus named. It was the most common review finding of the night, ahead of ordinary regressions, and every instance was caught by someone re-deriving a number, never by reading the diff. Plus: dropping an honest positive is drift too. Seams adjusted, not content rewritten: one connective sentence so the tier rubric still reads as "below"; the new section's merge/production paragraph now points at Phase C step 4 and the anti-patterns, which hold the ask-before-merge line; the "don't auto-deploy" anti-pattern names the one bounded exception the new section introduces, so the skill does not argue against itself; the blocked-reviewer sister plugin is now listed in References, since the body cites it. The draft's "a fourth collision" was wrong -- the document establishes two (ID-level and file-level), so it is a third. Versions, in every place this repo records one -- the failure mode of #20/#21/ #24 is a content change that never ships because a version did not move: SKILL.md frontmatter 1.2.0 -> 1.3.0 (had drifted; the 1.2.1 and 1.2.2 bumps were manifest-only) plugins/.../.claude-plugin/plugin.json 1.2.2 -> 1.3.0 .claude-plugin/marketplace.json 1.2.2 -> 1.3.0 VERSION (bundle) 1.2.1 -> 1.3.0 VERSION had also drifted a patch behind the plugins. release.yml's own comment says to bump it in the same PR as the version bump, so it moves here and cuts the v1.3.0 release. No description changed. The gate reports overnight-multi-issue-implementation at 1,463 chars with 73 to spare, identical to before this commit. SKILL.md 553 -> 702 lines. Gates: description-cap exit 0, leak exit 0, validate_plugins exit 0, listing budget fits at 1M context with 9,496 chars to spare. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013JVMGELnoA2vM56Va4gLXE
wan-huiyan
added a commit
that referenced
this pull request
Aug 6, 2026
…vernight run taught (1.3.0) Source: a single overnight run of 17 items -- 20 merged PRs, 4 orchestrated workflows, 91 subagents, ~11 hours. Every addition below is something that cost real work on that night, not a guess about what might go wrong. Seven additions to the SKILL body, all verified absent from 1.2.2 by grep before splicing: 1. Never truncate a findings payload. Three reviewers returned six critical findings; the merging agent was handed `JSON.stringify(reviews).slice(0, 9000)` and five arrived. The sixth was cut mid-object and was the worst of the six. Three reviewers dispatched, three verdicts returned, findings commented on the PR, PR merged -- nothing looked wrong. Rules: never slice a findings list; make the merging agent report received-vs-answered and treat a mismatch as blocking; the run journal holds each agent's true return value when the orchestrator's own view was truncated. Same family as a green suite that ran zero tests. 2. Coordinating with sessions you do not control. The existing collision audits assume the other work is a branch you can diff. Increasingly it is another live agent session whose files are not committed. Claim your intent -- id, state, plain label, and the file list -- on a committed shared board before starting. It worked: a parallel session read the board, saw two of its three tasks already claimed, and did only the third. Append, never replace (two sessions each wrote a one-element array and the second erased the first). Don't drop the claim while your PRs are open. Nothing expires it, so take it down at the end. 3. Amend a running orchestration through a file on disk, not the script. Guardrail text is embedded in every agent prompt, so editing the script changes every call signature and a resume re-runs completed work instead of replaying from cache -- on this run that would have discarded eight finished PRs. Point the script at a plan file and append dated addenda. Check which phase is running first: an addendum after the last agent started is a note to nobody. 4. A third kind of collision neither pre-flight audit can see: the same piece of work, in two places, under two names, in a live session's uncommitted tree and declared against a different issue. Gate rather than parallelise, then extract the piece into a tested module and prove the refactor changed no result by diffing both paths' outputs. 5. The baseline numbers in your own brief go stale mid-run. A parallel PR re-derived the published test counts while the run was in flight; the guardrail text said 269, the truth became 314, and a later item quoted its own brief. Measure the baseline on your own rebase; never carry a count from a document. An item pasted a stale count inside the PR that existed to fix stale counts. 6. What an autonomous run may and may not decide. An assumption is a default, not a ruling, and never overrides a standing decision or a pre-registration. For pre-registered questions the conservative action is DISCLOSE, not COMPUTE. An un-run unit is "no result", not "inconclusive". Production changes only in the reverting direction and only on unanimous reviewer authorisation, asked as a separate explicit field. Merging its own PRs is a separate grant from changing production -- neither is implied by the instruction to implement. 7. A verbatim line for every reviewer prompt: "Check whether this change ships a fresh instance of the defect it repairs." Five of the twenty merged PRs did -- a correction to a figure with no corpus named printed a figure with no corpus named. It was the most common review finding of the night, ahead of ordinary regressions, and every instance was caught by someone re-deriving a number, never by reading the diff. Plus: dropping an honest positive is drift too. Seams adjusted, not content rewritten: one connective sentence so the tier rubric still reads as "below"; the new section's merge/production paragraph now points at Phase C step 4 and the anti-patterns, which hold the ask-before-merge line; the "don't auto-deploy" anti-pattern names the one bounded exception the new section introduces, so the skill does not argue against itself; the blocked-reviewer sister plugin is now listed in References, since the body cites it. The draft's "a fourth collision" was wrong -- the document establishes two (ID-level and file-level), so it is a third. Versions, in every place this repo records one -- the failure mode of #20/#21/ #24 is a content change that never ships because a version did not move: SKILL.md frontmatter 1.2.0 -> 1.3.0 (had drifted; the 1.2.1 and 1.2.2 bumps were manifest-only) plugins/.../.claude-plugin/plugin.json 1.2.2 -> 1.3.0 .claude-plugin/marketplace.json 1.2.2 -> 1.3.0 VERSION (bundle) 1.2.1 -> 1.3.0 VERSION had also drifted a patch behind the plugins. release.yml's own comment says to bump it in the same PR as the version bump, so it moves here and cuts the v1.3.0 release. No description changed. The gate reports overnight-multi-issue-implementation at 1,463 chars with 73 to spare, identical to before this commit. SKILL.md 553 -> 702 lines. Gates: description-cap exit 0, leak exit 0, validate_plugins exit 0, listing budget fits at 1M context with 9,496 chars to spare. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013JVMGELnoA2vM56Va4gLXE
wan-huiyan
added a commit
that referenced
this pull request
Aug 6, 2026
…vernight run taught (1.3.0) Source: a single overnight run of 17 items -- 20 merged PRs, 4 orchestrated workflows, 91 subagents, ~11 hours. Every addition below is something that cost real work on that night, not a guess about what might go wrong. Seven additions to the SKILL body, all verified absent from 1.2.2 by grep before splicing: 1. Never truncate a findings payload. Three reviewers returned six critical findings; the merging agent was handed `JSON.stringify(reviews).slice(0, 9000)` and five arrived. The sixth was cut mid-object and was the worst of the six. Three reviewers dispatched, three verdicts returned, findings commented on the PR, PR merged -- nothing looked wrong. Rules: never slice a findings list; make the merging agent report received-vs-answered and treat a mismatch as blocking; the run journal holds each agent's true return value when the orchestrator's own view was truncated. Same family as a green suite that ran zero tests. 2. Coordinating with sessions you do not control. The existing collision audits assume the other work is a branch you can diff. Increasingly it is another live agent session whose files are not committed. Claim your intent -- id, state, plain label, and the file list -- on a committed shared board before starting. It worked: a parallel session read the board, saw two of its three tasks already claimed, and did only the third. Append, never replace (two sessions each wrote a one-element array and the second erased the first). Don't drop the claim while your PRs are open. Nothing expires it, so take it down at the end. 3. Amend a running orchestration through a file on disk, not the script. Guardrail text is embedded in every agent prompt, so editing the script changes every call signature and a resume re-runs completed work instead of replaying from cache -- on this run that would have discarded eight finished PRs. Point the script at a plan file and append dated addenda. Check which phase is running first: an addendum after the last agent started is a note to nobody. 4. A third kind of collision neither pre-flight audit can see: the same piece of work, in two places, under two names, in a live session's uncommitted tree and declared against a different issue. Gate rather than parallelise, then extract the piece into a tested module and prove the refactor changed no result by diffing both paths' outputs. 5. The baseline numbers in your own brief go stale mid-run. A parallel PR re-derived the published test counts while the run was in flight; the guardrail text said 269, the truth became 314, and a later item quoted its own brief. Measure the baseline on your own rebase; never carry a count from a document. An item pasted a stale count inside the PR that existed to fix stale counts. 6. What an autonomous run may and may not decide. An assumption is a default, not a ruling, and never overrides a standing decision or a pre-registration. For pre-registered questions the conservative action is DISCLOSE, not COMPUTE. An un-run unit is "no result", not "inconclusive". Production changes only in the reverting direction and only on unanimous reviewer authorisation, asked as a separate explicit field. Merging its own PRs is a separate grant from changing production -- neither is implied by the instruction to implement. 7. A verbatim line for every reviewer prompt: "Check whether this change ships a fresh instance of the defect it repairs." Five of the twenty merged PRs did -- a correction to a figure with no corpus named printed a figure with no corpus named. It was the most common review finding of the night, ahead of ordinary regressions, and every instance was caught by someone re-deriving a number, never by reading the diff. Plus: dropping an honest positive is drift too. Seams adjusted, not content rewritten: one connective sentence so the tier rubric still reads as "below"; the new section's merge/production paragraph now points at Phase C step 4 and the anti-patterns, which hold the ask-before-merge line; the "don't auto-deploy" anti-pattern names the one bounded exception the new section introduces, so the skill does not argue against itself; the blocked-reviewer sister plugin is now listed in References, since the body cites it. The draft's "a fourth collision" was wrong -- the document establishes two (ID-level and file-level), so it is a third. An independent reviewer read the result against CONTRIBUTING.md and found three things the splice had left broken. All three are fixed here: - **"The observed run" was never defined anywhere in the shipped file.** Five new passages rest their evidence on it, including "five of twenty merged PRs", while the only run the file described was the 2026-05-08 chatbox session -- 2 PRs, ~6 hours, ~38 dispatches. A reader following the phrase landed on numbers that contradicted it, and the run that actually backs the prose lived only in the README and this message, neither of which ships to an installed user. The Overview now says which run the phrase means, and a second worked example at the end gives it, with each lesson traced to what it cost. - **The production carve-out quietly removed the human.** The anti-pattern demands "human review for high-stakes changes"; the new exception permitted a change on "unanimous reviewer authorisation", and everywhere else in this file a reviewer is a subagent. As written the run could change production unattended but could not merge a PR without waking someone. Both ends now say it plainly: the reviewers are the run's own agents, no human is in the loop at 3am, that is why the direction bound comes first, and anything that is not a revert still waits for a person. - **The stale-baseline lesson collided with the recipe three lines above it.** That recipe defines the baseline as a failing-set snapshot taken once, before the chain; the new text said to measure it "on its own rebase", which would absorb an earlier PR's regression and then print IDENTICAL over it. The two are now distinguished: the thing you must never quote from a document is the suite's headline count, not the pre-chain snapshot. Two smaller ones from the same read: the companion-skill pointer had been left below the new third-collision paragraphs, where it looked like it covered them (it is branch-based, and the third kind is defined by having no branch) -- moved above, and it now says so; and `resumeFromRunId` was named without saying what provides it. Two pre-existing anonymization scars in files this PR already touches, fixed while here: "for the\nthe project" in SKILL.md:319 and "the project propensity project" in README.md:58 are both the visible seam of an old scrub, not identifiers. Versions, in every place this repo records one -- the failure mode of #20/#21/ #24 is a content change that never ships because a version did not move: SKILL.md frontmatter 1.2.0 -> 1.3.0 (had drifted; the 1.2.1 and 1.2.2 bumps were manifest-only) plugins/.../.claude-plugin/plugin.json 1.2.2 -> 1.3.0 .claude-plugin/marketplace.json 1.2.2 -> 1.3.0 VERSION (bundle) 1.2.1 -> 1.3.0 VERSION had also drifted a patch behind the plugins. release.yml's own comment says to bump it in the same PR as the version bump, so it moves here and cuts the v1.3.0 release. No description changed. The gate reports overnight-multi-issue-implementation at 1,463 chars with 73 to spare, identical to before this commit. SKILL.md 553 -> 742 lines. Gates: description-cap exit 0, leak exit 0, validate_plugins exit 0, listing budget fits at 1M context with 9,496 chars to spare. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013JVMGELnoA2vM56Va4gLXE
wan-huiyan
added a commit
that referenced
this pull request
Aug 6, 2026
…vernight run taught (1.3.0) (#25) Source: a single overnight run of 17 items -- 20 merged PRs, 4 orchestrated workflows, 91 subagents, ~11 hours. Every addition below is something that cost real work on that night, not a guess about what might go wrong. Seven additions to the SKILL body, all verified absent from 1.2.2 by grep before splicing: 1. Never truncate a findings payload. Three reviewers returned six critical findings; the merging agent was handed `JSON.stringify(reviews).slice(0, 9000)` and five arrived. The sixth was cut mid-object and was the worst of the six. Three reviewers dispatched, three verdicts returned, findings commented on the PR, PR merged -- nothing looked wrong. Rules: never slice a findings list; make the merging agent report received-vs-answered and treat a mismatch as blocking; the run journal holds each agent's true return value when the orchestrator's own view was truncated. Same family as a green suite that ran zero tests. 2. Coordinating with sessions you do not control. The existing collision audits assume the other work is a branch you can diff. Increasingly it is another live agent session whose files are not committed. Claim your intent -- id, state, plain label, and the file list -- on a committed shared board before starting. It worked: a parallel session read the board, saw two of its three tasks already claimed, and did only the third. Append, never replace (two sessions each wrote a one-element array and the second erased the first). Don't drop the claim while your PRs are open. Nothing expires it, so take it down at the end. 3. Amend a running orchestration through a file on disk, not the script. Guardrail text is embedded in every agent prompt, so editing the script changes every call signature and a resume re-runs completed work instead of replaying from cache -- on this run that would have discarded eight finished PRs. Point the script at a plan file and append dated addenda. Check which phase is running first: an addendum after the last agent started is a note to nobody. 4. A third kind of collision neither pre-flight audit can see: the same piece of work, in two places, under two names, in a live session's uncommitted tree and declared against a different issue. Gate rather than parallelise, then extract the piece into a tested module and prove the refactor changed no result by diffing both paths' outputs. 5. The baseline numbers in your own brief go stale mid-run. A parallel PR re-derived the published test counts while the run was in flight; the guardrail text said 269, the truth became 314, and a later item quoted its own brief. Measure the baseline on your own rebase; never carry a count from a document. An item pasted a stale count inside the PR that existed to fix stale counts. 6. What an autonomous run may and may not decide. An assumption is a default, not a ruling, and never overrides a standing decision or a pre-registration. For pre-registered questions the conservative action is DISCLOSE, not COMPUTE. An un-run unit is "no result", not "inconclusive". Production changes only in the reverting direction and only on unanimous reviewer authorisation, asked as a separate explicit field. Merging its own PRs is a separate grant from changing production -- neither is implied by the instruction to implement. 7. A verbatim line for every reviewer prompt: "Check whether this change ships a fresh instance of the defect it repairs." Five of the twenty merged PRs did -- a correction to a figure with no corpus named printed a figure with no corpus named. It was the most common review finding of the night, ahead of ordinary regressions, and every instance was caught by someone re-deriving a number, never by reading the diff. Plus: dropping an honest positive is drift too. Seams adjusted, not content rewritten: one connective sentence so the tier rubric still reads as "below"; the new section's merge/production paragraph now points at Phase C step 4 and the anti-patterns, which hold the ask-before-merge line; the "don't auto-deploy" anti-pattern names the one bounded exception the new section introduces, so the skill does not argue against itself; the blocked-reviewer sister plugin is now listed in References, since the body cites it. The draft's "a fourth collision" was wrong -- the document establishes two (ID-level and file-level), so it is a third. An independent reviewer read the result against CONTRIBUTING.md and found three things the splice had left broken. All three are fixed here: - **"The observed run" was never defined anywhere in the shipped file.** Five new passages rest their evidence on it, including "five of twenty merged PRs", while the only run the file described was the 2026-05-08 chatbox session -- 2 PRs, ~6 hours, ~38 dispatches. A reader following the phrase landed on numbers that contradicted it, and the run that actually backs the prose lived only in the README and this message, neither of which ships to an installed user. The Overview now says which run the phrase means, and a second worked example at the end gives it, with each lesson traced to what it cost. - **The production carve-out quietly removed the human.** The anti-pattern demands "human review for high-stakes changes"; the new exception permitted a change on "unanimous reviewer authorisation", and everywhere else in this file a reviewer is a subagent. As written the run could change production unattended but could not merge a PR without waking someone. Both ends now say it plainly: the reviewers are the run's own agents, no human is in the loop at 3am, that is why the direction bound comes first, and anything that is not a revert still waits for a person. - **The stale-baseline lesson collided with the recipe three lines above it.** That recipe defines the baseline as a failing-set snapshot taken once, before the chain; the new text said to measure it "on its own rebase", which would absorb an earlier PR's regression and then print IDENTICAL over it. The two are now distinguished: the thing you must never quote from a document is the suite's headline count, not the pre-chain snapshot. Two smaller ones from the same read: the companion-skill pointer had been left below the new third-collision paragraphs, where it looked like it covered them (it is branch-based, and the third kind is defined by having no branch) -- moved above, and it now says so; and `resumeFromRunId` was named without saying what provides it. Two pre-existing anonymization scars in files this PR already touches, fixed while here: "for the\nthe project" in SKILL.md:319 and "the project propensity project" in README.md:58 are both the visible seam of an old scrub, not identifiers. Versions, in every place this repo records one -- the failure mode of #20/#21/ #24 is a content change that never ships because a version did not move: SKILL.md frontmatter 1.2.0 -> 1.3.0 (had drifted; the 1.2.1 and 1.2.2 bumps were manifest-only) plugins/.../.claude-plugin/plugin.json 1.2.2 -> 1.3.0 .claude-plugin/marketplace.json 1.2.2 -> 1.3.0 VERSION (bundle) 1.2.1 -> 1.3.0 VERSION had also drifted a patch behind the plugins. release.yml's own comment says to bump it in the same PR as the version bump, so it moves here and cuts the v1.3.0 release. No description changed. The gate reports overnight-multi-issue-implementation at 1,463 chars with 73 to spare, identical to before this commit. SKILL.md 553 -> 742 lines. Gates: description-cap exit 0, leak exit 0, validate_plugins exit 0, listing budget fits at 1M context with 9,496 chars to spare. Claude-Session: https://claude.ai/code/session_013JVMGELnoA2vM56Va4gLXE Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Same undeliverable-fix problem as #20, one plugin over.
#19 repaired a mid-token line wrap in this plugin's description — a
description: |block scalar joins lines with a space, so the wrapped token injected asexploratory- data-analysisinstead ofexploratory-data-analysis.mainpasses the gate.But the version stayed at
1.1.0, soclaude plugin updatehad nothing to do. Confirmed live: after merging #19 and #20 and updating every marketplace and plugin, the v2.2.1 gate still reportedagainst the active installed payload.
Bumps
plugin.jsonand the marketplace entry to1.1.1. Surgical regex on the version string;validate_plugins.pypasses and the gate exits 0.🤖 Generated with Claude Code