Skip to content

port pstack 0.15.32 - #31

Merged
caelaxie merged 1 commit into
mainfrom
cursor/port-pstack-0-15-32-58ba
Oct 24, 2026
Merged

caelaxie merged 1 commit into
mainfrom
cursor/port-pstack-0-15-32-58ba

Conversation

@caelaxie

@caelaxie caelaxie commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Ports upstream pstack/ from 4ec7ffa (0.15.30) through e73df47 (0.15.32).

cursor-team-kit is unchanged since 4ec7ffa and still 1.2.0. No team-kit files moved.

Upstream PRs

  • #791 076f4b2 feat(pstack): bring the statechart skill up to date, with the Pele renderer. Ported. skills/statechart/ is a byte-for-byte copy of upstream pstack/skills/statechart/ at e73df47.
  • #792 642289e chore(pstack): bump to 0.15.31. Ported as the version pin. This repo does not ship .cursor-plugin/plugin.json. The bump lands on plugin.json and .factory-plugin/plugin.json, then #798 moves the same fields to 0.15.32.
  • #794 00d5dec feat(pstack): tell generated verify skills to read each model-check result with /statechart. Ported. skills/create-formal-verification-skill/SKILL.md matches upstream.
  • #797 3c0fdb4 feat(pstack): add the ketchup-video skill. Ported. New skills/ketchup-video/SKILL.md matches upstream. The README skills-table row, the recipes-guide sentence, and the poteto-help row are the upstream lines.
  • #798 b1a1298 chore(pstack): bump to 0.15.32. Ported. plugin.json and .factory-plugin/plugin.json are 0.15.32. README header pin is 0.15.32. marketplace.json does not pin a version.
  • #800 7054003 fix(pstack): route reflect edits out of the plugin cache. Ported onto the existing Droid reflect skill. The new sentence is upstream, with .cursor/skills/<skill>/ rewritten to .factory/skills/<skill>/ and ~/.cursor/skills/<skill>/ rewritten to ~/.factory/skills/<skill>/, the paths this repo already uses for project and personal skills.
  • #801 96dec8e fix(watch-pr): distinguish fork heads during stack discovery. Ported. github.ts, types.ts, and github.test.ts take the upstream change. The existing Droid reviewer check (factory-droid[bot]) stays.
  • #802 fe096ef fix(watch-pr): cap polling sleeps at the deadline. Ported. policy.ts and policy.test.ts take the upstream change. The existing Droid automation tokens stay.
  • #803 86c2448 fix(pstack): recognize matching inline code delimiters. Ported. check-plan.mjs and check-plan.test.ts match upstream.
  • #804 3c596e7 fix(orch): prefer active PR over branch history. Ported. orch/store.ts and orch/orch.test.ts match upstream.
  • #805 f83fbe6 fix(pstack): read transcript mtimes with GNU stat and date in worktree-audit. Ported onto the existing script. The GNU stat/date selection is upstream. The session directory stays ~/.factory/sessions/.
  • #806 a0b0ad9 docs(pstack): note Claude Code auto-update is off for third-party marketplaces. Skipped. The only change is a paragraph in the Claude Code install section of pstack/README.md. This repo dropped that section with the Claude Code adapter in Restore the upstream README and drop the Claude Code adapter #29, and the README no longer carries it.
  • #807 e73df47 fix(pstack): renumber swarm's Phase A and fix its dangling table reference. Ported onto the existing Droid swarm skill: Phase A is numbered 1 to 4, Phase B says "the step 3 seat", and Phase D asks for "a result table".

harness/pstack/claude-code/ copies regenerated by #791, #797, #800, and #807 are not carried. This repo does not ship that tree.

Droid deviations in this range

  • Reflect's new cache sentence uses .factory/skills/ and ~/.factory/skills/ in place of .cursor/skills/ and ~/.cursor/skills/.
  • Swarm's renumber keeps the existing Droid seat wording (step 3 seat rather than upstream's step 3 model).
  • worktree-audit.sh, watch-pr, and the docs/help rows keep the Droid paths and reviewer names already on main. The new upstream lines are otherwise unchanged.

