Skip to content

pstack 0.15.25 → 0.15.28: what Lauren changed #4

Open

Description

@github-actions

This update makes pstack installable in Claude Code from a generated tree, with an adapter that maps Cursor names to Claude Code names. It also adds two formal verification skills, /create-formal-verification-skill and /maintain-formal-verification-skill, and trims about a third of the tokens from four skills.

New skills

  • /create-formal-verification-skill checks a property across every case in a stated scope, not only the cases someone wrote as tests. It picks a tool, shows the property fail on a broken variant of the code, and writes a project-local skill that reruns the check with one command. It runs only when called by name. #709
  • /maintain-formal-verification-skill keeps that project-local skill in line with the code after merges, refactors, and edits made without it. It ends each check as in sync, updated, bug, or blocked. It does not edit product code or weaken a property to get a pass. #716
    • The same PR changes /create-formal-verification-skill. The skill it generates now records which files and functions each check covers, and the commit where the verification last matched them.

Changes to existing skills

  • /create-formal-verification-skill now makes TLA+ the default for event-order questions in any language. When no verifier runs on the language, it says so and tests the real code with generated inputs, not a hand model of the function. #721
  • /setup-pstack has a new step 8. If the project has no formal verification skill, setup offers once to run /create-formal-verification-skill. A no moves on. #715
  • /ketchup now lists every waiting item, so each call can be decided from the reply. #692, #708
    • Only the story is capped, at 100 words. Each waiting item gets about 30 words, so the reply grows with the item count.
    • It never folds items into a count or moves them to a linked file.
    • Each item gets its own bullet with link, user effect, evidence, and risk.
    • Drawings of action items and status lists are banned. Stack, flow, and before-and-after diagrams stay.
    • #708 states outright that items are never cut to stay under a word count. It matches the internal copy of the skill.
  • /sharpen no longer says "Don't hand back a rewritten prompt." The description gives no reason beyond mirroring an internal change. #712
  • Four skills lost sections that agents follow just as well without. This is a text-only deletion. #634
    • /interrogate: parts of references/lead-judgment.md.
    • principle-type-system-discipline: five of its eight bullets. Its description and README row drop "refuse to lie to the compiler" because the bullet that backed it is gone.
    • principle-migrate-callers-then-delete-legacy-apis: the intro, three of four "Rule" bullets, and the closing paragraph.
    • /swarm: the intro, Phase A item 3, and the Phase C result-table paragraph.

Claude Code install

  • Claude Code users can now run claude plugin install pstack@cursor-plugins. #637
    • scripts/generate-pstack-harness-trees.mjs builds a committed copy at harness/pstack/claude-code. A Claude Code install copies the plugin folder and runs no build.
    • An adapter at pstack/docs/harness/claude-code.md maps Cursor tool names, subagent fields, and model slugs to Claude Code's. The generator adds a line linking to it under the title of the 21 skills that use Cursor names.
    • CI runs the generator with --check. It fails on a stale tree, a relative link that does not resolve, or a Cursor name with no adapter row. scripts/validate-plugins.mjs now checks the Claude Code marketplace entries too.
    • After any edit to pstack skills, agents, the adapter, or pstack/plugin.json, maintainers must run the generator and commit the result.
    • Cursor loads the same skills and agents as before.
    • Codex is not blocked. It reads .claude-plugin/marketplace.json when a repo has no .agents/plugins/marketplace.json, so a Codex user who adds this marketplace can install the Claude Code tree.
  • Three gaps in the Claude Code plugin are closed. #705
    • Model choices. /setup-pstack now writes ~/.claude/rules/pstack-models.md, with roles like opus high and no frontmatter. Before, it wrote nothing. The file loads into every Claude Code session, about 250 extra tokens each, and only at session start.
    • Cursor-only steps. When a step needs Automations, Bugbot, Cursor cloud agents, or a built-in PR tool, the model prints one line, Skipped in Claude Code: <step>. <reason>., and moves on. environment: "cloud" maps to a worktree. Bugbot comments on a GitHub PR are triaged as ordinary review threads.
    • Guide and README. The tree now bundles pstack/docs/guide/ and pstack/README.md, so /poteto-help reads local pages and makes no WebFetch call. The tree grows by about 2.2 MB, mostly six JPGs.

Fixes

  • Two skills had display names in frontmatter, Make Bot UI and Poteto Mode. Claude Code listed them as /pstack:Make Bot UI and /pstack:Poteto Mode, which parse as unknown commands. /make-bot-ui and /poteto-mode now use their folder names. The generator fails when a skill's name is not its folder name. #702
    • Cursor commands stay the same. Only their slash-menu label changes.
    • The two X skills under third_party/ have the same problem and are left out.
  • The branded-type example in /typescript-best-practices used return input as AgentId, which the skill's own "No as casts" row forbids. It now narrows through an isAgentId type guard, and the "Branded types" row says a brand comes from a verifying type guard, never from as. #700

