Skip to content

Adapt Cursor 0.15.35 Statechart and workflow updates - #176

Merged
arjitj2 merged 2 commits into
mainfrom
arjit/cursor-ab1f702
Oct 27, 2026
Merged

arjitj2 merged 2 commits into
mainfrom
arjit/cursor-ab1f702

Conversation

@arjitj2

@arjitj2 arjitj2 commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Closes #168. Related: #141, #175. Monitor: #1.

What changed

Adopt Cursor 0.15.35 through ab1f702ce8e8b6557edb56b09f52cde8bfb83f17 as compatible Open Pstack 1.17.7. Add Statechart and manual Ketchup Video. Fix fork-aware PR discovery, explicit-deadline polling, inline-code delimiters and GNU transcript dates. Adapt Sharpen, Interrogate, Reflect and workflow guidance while preserving saved models, review gates and linear stacks. README remains unchanged.

All 23 new source decisions are final; the previous 62 ledger objects are unchanged. Statechart uses the final typed compiler. Superseded intermediate files, incompatible selectors, top-ups, verifier waivers and unapproved README changes are excluded. Arena retains its released bytes.

Verification

Final head: aa3dacb11c3123b29231e0e12528534f1f2eed55. Package tree: b81899dbdb846b42355a329257abd1dcc0020360, 650 files.

  • Fresh final-head Codex CLI installation in a new private profile matches every file. No in-place package patch. Native tests used 80224a2; 648 files are identical, Arena matches released 9086657, and NOTICE is attribution only.
  • Parent Bun: 1,008 passed, zero failed, 5,002 assertions. Statechart: 367 passed, zero failures or skips, with actual pinned Java/TLC and headless Pele. Strict, static, maintenance 27, hook 8, docs 16, ledger and plugin checks passed. Final CI passed (Linux 1,003 passed, five platform skips, zero failed; Statechart 367 passed); host-tested CI passed.
  • Both native hosts generated project skills, followed by parent inspection and registration. Both ran actual baseline/fault/restored/final TLC controls and actual Python replay. Correct controls reach 3 states/15 steps; the paired open-guard fault reaches 4 states/20 steps and finds lock → open. Faulty Python exits 1; original exits 0. Claude's actual Skill calls loaded verify-door and model-origin Statechart. Preserved bytes match and owned fault copies are removed.
  • Both hosts rendered actual silent landscape videos. Parent checks confirmed source-frame holds and readable decoded subtitles: Codex 24/24/28 seconds; Claude 9/11/13 seconds. Actual GNU/BSD transcript audits and bounded fork-main regression passed.

Evidence limits

Creation and registration were supervised phases. Codex loading evidence is indirect registration/prompt/read/execution evidence, without a separate loader event. Claude completed all observed checks, then the desktop interruption stopped it before final JSON and delivery. That interruption remains recorded; no complete worker receipt is claimed. Execution-only helpers pin current paths; reusable generated skills do not copy compiler commands. Finite models and sampled code conformance do not prove arbitrary programs, invalid inputs or liveness. Deno/mise and native SVG rendering were not exercised; source tests cover headless rendering.

Codex's native video matcher failed; parent corrected its reference chroma conversion without changing the video or threshold. Claude rerendered after a measurement failure as the skill permits. Its report incorrectly said no tool was denied; the log retains a font-list error and continuation. Response-format deviations remain. Artifact proof does not establish universal policy compliance or automatic selection.

Bounded Sharpen, Help and lead-repro cases passed. Reflect showed an outside-cache destination without copying, then Claude stopped on a private-cache Glob. Postapproval copying and a full panel were not tested. Arena's Claude case was not reached; no changed Arena behavior ships. Prior failures remain preserved. No UI automation or OS-confinement claim.

Personal model/instruction hashes, Codex 1.17.6 package/source and actual Claude installation are unchanged after temporary tests. Ambient bundled app tools refreshed during the desktop update; those newer registrations were preserved. After publication, the authorized Codex upgrade installed 1.17.7. All 650 released files match; the unpinned fork source, saved models and other Codex registrations are preserved. Actual Claude Pstack remains unchanged; unrelated ambient plugin/marketplace updates were preserved.

The successful Bun run does not explain earlier Node/worker failures in #141. Missing-reader audit classification remains separate in #175. Copilot requests did not persist as requests or reviews; availability is unverified and no bot approval is claimed.

Independent exact-head Shipping returned PASS+NOTES, Claude Opus5.5/high, after the owner-approved Read/Grep/Glob-only assessment completed the remaining audit. The first NO VERDICT is preserved. The second assessment retained the first reviewer’s actual CLI checks and performed no test replay. No blocking findings remain. One Codex test-video arrow overlaps a label; the earlier no-overlap claim was too broad. Subtitles remain readable. Both raw and sanitized native logs stay private; no log attachments are published.