Checks

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

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

node --test skills/statechart/scripts/test/statechart.test.mjs: 58 pass, 0 fail, 92 skipped (cannot find TLC).

Harness proof

Droid CLI 0.248.0. Head 8a66bfa2bfbb722529cc141c07c39f38e81a4e0e. No FACTORY_API_KEY.

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

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-32-58ba --scope user
Successfully installed pstack@droid-pstack@cursor-port-pstack-0-15-32-58ba (8a66bfa)

droid plugin list
Installed plugins:
Enabled:
  pstack@droid-pstack@cursor-port-pstack-0-15-32-58ba  [user]  8a66bfa

The # ref is rewritten (/ becomes -), so the install id is pstack@droid-pstack@cursor-port-pstack-0-15-32-58ba, not pstack@droid-pstack. Installed commit matches this PR head. Cached plugin.json and .factory-plugin/plugin.json are 0.15.32. The install has 61 skills, including ketchup-video, and the five droids (comment-sicko, poteto-agent, poteto-agent-readonly, poteto-judgment, poteto-judgment-readonly). No droid file changed in this range.

diff -rq of the installed tree against this commit is empty. Installed root:

/tmp/tmp.TU6OuwdoTV/.factory/plugins/cache/droid-pstack@cursor-port-pstack-0-15-32-58ba-5091070280de/pstack-7171b73fae68/8a66bfa2bfbb

Installed skills/ketchup-video/SKILL.md:

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

Installed skills/statechart/SKILL.md description:

description: "Draw how any system moves between states, such as a product flow, a protocol, or a service, as a Mermaid statechart from a TLA+ model. Each bug is a numbered path with blue borders to a state that breaks a rule. Use for /statechart, to show a bug as a path through states, or to turn an agreed chart into a TLA+ skeleton."

