Skip to content

fix(poteto-mode): correct failure counting and PR repository selection - #205

Merged
mdsmithaustin merged 14 commits into
mainfrom
fix/autopilot-fail-count-and-forge-repo
Oct 13, 2026
Merged

mdsmithaustin merged 14 commits into
mainfrom
fix/autopilot-fail-count-and-forge-repo

Conversation

@mdsmithaustin

@mdsmithaustin mdsmithaustin commented Oct 12, 2026 •

Copy link
Copy Markdown
Owner

What Changed

  • Report trusted failure-round counts and stop/reset state through merge-gate, and update Autopilot rules for third-failure stops, operator grants, and private handling of security findings.
  • Resolve GitHub PR operations against origin's repository and the current branch, require an explicit PR on detached HEAD, and add repository selection to related skill commands.
  • Require PR bodies to match the full current diff before handoff or merge-ready reports, including after repair pushes, and document the port-specific rules.
Validation

Risk Assessment

✅ Low: Round 3 changes documentation wording at four -R sites plus a PORTING note, and it matches the census in the stated intent; the only gap is the GitHub Enterprise host in the shared clause, and that can be handled in a follow-up.

Testing

Inspected the scoped instructions, attempted every documented read in an isolated fork checkout, and captured live public API evidence of the repository mismatch. Authentication blocked exact gh reads; disposable files were removed. No UI changed, so visual evidence was unnecessary.

  • Live validation: ⚠️ inconclusive - 1 of 4 scenarios driven live against the product
Scenario Result Live Evidence
Derive the fork repository from origin and confirm that its PR #205 differs from upstream's PR #205 ✅ pass live repository-target-proof.json
Read the fork PR diff and current branch's base using the documented -R value ⏸️ untested no Ran gh pr diff 205 and gh pr view fix/autopilot-fail-count-and-forge-repo --json baseRefName with origin-derived -R in a disposable checkout containing upstream. Both exited before querying because is…
Read Babysit readiness data and verify its comment target points to the fork ⏸️ untested no Attempted Babysit's exact readiness gh pr view and a read using the same repository value as its comment command. Both require unavailable GitHub authentication. Public HTTP metadata confirms the fork…
Fill the remaining -R placeholders from origin and read Shipping, archaeology, and attachment data from the fork ⏸️ untested no Attempted the documented gh pr view field sets with mdsmithaustin/pstack derived from origin, plus the bare comparison. Every read exited at authentication. Disposable configuration, anonymous public…
Evidence: Live public API repository contrast
{
  "oracle": "Author intent requires mdsmithaustin/pstack; upstream cursor/plugins is the adversarial wrong target.",
  "origin_fetch_url": "https://github.com/mdsmithaustin/pstack.git",
  "derived_repository": "mdsmithaustin/pstack",
  "live_public_api_responses": [
    {
      "url": "https://api.github.com/repos/mdsmithaustin/pstack/pulls/205",
      "status": 200,
      "html_url": "https://github.com/mdsmithaustin/pstack/pull/205",
      "state": "open",
      "head": "fix/autopilot-fail-count-and-forge-repo",
      "base": "main"
    },
    {
      "url": "https://api.github.com/repos/cursor/plugins/pulls/205",
      "status": 200,
      "html_url": "https://github.com/cursor/plugins/pull/205",
      "state": "closed",
      "head": "add-navan-plugin",
      "base": "main"
    }
  ],
  "limits": "Exact gh pr commands could not authenticate. HTTP responses do not prove agent interpretation or gh pr view execution."
}
Evidence: Isolated documented-command attempts
Disposable fork checkout, separate HOME and GH_CONFIG_DIR.
Origin-derived oracle: mdsmithaustin/pstack, upstream/default cursor/plugins.
No real credential available. Noncredential sentinel used only for browse workaround.
PR diff/view failure signal: nonzero exit or missing actual PR response. URL failure signal: wrong repository URL.

