Skip to content

sync: upstream pstack 519d36a (0.15.34) - #32

Merged
github-actions[bot] merged 1 commit into
mainfrom
sync/upstream-519d36a
Oct 27, 2026
Merged

github-actions[bot] merged 1 commit into
mainfrom
sync/upstream-519d36a

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Upstream commits since the previous pin.

519d36a	2026-10-27	test(pstack): wait for the reap in the statechart SIGKILL view test (#981)
164ced1	2026-10-27	chore(pstack): bump to 0.15.34 (#983)
740d2c0	2026-10-27	fix(pstack): keep qualified action names in property traces (#982)
7c7bde7	2026-10-27	chore(pstack): bump to 0.15.33 (#978)
34b1b7c	2026-10-27	feat(pstack): port the statechart compiler (#977)

Sync output, exit 0.

patching file skills/poteto-mode/scripts/worktree-audit.sh
patching file skills/make-bot-ui/SKILL.md
patching file skills/poteto-mode/scripts/package.json
Hunk #1 succeeded at 7 (offset 1 line).
patching file skills/poteto-mode/scripts/tsconfig.json
patching file skills/poteto-mode/scripts/watch-pr/cli.test.ts
patching file skills/poteto-mode/scripts/watch-pr/cli.ts
patching file skills/poteto-mode/scripts/watch-pr/policy.test.ts
patching file skills/poteto-mode/scripts/watch-pr/policy.ts
patching file skills/poteto-mode/scripts/watch-pr/render.ts
patching file skills/poteto-mode/scripts/watch-pr/types.ts
patching file skills/poteto-mode/scripts/orch/orch.test.ts
patching file skills/poteto-mode/scripts/orch/store.ts

pin      e73df47 -> 519d36a
version  0.15.34
counts   60 skills, 23 playbooks, 24 principles
changed  436 files under plugins/pstack

Gate output, exit 0.

model-agnostic               PASS  clean, 1 audited slug exception(s)
omp model levers             PASS  setup-pstack and poteto-mode name task.agentModelOverrides
chat-model lever             PASS  /model named in setup-pstack
version-agnostic             PASS  no version-pinned capability claim
capability claims            PASS  clean, 0 audited caps exception(s)
cursor residue               PASS  clean, 0 audited residue exception(s)
readonly posture             PASS  no readonly task field or prose directive
runtime per-call-model       PASS
runtime pstack-rule-file     PASS
runtime task-environment     PASS
runtime unscoped-cleanup     PASS
runtime history-layout       PASS
retired runtime labels       PASS  no abstract role labels, placeholders, or stale process wording
agent hub api                PASS  no hub tool claimed; coordination names wait, proc://, and agent://
install root                 PASS  every install path resolves under ~/.omp
external capability provenance PASS  the external veto is named and marked unshipped
cursor tool names            PASS  no Cursor tool name, capitalised Task included
skill command form           PASS  every skill command uses the registered /skill:<name> form
runtime contract fields      PASS  required item fields, the yield call, and the gating settings are named
one-item role routing        PASS  every explicit single-spawn line has one-item context
setup config contract        PASS  ownership, aliases, model efforts, suffix, base selector, and the apply-models lever
guide claims                 PASS  11 skills, prototype and multi-phase-plan playbooks, check-plan.mjs, Feature Map, pin
stale exemptions             PASS  74 fragment(s), each naming exactly one rule
gate mutations               PASS  17 fixture mutations rejected, each by its own check
worktree audit               PASS  omp-port/test-worktree-audit.sh
internal links               PASS  every playbook and reference resolves
principle parity             PASS  24 names, index and tree agree
playbook parity              PASS  23 names, index and tree agree
allowlist                    PASS  1 entries still match their own pattern
conflict markers             PASS  no unresolved merge left
counts                       PASS  60 skills, 23 playbooks, 24 principles, pin 519d36a
owned                        PASS  3 owned path(s) present
plugin manifest              PASS  no Agent Plugins manifest, so omp-plugins loads every skill
owned drift                  REPORT  no upstream commit has touched an owned path since the pin
mechanics                    PASS  omp-mechanics installed and named in the reminder
extensions                   PASS  both extensions present and registered
reproducible                 PASS  tree equals the build at 519d36a
target builds                SKIP  target is the pin, reproducible already built it
untiered slugs               REPORT  none, every slug has a tiered rule at 519d36a
rule liveness                REPORT  93 rule(s) matched nothing at 519d36a
  rules.sed:76	s#So `small` turns `claude-[a-z0-9.-]+` into `claude-[a-z0-9.-]+`, and `grok-[a-z0-9.-]+` into `grok-[a-z0-9.-]+`\.#So `small` takes the lowest-effort selector in the same family that `omp models` reports, and marks the role as needing a choice when that family offers none.#
  rules.sed:78	s#go to your strongest judgment model \(`claude-[a-z0-9.-]+`\)#go to your strongest judgment model#
  rules.sed:96	s#^- `model`: the `how explorer` line, default `[^`]+`$#- `agent`: an exact discovered scout for repository-only exploration#
  rules.sed:97	s#^- `model`: the `how explainer` line, default `[^`]+`$#- `agent`: an exact discovered explainer only when the live roster has one; otherwise omit `agent` for the default worker. Use the explainer and read-only brief in both cases. An override cannot create an agent.#
  rules.sed:98	s#^- `model`: the `why investigators` line, default `[^`]+`$#- `agent`: an exact discovered full-access worker for every MCP-backed lane. The strict `scout` definition has no MCP grant, so never assign MCP work to it. A repository-only lane may use `scout` only when its file-only grant covers the evidence. Use another discovered worker when the lane needs `git`, `gh`, or other shell tools.#
  rules.sed:99	s#^- `model`: the `why synthesizer` line, default `[^`]+`$#- `agent`: an exact discovered full-access worker for citation spot-checks that call MCP. The strict `scout` definition cannot serve that lane.#
  rules.sed:108	s#^- `readonly`: `true`$#- read-only posture. The brief grants only the tools the discovered agent actually has and forbids writes#
  rules.sed:109	s#^- `readonly`: `false` \(agent mode\)\. \*\*Do not use readonly/Ask mode\.\*\* It strips MCP access, which disables MCP-backed investigators entirely\. Investigators still shouldn't write anything\.$#- read-only posture. The brief grants only the tools the discovered agent actually has and forbids file writes, git state changes, commits, pushes, pull requests, and external mutations#
  rules.sed:110	s#^- `readonly`: `false` \(agent mode\)\. The synthesizer's quality check spot-verifies citations, which can require MCP access\. Readonly/Ask mode strips MCPs and defeats that\.$##
  rules.sed:111	s#Work like a careful, cautious, precise investigator\.#Work like a careful, cautious, precise investigator. This investigation is read-only: do not write files, change git state, commit, push, open pull requests, or mutate any external system. Use only read-only operations exposed by your agent and assigned source.#
  rules.sed:113	s#Spawn one Task subagent that explores and explains in one pass:#Start one direct explainer in one `task` call with one item in `tasks[]` and the required shared `context`:#
  rules.sed:114	s#Once all explorers have returned, spawn one Task subagent to synthesize their findings into one explanation:#After all explorers have returned, start the synthesis in one `task` call with one item in `tasks[]` and the required shared `context`, using Step 2b's explainer routing:#
  rules.sed:115	s#Spawn one synthesizer subagent:#Start one synthesizer in one `task` call with one item in `tasks[]`, the required shared `context`, and an exact discovered full-access worker:#
  rules.sed:117	s#Launch all matching investigators in a single message so they run concurrently\.#Launch all matching investigators in one `task` call with the required shared `context` and all items in `tasks[]` so they run concurrently.#
  rules.sed:120	s#^Spawn one reviewer per configured model to adversarially review code changes\. Each model gets the same prompt and rubric\.#Use exact discovered reviewer agents, one per configured family, in one `task` call with all items in `tasks[]` and the required shared `context`. Each reviewer gets the same prompt and rubric.#
  rules.sed:121	s#Spawn all N subagents in one message with `run_in_background: true`, each with the task, the path to the shared grounding, its own output path, and instructions to produce both the artifact and a short rationale\.#Spawn all N subagents in one `task` call with all items in `tasks[]` and the required shared `context`, each with the task, the path to the shared grounding, its own output path, and instructions to produce both the artifact and a short rationale.#
  rules.sed:127	s#Reviewers need MCP access for context lookups \(tickets, chat threads, observability traces referenced in the transcript\)\. Readonly strips MCPs\.##
  rules.sed:128	s#The synthesizer's quality check includes spot-verifying citations, which can require MCP access\. Readonly strips MCPs\.##
  rules.sed:129	s#there is no task `readonly` field\.  Use#there is no task `readonly` field. Use#
  rules.sed:135	s#The synthesizer returns a structured Accepted / Rejected / Backlog list\.#Pass this explicit `outputSchema` when the live task schema exposes it:\n\n```json\n{"type":"object","required":["Accepted","Rejected","Backlog"],"properties":{"Accepted":{"type":"array","items":{"type":"object","required":["Problem","Proposal","Routing"],"properties":{"Problem":{"type":"string"},"Proposal":{"type":"string"},"Routing":{"type":"string"}}}},"Rejected":{"type":"array","items":{"type":"object","required":["Principle","Reason"],"properties":{"Principle":{"type":"string"},"Reason":{"type":"string"}}}},"Backlog":{"type":"array","items":{"type":"object","required":["Pattern","Hit","Mechanism"],"properties":{"Pattern":{"type":"string"},"Hit":{"type":"string"},"Mechanism":{"type":"string"}}}}}}\n```#
  rules.sed:142	s#^- `model`: the configured `interrogate reviewers` entry, or the table default with no configured line\. For an `auto` or `inherit-parent` entry, omit `model` so that reviewer runs on the parent model\.$#- `agent`: an exact discovered reviewer agent name. Its frontmatter or `task.agentModelOverrides[<exact-name>]` selects the model; the task item has no `model` field#
  rules.sed:150	s#`subagent_type`: `([^`]+)`#`agent`: `\1`#g
  rules.sed:151	s#`subagent_type`#`agent`#g
  rules.sed:152	s#subagent_type#agent#g
  rules.sed:154	s#`readonly: true`#read-only posture carried in the brief#g
  rules.sed:155	s#`readonly: false`#full tools per spawn#g
  rules.sed:156	s#agent mode \(`readonly: false`\)#full tools per spawn#g
  rules.sed:157	s#`readonly`: `true`#read-only posture carried in the brief#g
  rules.sed:158	s#readonly strips MCPs\.#nothing strips MCPs here.#g
  rules.sed:161	s#Spawn one readonly judge subagent on that model\.#Start one judge in one `task` call with one item in `tasks[]`, the required shared `context`, and a brief that grants read tools only.#
  rules.sed:164	s#`model`: the `([^`]+)` line#`agent`: an exact discovered \1 agent#g
  rules.sed:165	s#`model` from the `([^`]+)` line#`agent` from the `task.agentModelOverrides` entry for an exact discovered \1 agent#g
  rules.sed:170	s#`subagent_type: "poteto-agent"`#`agent`: `poteto-agent`#g
  rules.sed:178	s#^Spawn one investigator per category that has a matching MCP\.#Assign one investigator to each category that has a matching MCP.#
  rules.sed:181	s#One subagent per PR, not batched, each a Cursor cloud agent, each exercising the real surface#Start all PR verifiers in one `task` call with all items in `tasks[]` and the required shared `context`; each item uses an exact discovered reviewer agent, or omits `agent` for the default worker with the reviewer role, and requests an isolated subagent. Each verifier exercises the real surface#
  rules.sed:186	s#`claude-fable-[0-9.-]+(-(thinking-)?[a-z]+)?`#your strongest judgment model#g
  rules.sed:190	s#`gpt-[0-9.]+-sol-[a-z]+`#your strongest instruction-following model#g
  rules.sed:194	s#`cursor-grok-[0-9.]+-([a-z]+-)?fast`#your fast code model#g
  rules.sed:198	s#: gpt-[0-9.]+-sol-[a-z]+$#: your strongest instruction-following model#
  rules.sed:202	s#`(claude|gpt|grok|gemini|opus)-[a-z0-9.]+-[a-z0-9.-]+`#your configured model for this role#g
  rules.sed:228	s#One Cursor cloud agent#One isolated subagent (`isolated: true`)#g
  rules.sed:234	s#Cloud-agent PR tools default to draft, so set `draft: false` on every PR creation call\.#omp's `github` tool opens a ready PR from `op: "pr_create"` unless you pass `draft: true`, so leave that flag off.#
  rules.sed:236	s#Fan out N parallel cloud workers\.#Fan out N parallel workers.#
  rules.sed:237	s#N is total workers, not the cloud concurrency limit\.#N is total workers. `task.maxConcurrency` in `~/.omp/agent/config.yml` caps how many run at once.#
  rules.sed:243	s#Restacks run in cloud\. A local restack at this scale takes the laptop down\.#Restacks run in an isolated subagent with its own worktree, never in the parent checkout.#
  rules.sed:248	s#Cloud agent#Isolated subagent#g
  rules.sed:254	s#A local root arms each tick as a real terminal `/loop`\. The loop uses a monitored-shell 30-minute sleep and emits an output-notification sentinel\.#A root in session arms each tick with omp's `/loop`, which re-submits the tick prompt after every yield.#
  rules.sed:255	s#A cloud root uses the existing cloud-sleeper wake chain instead\.#A wake that has to land out of session runs as a named bash process observed through `proc://`, or under a systemd user timer instead.#
  rules.sed:256	s#In a local session, a real terminal `/loop`\. In a cloud root, a cloud-sleeper wake chain\.#In session, omp's `/loop`. For a wake that must land out of session, use a named bash process observed through `proc://`, or a systemd user timer.#
  rules.sed:274	s#\*\*Reply:\*\* the mode, the frontier and its active-forge state#**Reply:** the watcher invocation, the frontier and its active-forge state#
  rules.sed:275	s#Hold the watch under `/loop` in dynamic mode\.#Hold the watch under omp's `/loop` while `loop.mode` is `prompt`, or under a named bash process observed through `proc://` when the wake must land out of session.#
  rules.sed:280	s#arm a `/goal` with the full program objective\.#arm a `/goal` with the full program objective. Use `/goal` only if exposed and enabled; otherwise retain the predicate in the durable plan. Do not change global configuration.#g
  rules.sed:281	s#arm a `/goal` with this exact text\.#arm a `/goal` with this exact text. Use `/goal` only if exposed and enabled; otherwise retain the predicate in the durable plan. Do not change global configuration.#
  rules.sed:294	s#\(`control-cli` or `control-ui` from `cursor-team-kit` as the change demands\)#(`browser` or `computer` for UIs, bash with a unique `name`, a `ready` check, and `proc://` state for CLIs and TUIs, as the change demands)#
  rules.sed:295	s#\(`control-ui` or `control-cli` from `cursor-team-kit` as the change demands\)#(`browser` or `computer` for UIs, bash with a unique `name`, a `ready` check, and `proc://` state for CLIs and TUIs, as the change demands)#
  rules.sed:304	s#cursor-team-kit#omp's built-in tools#g
  rules.sed:339	s#<agent-transcripts>#~/.omp/agent/sessions/<encoded-cwd>#g
  rules.sed:341	s#Three transcript layouts: legacy flat \(`<id>\.jsonl`\), current nested \(`<id>/<id>\.jsonl`\), and subagent \(`<parent>/subagents/<child>\.jsonl`\)\.#One transcript layout. A flat `<timestamp>_<session-id>.jsonl` per session in the bucket, with `<AgentId>.jsonl` sidecars in the sibling directory named for that stem, and one further subdirectory per nesting level whose files carry the full dotted id.#
  rules.sed:342	s#For each candidate, read the first JSONL line and check that `message\.content\[0\]\.text` contains the conversation's opening user prompt\.#The first line of an omp transcript is a fixed-width `type:title` slot and the second a `type:session` header, neither of them a message. For each candidate, scan for the first `type:message` line with `role:user` and check that its text contains the conversation's opening user prompt.#
  rules.sed:346	s#, or plugin-installed paths under `~/\.cursor/plugins/`#, or plugin-installed paths under `~/.omp/plugins/node_modules/`#g
  rules.sed:359	s#`,? in place of the `(arena|architect|swarm|interrogate) reviewers?` line##g
  rules.sed:360	s#the `arena cross-judge pool` line in the `pstack-models\.mdc` rule#an exact discovered judge agent whose configured model differs from the parent's when the roster provides one#g
  rules.sed:363	s#the role.s line or default#the role's entry in `~/.omp/agent/config.yml`, or its default#g
  rules.sed:364	s#the `swarm workers` model and speed \(your fast code model by default\)#the swarm role's own entry and speed#g
  rules.sed:365	s#the `(architect|arena|swarm|interrogate) runners` line in the `pstack-models\.mdc` rule#the exact discovered runner agents#g
  rules.sed:366	s#the `interrogate reviewers` line in the `pstack-models\.mdc` rule#one exact discovered reviewer agent per configured entry#g
  rules.sed:367	s#the `arena cross-judge pool` line in `~?/?\.cursor/rules/pstack-models\.mdc`#an exact discovered judge agent whose configured model differs from the parent's when the roster provides one, in `~/.omp/agent/config.yml`#g
  rules.sed:368	s#the `(architect|arena|swarm|interrogate) runners` line in `~?/?\.cursor/rules/pstack-models\.mdc`#the exact discovered runner agents in `~/.omp/agent/config.yml`#g
  rules.sed:372	s#the `how (explorer|explainer)` line#an exact discovered \1 agent in `~/.omp/agent/config.yml`#g
  rules.sed:373	s#one per entry on the `interrogate reviewers` line in `~?/?(\.cursor/rules/pstack-models\.mdc|task\.agentModelOverrides in ~?/?\.omp/agent/config\.yml)`#one per configured entry in `~/.omp/agent/config.yml`#g
  rules.sed:374	s#Set `model` to that line.s value, or to the default if the rule or the line is missing\.#Each discovered agent's frontmatter or `task.agentModelOverrides[<exact-name>]` selects its model; the item has no `model` field.#g
  rules.sed:375	s#Leave `model` unset when the value is `auto` or `inherit-parent`\.#An `auto` or `inherit-parent` entry means the parent chat model, so omit that role from the map.#g
  rules.sed:376	s#the `interrogate reviewers` line in `~?/?\.cursor/rules/pstack-models\.mdc`#one exact discovered reviewer agent per configured entry in `~/.omp/agent/config.yml`#g
  rules.sed:377	s#the `architect runners` line in the `task\.agentModelOverrides` entries in `~/\.omp/agent/config\.yml`#the same exact discovered runner agents Arena uses, with the architect role in each brief, in `~/.omp/agent/config.yml`#g
  rules.sed:378	s#an exact discovered (why investigators|why synthesizer|interrogate reviewers|swarm workers|architect runners|arena runners|arena cross-judge pool|reflect tooling|reflect judgment, divergent, synthesizer) agent#an exact discovered agent filling that role#g
  rules.sed:383	s#, in place of the .(arena|architect|swarm|interrogate) runners. line#.#g
  rules.sed:384	s#`agent`: an exact discovered (how explorer|how explainer) (agent|line)#`agent`: an exact discovered agent filling that role#g
  rules.sed:397	s#the `pstack-models\.mdc` rule#the `task.agentModelOverrides` entries in `~/.omp/agent/config.yml`#g
  rules.sed:407	s#re-read this playbook from trunk with `git show origin/main:pstack/#re-read this playbook from its install path, `~/.omp/plugins/node_modules/pstack/#g
  rules.sed:408	s#Re-read the execution playbook from trunk and the armed /goal#Re-read the execution playbook from its install path and the armed /goal#g
  rules.sed:420	s#- `Read` tool calls against any#- `read` calls against any#
  rules.sed:421	s#- `Task` prompts that name a skill path#- `task` calls whose brief names a skill path#
  rules.sed:426	s#Use Glob to find directories and files, Grep to find key symbols, Read to understand#Use `glob` to find directories and files, `grep` to find key symbols, `read` to understand#
  rules.sed:456	s#If the bottom PR is mergeable now, squash it with#Merge only on an explicit request. If the bottom PR is mergeable now and the user asked to land, ship, or merge it, squash it with#
  rules.sed:494	s#push with `--force-with-lease` only after an `ls-remote` check, and set the PR base to the parent branch\.#push with `--force-with-lease` only after an `ls-remote` check, and set the PR base to the parent branch. Never force-push a shared branch.#
  rules.sed:498	s#4\. \*\*Prepare only the bottom PR\.\*\* Fetch current trunk\.#4. **Prepare only the bottom PR**, and retarget only on the operator's explicit go: an operator approval to land a PR is not approval to rewrite the base of every PR above it. Fetch current trunk.#
  rules.sed:503	s#The operator's full-autonomy grant plus the root's clean verdict is the merge authorization that babysitting alone never has\.#A full-autonomy grant authorises the owner to keep working without checking in; the root's clean verdict authorises a merge only inside that grant. Neither is implied by "go faster", and both still require the operator to have armed PSTACK_LANDING_GRANT for the merge itself.#
  rules.sed:521	s#Recompute `frontier.json` from `gt` after every merge and stack mutation because GitHub base refs drift mid-restack while gt tracking is authoritative: ordered PR list, branch names, head SHAs, a generation number, the lowest unmerged PR\.#Recompute `frontier.json` after every merge and stack mutation, because base refs drift mid-restack. `orch frontier` resolves the order from the forge's own PR base refs when it can, and refuses to guess rather than inventing an order when it cannot; record what it could not resolve instead. A pull request that is not reachable from trunk is reported as unattached rather than assumed to be in the stack.#
  rules.sed:524	s#- Workers never rebase and never run `gt`\.#- Workers never rebase and never touch stack topology.#
  rules.sed:549	s#The strict `scout` definition has no MCP grant, so never assign MCP work to it\.#The strict `scout` definition has no write tools, so keep it off any lane that must edit. Its MCP tools are inherited: a task agent's `tools:` list does not remove them.#
  rules.sed:550	s#an exact discovered full-access worker for citation spot-checks that call MCP\. The strict `scout` definition cannot serve that lane\.#an exact discovered full-access worker for citation spot-checks that call MCP. `scout` inherits MCP tools and can serve that lane, but it cannot write.#
  rules.sed:554	s#/\*/subagents/\*\.jsonl#/*/*/*.jsonl#
  rules.sed:574	s#`Task`#`task`#g
rule staleness               PASS  65 stale rule(s) at 519d36a, all exempted

check-port: PASS

@github-actions
github-actions Bot merged commit 280b19a into main Oct 27, 2026
@github-actions
github-actions Bot deleted the sync/upstream-519d36a branch October 27, 2026 12:14
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.

0 participants