Installed skills/create-formal-verification-skill/SKILL.md (the #794 paragraph):

If the check is a TLA+ model, tell the next agent to read every result with the pstack [`/statechart`](../statechart/SKILL.md) skill. It shows each invariant violation the checker finds as its shortest path in plain words, and which of those violations a change fixes. When the check passes, `/statechart` draws a chart of how the system moves between states. Refer to `/statechart` by name. Its commands, options, and file paths change between releases and machines, so copy none of them into the generated skill or its scripts.

Installed skills/poteto-help/SKILL.md row:

| Catch up like `/ketchup`, in a short silent video of slides, with the waiting calls as text under it | [`/ketchup-video`](../ketchup-video/SKILL.md) |

Installed skills/reflect/SKILL.md (the #800 sentence, Droid paths):

Never edit a skill under `plugins/cache/`. Before approval, show its destination, `.factory/skills/<skill>/` or `~/.factory/skills/<skill>/`. After approval, copy the skill folder there and edit the copy. Never open a PR or push.

Installed skills/swarm/SKILL.md (the #807 renumber):

3. Pick the worker seat from the `swarm workers` line in the pstack-models section of `~/.factory/AGENTS.md`. ...
4. Give each worker its own writable output when it writes. ...
Spawn all N workers in one message with the step 3 seat and `run_in_background: true`. ...
Return one consolidated in-chat report with a result table, issue one-liners, gaps or dropouts, and the race rule when used.

droid exec on each changed skill, stdout empty, exit 1, stderr verbatim:

Skill "ketchup-video" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.
Skill "statechart" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.
Skill "create-formal-verification-skill" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.
Skill "poteto-help" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.
Skill "reflect" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.
Skill "swarm" activated
Error during droid execution: Authentication failed. Please log in using /login or set a valid FACTORY_API_KEY environment variable.
Open in Web Open in Cursor 

Bring the Droid port from upstream pstack 0.15.30 (4ec7ffa) through 0.15.32 (e73df47): statechart Pele renderer, ketchup-video, verify-skill statechart handoff, reflect cache routing, watch-pr and orch fixes, and the swarm numbering fix.

Co-authored-by: Kaitian Xie <caelaxie@users.noreply.github.com>

@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.

changes requested (posting as comment; same account as author).

missing harness proof. the checks section has validate-plugin + unit tests, but no droid run on this head. need, against 8a66bfa:

  • droid plugin marketplace add pointing at this branch/head
  • droid plugin install pstack@droid-pstack
  • plugin list showing pstack 0.15.32, plus the installed copy showing the new ketchup-video skill and the updated statechart / reflect skills

if a live model turn is auth-blocked, install + list + installed-copy inspection on the exact head is enough for these text/script changes. post it as a pr comment or in the body.

also: ci is not green yet on this head (mergeable_state unstable). wait for it to pass.

content pass (verbatim vs upstream e73df47, the .factory/skills/ rewrite in reflect, the #806 skip) happens once proof lands. no issue linkage needed unless this fixes one.

@cursor

cursor Bot commented Oct 24, 2026

Copy link
Copy Markdown

Harness proof on head 8a66bfa2bfbb722529cc141c07c39f38e81a4e0e (cursor/port-pstack-0-15-32-58ba). Droid CLI 0.248.0. No FACTORY_API_KEY.

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

$ droid plugin install pstack@droid-pstack@cursor-port-pstack-0-15-32-58ba --scope user
Successfully installed pstack@droid-pstack@cursor-port-pstack-0-15-32-58ba (8a66bfa)

$ droid plugin list
Installed plugins:
Enabled:
  pstack@droid-pstack@cursor-port-pstack-0-15-32-58ba  [user]  8a66bfa

droid plugin list prints the installed git commit (8a66bfa), not the manifest version. The copy it installed has both manifests at 0.15.32:

plugin.json version: 0.15.32
.factory-plugin/plugin.json version: 0.15.32

Install root: /tmp/tmp.pkssZuyNuD/.factory/plugins/cache/droid-pstack@cursor-port-pstack-0-15-32-58ba-5091070280de/pstack-7171b73fae68/8a66bfa2bfbb

skills/ketchup-video/SKILL.md

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

skills/statechart/SKILL.md

---
name: statechart
description: "Draw how any system moves between states, such as a product flow, a protocol, or a service, as a Mermaid statechart from a TLA+ model. Each bug is a numbered path with blue borders to a state that breaks a rule. Use for /statechart, to show a bug as a path through states, or to turn an agreed chart into a TLA+ skeleton."
disable-model-invocation: true
---

skills/reflect/SKILL.md

---
name: reflect
description: Spawn three parallel review subagents over the active transcript, surface learnings, and route each to a concrete edit on an existing skill. Use when the user says reflect.
disable-model-invocation: true
---
$ droid exec "/ketchup-video catch me up"

stdout empty, exit 1, stderr:

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

Validate plugin on this head: https://github.com/pstack-ports/droid-pstack/actions/runs/40050888742

@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: 36 of the 47 upstream files changed in 4ec7ffa..e73df47 are byte-identical at 8a66bfa, including all of statechart (Pele renderer files added, OutputFolder model deleted), ketchup-video, create-formal-verification-skill, check-plan, orch, and watch-pr types/policy.test. the other 10 files apply the same hunks as upstream line for line (docs guide, plugin.json, poteto-help, watch-pr github/github.test/policy, worktree-audit). the only differences are the droid paths in reflect (.factory/skills/), the swarm renumber on top of the existing droid seat text, and the README pin.
  • skipped: #806 adds a claude code install paragraph to a README section this repo dropped in #29. fine.
  • layout: no .cursor-plugin or claude files. skills stay under skills/.
  • versions: plugin.json and .factory-plugin/plugin.json are 0.15.32. cursor-team-kit has no changes in the range and stays at 1.2.0, same as upstream.
  • proof: the marketplace add, install and list are on 8a66bfa, and the installed files are shown. the install id carries the branch-ref suffix, which is how droid names a marketplace added from a branch. a live turn was blocked on auth, which is accepted.
  • ci: validate plugin succeeded on 8a66bfa. no issue to close. not a draft.

@caelaxie
caelaxie merged commit b5741f0 into main Oct 24, 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