create-pmos 0.4.0 → 0.6.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 +149 -4
- package/bin/create-pmos.js +97 -8
- package/package.json +7 -3
- package/payload/AGENTS-HUMAN.md +6 -0
- package/payload/AGENTS.md +62 -3
- package/payload/KIT-VERSION +2 -2
- package/payload/README.md +16 -2
- package/payload/SECURITY.md +59 -0
- package/payload/okf/core/concepts/design-loop.md +6 -3
- package/payload/okf/core/concepts/frontmatter-format.md +75 -0
- package/payload/okf/core/concepts/index.md +3 -0
- package/payload/okf/core/concepts/log.md +13 -0
- package/payload/okf/core/templates/design-brief-template.md +1 -1
- package/payload/okf/core/templates/eval-rubric-template.md +12 -10
- package/payload/okf/core/templates/prd-template.md +6 -0
- package/payload/okf/core/templates/prototype-brief-template.md +45 -21
- package/payload/planning/evals/agent-run-eval-rubric.md +10 -7
- package/payload/scripts/frontier.sh +60 -0
- package/payload/scripts/metrics.py +163 -102
- package/payload/scripts/pmos-log.sh +16 -6
- package/payload/skills/SKILL-FORMAT.md +72 -9
- package/payload/skills/discovery.skill +4 -0
- package/payload/skills/eval-rubric.skill +1 -1
- package/payload/skills/evaluator.skill +65 -20
- package/payload/skills/explain-run.skill +9 -6
- package/payload/skills/explain-surface.skill +156 -0
- package/payload/skills/ingest-repo.skill +4 -3
- package/payload/skills/pmos-router.skill +25 -3
- package/payload/skills/prd.skill +8 -0
- package/payload/skills/prototype.skill +106 -41
- package/payload/skills-native/copywriting/SKILL.md +57 -0
- package/payload/skills-native/discovery/SKILL.md +75 -0
- package/payload/skills-native/eval-rubric/SKILL.md +159 -0
- package/payload/skills-native/evaluator/SKILL.md +182 -0
- package/payload/skills-native/explain-run/SKILL.md +121 -0
- package/payload/skills-native/explain-surface/SKILL.md +158 -0
- package/payload/skills-native/ingest-repo/SKILL.md +120 -0
- package/payload/skills-native/okr/SKILL.md +70 -0
- package/payload/skills-native/pmos-router/SKILL.md +81 -0
- package/payload/skills-native/prd/SKILL.md +117 -0
- package/payload/skills-native/prototype/SKILL.md +147 -0
- package/payload/state/tickets/.gitkeep +0 -0
- package/payload/templates/agent-run-eval-rubric.md +10 -7
- package/payload/templates/ticket-template.md +20 -0
- package/workspace/README.md +112 -0
- package/workspace/REMOTE.md +131 -0
- package/workspace/bin/pmos.js +206 -0
- package/workspace/doctor.js +99 -0
- package/workspace/lib/console-state.js +117 -0
- package/workspace/lib/file-mode-parse.js +58 -0
- package/workspace/lib/harness-parse.js +222 -0
- package/workspace/lib/preview-kind.js +98 -0
- package/workspace/lib/rate-limit.js +26 -0
- package/workspace/lib/remote-access.js +235 -0
- package/workspace/lib/review-gate.js +39 -0
- package/workspace/lib/schedule-logic.js +132 -0
- package/workspace/lib/skill-store.js +143 -0
- package/workspace/lib/surface-contract.js +79 -0
- package/workspace/lib/transcript-read.js +247 -0
- package/workspace/package-lock.json +94 -0
- package/workspace/package.json +23 -0
- package/workspace/public/app.js +1710 -0
- package/workspace/public/index.html +175 -0
- package/workspace/public/styles.css +766 -0
- package/workspace/server.js +1753 -0
- package/workspace/skills/backlog-triage.skill +13 -0
- package/workspace/skills/weekly-report.skill +19 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ingest-repo
|
|
3
|
+
description: Scan an existing product repository read-only and emit a DRAFT OKF reference layer (architecture, per-table, capability ledger, integrations, conventions, ADR seeds) + register the repo, so a build agent starts warm. Use when a PM brings a product that already ships and has a repo. Never writes the tenant repo; never emits secrets.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
pmos-version: 1.0.0
|
|
7
|
+
pmos-owner: wawan
|
|
8
|
+
pmos-risk: medium
|
|
9
|
+
pmos-category: onboarding
|
|
10
|
+
pmos-scope: read:tenant-repo, write:tenant-okf-drafts, write:product_repos
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# ingest-repo — Warm-start an existing product from its code
|
|
14
|
+
|
|
15
|
+
This skill is the **existing-repo on-ramp**: a PM arrives with a product that already ships and already
|
|
16
|
+
has a repo, and PMOS needs knowledge of it so a build agent doesn't cold-start on every run (re-deriving
|
|
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
|
|
20
|
+
reference layer + a repo registration and then **stops for PM approval**.
|
|
21
|
+
|
|
22
|
+
> **Format:** three-level progressive disclosure ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)). L1
|
|
23
|
+
> frontmatter above is the trigger; this L2 body is the full procedure.
|
|
24
|
+
> **Where it runs:** in **the interactive agent runtime** (any capable coding agent; PMOS-self uses
|
|
25
|
+
> Claude Code), in the tenant's own conversation, read-only — never a server-side scanner
|
|
26
|
+
> ([D51](/okf/products/pmos/adr/d51-scan-location.md); heavy reasoning runs in the interactive agent
|
|
27
|
+
> per [D09](/okf/products/pmos/adr/d09-skills-execute-in-claude-code.md), amended 2026-07-23).
|
|
28
|
+
|
|
29
|
+
## Non-negotiable stance
|
|
30
|
+
|
|
31
|
+
- **Read-only, at control altitude ([D01](/okf/products/pmos/adr/d01-control-plane.md)).** Zero writes
|
|
32
|
+
to the tenant repo — no files, no branches, no commits. If `git status` is not clean after the run,
|
|
33
|
+
that is a defect.
|
|
34
|
+
- **No secrets, ever ([D08](/okf/products/pmos/adr/d08-never-log-request-headers.md)).** Read only env
|
|
35
|
+
var *names* (`.env.example`, config keys). **Secret-scan the repo content AND git history** (real
|
|
36
|
+
repos leak keys in committed code/history); if a secret value is found, **never** place it in a doc,
|
|
37
|
+
a log, or the registry — note only that a leak exists and where, by path, so the PM can rotate it.
|
|
38
|
+
- **Default-to-refute on capability** (the [design-reconcile](/skills/core/design-reconcile.skill)
|
|
39
|
+
stance applied to code): a control/route is **watermelon** until a concrete backend read/write path
|
|
40
|
+
is found in the code. Unbacked controls land in **§D**, not invented as capability.
|
|
41
|
+
- **Everything is a DRAFT ([D37](/okf/products/pmos/adr/d37-tenant-okf-db-native.md)/[D12](/okf/products/pmos/adr/d12-three-tier-eval-gate.md)).**
|
|
42
|
+
`save_okf_doc(... status:'draft')`. The agent proposes; the **PM approves in-app**. Retrieval note:
|
|
43
|
+
a PM's own build agent *can* read its own tenant drafts (get_okf_concepts returns owner-scoped drafts,
|
|
44
|
+
the ratified 2026-07-02 draft-visible-to-own-agent stance), so warm-start works immediately; approval
|
|
45
|
+
governs promotion/trust, not visibility to the owner's own agent.
|
|
46
|
+
- **Tenant-only.** `save_okf_doc` rejects `pmos`; this never writes the PMOS-self git bundle.
|
|
47
|
+
- **Idempotent.** Re-running upserts docs (on `id`) and reconciles the registry (on `product_slug`) —
|
|
48
|
+
no duplicates.
|
|
49
|
+
|
|
50
|
+
## Procedure
|
|
51
|
+
|
|
52
|
+
1. **Read [AGENTS.md](/AGENTS.md)** and confirm the target `product_slug` (owner-scoped; one product).
|
|
53
|
+
2. **Read-only scan** of the tenant repo, gathering *cited* evidence (every claim will carry the repo
|
|
54
|
+
path it came from):
|
|
55
|
+
- **Stack & app surface** — manifests/lockfiles (`package.json`, `pyproject.toml`, `go.mod`, …),
|
|
56
|
+
framework config, entrypoints.
|
|
57
|
+
- **Architecture** — directory tree, entrypoints, module boundaries.
|
|
58
|
+
- **Data model** — migrations / schema / ORM models: one asset per table/model (columns + RLS/perm
|
|
59
|
+
shape where expressed).
|
|
60
|
+
- **Capability map** — trace **routes ↔ handlers ↔ queries**: which UI control/route reaches which
|
|
61
|
+
backend read/write. This is the raw material for the ledger.
|
|
62
|
+
- **Integrations** — config + SDK imports + `.env.example` **names only** (maps, transcription,
|
|
63
|
+
push, payments, storage, …).
|
|
64
|
+
- **Decisions & conventions** — README / ADRs / CHANGELOG / commit history (existing decisions);
|
|
65
|
+
CI config, lint rules, observed patterns (conventions).
|
|
66
|
+
3. **Secret-scan** repo content + git history (e.g. high-entropy strings, known key prefixes). Emit
|
|
67
|
+
**no** value; record only "possible secret at `<path>`" for the PM.
|
|
68
|
+
4. **Emit the reference layer** — via `save_okf_doc(..., status:'draft', product_slug:<slug>)`,
|
|
69
|
+
namespaced `products/<slug>/...`, **each body carrying situating context + the exact repo path(s)**
|
|
70
|
+
it was derived from (the [source-to-concept](/skills/core/source-to-concept.skill) rule + the
|
|
71
|
+
analyze-product-infra cited-line bar, applied to code). Minimum six kinds:
|
|
72
|
+
|
|
73
|
+
| Doc | OKF `type` | id (under `products/<slug>/`) | derived from |
|
|
74
|
+
|---|---|---|---|
|
|
75
|
+
| Architecture / stack overview | `Concept` | `concepts/architecture` | manifests + tree + entrypoints |
|
|
76
|
+
| Per-table/model schema (one each) | `Reference` | `data-model/<table>` | migrations / ORM models |
|
|
77
|
+
| **Capability ledger** | `Reference` | `references/capability-ledger` | routes ↔ handlers ↔ queries |
|
|
78
|
+
| Integration map | `Reference` | `references/integrations` | config + SDK imports + .env.example names |
|
|
79
|
+
| Conventions | `Concept` | `concepts/conventions` | CI/lint config + observed patterns |
|
|
80
|
+
| ADR seed(s) | `ADR` | `adr/<slug>-<n>-<topic>` | README / ADRs / commit history |
|
|
81
|
+
|
|
82
|
+
5. **Bootstrap the per-tenant capability ledger** (the artifact
|
|
83
|
+
[design-reconcile](/skills/core/design-reconcile.skill) consumes, [D50](/okf/products/pmos/adr/d50-design-loop-product-scoped.md)
|
|
84
|
+
pattern — generic method, per-tenant instance). Classify **every** user-facing control/route into
|
|
85
|
+
exactly one bucket; each §A/§B entry **names the concrete read/write path** in the code:
|
|
86
|
+
- **§A — read-backed:** maps to a real backend read (query/endpoint) — cite it.
|
|
87
|
+
- **§B — write-backed:** maps to a real backend write (mutation/endpoint) — cite it.
|
|
88
|
+
- **§C — data-exists-unsurfaced:** the data exists but no control surfaces it (opt-in opportunity).
|
|
89
|
+
- **§D — no-backing (watermelon):** a control with no backend path found — flagged, not invented.
|
|
90
|
+
6. **Register the repo** — `register_product_repo({ product_slug, repo:'owner/name',
|
|
91
|
+
app_surface:<observed>, backend_model:<observed>, status:'active', irs_ref:<repo-profile doc id>,
|
|
92
|
+
webhook_secret_ref: <name-or-null> })`. Fields are **observed** here (not IRS-derived); pass **no
|
|
93
|
+
secret value**. Add an "observed, not IRS-derived" provenance note.
|
|
94
|
+
7. **STOP for PM approval.** Present the drafted layer + the ledger's §D watermelon list + any secret
|
|
95
|
+
findings. The PM approves docs in-app; you do not self-approve. Log the run + friction.
|
|
96
|
+
|
|
97
|
+
## Guardrails
|
|
98
|
+
|
|
99
|
+
- **Provenance is a hard gate.** An emitted doc with an un-sourced assertion is a defect — the
|
|
100
|
+
evaluator's provenance dimension hunts for exactly this ([rubric](/planning/evals/ingest-repo-eval-rubric.md)).
|
|
101
|
+
- **Large/polyglot monorepos:** flag scope to the PM and do a per-package pass; do **not** emit a
|
|
102
|
+
shallow single profile.
|
|
103
|
+
- **`register_product_repo` semantics:** designed for provisioning output — here `app_surface`/
|
|
104
|
+
`backend_model` are *observed*, a usage-only difference (no schema change); note it.
|
|
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.
|
|
109
|
+
|
|
110
|
+
## Level 3 — references
|
|
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).
|
|
113
|
+
- The ledger method: [design-loop concept](/okf/core/concepts/design-loop.md),
|
|
114
|
+
[design-reconcile](/skills/core/design-reconcile.skill), [watermelon-flag](/okf/core/concepts/watermelon-flag.md).
|
|
115
|
+
- 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).
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: okr
|
|
3
|
+
description: Draft or revise an OKR set for a planning period — objectives with measurable key results that initiatives ladder up to. Use when setting quarterly strategy or re-anchoring drifting work.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
pmos-version: 1.0.0
|
|
7
|
+
pmos-owner: wawan
|
|
8
|
+
pmos-risk: low
|
|
9
|
+
pmos-category: planning
|
|
10
|
+
pmos-scope: read:okf, write:planning/okrs
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# okr — Draft or Revise an OKR Set
|
|
14
|
+
|
|
15
|
+
This skill produces an OKR instance for a planning period: a small set of objectives, each with
|
|
16
|
+
measurable key results, structured as a tree that initiatives and agent runs ladder up to. It
|
|
17
|
+
operationalizes the [okr-tree](/okf/core/concepts/okr-tree.md) concept.
|
|
18
|
+
|
|
19
|
+
> **Format note:** three-level progressive disclosure
|
|
20
|
+
> ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)). Level 1 above is the trigger; this body is the
|
|
21
|
+
> procedure; rare variants go to Level 3 sub-files.
|
|
22
|
+
|
|
23
|
+
## When to use vs. not
|
|
24
|
+
|
|
25
|
+
- **Use** to set strategy for a planning period, or to re-anchor an initiative that has drifted from
|
|
26
|
+
its parent KR.
|
|
27
|
+
- **Do not use** to spec a single piece of work — that is the [PRD skill](/skills/core/prd.skill).
|
|
28
|
+
OKRs sit one level above initiatives.
|
|
29
|
+
|
|
30
|
+
## Procedure
|
|
31
|
+
|
|
32
|
+
1. **Objectives: qualitative and few.** 2–4 objectives for the period. Each is directional and
|
|
33
|
+
inspirational, carries no number itself, and states a "what we want to be true."
|
|
34
|
+
2. **Key results: measurable outcomes.** 2–5 KRs per objective. Each is a **change in the world**,
|
|
35
|
+
not a count of work done — "reduce human correction rate to < 0.5", not "ship 5 features". KRs
|
|
36
|
+
that measure output invite the [watermelon flag](/okf/core/concepts/watermelon-flag.md).
|
|
37
|
+
3. **Ladder to the north star.** Every KR should move, directly or indirectly, the north-star metric
|
|
38
|
+
— **human correction rate per agent run** (lower is better). If a KR ladders to nothing, cut it.
|
|
39
|
+
4. **Baseline and target.** Each KR states current baseline, target, and the measurement source.
|
|
40
|
+
"From X to Y, measured by Z."
|
|
41
|
+
5. **Leave room for initiatives.** OKRs are parents; do not pre-assign every initiative. The tree is
|
|
42
|
+
filled in as work is chosen.
|
|
43
|
+
6. **Set the review cadence.** State when KRs are checked and that reporting follows
|
|
44
|
+
[anti-optimism](/okf/core/concepts/okr-anti-optimism.md): report the red, separate confidence
|
|
45
|
+
from status.
|
|
46
|
+
|
|
47
|
+
## Required content
|
|
48
|
+
|
|
49
|
+
- **Period & identity** — planning period, `product_slug`, `pm_slug`.
|
|
50
|
+
- **Objectives** — numbered, qualitative.
|
|
51
|
+
- **Key results** — per objective: baseline → target, measurement source, confidence.
|
|
52
|
+
- **North-star linkage** — how the set ladders to human correction rate.
|
|
53
|
+
- **Cadence** — review rhythm and reporting stance.
|
|
54
|
+
|
|
55
|
+
## Output and placement
|
|
56
|
+
|
|
57
|
+
- OKR instances are **operational** — under `/planning/okrs/`, not in the OKF bundle.
|
|
58
|
+
- Filename: period-slugged, e.g. `okrs-q3-2026.md`.
|
|
59
|
+
|
|
60
|
+
## Quality bar
|
|
61
|
+
|
|
62
|
+
Before handoff: objectives are qualitative; KRs are outcomes with baseline+target+source; every KR
|
|
63
|
+
ladders toward the north star; reporting stance is anti-optimist; no initiative is smuggled in as a
|
|
64
|
+
KR.
|
|
65
|
+
|
|
66
|
+
## Level 3 sub-cases
|
|
67
|
+
|
|
68
|
+
- Mid-period KR revision / re-baselining without resetting objectives: see `okr-rebaseline.md`
|
|
69
|
+
(author on first need).
|
|
70
|
+
- Multi-product objective rollups: see `okr-rollup.md` (author on first need).
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pmos-router
|
|
3
|
+
description: Not sure which lane or flow a piece of work takes — START HERE. Maps any entry ("I have an idea", "it's broken", "is this feasible?", "we need copy", "upkeep") to its lane, spec artifacts, next skill, and gates; runs the intake sharpness test and the prior-rejection check on the way. The explicit front door for the D56/D58/D60 lane map.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
pmos-version: 1.0.0
|
|
7
|
+
pmos-owner: wawan
|
|
8
|
+
pmos-risk: low
|
|
9
|
+
pmos-category: planning
|
|
10
|
+
pmos-scope: read:okf, read:planning
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# pmos-router — Route work to its lane
|
|
14
|
+
|
|
15
|
+
The explicit front door. The lane map grew across
|
|
16
|
+
[D56](/okf/products/pmos/adr/d56-initiative-lanes.md)/[D58](/okf/products/pmos/adr/d58-builder-profiles.md)/[D60](/okf/products/pmos/adr/d60-prototype-loop.md)
|
|
17
|
+
while living implicitly across AGENTS.md, CLAUDE.md and the intake checklist — and the recorded cost
|
|
18
|
+
of an implicit map is the `prototype-loop` discoverability failure (the PM could not find a flow
|
|
19
|
+
whose pieces half-existed). This skill performs the mapping. **It decides nothing** — it routes to
|
|
20
|
+
lanes and gates that already exist; where it and an authority disagree, the authority wins and the
|
|
21
|
+
router is the bug (fix it via the weekly harness scan).
|
|
22
|
+
|
|
23
|
+
> **Format note:** three-level progressive disclosure ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)).
|
|
24
|
+
> Sources of truth: the AGENTS.md lane list, `.github/scripts/initiative-gate.sh`, D56/D58/D60.
|
|
25
|
+
|
|
26
|
+
## Step 0 — three checks before any route
|
|
27
|
+
|
|
28
|
+
1. **Sharpness (the fog/ticket test):** *can the PM state the question or idea precisely now — not
|
|
29
|
+
answer it, state it?* If not, it is **fog**: not ready for intake. Name what would sharpen it
|
|
30
|
+
(a conversation, a datum, a spike) and stop — do not open an initiative to hold fog.
|
|
31
|
+
2. **Prior rejection:** check [planning/out-of-scope/](/planning/out-of-scope/README.md) for the
|
|
32
|
+
concept. If a file exists, **read it first** and surface it to the PM — the concept returns only
|
|
33
|
+
if the PM overrides the recorded reasoning, and the file is updated either way.
|
|
34
|
+
3. **The specimen test — ASK it, do not wait to be told** (D60 as amended 2026-07-24):
|
|
35
|
+
|
|
36
|
+
> **Can the PM judge this from a description, or do they need an instance of it in front of them?**
|
|
37
|
+
|
|
38
|
+
Put it to the PM in their own terms for this piece of work. If no description settles it, the
|
|
39
|
+
route is **prototype**, *whether or not the work has a user interface* — the lane is no longer
|
|
40
|
+
UI-gated. This check is asked here because the recorded failure is discoverability: a PM who does
|
|
41
|
+
not know the lane exists cannot ask for it, and a step left to memory decays to never.
|
|
42
|
+
|
|
43
|
+
**It must discriminate in both directions.** Most feature work — an MCP tool, a migration, a CI
|
|
44
|
+
gate — *is* judgeable from a description and routes straight to its PRD untaxed. Over-firing twice
|
|
45
|
+
running is a D41 tripwire on the test's wording.
|
|
46
|
+
|
|
47
|
+
4. **Existing-surface check — does the PM understand what is already there?** Ask:
|
|
48
|
+
|
|
49
|
+
> **Would specifying this honestly require reading code that already exists?**
|
|
50
|
+
|
|
51
|
+
Yes → an [explain-surface](/build-skills/explain-surface.skill) pass runs **first**, before the
|
|
52
|
+
spike brief / prototype brief / PRD is authored, in a fresh context. Greenfield → skip it. This is
|
|
53
|
+
standard, not optional: the PRD skill's own rule ("look it up rather than asking") means the
|
|
54
|
+
*agent* acquires the understanding and the PM does not, and a spec built on facts the PM never saw
|
|
55
|
+
is a watermelon at the root.
|
|
56
|
+
|
|
57
|
+
## The routes
|
|
58
|
+
|
|
59
|
+
| The PM says… | Route | Lane / artifacts / next skill | Gates to expect |
|
|
60
|
+
|---|---|---|---|
|
|
61
|
+
| "I have an idea" the PM **can't judge from a description** — they need an **instance** in front of them (a UI not yet seen; equally *does this skill's output teach?*, *does this API feel right to call?*) | **Prototype first — before any PRD** | `type: prototype`; quick brief at `prd_path` declaring **the judgement exercised + the specimen format** (**no rubric BY DESIGN** — grilled, never scored); [prototype skill](/skills/core/prototype.skill). Format fits the work: lookable UI, a worked sample output, call/response transcripts, a schema sketch. **The class's conventions are a BLOCKING precondition** (design system for UI; SKILL-FORMAT, D19 ACI, migration/RLS conventions elsewhere) — absent → the agent authors them from the same brief, PM approves, first. | Initiative Gate (brief exists); web-ci quarantine; PM disposition (promote/iterate/kill) |
|
|
62
|
+
| A **new bet** — new product/capability/direction whose *whether* is unargued | **Offer the strategic brief** (recommended, skippable — D61) | [strategic-brief skill](/skills/core/strategic-brief.skill) → `planning/briefs/<id>-brief.md`; go → feature route below; no-go → file in out-of-scope/ | none (the brief is never a gate) |
|
|
63
|
+
| A **validated direction or known feature** (incl. a promoted prototype) | **Feature lane** | `type: feature`; PRD + eval rubric ([prd](/skills/core/prd.skill) + [eval-rubric](/skills/core/eval-rubric.skill) skills), rubric authored alongside (D13); contract before build (D16). A promoted prototype's PRD is **derived from the validated option**. New surface → leg B: [design-brief](/skills/core/design-brief.skill) as the build's reference, held to the [design-reference rubric](/planning/evals/design-reference-eval-rubric.md) | Initiative Gate (PRD+rubric); full three-tier gate |
|
|
64
|
+
| "**Is this feasible / should we / how would we…?**" — a **question** with an unknown answer, findable by investigation | **Discovery lane** | `type: discovery`; spike brief at `prd_path` ([discovery skill](/skills/core/discovery.skill)); question + timebox + disposition. Deliverable is a **learning**, and it closes on the **timebox** ("inconclusive" is a recordable outcome). Contrast the row above: that one holds a **candidate** whose rightness no description settles, delivers a **validated direction**, and closes on a **disposition against a specimen**. Widening this lane to cover that was considered and **rejected** in D60 | Initiative Gate (spike brief) |
|
|
65
|
+
| "**Production is broken**" | **Incident lane** | `type: incident`; fix now, record post-hoc within 48h at `prd_path` (the one sanctioned inversion; [incident template](/okf/core/templates/incident-record-template.md)) | Initiative Gate (record, post-hoc) |
|
|
66
|
+
| A **text deliverable** (landing page, microcopy, release notes, campaign) | **Content lane** | `type: content`; content brief at `prd_path`, rubric recommended not required (D58); [copywriting skill](/skills/domains/copywriting.skill). Copy for a prototype rides the prototype instead (D60) | Initiative Gate (content brief) |
|
|
67
|
+
| **Upkeep** — refactor/ops/security with no honest KR | **Chore lane, health-anchored** | `type: chore`; one-paragraph intent in `status`; anchor `health:<id>` from [health-budgets](/planning/okrs/health-budgets.md) (D59) — never a faked KR | Initiative Gate (intent + anchor) |
|
|
68
|
+
|
|
69
|
+
**Every route** still takes the universal steps: anchored initiative row (`create_initiative`),
|
|
70
|
+
branch `initiative/<id>`, and the human Acceptance Gate at the end (D12) — the router never bypasses
|
|
71
|
+
[working-in-pmos](/okf/core/playbooks/working-in-pmos.md).
|
|
72
|
+
|
|
73
|
+
## Edge rules
|
|
74
|
+
|
|
75
|
+
- **Two shapes at once** (an idea that is also a bet): sharpness first, then the brief-offer, then
|
|
76
|
+
prototype — *whether* precedes *look*, but only when the whether is genuinely open; if the PM has
|
|
77
|
+
already decided to explore, go straight to prototype.
|
|
78
|
+
- **Anchor-free trivia** (a typo, a broken link): the `no-initiative` label, no lane. Real work
|
|
79
|
+
never takes the hatch.
|
|
80
|
+
- **Unknown shape after the checks:** ask the PM one routing question with a recommended answer —
|
|
81
|
+
do not guess a lane.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prd
|
|
3
|
+
description: Write a Product Requirements Document for an initiative. Use when an initiative has been chosen and needs a spec — the what and why — before any build or contract work begins.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
pmos-version: 1.1.0
|
|
7
|
+
pmos-owner: wawan
|
|
8
|
+
pmos-risk: low
|
|
9
|
+
pmos-category: planning
|
|
10
|
+
pmos-scope: read:okf, write:planning/prd
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# prd — Write a Product Requirements Document
|
|
14
|
+
|
|
15
|
+
This skill produces a PRD instance for one initiative. The PRD is the **spec** stage of the
|
|
16
|
+
[SDLC loop](/okf/core/concepts/sdlc-loop.md): it says *what* to build and *why*, anchored to
|
|
17
|
+
strategy, so a generator agent and the PM share one definition of the work before a contract is
|
|
18
|
+
agreed.
|
|
19
|
+
|
|
20
|
+
> **Format note:** this skill follows three-level progressive disclosure
|
|
21
|
+
> ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)). Level 1 above is the trigger; this body is Level 2;
|
|
22
|
+
> rare variants are pushed to Level 3 sub-files referenced by name.
|
|
23
|
+
|
|
24
|
+
## When to use vs. not
|
|
25
|
+
|
|
26
|
+
- **Use** when an initiative is selected and needs a spec before build work.
|
|
27
|
+
- **Do not use** to make the strategic case for *whether* to do the initiative — that is the
|
|
28
|
+
`strategic-brief` skill. The PRD assumes the initiative is already chosen.
|
|
29
|
+
- **Do not use** to define how output is judged — that is the
|
|
30
|
+
[eval-rubric skill](/skills/core/eval-rubric.skill). PRD and rubric are authored together (see
|
|
31
|
+
[eval-driven-pm](/okf/core/concepts/eval-driven-pm.md)) but are separate artifacts.
|
|
32
|
+
|
|
33
|
+
## Procedure
|
|
34
|
+
|
|
35
|
+
0a. **Existing surface? Understand it first — before grilling.** If specifying this honestly
|
|
36
|
+
requires reading code that already exists, an [explain-surface](/build-skills/explain-surface.skill)
|
|
37
|
+
pass runs on that region **first**, in a fresh context and **not by you**. Its *Open questions*
|
|
38
|
+
section is a declared input to the grilling below: those are the things that could not be
|
|
39
|
+
determined from the code, and they must be resolved with the PM or carried explicitly into the
|
|
40
|
+
PRD's risks — never silently answered by assumption. Greenfield → skip. This exists because step 0b's
|
|
41
|
+
boundary rule, on its own, gives the **agent** the understanding and the PM none.
|
|
42
|
+
0. **Grill before you write.** Before any authoring, interrogate the PM's intent as a dialogue —
|
|
43
|
+
**one question at a time, a recommended answer offered with each**, no authoring until shared
|
|
44
|
+
understanding is confirmed. Stop when the intent is **unambiguous**, not at a count — there is
|
|
45
|
+
deliberately **no question cap** (under-specification needs unlimited digging; a redundant
|
|
46
|
+
question is a quality bug, not a quantity bug). A batch questionnaire is **not** compliant with
|
|
47
|
+
this step. Boundary rule, near-verbatim from AGENTS.md: *if a fact can be found by exploring the
|
|
48
|
+
environment, look it up rather than asking — the decisions, though, are the PM's* (D12 at
|
|
49
|
+
optimal altitude). A stated requirement that later goes unhonored in a build (the recorded
|
|
50
|
+
"too many navigations" class) is exactly what this step exists to pin down in writing.
|
|
51
|
+
1. **Anchor to strategy first.** Identify the parent KR in the
|
|
52
|
+
[OKR tree](/okf/core/concepts/okr-tree.md) — or, for maintenance work with no honest KR, the
|
|
53
|
+
declared [health budget](/okf/core/concepts/health-anchors.md) (`health:<id>`, D59). If the
|
|
54
|
+
initiative has neither, stop — it is unanchored work and the structural seed of
|
|
55
|
+
[silent drift](/okf/core/concepts/watermelon-flag.md). Resolve the anchor before writing the
|
|
56
|
+
PRD; never force a KR link that isn't real.
|
|
57
|
+
2. **Start from the template.** Use
|
|
58
|
+
[prd-template](/okf/core/templates/prd-template.md) as the scaffold. Do not invent a new
|
|
59
|
+
structure.
|
|
60
|
+
3. **Write the problem before the solution.** State the user/PM problem and why it matters now.
|
|
61
|
+
A PRD that opens with a solution has skipped the only part the agent cannot reconstruct.
|
|
62
|
+
4. **Make scope explicit on both sides.** In-scope *and* out-of-scope. The out-of-scope list is the
|
|
63
|
+
primary defense against agents over-building.
|
|
64
|
+
5. **State success as outcomes, not output.** Success criteria describe a change in the world tied
|
|
65
|
+
to the anchor — the parent KR, or the declared budget's purpose (D59) — not a list of artifacts
|
|
66
|
+
produced.
|
|
67
|
+
6. **Pair with a rubric.** Flag that the [eval-rubric](/skills/core/eval-rubric.skill) must be
|
|
68
|
+
authored before the build starts — the eval is written first.
|
|
69
|
+
7. **Write for durability.** The PRD (and the contract derived from it) waits while work is
|
|
70
|
+
scheduled, so write what stays true: name **interfaces, types, and behavioral contracts — never
|
|
71
|
+
file paths or line numbers** (they stale while work waits and mislead the builder that follows).
|
|
72
|
+
Criteria are **behavioral, not procedural** — what must be true of the outcome, never the tool
|
|
73
|
+
sequence (D14 applied to authoring). Acceptance criteria must be **independently verifiable**.
|
|
74
|
+
One exception: a **prototype-derived snippet** that encodes a decision more precisely than prose
|
|
75
|
+
may be inlined, trimmed to its decision-rich parts (the D60 promote path).
|
|
76
|
+
8. **Keep it at control altitude.** The PRD specs *what and why*; it does not write the
|
|
77
|
+
application code or dictate the agent's path
|
|
78
|
+
([control-plane](/okf/core/concepts/control-plane.md)).
|
|
79
|
+
|
|
80
|
+
## Required content
|
|
81
|
+
|
|
82
|
+
A complete PRD instance contains:
|
|
83
|
+
|
|
84
|
+
- **Frontmatter** — the file opens with OKF YAML frontmatter: `type: PRD`, `title`, `timestamp` (the repo-wide convention, D63; [frontmatter-format](/okf/core/concepts/frontmatter-format.md)).
|
|
85
|
+
- **Identity** — `initiative_id`, `product_slug`, `pm_slug`, parent `KR`.
|
|
86
|
+
- **Problem** — who has it, why now, what it costs to leave unsolved.
|
|
87
|
+
- **Goal & non-goals** — the change sought; explicit out-of-scope.
|
|
88
|
+
- **Requirements** — what must be true of the solution (capabilities, constraints).
|
|
89
|
+
- **Success criteria** — outcome-based, tied to the anchor (KR or budget purpose).
|
|
90
|
+
- **Risks & open questions** — including anything to escalate to the PM.
|
|
91
|
+
- **Links** — parent KR, the paired eval rubric, relevant OKF concepts. **Dual-audience rule
|
|
92
|
+
(D58):** every link carries ONE situating sentence (what it is and why it matters here — the
|
|
93
|
+
source-to-concept rule applied to planning artifacts), and the parent-KR line quotes the KR
|
|
94
|
+
*text*, not just its id (health-anchored: name the budget and why the work fits its coverage). The body stays agent-optimized; the references must stand alone for a
|
|
95
|
+
human stakeholder reading the PRD without the OKF bundle in context.
|
|
96
|
+
|
|
97
|
+
## Output and placement
|
|
98
|
+
|
|
99
|
+
- PRD instances are **operational**, not OKF knowledge. They live under `/planning/prd/`, not in the
|
|
100
|
+
bundle ([okf-governance](/okf/core/concepts/okf-governance.md)).
|
|
101
|
+
- Filename: descriptive and slugged, e.g. `p0-prd.md`.
|
|
102
|
+
|
|
103
|
+
## Quality bar
|
|
104
|
+
|
|
105
|
+
Before handing off, confirm: anchor present — parent KR (text quoted, not just the id) or
|
|
106
|
+
`health:<id>` (D59); problem precedes
|
|
107
|
+
solution; out-of-scope is non-empty; success criteria are outcomes not output; every link carries
|
|
108
|
+
its situating sentence (D58); the eval rubric is queued to be written first.
|
|
109
|
+
|
|
110
|
+
## Level 3 sub-cases
|
|
111
|
+
|
|
112
|
+
- Multi-product or platform PRDs that span more than one `product_slug`: see `prd-multiproduct.md`
|
|
113
|
+
(author on first need).
|
|
114
|
+
- Spike / discovery work where the deliverable is a learning, not a feature, is **not a PRD
|
|
115
|
+
case** — take the discovery lane ([D56](/okf/products/pmos/adr/d56-initiative-lanes.md)):
|
|
116
|
+
[discovery skill](/skills/core/discovery.skill) +
|
|
117
|
+
[spike-brief template](/okf/core/templates/spike-brief-template.md).
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prototype
|
|
3
|
+
description: Run a pre-PRD validation through the prototype lane (D60) — the PM gives a QUICK brief, an agent produces 2–3 divergent specimens in whatever format fits the work (lookable UI options, a worked sample output, call/response transcripts, a schema sketch with example rows), a grilling sharpens them (dialogue, never a score), and the PM disposes promote/iterate/kill. Use when an idea's rightness cannot be settled by a description and the PM needs an INSTANCE in front of them — whether or not the work has a user interface; requires the artifact class's conventions (blocking — author them first if absent).
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
pmos-version: 1.1.0
|
|
7
|
+
pmos-owner: wawan
|
|
8
|
+
pmos-risk: low
|
|
9
|
+
pmos-category: design
|
|
10
|
+
pmos-scope: read:okf, write:prototype, write:planning
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# prototype — Run a leg-A validation through the prototype lane
|
|
14
|
+
|
|
15
|
+
The [D60](/okf/products/pmos/adr/d60-prototype-loop.md) lane skill. The division of labour is the
|
|
16
|
+
point: **the PM briefs; the agent builds the specimen.** The PM should never have to author a design
|
|
17
|
+
system, a convention set, or a prototype to validate an idea.
|
|
18
|
+
|
|
19
|
+
> **Format note:** three-level progressive disclosure ([SKILL-FORMAT](/skills/core/SKILL-FORMAT.md)).
|
|
20
|
+
> Level 1 above is the trigger; this body is Level 2.
|
|
21
|
+
> **Scope note (2026-07-24 amendment):** this lane is **no longer gated on the work being a user
|
|
22
|
+
> interface**. D60's mechanism — *make it examinable, then grill it, before committing to a spec* —
|
|
23
|
+
> is general; it was only ever *expressed* visually. The visual path below is unchanged and stays
|
|
24
|
+
> first-class; it is now one shape among several.
|
|
25
|
+
|
|
26
|
+
## When to use vs. not
|
|
27
|
+
|
|
28
|
+
**The entry rule is the specimen test:**
|
|
29
|
+
|
|
30
|
+
> **Can the PM judge this from a description, or do they need an instance of it in front of them?**
|
|
31
|
+
|
|
32
|
+
- **Use** when no description settles it. The measured cost of skipping this is the
|
|
33
|
+
console-redesign series: four post-build rejections that a lookable artifact would have caught
|
|
34
|
+
pre-spec — a *visual* judgement that could only be made once the thing existed. The class is wider
|
|
35
|
+
than the instance: *does this skill's output actually teach?*, *does this API feel right to call?*,
|
|
36
|
+
*does this rubric actually discriminate?*, *does this error message actually help?* are the same
|
|
37
|
+
judgement in a different medium.
|
|
38
|
+
- **Do not use** when a description does settle it — which is most feature work. An MCP tool, a
|
|
39
|
+
migration, a CI gate: the PM can read what it will do and decide. Those go straight to their PRD.
|
|
40
|
+
**A lane that fires on everything has failed as surely as one that fires on nothing**; over-firing
|
|
41
|
+
twice running is a D41 tripwire on the test's wording.
|
|
42
|
+
- **Do not use** for leg B (the post-PRD, high-fidelity design reference — that is the
|
|
43
|
+
[design loop](/okf/core/concepts/design-loop.md): design-brief → design → reconcile, open to new
|
|
44
|
+
surfaces per D60's D48 amendment).
|
|
45
|
+
- **Do not use** when you hold a *question* rather than a *candidate* — that is the
|
|
46
|
+
[discovery lane](/skills/core/discovery.skill):
|
|
47
|
+
|
|
48
|
+
| | You hold | Deliverable | Closes on |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| **discovery** | a **question** with an unknown answer, findable by investigation | a **learning** | the timebox — "inconclusive" is a recordable outcome |
|
|
51
|
+
| **prototype** | a **candidate** whose rightness no description settles | a **validated direction** | a disposition against a specimen |
|
|
52
|
+
|
|
53
|
+
Widening `discovery` to cover this was considered and **rejected** in D60 and stays rejected:
|
|
54
|
+
"discovery" is not the word a PM reaches for when they want to *see* something, and
|
|
55
|
+
discoverability was the whole failure.
|
|
56
|
+
|
|
57
|
+
## Procedure
|
|
58
|
+
|
|
59
|
+
1. **Open the lane.** `create_initiative({id, title, parent_kr, type:'prototype', stage:'intake'})` —
|
|
60
|
+
anchored like all work (D21/D59). Branch `initiative/<id>`.
|
|
61
|
+
1b. **Improving something that already exists? Understand it first.** If the specimen will replace
|
|
62
|
+
or alter an existing surface, run an [explain-surface](/build-skills/explain-surface.skill) pass on
|
|
63
|
+
it — fresh context, **before** the brief. Divergent options against a surface nobody has
|
|
64
|
+
characterised diverge from a guess, and the PM cannot grill them honestly. Brand-new → skip.
|
|
65
|
+
2. **Take the quick brief.** The PM fills the
|
|
66
|
+
[prototype-brief template](/okf/core/templates/prototype-brief-template.md) — minutes not hours —
|
|
67
|
+
into `prototype/<id>/brief.md`; set it as `prd_path`. It declares **the judgement being
|
|
68
|
+
exercised** and **the specimen format chosen** (step 4), because those are what the grilling and
|
|
69
|
+
the disposition hang on. **`rubric_path` stays null by design** (grilled, never scored). If the PM
|
|
70
|
+
starts writing requirements, stop them: that detail belongs in the PRD that *follows*.
|
|
71
|
+
3. **Precondition check — BLOCKING (D60(c), generalised).** A specimen built against no shared
|
|
72
|
+
vocabulary produces something nobody can consistently build from. Before producing anything, confirm
|
|
73
|
+
the artifact class has **conventions** and **craft knowledge** to reason from:
|
|
74
|
+
|
|
75
|
+
| Class | Its conventions live in |
|
|
76
|
+
|---|---|
|
|
77
|
+
| A user interface | the product's **design system** — tokens, type scale, components (PMOS's own app: [D38](/DECISIONS.md); tenants checked at onboarding) |
|
|
78
|
+
| A skill | [SKILL-FORMAT](/skills/core/SKILL-FORMAT.md) — three-level progressive disclosure |
|
|
79
|
+
| A tool or API | [D19](/okf/products/pmos/adr/d19-aci-design.md)'s ACI principle |
|
|
80
|
+
| A knowledge doc | the OKF spec + [frontmatter-format](/okf/core/concepts/frontmatter-format.md) |
|
|
81
|
+
| A schema | the repo's migration + RLS conventions |
|
|
82
|
+
|
|
83
|
+
In PMOS most already exist, so this usually passes on inspection. **Where a class has neither,
|
|
84
|
+
authoring them is the first initiative** — propose a minimal set, get the PM's approval, record it
|
|
85
|
+
in the product's namespace, and only then prototype. Never silently invent per-prototype
|
|
86
|
+
conventions; that is how inconsistent products happen.
|
|
87
|
+
4. **Retrieve the craft, and choose the format.** `get_okf_concepts` the class's craft — for a user
|
|
88
|
+
interface, `core/concepts/design-craft` (perception/cognition evidence, craft moves, accessibility
|
|
89
|
+
floors, recorded anti-patterns); for other classes, the conventions named in step 3. **Reason from
|
|
90
|
+
principles to THIS brief; two briefs must not produce the same specimen.** D60(e) is explicit that
|
|
91
|
+
without a craft layer to reason from, an agent told to "apply practice" produces generic output —
|
|
92
|
+
if you cannot name what you are reasoning from, you are in the blocking case above.
|
|
93
|
+
|
|
94
|
+
Then choose the format by the principle — **the cheapest specimen that lets the PM exercise the
|
|
95
|
+
judgement in question**. A starting vocabulary, deliberately **not a closed enum**; an unlisted
|
|
96
|
+
shape takes whatever actually fits, named in the brief:
|
|
97
|
+
|
|
98
|
+
| Work shape | A specimen might be |
|
|
99
|
+
|---|---|
|
|
100
|
+
| A user interface | a low-fidelity lookable artifact (static HTML is usually right) |
|
|
101
|
+
| A skill / agent capability | a worked sample output on real input |
|
|
102
|
+
| A tool or API shape | sample call + response transcripts |
|
|
103
|
+
| A data model | a schema sketch with example rows |
|
|
104
|
+
| An eval rubric | the rubric scored against 2–3 real past artifacts |
|
|
105
|
+
| Error text, CLI, protocol | the actual strings, or a session transcript |
|
|
106
|
+
|
|
107
|
+
5. **Produce divergent specimens** into `prototype/<id>/` — low-fidelity, self-contained, examinable
|
|
108
|
+
(whatever renders or reads fastest). **2–3 genuinely different directions, not one safe one with
|
|
109
|
+
variants** — divergence is the point in any medium. **Real draft content, never placeholder**
|
|
110
|
+
(D60: copy rides the prototype — [copywriting.skill](/skills/domains/copywriting.skill) craft
|
|
111
|
+
applies in-loop; claim-sourcing waits for the content lane at production). The non-visual analogue
|
|
112
|
+
is the same rule: real inputs and real outputs, because fake ones hide exactly the friction the
|
|
113
|
+
specimen exists to surface. Respect the accessibility floors even at low fidelity.
|
|
114
|
+
6. **Grill — dialogue, never a score.** A craft-grade critic (fresh context, default-to-refute
|
|
115
|
+
stance, the class's craft loaded) interrogates each specimen: *why this structure? what job does
|
|
116
|
+
the focal element serve? what would the best practitioner in this class say is wrong? what was NOT
|
|
117
|
+
tried?* One question at a time, a recommended answer with each, no action until shared
|
|
118
|
+
understanding is confirmed. Sharpen the specimens from it. **Produces no score, no verdict, no
|
|
119
|
+
threshold, no `evals` row** — re-introducing scoring here under any name is a D60 violation.
|
|
120
|
+
7. **PM disposition** (the only gate on leg A, and it is the PM's):
|
|
121
|
+
- **promote** → open a **new feature-lane initiative**; its PRD and rubric are **derived from the
|
|
122
|
+
validated specimen** (what was seen and chosen becomes the spec's substance). Leg B, where the
|
|
123
|
+
work has a surface, then runs inside that initiative's Build.
|
|
124
|
+
- **iterate** → back to step 5 with the PM's reaction folded in.
|
|
125
|
+
- **kill** → record one honest line on the initiative, **file the concept into
|
|
126
|
+
[planning/out-of-scope/](/planning/out-of-scope/README.md)** (decision, reasoning, what would
|
|
127
|
+
reopen it) so it is not re-prototyped from scratch, and close. A cheap kill is this lane
|
|
128
|
+
*succeeding*.
|
|
129
|
+
8. **Log.** `log_agent_run` with the disposition; friction to discoveries.md (`#friction`).
|
|
130
|
+
|
|
131
|
+
## Hard rules
|
|
132
|
+
|
|
133
|
+
- Artifacts live in **`prototype/<id>/` only** — never `web/`, never a tenant app. The `web-ci`
|
|
134
|
+
quarantine assertion enforces this for the visual case; it is the *instance* of D01's general rule,
|
|
135
|
+
which binds every medium. Do not fight it, and do not read "the assertion only covers `web/`" as
|
|
136
|
+
permission to let a non-visual specimen leak into product code.
|
|
137
|
+
- **A prototype never ships.** Promote produces a *spec*, not a deploy. Quality bars are suspended in
|
|
138
|
+
`prototype/` precisely because nothing there can reach production (D01).
|
|
139
|
+
- **No score on leg A, no skipped grilling on leg A.** Both PM rules bind; **neither may be satisfied
|
|
140
|
+
by dropping the other**. This holds for non-visual specimens too, where the temptation is sharper:
|
|
141
|
+
a schema or an API *looks* like it has objective criteria, and that is exactly the argument that
|
|
142
|
+
produces safe, scoreable output — the criteria you can score are the ones you already know to look
|
|
143
|
+
for. A technically correct schema can still be the wrong one to live with, and *fit* is what leg A
|
|
144
|
+
is for. (The console log's twin: the evaluator graded *correct* design; the PM judged *desirable*
|
|
145
|
+
design.)
|
|
146
|
+
- If the PM stops looking and promotes on autopilot, say so — an unreviewed disposition is the
|
|
147
|
+
[meta-watermelon](/okf/core/concepts/watermelon-flag.md) in a new place.
|
|
File without changes
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Rubric
|
|
3
|
+
title: "Eval Rubric: Agent-run capability baseline (kit seed — copy per initiative)"
|
|
4
|
+
timestamp: 2026-07-19
|
|
5
|
+
eval_type: capability
|
|
6
|
+
initiative_id: (set per initiative)
|
|
7
|
+
pass_threshold: 0.80
|
|
8
|
+
canonical_path: pmos/planning/evals/agent-run-eval-rubric.md
|
|
9
|
+
---
|
|
10
|
+
|
|
1
11
|
# Eval Rubric: Agent-run capability baseline (kit seed — copy per initiative)
|
|
2
12
|
|
|
3
13
|
> Kit-seeded generic rubric (D54). Two purposes: (1) it is the TEMPLATE to copy to
|
|
@@ -6,13 +16,6 @@
|
|
|
6
16
|
> meaningful from day one. It scores a generic agent run outcome-only (D14) with weighted partial
|
|
7
17
|
> credit (D15).
|
|
8
18
|
|
|
9
|
-
## Frontmatter
|
|
10
|
-
- type: Rubric
|
|
11
|
-
- eval_type: capability
|
|
12
|
-
- initiative_id: (set per initiative)
|
|
13
|
-
- pass_threshold: 0.80
|
|
14
|
-
- canonical_path: pmos/planning/evals/agent-run-eval-rubric.md
|
|
15
|
-
|
|
16
19
|
## Gate assignment
|
|
17
20
|
- **Quality Gate (deterministic):** repo CI green; `pmos-gate` (anchored + rubrics) green.
|
|
18
21
|
- **Review Gate (adversarial):** the weighted dimensions below — evaluator skill, default-to-refute,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Template
|
|
3
|
+
timestamp: 2026-07-23
|
|
4
|
+
id: "001"
|
|
5
|
+
title: short imperative title — one deliverable
|
|
6
|
+
status: todo # todo | doing | done
|
|
7
|
+
blocked_by: [] # e.g. ["002", "005"] — ticket ids that must be done first
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 001 — <title>
|
|
11
|
+
|
|
12
|
+
**One deliverable.** What "done" looks like, behaviorally — not the steps to get there. Name
|
|
13
|
+
interfaces, types, and behavioral contracts; never file paths or line numbers (they stale while the
|
|
14
|
+
work waits).
|
|
15
|
+
|
|
16
|
+
## Done when
|
|
17
|
+
- [ ] <a single, independently verifiable acceptance check>
|
|
18
|
+
|
|
19
|
+
## Notes
|
|
20
|
+
<context a builder needs; links to the initiative/PRD this ticket decomposes>
|