Skip to content

feat(pstack): bring the statechart skill up to date, with the Pele renderer - #791

Merged
poteto merged 2 commits into
mainfrom
lauren/pstack-statechart-port-dc71
Oct 23, 2026
Merged

poteto merged 2 commits into
mainfrom
lauren/pstack-statechart-port-dc71

Conversation

@poteto

@poteto poteto commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Why

The pstack statechart skill is 49 changes behind the source copy that it is ported from. This port makes it match that copy again, with the same path mapping as #741, #776, and #779.

What changed

  • PNGs now come from Pele and resvg in place of the Mermaid CLI. The first --png run installs both packages into a cache folder.
  • When TLA2TOOLS is not set, the skill installs TLC 1.7.4 with mise, pinned by checksum. TLA2TOOLS and JAVA still take priority.
  • tlc-to-chart.mjs is split into modules, the help text moves into statechart-help.mjs, and the scripts/model/OutputFolder TLA+ model is removed.

Scope

  • No version change. The patch bump is a separate PR.
  • The statechart change to create-formal-verification-skill is not part of this port.

Blast Radius

Only the statechart skill and its generated Claude Code harness copy change. Agents that use the skill get the new charts and fixes on the next pstack release.

Verification

  • node --test pstack/skills/*/scripts/test/*.test.mjs on Node 20 with TLC 1.7.4: 148 pass, 0 fail, 1 skip. The skip is the test that needs a mise-installed TLC.
  • node scripts/generate-pstack-harness-trees.mjs --check and node scripts/validate-plugins.mjs pass.
Open in Web Open in Cursor 

…nderer

Port 49 changes from the source copy of the skill. PNGs come from Pele
and resvg in place of the Mermaid CLI, TLC installs with mise when
TLA2TOOLS is not set, and the OutputFolder model is removed. SKILL.md
keeps the wording from #741 for where a spec lives.

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit f0956ad. Configure here.

Comment thread pstack/skills/statechart/scripts/lib.mjs
…en the overview does

productOf now records combined self-loops, but the flat graph that the
regions proof compares against leaves them out unless --loops is set.
A region with a stay-or-leave loop on one label then gave a false
difference, and from-spec declined parallel regions.

Pass the loops setting through productOf, compareCharts, and
regionsChart. The proof chart marks "%% self-loops left out" so that
compare-charts.mjs compares it the same way.

Co-authored-by: lauren <poteto@users.noreply.github.com>
@poteto
poteto merged commit 076f4b2 into main Oct 23, 2026
2 checks passed
@poteto
poteto deleted the lauren/pstack-statechart-port-dc71 branch October 23, 2026 19:37
caelaxie added a commit to pstack-ports/devin-pstack that referenced this pull request Oct 24, 2026
<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
synced to
[`e73df47`](cursor/plugins@e73df47).
compared `4ec7ffa..e73df47` for `pstack/`. `origin/main` is that commit.
version is `0.15.32` in `plugin.json`, `.devin-plugin/plugin.json`, and
the readme marker.

ported:
-
[`076f4b2`](cursor/plugins@076f4b2)
([#791](cursor/plugins#791)) statechart skill
update and the pele renderer. scripts copied verbatim, including the
removal of the outputfolder model. `SKILL.md` keeps `/pstack:statechart`
and `triggers: [user]`.
-
[`642289e`](cursor/plugins@642289e)
([#792](cursor/plugins#792)) bump to 0.15.31,
folded into the 0.15.32 bump in `plugin.json` and
`.devin-plugin/plugin.json`.
-
[`00d5dec`](cursor/plugins@00d5dec)
([#794](cursor/plugins#794)) generated verify
skills read each model-check result with `/pstack:statechart`.
-
[`3c0fdb4`](cursor/plugins@3c0fdb4)
([#797](cursor/plugins#797)) add the
ketchup-video skill. poteto-help, the readme skill table, and guide page
10 match. slash commands keep the `/pstack:` prefix.
`disable-model-invocation: true` stays `triggers: [user]`.
-
[`b1a1298`](cursor/plugins@b1a1298)
([#798](cursor/plugins#798)) bump to 0.15.32, in
`plugin.json`, `.devin-plugin/plugin.json`, and the readme marker.
-
[`7054003`](cursor/plugins@7054003)
([#800](cursor/plugins#800)) reflect edits leave
`plugins/cache/` (devin's checkout is
`~/.local/share/devin/cli/plugins/cache`). the destination is
`.devin/skills/<skill>/` or `~/.config/devin/skills/<skill>/`. no pr and
no push.
-
[`96dec8e`](cursor/plugins@96dec8e)
([#801](cursor/plugins#801)) watch-pr
distinguishes fork heads. the pstack scripts were copied verbatim.
-
[`fe096ef`](cursor/plugins@fe096ef)
([#802](cursor/plugins#802)) watch-pr caps
polling sleeps at the deadline. scripts copied verbatim.
-
[`86c2448`](cursor/plugins@86c2448)
([#803](cursor/plugins#803)) check-plan
recognizes matching inline code delimiters. scripts copied verbatim.
-
[`3c596e7`](cursor/plugins@3c596e7)
([#804](cursor/plugins#804)) orch prefers the
active pr. the changed files are under
`pstack/skills/poteto-mode/scripts/orch/` and were copied verbatim.
-
[`f83fbe6`](cursor/plugins@f83fbe6)
([#805](cursor/plugins#805)) worktree-audit
reads transcript mtimes with gnu stat and date. kept `rg -a` and the
devin `sessions.db` directory.
-
[`e73df47`](cursor/plugins@e73df47)
([#807](cursor/plugins#807)) swarm phase a is
numbered 1 to 4, phase b points at step 3, and phase d asks for a result
table.

skipped:
-
[`a0b0ad9`](cursor/plugins@a0b0ad9)
([#806](cursor/plugins#806)) claude code
auto-update note. it sits in the claude code install section, and this
readme has no such section.
- `harness/pstack/claude-code/` copies in every commit above. this port
does not carry the generated claude code tree.
- [#792](cursor/plugins#792) and
[#798](cursor/plugins#798)
`pstack/.cursor-plugin/plugin.json`. cursor packaging. the version bump
lands in `.devin-plugin/plugin.json` instead.

harness proof (`devin plugins install`, `devin plugins list`,
`/pstack:statechart`, `/pstack:ketchup-video`, `/pstack:poteto-mode`)
will follow as a comment. the devin cli can't log in from this cloud
environment.

<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a
href="https://cursor.com/agents/bc-1991bcdf-ceba-5d68-8535-0ec4d1228e4e?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-web-light.png"><img
alt="Open in Web" width="114" height="28"
src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a
href="https://cursor.com/background-agent?bcId=bc-1991bcdf-ceba-5d68-8535-0ec4d1228e4e&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source
media="(prefers-color-scheme: light)"
srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img
alt="Open in Cursor" width="131" height="28"
src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Kaitian Xie <caelaxie@users.noreply.github.com>
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