create-pmos 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -232,6 +232,17 @@ npx create-pmos@latest --update
232
232
 
233
233
  Refreshes the skills, concepts, and scripts only. Your records — `state/`, `planning/`, `okf/product/` — are yours, and an update never touches them. `pmos/KIT-VERSION` always says exactly what you're running.
234
234
 
235
+ ## What's new in 0.33.0
236
+
237
+ **Three shipped documents stop telling you to do things that were never possible in your repo.** Run `npx create-pmos@latest --update`. No behaviour changes — this is a correctness release for the instructions the kit hands your agent.
238
+
239
+ - **`SKILL-FORMAT.md` no longer sends you after a seed you never had.** When you edited a `.skill`, it told you to "regenerate the seed in the same PR" and to grep an RLS test suite for pinned metadata. Those instructions described a hosted mirror table that only ever existed in PMOS's own backend — never in a vendored kit. That backend has now been removed entirely, and the section is rewritten to say what is actually true for you: **the frontmatter on disk is the only copy**, which is why the whole class of mirror-drift bug it warned about cannot reach you. The trade is stated rather than glossed: nothing validates your skill metadata, so a wrong registry key is simply wrong.
240
+ - **`ingest-repo` and `harness-refine` stop linking at reference docs your kit does not contain.** Both pointed at PMOS's hosted data-model and monitoring-view docs. `ingest-repo` now describes its write path as what it is in file mode — drafts into your own repo, approved in PR review — and `harness-refine` reads its evidence from `discoveries.md` and your run log instead of from SQL views.
241
+
242
+ **Why now.** PMOS removed its own hosted backend in this release's parent change, and these three files were the places where instructions written for that backend had leaked into what your kit ships. None of it was ever reachable from a kit install, so nothing was broken — it was wrong documentation, and it is now right.
243
+
244
+ **Unchanged:** the payload's skill set, the state layout, every gate, and the zero-network guarantee. Your records are untouched, as always.
245
+
235
246
  ## What's new in 0.32.0
236
247
 
237
248
  **The PM's own accept button now writes through the guarded writer, instead of appending to the acceptance log directly.** Run `npx create-pmos@latest workspace`; the version bump means an existing install auto-upgrades.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-pmos",
3
- "version": "0.32.0",
3
+ "version": "0.33.0",
4
4
  "description": "Scaffold the PMOS portable kit — run the PMOS product-management workflow (initiative → lane-fit spec → contract → build → three gates, with work-type lanes for features, research, maintenance, incidents, and content) entirely inside your own repo, with all state as git-versioned files. Includes `workflow-sweep`, which audits the state every board derives from and separates real defects from work you simply have not done. `create-pmos workspace` also installs + launches the local Terminal Workspace GUI. No database, no network, no telemetry.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -1,3 +1,3 @@
1
- kernel-source: pmos@6d5951a
2
- assembled: 2026-08-05
1
+ kernel-source: pmos@51a8275
2
+ assembled: 2026-08-06
3
3
  mode: vendor
@@ -6,23 +6,17 @@ timestamp: 2026-07-23
6
6
 
7
7
  # SKILL-FORMAT.md — Required Format for PMOS Skills
8
8
 
9
- This document defines the **required** structure for every `.skill` file in PMOS. It is the
10
- authority that all seed skills (`prd`, `eval-rubric`, `okr`, `strategic-brief`, `source-to-concept`)
11
- and every future skill must conform to.
9
+ This document defines the **required** structure for every `.skill` file in PMOS. It is the authority that all seed skills (`prd`, `eval-rubric`, `okr`, `strategic-brief`, `source-to-concept`) and every future skill must conform to.
12
10
 
13
11
  ## Why a fixed format
14
12
 
15
- Skills are how PMOS gives an agent procedural competence on demand without flooding its context.
16
- The format exists to make that economical: cheap to keep many skills available, expensive to load
17
- only the one in use. The mechanism is **three-level progressive disclosure**.
13
+ Skills are how PMOS gives an agent procedural competence on demand without flooding its context. The format exists to make that economical: cheap to keep many skills available, expensive to load only the one in use. The mechanism is **three-level progressive disclosure**.
18
14
 
19
15
  ## The three levels
20
16
 
21
17
  ### Level 1 — Frontmatter (always loaded)
22
18
 
23
- YAML frontmatter containing **only `name` and `description`**. This is pre-loaded for **all** skills
24
- at agent startup, so it must stay small — it is the *trigger signal* the agent uses to decide
25
- whether the skill is relevant.
19
+ YAML frontmatter containing **only `name` and `description`**. This is pre-loaded for **all** skills at agent startup, so it must stay small — it is the *trigger signal* the agent uses to decide whether the skill is relevant.
26
20
 
27
21
  ```yaml
28
22
  ---
@@ -32,189 +26,96 @@ description: Write a Product Requirements Document for an initiative. Use when a
32
26
  ```
33
27
 
34
28
  Rules:
29
+
35
30
  - `name` — lowercase, matches the filename stem (`prd` → `prd.skill`). **Required.**
