Skip to content

feat(pstack): sync Cursor pstack 0.15.29 as Open Pstack 1.16.0 (#234) - #240

Merged
mergify[bot] merged 12 commits into
mainfrom
feat/234-sync-pstack-0.15.29
Oct 21, 2026
Merged

mergify[bot] merged 12 commits into
mainfrom
feat/234-sync-pstack-0.15.29

Conversation

@ericlitman

@ericlitman ericlitman commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Summary

Syncs Open Pstack to Cursor pstack 0.15.29 (88d4751) from 0.15.25, and releases it as 1.16.0. The same PR stops setup reruns from asking questions they can answer from the sheet (#46), and fixes /recall in worktree sessions (#235).

upstream 0.15.26..0.15.29 (16 commits)
  adopt    /create-formal-verification-skill, /maintain-formal-verification-skill,
           /ketchup fixes, /sharpen rewrite-only, typescript-best-practices brand guard
  adapt    create-formal-verification-skill: drop disable-model-invocation (setup routes to it)
           setup: restore the verification-skill offer as step 10, add the formal offer as step 11
           poteto-help: keep the port's install lines and harness paragraph
  exclude  upstream's own Claude Code install (adapter, generated tree, marketplace entry),
           the docs-vs-tree check, manifests and guide
port
  setup-pstack   qualifying rerun keeps roles and efforts, writes without confirmation (#46)
  recall, automate-me, session-pickup   encode "/" and "." as "-" (#235)
  verifier       registers both new skills; recipes and tests unchanged from main
release 1.16.0   also carries Haiku 5.5 lanes (#238) and foreground waits on Claude Code (#239)

Closes #234. Closes #46. Closes #235.

Evidence

Merge Danger

Door: two-way

Blast Radius: setup

Setup reruns change behaviour: a qualifying rerun stops asking and writes when every probe passes. A first run, an invalid sheet, a kept-predecessor proposal or a named change still asks, and a failed probe still stops without writing.

Acceptance criteria

From #234:

  • "The PR merges with live-gate on its exact head." Pending.
  • "UPSTREAM.md records 88d4751 and pstack 0.15.29." Done: the sync-point table and the 1.16.0 row.
  • "The release is published with python3 scripts/release.py publish." After merge.

From #46:

  • "On a rerun where the sheet loads, passes step 3, keeps its setting line, and the caller names no change, setup prints the kept roles and efforts, still probes, writes without asking when every probe passes, and prints the kept table." Done in setup-pstack/SKILL.md, with edits at the step 2, 4 and 7 questions and the confirmation clauses in steps 7 and 8. The six live sessions read on heads 3 to 5 show it (Evidence, above).
  • "A failed probe stops without writing." Unchanged (setup-pstack/SKILL.md, step 5).

From #235:

  • The three files encode each / and each . as -. Verified live by claude:skill-invocation:recall.

Gate results

On dc9d1572:

Command Exit Summary
bun run test 0 505 pass, 0 fail
bun run typecheck 0 strict tsc, three projects
bun run static 0 201 pass, 0 fail
claude plugin validate plugins/pstack 0 Validation passed
bun plugins/pstack/skills/poteto-mode/scripts/runner/registry/render.ts --check 0 generated files current
python3 scripts/release_test.py 0 passed

Review rounds

  • Heads 1 to 6 (96a1ffc9 to 4ac36d85) added verifier cases for setup-pstack: on a rerun with a valid sheet and passing probes, steps 4/6/7 should take the sheet as their answers #46 and the formal offer: a quiet keep-setting rerun, accept-formal-offer, SETUP-DONE and ACCEPT-ROUTED sentinels, and a parser field for the final reply. Every Unfret round after head 2 and every live-gate failure targeted those cases.
  • Head 7 (dc9d1572): on 2026-10-21 Eric decided to drop that machinery. The verifier's recipes, notes, parser and tests are main's bytes again, and only the registry listing of the two formal skills remains.
  • Open findings carried from earlier heads on product text keep their classes: the transcript-folder collision for paths that differ only by . versus - (pre-accepted, Claude Code's own encoding), and the maintain skill's fallback sync point and uncommitted-change scope (pre-accepted and inert, upstream text).

Not verified

  • On this head, no live case runs setup as a quiet rerun without answers. Main's keep-setting supplies answers, so it passes under the old and the new behaviour. The quiet path rests on the six sessions read on heads 3 to 5, whose setup text matches this head byte for byte.
  • Setup's two accept branches, for the verification-skill offer and the formal offer.
  • No live case for /sharpen, /ketchup, typescript-best-practices or /maintain-formal-verification-skill. Their changes are upstream text, and one new skill stands in for skill loading. The generic skill case proves loading, not behaviour.
  • Whether Claude Code behaves well with both pstack@open-pstack and upstream's pstack@cursor-plugins installed. README says to install one.

🤖 Generated with Claude Code

ericlitman and others added 6 commits October 21, 2026 00:47
)

Apply scripts/upstream-merge.py from 99743e9 to 88d4751: 6 files verbatim,
3 clean merges, 3 for review. Add create-formal-verification-skill and
maintain-formal-verification-skill, the ketchup, sharpen and
typescript-best-practices changes, and the poteto-help routing and recipes.

Resolve setup-pstack by keeping the port's step 9 and adding upstream's
verification offers as steps 10 and 11. Resolve poteto-help by keeping the
port's install lines, setup sentence and harness paragraph, and appending
upstream's offers sentence. make-bot-ui stays absent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
)

Setup's new formal verification offer invokes the skill, and
disable-model-invocation blocks that route on Claude Code. Drop the flag,
guard it in the routed-skill invariant, and register both formal
verification skills with the verifier.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng (#46)

On a rerun whose sheet loads with a valid setting line, with no named
change and no inconsistency or kept-predecessor choice, setup validates,
prints the kept roles and efforts, probes, and writes without the step 2,
4 and 7 questions when every probe passes. The verification offers print
one line each. Validation, permission checks, snapshots, readback and the
smoke test still run, and a failed probe still stops without writing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…verifier (#46)

Every setup prompt now declines setup's two verification offers, and
first-run asserts that the fixture gained no project skill directory.
keep-setting now starts from a complete sheet with the full-access line
and an agreeing Codex mirror, gives no answers, and requires both files
to keep their bytes with no AskUserQuestion call. keep-predecessor still
covers missing-role completion.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
UPSTREAM.md moves the sync point to 88d4751 (pstack 0.15.29), records the
new exclusions and adaptations, adds the #46 ledger entry, and refreshes
"Incorporate a change" from this run (#106). NOTICE.md gains a 0.15.26 to
0.15.29 provenance row, CHANGES.md a 1.16.0 section, and README.md and
docs/reference.md the two formal verification skills, the new /sharpen,
the version, the cursor-plugins install note and the Claude writer lane
host requirement. Both manifests and the marketplace move to 1.16.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
recall, automate-me and the session-pickup playbook said Claude Code
encodes only each / in the workspace path. It also encodes each ., so
every .claude/worktrees/ session looked for a folder that does not
exist. Reproduced on 2026-10-21 with the installed 1.15.0 plugin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mergify

mergify Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Merge Protections

🟢 All 2 merge protections satisfied — ready to merge.

Show 2 satisfied protections

🟢 Queue ready pull requests

Automatically queue non-draft pull requests targeting main after verify, Unfret, and live-gate pass on the head and every review thread is resolved.

  • #review-threads-unresolved = 0
  • -draft
  • check-success=Unfret
  • check-success=live-gate
  • check-success=verify

🟢 🚦 Auto-queue

When all merge protections are satisfied and these conditions match, this pull request will be queued automatically.

  • -files~=^\.github/
  • base = main

@greptile-apps

greptile-apps Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileTier: plus

[Medium impact] No blocking code defect was found; merging still requires the exact-head live gate.

Summary

Releases Open Pstack 1.16.0 with the Cursor pstack 0.15.29 sync.

  • Setup keeps valid choices on a qualifying rerun without asking again.
  • Projects can add formal checks and keep them in step with changing code.
  • Worktree sessions find transcripts using the full encoded workspace path.
  • /sharpen returns a deeper rewritten prompt instead of doing the task.
  • /ketchup lists every decision waiting on the user with enough context to make it.
  • TypeScript brand examples use a type guard instead of a cast.
  • Release records and plugin manifests identify Open Pstack 1.16.0 and its 0.15.29 sync.

No actionable defect was established. Tests and live sessions were not run during this review.

ericlitman records the exact-head live gate as pending. ericlitman also leaves the setup offer-accept paths, separate live checks for sharpen, ketchup, typescript-best-practices, and maintain-formal-verification-skill, and running both pstack plugins together unverified. The README directs users to install only one.

Reviews (1) · Last reviewed commit: "fix(pstack): encode dots in Claude trans..." · Reviewed by Greptile

@unfret-eal

unfret-eal Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

✅ Accepted risk

Accepted by ericlitman: #234 (authority 48fa77b)

🔴 Critical · Transcript path normalization can cross workspace boundaries

🔴 High · Verify both quiet-rerun offer mentions

🔴 High · Exercise the ordinary offer's affirmative handoff

🔴 High · Detect intermediate Codex questions on quiet reruns

🔴 High · Exercise quiet reruns without supplying their answers

🔴 High · First-run still accepts questions despite supplied declines

🔴 High · Require the rerun's post-write smoke panel

🔴 High · Require probe evidence before accepting an automatic write

🔴 High · Exercise both affirmative setup-offer routes

🔴 High · keep-setting's only evidence of setup work is the rewrite

🔴 High · Exercise the formal offer through setup

🔴 High · No live case exercises the #46 qualifying rerun

🟡 Medium · Do not use an unconfirmed verification edit as the sync point

🟡 Medium · Include uncommitted covered-code changes

Advisories (1)
  • 🔵 Low · #46 ledger describes a keep-setting case that does not exist · UPSTREAM.md:52
    Line 52 says keep-setting gives no answers, requires the sheet and Codex mirror to keep their bytes, and requires no AskUserQuestion call. At this head keep-setting contradicts all three: - it answers 'Keep every role assignment and every family's current effort. I confirm every write.'; - its prepare omits a role, so the sheet gains a row; - it never inspects AskUserQuestion. The durable sync contract therefore records a live guard for the #46 divergence that does not exist. A later sync that regresses quiet reruns would pass keep-setting while this ledger says it is checked.
    Not blocking because: The confirmed consequence is inaccurate ledger prose about recipe inputs and assertions. The executable gate reads recipe results, not this sentence; correcting the record alone changes neither runtime behavior nor acceptance.
Details

Run: GET /unfret/run/panel:dc9d157276ff9c3fdf1e4a8d3e39e714debef8b1:Lz3XMvdPY05:igX9ROP3o1g.

@unfret review · @unfret status · @unfret help

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 6 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Offer declines are inferred only from missing files
🔴 High · Detect Codex questions on its plain-text surface
🔴 High · The live gate declines every new setup offer
🟡 Medium · A verification edit is not a safe fallback sync point
🟡 Medium · Exclude preparation writes from rerun completion evidence
Check

Comment thread plugins/pstack/skills/recall/SKILL.md
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread plugins/pstack/skills/maintain-formal-verification-skill/SKILL.md
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
…ly what it checks (#46)

keep-setting now prepares exactly the sheet a quiet rerun keeps, so a
prepared file written in the session's start millisecond satisfied
written() for a session that wrote nothing. The prepared sheet and
Codex mirror now carry a past mtime. The case publishes no-question for
Claude only, because a Codex session asks in plain text, which the
session record does not keep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 96a1ffc91fc61773b9fa3a4b6830480ed19e3648
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: PASSED — named features verified
  • Self-test: completed in both harnesses
  • Planned sessions: 21 (limit 12)
  • Wide run reason: setup behaviour changed, 8 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 96a1ffc91fc61773b9fa3a4b6830480ed19e3648
  • Evidence-set SHA-256: ed0e6d5c9990b67e565b2c5314092ab329551e7c34e39f8d14bd60c6938903a8
  • Installation (claude): CLI 2.1.304 (Claude Code), plugin 1.16.0, candidate 96a1ffc91fc61773b9fa3a4b6830480ed19e3648, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Installation (codex): CLI codex-cli 0.163.0, plugin 1.16.0, candidate 96a1ffc91fc61773b9fa3a4b6830480ed19e3648, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Observation (claude / skill-invocation:create-formal-verification-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 c60d02f41666976fb83f696a17e9e043c9e1f87c1cb8e2de85d64eb46ce548fd; artifact-set SHA-256 b38f965b937660c4b94fea834355c2f2f37366acd710006635b2eab1394e563c.
  • Observation (claude / skill-invocation:recall): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:recall: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 eed186029961496d98871b33ecdffc4a06b8e8b98967d811c51e7b70c0b1599e; artifact-set SHA-256 02ccae6146efbd22a3369a38ee109ae1828e3c7c24e602aa47cb89dd3fbde07d.
  • Observation (claude / project-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 2335102ebce040b37ff7624932c24d010091ead2ab446f84701685ec8123eb00; artifact-set SHA-256 06ae480a7050f8db71c753917ad2d348e169014e95b970a6ad84a5f0f36fb8a4.
  • Observation (claude / setup): surface claude -p stream-json with the candidate plugin-dir; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run; result passed 44 assertions; ids retained privately; 44 assertions machine-checked; transcript SHA-256 f892c16cf3d89998290398a4c186faa983be046a6c8bda05c6b877abc34acfc2; artifact-set SHA-256 9c5c437b4fb8172e332e0cd578801e7899388bef532f433a6cd4fd976946f1a2.
  • Observation (codex / skill-invocation:create-formal-verification-skill): surface codex exec --json with the run-owned candidate installation; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 1acbf25455bb346ac981af24a58e6ef53987bcfb66f2a736b319602e8c1af3ba; artifact-set SHA-256 d7947ff6fca5941d5da0405231ad32ee18e8ce6ffe4e97565890fd6a5033da6c.
  • Observation (codex / project-skill): surface codex exec --json with the run-owned candidate installation; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 ec718a289279e2d4241f8a489cfdace58cece0d8ca96b7e96b2ee2aeecc7338f; artifact-set SHA-256 99ea99fb407766ec26b940c3c1397bf7fa9fe4455b976000f70630f1f34b8108.
  • Observation (codex / setup): surface codex exec --json with the run-owned candidate installation; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run; result passed 49 assertions; ids retained privately; 49 assertions machine-checked; transcript SHA-256 2dc8eddfd5ad11d7c773e1d3a67d8ee1ab17464cc58842ffe023261f6bfbe8a7; artifact-set SHA-256 b860d49c0cec697e9b2d4ecd80f35967374e6359a18dd8a33c653d9d15dba7ba.
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 6 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Codex quiet reruns can still prompt
🔴 High · Offer declines are inferred only from missing files
🔴 High · Every setup case bypasses the affirmative offer branches
🔴 High · Decline suffix masks keep-setting's quiet-rerun offer check
🟡 Medium · Do not treat a verification edit as a confirmed sync
Check

Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
…#46)

keep-setting got the same "decline both offers" sentence as every setup
case, so its no-question check could not fail on the offers a quiet
rerun must only mention. keep-setting now gets no answers and must end
with SETUP-DONE, create no skill directory, and, in Claude, attempt no
AskUserQuestion. The parser keeps each session's final assistant text.
A new accept-formal-offer case requires setup to load
create-formal-verification-skill when the user accepts that offer.
first-run's offers-declined assertion is renamed no-skill-directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 5598b3a6b11a1f1672b2e67ee93a618476ad4baa
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: PASSED — named features verified
  • Self-test: completed in both harnesses
  • Planned sessions: 21 (limit 12)
  • Wide run reason: setup behaviour changed, 8 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 5598b3a6b11a1f1672b2e67ee93a618476ad4baa
  • Evidence-set SHA-256: 3adceb6cb67a0af2e0ac25b2171616c330b0c10d983cd708ab1c403f0b16414c
  • Installation (claude): CLI 2.1.304 (Claude Code), plugin 1.16.0, candidate 5598b3a6b11a1f1672b2e67ee93a618476ad4baa, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Installation (codex): CLI codex-cli 0.163.0, plugin 1.16.0, candidate 5598b3a6b11a1f1672b2e67ee93a618476ad4baa, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Observation (claude / skill-invocation:create-formal-verification-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 fe74b364b19f5812405734293bf320528196a4e78c72fe07039507417fade53f; artifact-set SHA-256 733936426ddfe4d5fa566bbeba1ce3c77c757150ed636a1e6d02851f7a5043f6.
  • Observation (claude / skill-invocation:recall): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:recall: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 c0ae811e4d48a27118300bbbd353348288b47ef245c8439c4c742234b4d8ffc0; artifact-set SHA-256 3d5fdc473b6bd2c5fc13030b8f79b47d39fa0d40fd7ae35e381178f2ac265acd.
  • Observation (claude / project-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 b526ae4366e80424a77ea781bc7bce2a9e9c2e2dd28f489ee372dd5662cda4b8; artifact-set SHA-256 c86fb34649a171e25f5be7d7dd566761c673e7d3a2ae91565e1b9b69d7d225ba.
  • Observation (claude / setup): surface claude -p stream-json with the candidate plugin-dir; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run; result passed 44 assertions; ids retained privately; 44 assertions machine-checked; transcript SHA-256 6cdae92766395748db341da51f75af4d886a432744dcb39c43dea0496bd4d38e; artifact-set SHA-256 5d80ee49f9570ecb28d5f4be489370cbc5a06800a3e31c779c03961b24ce7590.
  • Observation (codex / skill-invocation:create-formal-verification-skill): surface codex exec --json with the run-owned candidate installation; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 36aac5c8cc23419934a6c40cbc8cadb4f18d68ad0fe287d4890ce0d362174c13; artifact-set SHA-256 584275c416261c54ec87460f78a15ac8da24da62bd172e550db0b958e33b7475.
  • Observation (codex / project-skill): surface codex exec --json with the run-owned candidate installation; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 9108e575592a57077316c3105d6903541c9b605ffdf44e2062e5df9e72e96182; artifact-set SHA-256 0a678face2291fffbc07b87fc71b9d97bf2496ec817d40f6e214226ef053480d.
  • Observation (codex / setup): surface codex exec --json with the run-owned candidate installation; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run; result passed 48 assertions; ids retained privately; 48 assertions machine-checked; transcript SHA-256 a16111b39c3a2423a2dbd80957496e6e9b0e898e1794bd078398842169e15e5f; artifact-set SHA-256 bad4b78600d55ad5e8f4e74cd0b897436c2af9a4983153ecbf7af94a2aac88eb.
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 8 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Require setup completion before accepting formal routing
🔴 High · No live case accepts step 10's verification-skill offer
🔴 High · Codex quiet reruns can still prompt
🔴 High · First-run still accepts questions despite supplied declines
🔴 High · Require both quiet-rerun offer mentions
🟡 Medium · Do not treat a verification edit as a confirmed sync
🟡 Medium · The maintenance diff omits uncommitted code changes
Check

Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread plugins/pstack/skills/maintain-formal-verification-skill/SKILL.md
@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 8c20d39873d1a7fb4184e601511b9cace7b1369e
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: FAILED — verification did not complete; rerun required
  • Self-test: required in both harnesses
  • Planned sessions: 23 (limit 12)
  • Wide run reason: setup behaviour changed, 9 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 8c20d39873d1a7fb4184e601511b9cace7b1369e
  • Evidence-set SHA-256: 833a2198a8599bc0bd228d3fbd9ab0ab2bb00a8d524ebd0c6eb307f132ab836a
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

…s handoff (#234)

Codex follows a skill reference by reading its SKILL.md with a shell
command, so its rollout has no injected <skill> block for the formal
creator. accept-formal-offer now also counts a successful read of the
installed creator's SKILL.md, under this run's installation, whose
output carries the creator's frontmatter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 11 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Quiet reruns need not mention either offer
🔴 High · Require setup completion before accepting formal routing
🔴 High · No live case accepts step 10's verification-skill offer
🔴 High · Reject intermediate Codex questions on quiet reruns
🔴 High · First-run still accepts questions despite supplied declines
🔴 High · Quiet-rerun case cannot detect skipped probes or smoke test
🔴 High · Formal-offer evidence cannot tell setup's route from the prompt's
🟡 Medium · Do not treat a verification edit as a confirmed sync
🟡 Medium · Maintenance diff ignores uncommitted covered-code changes
🟡 Medium · Creator-read detection rejects normal shell spellings
Check

Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
… creator (#234)

The case's prompt named the formal verification offer, so a candidate
whose setup no longer offered it could still load
create-formal-verification-skill from the prompt and pass as routed.
The prompt now declines /create-verification-skill and accepts any
other offer, and never names the formal one. CHANGES.md now says which
setup cases decline the offers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 41c1323769c0399ad1e578810c913e4a7140483b
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: PASSED — named features verified
  • Self-test: completed in both harnesses
  • Planned sessions: 23 (limit 12)
  • Wide run reason: setup behaviour changed, 9 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 41c1323769c0399ad1e578810c913e4a7140483b
  • Evidence-set SHA-256: 62ecac012ad56a33cbf9fab22243520a3170839f0435ff0e3206e74eb791dcd4
  • Installation (claude): CLI 2.1.304 (Claude Code), plugin 1.16.0, candidate 41c1323769c0399ad1e578810c913e4a7140483b, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Installation (codex): CLI codex-cli 0.163.0, plugin 1.16.0, candidate 41c1323769c0399ad1e578810c913e4a7140483b, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Observation (claude / skill-invocation:create-formal-verification-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 f16718890c17b747174819b4d26a7b9fc4318165bc1bea5066ecbc506ef82d4d; artifact-set SHA-256 28fb4a0c9db4f2f1873145d3e6a9e900f671ac844f62eb499b68f49c8d2ac9df.
  • Observation (claude / skill-invocation:recall): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:recall: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 57148149a17f75adaf5c12afb9d10fdfe106616d6a568c8e48f4d7a71e4109e5; artifact-set SHA-256 572ccb3c8dd40b108181d00d73bae17db1d611bb36b8da095dd1d1228b123abb.
  • Observation (claude / project-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 f59d67742443f5ccecf3171c43ca8afecd4203ab61842ec9e501ad0a927d1c41; artifact-set SHA-256 25e6acf26caa42615f64e5d1c75725488f6978fa628c0f86996d554273f849da.
  • Observation (claude / setup): surface claude -p stream-json with the candidate plugin-dir; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run, accept-formal-offer; result passed 50 assertions; ids retained privately; 50 assertions machine-checked; transcript SHA-256 9006d1e5940403fa05bd6862c541f0e0f3b8166e6518ec9e2957f1c7b06cd9f7; artifact-set SHA-256 6dfdc310906b5aa906b7dc885230a790f6da9217f843c088bbcaad8ed24858d6.
  • Observation (codex / skill-invocation:create-formal-verification-skill): surface codex exec --json with the run-owned candidate installation; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 d29453d4383fdc7973fbe12c87a7cf83ed9b1f72eaef2475d2e657a19aaff01a; artifact-set SHA-256 e01f495b9cd80a216f0910eef600326223c8b17e35583c67786704c1296c3354.
  • Observation (codex / project-skill): surface codex exec --json with the run-owned candidate installation; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 75404b7c8d6aa0e90d78283f7434f96fb787c4fd49489d6e7fc37b3616ae874c; artifact-set SHA-256 411e09bc70fc36bee72c6b0a80e2c21f796c935553de804ce25c19b381fdcd1f.
  • Observation (codex / setup): surface codex exec --json with the run-owned candidate installation; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run, accept-formal-offer; result passed 54 assertions; ids retained privately; 54 assertions machine-checked; transcript SHA-256 f45d2e8a2442a0275f02b276deec5e7522b3cc28739a1610d28730489a2fd355; artifact-set SHA-256 04048903c6ed10829592cddbcc5d64b3dc34d07b00ae278f8f31deec3bb29a2c.
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 13 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Quiet-rerun offer mentions are never checked
🔴 High · Require setup completion before accepting formal routing
🔴 High · No live case accepts step 10's verification-skill offer
🔴 High · Detect intermediate Codex questions on quiet reruns
🔴 High · First-run still accepts questions despite supplied declines
🔴 High · Require probe evidence before accepting an automatic write
🔴 High · Require the quiet rerun's post-write smoke panel
🔴 High · keep-setting accepts a write with no probe or smoke evidence
🟡 Medium · Do not treat a verification edit as a confirmed sync
🟡 Medium · Include uncommitted covered-code changes
🟡 Medium · Creator-read detection rejects normal shell spellings
🟡 Medium · Numbered creator reads are incorrectly rejected
Check

Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
Comment thread .claude/skills/verify-open-pstack/features/recipes.ts Outdated
@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: FAILED — verification did not complete; rerun required
  • Self-test: required in both harnesses
  • Planned sessions: 23 (limit 12)
  • Wide run reason: setup behaviour changed, 9 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Evidence-set SHA-256: d7ce27f91a3dfedecc0c53df71d1e88e315599f31e13adfaeb34db88850c5530
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: FAILED — verification did not complete; rerun required
  • Self-test: required in both harnesses
  • Planned sessions: 23 (limit 12)
  • Wide run reason: setup behaviour changed, 9 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Evidence-set SHA-256: 62a360fec5d33e71d7cf31b20fcd72b2ebaa0d7c458dc3444f4c8b35ab5efc3e
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: FAILED — verification did not complete; rerun required
  • Self-test: required in both harnesses
  • Planned sessions: 23 (limit 12)
  • Wide run reason: setup behaviour changed, 9 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Evidence-set SHA-256: a8e8989c88a438a1dccb5fdc9070ed927851ada53c952ed12e665a671bddee2b
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: FAILED — verification did not complete; rerun required
  • Self-test: required in both harnesses
  • Planned sessions: 23 (limit 12)
  • Wide run reason: setup behaviour changed, 9 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: 8ba8645d1279a263766bcc13885646cfa3181f41
  • Evidence-set SHA-256: 9c5e2e95d8c3b98f912fc1a3682a726211a0eb655f294a286146ab671f10ec58
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

The accept-formal-offer case matched the creator's path spelling, so a
real Codex session that read it through a relative path failed as not
routed. The case now counts a successful command whose output carries
the installed creator's frontmatter name and description lines,
whatever the path spelling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 11 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Verify both quiet-rerun offer mentions
🔴 High · Require setup completion before accepting formal routing
🔴 High · No setup case accepts step 10's verification-skill offer
🔴 High · Detect intermediate Codex questions on quiet reruns
🔴 High · First-run still accepts questions despite supplied declines
🔴 High · Require the rerun's post-write smoke panel
🔴 High · Require probe evidence before accepting an automatic write
🔴 High · keep-setting's only evidence of setup work is the rewrite
🟡 Medium · A verification edit is not a confirmed sync point
🟡 Medium · Maintenance omits uncommitted covered-code changes
Check

Restore the verifier's recipes, setup notes, parser and tests to main.
This removes the accept-formal-offer case, the SETUP-DONE and
ACCEPT-ROUTED sentinels, the parser's reply field, the offer-decline
sentence and the extra keep-setting and first-run assertions. The
registry still lists the two formal verification skills.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@unfret-eal unfret-eal Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 14 blocking findings
🔴 Critical · Transcript path normalization can cross workspace boundaries
🔴 High · Verify both quiet-rerun offer mentions
🔴 High · Exercise the ordinary offer's affirmative handoff
🔴 High · Detect intermediate Codex questions on quiet reruns
🔴 High · Exercise quiet reruns without supplying their answers
🔴 High · First-run still accepts questions despite supplied declines
🔴 High · Require the rerun's post-write smoke panel
🔴 High · Require probe evidence before accepting an automatic write
🔴 High · Exercise both affirmative setup-offer routes
🔴 High · keep-setting's only evidence of setup work is the rewrite
🔴 High · Exercise the formal offer through setup
🔴 High · No live case exercises the #46 qualifying rerun
🟡 Medium · Do not use an unconfirmed verification edit as the sync point
🟡 Medium · Include uncommitted covered-code changes
Check

Comment thread plugins/pstack/skills/setup-pstack/SKILL.md
Comment thread plugins/pstack/skills/setup-pstack/SKILL.md
Comment thread plugins/pstack/skills/setup-pstack/SKILL.md
Comment thread plugins/pstack/skills/setup-pstack/SKILL.md
@ericlitman

Copy link
Copy Markdown
Owner Author

Operator waiver for head dc9d157 (#234, #46, #235).

No open blocking finding is material. Eleven of the fourteen are verifier coverage gaps. On 2026-10-21 Eric decided to drop the verifier cases that covered them ("roll it back"). Head 7 restores the verifier's recipes, notes, parser and tests to main.

  • plugins/ is byte-identical between head 1 (96a1ffc9) and this head, so earlier live sessions ran the same product text.
  • The quiet rerun (setup-pstack: on a rerun with a valid sheet and passing probes, steps 4/6/7 should take the sheet as their answers #46) ran correctly in six live keep-setting sessions on heads 3 to 5, three per harness, with no answers supplied. Each asked no question, wrote the sheet, and named both creators without invoking them.
  • Setup's formal-offer handoff passed live in both harnesses on head 4 (evidence comment 6310480706).
  • The PR body's Not verified lists every gap below.

Coverage gaps:

  • v1:17fd2080…, "Exercise quiet reruns without supplying their answers". Class: inert.
  • v1:cd15d7a9…, "No live case exercises the setup-pstack: on a rerun with a valid sheet and passing probes, steps 4/6/7 should take the sheet as their answers #46 qualifying rerun". Class: inert.
  • v1:a0a5b3b0…, "keep-setting's only evidence of setup work is the rewrite". Class: inert.
  • v1:3e8ad602…, "Require probe evidence before accepting an automatic write". Class: inert.
  • v1:5947c77a…, "Require the rerun's post-write smoke panel". Class: inert.
  • v1:a90e3b89…, "Verify both quiet-rerun offer mentions". Class: inert.
  • v1:2991f609…, "First-run still accepts questions despite supplied declines". Class: inert. A first run asks by design, and its files are written before the offers.
  • v1:8e61590b…, "Exercise the formal offer through setup". Class: inert.
  • v1:30d49caf…, "Detect intermediate Codex questions on quiet reruns". Class: fails-loudly. A regression shows the user an explicit question.
  • v1:31c54d40…, "Exercise the ordinary offer's affirmative handoff". Class: fails-loudly. A broken route answers the user's yes with nothing, visibly, and writes nothing.
  • v1:4ea1d802…, "Exercise both affirmative setup-offer routes". Class: fails-loudly, as the two above.

Product text:

  • v1:0197a37a…, "Transcript path normalization can cross workspace boundaries". Class: pre-accepted. Two workspaces whose paths differ only by . versus - share one folder because Claude Code encodes them that way. The skills read the operator's own transcripts.
  • v1:4dde2d57…, "Do not use an unconfirmed verification edit as the sync point". Class: pre-accepted. Upstream maintain-formal-verification-skill text, taken verbatim, and that skill runs only when typed.
  • v1:ed071c22…, "Include uncommitted covered-code changes". Class: inert. Same upstream text and scope.

No consequence is security, secret exposure, data loss, or a gate or waiver that publishes without its run. The advisory v1:4673b287… (UPSTREAM.md still says keep-setting gives no answers) stays advisory and is fixed in a follow-up prose PR.

@ericlitman

Copy link
Copy Markdown
Owner Author

Live evidence: Open Pstack

  • Candidate SHA: dc9d157276ff9c3fdf1e4a8d3e39e714debef8b1
  • Base SHA: a62bc993f13fe7e7ce3fb472b36b218ce64ce90f
  • Result: PASSED — named features verified
  • Self-test: completed in both harnesses
  • Planned sessions: 21 (limit 12)
  • Wide run reason: setup behaviour changed, main's 8 cases per harness; plus one new skill per harness, recall in Claude, and the self-test
  • Publisher revision: dc9d157276ff9c3fdf1e4a8d3e39e714debef8b1
  • Evidence-set SHA-256: 97737dd293286c7cc7df495afc69d2480d7f4e5f4cae138949dcd7569f999711
  • Installation (claude): CLI 2.1.304 (Claude Code), plugin 1.16.0, candidate dc9d157276ff9c3fdf1e4a8d3e39e714debef8b1, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Installation (codex): CLI codex-cli 0.163.0, plugin 1.16.0, candidate dc9d157276ff9c3fdf1e4a8d3e39e714debef8b1, tree cb0d51f6146e5aeb33e96b9e288baa8912dcd547599421b5661345e0b635409b.
  • Observation (claude / skill-invocation:create-formal-verification-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 f524c37d4f14c70a5c1e93f16149481d231b9a2fce97d395947f9cbace4f6f56; artifact-set SHA-256 5f1a3d1e688761195cd0ae12948f13b16b2e3e8f2ed1471af4dd1e1eebefdff1.
  • Observation (claude / skill-invocation:recall): surface claude -p stream-json with the candidate plugin-dir; action recipe skill-invocation:recall: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 f9c8c259e2f77eb13e5260ce6d35a5279f3ad7d4ca11d1741bcf3ac2fbfb4c10; artifact-set SHA-256 9b395d0e37d6c2118f1c748ac879d8cce58d1f1667fadfe7ca079ef2356f3296.
  • Observation (claude / project-skill): surface claude -p stream-json with the candidate plugin-dir; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 55f2b945afebe92cc2bcb5967bdf3dafcffc7f8d50f5fa8e2d2b63fa2d21bd05; artifact-set SHA-256 9754f5d6af6555731dd2518aadcb21fa37454c7a889fa1d2aae5bcac57e70372.
  • Observation (claude / setup): surface claude -p stream-json with the candidate plugin-dir; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run; result passed 41 assertions; ids retained privately; 41 assertions machine-checked; transcript SHA-256 e11513c70a51393c75977970098eaed6bdb6b6b0bcc31c3d6a825f752a82fe9d; artifact-set SHA-256 3c86520694c75ce086d498ca83f58c76c0491f968da418b1e18f65717dcc21af.
  • Observation (codex / skill-invocation:create-formal-verification-skill): surface codex exec --json with the run-owned candidate installation; action recipe skill-invocation:create-formal-verification-skill: invoke; result passed: invoke:exit-0 invoke:skill-loaded invoke:file:result.md; 3 assertions machine-checked; transcript SHA-256 616ef38e00cf3bdebb65c4eb0196f6e22df628e46aa6409c7cf45da2c8891ee1; artifact-set SHA-256 b124103a3f84415bcdc27c4cb5f0a0c8d5227df53c57d93be3e443a74690e117.
  • Observation (codex / project-skill): surface codex exec --json with the run-owned candidate installation; action recipe project-skill: doctor; result passed: doctor:exit-0 doctor:skill-loaded doctor:doctor-ran doctor:doctor-canonical-pass; 4 assertions machine-checked; transcript SHA-256 a2d15f83be709644a7d4b4d19a85b2ae61e96093acc3de8b8e948d3ca711377c; artifact-set SHA-256 cfa69108f7d44898a2467ee515a90b8035dae76124a8d4bad796e4a0bf318b2a.
  • Observation (codex / setup): surface codex exec --json with the run-owned candidate installation; action recipe setup: configure, consume, keep-predecessor, new-families, read-only-provider, writer-refusal, keep-setting, first-run; result passed 46 assertions; ids retained privately; 46 assertions machine-checked; transcript SHA-256 7f2de63d5bafd53fcaaabefadfe7ca44bf3edaba46c3a10cc0c5aa49261d20f7; artifact-set SHA-256 c6658b3072987ed3139d0a958508150837e5e8b5a22bd5443dbbaa9520376ffc.
  • Policy: every new head requires a fresh run; this verifier does not change PR state, queue, or merge.

@mergify

mergify Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • ✅ Entered queue — 2026-10-21 12:30 UTC · Rule: default · triggered by merge protections
  • ✅ Checks skipped · PR is already up-to-date
  • ✅ Merged — 2026-10-21 12:31 UTC · at 74da6519569f7a672251782c70d96c40c4ae5186 · merge

This pull request spent 16 seconds in the queue, including 2 seconds running CI.

Required conditions to merge

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

1 participant