Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"name": "t3-pstack",
"source": "./plugins/pstack",
"description": "pstack for T3 Code: rigorous agent workflows whose panels and fan-outs run across model families through T3. Original pstack by Lauren Tan (poteto).",
"version": "2.0.0-rc.18"
"version": "2.0.0-rc.19"
}
]
}
16 changes: 16 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,22 @@

This file is the release changelog, with one `## <version> - <title>` entry per release, newest first. The Cursor-to-T3 rewrite rules live in [`tools/substitutions.json`](tools/substitutions.json), and the [sync boundary](CONTRIBUTING.md#the-sync-boundary) in `CONTRIBUTING.md` defines how a change to upstream's skill content is declared.

## 2.0.0-rc.19 - Lauren's `e73df47`: statechart charts any system, a ketchup-video skill, and reflect keeps its edits out of the plugin cache

t3-pstack moves to Lauren Tan's pstack at cursor/plugins `e73df47` for all three components. Only pstack changed upstream, and its version moves to 0.15.32. The `statechart` skill catches up with Lauren's source copy ([pstack #791](https://github.com/cursor/plugins/pull/791)). It charts how any system moves between states, such as a product flow, a protocol, or a service, for whoever must decide whether the behavior is right, where it used to chart only what an app's user sees for a PM. PNGs come from Pele and resvg, which the scripts install once with npm into `~/.cache/statechart`, in place of `npx @mermaid-js/mermaid-cli`. With no `TLA2TOOLS`, the first run installs TLC 1.7.4 and Java with mise, about 305 MB, where it used to say where to download TLC and exit 2. The bundled `OutputFolder` model is gone, `render CHART.mmd` draws an agreed chart, `--cover` trims a large overview to the shortest path to each settled state plus every bug path, and a goal the system must reach is a rule passed with `--expect-broken`. `create-formal-verification-skill` tells a generated verify skill for a TLA+ model to read each result with `/statechart`, by name only ([pstack #794](https://github.com/cursor/plugins/pull/794)). The new `ketchup-video` skill gives the `/ketchup` catch-up as a short silent video of slides, with the waiting calls as text under it, and poteto-help lists it ([pstack #797](https://github.com/cursor/plugins/pull/797)). It keeps Lauren's `disable-model-invocation`, so on Claude Code it runs when the user types `/t3-pstack:ketchup-video`. On Codex it is `$t3-pstack:ketchup-video`, and Codex ignores the flag, as it does for every skill that keeps it. One anchored insert says to embed the video as a Markdown image whose target is its absolute path, which T3's chat renders as a player. `reflect` never edits a skill under `plugins/cache/` ([pstack #800](https://github.com/cursor/plugins/pull/800)). Before approval it shows where the copy goes, and after approval it copies the skill folder there and edits the copy, and it never opens a PR or pushes. A new rule replaces Lauren's Cursor paths with each harness's. The plugin cache is `${CLAUDE_CONFIG_DIR:-~/.claude}/plugins/cache/` on Claude Code and `${CODEX_HOME:-~/.codex}/plugins/cache/` on Codex, and the copy goes to `.claude/skills/` or `${CLAUDE_CONFIG_DIR:-~/.claude}/skills/` on Claude Code and `.agents/skills/` or `~/.agents/skills/` on Codex. `codex debug prompt-input` in a throwaway home showed Codex 0.164 reading `~/.agents/skills`, `$CODEX_HOME/skills`, `.agents/skills`, and `.codex/skills`, and not `.claude/skills`. Claude Code 2.1.310's session init in a throwaway home listed skills from `~/.claude/skills`, or from `$CLAUDE_CONFIG_DIR/skills` in its place, and from `.claude/skills`, and not from `.agents/skills`. watch-pr stops taking a fork's head as a parent in stack discovery ([pstack #801](https://github.com/cursor/plugins/pull/801)) and caps each polling sleep at the time left before the deadline ([pstack #802](https://github.com/cursor/plugins/pull/802)). The port's own wait while it confirms a BLOCKED read takes the same cap, so a watcher whose deadline falls inside that wait times out on time instead of sleeping a full interval past it. check-plan strips inline code spans whose backtick runs match, so prose inside a double-backtick span no longer fails the plan check ([pstack #803](https://github.com/cursor/plugins/pull/803)). orch takes a branch's one open PR when closed or merged PRs share its branch ([pstack #804](https://github.com/cursor/plugins/pull/804)). worktree-audit picks GNU or BSD flags for `stat` and `date` ([pstack #805](https://github.com/cursor/plugins/pull/805)), which changes nothing on T3, because the port leaves its transcript scan empty. swarm's Phase A is numbered 1 to 4, Phase B points at step 3, and Phase D asks for a result table ([pstack #807](https://github.com/cursor/plugins/pull/807)). The swarm rule in `tools/substitutions.json` now anchors on "the step 3 model", and the port's copy took the new text before the sync. `bun tools/sync.mjs` merged the four watch-pr forks and `worktree-audit.sh` with no conflict, and each carries exactly upstream's changed lines beside the port's own. The `statechart` directory is byte-identical to upstream, file modes included. With TLC 1.7.4, Java 21, and Node 20 on Linux, 146 of the 150 skill script tests pass, and 4 skip on missing fonts, a PID namespace, and a mise-only case. Without TLC, as in CI, 58 pass and 92 skip. On macOS 17 TLC tests fail on the tests' own assumptions, not the scripts'. They expect a path relative to the run's folder where macOS's temp folder sits behind the `/var` symlink, or fail a rename through `LD_PRELOAD`, which macOS ignores. `render` on a bundled two-region chart wrote the PNG with Pele on macOS. The README's skill count moves to 66. [pstack #806](https://github.com/cursor/plugins/pull/806) notes in Lauren's README that Claude Code leaves auto-update off for third-party marketplaces, which the installer already turns on for each home's `t3-pstack` marketplace. #792 and #798 bump upstream's manifests, #797's README and recipes-guide rows and #806's README note are excluded paths, and the copies under `harness/pstack/claude-code/` sit outside every synced component. At `e73df47` each component's dry run reports no undeclared fork, no denylist hit, and no substitution that matches nothing. Neither hooks file changes.

| Change | 2.0.0-rc.18 | 2.0.0-rc.19 | Source |
| --- | --- | --- | --- |
| What `statechart` charts | What an app's user sees, for a PM. | How any system moves between states, for whoever decides. | pstack #791 |
| `statechart --png` | `npx @mermaid-js/mermaid-cli`. | Pele and resvg, installed once with npm. | pstack #791 |
| `statechart` with no `TLA2TOOLS` | Says where to download TLC and exits 2. | Installs TLC 1.7.4 and Java with mise. | pstack #791 |
| A generated verify skill for a TLA+ model | Has no `/statechart` step. | Reads each result with `/statechart`. | pstack #794 |
| A catch-up as a video | None. | `/ketchup-video`. | pstack #797 |
| An approved `reflect` edit to an installed plugin's skill | Lands in the plugin cache, and the next update drops it. | Lands in a copy in the project's or the user's skills directory. | pstack #800 |
| watch-pr stack discovery beside a fork PR whose head name matches a base | Can take the fork as a parent. | Never takes a fork head as a parent. | pstack #801 |
| A watch-pr polling sleep near the deadline | Can run past it. | Stops at it. | pstack #802 |
| orch on a branch with closed or merged PRs beside one open PR | Fails with "multiple pull requests". | Uses the open PR. | pstack #804 |

## 2.0.0-rc.18 - Lauren's `4ec7ffa`: statechart stops on inputs it used to chart wrong without saying so

t3-pstack moves to Lauren Tan's pstack at cursor/plugins `4ec7ffa` for all three components. Only pstack changed upstream, only in the `statechart` skill, and its version stays at 0.15.30 ([pstack #776](https://github.com/cursor/plugins/pull/776) and [pstack #779](https://github.com/cursor/plugins/pull/779)). Before this, a run could draw a wrong chart or exit with the wrong code and not say so. The label map now stops on a variable or field that the `--fixed` or `--against` model lacks, where it used to give it the current model's start value. New `--config`, `--fixed-config`, and `--against-config` flags name each model's config. The agreed spec is never checked with the code model's config, and a missing config stops the run and lists the configs beside the spec. A rule the agreed config does not check reads "not checked" in the stories, where they used to say the agreed spec keeps it. When TLC finds a broken rule and then throws a Java exception, the run keeps the paths TLC printed, marks the rule broken, and warns that the charts can miss states. On a file system that cannot rename into the output folder (`ENOSYS`, `EXDEV`, or `EISDIR`, as on FUSE mounts), it copies the files into place. TLC checks each rule with one worker per CPU and checks a broken rule again with one worker, which gives the shortest paths. Each `PROPERTY` gets its own TLC run, `--expect-broken` accepts it, and a rule listed as both `INVARIANT` and `PROPERTY` is checked once. With `--against`, each story says whether a config beside the agreed spec expects the bug. With `--fixed` or `--against`, the run lists each condition of an action that no `\* file:line` comment ties to code. `SKILL.md` asks for those citations, says what a valid replay is, and asks the hand-off to say whether the spec already lists each bug. The test of each TLC run's temp folder accepts `Naturals.tla` anywhere under it, where TLC 1.8.0 puts it. #779 changes no behavior. It deletes script comments that repeat the code, and renames helpers so the name says what the comment did. `splitComments` becomes `splitCommentsKeepingOffsets`, `checkTlcOutput` becomes `tlcOutputWarning`, `quote` becomes `escapeMermaidQuotes`, and `luminance` becomes `wcagRelativeLuminance`, and one `PRIMES_OR_UNCHANGED` regex replaces two copies. `bun tools/sync.mjs` updated `SKILL.md`, `lib.mjs`, `statechart.mjs`, `tlc-to-chart.mjs`, and the test file cleanly, and each is byte-identical to upstream. No substitution, fork, or hook changed, and the 15 declared forks are untouched. At `7698375`, with TLC 1.7.4 on Linux and Node 20, 66 of the 67 skill tests pass and the PID-namespace test skips. With the TLC 1.8.0 prerelease, the `PROPERTY` test fails because 1.8.0 words a broken temporal property as "Temporal property X was violated.", which the scripts do not read yet, as #776 says. At `4ec7ffa` without TLC, 29 pass and 38 skip, and `from-spec` on the bundled `OutputFolder` model with TLC 1.7.4 exits 0 with all five rules holding. The README's skill count stays at 65. The copies #776 and #779 change under `harness/pstack/claude-code/` sit outside every synced component. At `4ec7ffa` each component's dry run reports no undeclared fork, no denylist hit, and no substitution that matches nothing. Neither hooks file changes.
Expand Down
6 changes: 3 additions & 3 deletions NOTICE-skills.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ This plugin contains MIT-licensed work from six sources. The copyright notices a

| Included work | Upstream | Copyright | License |
| --- | --- | --- | --- |
| The pstack skills, principles, scripts, and the `poteto-agent` and `comment-sicko` definitions | [cursor/plugins/pstack](https://github.com/cursor/plugins/tree/4ec7ffa173eaa70d3d9467a627baf0954645a353/pstack) | (c) 2026 Lauren Tan | [MIT](LICENSE) |
| `deslop`, `make-pr-easy-to-review`, `fix-ci`, `fix-merge-conflicts`, `get-pr-comments`, and `what-did-i-get-done` | [cursor/plugins/cursor-team-kit](https://github.com/cursor/plugins/tree/4ec7ffa173eaa70d3d9467a627baf0954645a353/cursor-team-kit) | (c) 2026 Cursor | [MIT](LICENSE-cursor-team-kit) |
| `thermos`, `thermo-nuclear-review`, `thermo-nuclear-code-quality-review`, and the `thermo-nuclear-review-subagent` and `thermo-nuclear-code-quality-review-subagent` definitions | [cursor/plugins/thermos](https://github.com/cursor/plugins/tree/4ec7ffa173eaa70d3d9467a627baf0954645a353/thermos) | (c) 2026 Cursor | [MIT](LICENSE-thermos) |
| The pstack skills, principles, scripts, and the `poteto-agent` and `comment-sicko` definitions | [cursor/plugins/pstack](https://github.com/cursor/plugins/tree/e73df471cd4bd918367e99f3dd9c51bd53ddf5f0/pstack) | (c) 2026 Lauren Tan | [MIT](LICENSE) |
| `deslop`, `make-pr-easy-to-review`, `fix-ci`, `fix-merge-conflicts`, `get-pr-comments`, and `what-did-i-get-done` | [cursor/plugins/cursor-team-kit](https://github.com/cursor/plugins/tree/e73df471cd4bd918367e99f3dd9c51bd53ddf5f0/cursor-team-kit) | (c) 2026 Cursor | [MIT](LICENSE-cursor-team-kit) |
| `thermos`, `thermo-nuclear-review`, `thermo-nuclear-code-quality-review`, and the `thermo-nuclear-review-subagent` and `thermo-nuclear-code-quality-review-subagent` definitions | [cursor/plugins/thermos](https://github.com/cursor/plugins/tree/e73df471cd4bd918367e99f3dd9c51bd53ddf5f0/thermos) | (c) 2026 Cursor | [MIT](LICENSE-thermos) |
| The session-start hook scripts, `read-sheet.sh`, and `reflect/scripts/find-transcript.mjs`, which t3-pstack modified, and four `poteto-mode` rules, the worktree and head-guard rules in the Feature, Opening a PR, and Shipping playbooks, three `watch-pr` fixes, and the ignored-file and reflog-only-commit holds in `poteto-mode/scripts/worktree-audit.sh`, which t3-pstack reworded or adapted for T3, and the plugin icon | [michael-denyer/pstack-claude](https://github.com/michael-denyer/pstack-claude) | (c) 2026 Michael Denyer | [MIT](LICENSE) |
| The plain-remove prune step in the worktree-cleanup playbook, which t3-pstack adapted | [sergchil/jutsu](https://github.com/sergchil/jutsu/commit/da9442422c72cc99442c1ce3500d2f2485234a31) | (c) 2026 Sergey Chilingaryan | [MIT](LICENSE) |
| `poteto-mode/scripts/resolve-codex-transcript` and `resolve-codex-transcript.ts`, which t3-pstack modified | [ericlitman/open-pstack](https://github.com/ericlitman/open-pstack/tree/c5c8e237c324359a3d1929037da78fe66da3d1ed/plugins/pstack/skills/poteto-mode/scripts), [PR #151](https://github.com/ericlitman/open-pstack/pull/151) | (c) 2026 Eric A. Litman and Donncha O'Toole | [MIT](LICENSE) |
Expand Down
6 changes: 3 additions & 3 deletions NOTICE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ t3-pstack is a port of [pstack](https://github.com/cursor/plugins/tree/main/psta

| Component | Upstream | Copyright | License | License file |
| --- | --- | --- | --- | --- |
| Every skill under `plugins/pstack/skills/` except those named in the next two rows, `plugins/pstack/agents/poteto-agent.md`, `plugins/pstack/agents/comment-sicko.md`, and the vendored scripts under `plugins/pstack/skills/poteto-mode/scripts/` | [cursor/plugins/pstack @ 4ec7ffa](https://github.com/cursor/plugins/tree/4ec7ffa173eaa70d3d9467a627baf0954645a353/pstack) | (c) 2026 Lauren Tan | MIT | [LICENSE](LICENSE) |
| `plugins/pstack/skills/{deslop,fix-ci,fix-merge-conflicts,get-pr-comments,make-pr-easy-to-review,what-did-i-get-done}/` | [cursor/plugins/cursor-team-kit @ 4ec7ffa](https://github.com/cursor/plugins/tree/4ec7ffa173eaa70d3d9467a627baf0954645a353/cursor-team-kit) | (c) 2026 Cursor | MIT | [LICENSE-cursor-team-kit](LICENSE-cursor-team-kit) |
| `plugins/pstack/skills/{thermos,thermo-nuclear-review,thermo-nuclear-code-quality-review}/`, `plugins/pstack/agents/thermo-nuclear-review-subagent.md`, `plugins/pstack/agents/thermo-nuclear-code-quality-review-subagent.md` | [cursor/plugins/thermos @ 4ec7ffa](https://github.com/cursor/plugins/tree/4ec7ffa173eaa70d3d9467a627baf0954645a353/thermos) | (c) 2026 Cursor | MIT | [LICENSE-thermos](LICENSE-thermos) |
| Every skill under `plugins/pstack/skills/` except those named in the next two rows, `plugins/pstack/agents/poteto-agent.md`, `plugins/pstack/agents/comment-sicko.md`, and the vendored scripts under `plugins/pstack/skills/poteto-mode/scripts/` | [cursor/plugins/pstack @ e73df47](https://github.com/cursor/plugins/tree/e73df471cd4bd918367e99f3dd9c51bd53ddf5f0/pstack) | (c) 2026 Lauren Tan | MIT | [LICENSE](LICENSE) |
| `plugins/pstack/skills/{deslop,fix-ci,fix-merge-conflicts,get-pr-comments,make-pr-easy-to-review,what-did-i-get-done}/` | [cursor/plugins/cursor-team-kit @ e73df47](https://github.com/cursor/plugins/tree/e73df471cd4bd918367e99f3dd9c51bd53ddf5f0/cursor-team-kit) | (c) 2026 Cursor | MIT | [LICENSE-cursor-team-kit](LICENSE-cursor-team-kit) |
| `plugins/pstack/skills/{thermos,thermo-nuclear-review,thermo-nuclear-code-quality-review}/`, `plugins/pstack/agents/thermo-nuclear-review-subagent.md`, `plugins/pstack/agents/thermo-nuclear-code-quality-review-subagent.md` | [cursor/plugins/thermos @ e73df47](https://github.com/cursor/plugins/tree/e73df471cd4bd918367e99f3dd9c51bd53ddf5f0/thermos) | (c) 2026 Cursor | MIT | [LICENSE-thermos](LICENSE-thermos) |
| `tools/sync.mjs`, `tools/generate.mjs`, `tools/validate-skills.mjs`, `tools/plugin.mjs`, `plugins/pstack/skills/reflect/scripts/find-transcript.mjs`, `plugins/pstack/hooks/session-start.sh`, `plugins/pstack/hooks/session-start.ps1`, `plugins/pstack/skills/setup-pstack/scripts/read-sheet.sh`, and the tests that cover them, each modified by t3-pstack | [michael-denyer/pstack-claude](https://github.com/michael-denyer/pstack-claude), as merged into t3-pstack through 1.0.14 | (c) 2026 Michael Denyer | MIT | [LICENSE](LICENSE) |
| Four rules in `plugins/pstack/skills/poteto-mode/SKILL.md` (load a platform's skill before deploying, stop an abandoned agent and confirm it stopped, keep a review gate closed with no independent reviewer, the `todo.md` fallback), the per-delegate worktree rule in `playbooks/feature.md`, the stop-live-agents rule in `playbooks/opening-a-pr.md`, the `--match-head-commit` guard in `playbooks/shipping.md`, and the review-gate, stale-check, and no-checks fixes in `plugins/pstack/skills/poteto-mode/scripts/watch-pr/` with their tests in `verdicts.test.ts`, each reworded or adapted for T3 by t3-pstack | [michael-denyer/pstack-claude](https://github.com/michael-denyer/pstack-claude), pull requests [#95](https://github.com/michael-denyer/pstack-claude/pull/95), [#97](https://github.com/michael-denyer/pstack-claude/pull/97), and [#153](https://github.com/michael-denyer/pstack-claude/pull/153) for watch-pr | (c) 2026 Michael Denyer | MIT | [LICENSE](LICENSE) |
| The ignored-file and reflog-only-commit holds in `plugins/pstack/skills/poteto-mode/scripts/worktree-audit.sh`, ported from JavaScript to bash, and their wording in `playbooks/worktree-cleanup.md`, with the test cases in `tests/worktree-audit.test.mjs`; the plugin icon with its C2PA manifest removed (`plugins/pstack/.claude-plugin/icon.png`, `plugins/pstack/assets/pstack-icon.png`) and `tests/image-metadata.test.mjs` | [michael-denyer/pstack-claude](https://github.com/michael-denyer/pstack-claude), pull requests [#277](https://github.com/michael-denyer/pstack-claude/pull/277) and [#271](https://github.com/michael-denyer/pstack-claude/pull/271) | (c) 2026 Michael Denyer | MIT | [LICENSE](LICENSE) |
Expand Down
Loading
Loading