docs(pstack): port forge-neutral playbooks and Fable 5.1 defaults - #301
Conversation
Co-authored-by: lauren <poteto@users.noreply.github.com>
Co-authored-by: lauren <poteto@users.noreply.github.com>
Co-authored-by: lauren <poteto@users.noreply.github.com>
|
PASS Independent verification ran on PR head Evidence:
No blocking findings. |
Co-authored-by: lauren <poteto@users.noreply.github.com>
|
PASS+NOTES Independent verification ran on PR head Evidence:
NOTES (non-blocking):
No blocking findings. The two original Bugbot issues are fixed as described. Forge policy, model routing, TypeScript guidance, version, tests, typecheck, and plugin validation all hold at |
Co-authored-by: lauren <poteto@users.noreply.github.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
Reviewed by Cursor Bugbot for commit 3f27fff. Configure here.
| 5. **Land one PR at a time.** If the bottom PR is mergeable now, squash it with `origin pr merge <pr> --squash` or `gh pr merge <pr> --squash`. If requirements are still running and the user asked for merge-when-ready, arm only that PR with `origin pr merge <pr> --squash --auto` or `gh pr merge <pr> --squash --auto`. Origin's `--auto` is Origin merge-when-ready. GitHub's `--auto` is GitHub auto-merge. Wait for that PR to merge before preparing the next one. | ||
| 6. **Do not read GitHub `autoMergeRequest` as stack readiness.** At most it says GitHub auto-merge was requested for one GitHub PR. It does not prove Origin merge-when-ready is armed, that a descendant is queued, that a patch verdict is current, or that the contiguous stack is safe. Confirm the active forge's state for the current bottom PR, and say that the state is unknown if the active forge cannot report it. | ||
| 7. **Recompute after every merge.** Fetch trunk, confirm the merged SHA is present, drop the merged PR from the frozen bottom-to-top list, and inspect the new bottom PR's base, head, checks, and patch-id. A host may retarget a child automatically, but do not assume it did. Repeat steps 3 through 6 for that one PR. Independent work stays outside this chain and ships on its own. | ||
| 8. **Watch the current frontier until it merges or fails. Do not mutate the queue around it.** With Origin, use `origin pr view <pr> --checks --comments` and `origin pr checks <pr> --watch`, then re-read the PR until it reports merged or blocked. With GitHub, use `scripts/watch-pr/watch-pr --queued-stack --stack-prs <bottom>` only as an event wake and poll `gh pr view <pr> --json state,mergedAt,mergeStateStatus,statusCheckRollup,autoMergeRequest` after each wake, ignoring `READY` until `mergedAt` is non-null or `state` is `MERGED`; only then run step 7. Hard-fail only when `state` is `CLOSED` with no `mergedAt`, a required check concludes `FAILURE` or `CANCELLED` and blocks merge after auto-merge is no longer pending, or `mergeStateStatus` is `UNSTABLE` or `DIRTY` with no auto-merge pending; `BLOCKED` while checks are pending or auto-merge is armed is not failure. Do not use Babysit's queued `WAITING`/`merge-queue` stop condition here. Hold the watch under `/loop` in dynamic mode. Report each merge and the new ceiling. If the queue stalls, diagnose before mutating, because a stalled requirement and a stale base can look identical from the outside. |
There was a problem hiding this comment.
Shipping watch terminals disagree
High Severity · Logic Bug
Step 8 now names watch-pr --queued-stack as the GitHub wake, then tells the agent to ignore READY and hard-fail only from a narrow gh matrix. That mode never emits READY; it does emit process-terminal BLOCKER on failing checks, threads, and conflicts. Those exits are not always a shipping hard-fail while --auto is still pending, and the step never rearms after a non-hard-fail exit, so the /loop can die on a flake or sit with no further wakes.
Triggered by learned rule: Playbook terminal conditions must match tool verdict types across all modes
Reviewed by Cursor Bugbot for commit 3f27fff. Configure here.


Why
Bring pstack's public PR workflows and TypeScript guidance up to the September 1 parity audit without importing private infrastructure. The PR flow stays portable:
ghis the default, Origin is preferred when its CLI is installed and can resolve the repository, and Graphite is never required.Scope
pstack/skills/poteto-mode/playbooks/{autopilot-full,autopilot-stack,babysit,multi-phase-plan,opening-a-pr,shipping}.mdwith early ready PRs and decision trails, bottom-up one-at-a-time landing, stable patch-id rechecks, base-branch stacks, forge-aware watch/reply commands, and trunk/head verification rules.pstack/skills/poteto-mode/SKILL.md,pstack/skills/poteto-mode/references/bugbot-triage.md,pstack/README.md, andpstack/docs/guide/{06-verify-and-ship,07-overnight}.mdwith that forge policy.pstack/skills/typescript-best-practices/{SKILL.md,references/patterns.md}with TypeScript path scoping, boundary branding, and schema-first validation withz.infer.claude-fable-5-1-thinking-max:pstack/README.md,pstack/skills/poteto-mode/SKILL.md,pstack/skills/setup-pstack/SKILL.md, and the bug-fix, perf-issue, and hillclimb playbooks.verifier: "sol"test fixture unchanged.pstack/skills/{architect,arena,how,interrogate,reflect,setup-pstack,why}/SKILL.md, leave unrelated model lines unchanged, and bumppstack/.cursor-plugin/plugin.jsonto0.14.6.Key hunks
autopilot-full.mdlines 6-9 opens a ready PR and decision trail within about 15 minutes, before self-proof, while retaining parallel independent owners and trunk regression proof.shipping.mdlines 7-14 resolves the forge, checks stable patch IDs, lands one bottom PR at a time, defines Origin and GitHub--auto, and rejectsautoMergeRequestas stack-readiness proof.autopilot-stack.mdlines 5-12 replacesgt trackand stack submit with rebases plus forge-aware--basecreation and retargeting.opening-a-pr.mdlines 23-30 codifies ready-never-draft PRs, base-branch chains, and keeps/no-commentsin the subagent path.babysit.mdlines 9-22 uses the existing GitHub watcher or Origin's native view/check/thread commands, keeps merge authorization out of babysitting, and sends reply bodies as data.multi-phase-plan.mdlines 103-119 adds the trunk regression carve-out and requires metrics from both trunk and head with absolute budgets for head-only work.typescript-best-practices/SKILL.mdlines 1-20 andpatterns.mdlines 130-149 scope the skill to TypeScript and derive validated types from the repository's schema system.setup-pstack/SKILL.mdlines 40-56 shows Fable 5.1 in solo defaults while preserving Sol in multi-model panels.Tradeoffs
The bundled
watch-primplementation remains GitHub-specific. Origin babysitting uses publicorigin pr view,origin pr checks --watch, andorigin pr threadcommands instead of adding the private Origin TypeScript watcher surface.The configured GitHub App could not resolve
anysphere/everysphere; both repository and requested raw-content calls returned 404. The supplied September 1 audit was therefore the available source checklist for this port.Blast Radius
This changes pstack agent instructions, default model routing, and plugin metadata. It does not change application runtime code. The model change affects solo bug-fix, performance, hillclimb, prose, and judgment defaults; multi-model Sol diversity remains intact.
Verification
check-plan.mjs: 1 PR section, 0 problems.pstack/: no legacy Fable 5 slug or display reference remains; nogpt-5.5reference exists; all 14 remaining textsoltokens are 13 panel model seats plus one non-model test fixture.gt submit,gt track,gt restack,gt sync, Graphite stack, or Graphite merge-when-ready path remains.all sixtypo: zero matches.git diff --check origin/main...HEADpassed, and the branch is based on currentorigin/main.