# Provenance

## Upstream scope

Parity reviews and the weekly upstream sync cover three cursor/plugins roots
(decision Q6): `pstack/skills`, `pstack/agents` and `pstack/docs`. Two roots
are out of scope:

- `pstack/automations/**`: Cursor Automations with Slack event triggers (the
  benny triage and reproduce-and-fix pack). They need a scheduler or event
  trigger, and pstack has no scheduler, timer or ledger.
- `pstack/.cursor-plugin/**`: the Cursor plugin manifest, which is
  platform-specific. This package's manifest is the `pi` block in
  `package.json` plus `pi-extension/pstack/*.ts`.

The top-level `pstack/README.md`, `LICENSE`, `.gitignore`, `assets/` and
`plugin.json` are unscoped: none of them is ported. `pstack/plugin.json` is
the Agent Plugins v1 root manifest added at this pin; it is platform-specific
in the same way as `pstack/.cursor-plugin`. `pstack/LICENSE` is also watched, because
`THIRD_PARTY_NOTICES.md` reproduces its MIT notice. The fixture records its
SHA-256 at the pin. With a checkout, the scope test fails when the upstream
file at the recorded commit no longer matches that hash. Without one, it fails
unless a `text` block in `THIRD_PARTY_NOTICES.md` hashes to the same value, so
the hash cannot move until the notice reproduces the new `LICENSE` text byte
for byte. The sync PR body should still call out any upstream `LICENSE`
change.

`pstack/skills` is accounted for by `docs/skill-inventory.json` and
`test/fixtures/skill-provenance/`. Its `root` stays `pstack/skills`, so a
sibling path such as `../agents/comment-sicko.md` is relative to it.
`test/fixtures/upstream-scope.json` records the scope and the status and
SHA-256 of every file under `pstack/agents` and `pstack/docs` at the cursor pin
`f713f14203cd6420cec13cd7c55c32d598dbab68`. With `PSTACK_CURSOR_SOURCE` set,
`npm test` checks that the file list and every hash match the pin, that every
top-level `pstack/` entry is classified, and that every file under
`pstack/skills` at the pin is referenced by the inventory or a skill-provenance
fixture. Without it, `npm test` still checks the fixture against the
skill-provenance fixtures and against the table below: a path that a
skill-provenance cursor source resolves to must be `carried`, and each row's
status must match the fixture. The checkout must hold the commit's blobs (a
full clone, or a partial clone that already fetched them): the tests and the
script disable lazy fetching.

On a pin move, `npm run fixtures:upstream-scope -- <checkout>` rewrites the
fixture at its own `commit`. It re-hashes every file, keeps each existing
status, adds new paths as `not-carried`, and prints what was added, removed or
changed, any unclassified top-level entry and any watched file that changed.
It never updates a watched hash, and it exits non-zero when a top-level entry
or a watched file needs a person. A new `not-carried` path then fails the
table check until it gets a row here.

