From c197fb3f8f722734ed38ef15c25b8b64288ca5cc Mon Sep 17 00:00:00 2001 From: golaraj Date: Tue, 18 Aug 2026 15:15:47 -0700 Subject: [PATCH 1/2] Defer Forge label checks until publication Do not interrupt running extraction or no-proposal runs for label capability; verify and apply the label only after selecting a proposal. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: b8cf0691-0fe3-4d67-92ce-ce2a529c400c --- .../skills/repository-skill-forge/SKILL.md | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md b/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md index 60373d1..c025735 100644 --- a/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md +++ b/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md @@ -57,8 +57,10 @@ issue, a previous run, or the last published PR. Find every open and closed pull request with the `skills-forge` label. Request at least PR number, URL, state, draft status, merged timestamp, updated -timestamp, and complete body. Create the label when supported; otherwise -require it to be pre-provisioned. Never publish an unlabeled Forge PR. +timestamp, and complete body. Do not require a separate label-existence lookup +or label-creation capability before extraction. An empty labeled-PR search is a +valid empty catalog; it does not prove whether the label exists and must not +block analysis. Write the returned PR array to `$RUN_DIR/forge-prs.json`, then build the catalog: @@ -193,7 +195,10 @@ python3 "$SKILL_DIR/scripts/extraction-controller.py" assert-terminal \ ``` A run is blocked only when this command reports the controller-recorded -blocker. Never describe incomplete `running` work as blocked. +blocker. Never describe incomplete `running` work as blocked. Once the +controller is initialized, do not stop for label, target-identity, or +publication-tool checks while its status remains `running`; continue invoking +`next` and recording every action outcome until extraction is terminal. ### 3. Handle irreducible query failures @@ -301,6 +306,11 @@ TARGET_SHA="$( If no proposal is selected, missing target identity must not block the run. If selected and target identity cannot be resolved, block before publication. +Only after a proposal is selected, verify that `skills-forge` exists and can be +applied to the created or updated PR. Create the label when supported. If the +label cannot be verified, created, or applied, block before publication. Never +publish an unlabeled Forge PR. Label capability is irrelevant to a successful +no-proposal result. The PR body includes the marker, proposal identity, candidate IDs, confidence, fixed evidence window, target SHA, validation, review findings, and the @@ -320,11 +330,12 @@ than one PR create/update, and a persistent valid marker in every published Forge PR. Fail explicitly on undisclosed omissions, malformed PR metadata, leakage, -unsafe proposals, missing label/write tools, or blocked publication. Never -fabricate evidence. Large repositories still use the full fixed window by -default; long asynchronous runtime alone is not a reason to sample. Introduce -deterministic sampling only after observing a concrete tool-call, output, -context, or automation limit. +unsafe proposals, or blocked publication. Missing label/write tools are a +publication blocker only after a proposal is selected; they must not interrupt +running extraction or a no-proposal result. Never fabricate evidence. Large +repositories still use the full fixed window by default; long asynchronous +runtime alone is not a reason to sample. Introduce deterministic sampling only +after observing a concrete tool-call, output, context, or automation limit. ## Assets From 86c57d1f8f59ed4ee1aaa754f9e5c1cf5ce68c50 Mon Sep 17 00:00:00 2001 From: golaraj Date: Tue, 18 Aug 2026 15:22:38 -0700 Subject: [PATCH 2/2] Make Forge labels optional Use proposal markers and semantic PR search for correctness; treat the skills-forge label as best-effort organizational metadata. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: b8cf0691-0fe3-4d67-92ce-ce2a529c400c --- .../skills/repository-skill-forge/SKILL.md | 33 +++++++++---------- .../prompts/review-proposal.md | 1 - 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md b/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md index c025735..955b6e5 100644 --- a/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md +++ b/plugins/repo-dreamer/skills/repository-skill-forge/SKILL.md @@ -55,12 +55,13 @@ ephemeral execution state, not cross-run Forge memory. Use the exact fixed rolling window for every run. Do not derive it from an issue, a previous run, or the last published PR. -Find every open and closed pull request with the `skills-forge` label. Request -at least PR number, URL, state, draft status, merged timestamp, updated -timestamp, and complete body. Do not require a separate label-existence lookup -or label-creation capability before extraction. An empty labeled-PR search is a -valid empty catalog; it does not prove whether the label exists and must not -block analysis. +Search open and closed pull requests for the literal +`repository-skill-forge-proposal:v1` marker, regardless of labels. Request at +least PR number, URL, state, draft status, merged timestamp, updated timestamp, +and complete body for every match. Also use general PR search when evaluating a +candidate to find semantically related work that predates the marker or was not +created by Forge. Labels are optional organizational metadata and are never an +identity, discovery, deduplication, or blocking mechanism. Write the returned PR array to `$RUN_DIR/forge-prs.json`, then build the catalog: @@ -306,11 +307,9 @@ TARGET_SHA="$( If no proposal is selected, missing target identity must not block the run. If selected and target identity cannot be resolved, block before publication. -Only after a proposal is selected, verify that `skills-forge` exists and can be -applied to the created or updated PR. Create the label when supported. If the -label cannot be verified, created, or applied, block before publication. Never -publish an unlabeled Forge PR. Label capability is irrelevant to a successful -no-proposal result. +After publication, apply `skills-forge` when the label exists and the available +GitHub tools support it. Label lookup, creation, or application failure is +non-blocking because the persistent marker is the authoritative Forge identity. The PR body includes the marker, proposal identity, candidate IDs, confidence, fixed evidence window, target SHA, validation, review findings, and the @@ -330,12 +329,12 @@ than one PR create/update, and a persistent valid marker in every published Forge PR. Fail explicitly on undisclosed omissions, malformed PR metadata, leakage, -unsafe proposals, or blocked publication. Missing label/write tools are a -publication blocker only after a proposal is selected; they must not interrupt -running extraction or a no-proposal result. Never fabricate evidence. Large -repositories still use the full fixed window by default; long asynchronous -runtime alone is not a reason to sample. Introduce deterministic sampling only -after observing a concrete tool-call, output, context, or automation limit. +unsafe proposals, missing required publication tools, or blocked publication. +Label tools are optional and must never interrupt extraction, publication, or a +no-proposal result. Never fabricate evidence. Large repositories still use the +full fixed window by default; long asynchronous runtime alone is not a reason +to sample. Introduce deterministic sampling only after observing a concrete +tool-call, output, context, or automation limit. ## Assets diff --git a/plugins/repo-dreamer/skills/repository-skill-forge/prompts/review-proposal.md b/plugins/repo-dreamer/skills/repository-skill-forge/prompts/review-proposal.md index 34655c3..8e2443f 100644 --- a/plugins/repo-dreamer/skills/repository-skill-forge/prompts/review-proposal.md +++ b/plugins/repo-dreamer/skills/repository-skill-forge/prompts/review-proposal.md @@ -35,7 +35,6 @@ Reject or revise the proposal when it: - requires `gh` or independently authenticated GitHub access in Dreaming; - claims multi-user evidence when trusted user identity is unavailable. - assumes more than one proposal PR can be created or updated in a run; -- omits the required `skills-forge` label; - omits, duplicates, corrupts, or mismatches the Forge proposal marker; - describes partial extraction as complete or omits coverage and omission disclosure from a proposal published after a partial run.