Docs

  • The README and guide were brought in line with the current tree, and a new script, scripts/check-pstack-docs.mjs, finds the next drift. #704
    • Fixed claims: Cursor ships /autopilot, not /babysit. The full verifier swarm runs on the code-ready head, and later pushes get one fresh verifier unless the change is new behavior or a large diff. Custom Mode links now go to the Custom Mode section of the skills docs. Autopilot also runs a stack, not only a PR queue.
    • The script compares skills, slash commands, playbooks, agents, relative links, anchors, counts, and model names with the docs. On main it found one problem, the /babysit claim. CI does not run it yet.
    • A prose pass made sentence-level edits only and changed no claims.
  • /poteto-help and docs/guide/ now cover the skills pstack ships today. #715
    • /create-formal-verification-skill is added across the guide and help.
    • /ketchup, /sharpen, and /in-your-own-words are added to the guide.
    • The Claude Code install is added, with the commands, the pstack: prefix, and the model rule path.
    • Page 2 now lists the Opening a PR playbook, and page 6 covers the Helpers section for verification skills and the check that evidence survives cleanup.
    • Page 6 now says the bundled Babysit watcher is for GitHub. On Origin, Babysit uses the Origin CLI.
  • /maintain-formal-verification-skill gets a README row, a /poteto-help routing row, and paragraphs on guide pages 6 and 9. #716

How she did it

  • Token cuts (#634). The four skills went from 3,802 to 2,427 tokens (1,375 saved), 11,354 to 7,242 bytes, and 1,799 to 1,124 words.
  • Claude Code install (#637).
    • She measured thin pointer files against full copies with the o200k tokenizer. Pointers make the first request about 480 tokens smaller, but each load then costs 104 to 186 more tokens, so she shipped full copies.
    • She put the tree at the repo root, not under pstack/, because a pstack/ tree would add 138 files and 643,022 bytes to every Cursor install.
    • Claude Code 2.1.301 installed a copy matching the tree under diff -r and listed 54 skills and 2 agents.
    • The run used a local LiteLLM proxy to gpt-5.5 because the machine had no Anthropic API key. Earlier runs on Claude Sonnet 5.5 read the same files.
  • Three gaps (#705).
    • Paired runs of main against the PR on real Claude Code 2.1.302. Setup wrote a rules file on the PR and nothing on main. A new session then ran /how with model: "opus", effort: "high", against xhigh with no file.
    • WebFetch calls for /poteto-help went from 1 to 0.
    • All 235 relative links in the bundled guide and README resolve.
    • Six kinds of drift each made --check exit 1.
  • Skill names (#702). The Claude Agent SDK's supportedCommands() showed 2 broken names of 54 on main and 0 on the branch. Cursor's name check went from 2 warnings to 0. She chose to fix the names in the source, not in the generated tree as #696 does, so every harness reads the same name.
  • /typescript-best-practices (#700). A strict TypeScript compile of the new example has no as, no errors, and still rejects a raw string where an AgentId is expected.
  • /ketchup eval (#692). She used three fixture chats, a frozen grader, and 50 runs on two models.
    • Waiting items decidable from the reply on the batch chat went from 0.00 to 0.93 on both models.
    • Blinded judges from a third vendor ranked all six final-text replies above all five old-text replies on the two-call chat.
    • On a small chat, replies run about 20% longer.
  • /create-formal-verification-skill eval (#709). She ran it on six repos it had not seen, against an earlier draft that prescribed TLA+. Blinded judges scored out of 30.
    • On the four concurrency or distribution repos, the means were 29.0 against 26.5.
    • On cJSON and arrayvec, they were 26.0 against 22.0. The skill picked CBMC and Kani in 4 of 4 runs, while the draft picked TLA+.
    • The skill scored lower on the checks criterion for those two repos, 3.75 against 4.5.
    • The sample is small, and she says to treat a one-run gap as a lead.
  • TLA+ default and fallback (#721). A preregistered eval on a JavaScript library with no verifier found 6 of 9 old-paragraph runs proved the claim on a hand-written copy. All 9 new-paragraph runs checked the shipped code.
    • The eval tested the two changes together.
    • GPT is near a tie, and the two scoring views disagree on its direction.
    • There was no regression on a Java connection pool or a C parser.
  • /maintain-formal-verification-skill eval (#716). A preregistered 54-run offline eval with a blind judge: 3 cases, 3 arms, 3 models, 2 replicates.
    • Correctness showed no real gain. With two corrections, all three arms score 18 of 18.
    • Every /maintain-formal-verification-skill report showed a deliberate break and the check that caught it (11 of 11). Without the skill, runs did this in 5 of 10 (no coverage record) and 4 of 10 (record only).
    • Sync commits were updated in 18 of 18 runs with the record, against 4 of 18 without it.
    • Bugbot found that step 6 moved the sync commit for a blocked check. A second 18-run test of the fix gave 9 of 9 correct runs with the new text and 0 of 9 with the old.
  • Docs check (#704). The new script found one stale claim on main and none on the branch. After #715 it reports 0 problems, with 31 of 31 commands named in the guide.

Cursor diff e5136d8...d457567 · 13 PRs · summarised by claude-sonnet-5-5

Activity

  1. reopened this on Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions