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.19"
"version": "2.0.0"
}
]
}
4 changes: 4 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

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 - t3-pstack 2.0: Lauren's pstack, rewritten for T3

2.0.0 is 2.0.0-rc.19 under its final version, with no change to any skill, script, or hooks file. The 2.0 line rebuilds t3-pstack on Lauren Tan's pstack at cursor/plugins, now at `e73df47` (pstack 0.15.32), with Cursor-specific text rewritten in place for T3 on Claude Code and Codex. The release candidates rc.1 to rc.19 below record each step. From here on, each sync of Lauren's pstack ships as a patch or minor release under semantic versioning, as [`CONTRIBUTING.md`](CONTRIBUTING.md#releasing) describes, and each release gets a GitHub release with its entry as notes.

## 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.
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ Dependabot keeps the pinned action SHAs current. The vendored scripts' one runti

Plugin auto-update installs **by version number**, not by tracking `main`. A skill fix merged without a version bump is inert on every installed copy. The bump is three steps: edit the root `VERSION` file, add a `CHANGES.md` entry under a `## <version> - <title>` heading, and run `bun tools/generate.mjs` to stamp the manifests. Forgetting any of the three fails CI.

Versions follow semantic versioning, and each sync of Lauren's pstack is its own release. A patch release (2.0.1) carries fixes and reworded text, whether Lauren's or the port's. A minor release (2.1.0) adds a skill, a capability, or a harness. A major release (3.0.0) is for a change the user must act on, such as rerunning the installer or editing the model sheet. When a release spans more than one kind, the largest wins. The `CHANGES.md` entry of a sync names the pstack version it moves to. Each release gets a `v<version>` tag and a GitHub release whose notes are its `CHANGES.md` entry.

## Commit and PR style

- Explain what changed and why. The diff already shows how.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ npx -y github:chhoumann/t3-pstack update
npx -y github:chhoumann/t3-pstack doctor
```

`npx -y github:chhoumann/t3-pstack` runs the installer from the latest commit on `main`. That is the rolling channel, the same one each home's marketplace auto-updates from. To run one release's installer, name its tag, as in `npx -y github:chhoumann/t3-pstack#v2.0.0-rc.19 doctor`.
`npx -y github:chhoumann/t3-pstack` runs the installer from the latest commit on `main`. That is the rolling channel, the same one each home's marketplace auto-updates from. To run one release's installer, name its tag, as in `npx -y github:chhoumann/t3-pstack#v2.0.0 doctor`.

`install` and `update` are the same command, and a second run changes nothing. With Node 20 or later, it installs or updates the `t3-pstack@t3-pstack` plugin in every Claude Code and Codex config home T3 can run: `~/.claude` and `~/.codex`, `$CLAUDE_CONFIG_DIR` and `$CODEX_HOME`, and the home of each `claudeAgent` and `codex` instance in T3's settings, disabled ones included. Name any other home with `--claude-home <dir>` or `--codex-home <dir>`. Each home's `t3-pstack` marketplace must come from `chhoumann/t3-pstack`, or from `--source <owner/repo|git URL|dir>` on the same run, and a home whose marketplace has another source is left as it is. A local directory needs a path such as `./t3-pstack`, since `owner/repo` always means GitHub. On Codex it also trusts t3-pstack's session-start hook, once its hooks file is the one this release pins. Codex runs a plugin's hook only once it is trusted, and T3's Codex sessions never ask, so without this step the hook never runs. Run `update` after each release.

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.0.0-rc.19
2.0.0
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "t3-pstack",
"private": true,
"version": "2.0.0-rc.19",
"version": "2.0.0",
"description": "The installer and development tooling for t3-pstack, Lauren Tan's pstack rewritten in place for T3 Code. The plugin itself lives in plugins/pstack.",
"author": {
"name": "Christian Bager Bach Houmann",
Expand Down
2 changes: 1 addition & 1 deletion plugins/pstack/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "t3-pstack",
"displayName": "t3-pstack (pstack for T3 Code)",
"version": "2.0.0-rc.19",
"version": "2.0.0",
"description": "pstack for T3 Code: Lauren Tan's pstack with its Cursor mechanics rewritten in place for T3, so subagents, panels, schedules, and PR watches dispatch through T3's orchestration and panels mix Claude, GPT, and Grok.",
"author": {
"name": "Christian Bager Bach Houmann",
Expand Down
2 changes: 1 addition & 1 deletion plugins/pstack/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "t3-pstack",
"version": "2.0.0-rc.19",
"version": "2.0.0",
"description": "pstack for T3 Code on a Codex host: Lauren Tan's pstack with its Cursor mechanics rewritten in place for T3, so subagents, panels, schedules, and PR watches dispatch through T3's orchestration.",
"author": {
"name": "Christian Bager Bach Houmann",
Expand Down
Loading