Skip to content

2.0.0-rc.12: Lauren's 6b78e9f, setup offers a formal verification skill, with TLA+ as its default for event order - #32

Merged
chhoumann merged 4 commits into
mainfrom
sync/f9be7aa
Oct 19, 2026
Merged

chhoumann merged 4 commits into
mainfrom
sync/f9be7aa

Conversation

@chhoumann

@chhoumann chhoumann commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

t3-pstack moves to Lauren Tan's pstack at cursor/plugins 6b78e9f for all three components. Of the three, only pstack changed upstream, in two commits, and Lauren's version stays 0.15.27.

From pstack #715:

  • setup-pstack gains step 8, an offer to generate a formal verification skill, which mirrors step 7's verification offer.
  • poteto-help gains a state check for a missing formal verification skill, and its setup step 2 now names both offers. Lauren also rewrote its "pstack is built for Cursor" paragraph into two: a Claude Code install through her marketplace and adapter, then what other tools can read.
  • poteto-help/references/recipes.md gains a formal verification recipe and a /ketchup recipe.

From pstack #721:

  • create-formal-verification-skill rewrites one paragraph, "Let the question choose the tool". TLA+ becomes the default for whether events can happen in a bad order, in any language, and the sentence "For concurrent and distributed designs, TLA+ is often the most useful place to start." is gone. When no verifier runs on the language, the agent says so and tests the real code with generated inputs, not a hand model of the function. The text names no harness, and no substitution or fork touches the skill.

#715's guide pages under docs/guide/, the third_party/ plugins that #717 and #720 change, and upstream's copies under harness/pstack/claude-code/ sit outside every synced component.

This PR changes a substitution and a forked file, so it waits for your call.

The substitution

Lauren's rewrite left the poteto-help rule in tools/substitutions.json matching nothing, and her two new paragraphs tripped the denylist (Cursor, /loop, Custom Modes at lines 46 and 48). The rule's pattern now covers both paragraphs. The replacement keeps our T3 sentence as the second paragraph and makes the first say where t3-pstack runs and how it installs, worded from the README. It points at neither Lauren's cursor/plugins marketplace nor her Claude Code adapter, since t3-pstack ships no adapter and rewrites the Cursor names in place.

Old pattern:

pstack is built for Cursor. Its skills use the Agent Skills format, so other tools can read them. But most workflow skills, including /poteto-mode, /how, /why, and /teach, spawn Cursor subagents with per-role models, and Custom Modes and /loop are Cursor features, so those parts may not work there.

Old replacement:

t3-pstack is pstack rewritten for T3 Code. Its workflow skills, including /poteto-mode, /how, /why, and /teach, dispatch subagents through T3's delegate_task with per-role models, so those parts need a T3 thread.

