Skip to content

port pstack 0.15.36 - #45

Merged
caelaxie merged 1 commit into
mainfrom
cursor/port-pstack-0-15-36-32a7
Oct 28, 2026
Merged

caelaxie merged 1 commit into
mainfrom
cursor/port-pstack-0-15-36-32a7

Conversation

@caelaxie

Copy link
Copy Markdown
Contributor

Ports upstream pstack/ from e73df47 (0.15.32) through c742dd6 (0.15.36). git log e73df47..c742dd6 -- pstack/ on cursor/plugins is these seven commits and nothing else.

This repo does not ship .cursor-plugin/plugin.json. Version pins land on plugin.json, .factory-plugin/plugin.json, and the README header. marketplace.json does not pin a version.

Upstream PRs

  • #977 34b1b7c feat(pstack): port the statechart compiler. Ported. skills/statechart/ matches upstream at c742dd6, except scripts/package.json names the package @droid-skill/statechart, the same rename this repo already uses for @droid-skill/poteto-mode-tools.
  • #978 7c7bde7 chore(pstack): bump to 0.15.33. Ported as the version pin, then later bumps move the same fields to 0.15.36.
  • #982 740d2c0 fix(pstack): keep qualified action names in property traces. Ported inside the statechart compiler.
  • #983 164ced1 chore(pstack): bump to 0.15.34. Ported as the version pin.
  • #981 519d36a test(pstack): wait for the reap in the statechart SIGKILL view test. Ported inside skills/statechart/scripts/test/cli.test.ts.
  • #986 ab1f702 feat(pstack): port recent skill updates. Ported onto the existing Droid skills. New upstream lines are otherwise unchanged.
  • #1043 c742dd6 feat(pstack): make Orchestrate agentic and delete the orch scripts. Ported. skills/poteto-mode/scripts/orch/ is deleted. skills/poteto-mode/playbooks/orchestrate.md is the new playbook. The test script no longer runs orch.

Droid deviations in this range

  • Arena, setup, and the model config keep the pstack-models section of ~/.factory/AGENTS.md and the seat droids. Task has no per-spawn model field, so a rejected subagent_type drops or moves to the next seat instead of trying another slug. An auto or inherit-parent judge never runs. Cross-judge auto no longer spawns explorer.
  • Interrogate follows the new arena flow. Adversaries spawn on the writable seat that entry names (poteto-judgment, poteto-agent, or worker), because a single generic subagent type cannot carry a model here. The deleted interrogate reference files are deleted.
  • Orchestrate keeps state in the current agent's store. Workers spawn with run_in_background: true in their own git worktree. A follow-up that needs a worker's checkout resumes that worker. A verifier uses a different seat. Control skills stay the bundled control-ui and control-cli skills.
  • Autopilot-full, multi-phase plan, autonomous run, babysit, and opening-a-pr take the upstream sentences and keep the existing Droid wording: AskUser, session rather than VM, skills/ paths, automated reviewer, and bundled deslop.
  • README header pin is 0.15.36.

Checks

node scripts/validate-plugin.mjs: OK (61 skills, 5 droids).

bun run typecheck and bun run test in skills/poteto-mode/scripts: 61 pass, 0 fail.

npm test in skills/statechart/scripts with TLA2TOOLS set to tla2tools.jar 1.7.4: 367 pass, 0 fail, 0 skipped. The SIGKILL view test is included.

Open in Web Open in Cursor 

Ports upstream pstack/ from e73df47 (0.15.32) through c742dd6 (0.15.36): the statechart compiler, qualified action names, the SIGKILL view test, the skill updates, and the agentic Orchestrate playbook with the orch scripts removed.

Co-authored-by: Kaitian Xie <[email protected]>

@caelaxie caelaxie left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

verdict: changes requested (comment review, since author and reviewer share an account).

checked on head 6927ae9:

  • versions: plugin.json and .factory-plugin/plugin.json both at 0.15.36, matching upstream c742dd6. ok.
  • layout and target: no .cursor/, .cursor-plugin, or Cursor paths added. ok.
  • embedded skills: deslop, control-cli, control-ui untouched; no cursor-team-kit mention added anywhere in the 464 files. ok.
  • ci: Validate plugin green.
  • linkage: no issue, none needed.

blocking:

  1. harness proof is missing. the body only shows validate-plugin.mjs and the unit tests; droid itself never ran. this touches plugin content (61 skills, a new statechart compiler, deleted orch scripts), so add, on the exact head sha: droid plugin marketplace add for this repo, droid plugin install pstack@droid-pstack, and the plugin list, plus the installed copy showing skills/statechart/ present, skills/poteto-mode/scripts/orch/ gone, and deslop/control-cli/control-ui loaded. if a live model turn is blocked by cli auth, install + list + the installed copy is enough for this range.