$ git init -b fix/autopilot-fail-count-and-forge-repo
exit=0
Initialized empty Git repository in ~/.no-mistakes/worktrees/fbee15f974d9/01M4SCTFPCMQKZC1NC7BFZH8R8/.test-origin-proof/checkout/.git/

$ git remote add origin https://github.com/mdsmithaustin/pstack.git
exit=0

$ git remote add upstream https://github.com/cursor/plugins.git
exit=0

$ git config remote.upstream.gh-resolved base
exit=0

$ git remote get-url origin
exit=0
https://github.com/mdsmithaustin/pstack.git

$ gh browse 205 --no-browser
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh browse 205 -R mdsmithaustin/pstack --no-browser
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh auth status
exit=1
You are not logged into any GitHub hosts. To log in, run: gh auth login

$ gh pr diff 205 -R mdsmithaustin/pstack
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh pr view fix/autopilot-fail-count-and-forge-repo -R mdsmithaustin/pstack --json baseRefName
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh pr view 205 -R mdsmithaustin/pstack --json author,headRefOid,mergeStateStatus,statusCheckRollup,reviews,reviewRequests,comments
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh pr view 205 -R mdsmithaustin/pstack --json state,mergedAt,mergeStateStatus,statusCheckRollup,autoMergeRequest
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh pr view 205 -R mdsmithaustin/pstack --json title,body,author,createdAt,mergedAt,labels,closingIssuesReferences,comments,reviews,files
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh pr view 205 -R mdsmithaustin/pstack --json body,comments
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh pr view 205
exit=4
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