36
- - `description` — one or two sentences. State **what** the skill does and **when** to use it.
37
- This is the only text the agent sees for an unloaded skill, so the "when" is what makes it fire.
38
- **Required.**
39
- - `maturity_mode` — **optional**. Present **only** on skills that are not yet active (e.g. `bootstrap`);
40
- omit it entirely on active skills. It lives at L1 because "is this skill executable yet?" is an
41
- execution-gating signal a loader/CI must be able to read without parsing the body. Values: `bootstrap`
42
- (specified, non-executable) → graduates to active (key removed) by a PM decision in `DECISIONS.md`.
43
- - **Optional Phase-B registry metadata (D49)** — a skill may also carry `version`, `owner`, `risk`,
44
- `category`, and `scope`. These are **optional**, producer-defined registry fields that
45
- the resync generator [`gen_okf_mirror_seed.py`](/supabase/gen_okf_mirror_seed.py) sources into the `skills` table so the skill
46
- library can group/version/scope skills. A skill with only `name` + `description` is still fully
47
- conformant (e.g. `build-skills/evaluator.skill`); carry the registry keys on durable `skills/core/`
48
- entries for consistency with their siblings.
49
- - `lifecycle` — **optional**, in the same D49 registry slot. Values: `active` (the default when the
50
- key is absent) | `deprecated`. A deprecated skill **stays on disk and stays in the registry** —
51
- `get_skill` returns it in full with a `deprecated_notice` so a retrieving agent is *told* not to
52
- start new work on it. Retirement is a state you can read; deletion is a separate act (see the
53
- invariant below). Distinct from `maturity_mode`, which is about a skill not yet executable —
54
- `lifecycle` is about one on its way out.
55
- - **No other L1 keys.** Beyond the required `name` + `description`, the optional `maturity_mode`, and the
56
- optional Phase-B registry keys above, procedural detail does not belong in L1 — it lives in the body.
57
-
58
- ### The disk ⇄ registry invariant (enforced in CI)
59
-
60
- **Every `.skill` on disk is seeded, and every seeded skill exists on disk — exactly.** The `skills`
61
- table is a *mirror*, and `get_skill` serves it to agents in other people's repos, so a mirror that
62
- has quietly drifted is a wrong answer delivered confidently.
63
-
64
- The `REGISTRY` check in [`check_okf_drift.py`](/supabase/check_okf_drift.py) fails the build on:
65
- adding or renaming a `.skill` without regenerating the seed; a seeded skill whose file is gone; and
66
- any registry-metadata value that disagrees with the file's own frontmatter. That last one is not
67
- theoretical — a generator whose INSERT omitted the Phase-B columns silently nulled
68
- `version/owner/risk/category/scope` for **all 21 skills for about three weeks** in 2026-07, and was
69
- caught only by an incidental version pin in an RLS test. So:
70
-
71
- > **When you add, rename, delete, or edit the frontmatter of a `.skill`, regenerate the seed in the
72
- > same PR** ([okf-sync playbook](/okf/core/playbooks/okf-sync.md)) — and sweep `supabase/tests/` for
73
- > pins on that skill's registry metadata before you do (the prd-grilling F1 rule).
31
+ - `description` — one or two sentences. State **what** the skill does and **when** to use it. This is the only text the agent sees for an unloaded skill, so the "when" is what makes it fire. **Required.**
32
+ - `maturity_mode` — **optional**. Present **only** on skills that are not yet active (e.g. `bootstrap`); omit it entirely on active skills. It lives at L1 because "is this skill executable yet?" is an execution-gating signal a loader/CI must be able to read without parsing the body. Values: `bootstrap` (specified, non-executable) → graduates to active (key removed) by a PM decision in `DECISIONS.md`.
33
+ - **Optional Phase-B registry metadata (D49)** — a skill may also carry `version`, `owner`, `risk`, `category`, and `scope`. These are **optional**, producer-defined registry fields that the workspace's skill library reads to group/version/scope skills. They used to be sourced into a hosted `skills` table by a resync generator; [D66](/DECISIONS.md) removed that mirror along with the backend, so the frontmatter on disk is now the only registry there is. A skill with only `name` + `description` is still fully conformant (e.g. `build-skills/evaluator.skill`); carry the registry keys on durable `skills/core/` entries for consistency with their siblings.
34
+ - `lifecycle` — **optional**, in the same D49 registry slot. Values: `active` (the default when the key is absent) | `deprecated`. A deprecated skill **stays on disk** — a reader gets it in full and is *told* not to start new work on it. Retirement is a state you can read; deletion is a separate act (see the invariant below). Distinct from `maturity_mode`, which is about a skill not yet executable — `lifecycle` is about one on its way out.
35
+ - **No other L1 keys.** Beyond the required `name` + `description`, the optional `maturity_mode`, and the optional Phase-B registry keys above, procedural detail does not belong in L1 — it lives in the body.
36
+
37
+ ### The disk ⇄ registry invariant — retired with the mirror (D66)
38
+
39
+ There used to be a second copy of every skill: a hosted `skills` table that `get_skill` served to agents in other people's repos. A `REGISTRY` check in the drift gate held the two in sync, because a mirror that has quietly drifted is a wrong answer delivered confidently — and it was not theoretical. A generator whose INSERT omitted the Phase-B columns silently nulled `version/owner/risk/category/scope` for **all 21 skills for about three weeks** in 2026-07, caught only by an incidental version pin in an RLS test.
40
+
41
+ [D66](/DECISIONS.md) deleted the mirror, the generator and that check together with the hosted backend. **The file on disk is now the only copy**, which is why the class of bug above cannot recur: there is nothing left to disagree with. The cost is that skill metadata is no longer validated by CI at all — if a registry key is wrong in the frontmatter, it is simply wrong. Read the frontmatter as authoritative and keep it accurate by hand.
74
42
 