Delivered: merged at b654aebbacdf4f6ba24ee19e468588ee3334dc46, whose entire tree equals the reviewed candidate. Merged-checkpoint CI passed. v1.17.7 is published and the Codex rollout is verified. Issue #168 is closed. Later Cursor 0.15.36 is discovery-only in #177 and catalogue #178.

@arjitj2

arjitj2 commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

Independent review: NO VERDICT, Claude Opus/high.

Final candidate aa3dacb11c3123b29231e0e12528534f1f2eed55 passed CI. Linux Bun: 1,003 passed, five platform skips, zero failed. Statechart: 367 passed, zero failures or skips.

The independent Opus/high review returned NO VERDICT after a compound Bash inspection was denied. Its completed CLI and integrity checks remain recorded. The source and native-evidence audit is unfinished.

A Read/Grep/Glob-only assessment is prepared. It awaits approval for one additional execution under the saved provider policy. PR176 remains draft. No 1.17.7 merge, release or rollout is complete. Issue168 remains open.

@arjitj2

arjitj2 commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

Independent Shipping assessment by Claude Opus5.5/high (owner-approved read-only continuation). Final report SHA256: 4645ef24b15c63b989ede0e8866962c9edbc87f19584a07137de6d8c7099af32. Parent checked the terminal receipt, exact source and evidence hashes. The first NO VERDICT remains recorded.

Verdict: PASS+NOTES for exact head aa3dacb11c3123b29231e0e12528534f1f2eed55 (parent 9086657cb08d544f9e315c1b5074cac901331447, package tree b81899dbdb846b42355a329257abd1dcc0020360, 650 files).

This finishes the review that stopped at NO VERDICT. I used only Read, Grep and Glob, and I did no new CLI, engine, TLC, native or CI rerun. I wrote no files: no verdict file, and no plan file, because this lane has no write tool. Nothing in the source or Git was changed.

Results carried over from the first review

These come from the earlier reviewer's actual run. I didn't rerun any of them.

  • review-driver.py: all 650 hashes matched. The fork-main orderStack check exited 0 in 0.018s and returned only Make validated PR review and squash merge the default delivery workflow #42. The bad-flag check (statechart --not-a-valid-statechart-option) exited 2 and wrote no chart.mmd. Both are in .review-evidence/reviewer-drive/results.json.
  • SHA256-MANIFEST.json: all 1041 entries matched.
  • Carry check: 648 files are identical to the host-tested commit 80224a2. Arena is back to the released 9086657 bytes, and NOTICE differs only in attribution wording.
  • README is unchanged. The ledger keeps all 62 earlier entries byte-identical, adds 23, and totals 85.

What I checked myself

CI, from the raw logs

  • Run 40600870678 is success on head_sha aa3dacb.
  • Bun ran 1008 tests: 1003 pass, 5 skip, 0 fail.
  • The TLC jar checksum check printed tla2tools-1.7.4.jar: OK.
  • Statechart: 367 tests, 367 pass, 0 fail, 0 skip, 0 todo (final-ci.log:4286-4292).
  • Fork maintenance ran 27 tests, the session-start hook 8 and docs 16.

Claude verify (claude-verify.jsonl)

  • Every assistant event has model claude-opus-5-5; no other model appears.
  • The init list includes verify-door, pstack:statechart and pstack:ketchup-video.
  • The model made three Skill calls: lines 6, 47 and 231. Their results at lines 7, 48 and 232 are Launching skill … with success:true.
  • There are 4 error results:
    • an expected exit 3 from the fault conformance check;
    • an expected exit 1 from Statechart on the fault;
    • an expected exit 1 from the faulty-code replay;
    • one harmless shasum error caused by a relative path.
  • No permission denials and no result event. That matches claude-verify-interruption.json: the run was interrupted, so this is not a complete receipt.
  • The two redacted values show only <REDACTED-… placeholders. A search of all review copies found no sk-ant-, ghp_, github_pat_, xox or AKIA patterns.

Claude scratch logs 01–18

  • The hashes before (00-original-hashes.json) and after (14-final-hashes.json) match for all 11 files.
  • TLC 2.19 output:
    • Baseline, restored and final runs: 3 distinct states, 16 generated (15 steps), "No error".
    • Fault run: "Invariant SafeDoor is violated" via Lock then Open, 4 states.
  • The model-versus-code check reported a mismatch at (locked, 'open') across 40 pairs.
  • Replaying the fault against the faulty code broke SafeDoor; the original code held.
  • Cleanup removed exactly the three fault files and the fault directory.
  • run_step.py documents its pinned-path limit.