once proof lands i'll do a full verbatim pass of the ported text against upstream c742dd6, focusing on the listed droid deviations (arena/setup seat droids, interrogate seats, orchestrate state and worktrees).

@cursor

cursor Bot commented Oct 28, 2026

Copy link
Copy Markdown

Harness proof for head 6927ae935ceaf869c6cc74d5670dec30c3e41c03. Droid CLI 0.251.0 (linux/x64). Checksum b878737e849b1d484a4894421b8f0345ad7257ab529de32aafded3e1ba200929 matched droid.sha256. No FACTORY_API_KEY. CI is still pinned to 0.248.0. This run did not change that pin.

Droid 0.251.0 marketplace add works

$ droid --version
0.251.0

$ droid plugin marketplace add https://github.com/pstack-ports/droid-pstack#cursor/port-pstack-0-15-36-32a7
Successfully added marketplace: droid-pstack@cursor-port-pstack-0-15-36-32a7

Exit 0. The # ref is rewritten (/ becomes -).

Install and list

$ droid plugin install pstack@droid-pstack --scope user
Error: Marketplace "droid-pstack" not found. Run /marketplace add first.

$ droid plugin install pstack@droid-pstack@cursor-port-pstack-0-15-36-32a7 --scope user
Successfully installed pstack@droid-pstack@cursor-port-pstack-0-15-36-32a7 (6927ae9)

$ droid plugin list
PLUGIN                                            STATUS   SOURCE  VERSION
pstack@droid-pstack@cursor-port-pstack-0-15-36-3  Enabled  user    6927ae935cea
2a7

Installed commit matches this PR head. Cached plugin.json and .factory-plugin/plugin.json are 0.15.36. skills/poteto-mode/scripts/orch/ is absent. The statechart compiler is present: skills/statechart/scripts/statechart, statechart.ts, and package.json (@droid-skill/statechart).

Install root:

/tmp/tmp.fsyivpLBtd/.factory/plugins/cache/droid-pstack@cursor-port-pstack-0-15-36-32a7-0945e63872c2/pstack-7171b73fae68/6927ae935cea

diff -rq of that tree against this commit is empty (excluding .git). Every installed skill byte-matches the commit.

droid exec

Stdout empty, exit 1, stderr verbatim for each changed skill:

Skill "statechart" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.

The same stderr, with the skill name swapped, for arena, interrogate, ketchup-video, poteto-help, poteto-mode, principle-explain-the-number, setup-pstack, and create-formal-verification-skill.

/orchestrate is a playbook, not a skill, so it does not activate:

Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.

/poteto-mode orchestrate the store migration until every package is converted activates the mode that loads the playbook:

Skill "poteto-mode" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.

Installed skill frontmatter

From the install dir above.

skills/statechart/SKILL.md

name: statechart
description: "Check a TLA+ model of a system that moves between states, such as a product flow, a protocol, or a service, and draw it as a Mermaid statechart. The report gives the shortest path to each state that breaks a rule. Use for /statechart, or to show a bug as a path through states."
disable-model-invocation: true

skills/interrogate/SKILL.md

name: interrogate
description: "Use for \"interrogate\", \"adversarial review\", \"multi-model review\", \"challenge this\", \"stress test this code\", \"find blind spots\", or \"tear this apart\". Adversaries try to break a change or design, and only findings proven by a run survive."
disable-model-invocation: true

skills/ketchup-video/SKILL.md

name: ketchup-video
description: "Catch the user up like /ketchup, with a short subtitled video of slides for what happened and the waiting calls as text under it. Use for /ketchup-video."
disable-model-invocation: true

skills/principle-explain-the-number/SKILL.md

name: principle-explain-the-number
description: "Apply before you measure, and before you trust, report, or act on a number you measured: a speedup, a regression, a throughput, a latency, or an eval result. Find what limits it, and rule out that it measured something other than the work you think."
disable-model-invocation: true

skills/arena/SKILL.md, skills/poteto-help/SKILL.md, skills/poteto-mode/SKILL.md (icon: crown, color: yellow), skills/setup-pstack/SKILL.md, and skills/create-formal-verification-skill/SKILL.md are the installed copies of those skills. Their sha256 matches the commit files. poteto-mode still names Autopilot-stack as Autopilot-full without the merge.