$ gh browse --no-browser
exit=1
HTTP 401 (https://api.github.com/repos/cursor/plugins)
Try authenticating with:  gh auth login -h github.com

$ gh browse --no-browser -R mdsmithaustin/pstack
exit=1
HTTP 401 (https://api.github.com/repos/mdsmithaustin/pstack)
Try authenticating with:  gh auth login -h github.com

$ gh browse --no-browser --settings
exit=1
HTTP 401 (https://api.github.com/repos/cursor/plugins)
Try authenticating with:  gh auth login -h github.com

$ gh browse --no-browser --settings -R mdsmithaustin/pstack
exit=1
HTTP 401 (https://api.github.com/repos/mdsmithaustin/pstack)
Try authenticating with:  gh auth login -h github.com

{"url": "https://api.github.com/repos/mdsmithaustin/pstack/pulls/205", "status": 200, "html_url": "https://github.com/mdsmithaustin/pstack/pull/205", "state": "open", "head": "fix/autopilot-fail-count-and-forge-repo", "base": "main"}
exit=HTTP

{"url": "https://api.github.com/repos/cursor/plugins/pulls/205", "status": 200, "html_url": "https://github.com/cursor/plugins/pull/205", "state": "closed", "head": "add-navan-plugin", "base": "main"}
exit=HTTP
Evidence: Anonymous gh API workaround attempts
[
  {
    "command": [
      "gh",
      "api",
      "-H",
      "Authorization:",
      "repos/mdsmithaustin/pstack/pulls/205",
      "--jq",
      "{url:.html_url,state:.state,head:.head.ref,base:.base.ref,merged:.merged}"
    ],
    "exit": 1,
    "stdout": "{\n  \"message\": \"Bad credentials\",\n  \"documentation_url\": \"https://docs.github.com/rest\",\n  \"status\": \"401\"\n}",
    "stderr": "gh: Bad credentials (HTTP 401)\n"
  },
  {
    "command": [
      "gh",
      "api",
      "-H",
      "Authorization:",
      "repos/cursor/plugins/pulls/205",
      "--jq",
      "{url:.html_url,state:.state,head:.head.ref,base:.base.ref,merged:.merged}"
    ],
    "exit": 1,
    "stdout": "{\n  \"message\": \"Bad credentials\",\n  \"documentation_url\": \"https://docs.github.com/rest\",\n  \"status\": \"401\"\n}",
    "stderr": "gh: Bad credentials (HTTP 401)\n"
  },
  {
    "command": [
      "gh",
      "api",
      "-H",
      "Authorization:",
      "-H",
      "Accept: application/vnd.github.diff",
      "repos/mdsmithaustin/pstack/pulls/205"
    ],
    "exit": 1,
    "stdout": "{\n  \"message\": \"Bad credentials\",\n  \"documentation_url\": \"https://docs.github.com/rest\",\n  \"status\": \"401\"\n}",
    "stderr": "gh: Bad credentials (HTTP 401)\n"
  }
]
- Outcome: ⚠️ 1 warning across 1 run (3m36s)

Pipeline

Updates from git push no-mistakes

✅ **Intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

⚠️ **Review** - 1 warning
  • ⚠️ skills/poteto-mode/playbooks/code-review.md:7 - Round 3 adds the clause "with &lt;owner&gt;/&lt;repo&gt; from origin's fetch URL" to each -R site. That clause tells the agent to drop origin's host. Opening a PR's Forge rule (opening-a-pr.md:28) says to use &lt;host&gt;/&lt;owner&gt;/&lt;repo&gt; on GitHub Enterprise, but none of these sites loads that rule. Failing case: the origin is https://ghe.corp/team/app.git and gh is logged in to both github.com and ghe.corp. The agent follows the new text and runs gh pr diff 12 -R team/app. gh then picks its default host, github.com, so it reads the wrong PR or gets a 404. Before this branch, the bare gh pr diff 12 resolved the host from the git remotes. PORTING says the port keeps GHES host support. Babysit avoids the problem because step 6 tells the agent to set GH_HOST. The same clause appears at: skills/deslop/SKILL.md:12 (gh pr view <branch> -R), skills/poteto-mode/playbooks/shipping.md:17 and :21, skills/why/SKILL.md:26, and skills/why/references/sources/code-archaeology.md:47-48. Possible fix: append "(&lt;host&gt;/&lt;owner&gt;/&lt;repo&gt; on GitHub Enterprise)" to the shared clause at every site, which keeps the wording identical everywhere. This is ask-user because the operator asked for wording that matches shipping.md and for a minimal change, and this fix widens the wording at every site.
⚠️ **Test** - 1 warning
  • ⚠️ live validation verdict: inconclusive (1 of 4 scenarios were driven live against the product); untested: Read the fork PR diff and current branch's base using the documented -R value, Read Babysit readiness data and verify its comment target points to the fork, Fill the remaining -R placeholders from origin and read Shipping, archaeology, and attachment data from the fork
  • Live validation: ⚠️ inconclusive - 1 of 4 scenarios driven live against the product
Scenario Result Live Evidence
Derive the fork repository from origin and confirm that its PR #205 differs from upstream's PR #205 ✅ pass live repository-target-proof.json
Read the fork PR diff and current branch's base using the documented -R value ⏸️ untested no Ran gh pr diff 205 and gh pr view fix/autopilot-fail-count-and-forge-repo --json baseRefName with origin-derived -R in a disposable checkout containing upstream. Both exited before querying because is…
Read Babysit readiness data and verify its comment target points to the fork ⏸️ untested no Attempted Babysit's exact readiness gh pr view and a read using the same repository value as its comment command. Both require unavailable GitHub authentication. Public HTTP metadata confirms the fork…
Fill the remaining -R placeholders from origin and read Shipping, archaeology, and attachment data from the fork ⏸️ untested no Attempted the documented gh pr view field sets with mdsmithaustin/pstack derived from origin, plus the bare comparison. Every read exited at authentication. Disposable configuration, anonymous public…
  • git diff 340be6f9f89303a9520a1c845bd1510f277d497b fc4e503119b72fd6f3c454a736e2cf61e203b6af and the final commit diff; inspected repository tasks and -R placeholder census.
  • Created a disposable checkout with origin mdsmithaustin/pstack, upstream cursor/plugins, and isolated HOME/GH_CONFIG_DIR; derived the repository with git remote get-url origin.
  • gh auth status, gh pr diff 205 -R mdsmithaustin/pstack, branch-base lookup, and Babysit, Shipping, archaeology, and attachment gh pr view reads.
  • Live anonymous HTTP GETs to both repositories' /pulls/205 endpoints; asserted distinct URL, state, and branch identities.
  • gh browse --no-browser with bare and explicit repository selection; attempted anonymous gh api metadata and diff reads.
  • Saved transcripts and API evidence, removed disposable files, and confirmed git status --short was empty.
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): correct failure counting and PR repository selection fix(poteto-mode): count FAIL rounds in merge-gate and pass the resolved repo to gh Oct 12, 2026
@mdsmithaustin
mdsmithaustin force-pushed the fix/autopilot-fail-count-and-forge-repo branch from a5fe7c0 to a89395a Compare October 12, 2026 20:58
@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): count FAIL rounds in merge-gate and pass the resolved repo to gh fix(poteto-mode): correct failure counting and PR repository selection Oct 12, 2026
@mdsmithaustin
mdsmithaustin force-pushed the fix/autopilot-fail-count-and-forge-repo branch from a89395a to e3bb46c Compare October 12, 2026 21:18
@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): correct failure counting and PR repository selection fix(poteto-mode): correct fail-round counting and PR repository selection Oct 12, 2026
@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): correct fail-round counting and PR repository selection fix(poteto-mode): count FAIL rounds in merge-gate and pass the resolved repo to gh Oct 12, 2026
@mdsmithaustin

Copy link
Copy Markdown
Owner Author

Verdict: FAIL
Head: e3bb46c
Patch-id: 3758b825a6f68554e6f723c3926f1b252fd7ff8c
Docs: needs changes

Round 1 swarm at this head: gates + live merge-gate counts + watcher (sonnet@high), merge-gate safety review and playbook-text review (opus@xhigh each; work model sonnet@high).

Gates pass. merge-gate's pass/fail outcome is unchanged (failRounds is report-only; trust rules match verdict blocks). Live failRounds equals a manual count on #198, #199, #201, #202, #203. The watcher resolves the fork PR, not upstream, from a fork checkout. Ledger audit clean.

Fix-forward (in scope):

  1. Item 4 default (autopilot-full.md:8) as written lets an open security ask drive the third-FAIL stop, after which the stop files every open finding, including an out-of-scope security finding, as an issue on this PUBLIC repo, and "the verdict links the ask" forces a public post. Change it so: a round with a security ask open posts FAIL but that FAIL does not count toward the stop; the ask goes to the operator directly per references/bugbot-triage.md "Ask by default" (no public link); the stop never files a security finding publicly; an in-scope security finding reached only by an invented input is asked, not dropped. State it as a directive, not "the root's choice".
  2. "Recorded run" (autopilot-full.md:8) also covers a lane's run on an input it invented, contradicting the follow-up rule in the same paragraph. Define it as a saved run of a real caller or real input; a lane's run on an invented input stays follow-up material.
  3. Reset semantics (autopilot-full.md:8, verdict.ts:189-195, verdict.test.ts:358-366): an operator's go-ahead for one more round restarts the count at zero, buying three more fix-forwards (probe P2). Make a reset grant exactly one more round (the next FAIL stops). Give Stopped: the same trust rule as verdict blocks and let a newer reset supersede it for the tick.
  4. Step 4 has no rule for merge-gate exit 1 (count unknown, e.g. failed git fetch, probe P7): say the round withholds its fix-forward until --check reads the count.
  5. opening-a-pr.md:28 Forge rule: gh api and gh auth token reject -R (gh 2.102.0: "unknown shorthand flag"), and gh pr view -R needs a PR argument. Scope the rule: gh api takes the repo in the repos/<owner>/<repo>/... path, gh auth token takes none, gh pr view with -R names the PR.
  6. The PR body says upstream-owned examples are covered by the Forge rule; in this checkout shipping.md step 8's bare gh pr view 205 returned Add Navan plugin (third_party/navan) cursor/plugins#205 as MERGED while ours is open, and why/SKILL.md never loads Opening a PR. Add -R to upstream-owned gh pr commands that read or change PR state in shipping.md and why/SKILL.md (a real wrong answer outweighs the sync hunk), record them in PORTING, and correct the PR body.
  7. PORTING.md:59 "Keep explicit -R only in" omits babysit.md:14 (step 6); add it. opening-a-pr.md:61 calls the URL post a "merge-ready report" while babysit.md:7 defines merge-ready differently; use one term.