New pattern (Lauren's two paragraphs at f9be7aa, unchanged at 6b78e9f):

pstack is built for Cursor, and it also installs in Claude Code with /plugin marketplace add cursor/plugins, then /plugin install pstack@cursor-plugins. There, each command takes a pstack: prefix, such as /pstack:poteto-mode. The Claude Code adapter maps the Cursor names, and a step that needs a Cursor-only feature, such as Bugbot or Automations, is skipped with a one-line note.

Other tools can read the skills, because they use the Agent Skills format. But most workflow skills, including /poteto-mode, /how, /why, and /teach, spawn Cursor subagents with per-role models, and Custom Modes and /loop are Cursor features, so those parts may not work there.

New replacement:

t3-pstack is pstack rewritten for T3 Code, and it installs in Claude Code and Codex with npx -y github:chhoumann/t3-pstack install.

Its workflow skills, including /poteto-mode, /how, /why, and /teach, dispatch subagents through T3's delegate_task with per-role models, so those parts need a T3 thread.

The command is the untagged rolling installer, as in the README's first block, so the rule needs no edit per release. The rationale now reads "states where the port runs and how it installs (Precedence)".

The merged setup-pstack step

setup-pstack is a declared fork (port-feature, it writes the T3 model sheet). bun tools/sync.mjs merged #715 into it cleanly, and step 8 follows our fork's steps 1 to 7:

8. Offer a formal verification skill (optional)

Check whether the project already has a formal verification skill (a project skill that runs a model checker, a proof, or another verifier against the code). If not, offer once: "want a formal verification skill, so agents can prove a key property of your code holds in every case in scope, not only the cases tests reach? I can generate one with /create-formal-verification-skill." On yes, invoke /create-formal-verification-skill (resolves wherever pstack is installed: workspace, user, or plugin). On no, move on without pushing.

It names /create-formal-verification-skill the same way our step 7 names /create-verification-skill, and both generators carry disable-model-invocation: true, so the two offers work the same way on T3. Lauren's own Claude Code copy words step 8 identically. The #721 sync left setup-pstack alone, so step 8 reads the same at 6b78e9f.

Commits

  1. Sync and substitution to f9be7aa (#715), in one commit. The rule change and the sync can't land apart: the new pattern matches nothing at the old pin, and the old pattern matches nothing at the new one. With only the rule changed, the sync reads poteto-help as an undeclared fork, because the base, 0148b78 derived through the new rule, keeps Lauren's old Cursor paragraph. The port's copy took the new replacement text first, a plain swap of the old replacement for the new one, so the three-way merge saw the same change on both sides. --bootstrap was not used. It keeps every declared fork as the port's copy, so setup-pstack would have missed step 8. The sync then updated poteto-help and recipes.md and merged setup-pstack. cursor-team-kit and thermos synced with no file changes.
  2. Release. VERSION and the manifests move to 2.0.0-rc.12. CHANGES gets the entry with its behavior-delta table. NOTICE, NOTICE-skills, and the README point at f9be7aa, and the README's pinned installer command names the new tag. The skill count stays 63.
  3. Sync to 6b78e9f (#721). bun tools/sync.mjs updated create-formal-verification-skill cleanly. The port's copy matched upstream byte for byte, and no substitution or fork touches it. The 15 declared forks were left alone, and cursor-team-kit and thermos synced with no file changes.
  4. Release update. NOTICE, NOTICE-skills, poteto-mode's copy of the notice, and the README name 6b78e9f. The CHANGES entry's heading and text name 6b78e9f, add #721, and gain a behavior-delta row for it. VERSION and the manifests already read 2.0.0-rc.12.

Checks

  • bun tools/sync.mjs <component> 6b78e9f --dry-run for pstack, cursor-team-kit, and thermos at the new pin: exit 0, with no undeclared fork, no denylist hit, no unmatched substitution, and no conflict. pstack reads 119 unchanged files and the same 15 declared forks with 547 changed lines as rc.11. tools/forks.json declares exactly those 15. setup-pstack keeps its 77 changed lines, and no other forked file differs from origin/main. cursor-team-kit reads 6 unchanged files and thermos 5.
  • bun tools/generate.mjs --check: 17 generated files current, and the hooks freeze check passes.
  • GIT_CONFIG_GLOBAL=/dev/null bun test tests/ --timeout 30000: 550 pass, 46 skip, 0 fail.
  • Scripts: bun run typecheck, bun test orch watch-pr check-plan.test.ts (119 pass), and the Prettier check all pass.
  • t3-sheet.mjs against this machine's sheet and catalog: every role line parses and dispatches.
  • markdownlint-cli2 on the changed Markdown files: 0 errors.

Not in this PR

Two lines in poteto-help come from older substitutions and read slightly off next to the new paragraph. They are left for a separate change:

  • Get set up step 1 says to install "once per harness that T3 runs", but one installer run covers every Claude Code and Codex home.
  • The Start a task section writes the Codex form as $poteto-mode, while the README and CHANGES use $t3-pstack:<name>.

Note

Low Risk
Mostly skill copy, upstream sync, and substitution rules; no runtime auth, data, or orchestration logic changes beyond optional setup prompts.

Overview
Release 2.0.0-rc.12 bumps the plugin and pins upstream cursor/plugins to f9be7aa (pstack #715).

Setup and help now surface formal verification alongside app verification: /setup-pstack adds optional step 8 to offer /create-formal-verification-skill after the existing verification offer. poteto-help checks for a missing formal verification skill (races, invariants, etc.), documents both setup offers in step 2, splits install guidance into an npx -y github:chhoumann/t3-pstack install paragraph plus the T3 delegate_task note, and adds recipes for formal verification and /ketchup.

Port tooling updates tools/substitutions.json so Lauren’s two-paragraph “built for Cursor / Claude Code install” block maps to t3-pstack’s install command and T3 thread requirements instead of Cursor marketplace text. NOTICES, README, and tools/upstream.json reflect the new SHA; remaining changes are version strings and changelog.

Reviewed by Cursor Bugbot for commit 2fa3648. Bugbot is set up for automated code reviews on this repo. Configure here.

All three components move from 0148b78 to f9be7aa. Upstream changed only
pstack (#715). setup-pstack gains step 8, which offers once to generate a
formal verification skill with /create-formal-verification-skill, worded
like step 7's verification offer. poteto-help gains a state check for a
missing formal verification skill, says setup step 2 makes both offers,
and splits its "pstack is built for Cursor" paragraph in two: a Claude
Code install through Lauren's marketplace and adapter, then what other
tools can read. recipes.md gains a formal verification recipe and a
/ketchup recipe.

The poteto-help rule in tools/substitutions.json now matches the two new
paragraphs. Its replacement keeps the T3 sentence about delegate_task as
the second paragraph and makes the first say t3-pstack installs in Claude
Code and Codex with npx -y github:chhoumann/t3-pstack install. The port's
copy took the new replacement text before the sync, so the three-way
merge saw the same change on both sides. --bootstrap was not used, since
it keeps a declared fork as the port's copy and setup-pstack would have
missed step 8.

bun tools/sync.mjs merged setup-pstack, a declared fork, cleanly and
updated poteto-help and recipes.md. The other 14 forks were left alone,
and cursor-team-kit and thermos synced with no file changes.
VERSION, the manifests, and package.json move to 2.0.0-rc.12. CHANGES.md
gets the entry with its behavior-delta table. NOTICE.md, NOTICE-skills.md,
and the README point at upstream f9be7aa, and the README's pinned
installer command names the new tag. The skill count stays 63.
All three components move from f9be7aa to 6b78e9f. Upstream changed only
pstack. create-formal-verification-skill rewrites one paragraph in "Let
the question choose the tool": TLA+ is now the default for whether events
can happen in a bad order, in any language, and the sentence "For
concurrent and distributed designs, TLA+ is often the most useful place to
start." is gone. When no verifier runs on the language, the agent says so
and tests the real code with generated inputs, not a hand model of the
function (pstack #721). #717 and #720 touch only third_party/ plugins, and
upstream's copy under harness/pstack/claude-code/ follows #721. All of
these sit outside every synced component.

bun tools/sync.mjs updated create-formal-verification-skill cleanly. The
port's copy matched upstream byte for byte, and no substitution or fork
touches the skill. The 15 declared forks were left alone, and
cursor-team-kit and thermos synced with no file changes.
rc.12 now syncs to upstream 6b78e9f instead of f9be7aa. NOTICE.md,
NOTICE-skills.md, poteto-mode's copy of the notice, and the README name
the new pin. The CHANGES.md entry's heading and text name 6b78e9f, add
#721's create-formal-verification-skill change, and gain a behavior-delta
row for it. VERSION and the manifests already read 2.0.0-rc.12, and the
skill count stays 63.
@chhoumann chhoumann changed the title 2.0.0-rc.12: Lauren's f9be7aa, setup offers a formal verification skill 2.0.0-rc.12: Lauren's 6b78e9f, setup offers a formal verification skill, with TLA+ as its default for event order Oct 19, 2026
@chhoumann
chhoumann merged commit 7aa2985 into main Oct 19, 2026
12 checks passed
@chhoumann
chhoumann deleted the sync/f9be7aa branch October 19, 2026 05:33
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.

1 participant