| Upstream path | Status at the pin |
| --- | --- |
| `pstack/agents/comment-sicko.md` | carried: context source for `skills/no-comments/references/comment-sicko.md` (adapted from mimir's copy; Wave 3) |
| `pstack/agents/poteto-agent.md` | excluded: a named role; pstack ships no named roles (Wave 2: role removal) |
| `pstack/docs/guide/**` (11 Markdown pages, 6 images) | excluded: under decision Q1 |

No file under these roots is in the not-yet-carried state. The file list under
`pstack/agents` and `pstack/docs` is unchanged from the previous pin
`ccb5507cec1546dc88135c1139c811e6c59115ba`. Between those pins,
`pstack/agents/comment-sicko.md` (frontmatter name only),
`pstack/agents/poteto-agent.md` (excluded) and `pstack/docs/guide/08-principles.md`
(excluded under Q1) changed. `pstack/LICENSE` is unchanged
(`bc957ca6bee02792566a1a028d105e02e247c6e77cf057061674273da77b200e`). New
files under `pstack/skills` (`in-your-own-words`, `ketchup`, `sharpen`, and
`poteto-mode/scripts/check-plan.test.ts`) are flagged, not shipped. Top-level
`pstack/plugin.json` is new and unscoped. Unscoped `pstack/README.md` and
out-of-scope `pstack/.cursor-plugin/plugin.json` (0.15.15 to 0.15.25) changed
and were not ported.

## Wave 1: moved role and package files

| Destination | Source | Status |
| --- | --- | --- |
| `agents/poteto.md` | pi-herdr-agents `agents/poteto.md` at `c2177dff835da44937e614e8a03d0405d442e848` | moved unchanged in W1; **removed in W2** |
| `LICENSE` | pi-herdr-agents `LICENSE` at the same commit | unchanged |

`poteto.md` first appeared in pi-herdr-agents' launch commit `4fa3f26` and was
moved here byte-identical in Wave 1. `test/fixtures/provenance.json` records the
SHA-256 of each source blob and destination; `npm test` fails on unreviewed
drift and, when a pi-herdr-agents checkout is available, reproduces each source
hash from the source commit.

Wave 1 also added `pi-extension/pstack/{index,roles}.ts` (a role-pack bridge
adapted from pi-herdr-agents' `examples/role-pack/extension.ts` and ADR-0003),
package metadata, tests, `README.md`, `THIRD_PARTY_NOTICES.md` and these
documents.

## Wave 2: role removal

The user removed the named `poteto` role from the Wave 2 target
([historical plan 09](https://github.com/giuseppecrj/pi-herdr-pstack/blob/96910f507046285071453b660099b0c3549e6161/docs/plans/09-wave2-no-poteto-role.md)). `agents/poteto.md`, the `roles.ts`
bridge and its registration were deleted; pstack contributes no named roles and
registers no role directory. The provenance fixture keeps the role's W1 source
and hashes with status `removed` and `removedIn: "W2"`. No replacement role was
added and the role body was not copied elsewhere.

## Wave 2: runtime

`pi-extension/pstack/{config,mode,resources,setup}.ts` and their tests are new.

## Wave 2: methodology skills

The `skills/poteto-mode/` and `skills/setup-pstack/` files are adaptations of
upstream pstack, recorded separately from the Wave 1 role fixture in
`test/fixtures/skill-provenance/w2.json`. Sources:

| Key | Repository | Commit | Root |
| --- | --- | --- | --- |
| mimir | https://github.com/casualjim/pi-mimir | `f07dd981f62c9c994a5d043ede67d6c63c721454` | `packages/pi-pstack/skills` |
| cursor | https://github.com/cursor/plugins | `f713f14203cd6420cec13cd7c55c32d598dbab68` | `pstack/skills` |

| Destination | Primary source | Status |
| --- | --- | --- |
| `skills/poteto-mode/SKILL.md` | mimir `poteto-mode/SKILL.md`, Cursor hub as context | adapted |
| `skills/poteto-mode/playbooks/*.md` (12 base playbooks) | mimir playbook of the same name, Cursor as context | adapted |
| `skills/poteto-mode/references/bugbot-triage.md` | mimir file of the same name | adapted |
| `skills/poteto-mode/references/delegation.md` | derived from both hubs' Subagents sections | new |
| `skills/poteto-mode/references/authorization.md` | derived from both hubs' Autonomy sections | new |
| `skills/setup-pstack/SKILL.md` | Cursor `setup-pstack/SKILL.md` | adapted, substantially rewritten; revised by the runtime owner to describe the implemented change flow |

The fixture records, for every shipped file, its SHA-256, each source path and
blob hash at the pinned commit, and what changed. The adaptations share four
themes:

- Delegation uses pi-herdr-agents' public single-call `subagent` schema (tested
  host `e262c584f54a7c8d60eb1fa5510f47c1299e3801`). Every delegate is a
  deliberate bare delegate with a bounded reference prompt: implementer,
  investigator, reviewer or verifier. Upstream `poteto-agent`, `role`/`tasks`/`chain`,
  `subagent_type`, model aliases and hardcoded model defaults are gone.
- Methodology never grants permission. Commits follow the task's commit policy.
  Pushes, PR operations, review-thread replies, merges, deletions and shared
  configuration writes need explicit authorization. Pstack has no
  shell-command guard, so this is behavioral, not enforced.
- Platform tools (`set_tasks`, `AskQuestion`, `/loop`, Cursor transcripts,
  `cursor-team-kit` control and cleanup skills, the Cursor rule file) are
  replaced by Pi or pi-herdr-agents equivalents or by explicit manual steps.
- Skills from later waves keep their names. Every reference to one is marked
  planned W3 or planned W4 on the line that makes it, with a safe manual
  equivalent or a reported skip. Wave 2 listed 96 exact references in
  `test/fixtures/forward-references/hub.json`; the 54 W3 references retired
  when Wave 3 shipped, leaving 42.

Of the 45 mimir `poteto-mode` source files, 14 are adapted here. The other 11
playbooks are planned W4 methodology work and are not shipped as empty files.
The 20 helper-script files have documented dispositions: excluded (dependency
bootstrap, a duplicate scheduler/ledger, direct worktree pruning) or deferred to
W4 replacements (the PR watcher and plan checker). `npm test` checks
destination hashes and source accounting. It reproduces the source hashes when
`PSTACK_MIMIR_SOURCE` and `PSTACK_CURSOR_SOURCE` point to checkouts that
contain the pinned commits.

## Wave 3 fixture layout

From Wave 3 the fixtures are split by owner so parallel writers never share a
file. `test/fixtures/skill-provenance/` holds `w2.json` (the Wave 2 fixture,
moved verbatim), `w3-a.json` and `w3-b.json`. `test/fixtures/forward-references/`
holds `hub.json` (the Wave 2 tuples, moved verbatim), `w3-a.json` and
`w3-b.json`. The test unions each directory and requires every entry to lie in
its owner's skill directories. A file's status is `copied` (destination bytes
equal the primary source), `adapted` (one primary source, changes explained) or
`new` (derived only).

`docs/skill-inventory.json` is at schema version 2: rows carry a `status` of
`planned` or `shipped` that drives the content checks, and the `no-comments`
row lists `../agents/comment-sicko.md` (relative to each source's skills root)
as the source of its bare delegate prompt
`skills/no-comments/references/comment-sicko.md`. The delegation schema pin is
pi-herdr-agents `7d35371f5d7d0df3edd208a1d5c9a187767d563b`; its
`SubagentParams` and task categories are byte-identical to the Wave 2 pin
`e262c584`.

## Wave 3: 35 skills and the comment-sicko delegate

Wave 3 shipped the 35 Wave 3 inventory rows: the 24 `principle-*` skills,
`tdd`, `correct`, `benchmark-checklist`, `blast-radius` and
`typescript-best-practices` (W3-A, `test/fixtures/skill-provenance/w3-a.json`),
and `unslop`, `technical-writing`, `no-comments`, `teach`, `bro` and
`poteto-help` (W3-B, `w3-b.json`). Those rows are `shipped` in
`docs/skill-inventory.json`, so 37 rows ship in total. Of the 39 Wave 3 files,
22 are copied byte-for-byte from mimir and 17 are adapted, each with one primary
source and an explanation in its fixture.

| Destination | Primary source | Status |
| `skills/principle-*/SKILL.md`, `tdd`, `correct` | mimir file of the same name | 19 copied; 7 principles adapted for skill-relative paths, full principle names or a planned W4 reference |
| `skills/{benchmark-checklist,blast-radius}/SKILL.md`, `skills/typescript-best-practices/**` | mimir | adapted (paths, names, planned W4 interim rules; `paths:` frontmatter dropped; the boundary row follows the Cursor blob, and `references/patterns.md` is aligned to that row) |
| `skills/{unslop,technical-writing,bro}/SKILL.md` | mimir | copied |
| `skills/{no-comments,teach}/SKILL.md` | mimir, Cursor as context | adapted |
| `skills/no-comments/references/comment-sicko.md` | mimir `../agents/comment-sicko.md` at `f07dd981f62c9c994a5d043ede67d6c63c721454` | adapted: frontmatter dropped, made a comment editor, planned W4 interim rule |
| `skills/poteto-help/**` (3 files) | Cursor `poteto-help/` at `ccb5507cec1546dc88135c1139c811e6c59115ba` | adapted, re-authored for Pi from Cursor's structure |

`skills/poteto-help/SKILL.md` adapts the one-time setup nudge that landed in
cursor/plugins `1e56b2913469f05101e4ffd4d437c2e6fd2c1b8d` (PR #509) and is now
in the pin. The fixture records the Cursor blob at
`ccb5507cec1546dc88135c1139c811e6c59115ba`. The nudge asks once, when the
answer depends on the six task categories and a `/setup-pstack` report does
not already show them set, whether to run `/setup-pstack` (report only) or
leave the categories as they are. The pin also changes the interrogate table
row from "several models" to "different models". Cursor's Later line that
every role keeps its default model is still uncopied. A category counts as unset when the Config line ends with the
missing-file sentence, or when a present file's preference value is
`(not set)`. Findings are not unset: the host trims a reference and both
sides of `/` before it checks authentication, and the report cannot show
that result. Any other Config-line ending is an unknown file state.
poteto-mode always passes `task:<category>`, so
those delegations fail until an approved `/setup-pstack <request>` write sets
the category. poteto-help does not read or write task-model config.

comment-sicko is a bare delegate prompt under `skills/no-comments/references/`,
not a role. `/skill:no-comments` reads it and passes it as `systemPrompt`;
pstack still ships no named roles and has no `agents/` directory.

The reconcile step retired every `planned W3` marker and its interim clause in
the hub, playbooks and the W3 files, and removed the 63 forward-reference tuples
that pointed at Wave 3 rows (54 in `hub.json`, 1 cross-batch in `w3-a.json`, 8
cross-batch in `w3-b.json`). The 93 remaining tuples all point at Wave 4 rows or
playbooks. Two short example sentences in the copied `technical-writing` skill
are attributed to Diátaxis and ASD-STE100 in `THIRD_PARTY_NOTICES.md`.

## Wave 4: 14 skills, 11 playbooks and two scripts

Wave 4 shipped the last 14 inventory rows and the 11 remaining poteto-mode
playbooks, so all 51 rows are `shipped` in `docs/skill-inventory.json` and all
23 playbooks ship. Each batch owns its fixtures:

- W4-A (`w4-a.json`): `how`, `why`, `architect`, `arena`, `swarm`,
  `interrogate`, `reflect`, `figure-it-out`. 33 files, 21 copied and 12 adapted,
  all from mimir. Swarm maps the Verifier prompt's per-claim pass, fail or
  inconclusive onto one overall `PASS`, `ISSUES` or `BLOCKED`. Briefs list
  their claims first. A proved fail always means `ISSUES`. `PASS` needs at
  least one listed claim and a pass for each, and a claim with no result is
  inconclusive. Zero claims means `BLOCKED`. A `BLOCKED` coverage slice is
  reported as unverified, never as covered. A brief's claims together cover
  the slice's share of the done predicate. Aggregation recomputes each status
  from the claims in the brief, with any other proved defect still `ISSUES`,
  and uses the result whenever it differs from the reported status.
- W4-B (`w4-b.json`): `show-me-your-work`, `recall`, `automate-me`,
  `create-verification-skill`, `maintain-verification-skill`, `make-bot-ui`.
  11 files, 4 copied and 7 adapted. `scripts/log.sh` is copied with its
  upstream mode `100755`. `make-bot-ui` is adapted from Cursor
  `make-bot-ui/SKILL.md` at `2cbf58508f40de470d7490b55c51d71241928fa2` and
  substantially re-authored for Pi: a loopback-bound local page whose server
  starts one `pi -p` run per request, with the key in a local file and exposure
  or installs only on authorization. Cursor's frontmatter name `Make Bot UI`
  became `make-bot-ui`.
- W4-P (`w4-p.json`): `playbooks/{hillclimb,eval,visual-parity,authoring-a-skill,babysit,shipping,autopilot-full,autopilot-stack,multi-phase-plan,orchestrate,worktree-cleanup}.md`
  and `scripts/check-plan.mjs` (mode `100644`), all 12 adapted from mimir.
  `check-plan.mjs` changed with the multi-phase-plan skeleton, since upstream
  enforced `/loop` and repository-root markers. Upstream cursor/plugins
  `multi-phase-plan.md` still requires a rebased head with the "patch-id
  unchanged"; this pack's rebase item in the skeleton's Merge block
  (`multi-phase-plan.md:130`) defers to the patch-id rule in
  `playbooks/shipping.md` instead, and `check-plan.mjs` rejects the old
  wording. The divergence is deliberate, so a sync must not restore it.

Of the 56 new Wave 4 files, 25 are copied and 31 adapted. The C0 checkpoint
added one new file, `skills/poteto-mode/references/fan-out.md` (in `w2.json`),
the shared fan-out protocol. The package now ships 113 skill files: 48 copied,
62 adapted and 3 new. The ccb5507 pin move re-adapted `blast-radius` (it was a
mimir copy after reconcile) for the "more than one model" wording.

The remaining upstream helper scripts stay excluded in `w2.json`, each
disposition naming its replacement: `scripts/orch/*` (the Orchestrate playbook
as a depth-1 coordinator with a hand-kept store), `scripts/watch-pr/*` (the
one-shot watcher child in `fan-out.md` and stated `gh` field conditions),
`scripts/worktree-audit.sh` (`worktree_list` and per-path `worktree_remove`),
and `scripts/{bootstrap.ts,bun.lock,package.json}` (no runtime installer or
script dependencies).

The reconcile step retired every forward-reference tuple: the 93 that Wave 3
left (42 in `hub.json`, 5 in `w3-a.json`, 46 in `w3-b.json`) and the 9
cross-batch tuples the batches recorded (2 in `w4-a.json`, 1 in `w4-b.json`, 6
in `w4-p.json`). No target was deferred to Wave 5, so every fixture under
`test/fixtures/forward-references/` is empty. It also removed every
`planned W4` marker and interim "until it ships" clause from the hub, the base
playbooks, `bugbot-triage.md`, `setup-pstack`, `poteto-help`, the six Wave 3
files and the Wave 4 files that cited each other, and rewrote each route to name
the workflow's real behavior and scope-down limits. `principle-prove-it-works` remains a byte-identical copy.
`blast-radius` was a copy after reconcile; the ccb5507 pin move adapted it.

The content test now exempts fenced code blocks from the placeholder-marker and
model-name bans (inline code too for placeholder markers, and for model names
in byte-identical copies), and checks every fence with the `marked` lexer.
That let three W4-A edits made only to satisfy the old bans be reverted:
`why/references/sources/code-archaeology.md` and
`reflect/references/synthesizer.md` are byte-identical mimir copies again, and
`architect/references/runner-prompt.md` keeps upstream's `// TODO` marker while
staying adapted for its other edits.

## G6: judgment category

Judgment and prose synthesis (the how explainer, the why synthesizer, and
reflect's judgment, divergent and synthesizer lenses) uses `task:architecture`
with thinking at high or above. Reflect's tooling lens is a diversity seat.
The hardest implementation changes go to that category or to the strongest
exact catalog model with `thinking: xhigh`. The cursor pin is
`f713f14203cd6420cec13cd7c55c32d598dbab68`. The host describes `architecture`
as planning and diagnosis, and its tier guidance puts that work in the
frontier tier. `/setup-pstack` reports an unset `architecture` category;
`qa` stays off that list. A flow that will need an architecture seat checks
for a `- architecture:` bullet under the host prompt's Task-category shortlists
before launching recon or review seats; the bare word architecture elsewhere in
the prompt does not count. The tooling lens's family differs from the first
model listed for architecture under those shortlists. If that launch falls
back to a later candidate whose family matches the tooling lens, the lens is
relabeled context-isolated.

## Excluded: upstream user guide

cursor/plugins ships a user guide under `pstack/docs/guide/`: a `README.md`
index, ten chapters (`01-setup.md` through `10-recipes-and-pitfalls.md`, about
1,100 lines in all at the previous pin
`2cbf58508f40de470d7490b55c51d71241928fa2`, at
`d0ef80d86795816da932a153458c5dbe192d294e`, and at the current pin
`f713f14203cd6420cec13cd7c55c32d598dbab68`) and six `images/*.jpg`. It walks a user from setup and prompting
through design, verification, overnight runs and customization. It sits outside
the pinned `pstack/skills` root and is deliberately not ported, adapted or
packed.

Its setup and overnight chapters are Cursor-specific; the rest walks through
skills that ship here, so an adapted copy would be a large second surface to
keep in sync. Users get the equivalent from the package `README.md` (install,
setup, first task) and `/skill:poteto-help`, which routes a question to the
installed skill, playbook or principle file and gives a prompt to send. Within
the pinned `pstack/skills` root, only `poteto-help/SKILL.md` linked the guide,
with seven `../../docs/guide/*` links (to seven of the ten chapters). The
adaptation removed them (`test/fixtures/skill-provenance/w3-b.json`), and no
shipped file links a guide page.

## Q5: one forge

Origin is dropped. `playbooks/opening-a-pr.md` uses `gh` for every PR
operation, like Babysit, Shipping and the autopilots. The mimir and Cursor
sources still offer Origin; the cursor pin is
`f713f14203cd6420cec13cd7c55c32d598dbab68`. The content test bans capitalized
`Origin` in shipped skills, except make-bot-ui's backticked HTTP header field,
and the lowercase forge CLI forms; the git remote named `origin` is
unaffected.

## Pin move: cursor/plugins `ccb5507`

The cursor pin moved from `2cbf58508f40de470d7490b55c51d71241928fa2` to
`ccb5507cec1546dc88135c1139c811e6c59115ba`. The two commits in between that
touch `pstack/` are `1e56b29` (#509, poteto-help setup nudge) and `df58112`
(#511, drop Sol and retune default effort). The casualjim/pi-mimir pin stays
`f07dd981f62c9c994a5d043ede67d6c63c721454`.

Hand-ported, platform-neutral substance only:

- `skills/blast-radius/SKILL.md`: "several models" became "more than one
  model". Status is `adapted`; the destination equals the Cursor blob and is
  no longer a mimir copy.
- `skills/architect/references/runner-prompt.md`: "one of several runners"
  became "one of the parallel runners".
- `skills/poteto-help/SKILL.md`: the interrogate table says "different
  models". The G5 setup nudge is now in the pin; the Pi mapping is unchanged.
- `skills/interrogate/SKILL.md`: a rejected model prefers the same family and
  reasoning tier. Seats still follow the live catalog, one family each.

Documented skips (Cursor-only model defaults, rule file, budget ladder, or
excluded scripts):

- `architect/SKILL.md`, `arena/SKILL.md`, `how/SKILL.md`, `why/SKILL.md`,
  `reflect/SKILL.md`, `poteto-mode/SKILL.md`: hardcoded Cursor slugs and the
  default panel list (Opus `max` to `xhigh`, Sol dropped). This pack already
  uses task categories and exact catalog diversity seats.
- `setup-pstack/SKILL.md`: the budget ladder now treats `large` as the
  default and `unlimited` as `max`. This pack has no ladder.
- `poteto-mode/scripts/orch/orch.test.ts`: verifier label `sol` to `opus`.
  The orch/ledger scripts stay excluded.
- `pstack/docs/guide/01-setup.md` and `04-design.md`: excluded under Q1.
- `pstack/README.md`: unscoped. `pstack/.cursor-plugin/plugin.json`:
  out of scope. `pstack/LICENSE`: unchanged.

No new agents or docs file is in the not-yet-carried state.

## Skipped: Benny

cursor/plugins `pstack/automations/benny/**` is not ported. It lies outside
the pinned `pstack/skills` root. Benny is two Cursor Automations triggered
by Slack posts: one triages a report and may file a tracker ticket, and the
other reproduces the bug and may open a draft PR. Running it needs an
external trigger or scheduler, which conflicts with this pack's no-scheduler
rule, and it depends on Cursor Automations, Slack posting and tracker writes.
Four of its methodology gates are adapted into
`skills/poteto-mode/playbooks/bug-fix.md` (Q2): confirm the cause is in code
this repo or team owns, verify an existing fix instead of writing a competing
one, stop rather than race another person's claim on the fix, and reproduce
twice before and after the fix. The sources are
`reproduce-and-fix-issues/SKILL.md`,
`reproduce-and-fix-issues/references/verify-existing-fix.md` and
`triage-issue-reports/SKILL.md`, read at
`d0ef80d86795816da932a153458c5dbe192d294e` and byte-identical at the pin. The
bug-fix entry in `w2.json` records which steps changed.

## Pin move: cursor/plugins `f713f14`

The cursor pin moved from `ccb5507cec1546dc88135c1139c811e6c59115ba` to
`f713f14203cd6420cec13cd7c55c32d598dbab68`. About 79 commits sit between those
pins; the ones that change in-scope pstack methodology are the token-cut and
principle restatements (`00b14f1`, `08bd59b`, `e5136d8`, `99743e9`),
verification readiness (`c49b37a`), fence-aware plan checks (`87c8103`),
subagent-effort and playbook cuts (`ce649c0`), and the new skills
`in-your-own-words`, `ketchup` and `sharpen`. The casualjim/pi-mimir pin stays
`f07dd981f62c9c994a5d043ede67d6c63c721454`.

Hand-ported, platform-neutral substance only:

- `skills/poteto-mode/scripts/check-plan.mjs`: CommonMark fence pairing so
  nested fences are not treated as prose. PROGRAM_MARKERS, the
  unchanged-patch-id scan and git mode `100644` stay. Upstream's `/loop 1h`
  and `git show origin/main:` markers were not restored.
- `skills/correct/SKILL.md`: step 3 now fails a test that still passes when
  the checked behavior breaks, or that fails when only the internals change.
  Destination equals the Cursor blob; status is `adapted`.
- `skills/create-verification-skill/SKILL.md`: launch readiness means usable
  from an empty data dir; a missing seed precondition fails the journey;
  a stand-in proof lists unverified setup steps. `.pi/skills` paths stay.
- `skills/principle-attack-the-premise/SKILL.md`: write the premise down and
  test it; follow the evidence; remove the condition. Pi backticked paths stay.
- `skills/principle-fix-root-causes/SKILL.md`: fault versus symptom; a guard
  is a fix only when the state is legitimate; cheap always-on signal after a
  deep dig. Destination equals the Cursor blob; was a mimir copy.
- `skills/principle-make-operations-idempotent/SKILL.md`: derive steps from
  existing state; judge leftover artifacts as stale by crash-surviving
  evidence. Destination equals the Cursor blob; was a mimir copy.
- `skills/principle-test-behavior-not-implementation/SKILL.md`: two imagined
  edits (break behavior / change internals) replace the `undefined`-import
  heuristic. Destination equals the Cursor blob; was a mimir copy.
- `skills/poteto-mode/SKILL.md`: the three principle summaries above follow
  the ported leaves.
- `skills/poteto-mode/playbooks/opening-a-pr.md`: as a parent merges, move
  its child onto trunk per `playbooks/shipping.md` step 4.

Documented skips (Cursor-only tools, token cuts that only delete examples,
or excluded scripts):

- Hub and most playbooks: `poteto-agent`, `subagent_type`, hardcoded slugs,
  `cursor-team-kit`, `/loop`, Origin, Graphite, cloud agents, ketchup replies
  on Autopilot-full/stack, shipping rewrite (G1 allowlist stays).
- `multi-phase-plan.md`: upstream "full swarm once" plus `poteto-agent`.
  This pack keeps per-push swarm markers that `check-plan.mjs` still requires,
  and still defers rebase/patch-id to `shipping.md`.
- Copied mimir leaves whose Cursor delta only deleted sections or flattened
  headings (encode-lessons, exhaust-the-design-space, laziness-protocol,
  migrate-callers, most why/how/interrogate/reflect references).
- `principle-type-system-discipline`: Cursor deleted most patterns; dest
  kept. Flagged for G.
- `pstack/docs/guide/**` and `pstack/agents/poteto-agent.md`: excluded.
- `pstack/README.md`: unscoped. `pstack/.cursor-plugin/plugin.json` and
  `pstack/plugin.json`: out of scope / unscoped. `pstack/LICENSE`: unchanged.

Flagged, not shipped (recommendation: later Pi-authored leaves if G wants
them; do not copy Cursor slash-command rows as-is):

- `in-your-own-words`, `ketchup`, `sharpen`
- `poteto-mode/scripts/check-plan.test.ts` (bun tests; this pack already
  checks `check-plan.mjs` in `test/scripts.test.ts`)

No new agents or docs file is in the not-yet-carried state.