Follow-ups (filed, not this PR): watch-pr without --pr resolves the wrong PR on a gh pr checkout cross-repo branch (tracking refs/pull/N/head); a fork whose PRs target upstream gets -R <fork>.

@mdsmithaustin
mdsmithaustin force-pushed the fix/autopilot-fail-count-and-forge-repo branch from e3bb46c to 59400bb Compare October 12, 2026 22:19
@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): count FAIL rounds in merge-gate and pass the resolved repo to gh fix(poteto-mode): correct fail-round tracking and PR repository selection Oct 12, 2026
@mdsmithaustin

Copy link
Copy Markdown
Owner Author

Verdict: FAIL
Head: 59400bb
Patch-id: f12343aa2452c4f67420573a083738617b2e84a9
Docs: needs changes

Round 2 swarm at this head: gates + live counts + gh commands (sonnet@high), counter state-machine review and playbook review (opus@xhigh each; round-2 work on opus@high, so these may be same-family). This is the second FAIL; a third stops the PR.

What holds: gates pass; live failRounds equals a manual count on nine PRs (#201 reads 3 stop); every other merge-gate result equals main's; all 137,256 event orders up to length 6 keep a reset to exactly one round, keep stop sticky, ignore untrusted and bot comments, and never change merge-gate's outcome; every prescribed gh command works against the fork. The owner's call stands: a round that sends findings back still counts while an ask is open (otherwise fix-forwards never stop).

Fix-forward (in scope):

  1. verdict.ts:191-192 (and verdict.test.ts:302): a malformed FAIL block (e.g. Docs: PASS) is skipped, so the bound fails open; recorded slips on fix(evals): isolate Claude candidates from account MCPs #134 and fix(pstack-harness): preserve roles across handoffs #146, and fix(evals): retain Git pins and run worktree audit on Linux #143/fix(pstack-harness): preserve roles across handoffs #146 were edited in place, which keeps createdAt. Count any trusted Verdict: claim whose word is not PASS or PASS+NOTES as a FAIL, keyed by its Head when it parses. In autopilot-full step 4, confirm the posted block parses before acting, and correct a block with a new comment, never an edit. Red test.
  2. Security leaks still open: autopilot-full.md:8 reset comment "quotes the go-ahead" (could name the finding): summarize it without naming any security finding. multi-phase-plan.md:70 "Other true findings become follow-up issues": add the security exception (to the operator directly). shipping.md:7 verifiers post every finding on the PR: add the same exception (pre-existing, same class this PR claims to close).
  3. Replace the public marker Security ask: open with a neutral Operator ask: open (verdict.ts SECURITY_ASK_LINE, docs, tests).
  4. Exit 1 on --check: rerun once, then report to the operator and hold (copy babysit.md:14's pattern), instead of polling without limit.
  5. shipping.md:17,21 and skills/why/references/sources/code-archaeology.md:47: say <owner>/<repo> comes from origin's fetch URL, as why/SKILL.md:26 does (gh repo view in this checkout names cursor/plugins).
  6. merge-gate.ts:54 comment says state "may miss newer comments"; comments(last: 100) drops older ones. Fix the comment.

Notes (no change): -R drops a GitHub Enterprise host when gh is logged in to two hosts (added to #210); a PASS does not clear stop until a reset (stops early, never late); a same-head FAIL after a reset spends the grant.

@mdsmithaustin
mdsmithaustin force-pushed the fix/autopilot-fail-count-and-forge-repo branch from 59400bb to b313dc9 Compare October 12, 2026 23:04
@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): correct fail-round tracking and PR repository selection fix(poteto-mode): correct autopilot failure tracking and PR repository selection Oct 12, 2026
@mdsmithaustin

Copy link
Copy Markdown
Owner Author

Verdict: FAIL
Head: b313dc9
Patch-id: eba0c2b3c559171f078298b2a70048c391882bdf
Docs: needs changes

Round 3 swarm at this head: gates + live + exhaustive probes (sonnet@high), reducer review and security sweep / documentation-impact review (opus@xhigh each; round-3 work on opus@high, so these may be same-family).

This is the third FAIL. Per the autopilot playbook the owner is stopped and the PR goes to the operator.

What holds: gates pass; all 137,256 event orders keep every invariant and every malformed-claim shape now counts like a FAIL (the round-2 head fails that probe); 627,462 inserted-claim cases show extra counting only stops early; merge-gate's outcome and exit code equal main's on ten live PRs; every in-scope posting site carries the security exception; documentation-impact review: pass.

Blocking (same class as round-2 item 5): code-review.md:7 and deslop/SKILL.md:12, both new in this PR, use -R <owner>/<repo> without saying it comes from origin's fetch URL; neither loads Opening a PR, and in this checkout gh repo view names cursor/plugins. Filed with the remaining notes as #215.

@mdsmithaustin

Copy link
Copy Markdown
Owner Author

Fail-count reset: the operator approved one more round in chat on 2026-10-12, scoped to the open items in the round-3 verdict.

@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): correct autopilot failure tracking and PR repository selection fix(poteto-mode): correct failure-round tracking and PR repository selection Oct 13, 2026
@mdsmithaustin

Copy link
Copy Markdown
Owner Author

Verdict: PASS+NOTES
Head: 7e3a5d0
Patch-id: 0a920497a8d83b600c38f78d588806c20c0b52e7
Docs: pass

Round 4 (operator-granted, scoped to #215 item 1 per the operator's go-ahead in chat) at this head: gates + -R census + live fills (sonnet@high), review and documentation-impact review (opus@xhigh; work on opus@high, so it may be same-family).

The round-3 blocking finding is fixed: code-review.md:7, deslop/SKILL.md:12 and Babysit steps 6 and 8 now say <owner>/<repo> comes from origin's fetch URL; every gh -R site under skills/ either says so or sits in a playbook that resolves it. Filled from this checkout, each read-only form reaches mdsmithaustin/pstack, while a bare gh pr view 205 returns cursor/plugins#205. All four edited lines are port-owned. Gates pass (only known host noise); CI 7/7; merges clean onto main 340be6f and with #203.

Notes (follow-ups): a bare PR number in a fork checkout reviews the fork's PR of that number (PR URLs are safe); Code review and deslop do not mention the GitHub Enterprise host (#210 item 3); #215 items 2-5 stay open.

…ed repo to gh

Autopilot-full step 4 now reads report.failRounds from merge-gate --check.
verdict.ts counts distinct Head SHAs of trusted FAIL blocks, a trusted
Fail-count reset comment restarts the count, and a Stopped comment keeps
the hourly tick from refiling the same issues.

Step 4 also defines a recorded run, posts FAIL while a security ask is open,
and fixes in-scope security findings forward. Babysit and Opening a PR check
the PR body against the PR's full diff at the current head, and a non-owner
subagent finalizes the body before it returns the URL.

Opening a PR's Forge paragraph passes the resolved owner/repo as -R on every
gh call. The watcher's currentPr passes origin's repo and the checked-out
branch to gh pr view. Port-owned examples gain -R.

Closes #177, closes #169.
The document step replaced the item with a pointer to Autopilot-full step 4
and dropped the rule that a round is clean only when every lane passes or the
remaining findings went to follow-up issues. No #177 item asks for that.
…opped:

failRounds now returns { count, state }. state is open, stop, or stopped,
from a pass over trusted reset, Stopped:, and FAIL comments in time order.
A reset grants exactly one more round, so the next counted FAIL stops.
Stopped: uses the verdict trust rule and holds until a newer FAIL or reset.
A FAIL block with a "Security ask: open" line does not count. Same-second
comments apply reset, then Stopped:, then FAIL, so a tie never hides a stop.
merge-gate --check reports the state, and --pretty prints fail-state.
…om round 1

Autopilot-full step 4 acts on report.failRounds.state, holds the
fix-forward when merge-gate exits 1, and keeps security findings off
the public repo: in scope and reached for real goes to the owner, every
other one goes to the operator directly. A recorded run is a saved run
of a real caller or input. The Forge rule scopes -R to gh pr and gh issue,
puts the repository in the gh api path, and gives gh auth token none.
Shipping steps 4 and 8, why, and its code-archaeology reference pass -R.
Opening a PR stops calling the non-owner URL post a merge-ready report.
…d stop

A FAIL block posted with a slip such as "Docs: PASS" reads as malformed
and failRounds skipped it, so a slipped third round left the stop open.
These tests fail until a trusted Verdict: claim whose word is not PASS or
PASS+NOTES counts as a FAIL, keyed by its Head when it parses.
… stop

failRounds counted only verdict blocks that read in full, so a FAIL posted
with a slip such as "Docs: PASS" was skipped and the third round left the
stop open. A trusted Verdict: claim whose word is not PASS or PASS+NOTES now
counts as a FAIL round, keyed by its Head when that line parses and by the
comment otherwise.
… rules

Autopilot-full step 4 now says a malformed Verdict: claim counts, has the
root confirm its posted block reads before acting, and corrects a block
with a new comment because an edit keeps the original time. A second exit 1
from --check goes to the operator instead of a retry loop. The reset
comment summarizes the go-ahead without naming a security finding.

The ask-only marker is now the neutral "Operator ask: open". Shipping step
1, Multi-phase plan's follow-up-issue rule, and Code review step 9 keep
security, privacy, auth, data, and permission-boundary findings off the PR
and out of public issues. Shipping steps 4 and 8 and why's
code-archaeology reference take <owner>/<repo> from origin's fetch URL.
The failRounds comment that said the read may miss newer comments is gone.
… and Babysit -R sites

Code review step 1, deslop's Scope, and Babysit steps 6 and 8 passed
-R <owner>/<repo> without saying where the value comes from, and none of
them loads Opening a PR's Forge rule. In this fork gh's default repo is
cursor/plugins, so a guessed value can read the wrong PR. Each site now
says <owner>/<repo> comes from origin's fetch URL, as Shipping steps 4
and 8 do. PORTING records why these port-owned sites carry the clause.

Refs #215 (item 1).
@mdsmithaustin
mdsmithaustin force-pushed the fix/autopilot-fail-count-and-forge-repo branch from 7e3a5d0 to fc4e503 Compare October 13, 2026 01:14
@mdsmithaustin mdsmithaustin changed the title fix(poteto-mode): correct failure-round tracking and PR repository selection fix(poteto-mode): correct failure counting and PR repository selection Oct 13, 2026
@mdsmithaustin
mdsmithaustin merged commit 6a48be0 into main Oct 13, 2026
7 checks passed
@mdsmithaustin
mdsmithaustin deleted the fix/autopilot-fail-count-and-forge-repo branch October 13, 2026 01:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant