Skip to content

fix(pstack): resolve rule conflicts and read the model rule the same way - #422

Merged
poteto merged 6 commits into
mainfrom
lauren/pstack-rule-conflicts-and-model-rule
Sep 23, 2026
Merged

poteto merged 6 commits into
mainfrom
lauren/pstack-rule-conflicts-and-model-rule

Conversation

@poteto

@poteto poteto commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Why

Three pstack rules contradicted other rules in the same skills, so an agent had to guess which rule wins.

  • Babysit bans rebases and force-pushes and hands that work to the owner. An Autopilot-full owner runs babysit on its own PR, and it is also the owner that rebases on a trunk conflict, on a CI failure from trunk, and at merge prep. Autopilot-full did not say how the owner publishes those rebases.
  • show-me-your-work calls the decision log append-only, but its end-of-run audit said to cut invented rows, drop padding, and fix wrong rows.
  • opening-a-pr said a subagent that opens a PR does not babysit, while Autopilot-full and Autopilot-stack owners babysit their own PRs by design.

The skills that read the pstack-models.mdc rule also read it in different ways. arena, swarm, and interrogate used their line "when present". how, why, reflect, and architect said "your configured" model or runners without naming the rule or its line. Only interrogate said what to do when the Task tool rejects a slug.

Scope

  • Autopilot rebases. Babysit step 4 names the Autopilot-full owner, and the root in Autopilot-stack, as the owner it defers to. Where babysit says to report a rebase, that owner rebases its own branch and publishes it with git push --force-with-lease. Autopilot-full step 2 adds the lease push after an ls-remote check and bans a force-push of a shared branch. A standalone babysit keeps the full ban.
  • Append-only audit. The show-me-your-work audit never edits or removes a row. A wrong or invented row gets a new row that supersedes it. The audit checks only the current run's rows, and a run that adds to an existing log first logs a start row. The Rules list does not change.
  • Owner babysit. opening-a-pr keeps the no-babysit rule for other PR-opening subagents. An Autopilot-full or Autopilot-stack owner starts the babysit loop after its code-ready report.
  • Model rule. how, why, reflect, arena, swarm, and interrogate each name their role line. A missing rule or line means the default, and auto or inherit-parent leaves model unset. A rejected slug falls back to the default, and a rejected panel entry falls back to the default of its family. architect takes its runners from architect runners and follows arena's runner rules. poteto-mode names the lines that the code playbooks, the hardest changes, and prose and judgment read.
  • Plan lint. multi-phase-plan runs the ten live lanes on the swarm workers model. check-plan.mjs accepts any model in the lane sentence and rejects the skeleton's unfilled <swarm workers model>.
  • Setup. setup-pstack drops a line for a retired role, such as how critics, and lists it when it shows the roles.
  • Version 0.15.5. No changelog file, as in docs(pstack): cut 19 more instructions Opus 5.5 does not need #419.

No default model changes.

Blast radius

Every pstack user gets the new text on update.

  • An Autopilot-full owner may now force-push its own branch with a lease inside its babysit. Every other babysit keeps the ban on rebases and force-pushes.
  • The decision-log audit no longer deletes rows, so an invented row stays in the log and a later row supersedes it. A run that writes to a log that already has rows opens each of its stretches with a start row.
  • A user without the rule sees no model change. A user with the rule gets the same models for the lines it has. When the Task tool rejects a configured slug, the skill runs that role on its default and says so. In the arena, architect, and interrogate panels, a rejected entry runs on the default of its family.
  • A plan copied from the multi-phase-plan skeleton fails check-plan.mjs until its lane model is filled in. Plans that name grok-4.7-xhigh-fast still pass.
  • Not tested in a live agent run.

Verification

  • node scripts/validate-plugins.mjs passes.
  • In pstack/skills/poteto-mode/scripts, bun test orch watch-pr passes 52 of 52 and bun run typecheck passes. Neither covers check-plan.mjs, so the next check runs it directly.
  • check-plan.mjs ran on the skeleton with every other placeholder filled. On main it passes only grok-4.7-xhigh-fast in the lane sentence. On this branch it also passes claude-opus-5-5-max, gpt-5.6-sol-max, and auto. Both reject a missing sentence, empty backticks, "Nine lanes", and a model without backticks. This branch also rejects the unfilled <swarm workers model>, so the raw skeleton fails with that one problem.
  • git diff --check is clean, and no frontmatter changed.
  • No README or guide page restates a changed rule.

Note

Low Risk
Documentation and agent-workflow skill text only; behavior changes are procedural (lease force-push for autopilot owners, append-only logs) with no runtime code or auth paths touched.

Overview
Resolves contradictory playbook and skill rules so agents no longer have to guess which instruction wins, and standardizes how every routed skill reads pstack-models.mdc (named role lines, missing-rule defaults, auto/inherit-parent omitting model, and family-based fallbacks when Task rejects a slug).

Autopilot vs babysit: babysit still forbids rebases/force-pushes for normal babysitters, but Autopilot-full/stack owners may rebase their own branch and publish with git push --force-with-lease after ls-remote. opening-a-pr exempts those owners from the “don’t babysit on open” rule so they start babysit after code-ready.

Decision logs: show-me-your-work keeps logs append-only; audits add start rows for multi-run logs and supersede bad rows instead of deleting or “cutting” them.

Models in plans: multi-phase-plan and check-plan.mjs tie ten live swarm lanes to the swarm workers line (regex accepts any filled model, rejects the unfilled skeleton placeholder).

Setup: setup-pstack drops retired rule lines (e.g. how critics) and surfaces them on re-run.

Version bumps to 0.15.5 in plugin.json. No default model slug changes.

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

Babysit step 4 bans rebases and force-pushes inside a babysit and hands
rebase-shaped work to the owner. An Autopilot-full owner runs that
babysit loop on its own PR, and the same owner has to rebase on a trunk
conflict, on a CI failure from trunk, and at merge prep. An owner that
read both playbooks got opposite rules for the same push.

- babysit step 4 names the Autopilot-full owner as the owner it defers
  to, and the root in Autopilot-stack. Where the playbook says to report
  a rebase, that owner rebases its own branch and publishes it with
  `git push --force-with-lease`. A standalone babysit keeps the full ban.
- autopilot-full step 2 tells the owner to publish each rebase by
  pushing its own branch with `git push --force-with-lease` after an
  `ls-remote` check, and never to force-push a shared branch.
show-me-your-work calls the decision log append-only, but its
end-of-run audit said to cut invented rows, drop padding, and fix a
wrong row. opening-a-pr said a subagent that opens a PR does not
babysit, while Autopilot-full and Autopilot-stack owners run the babysit
loop by design.

- The show-me-your-work audit never edits or removes a row, even an
  invented one. A row that records no real decision or action, or whose
  claim or evidence is wrong, gets a new row that supersedes it with
  what actually happened. The Rules list does not change.
- The audit covers only this run's rows. A run that adds to a log that
  already has rows first logs a `start` row, which names the `ts` range
  of the earlier rows and names the run. The audit walks each stretch
  from one of this run's `start` rows to the next `start` row of another
  run.
- opening-a-pr keeps the no-babysit rule for other subagents. An
  Autopilot-full or Autopilot-stack owner starts the babysit loop after
  its code-ready report, and the rules that hold babysitting until a
  whole stack is built do not apply to it.
The routed skills read the `pstack-models.mdc` rule in different ways.
arena, swarm, and interrogate used their line "when present", which
left open whether a missing rule and a missing line mean the same
thing. how, why, reflect, and architect said "your configured" model or
runners without naming the rule or its line. Only interrogate said what
to do when the Task tool rejects a slug, and it said to open a PR to
update the configured value, which lives in the user's own rule file.

- how, why, reflect, arena, swarm, and interrogate each name their role
  line. `model` comes from that line, or from the default when the rule
  or the line is missing. `auto` or `inherit-parent` leaves `model`
  unset.
- architect takes its runners from the `architect runners` line in
  place of `arena runners`, and follows arena's runner rules for alias
  and rejected entries.
- A rejected slug falls back to the default. In a panel list, a
  rejected entry falls back to the default of its family, by prefix
  (`claude-*`, `gpt-*`, `grok-*`). A rejected default falls back to the
  closest valid slug of the same family.
- interrogate states its alias rule on the reviewer `model` bullet,
  ahead of the fallbacks.
- poteto-mode names the lines that the code playbooks, the hardest
  changes, and prose and judgment read.

The defaults do not change.
multi-phase-plan named one model for the ten live lanes, and
check-plan failed any plan whose lanes named another, so a plan could
not follow the `swarm workers` line.

- The Verification rule runs the live lanes on the `swarm workers`
  model, default `grok-4.7-xhigh-fast`.
- The skeleton's lane sentence says `<swarm workers model>`.
- check-plan accepts any model in that sentence and fails the unfilled
  placeholder, so a copied skeleton fails until the model is filled in.
A rule from an older setup can hold a line for a role that pstack no
longer has, such as `how critics`. setup-pstack read every line as a
current choice and did not say what happens to such a line.

- Step 2 drops a line whose role is not in the step 5 list.
- Step 3 lists each dropped line when it shows the roles.
@poteto
poteto merged commit 12d587d into main Sep 23, 2026
2 checks passed
github-actions Bot added a commit to SmailG/claude-cursor-plugins that referenced this pull request Sep 24, 2026
… and read the model rule the same way (cursor#422)

chore: sync with cursor/plugins — fix(pstack): resolve rule conflicts and read the model rule the same way (cursor#422)
rudironsoni added a commit to rudironsoni/cursor-plugins-for-all-harnesses that referenced this pull request Sep 25, 2026
* Add Google Docs, Sheets, and Slides plugins with bundled skills

Co-authored-by: Cursor <cursoragent@cursor.com>

* Register docs, sheets, and slides plugins in the marketplace

Co-authored-by: Cursor <cursoragent@cursor.com>

* webull: require Cursor 3.22.0 (single-redirect DCR retry) and bump to 1.0.1

* feat(third_party): add Robinhood plugin

* feat(third_party): add Coinbase plugin

* fix(coinbase): drop client credential variables; document harness allowlist blocker

* feat(third_party): add eToro Trading plugin

* Add X Money plugin for Grok Bot

* Set X Money plugin homepage

* Point homepage at x.com/i/money

* Add X Money guide skill

* Rework X Money guide from server source

* Drop single-use from plugin description

* Update X Money plugin description

* Remove backend mentions from skill

* finance: pre-connect disclosure in the listing description (1.1.1)

* finance: state that linked account data is synced and stored

* Gate x-money marketplace entry to Grok Bot

* finance: sync marketplace.json description with plugin.json

* Update bundled skills

* feat(pstack): port skill updates and default to Opus 5.5 and Grok 4.7 (cursor#414)

Ports internal skill updates: Opus 5.5 / Grok 4.7 defaults, autopilot verification rounds, upgrade help for old model pins, and merge-prep CI wait.

* fix(pstack): scrub old model names from public upgrade help (cursor#416)

Replace the pre-0.15.3 model list in the pstack upgrade help with "the old default models".

* docs(pstack): cut 19 more instructions Opus 5.5 does not need (cursor#419)

Cut 19 more instructions that Opus 5.5 follows without the text, in interrogate, reflect, tdd, four principles, figure-it-out, and the feature, bug-fix, and refactoring playbooks. Bump pstack to 0.15.4.

* fix(pstack): resolve rule conflicts and read the model rule the same way (cursor#422)

Let an Autopilot-full owner rebase and push with a lease inside its babysit, keep the decision-log audit append-only, and let autopilot owners babysit their own PRs. Every routed skill reads its line in `pstack-models.mdc` the same way, plan live lanes run on the `swarm workers` model, and setup-pstack drops retired role lines. Bump pstack to 0.15.5.

* finance: bank glyph logo (1.1.2)

Replaces the line-art logo.svg with the filled bank glyph in the plugin's existing green (#14804A) on white, scaled to the 192x192 canvas. Version bumped so clients pick up the new asset; no server or client-version changes.

* finance: match the grok.com Finance green (#009427)

* finance: white glyph on the Finance green tile

* finance: brighter green glyph on white, no tile

* feat(third_party): add Shopify Store plugin (Grok Bot only)

* shopify-store: display as "Shopify" and add the MCP-vs-toolkit routing rule

* chore(harness): emit packaging after upstream

Regenerate Claude, Grok, Codex, and OpenCode files from the Cursor marketplace.

Co-authored-by: Rudimar Ronsoni <rudimar@outlook.com>

---------

Co-authored-by: Jacob Sampson <jacob.sampson@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Jason <jasonsma27@gmail.com>
Co-authored-by: Minu Palaniappan <mpalaniappan@x.ai>
Co-authored-by: minu <minupal6@gmail.com>
Co-authored-by: Minu Palaniappan <ericzakariasson@users.noreply.github.com>
Co-authored-by: Asad Salman <asads@twitter.com>
Co-authored-by: lauren <poteto@users.noreply.github.com>
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.

2 participants