Skip to content

t3-pstack 2.0.0-rc.1: Lauren's pstack, rewritten in place for T3 - #16

Merged
chhoumann merged 7 commits into
mainfrom
v2/base-lauren
Oct 14, 2026
Merged

chhoumann merged 7 commits into
mainfrom
v2/base-lauren

Conversation

@chhoumann

@chhoumann chhoumann commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

t3-pstack 2.0 takes Lauren Tan's pstack directly, at cursor/plugins ce649c0 (pstack #613), for pstack, the six carried cursor-team-kit skills, and thermos. Her text ships as she wrote it. Only its Cursor mechanics are rewritten for T3, in place, by generated substitutions plus declared forks, checked by the existing tools/sync.mjs, tools/forks.json, and tools/substitutions.json. There is no separate T3 mapping file any more.

This is a draft. Do not merge until the policy-fork audit below is done.

Counts

  • Base: cursor/plugins ce649c03ac3b75b6ae80cbd15b7e2c536caedb5a for all three components (1.0.14 tracked pstack-claude at 997ffc7).
  • 172 substitutions and a denylist of 21 Cursor terms.
  • 9 declared forks, 134 changed lines: setup-pstack/SKILL.md (77, writes the T3 sheet) and 8 watch-pr hook points of the settle overlay (57).
  • Against 1.0.14: 155 files removed, 3 added (in-your-own-words, poteto-mode's worktree-audit.sh, tools/derive-t3.mjs), 147 modified.
  • 40 Michael Denyer policy forks dropped, every one pending user audit.

Commits

Each commit is one kind of change, so each can be read and reverted on its own. The intermediate commits do not pass the checks. The head does.

  1. Tooling and tests: one derivation (substitutions, then deriveT3), all pins at ce649c0, and a sync that fails when a rule matches nothing upstream.
  2. Base switch: Lauren's bytes for every carried file, unrewritten, so the diff reads as 1.0.14 against her own text. The 40 policy-forked files stay at 1.0.14 here.
  3. T3 rewrite: exactly what the rules change, plus the setup-pstack fork, the hook text, and the removal of port files T3 no longer needs.
  4. Drop Michael's 30 policy forks outside watch-pr, with the port-only files and tests only they used.
  5. Drop the 10 watch-pr policy forks, and re-hook the settle overlay onto Lauren's watch-pr.
  6. Docs, notices, manifests, and the CHANGES entry.
  7. CI: lychee skips upstream's (url) placeholder link in the why synthesizer prompt, as validate-skills.mjs already does.

To restore one of Michael's forks, take its file and the dependencies its commit names from the parent of commit 4 or 5, redo that file's T3 rewrite, and declare it in tools/forks.json.

Behavior changes against 1.0.14

Change 1.0.14 2.0.0-rc.1 Source
Subagent effort per job Each role ran at the effort in its sheet entry. Each spawn starts from the role's entry and moves its reasoning option (effort on Claude, reasoningEffort on Codex and Grok) up a step for the hardest work, down for judgment or routine work. Fast mode (fastMode=true on Claude, serviceTier=priority on Codex) is used only when CI or trunk is red or a person is blocked right now. Verification stays on the swarm workers entry. pstack #613
Orchestrate without Graphite The frontier came from gt, and workers and babysitters ran gt. orch frontier set walks the PR base chain with gh, and one stacker owns chain rebases, retargets, and merges. pstack #613
Shipping playbook Michael's 11-step form (see the pending rows). Lauren's six steps, each with its reason. After a merge, the child PR is retargeted to trunk, its patch moves onto the merge result, it is pushed with --force-with-lease, and the patch-id rule decides whether its verdict survives. pstack #613
Autopilot playbooks Michael's forms (see the pending rows). Lauren's rules without the procedure around them. New: pin --force-with-lease to the SHA you last pushed, run the patch's checks on the merge result when trunk changed something it depends on, and hold rather than take a third rebase past merge prep. pstack #613
Multi-phase review rounds The full swarm ran at every push that changed the patch. The full swarm runs once at the code-ready head and again only for new behavior, a redesign, or a large new diff. A rebase, a conflict resolution, or a minor fix gets one verifier. pstack #613
watch-pr Code Review Gate An ACTION_REQUIRED Code Review Gate read as a failed check. It reads as the owner-approval gate, so the watcher neither fails nor waits on it. pstack #613
Worktree audit Michael's worktree-audit.mjs (see the pending rows). Lauren's worktree-audit.sh, which reads PR state from Origin when it can and holds a worktree with a draft PR. On T3 a worktree bound to a thread also counts as in use. pstack #613
/ketchup No word cap, and a table or diagram counted as a visual. At most 150 words in /bro's voice, built on real visuals. On T3 the visuals are one html_render page, checked first with html_preview. pstack #595, #609
/in-your-own-words Absent. New skill that plays the goal back in one line before work starts. pstack #602, #606
Always-on signal after a deep debug Absent. principle-fix-root-causes proposes a cheap always-on signal once a long dig finds the cause. pstack #604
poteto-agent finds poteto-mode The brief had to name poteto-mode's path. poteto-agent finds it without one. pstack #597
Where the T3 rules live In references/t3-tools.md, which every chat read before its first subagent, beside Codex, Copilot, and Pi tool maps. Inline, where Lauren's dispatch rules sit. The four mapping files are gone, and the session-start hook no longer points at one. T3 adaptation
Which skills the model can invoke Every skill. The 24 principle leaves were hidden from the slash menu. On Claude Code, Lauren's disable-model-invocation stays on 53 skills, so the model invokes only poteto-mode, setup-pstack, and the six cursor-team-kit skills itself, and poteto-mode opens the rest by path. The principle leaves appear in the slash menu. Codex ignores the flag and still lists all 61 skills to the model. T3 adaptation of upstream
Session-start routing A specific intent (TDD, architect, how, why, arena, interrogate) entered that skill directly. It enters through poteto-mode, which opens that skill from its bundled path. The other skills run only from poteto-mode or when you type them. T3 adaptation
Model defaults Default and panel Claude and Grok entries at high, Fable and GPT at xhigh. Every default at xhigh: claudeAgent/claude-opus-5-5 effort=xhigh, claudeAgent/claude-fable-5-1 effort=xhigh, and the panel of Opus, codex/gpt-6.1-sol, and grok/grok-4.7, all at xhigh. Each skill's Models section lists these T3 entries instead of Claude aliases. T3 adaptation of upstream's large budget
setup-pstack Wrote the sheet with no budget question. Asks Lauren's budget question (unlimited, large, medium, small), which sets every entry's reasoning option, then the session-hook question, then checks the sheet with t3-sheet.mjs. Declared fork
strongest judgment role The role's name. Renamed hardest tasks, Lauren's label. A sheet with strongest judgment still validates and runs, and setup-pstack writes the new name. T3 adaptation
Follow-up to a running child Never t3_thread_send to a childThreadId. Every follow-up was a fresh delegate_task. Still a fresh delegate_task by default. t3_thread_send to the child is allowed only when the work needs state that lives in it, such as its checkout or a process it runs. T3 adaptation of upstream
PR linking The skills told the agent to call link_pull_request for every PR and check list_thread_pull_requests. T3's own system prompt asks for that, so the skills no longer repeat it. /ketchup still reads list_thread_pull_requests. T3 adaptation
Babysit on T3 A long mapping, including a two-run confirmation for a ci-none READY, reseeding a stack watcher past a merged seed, unsettling a settled thread before a review wait, and a table of terminal verdicts. Lauren's playbook with the drive loop inline: watch-pr --timeout 540 loops inside the turn, stops after two hours unchanged or three in all, background arms watch_pull_request, and a human-review wait arms it and ends the turn. The four details named at left are gone. T3 adaptation
UI evidence A section on the preview_* and device_* tools, step by step. One trigger line: the project's verify skill first, else preview_* for web, device_* for simulators, with the artifact as the evidence. T3 adaptation
Thread tools named in skills The T3 mapping also named T3's queue and pending-request tools, and a scheduled run for maintain-verification-skill. Recall, automate-me, and session-pickup search with t3_thread_search. The queue, pending-request, and scheduled-verification notes are gone. T3 adaptation
Codex slash prompts 37 .codex-plugin/prompts stubs, one per skill. Removed. Codex lists the plugin's skills itself. T3 adaptation
Effort agents Ten effort-<level> and poteto-agent-<level> agents, for @<level> in a sheet. Removed. On T3 the effort is an option in each sheet entry. The plugin ships four agents. T3 adaptation
babysit skill Michael's Claude Code version of Cursor's /babysit. Removed. The Babysit playbook covers it. T3 adaptation
Pi, GitHub Copilot, and skills-only installs Packaged and tested. Removed. t3-pstack ships for Claude Code and Codex inside T3. T3 adaptation
Kept from 1.0.14 The interrogate gate before Opening a PR and its review loop (severity gate, fix-diff rounds, verify after each fix, three-round cap), arena's no-self-scoring cross-judge, thermos on two families, the dispatch ledger, a worktree per writing child, the family rule and BLOCKED: independent review, reflect's 1.0.13 transcript lookup, the 1.0.14 sheet grammar, and the watch-pr settle window. T3 adaptation
architect reconciliation Accepted deviations were compared with the saved sketch and rationale before each unit closed, with an Implementation reconciliation section in the template. Lauren's architect, without it. Michael fork dropped, pending user audit
blast-radius trigger Also ran before design when a brief asserted something about existing code. Lauren's trigger. Michael fork dropped, pending user audit
bro trigger The description named /bro and "say it plainly". Lauren's description. Michael fork dropped, pending user audit
poteto-mode extras A Platform Adaptation section with a todo.md fallback, a run-or-verify driver line, deploy-platform and defect-severity triggers, a project-playbooks paragraph, a closed-review-gate rule, stopping an abandoned agent before replacing it, and every reply item as prose. Lauren's poteto-mode with the T3 rewrite. The T3 review gate and BLOCKED: independent review stay. Michael fork dropped, pending user audit
Autopilot-full merges Owners stopped at merge-ready and the operator clicked every merge. The root wrote the objective into standing orders, waited for a go above three owners, and stopped a PR at two fix-forwards. Lauren's rules: an owner merges after a clean verdict. Michael fork dropped, pending user audit
Autopilot-stack safety Each verdict recorded head, base, and patch-id. The root cancelled pending merges and leased each push against the captured remote head before changing the chain. Lauren's rules, including the new lease and merge-result rules above. Michael fork dropped, pending user audit
Babysit first read The first status read had to name the requested PR and the merge frontier, and a behind-base gate went to the branch owner. Lauren's playbook. Michael fork dropped, pending user audit
Bug-fix reply Quoted the decisive output trimmed to the assertion and counts. Lauren's reply line. Michael fork dropped, pending user audit
Feature worktrees Every file-writing delegate got its own worktree, and none wrote where another still held one. Lauren's feature playbook. The T3 dispatch rule still gives every writing child its own worktree from HEAD. Michael fork dropped, pending user audit
Opening a PR Live agents holding a worktree were stopped before committing, merging, or deploying from it. Lauren's playbook. Michael fork dropped, pending user audit
Pause and pickup The resume note went to a canonical checkpoint directory (resume.mjs, resume-storage.md), and pickup read it first with the human-rulings rules. Lauren's playbooks. Michael fork dropped, pending user audit
Shipping landing rules One PR at a time under your landing authority, pending merges cancelled before any chain change, merges only under a service-enforced head condition, each landing confirmed in history, through ship-pr and merge-safety.md. Lauren's six steps. Michael fork dropped, pending user audit
Worktree cleanup holds A worktree with untracked files or a git lock was held, with submodule caveats and no rm -rf around a locked tree. Lauren's playbook and worktree-audit.sh. Michael fork dropped, pending user audit
Script bootstrap Exited with a clear message without bun and installed production dependencies without re-running itself. Lauren's bootstrap.ts. Michael fork dropped, pending user audit
Orchestrate store guards Serialized stale-lock takeovers, crash-safe lock creation, quoted TSV cells, gt timeouts, and a TLA model of the lock. Lauren's store. Michael fork dropped, pending user audit
watch-pr merge gates Stopped at review-required and branch-protection gates once checks finished, and at a behind-base gate at once. Lauren's verdicts. Michael fork dropped, pending user audit
watch-pr mergeability Waited while GitHub had not computed mergeability, re-read facts that changed mid-poll, and built READY only from a MERGEABLE reading. Lauren's verdicts. Michael fork dropped, pending user audit
watch-pr no-checks READY A PR with no checks was READY only after 60 seconds of seeing none on the same head. Lauren's verdicts. Michael fork dropped, pending user audit
watch-pr deadline One deadline covered discovery, commands, and polling, and ended in a deadline verdict. Lauren's watcher. Michael fork dropped, pending user audit
watch-pr GitHub reader Every call ran under the deadline, review-thread pages failed closed, a stuck cursor or a cut stack was refused, and the default branch was read. Lauren's reader. Michael fork dropped, pending user audit
watch-pr landing proof READY carried a landing revision, and ship-pr landed with live merge safety. Lauren's watcher. Michael fork dropped, pending user audit
Principle extras attack-the-premise gave a falsifying check for premises not about actors, prove-it-works checked the process and the failure reason, and test-behavior kept absence-only tests and constant pins. Lauren's three principles. Michael fork dropped, pending user audit
Human rulings in why and recall why's epistemics, investigator, and synthesizer kept a ruling's original wording, and recall swept the standing-rule locations first. Lauren's skills. Michael fork dropped, pending user audit
show-me-your-work log log.sh neutralized a cell opening with a quote and appended each row in one write. Lauren's script. Michael fork dropped, pending user audit
TDD evidence Quoted the failure content, not the assertion line. Lauren's skill. Michael fork dropped, pending user audit
Code-quality review report One summary report plus one detail file per subsystem. Lauren's skill. Michael fork dropped, pending user audit

Verification

  • GIT_CONFIG_GLOBAL=/dev/null bun test tests/ --timeout 30000: 498 pass, 23 skip, 0 fail.
  • Scripts: typecheck clean, bun test orch watch-pr check-plan.test.ts 92 pass, Prettier clean on the port's TypeScript.
  • bun tools/generate.mjs --check: 17 generated files current, all contracts pass.
  • bun tools/sync.mjs <component> ce649c0 --dry-run for pstack, cursor-team-kit, and thermos: exit 0, no undeclared fork, no denylist hit, no unused rule.
  • t3-sheet.mjs passes the maintainer's real sheet against the machine's catalog.
  • markdownlint, shellcheck, actionlint, and lychee pass locally, and every CI job passes.

Install proofs (throwaway homes)

  • Claude Code 2.1.299. claude plugin marketplace add <branch checkout> and claude plugin install t3-pstack@t3-pstack installed 2.0.0-rc.1 with 61 skills. The SessionStart hook fired and injected the routing text. A one-cent rounding bug prompt in a two-file repo routed: the first tool call was Skill(t3-pstack:poteto-mode), and the session transcript holds poteto-mode's full body (25,054 characters).
  • Codex 0.162.1. codex plugin marketplace add and codex plugin add installed 2.0.0-rc.1, and skills/list shows all 61 skills as t3-pstack:<name>. The hook's trust hash is sha256:ba5a989f…, the same as a 1.0.14 install's, so a user who trusted 1.0.14's hook stays trusted. With the hook trusted, the routing text reached the model, and the same bug prompt routed: Codex said it would use poteto-mode and read its SKILL.md first. An explicit $t3-pstack:poteto-mode mention injected the full SKILL.md (25,326 characters) with no truncation warning, since no Agent Plugins root manifest ships.
  • Known Codex limit, not new in 2.0: when the model opens poteto-mode with cat instead of a mention, Codex's shell output cap elides about 300 tokens from the middle of the 6,300-token file, inside the Subagents section. A routing sentence asking it to re-read skipped lines did not change that in a test run, so it is not included.

t3-pstack 2.0 takes Lauren Tan's pstack as written and rewrites only its
Cursor mechanics. This commit replaces the 1.0.14 pipeline (lead lines,
Codex prompt stubs, effort agents, Pi and Copilot packaging) with one
derivation: the substitutions in order, then deriveT3 in
tools/derive-t3.mjs, which sets frontmatter and stamps the Models
sections, interrogate's reviewer table, and setup-pstack's sheet block
from models.json.

All three components pin cursor/plugins ce649c0. A sync now also fails
when a rule matches nothing upstream, since that is how a T3 insert would
silently vanish after Lauren rewords its anchor sentence. --bootstrap
regenerates a component from upstream, keeping declared forks.

models.json names T3 entries per tier (default, strongest, panel) in the
grammar t3-sheet.mjs checks, and a role may carry the alias an older
sheet still uses.

The plugin tree catches up in the following commits. The checks pass at
the head of this series, not at each commit.
Writes upstream's bytes for every file the three components carry at
cursor/plugins ce649c0, with no substitutions, so this diff reads as
t3-pstack 1.0.14 against Lauren's own text, Cursor mechanics included.
It adds in-your-own-words and poteto-mode's worktree-audit.sh, both new
or newly carried upstream.

The 40 files Michael Denyer's policy forks covered stay at 1.0.14 here.
The commits that drop those forks move them, so each one can be restored
on its own.
Applies tools/substitutions.json and deriveT3 to every carried file
outside the policy forks, so this diff is exactly what the rules change:
the Task tool becomes delegate_task, model slugs become sheet entries,
pstack-models.mdc becomes the t3-pstack-models.md sheet, cloud agents
and /loop become schedule_task, t3_thread_launch, and watch_pull_request,
and /visualize becomes html_render. The Models sections, interrogate's
reviewer table, and setup-pstack's sheet block are stamped from
models.json. poteto-mode alone drops disable-model-invocation, so the
session-start hook can invoke it.

setup-pstack/SKILL.md stays a declared fork that writes the T3 sheet.

With the T3 rules inline where Lauren's dispatch rules sit, these port
files go: t3-tools.md and the Codex, Copilot, and Pi tool maps, the
Codex prompt stubs, the effort agents, the Pi extension and its tests,
the Copilot hooks, marketplace manifest, and setup notes, the
pre-tool-use hook, the babysit skill, the awk sheet checker, and the
mirrored agent references. The session-start hook drops its Copilot
branch and its pointer to t3-tools.md.
t3-pstack 1.0.14 carried 30 files outside watch-pr in Michael Denyer's
own form. Each was a policy change to Lauren's workflow, not a Cursor
mechanic: one-at-a-time landing and re-verification rules in the
shipping and autopilot playbooks, a merge-frontier check in babysit,
per-delegate worktrees in feature, stopping live agents before an
opening-a-pr commit, checkpointed resume notes in pause-safely and
session-pickup, a stricter worktree-cleanup audit, extra guards in the
orchestrate store and bootstrap script, a human-rulings epistemics
section and its readers in why and recall, poteto-mode's platform
adaptation section, design reconciliation in architect, and added rules
in three principles, tdd, bug-fix, bro, blast-radius, show-me-your-work's
log.sh, and the code-quality review's report format. This commit returns
each file to Lauren's text with the T3 rewrite.

It also removes what only those forks used: merge-safety.md,
resume-storage.md, resume.mjs, check-playbooks.mjs, worktree-audit.mjs,
the OrchStoreLock TLA model, and their tests.

Each fork is pending the maintainer's audit. Restoring one means taking
its file and its dependencies back from this commit's parent, then
redoing that file's T3 rewrite and declaring it in tools/forks.json.
t3-pstack 1.0.14 carried 10 of Lauren's watch-pr files in Michael
Denyer's form. They added merge gates (review required, branch
protection, behind base, mergeability unknown), a first-sighting
confirmation for a PR with no checks, one shared deadline across
discovery and polling, a landing revision in the ready proof, and the
ship-pr landing tool with live merge safety. This commit returns those
files to Lauren's watch-pr and removes the port-only modules and tests
behind them, along with the Lean model of the poll loop. Each is pending
the maintainer's audit, restorable from this commit's parent.

The settle overlay stays. Review bots post minutes after CI turns green,
so READY waits until nobody but the author and the gh viewer has
commented, reviewed, or reacted for the settle window (--settle, 300
seconds by default). settle.ts is now self-contained and hooks into
eight of Lauren's files at declared forks, 57 changed lines as the sync
counts them.
Stamps 2.0.0-rc.1 into the manifests and writes its CHANGES.md entry,
with a row for every behavior that changes against 1.0.14, the dropped
policy forks marked pending audit.

README, CONTRIBUTING, CONTEXT, NOTICE, and the plugin README now
describe Lauren's tree rewritten in place: the substitutions, the
declared forks, and the sync that fails on an unused rule. SECURITY.md
points at this repository. The pstack-claude design notes, the Pi
equivalence notes, and the overview image go with the packaging they
described.
Lauren's why synthesizer prompt writes [PR #123](url) as a template
example. validate-skills.mjs already treats a bare-word target as a
placeholder, and lychee now excludes a file target named url the same
way, so the example stays as upstream wrote it.
@chhoumann
chhoumann marked this pull request as ready for review October 14, 2026 09:53
@chhoumann
chhoumann merged commit 293a169 into main Oct 14, 2026
10 checks passed
@chhoumann
chhoumann deleted the v2/base-lauren branch October 14, 2026 09:54
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