Installed skills/poteto-mode/playbooks/orchestrate.md (the #1043 playbook, orch scripts gone):

### Orchestrate

**You run the program, never the code. Decide which agent does each piece of work, then check what each one produces.** For a standing project handed to one coordinator chat: multi-day, many stacked PRs, dozens to hundreds of subagents, few human turns. One task driven to a predicate is Autonomous run. One ambitious run that needs a bespoke workflow is figure-it-out. Work that one agent could finish inside the session's budget is not a program.

Run it with your own tools. Spawn workers with `Task`. Keep the program's state in the current agent's store (path in the system prompt). Watch each PR with PR and CI event subscriptions when your harness has them. Call no scripts, run no polling loops, and never relay messages or status between agents.

Statechart compiler

Ran the installed compiler on the Counter corpus spec with tla2tools.jar 1.7.4:

$ skills/statechart/scripts/statechart Counter.tla --config Counter.cfg --view view.mjs --out out
# Counter

TLC reached 4 states and 3 steps. The chart draws 2 states and 1 arrows.
The chart does not draw 2 steps that stay in one chart state.

## Rules that hold
Low, StaysSmall
TLC checked Low only in the initial states, because it has no [], <>, or ~>. List it as an INVARIANT to check every state.

Wrote .../out

Exit 0. chart.mmd:

stateDiagram-v2
  s0: Low
  s1: High
  [*] --> s0
  s0 --> s1: inc

npm test in skills/statechart/scripts with TLA2TOOLS set: 367 pass, 0 fail, 0 skipped. That includes the SIGKILL view test.

bun run typecheck and bun run test in skills/poteto-mode/scripts: 61 pass, 0 fail.

node scripts/validate-plugin.mjs: OK (61 skills, 5 droids).

@cursor

cursor Bot commented Oct 28, 2026

Copy link
Copy Markdown

Harness proof on head 6927ae935ceaf869c6cc74d5670dec30c3e41c03. Used Droid 0.251.0. Marketplace add succeeds on 0.251.0, so this comment does not fall back to 0.248.0. CI is still pinned to 0.248.0. Nothing was pushed.

$ droid --version
0.251.0

$ droid plugin marketplace add pstack-ports/droid-pstack#cursor/port-pstack-0-15-36-32a7
Successfully added marketplace: droid-pstack@cursor-port-pstack-0-15-36-32a7

$ droid plugin install pstack@droid-pstack@cursor-port-pstack-0-15-36-32a7 --scope user
Successfully installed pstack@droid-pstack@cursor-port-pstack-0-15-36-32a7 (6927ae9)

$ droid plugin list
PLUGIN                                            STATUS   SOURCE  VERSION
pstack@droid-pstack@cursor-port-pstack-0-15-36-3  Enabled  user    6927ae935cea
2a7

Installed version 6927ae935cea is this head. From the installed plugin dir:

$ pwd
/tmp/tmp.woiQzo5Qx7/.factory/plugins/cache/droid-pstack@cursor-port-pstack-0-15-36-32a7-0945e63872c2/pstack-7171b73fae68/6927ae935cea

$ ls skills/statechart
references
scripts
SKILL.md

$ ls skills/poteto-mode/scripts/orch; echo exit=$?
ls: cannot access 'skills/poteto-mode/scripts/orch': No such file or directory
exit=2

Installed skills/deslop/SKILL.md frontmatter:

---
name: deslop
description: Remove AI-generated code slop and clean up code style
---

Installed skills/control-cli/SKILL.md frontmatter:

---
name: control-cli
description: Build or adapt a local harness to drive, inspect, and profile an interactive CLI or TUI without external services. Use for CLI UX checks, startup regressions, memory leaks, hangs, prompt flows, or terminal demos.
---

Installed skills/control-ui/SKILL.md frontmatter:

---
name: control-ui
description: Build or adapt a local browser/CDP harness to drive and inspect a web, IDE, or Electron UI. Use for local UI verification, screenshots, accessibility snapshots, perf profiles, visual diffs, or reproducing UI bugs.
---
$ droid exec "/deslop clean this diff"
Skill "deslop" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.

Exit 1. No FACTORY_API_KEY.

Earlier 0.251.0 marketplace add, same binary, https form, also exit 0:

$ droid --version
0.251.0

$ droid plugin marketplace add https://github.com/pstack-ports/droid-pstack#cursor/port-pstack-0-15-36-32a7
Successfully added marketplace: droid-pstack@cursor-port-pstack-0-15-36-32a7

@caelaxie caelaxie left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

pass

  • verbatim pass on 6927ae9 vs upstream c742dd6: 412/464 files byte-identical, all 33 deletions (orch, old statechart, interrogate refs) mirrored, statechart scripts/tests identical bar the @droid-skill name, deslop/control-cli/control-ui identical to the team kit, every edit a droid adaptation main already carries, no team-kit or .cursor/ mention, versions 0.15.36.
  • harness proof #issuecomment-6458501076: droid 0.251.0 marketplace add + install + list (6927ae9) + installed copy with the new statechart and no orch; model turn blocked only by auth.

@caelaxie
caelaxie merged commit 34a1eec into main Oct 28, 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.

2 participants