75
43
  ### Level 2 — SKILL.md body (loaded when relevant)
76
44
 
77
- The body below the frontmatter holds the **full procedural detail**: steps, heuristics, required
78
- fields, gate criteria, examples. The agent reads this only after Level 1 has signalled relevance.
45
+ The body below the frontmatter holds the **full procedural detail**: steps, heuristics, required fields, gate criteria, examples. The agent reads this only after Level 1 has signalled relevance.
79
46
 
80
- This is where the actual "how to do the task" lives. Write it at optimal altitude — concrete
81
- heuristics that guide judgment, not a brittle decision tree and not a vague mandate.
47
+ This is where the actual "how to do the task" lives. Write it at optimal altitude — concrete heuristics that guide judgment, not a brittle decision tree and not a vague mandate.
82
48
 
83
49
  ### Level 3 — Linked sub-files (loaded on demand)
84
50
 
85
- Rare sub-cases, long reference tables, or edge-case procedures live in **separate files**,
86
- referenced **by filename** from the Level 2 body. The agent reads them only when the body points it
87
- there for the specific case in hand.
51
+ Rare sub-cases, long reference tables, or edge-case procedures live in **separate files**, referenced **by filename** from the Level 2 body. The agent reads them only when the body points it there for the specific case in hand.
88
52
 
89
53
  Example reference from a body: *"For multi-product PRDs, follow `prd-multiproduct.md`."*
90
54
 
91
- Use Level 3 to keep Level 2 focused. If a section applies to <20% of runs, it is a Level 3
92
- candidate.
55
+ Use Level 3 to keep Level 2 focused. If a section applies to <20% of runs, it is a Level 3 candidate.
93
56
 
94
57
  ## Quality — what makes a skill good (not just well-formed)
95
58
 
96
- The three levels are *structure*. This section is the *bar*. A skill can be perfectly structured and
97
- still be junk; these are the tests that keep it worth its context.
59
+ The three levels are *structure*. This section is the *bar*. A skill can be perfectly structured and still be junk; these are the tests that keep it worth its context.
98
60
 
99
61
  ### Predictability is the root virtue
100
62
 
101
- A skill exists to **wring determinism out of a stochastic system**: it makes the agent take the same
102
- *process* every run — not produce the same *output* (an evaluator should predictably *judge*; its
103
- words vary, its behavior doesn't). Every rule below serves predictability; cost and readability are
104
- symptoms of it, not rival goals. When unsure whether a line belongs, ask: *does it make the agent's
105
- process more repeatable?* If not, cut it.
63
+ A skill exists to **wring determinism out of a stochastic system**: it makes the agent take the same *process* every run — not produce the same *output* (an evaluator should predictably *judge*; its words vary, its behavior doesn't). Every rule below serves predictability; cost and readability are symptoms of it, not rival goals. When unsure whether a line belongs, ask: *does it make the agent's process more repeatable?* If not, cut it.
106
64
 
107
65
  ### Per-step completion criteria
108
66
 
109
- Every procedural step ends on a **checkable done-condition** — the agent must be able to tell done
110
- from not-done. Where it matters, make the criterion **exhaustive**, not vague: *"every living mirror
111
- of the rule accounted for"*, not *"produce a change list"*. A fuzzy criterion invites **premature
112
- completion** — the agent stops when it feels done, not when it is. The
113
- [semantic-pass rule](/build-skills/evaluator.skill) ("enumerate the live-doc set, then read each for
114
- meaning — a grep is evidence, never done") is the exemplar this generalizes: it exists because a
115
- vague "sweep it" criterion let real stale mirrors survive five "clean" passes.
67
+ Every procedural step ends on a **checkable done-condition** — the agent must be able to tell done from not-done. Where it matters, make the criterion **exhaustive**, not vague: *"every living mirror of the rule accounted for"*, not *"produce a change list"*. A fuzzy criterion invites **premature completion** — the agent stops when it feels done, not when it is. The [semantic-pass rule](/build-skills/evaluator.skill) ("enumerate the live-doc set, then read each for meaning — a grep is evidence, never done") is the exemplar this generalizes: it exists because a vague "sweep it" criterion let real stale mirrors survive five "clean" passes.
116
68
 
117
69
  ### Pruning — hunt these named failure modes
118
70
 
119
71
  A skill without a pruning discipline only ever grows. Hunt, sentence by sentence:
120
72
 
121
- - **No-op** — a line the model already obeys by default, so you pay context to say nothing. Test:
122
- does it change behavior vs. the default? *"Be thorough"* to an already-thorough agent is a no-op;
123
- the fix is a stronger word (a leading word), not more words.
124
- - **Sediment** — stale layers that settle because adding feels safe and removing feels risky. The
125
- default fate of any skill without this discipline.
126
- - **Sprawl** — simply too long, even when every line is live. Cure: disclose reference to Level 3;
127
- split by branch.
128
- - **Duplication** — the same meaning in more than one place. Costs tokens and maintenance, and
129
- inflates a meaning's apparent importance. Keep one source of truth.
130
- - **Negation** — steering by prohibition backfires: *"don't think of an elephant"* names the
131
- elephant. State the **positive** target behavior; keep a prohibition only as a hard guardrail you
132
- can't phrase positively, and pair it with what to do instead.
133
-
134
- **This is the checklist the quarterly harness-assumption review runs** (DECISIONS.md cadence): the
135
- review's question — *what scaffolding can be removed because the model now handles it natively?* — is
136
- the no-op and sediment hunt applied across every skill.
73
+ - **No-op** — a line the model already obeys by default, so you pay context to say nothing. Test: does it change behavior vs. the default? *"Be thorough"* to an already-thorough agent is a no-op; the fix is a stronger word (a leading word), not more words.
74
+ - **Sediment** — stale layers that settle because adding feels safe and removing feels risky. The default fate of any skill without this discipline.
75
+ - **Sprawl** — simply too long, even when every line is live. Cure: disclose reference to Level 3; split by branch.
76
+ - **Duplication** — the same meaning in more than one place. Costs tokens and maintenance, and inflates a meaning's apparent importance. Keep one source of truth.
77
+ - **Negation** — steering by prohibition backfires: *"don't think of an elephant"* names the elephant. State the **positive** target behavior; keep a prohibition only as a hard guardrail you can't phrase positively, and pair it with what to do instead.
78
+
79
+ **This is the checklist the quarterly harness-assumption review runs** (DECISIONS.md cadence): the review's question — *what scaffolding can be removed because the model now handles it natively?* — is the no-op and sediment hunt applied across every skill.
137
80
 
138
81
  ### Leading words
139
82
 
140
- A **leading word** is a compact concept already in the model's pretraining that anchors a whole
141
- region of behavior in one token — *tight* (loop), *watermelon*, *default-to-refute*, *silent drift*,
142
- *Summary Gate*. Repeated across a skill, it accumulates a distributed definition and recruits priors
143
- the model already holds. A triad spelled out at three sites (*"fast, deterministic, low-overhead"*)
144
- is begging to **collapse** into one word (*tight*). You win twice: fewer tokens, and a sharper hook
145
- the agent hangs its behavior on. Hunt every skill for restatements a leading word retires.
83
+ A **leading word** is a compact concept already in the model's pretraining that anchors a whole region of behavior in one token — *tight* (loop), *watermelon*, *default-to-refute*, *silent drift*, *Summary Gate*. Repeated across a skill, it accumulates a distributed definition and recruits priors the model already holds. A triad spelled out at three sites (*"fast, deterministic, low-overhead"*) is begging to **collapse** into one word (*tight*). You win twice: fewer tokens, and a sharper hook the agent hangs its behavior on. Hunt every skill for restatements a leading word retires.
146
84
 
147
85
  ### Invocation (advisory)
148
86
 
149
- The Agent-Skills world splits skills by *who can invoke them* — **model-invoked** (description always
150
- loaded, agent can auto-fire it, pays permanent context load) vs **user-invoked** (invisible to the
151
- agent, human-only, zero context load). PMOS's model differs — skills are **retrieved on demand**
152
- (see the retrieval rationale under *Ecosystem compatibility* below), so Level-1 frontmatter is the
153
- always-available trigger and there is no auto-fire to gate. Treat the axis as an authoring lens —
154
- *is this skill's description earning its keep as an always-available trigger?* — **not** a required
155
- field. (A formal `invocation:` key is a deferred registry question, not part of this format.)
87
+ The Agent-Skills world splits skills by *who can invoke them* — **model-invoked** (description always loaded, agent can auto-fire it, pays permanent context load) vs **user-invoked** (invisible to the agent, human-only, zero context load). PMOS's model differs — skills are **retrieved on demand** (see the retrieval rationale under *Ecosystem compatibility* below), so Level-1 frontmatter is the always-available trigger and there is no auto-fire to gate. Treat the axis as an authoring lens — *is this skill's description earning its keep as an always-available trigger?* — **not** a required field. (A formal `invocation:` key is a deferred registry question, not part of this format.)
156
88
 
157
89
  ## Ecosystem compatibility — the Agent Skills standard
158
90
 
159
- The open **Agent Skills standard** (Claude Code, Codex, and other harnesses) packages a skill as a
160
- **directory** `<skill-name>/SKILL.md` with YAML frontmatter (`name`, `description`, optionally
161
- `license`, `allowed-tools`) plus bundled sub-files. It **validates PMOS's three-level disclosure** —
162
- same frontmatter-as-trigger, body-as-procedure, sub-files-on-demand shape.
91
+ The open **Agent Skills standard** (Claude Code, Codex, and other harnesses) packages a skill as a **directory** `<skill-name>/SKILL.md` with YAML frontmatter (`name`, `description`, optionally `license`, `allowed-tools`) plus bundled sub-files. It **validates PMOS's three-level disclosure** — same frontmatter-as-trigger, body-as-procedure, sub-files-on-demand shape.
163
92
 
164
- PMOS **diverges** deliberately: skills are flat `<name>.skill` files, **not** `<name>/SKILL.md`
165
- directories. The rationale is PMOS's retrieval model — skills are fetched on demand via `get_skill`
166
- or referenced from AGENTS.md, **not** auto-discovered by a harness scanning for `SKILL.md`, so the
167
- directory ceremony buys nothing here. The **mapping is lossless**, which is what keeps the divergence
168
- cheap:
93
+ PMOS **diverges** deliberately: skills are flat `<name>.skill` files, **not** `<name>/SKILL.md` directories. The rationale is PMOS's retrieval model — skills are fetched on demand via `get_skill` or referenced from AGENTS.md, **not** auto-discovered by a harness scanning for `SKILL.md`, so the directory ceremony buys nothing here. The **mapping is lossless**, which is what keeps the divergence cheap:
169
94
 
170
95
  - a `<name>.skill` file **≅** a standard `SKILL.md` body;
171
96
  - PMOS's required `name` + `description` frontmatter is **already** the standard's required pair;
172
97
  - Level-3 sub-files **≅** the standard's bundled files.
173
98
 
174
- (One nuance for the follow-on below: PMOS's *optional* D49 registry keys —
175
- `version`/`owner`/`risk`/`category`/`scope`/`lifecycle` — are top-level custom keys; the standard would expect
176
- producer-defined extensions under a `metadata:` map. The **core** shape is lossless; relocating the
177
- registry keys belongs to the native-format packaging follow-on, not this flat form.)
99
+ (One nuance for the follow-on below: PMOS's *optional* D49 registry keys — `version`/`owner`/`risk`/`category`/`scope`/`lifecycle` — are top-level custom keys; the standard would expect producer-defined extensions under a `metadata:` map. The **core** shape is lossless; relocating the registry keys belongs to the native-format packaging follow-on, not this flat form.)
178
100
 
179
101
  ### Kit native-format packaging (E6 — shipped)
180
102
 
181
- The **kit** now ships every skill in native Agent-Skills directory form *as well as* the flat file —
182
- a lossless portability layer, generated **from** the flat `.skill` at build time (never
183
- hand-authored, so it cannot drift from its source). For each shipped skill, `kit/build-kit.sh` emits
184
- `skills-native/<name>/SKILL.md` where:
185
-
186
- - the directory name **equals** the frontmatter `name` (the standard's hard rule), and required
187
- `name` + `description` are present;
188
- - PMOS's D49 registry keys (`version`/`owner`/`risk`/`category`/`scope`/`lifecycle`) are relocated
189
- **under a `metadata:` map with a `pmos-` prefix** — the standard's producer-extension slot — never
190
- as top-level custom keys, so a conformant runtime ignores them cleanly;
191
- - a **fail-closed conformance self-check** in `build-kit.sh` aborts the build on any violation
192
- (name≠dirname, missing required field, or a top-level custom key), the same posture as the
193
- containment check.
194
-
195
- The flat `.skill` files remain the file-mode source of truth (the AGENTS.md state adapter references
196
- `pmos/skills/<name>.skill`); the native tree is the ecosystem-portable mirror. **Still a named
197
- follow-on (not built here):** wiring `create-pmos` to install the native tree into a runtime's
198
- auto-discovery locations (`.claude/skills/`, `.agents/skills/`). E6 delivers the conformant
199
- *packaging*; the *install location* is a separate change, revisited when native-discovery demand in
200
- kit repos is proven.
103
+ The **kit** now ships every skill in native Agent-Skills directory form *as well as* the flat file — a lossless portability layer, generated **from** the flat `.skill` at build time (never hand-authored, so it cannot drift from its source). For each shipped skill, `kit/build-kit.sh` emits `skills-native/<name>/SKILL.md` where:
104
+
105
+ - the directory name **equals** the frontmatter `name` (the standard's hard rule), and required `name` + `description` are present;
106
+ - PMOS's D49 registry keys (`version`/`owner`/`risk`/`category`/`scope`/`lifecycle`) are relocated **under a `metadata:` map with a `pmos-` prefix** — the standard's producer-extension slot — never as top-level custom keys, so a conformant runtime ignores them cleanly;
107
+ - a **fail-closed conformance self-check** in `build-kit.sh` aborts the build on any violation (name≠dirname, missing required field, or a top-level custom key), the same posture as the containment check.
108
+
109
+ The flat `.skill` files remain the file-mode source of truth (the AGENTS.md state adapter references `pmos/skills/<name>.skill`); the native tree is the ecosystem-portable mirror. **Still a named follow-on (not built here):** wiring `create-pmos` to install the native tree into a runtime's auto-discovery locations (`.claude/skills/`, `.agents/skills/`). E6 delivers the conformant *packaging*; the *install location* is a separate change, revisited when native-discovery demand in kit repos is proven.
201
110
 
202
111
  ### Per-skill eval harness (E8 — convention shipped, benchmark deferred)
203
112
 
204
- A skill may carry an **opt-in** eval file at `skills/evals/<name>.evals.json` (mapping to the
205
- standard's `<name>/evals/evals.json` in native packaging), adopting the skill-creator harness shape:
113
+ A skill may carry an **opt-in** eval file at `skills/evals/<name>.evals.json` (mapping to the standard's `<name>/evals/evals.json` in native packaging), adopting the skill-creator harness shape:
206
114
 
207
- - **`description_triggers`** — `should_fire` / `should_not_fire` prompt lists that test whether the
208
- L1 description fires on the right requests and stays silent on the wrong ones (trigger-accuracy).
209
- - **`cases`** — each a `{ name, prompt, expect, with_without }`, where `expect` is an **outcome
210
- property** a grader checks (never a script) and `with_without` toggles whether the case is meant
211
- for with-vs-without-the-skill benchmarking.
115
+ - **`description_triggers`** — `should_fire` / `should_not_fire` prompt lists that test whether the L1 description fires on the right requests and stays silent on the wrong ones (trigger-accuracy).
116
+ - **`cases`** — each a `{ name, prompt, expect, with_without }`, where `expect` is an **outcome property** a grader checks (never a script) and `with_without` toggles whether the case is meant for with-vs-without-the-skill benchmarking.
212
117
 
213
- `scripts/check_skill_evals.py` (run in the `okf-drift` job) validates the **shape** of any present
214
- eval file and that it names a real skill. It **never runs a benchmark** — actually scoring
215
- with-vs-without needs labeled outcomes + compute and is **deferred** (there is no negative class
216
- yet); running models in CI would make the gate nondeterministic. The convention and a worked example
217
- (`skills/evals/prd.evals.json`) ship now; the verdict "this skill measurably helps" does not.
118
+ `scripts/check_skill_evals.py` (run in the `okf-drift` job) validates the **shape** of any present eval file and that it names a real skill. It **never runs a benchmark** — actually scoring with-vs-without needs labeled outcomes + compute and is **deferred** (there is no negative class yet); running models in CI would make the gate nondeterministic. The convention and a worked example (`skills/evals/prd.evals.json`) ship now; the verdict "this skill measurably helps" does not.
218
119
 
219
120
  ## File naming
220
121
 
@@ -232,9 +133,7 @@ yet); running models in CI would make the gate nondeterministic. The convention
232
133
 
233
134
  A skill is well-formed when:
234
135
 
235
- 1. Level 1 frontmatter has `name` + `description` (both required), plus optionally `maturity_mode` (on
236
- non-active skills) and the Phase-B registry keys `version`/`owner`/`risk`/`category`/`scope`/
237
- `lifecycle` (D49); no other L1 keys.
136
+ 1. Level 1 frontmatter has `name` + `description` (both required), plus optionally `maturity_mode` (on non-active skills) and the Phase-B registry keys `version`/`owner`/`risk`/`category`/`scope`/ `lifecycle` (D49); no other L1 keys.
238
137
  2. `name` matches the filename stem.
239
138
  3. `description` states both what the skill does and when to use it.
240
139
  4. The body (Level 2) carries the full procedure and is self-sufficient for the common case.
@@ -242,13 +141,9 @@ A skill is well-formed when:
242
141
 
243
142
  **Quality bar** (the "good", not just "well-formed" — see Quality above):
244
143
 
245
- 6. **Predictability served** — every line makes the agent's *process* more repeatable; cut what
246
- doesn't.
247
- 7. **Per-step completion criteria** — each procedural step ends on a checkable (and where it matters
248
- exhaustive) done-condition, not a vague "do X".
249
- 8. **Pruned** — no no-ops, no sediment, no duplication; prohibitions phrased as positive targets;
250
- sprawl disclosed to Level 3.
144
+ 6. **Predictability served** — every line makes the agent's *process* more repeatable; cut what doesn't.
145
+ 7. **Per-step completion criteria** — each procedural step ends on a checkable (and where it matters exhaustive) done-condition, not a vague "do X".
146
+ 8. **Pruned** — no no-ops, no sediment, no duplication; prohibitions phrased as positive targets; sprawl disclosed to Level 3.
251
147
  9. **Leading words** — restated qualities collapsed into pretrained tokens where one earns its keep.
252
148
 
253
- All seed skills are authored against this checklist; the quarterly harness-assumption review re-runs
254
- items 6–9 across every skill.
149
+ All seed skills are authored against this checklist; the quarterly harness-assumption review re-runs items 6–9 across every skill.
@@ -87,8 +87,9 @@ field's "agents improving their own tools" loop while staying at the **L3 ceilin
87
87
  bounding decision [D47](/okf/products/pmos/adr/d47-self-refining-harness.md).
88
88
  - The sibling detect→draft→PR loop: [okf-author](/build-skills/okf-author.skill),
89
89
  [D42](/okf/products/pmos/adr/d42-okf-author-on-demand.md).
90
- - The evidence surfaces: [v_friction_recurrence](/okf/products/pmos/references/metrics/v_friction_recurrence.md),
91
- [v_context_budget](/okf/products/pmos/references/metrics/v_context_budget.md),
90
+ - The evidence surfaces: recurring friction themes and self-reported context pressure, read from
91
+ file-mode state ([discoveries.md](/discoveries.md) and `runs.jsonl`; the hosted
92
+ `v_friction_recurrence` / `v_context_budget` views went with the backend in D66) plus
92
93
  [eval-calibration.md](/planning/evals/eval-calibration.md).
93
94
  - The cadence it serves: [D23](/okf/products/pmos/adr/d23-quarterly-cadence.md) (harness-assumption
94
95
  review); the altitude standard: [agent-harness](/okf/core/concepts/agent-harness.md).
@@ -13,8 +13,8 @@ scope: read:tenant-repo, write:tenant-okf-drafts, write:product_repos
13
13
  This skill is the **existing-repo on-ramp**: a PM arrives with a product that already ships and already
14
14
  has a repo, and PMOS needs knowledge of it so a build agent doesn't cold-start on every run (re-deriving
15
15
  the stack, assuming wrong, producing work the PM must heavily correct — the north-star cost). It is the
16
- **inverse of [analyze-product-infra](/build-skills/analyze-product-infra.skill)** (which goes PRD →
17
- what the product *needs*): ingest-repo goes **code → what the product *is***. It emits a **draft** OKF
16
+ **inverse** of deriving an infrastructure spec from a PRD (PRD → what the product *needs*):
17
+ ingest-repo goes **code → what the product *is***. It emits a **draft** OKF
18
18
  reference layer + a repo registration and then **stops for PM approval**.
19
19
 
20
20
  > **Format:** three-level progressive disclosure ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)). L1
@@ -101,18 +101,19 @@ reference layer + a repo registration and then **stops for PM approval**.
101
101
  - **`register_product_repo` semantics:** designed for provisioning output — here `app_surface`/
102
102
  `backend_model` are *observed*, a usage-only difference (no schema change); note it.
103
103
  - **B5 measurability:** the value thesis is "warm start → fewer corrections"; the first post-ingest
104
- build run should retrieve these concepts (B5 > 0 for the tenant, via
105
- [v_knowledge_reuse](/okf/products/pmos/references/metrics/v_knowledge_reuse.md) — now written by
106
- get_okf_concepts FETCH). That real correction-delta, not the doc count, is the win.
104
+ build run should retrieve these concepts. That real correction-delta, not the doc count, is the
105
+ win — measure it as corrections on the first post-ingest run versus the cold-start baseline.
106
+ (The hosted `v_knowledge_reuse` view that automated this count went with the backend in D66.)
107
107
 
108
108
  ## Level 3 — references
109
109
 
110
- - The write path + PM gate: [okf-author](/build-skills/okf-author.skill) Mode B, [D37](/okf/products/pmos/adr/d37-tenant-okf-db-native.md).
110
+ - The write path + PM gate: write the docs into the product's own repo as drafts and let the PM
111
+ approve them in PR review — the file-mode form of draft→approved. (D37's database-native tenant OKF
112
+ and its `save_okf_doc` tool were retired by [D66](/DECISIONS.md).)
111
113
  - The ledger method: [design-loop concept](/okf/core/concepts/design-loop.md),
112
114
  [design-reconcile](/skills/core/design-reconcile.skill), [watermelon-flag](/okf/core/concepts/watermelon-flag.md).
113
115
  - Extraction discipline: [source-to-concept](/skills/core/source-to-concept.skill).
114
- - Scan location: [D51](/okf/products/pmos/adr/d51-scan-location.md). Registry:
115
- [register_product_repo](/okf/products/pmos/references/mcp-tools/register_product_repo.md),
116
- [product_repos](/okf/products/pmos/data-model/product_repos.md).
117
- - Sibling on-ramps: [analyze-product-infra](/build-skills/analyze-product-infra.skill),
118
- [product-onboarding playbook](/okf/core/playbooks/product-onboarding.md).
116
+ - Scan location: [D51](/okf/products/pmos/adr/d51-scan-location.md). There is no longer a central
117
+ registry to register into — the hosted `product_repos` table and `register_product_repo` went with
118
+ the backend (D66); the product repo that carries the kit IS the registration.
119
+ - Sibling on-ramp: [product-onboarding playbook](/okf/core/playbooks/product-onboarding.md).
@@ -82,8 +82,9 @@ field's "agents improving their own tools" loop while staying at the **L3 ceilin
82
82
  bounding decision [D47](/okf/products/pmos/adr/d47-self-refining-harness.md).
83
83
  - The sibling detect→draft→PR loop: [okf-author](/build-skills/okf-author.skill),
84
84
  [D42](/okf/products/pmos/adr/d42-okf-author-on-demand.md).
85
- - The evidence surfaces: [v_friction_recurrence](/okf/products/pmos/references/metrics/v_friction_recurrence.md),
86
- [v_context_budget](/okf/products/pmos/references/metrics/v_context_budget.md),
85
+ - The evidence surfaces: recurring friction themes and self-reported context pressure, read from
86
+ file-mode state ([discoveries.md](/discoveries.md) and `runs.jsonl`; the hosted
87
+ `v_friction_recurrence` / `v_context_budget` views went with the backend in D66) plus
87
88
  [eval-calibration.md](/planning/evals/eval-calibration.md).
88
89
  - The cadence it serves: [D23](/okf/products/pmos/adr/d23-quarterly-cadence.md) (harness-assumption
89
90
  review); the altitude standard: [agent-harness](/okf/core/concepts/agent-harness.md).
@@ -15,8 +15,8 @@ metadata:
15
15
  This skill is the **existing-repo on-ramp**: a PM arrives with a product that already ships and already
16
16
  has a repo, and PMOS needs knowledge of it so a build agent doesn't cold-start on every run (re-deriving
17
17
  the stack, assuming wrong, producing work the PM must heavily correct — the north-star cost). It is the
18
- **inverse of [analyze-product-infra](/build-skills/analyze-product-infra.skill)** (which goes PRD →
19
- what the product *needs*): ingest-repo goes **code → what the product *is***. It emits a **draft** OKF
18
+ **inverse** of deriving an infrastructure spec from a PRD (PRD → what the product *needs*):
19
+ ingest-repo goes **code → what the product *is***. It emits a **draft** OKF
20
20
  reference layer + a repo registration and then **stops for PM approval**.
21
21
 
22
22
  > **Format:** three-level progressive disclosure ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)). L1
@@ -103,18 +103,19 @@ reference layer + a repo registration and then **stops for PM approval**.
103
103
  - **`register_product_repo` semantics:** designed for provisioning output — here `app_surface`/
104
104
  `backend_model` are *observed*, a usage-only difference (no schema change); note it.
105
105
  - **B5 measurability:** the value thesis is "warm start → fewer corrections"; the first post-ingest
106
- build run should retrieve these concepts (B5 > 0 for the tenant, via
107
- [v_knowledge_reuse](/okf/products/pmos/references/metrics/v_knowledge_reuse.md) — now written by
108
- get_okf_concepts FETCH). That real correction-delta, not the doc count, is the win.
106
+ build run should retrieve these concepts. That real correction-delta, not the doc count, is the
107
+ win — measure it as corrections on the first post-ingest run versus the cold-start baseline.
108
+ (The hosted `v_knowledge_reuse` view that automated this count went with the backend in D66.)
109
109
 
110
110
  ## Level 3 — references
111
111
 
112
- - The write path + PM gate: [okf-author](/build-skills/okf-author.skill) Mode B, [D37](/okf/products/pmos/adr/d37-tenant-okf-db-native.md).
112
+ - The write path + PM gate: write the docs into the product's own repo as drafts and let the PM
113
+ approve them in PR review — the file-mode form of draft→approved. (D37's database-native tenant OKF
114
+ and its `save_okf_doc` tool were retired by [D66](/DECISIONS.md).)
113
115
  - The ledger method: [design-loop concept](/okf/core/concepts/design-loop.md),
114
116
  [design-reconcile](/skills/core/design-reconcile.skill), [watermelon-flag](/okf/core/concepts/watermelon-flag.md).
115
117
  - Extraction discipline: [source-to-concept](/skills/core/source-to-concept.skill).
116
- - Scan location: [D51](/okf/products/pmos/adr/d51-scan-location.md). Registry:
117
- [register_product_repo](/okf/products/pmos/references/mcp-tools/register_product_repo.md),
118
- [product_repos](/okf/products/pmos/data-model/product_repos.md).
119
- - Sibling on-ramps: [analyze-product-infra](/build-skills/analyze-product-infra.skill),
120
- [product-onboarding playbook](/okf/core/playbooks/product-onboarding.md).
118
+ - Scan location: [D51](/okf/products/pmos/adr/d51-scan-location.md). There is no longer a central
119
+ registry to register into — the hosted `product_repos` table and `register_product_repo` went with
120
+ the backend (D66); the product repo that carries the kit IS the registration.
121
+ - Sibling on-ramp: [product-onboarding playbook](/okf/core/playbooks/product-onboarding.md).
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.28.0",
3
+ "version": "0.33.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pmos-workspace",
9
- "version": "0.28.0",
9
+ "version": "0.33.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@xterm/addon-fit": "^0.11.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.32.0",
3
+ "version": "0.33.0",
4
4
  "private": true,
5
5
  "description": "PMOS Terminal Workspace — local companion hosting real PTYs beside the library and gates (D62)",
6
6
  "license": "MIT",