release: sync Cursor pstack 0.15.0 as Open Pstack 1.4.0 - #60
Conversation
Make How explain-only and remove its unused panel role from setup, tests, and callers. Add the premise and behavior-testing principles with narrow correctness fixes in their bodies, descriptions, and index entries. Keep the upstream merge lever with the sync and correct the active reference documentation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Import the upstream density and punctuation passes with the exact logo and README mirror. Reapply the Claude Code and Codex substitutions while preserving provider dispatch and the port's shipping safeguards. Keep concise PR guidance without the 40-line cutoff, and make Reflect explicit-only. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Record the pinned upstream revision, imported changes, retired How role, and two local principle corrections. Set the port manifests to 1.4.0 and document the verified catalog of 54 shared skills and 23 principles. Restate the exclusions and preserve the installed-candidate evidence gate before release. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Too many files changed for review (103 files, 100 file limit). Bypass the limit by tagging |
|
Tick the box to add this pull request to the merge queue (same as
|
…elete The sync had added `user-invocable: false` to how, why, unslop, and typescript-best-practices, which hides the documented slash commands. Main never carried that flag on those four; UPSTREAM.md excludes every invocation-blocking flag for them. The merge lever now refuses to overwrite or delete a port-edited file on an upstream add or delete and reports it for review instead. The plan names GitHub issue #61 as the repository's canonical tracker. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Open SWE round 1, adjudicated against the code. All three findings held and are fixed in
Host gates rerun on |
The plan doc lives in this repository, so it follows AGENTS.md and names only the GitHub issue. It also records that the upstream correction proposal was dropped at execution. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Open SWE round 2: two findings confirmed resolved, one still open on the plan doc's Linear mention. Fixed in the next commit: the plan now names only GitHub issue #61, and its stale "prepare an upstream proposal" paragraph now records that the proposal was dropped at execution. The repository's own docs follow |
|
/gavel rerun |
…safe rows The Gavel panel review of PR #60 raised five defects in the lever. It now refuses to run unless HEAD is the audited port commit and every mapped path is clean, reports excluded and non-regular entries instead of crashing on them, treats an already-matching addition as a no-op, writes its three-way inputs to a temporary directory instead of sibling files, and applies the upstream executable bit. upstream-merge-probe.py reproduces each case plus the real 0.15.0 range. Against the previous script it fails all eight checks, six on behavior and two only on the summary wording; against this one all eight pass. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ry merges (#62) The Gavel panel review of #60 found the upstream merge lever could overwrite work done after the audit; it now refuses to run unless HEAD is the audited commit and mapped paths are clean, reports excluded and diverged rows instead of applying them, keeps the executable bit, uses a temporary directory for merge inputs, skips the status check when nothing is mapped, and reports git merge-file failures on binaries instead of chmodding. scripts/upstream-merge-probe.py reproduces each case plus the real 0.15.0 range. Findings about repository shapes this tree does not produce were waived on the head with their disproofs.
Closes #61. Tracks PSTACK-2.
What changed
Open Pstack 1.4.0 syncs Cursor pstack 0.15.0 (
71ed0d1), four upstream commits after the recorded 0.14.7 point. How's critique mode and thehow criticsrole are retired, and the two critic references are deleted. Two principle leaves are added,principle-attack-the-premiseandprinciple-test-behavior-not-implementation, each with a narrow local correction recorded inCHANGES.md. The rest is upstream's density and punctuation passes applied on top of the port's Claude Code and Codex adaptations, plus the exact 361,140-byte logo and the verbatim upstream README.Out of scope:
make-bot-ui, the invocation-blocking flags, the Cursor-only model defaults, the Claude manifest logo field, and upstream's new "about 40 lines" squash-body cutoff. All existing exclusions inUPSTREAM.mdstand.Plan:
docs/plans/upstream-0.15.0.md. Lever:scripts/upstream-audit.pyinventories the range (96 paths), andscripts/upstream-merge.pyapplies it mechanically (24 verbatim, 32 clean three-way merges, 32 files with 65 hand-resolved hunks, 2 deletions). A reviewer can rerun both against56bfd14and71ed0d1.Blast Radius
Every pstack skill body changes prose. The rules the port depends on (PR 44 shipping guards, Sol defaults, provider dispatch,
user-invocable: false) are covered bytests/skill-collision-repro.sh; removing one protected shipping instruction makes it fail, restoring it passes. A user with an old 16-row model sheet keeps working; thehow criticsrow has no consumer, and setup reports it as an unknown role before any write.Verification
Host gates on
dfdbd60: bun install, test, typecheck, manifest parse, static invariants, diff --check, no conflict markers, logo bytes and size, README verbatim, critic refs gone, nohow criticsrole, 54 skills / 23 principles, no Cursor-only terms in skill bodies,claude plugin validate. All pass.Live evidence:
Claude Code. Candidate
dfdbd60loaded from the worktree withclaude -p --plugin-dir plugins/pstackin a fresh session on a one-file fixture repo. The init event reports pluginpstackversion1.4.0from that path. Action: "Invoke the pstack:how skill and explain how upstream-audit.py classifies a changed path. Simple question." Observed: the session invokedSkill pstack:how, readhow/references/explainer-prompt.mdandprovider-dispatch.md, took the simple path, and started exactly onepstack:pstack-fable-maxexplainer lane. No critic lane, no critique rubric read. It returned a grounded explanation of the classification table (Overview, How It Works, Gotchas). Transcript archived locally.Codex. Same candidate skill tree exposed to a fresh
codex execsession as the fixture repo's.agents/skills(workspace-write sandbox with network). Action: same How question. Observed: Codex readhow/SKILL.md, the explainer prompt,provider-dispatch.md, andcodex-tools.md, chose the simple path, and dispatched one read-only externalclaude:fable@maxexplainer throughpstack-runner. Receipt: statuscomplete, exit code 0, provider reportedclaude-fable-5-1, model verification passed. No explorers, no critics, no parent-model substitution. Two earlier attempts underread-onlyand no-network sandboxes failed at dispatch for sandbox reasons (runner cannot write receipts; childclaudegotENOTFOUND), and in both the session refused to substitute itself, which is the contract.Retained port rules.
PSTACK_STATIC_ONLY=1 bash tests/skill-collision-repro.shpasses on the candidate. Deleting the "Stop before any rebase, force-push, retarget, arm, or merge" instruction fromshipping.mdmakes it fail with "Shipping can mutate the frontier before every merge request is confirmed off"; restoring it passes.🤖 Generated with Claude Code