Codex verify

  • The registered skills list shows verify-door (repo scope, sha c9db481f…) and pstack:statechart from the temporary 1.17.7 codex-home.
  • The log shows the agent reading both skill files and then 17 recorded commands:
    • fault Statechart run and faulty replay: exit 1 each;
    • every other command: exit 0.
  • TLC output: baseline, restored and final 3 states; fault 4 states with Safety violated.
  • Python replay: the faulty copy reached open-and-locked, while the original stayed closed. cleanup.json shows the disposable copy is gone and the hashes are unchanged.
  • The one failed command was a read-only rg whose glob matched nothing.
  • The run ended with turn.completed.

Videos

  • I looked at all six chat-size decoded frames: Codex 768×432 and Claude 640×360. Subtitles are readable and the diagrams are connected.
  • Holds and pixel measurements:
    • Codex: 24 / 24 / 28 seconds, with the native failure retained (failure-diagnostics.json shows 0 matched frames).
    • Claude: 9 / 11 / 13 seconds, with hold error between 0.097 and 0.84 and transition frames left unmatched.
  • The font-list error is at claude-video-corrected.jsonl:64 ("Contains backslash-escaped whitespace"). It contradicts the run's own .md:32 claim that "No tool was denied".

Sharpen, Help, Reflect and lead fixtures

  • The Skill calls for pstack:interrogate and pstack:reflect are present.
  • Reflect stopped at a private-cache Glob denial (claude-prose-corrected.jsonl:75). Arena was not run.

Final install

  • install-final-candidate.py asserts that the installed hashes equal the git-archive snapshot, that there are 650 files, that only NOTICE and Arena differ from the tested manifest, and that Arena equals the released 9086657 bytes.
  • final-install.stdout shows version 1.17.7 installed into a fresh profile, and its stderr is empty.

Source review of candidate.patch

  • Fork-main fix: orderStack now skips fork heads when linking PRs into a stack, and the new tests cover that.
  • Deadline cap: the polling sleep is capped at the time left before the deadline, and when no deadline is set the normal interval is kept.
  • worktree-audit.sh detects GNU or BSD stat once and uses the matching date form.
  • The check-plan fix matches backtick runs of equal length.
  • Statechart:
    • the worker runs detached in its own process group, and a separate cleanup process kills that group and removes the staging directory;
    • output is written only to a new or empty folder;
    • first-run provisioning pins the jar's sha256;
    • the docs say the --view module runs unsandboxed.
  • The omitted manual-only flag is documented in UPSTREAM.md, and statechart was added to the model-invocable list in tests/skill-collision-repro.sh.
  • Swarm only renumbers its steps.
  • These files are untouched: provider-dispatch, setup-pstack, shipping, arena, agents and the model sheet.

Notes (none block shipping)

  1. The Codex verify run had sandbox_workspace_write.network_access=true (codex-verify.command.json:15). The prompt disclosed this as needed for local RMI. My bounded search of the log found no external fetch, but that is not proof of confinement.

  2. The Claude verify agent ran a full env (raw claude-verify.jsonl:101). Only two value names were redacted in the copy; other environment values, such as a public key and socket paths, remain. Keep the raw and copied logs private and don't attach them to the PR.

  3. In Codex frame 2, the vertical arrow runs into "23 source commits", which contradicts the parent's "no overlap" note. This only affects the test video, not the shipped package.

  4. The Claude video match thresholds differ per slide (2.44 and 1.35). The margins are wide, so the conclusion holds.

  5. In the corrected Claude video run, the skill loaded from a slash-command expansion with no Skill tool event. That makes its load evidence indirect, like Codex's.

  6. noticeOnlyAttribution: true in final-candidate.json is typed in rather than computed. The patch itself confirms NOTICE gains only one attribution paragraph.

  7. The patch deletes explanatory comments in worktree-audit.sh, store.ts, github.ts, types.ts and skill-collision-repro.sh. That is a maintainability cost, not a behavior change.

  8. These limits from the brief still stand:

    • creation was supervised, not autonomous;
    • the Claude receipt was interrupted;
    • Codex load evidence is indirect;
    • helper paths are pinned;
    • the models are finite and conformance is sampled;
    • native media checks failed and have known corrections;
    • there are response-format and stop-on-denial deviations;
    • Reflect's post-approval copy and full panel, Deno, mise and native SVG are unverified;
    • automatic selection is unproven.

    Issues Make timing-sensitive CLI tests reliable on a busy host #141 and Keep missing worktree audit evidence out of safe classifications #175 remain open, there is no Copilot or bot approval, and 1.17.7 has not been released or rolled out.

Parent acceptance: PASS+NOTES. The test-video overlap record is corrected; no source changes followed this verdict.

@arjitj2
arjitj2 marked this pull request as ready for review October 27, 2026 23:43
@arjitj2
arjitj2 merged commit b654aeb into main Oct 27, 2026
1 check passed
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.

Assess Cursor Pstack 0.15.35 after 0.15.28

1 participant