create-pmos 0.38.5 → 0.38.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-pmos",
3
- "version": "0.38.5",
3
+ "version": "0.38.6",
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": {
package/payload/AGENTS.md CHANGED
@@ -81,7 +81,7 @@ Every initiative carries a `type` — the lane picks what the gate requires **be
81
81
  - **Choose the model for the work (D75).** Before you delegate a sub-task or start a long routine one, run `node pmos/scripts/pmos-model.js recommend "<the work>"`: it returns a tier (`fast` for routine, `balanced`, `deep` where a mistake is costly to find later), the model and effort it maps to in the PM's policy, and why. Use it; do not pick the strongest model for everything. Review and evaluation work is pinned and is never downgraded.
82
82
  - **Documents you write here follow OKF v0.2 (D73).** `type`, `title`, `description`, then `generated: {by: claude-code/<skill>, at: "<ISO time>"}`, `sources: [{resource: "<link or id>", title: "…"}]` and `status: draft` — **one key per line, nothing indented** (the readers stop at the first indented line), no `timestamp`. Only the PM sets `status: stable` or adds `verified`. This does not apply to initiative records, tickets or ledgers. `node pmos/scripts/okf-upgrade.js .` reports what in this repository is not yet conformant.
83
83
  - **Existing surface → the PM needs the understanding too.** That retrieval warms *you*. When the work touches something that already exists — the test is *would specifying this honestly require reading code that already exists?* — run `skills/explain-surface.skill` on that region **before** the brief/PRD is authored, in a fresh context and **not** by the agent that will write it. Standard for existing surfaces, skipped for greenfield. Without it, the agent acquires the understanding and the **PM approves a spec built on facts they never saw**.
84
- 4. Anchor: the initiative file must exist at stage `intake`/`spec` with its **lane's** spec/eval artifacts authored **before** build (eval-first, D13, generalized per lane — see the lane table above; `feature` = PRD + rubric; the incident lane alone records post-hoc). Contract per lane: `feature` = the rubric's sprint-contract section with the PM's explicit `PM_approved: true`; `discovery` = the PM-approved spike brief (question + timebox); `chore` = the stated intent; `content` = the PM-approved content brief; `prototype` = the PM-approved quick brief (the judgement exercised + the specimen format) — and **no rubric**, which is the decision, not an omission. No work before the lane's approval. Feature-lane `test_method`s SHOULD be executable checks written before build (D58) — wire `templates/product-ci-starter.yml` so tier 1 is never silently empty.
84
+ 4. Anchor: the initiative file must exist at stage `intake`/`spec` with its **lane's** spec/eval artifacts authored **before** build (eval-first, D13, generalized per lane — see the lane table above; `feature` = PRD + rubric; the incident lane alone records post-hoc). Contract per lane: `feature` = the rubric's sprint-contract section with the PM's explicit `PM_approved: true`; `discovery` = the PM-approved spike brief (question + timebox); `chore` = the stated intent; `content` = the PM-approved content brief; `prototype` = the PM-approved quick brief (the judgement exercised + the specimen format) — and **no rubric**, which is the decision, not an omission. No work before the lane's approval. When you question the PM to reach any of these, follow `skills/requirements-elicitation.skill`. Feature-lane `test_method`s SHOULD be executable checks written before build (D58) — wire `templates/product-ci-starter.yml` so tier 1 is never silently empty.
85
85
  5. Branch `initiative/<id>`; execute at control altitude; one commit per artifact.
86
86
  6. Self-evaluate against the contract — self-eval is unreliable; it is an input to the gates, never a verdict.
87
87
  7. Close the gates: **Quality** = this repo's CI plus the kit gate (`pmos/scripts/gate-initiative.sh`
@@ -1,3 +1,3 @@
1
- kernel-source: pmos@f5daae8
2
- assembled: 2026-10-02
1
+ kernel-source: pmos@cb4d5ff
2
+ assembled: 2026-10-03
3
3
  mode: vendor
@@ -0,0 +1,61 @@
1
+ ---
2
+ type: Template
3
+ title: Requirements Brief Template
4
+ description: The scaffold for the brief that the requirements-elicitation skill writes — problem, evidence, constraints, stakeholders, dependencies, success measure, out of scope, open questions, gathered notes used and decisions. Copy into /planning/briefs/ as <id>-requirements.md and set it as the initiative's brief_path.
5
+ tags: [template, requirements, elicitation, lanes]
6
+ timestamp: 2026-10-03
7
+ ---
8
+
9
+ # Requirements Brief Template
10
+
11
+ **Situating context:** Authored with the `requirements-skills-overhaul` initiative. Each lane used to start from its own artifact with no shared record of what the PM said. The [requirements-elicitation skill](/skills/requirements-elicitation.skill) fills this brief from a dialogue with the PM. A PRD, a spike brief or a fix specification starts from it. Copy the block below into `/planning/briefs/<id>-requirements.md`. The copy is an operational instance, not OKF knowledge.
12
+
13
+ > Usage: replace every `<…>` placeholder. Write each answer in the PM's words where the PM gave words. Leave no section empty: write `none` or move the item to *Open questions*. Never write an unconfirmed item as a fact.
14
+
15
+ ---
16
+
17
+ ```markdown
18
+ # Requirements Brief: <initiative title>
19
+
20
+ ## Identity
21
+ - initiative_id: <id>
22
+ - lane: <lane name>
23
+ - parent_KR: <objective or KR reference, or health:<id>>
24
+ - date: <YYYY-MM-DD>
25
+
26
+ ## Problem and user
27
+ <!-- Who has the problem, and what do they do today instead? -->
28
+
29
+ ## Evidence
30
+ <!-- What shows that the problem is real? Give a source for each item. -->
31
+
32
+ ## Constraints
33
+ <!-- What is fixed: dates, budget, technology, rules, promises already made. -->
34
+
35
+ ## Stakeholders and decision owner
36
+ <!-- Who is affected, who must agree, and who decides if they disagree. -->
37
+
38
+ ## Dependencies
39
+ <!-- What must exist, or be done by someone else, first. -->
40
+
41
+ ## Success measure
42
+ <!-- The measure, its start value, its target and the date. -->
43
+
44
+ ## Out of scope
45
+ <!-- What this will not do, even though someone might expect it to. -->
46
+
47
+ ## Lane answers
48
+ <!-- The answers to the lane's own questions: bug report fields for a bug-fix,
49
+ the question and drop criteria for a discovery, and so on. -->
50
+
51
+ ## Open questions
52
+ <!-- Each question the PM left open, and each deferred note item. Do not answer them here. -->
53
+
54
+ ## Gathered notes used
55
+ <!-- For each note item shown to the PM: the pointer, its confidence, and the PM's answer
56
+ (confirmed, rejected or deferred). Write `none` if no notes existed. -->
57
+
58
+ ## Decisions
59
+ <!-- The PM's confirmed decisions, in the PM's words. A confirmed note item goes here with
60
+ its pointer. -->
61
+ ```
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: "Eval calibration log"
4
4
  description: "Append-only record of every PM override of an evaluator verdict."
5
- generated: {by: process:create-pmos, at: "2026-10-02T23:30:04Z"}
5
+ generated: {by: process:create-pmos, at: "2026-10-03T00:48:37Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: "Health budgets"
4
4
  description: "Closed registry of health-budget anchors (D59), edited only by the PM."
5
- generated: {by: process:create-pmos, at: "2026-10-02T23:30:04Z"}
5
+ generated: {by: process:create-pmos, at: "2026-10-03T00:48:37Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -38,12 +38,11 @@ definition of *what to design* and the hard constraints, agreed before any desig
38
38
 
39
39
  ## Procedure
40
40
 
41
- 0. **Grill before you brief** (the [prd skill](/skills/prd.skill)'s step-0 discipline, applied
42
- to design intent): where the PM's aesthetic or structural intent is ambiguous, ask **one question
43
- at a time with a recommended answer**, stop at unambiguous — no cap; a batch questionnaire is not
44
- compliant. Look up what the environment answers (the capability ledger, the design system, the
45
- promoted prototype); the taste calls are the PM's (D12). The recorded cost of skipping this is the
46
- console-redesign series — "too many navigations" was stated once and unhonored twice.
41
+ 0. **Ask before you brief.** Where the PM's aesthetic or structural intent is ambiguous, follow the
42
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill). Look up what the
43
+ environment answers (the capability ledger, the design system, the promoted prototype); the taste
44
+ calls are the PM's. The recorded cost of skipping this is the console-redesign series — "too many
45
+ navigations" was stated once and unhonored twice.
47
46
  1. **Confirm the anchor.** The initiative has a PRD and an anchor — a parent KR, or a declared
48
47
  health budget `health:<id>` (D59). The brief does not re-argue *whether*
49
48
  to build the surface; it says how it should look.
@@ -71,5 +71,4 @@ initiative; prototype code deleted or explicitly quarantined.
71
71
 
72
72
  ## Level 3 sub-cases
73
73
 
74
- - None yet. (Multi-question research programs spanning several spikes: author
75
- `discovery-program.md` on first need.)
74
+ - None yet.
@@ -79,11 +79,8 @@ Before any work begins, the generator and evaluator **agree on done-criteria**
79
79
  contract stage of the [SDLC loop](/okf/core/concepts/sdlc-loop.md). A rubric is incomplete without
80
80
  one.
81
81
 
82
- **Reach the criteria by grilling, not assumption** (the [prd skill](/skills/prd.skill)'s step-0
83
- discipline applies here too): where the PM's intent is ambiguous, ask **one question at a time with a
84
- recommended answer**, stop at unambiguous — no cap, and a batch questionnaire is not compliant. If a
85
- fact can be found by exploring the environment, look it up rather than asking — the decisions are the
86
- PM's (D12). **Write criteria for durability:** behavioral contracts and interfaces, never file paths
82
+ **Reach the criteria by asking, not assumption.** Where the PM's intent is ambiguous, follow the
83
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill). **Write criteria for durability:** behavioral contracts and interfaces, never file paths
87
84
  or line numbers (they stale while work waits); each criterion independently verifiable.
88
85
 
89
86
  **Format:**
@@ -63,6 +63,7 @@ router is the bug (fix it via the weekly harness scan).
63
63
  | "**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) |
64
64
  | 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/copywriting.skill). Copy for a prototype rides the prototype instead (D60) | Initiative Gate (content brief) |
65
65
  | **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) |
66
+ | "**Gather**, **clarify** or **sharpen** the requirements" — the PM has a vague ask or notes from gathering and no brief yet | **Requirements elicitation** (before the lane's first artifact) | [requirements-elicitation skill](/skills/requirements-elicitation.skill) → `planning/briefs/<id>-requirements.md` at `brief_path`; reads the lane's input from `scripts/lane-defs.js` and the notes `gather-requirements` filed (D71); the PM confirms each note item. It does not choose the lane and does not write the PRD | none (the brief is never a gate) |
66
67
 
67
68
  **Every route** still takes the universal steps: anchored initiative row (`create_initiative`),
68
69
  branch `initiative/<id>`, and the human Acceptance Gate at the end (D12) — the router never bypasses
@@ -97,5 +98,5 @@ Check your position at any time with `node scripts/workflow-state.js <id>`.
97
98
  already decided to explore, go straight to prototype.
98
99
  - **Anchor-free trivia** (a typo, a broken link): the `no-initiative` label, no lane. Real work
99
100
  never takes the hatch.
100
- - **Unknown shape after the checks:** ask the PM one routing question with a recommended answer —
101
- do not guess a lane.
101
+ - **Unknown shape after the checks:** ask the PM one routing question, as the
102
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill) describes. Do not guess a lane.
@@ -30,22 +30,17 @@ agreed.
30
30
 
31
31
  ## Procedure
32
32
 
33
- 0a. **Existing surface? Understand it first — before grilling.** If specifying this honestly
33
+ 0a. **Existing surface? Understand it first — before asking.** If specifying this honestly
34
34
  requires reading code that already exists, an [explain-surface](/skills/explain-surface.skill)
35
35
  pass runs on that region **first**, in a fresh context and **not by you**. Its *Open questions*
36
- section is a declared input to the grilling below: those are the things that could not be
36
+ section is a declared input to the questions in step 0: those are the things that could not be
37
37
  determined from the code, and they must be resolved with the PM or carried explicitly into the
38
38
  PRD's risks — never silently answered by assumption. Greenfield → skip. This exists because step 0b's
39
39
  boundary rule, on its own, gives the **agent** the understanding and the PM none.
40
- 0. **Grill before you write.** Before any authoring, interrogate the PM's intent as a dialogue —
41
- **one question at a time, a recommended answer offered with each**, no authoring until shared
42
- understanding is confirmed. Stop when the intent is **unambiguous**, not at a count — there is
43
- deliberately **no question cap** (under-specification needs unlimited digging; a redundant
44
- question is a quality bug, not a quantity bug). A batch questionnaire is **not** compliant with
45
- this step. Boundary rule, near-verbatim from AGENTS.md: *if a fact can be found by exploring the
46
- environment, look it up rather than asking — the decisions, though, are the PM's* (D12 at
47
- optimal altitude). A stated requirement that later goes unhonored in a build (the recorded
48
- "too many navigations" class) is exactly what this step exists to pin down in writing.
40
+ 0. **Ask before you write.** Follow the [requirements-elicitation skill](/skills/requirements-elicitation.skill):
41
+ its asking rule holds here, and no authoring starts until the PM confirms the shared understanding.
42
+ A stated requirement that later goes unhonored in a build (the recorded "too many navigations"
43
+ class) is what this step pins down in writing.
49
44
  1. **Anchor to strategy first.** Identify the parent KR in the
50
45
  [OKR tree](/okf/core/concepts/okr-tree.md) — or, for maintenance work with no honest KR, the
51
46
  declared [health budget](/okf/core/concepts/health-anchors.md) (`health:<id>`, D59). If the
@@ -107,8 +102,7 @@ its situating sentence (D58); the eval rubric is queued to be written first.
107
102
 
108
103
  ## Level 3 sub-cases
109
104
 
110
- - Multi-product or platform PRDs that span more than one `product_slug`: see `prd-multiproduct.md`
111
- (author on first need).
105
+ - None yet.
112
106
  - Spike / discovery work where the deliverable is a learning, not a feature, is **not a PRD
113
107
  case** — take the discovery lane ([D56](/okf/products/pmos/adr/d56-initiative-lanes.md)):
114
108
  [discovery skill](/skills/discovery.skill) +
@@ -0,0 +1,231 @@
1
+ ---
2
+ name: requirements-elicitation
3
+ description: Turn a vague ask, or notes the PM gathered, into a requirements brief by asking the PM questions one at a time. Use when the PM wants to gather, clarify or sharpen requirements, or before any lane writes its first artifact (PRD, spike brief, fix specification, content brief).
4
+ version: 1.0.0
5
+ owner: wawan
6
+ risk: low
7
+ category: planning
8
+ scope: read:okf, read:planning, read:state, write:planning/briefs
9
+ ---
10
+
11
+ # requirements-elicitation — Ask until the requirement is sharp
12
+
13
+ This skill is the one place where PMOS states how an agent asks the PM questions. It also
14
+ holds the questions each lane needs. Its output is a requirements brief that a PRD, a spike
15
+ brief or a fix specification starts from. It does not write those documents.
16
+
17
+ > **Format note:** this skill follows [SKILL-FORMAT](/skills/SKILL-FORMAT.md). The text is
18
+ > instructional (class A of [technical-writing-ste](/skills/technical-writing-ste.skill)).
19
+
20
+ ## When to use vs. not
21
+
22
+ - **Use** when the PM asks to gather, clarify or sharpen requirements.
23
+ - **Use** before the first artifact of any lane, when the intent is not yet unambiguous.
24
+ - **Do not use** to decide the lane. That is the [pmos-router](/skills/pmos-router.skill).
25
+ - **Do not use** to judge whether to build at all. That is the
26
+ [strategic-brief](/skills/strategic-brief.skill).
27
+ - **Do not use** when an instance of the idea is needed before the PM can judge it. Route to the
28
+ prototype lane first.
29
+
30
+ ## The asking rule
31
+
32
+ This rule holds in every step below. Other skills point here and do not repeat it.
33
+
34
+ 1. Ask one question at a time.
35
+ 2. Give a recommended answer with each question.
36
+ 3. Do not set a limit on the number of questions. Stop when the intent is unambiguous.
37
+ 4. Do not send a batch questionnaire. A batch does not satisfy this rule.
38
+ 5. Look up each fact that the repository or the record can answer. Do not ask the PM for it.
39
+ 6. Leave each decision to the PM.
40
+ 7. Write nothing until the PM confirms the shared understanding.
41
+
42
+ ## Procedure
43
+
44
+ 1. **Find the lane.** Read the initiative record and its `type`. Run
45
+ `node scripts/workflow-state.js --lanes --json` (in a kit repository the script is
46
+ `pmos/scripts/workflow-state.js`). Find the lane in `defs`.
47
+ State the lane's `input`, `output` and `done` in plain words before the first question.
48
+ *Done when:* the PM has seen the lane's input, output and done-rule.
49
+
50
+ If the script is missing or the lane is not in `defs`, say so. Ask the PM which lane applies.
51
+ Do not guess a question set.
52
+
53
+ 2. **Look up what exists.** Read the record, the PRD or brief if one exists, the OKR the
54
+ record names, and the explainer if the surface exists. Collect the facts you found.
55
+ *Done when:* every fact you will use has a source, and none of them is a question for the PM.
56
+
57
+ 3. **Read the gathered notes.** List `<state>/requirements/*.md`. `<state>` is `pmos/state/`
58
+ if it exists, and `planning/` if not. Select each item whose `initiative` names this
59
+ initiative. Show each item to the PM with its pointer and its `confidence`. Ask for one
60
+ answer per item: confirmed, rejected or deferred. Record the answer.
61
+ - A confirmed item goes in the brief under *Decisions*, with its pointer.
62
+ - A rejected item is dropped. Name it in *Gathered notes used* as rejected.
63
+ - A deferred item goes in *Open questions*.
64
+ - An item with `confidence: unconfirmed` stays unconfirmed until the PM answers. Never write
65
+ it as a fact.
66
+ - Name a note that does not parse. Skip it.
67
+ - If no notes exist, say so and continue.
68
+
69
+ Never edit a note. The notes are read-only drafts (D71).
70
+ *Done when:* every selected item has an answer, or the PM has said to skip the notes.
71
+
72
+ 4. **Ask the topic questions.** Work through the [question inventory](#question-inventory).
73
+ Skip a topic the lane's input does not need, and say that you skipped it.
74
+ Skip a question that step 2 or step 3 already answered.
75
+ *Done when:* each topic is answered, skipped with a reason, or listed in *Open questions*.
76
+
77
+ 5. **Ask the lane questions.** Find the lane in [Question sets by lane](#question-sets-by-lane).
78
+ Ask each question there that the earlier steps did not answer.
79
+ *Done when:* every element of the lane's `input` has an answer or an *Open questions* entry.
80
+
81
+ 6. **Confirm.** Say the shared understanding back to the PM in one short list. Ask the PM to
82
+ confirm or correct it.
83
+ *Done when:* the PM has confirmed. If the PM corrects it, go back to step 4.
84
+
85
+ 7. **Write the brief.** Copy the
86
+ [requirements-brief-template](/okf/core/templates/requirements-brief-template.md). Fill every
87
+ section from the confirmed answers, in the PM's words where the PM gave words. Write it to
88
+ `planning/briefs/<id>-requirements.md`. Set `brief_path` on the initiative record. If the lane
89
+ uses `prd_path` for its first artifact and that file does not exist yet, tell the PM that the
90
+ brief is the input and that the lane's own skill writes `prd_path`.
91
+ *Done when:* the file exists, no section is empty, and `brief_path` is set.
92
+
93
+ 8. **Hand over.** Name the next skill for the lane: [prd](/skills/prd.skill) for
94
+ feature and new-feature, [discovery](/skills/discovery.skill) for discovery,
95
+ [copywriting](/skills/copywriting.skill) for content, and the lane's own
96
+ template for the others. State the open questions that remain.
97
+ *Done when:* the PM knows what comes next and what is still open.
98
+
99
+ ## Question inventory
100
+
101
+ Each topic has an opening question. Add follow-up questions when the answer is vague.
102
+
103
+ | Topic | Opening question |
104
+ |---|---|
105
+ | Problem and user | Who has this problem, and what do they do today instead? |
106
+ | Evidence | What shows that the problem is real: a number, a ticket, a quote, an incident? |
107
+ | Constraints | What is fixed: a date, a budget, a technology, a rule or a promise already made? |
108
+ | Stakeholders and decision owner | Who is affected, who must agree, and who decides if they disagree? |
109
+ | Dependencies | What must exist, or be done by someone else, before this can work? |
110
+ | Data | What data does this read or change, and who owns it? |
111
+ | Non-functional needs | What must hold about speed, security, privacy, access or cost? |
112
+ | Risks | What is the worst way this fails, and how would we notice? |
113
+ | Success measure | Which measure moves if this works, from what value to what value, by when? |
114
+ | Out of scope | What will this not do, even though someone might expect it to? |
115
+
116
+ ## Question sets by lane
117
+
118
+ Each lane has its own heading. The headings use the lane names in `scripts/lane-defs.js`.
119
+ A lane name that both profiles use (discovery, chore) has one set.
120
+
121
+ ### Lane `feature`
122
+
123
+ 1. What behaviour changes for the user, in one sentence?
124
+ 2. Does the surface exist today? If yes, what does it do now?
125
+ 3. Which KR or health budget does this serve?
126
+ 4. Can the PM judge this from a description, or must the PM see an instance first?
127
+ 5. What would the PM check by hand to accept it?
128
+
129
+ ### Lane `new-feature`
130
+
131
+ 1. Who has the problem, and how often does it happen?
132
+ 2. What shows that it is real?
133
+ 3. What do users do today?
134
+ 4. What must a first version do, and what can wait?
135
+ 5. What would make the PM drop it?
136
+
137
+ ### Lane `improvement`
138
+
139
+ 1. What does the feature do now? Look it up first.
140
+ 2. What is wrong or missing, and for whom?
141
+ 3. Which measure should the change move, and by how much?
142
+ 4. What must stay the same?
143
+ 5. How will we tell that it worked?
144
+
145
+ ### Lane `bug-fix`
146
+
147
+ 1. What are the steps that reproduce it?
148
+ 2. What is the expected result?
149
+ 3. What is the actual result?
150
+ 4. How severe is it, and who is affected?
151
+ 5. Is there a workaround?
152
+
153
+ ### Lane `discovery`
154
+
155
+ 1. What is the question, in one sentence?
156
+ 2. What is unknown, and what is already known?
157
+ 3. What evidence would end the spike?
158
+ 4. What would make this worth picking up, and what would make it worth dropping?
159
+ 5. How long may it take?
160
+
161
+ ### Lane `chore`
162
+
163
+ 1. What is the intent, in one paragraph?
164
+ 2. Which health budget does it serve?
165
+ 3. What must not change?
166
+ 4. How will the PM see that it is done?
167
+
168
+ ### Lane `incident`
169
+
170
+ 1. What broke, and who noticed?
171
+ 2. What is the cause?
172
+ 3. What was the repair, and is it permanent?
173
+ 4. What stops it from happening again?
174
+ 5. When was it fixed? The record is due within 48 hours.
175
+
176
+ ### Lane `content`
177
+
178
+ 1. Who reads it, and what should they do after?
179
+ 2. What is the one message?
180
+ 3. What tone and length does the reader expect?
181
+ 4. What facts must it contain, and where are they?
182
+ 5. Does the PM want a rubric?
183
+
184
+ ### Lane `prototype`
185
+
186
+ 1. What judgement does the PM need to make?
187
+ 2. Which format fits the specimens: a screen, a sample output, a transcript or a schema?
188
+ 3. What should the 2–3 specimens differ on?
189
+ 4. Which conventions does the class need before the specimens (design system, skill format)?
190
+
191
+ ### Lane `prd`
192
+
193
+ 1. What is the question the document answers?
194
+ 2. Who reads it?
195
+ 3. Which decision does it inform?
196
+ 4. What do the readers already know?
197
+
198
+ ### Lane `strategy`
199
+
200
+ 1. What is the question the document answers?
201
+ 2. Who reads it?
202
+ 3. Which decision does it inform?
203
+ 4. Over what period?
204
+
205
+ ### Lane `project-plan`
206
+
207
+ 1. What is in scope, and what is out?
208
+ 2. Who is on it, and for how much of their time?
209
+ 3. Which dates are fixed, and who fixed them?
210
+ 4. What does it depend on?
211
+
212
+ ### Lane `decision-record`
213
+
214
+ 1. What are the options?
215
+ 2. Which one was chosen, and by whom?
216
+ 3. What is the reason?
217
+ 4. What would reverse the choice?
218
+
219
+ ### Lane `report`
220
+
221
+ 1. What period or subject does it cover?
222
+ 2. Who reads it?
223
+ 3. What should the reader do after reading?
224
+ 4. Which sources does it use, and which can it not reach?
225
+
226
+ ## Failure behaviour
227
+
228
+ - The lane definition cannot be read: say so, and ask the PM which lane applies.
229
+ - No gathered notes exist: say so, and continue.
230
+ - A note does not parse: name it, and skip it.
231
+ - The PM leaves a question open: write it under *Open questions*. Do not answer it.
@@ -40,12 +40,11 @@ definition of *what to design* and the hard constraints, agreed before any desig
40
40
 
41
41
  ## Procedure
42
42
 
43
- 0. **Grill before you brief** (the [prd skill](/skills/prd.skill)'s step-0 discipline, applied
44
- to design intent): where the PM's aesthetic or structural intent is ambiguous, ask **one question
45
- at a time with a recommended answer**, stop at unambiguous — no cap; a batch questionnaire is not
46
- compliant. Look up what the environment answers (the capability ledger, the design system, the
47
- promoted prototype); the taste calls are the PM's (D12). The recorded cost of skipping this is the
48
- console-redesign series — "too many navigations" was stated once and unhonored twice.
43
+ 0. **Ask before you brief.** Where the PM's aesthetic or structural intent is ambiguous, follow the
44
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill). Look up what the
45
+ environment answers (the capability ledger, the design system, the promoted prototype); the taste
46
+ calls are the PM's. The recorded cost of skipping this is the console-redesign series — "too many
47
+ navigations" was stated once and unhonored twice.
49
48
  1. **Confirm the anchor.** The initiative has a PRD and an anchor — a parent KR, or a declared
50
49
  health budget `health:<id>` (D59). The brief does not re-argue *whether*
51
50
  to build the surface; it says how it should look.
@@ -73,5 +73,4 @@ initiative; prototype code deleted or explicitly quarantined.
73
73
 
74
74
  ## Level 3 sub-cases
75
75
 
76
- - None yet. (Multi-question research programs spanning several spikes: author
77
- `discovery-program.md` on first need.)
76
+ - None yet.
@@ -81,11 +81,8 @@ Before any work begins, the generator and evaluator **agree on done-criteria**
81
81
  contract stage of the [SDLC loop](/okf/core/concepts/sdlc-loop.md). A rubric is incomplete without
82
82
  one.
83
83
 
84
- **Reach the criteria by grilling, not assumption** (the [prd skill](/skills/prd.skill)'s step-0
85
- discipline applies here too): where the PM's intent is ambiguous, ask **one question at a time with a
86
- recommended answer**, stop at unambiguous — no cap, and a batch questionnaire is not compliant. If a
87
- fact can be found by exploring the environment, look it up rather than asking — the decisions are the
88
- PM's (D12). **Write criteria for durability:** behavioral contracts and interfaces, never file paths
84
+ **Reach the criteria by asking, not assumption.** Where the PM's intent is ambiguous, follow the
85
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill). **Write criteria for durability:** behavioral contracts and interfaces, never file paths
89
86
  or line numbers (they stale while work waits); each criterion independently verifiable.
90
87
 
91
88
  **Format:**
@@ -65,6 +65,7 @@ router is the bug (fix it via the weekly harness scan).
65
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
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/copywriting.skill). Copy for a prototype rides the prototype instead (D60) | Initiative Gate (content brief) |
67
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
+ | "**Gather**, **clarify** or **sharpen** the requirements" — the PM has a vague ask or notes from gathering and no brief yet | **Requirements elicitation** (before the lane's first artifact) | [requirements-elicitation skill](/skills/requirements-elicitation.skill) → `planning/briefs/<id>-requirements.md` at `brief_path`; reads the lane's input from `scripts/lane-defs.js` and the notes `gather-requirements` filed (D71); the PM confirms each note item. It does not choose the lane and does not write the PRD | none (the brief is never a gate) |
68
69
 
69
70
  **Every route** still takes the universal steps: anchored initiative row (`create_initiative`),
70
71
  branch `initiative/<id>`, and the human Acceptance Gate at the end (D12) — the router never bypasses
@@ -99,5 +100,5 @@ Check your position at any time with `node scripts/workflow-state.js <id>`.
99
100
  already decided to explore, go straight to prototype.
100
101
  - **Anchor-free trivia** (a typo, a broken link): the `no-initiative` label, no lane. Real work
101
102
  never takes the hatch.
102
- - **Unknown shape after the checks:** ask the PM one routing question with a recommended answer —
103
- do not guess a lane.
103
+ - **Unknown shape after the checks:** ask the PM one routing question, as the
104
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill) describes. Do not guess a lane.
@@ -32,22 +32,17 @@ agreed.
32
32
 
33
33
  ## Procedure
34
34
 
35
- 0a. **Existing surface? Understand it first — before grilling.** If specifying this honestly
35
+ 0a. **Existing surface? Understand it first — before asking.** If specifying this honestly
36
36
  requires reading code that already exists, an [explain-surface](/skills/explain-surface.skill)
37
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
38
+ section is a declared input to the questions in step 0: those are the things that could not be
39
39
  determined from the code, and they must be resolved with the PM or carried explicitly into the
40
40
  PRD's risks — never silently answered by assumption. Greenfield → skip. This exists because step 0b's
41
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.
42
+ 0. **Ask before you write.** Follow the [requirements-elicitation skill](/skills/requirements-elicitation.skill):
43
+ its asking rule holds here, and no authoring starts until the PM confirms the shared understanding.
44
+ A stated requirement that later goes unhonored in a build (the recorded "too many navigations"
45
+ class) is what this step pins down in writing.
51
46
  1. **Anchor to strategy first.** Identify the parent KR in the
52
47
  [OKR tree](/okf/core/concepts/okr-tree.md) — or, for maintenance work with no honest KR, the
53
48
  declared [health budget](/okf/core/concepts/health-anchors.md) (`health:<id>`, D59). If the
@@ -109,8 +104,7 @@ its situating sentence (D58); the eval rubric is queued to be written first.
109
104
 
110
105
  ## Level 3 sub-cases
111
106
 
112
- - Multi-product or platform PRDs that span more than one `product_slug`: see `prd-multiproduct.md`
113
- (author on first need).
107
+ - None yet.
114
108
  - Spike / discovery work where the deliverable is a learning, not a feature, is **not a PRD
115
109
  case** — take the discovery lane ([D56](/okf/products/pmos/adr/d56-initiative-lanes.md)):
116
110
  [discovery skill](/skills/discovery.skill) +
@@ -0,0 +1,233 @@
1
+ ---
2
+ name: requirements-elicitation
3
+ description: Turn a vague ask, or notes the PM gathered, into a requirements brief by asking the PM questions one at a time. Use when the PM wants to gather, clarify or sharpen requirements, or before any lane writes its first artifact (PRD, spike brief, fix specification, content brief).
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, read:state, write:planning/briefs
11
+ ---
12
+
13
+ # requirements-elicitation — Ask until the requirement is sharp
14
+
15
+ This skill is the one place where PMOS states how an agent asks the PM questions. It also
16
+ holds the questions each lane needs. Its output is a requirements brief that a PRD, a spike
17
+ brief or a fix specification starts from. It does not write those documents.
18
+
19
+ > **Format note:** this skill follows [SKILL-FORMAT](/skills/SKILL-FORMAT.md). The text is
20
+ > instructional (class A of [technical-writing-ste](/skills/technical-writing-ste.skill)).
21
+
22
+ ## When to use vs. not
23
+
24
+ - **Use** when the PM asks to gather, clarify or sharpen requirements.
25
+ - **Use** before the first artifact of any lane, when the intent is not yet unambiguous.
26
+ - **Do not use** to decide the lane. That is the [pmos-router](/skills/pmos-router.skill).
27
+ - **Do not use** to judge whether to build at all. That is the
28
+ [strategic-brief](/skills/strategic-brief.skill).
29
+ - **Do not use** when an instance of the idea is needed before the PM can judge it. Route to the
30
+ prototype lane first.
31
+
32
+ ## The asking rule
33
+
34
+ This rule holds in every step below. Other skills point here and do not repeat it.
35
+
36
+ 1. Ask one question at a time.
37
+ 2. Give a recommended answer with each question.
38
+ 3. Do not set a limit on the number of questions. Stop when the intent is unambiguous.
39
+ 4. Do not send a batch questionnaire. A batch does not satisfy this rule.
40
+ 5. Look up each fact that the repository or the record can answer. Do not ask the PM for it.
41
+ 6. Leave each decision to the PM.
42
+ 7. Write nothing until the PM confirms the shared understanding.
43
+
44
+ ## Procedure
45
+
46
+ 1. **Find the lane.** Read the initiative record and its `type`. Run
47
+ `node scripts/workflow-state.js --lanes --json` (in a kit repository the script is
48
+ `pmos/scripts/workflow-state.js`). Find the lane in `defs`.
49
+ State the lane's `input`, `output` and `done` in plain words before the first question.
50
+ *Done when:* the PM has seen the lane's input, output and done-rule.
51
+
52
+ If the script is missing or the lane is not in `defs`, say so. Ask the PM which lane applies.
53
+ Do not guess a question set.
54
+
55
+ 2. **Look up what exists.** Read the record, the PRD or brief if one exists, the OKR the
56
+ record names, and the explainer if the surface exists. Collect the facts you found.
57
+ *Done when:* every fact you will use has a source, and none of them is a question for the PM.
58
+
59
+ 3. **Read the gathered notes.** List `<state>/requirements/*.md`. `<state>` is `pmos/state/`
60
+ if it exists, and `planning/` if not. Select each item whose `initiative` names this
61
+ initiative. Show each item to the PM with its pointer and its `confidence`. Ask for one
62
+ answer per item: confirmed, rejected or deferred. Record the answer.
63
+ - A confirmed item goes in the brief under *Decisions*, with its pointer.
64
+ - A rejected item is dropped. Name it in *Gathered notes used* as rejected.
65
+ - A deferred item goes in *Open questions*.
66
+ - An item with `confidence: unconfirmed` stays unconfirmed until the PM answers. Never write
67
+ it as a fact.
68
+ - Name a note that does not parse. Skip it.
69
+ - If no notes exist, say so and continue.
70
+
71
+ Never edit a note. The notes are read-only drafts (D71).
72
+ *Done when:* every selected item has an answer, or the PM has said to skip the notes.
73
+
74
+ 4. **Ask the topic questions.** Work through the [question inventory](#question-inventory).
75
+ Skip a topic the lane's input does not need, and say that you skipped it.
76
+ Skip a question that step 2 or step 3 already answered.
77
+ *Done when:* each topic is answered, skipped with a reason, or listed in *Open questions*.
78
+
79
+ 5. **Ask the lane questions.** Find the lane in [Question sets by lane](#question-sets-by-lane).
80
+ Ask each question there that the earlier steps did not answer.
81
+ *Done when:* every element of the lane's `input` has an answer or an *Open questions* entry.
82
+
83
+ 6. **Confirm.** Say the shared understanding back to the PM in one short list. Ask the PM to
84
+ confirm or correct it.
85
+ *Done when:* the PM has confirmed. If the PM corrects it, go back to step 4.
86
+
87
+ 7. **Write the brief.** Copy the
88
+ [requirements-brief-template](/okf/core/templates/requirements-brief-template.md). Fill every
89
+ section from the confirmed answers, in the PM's words where the PM gave words. Write it to
90
+ `planning/briefs/<id>-requirements.md`. Set `brief_path` on the initiative record. If the lane
91
+ uses `prd_path` for its first artifact and that file does not exist yet, tell the PM that the
92
+ brief is the input and that the lane's own skill writes `prd_path`.
93
+ *Done when:* the file exists, no section is empty, and `brief_path` is set.
94
+
95
+ 8. **Hand over.** Name the next skill for the lane: [prd](/skills/prd.skill) for
96
+ feature and new-feature, [discovery](/skills/discovery.skill) for discovery,
97
+ [copywriting](/skills/copywriting.skill) for content, and the lane's own
98
+ template for the others. State the open questions that remain.
99
+ *Done when:* the PM knows what comes next and what is still open.
100
+
101
+ ## Question inventory
102
+
103
+ Each topic has an opening question. Add follow-up questions when the answer is vague.
104
+
105
+ | Topic | Opening question |
106
+ |---|---|
107
+ | Problem and user | Who has this problem, and what do they do today instead? |
108
+ | Evidence | What shows that the problem is real: a number, a ticket, a quote, an incident? |
109
+ | Constraints | What is fixed: a date, a budget, a technology, a rule or a promise already made? |
110
+ | Stakeholders and decision owner | Who is affected, who must agree, and who decides if they disagree? |
111
+ | Dependencies | What must exist, or be done by someone else, before this can work? |
112
+ | Data | What data does this read or change, and who owns it? |
113
+ | Non-functional needs | What must hold about speed, security, privacy, access or cost? |
114
+ | Risks | What is the worst way this fails, and how would we notice? |
115
+ | Success measure | Which measure moves if this works, from what value to what value, by when? |
116
+ | Out of scope | What will this not do, even though someone might expect it to? |
117
+
118
+ ## Question sets by lane
119
+
120
+ Each lane has its own heading. The headings use the lane names in `scripts/lane-defs.js`.
121
+ A lane name that both profiles use (discovery, chore) has one set.
122
+
123
+ ### Lane `feature`
124
+
125
+ 1. What behaviour changes for the user, in one sentence?
126
+ 2. Does the surface exist today? If yes, what does it do now?
127
+ 3. Which KR or health budget does this serve?
128
+ 4. Can the PM judge this from a description, or must the PM see an instance first?
129
+ 5. What would the PM check by hand to accept it?
130
+
131
+ ### Lane `new-feature`
132
+
133
+ 1. Who has the problem, and how often does it happen?
134
+ 2. What shows that it is real?
135
+ 3. What do users do today?
136
+ 4. What must a first version do, and what can wait?
137
+ 5. What would make the PM drop it?
138
+
139
+ ### Lane `improvement`
140
+
141
+ 1. What does the feature do now? Look it up first.
142
+ 2. What is wrong or missing, and for whom?
143
+ 3. Which measure should the change move, and by how much?
144
+ 4. What must stay the same?
145
+ 5. How will we tell that it worked?
146
+
147
+ ### Lane `bug-fix`
148
+
149
+ 1. What are the steps that reproduce it?
150
+ 2. What is the expected result?
151
+ 3. What is the actual result?
152
+ 4. How severe is it, and who is affected?
153
+ 5. Is there a workaround?
154
+
155
+ ### Lane `discovery`
156
+
157
+ 1. What is the question, in one sentence?
158
+ 2. What is unknown, and what is already known?
159
+ 3. What evidence would end the spike?
160
+ 4. What would make this worth picking up, and what would make it worth dropping?
161
+ 5. How long may it take?
162
+
163
+ ### Lane `chore`
164
+
165
+ 1. What is the intent, in one paragraph?
166
+ 2. Which health budget does it serve?
167
+ 3. What must not change?
168
+ 4. How will the PM see that it is done?
169
+
170
+ ### Lane `incident`
171
+
172
+ 1. What broke, and who noticed?
173
+ 2. What is the cause?
174
+ 3. What was the repair, and is it permanent?
175
+ 4. What stops it from happening again?
176
+ 5. When was it fixed? The record is due within 48 hours.
177
+
178
+ ### Lane `content`
179
+
180
+ 1. Who reads it, and what should they do after?
181
+ 2. What is the one message?
182
+ 3. What tone and length does the reader expect?
183
+ 4. What facts must it contain, and where are they?
184
+ 5. Does the PM want a rubric?
185
+
186
+ ### Lane `prototype`
187
+
188
+ 1. What judgement does the PM need to make?
189
+ 2. Which format fits the specimens: a screen, a sample output, a transcript or a schema?
190
+ 3. What should the 2–3 specimens differ on?
191
+ 4. Which conventions does the class need before the specimens (design system, skill format)?
192
+
193
+ ### Lane `prd`
194
+
195
+ 1. What is the question the document answers?
196
+ 2. Who reads it?
197
+ 3. Which decision does it inform?
198
+ 4. What do the readers already know?
199
+
200
+ ### Lane `strategy`
201
+
202
+ 1. What is the question the document answers?
203
+ 2. Who reads it?
204
+ 3. Which decision does it inform?
205
+ 4. Over what period?
206
+
207
+ ### Lane `project-plan`
208
+
209
+ 1. What is in scope, and what is out?
210
+ 2. Who is on it, and for how much of their time?
211
+ 3. Which dates are fixed, and who fixed them?
212
+ 4. What does it depend on?
213
+
214
+ ### Lane `decision-record`
215
+
216
+ 1. What are the options?
217
+ 2. Which one was chosen, and by whom?
218
+ 3. What is the reason?
219
+ 4. What would reverse the choice?
220
+
221
+ ### Lane `report`
222
+
223
+ 1. What period or subject does it cover?
224
+ 2. Who reads it?
225
+ 3. What should the reader do after reading?
226
+ 4. Which sources does it use, and which can it not reach?
227
+
228
+ ## Failure behaviour
229
+
230
+ - The lane definition cannot be read: say so, and ask the PM which lane applies.
231
+ - No gathered notes exist: say so, and continue.
232
+ - A note does not parse: name it, and skip it.
233
+ - The PM leaves a question open: write it under *Open questions*. Do not answer it.
@@ -2,7 +2,7 @@
2
2
  type: Reference
3
3
  title: "Discoveries and friction log"
4
4
  description: "Append-only record of what runs discovered and where the process rubbed."
5
- generated: {by: process:create-pmos, at: "2026-10-02T23:30:04Z"}
5
+ generated: {by: process:create-pmos, at: "2026-10-03T00:48:37Z"}
6
6
  status: stable
7
7
  ---
8
8
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  Newest first, ISO dates.
4
4
 
5
- ## 2026-10-02
5
+ ## 2026-10-03
6
6
 
7
7
  - Adopted OKF v0.2 (D73).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.38.5",
3
+ "version": "0.38.6",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pmos-workspace",
3
- "version": "0.38.5",
3
+ "version": "0.38.6",
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",
@@ -4,6 +4,10 @@ label: "Gather requirements"
4
4
  description: "Read what changed in the PM's mail, chat, Jira, Confluence, calendar and meeting notes since the last note, and file one dated note of requirements — each with its source, how sure it is, and which initiative it touches."
5
5
  run: agent
6
6
  agent: claude
7
+ version: 1.1.0
8
+ owner: wawan
9
+ risk: low
10
+ scope: read:connectors, read:state, write:state/requirements
7
11
  output:
8
12
  - New or changed requirements
9
13
  - Validations and contradictions
@@ -20,17 +24,22 @@ Rules that always hold:
20
24
  4. NOTHING INVENTED. If a source is not reachable in this session, say so under "Sources reached and not reached". If nothing changed, say that. An honest empty note is correct.
21
25
  5. UNCONFIRMED IS ALLOWED. Mark every item `confidence: unconfirmed` or `confirmed` (confirmed = a person with authority said it in a decision, an approved document or a closed ticket). A note is evidence, never a decision or an acceptance.
22
26
 
23
- Procedure:
27
+ Procedure (each step ends with a check that shows it is done):
24
28
  1. Find the state directory: `pmos/state/` if it exists, otherwise `planning/`. The note goes in `<state>/requirements/YYYY-MM-DD.md` (today's date). If today's file already exists, do NOT overwrite it: append a section `## Later run HH:MM`.
29
+ Done when: the target path is named, and an existing file is still intact.
25
30
  2. Read the previous note in that folder to learn the cutoff. With no previous note, look back 3 days.
31
+ Done when: you can state the cutoff as a date and time.
26
32
  3. Read the initiatives in `<state>/initiatives/` (or `planning/initiatives/`) so you can say which one an item touches. Match by what the item is about, not by keyword.
33
+ Done when: you have the list of initiative ids that an item can name.
27
34
  4. For each source you can reach, read what changed since the cutoff: mail, chat, Jira, Confluence, calendar events with their notes, meeting notes.
35
+ Done when: each source kind is either read or marked not reached.
28
36
  5. For each requirement found, write one item:
29
37
  - the requirement, in your words
30
38
  - pointer: kind · id or link · date · author
31
39
  - confidence: unconfirmed | confirmed
32
40
  - relation: validates | clarifies | extends | contradicts | none
33
41
  - initiative: its id, or `unmatched`
42
+ Done when: every item has all five fields and a pointer.
34
43
  6. Start the file with this frontmatter (OKF v0.2, D73). Every key is on ONE line — never indent a key under another, because the readers stop at the first indented line. Then the four sections above, in this order:
35
44
  ```
36
45
  ---
@@ -43,8 +52,11 @@ Procedure:
43
52
  ---
44
53
  ```
45
54
  `sources` lists every item the note is derived from (the same pointers you give per item). Do not add a `timestamp` and do not add `verified`: only the PM confirms a note.
55
+ Done when: the file starts with this frontmatter and holds the four sections in order.
46
56
  7. Under "Sources reached and not reached", list every source kind you tried, with `reached` or `not reached — <why>`, and the number of private items skipped.
57
+ Done when: every source kind you tried has a line, and the private count is stated.
47
58
  8. Finish by saying in one line how many items you filed and where. Do not commit; the PM's Sync carries the file.
59
+ Done when: the count and the path are said once, and no commit was made.
48
60
 
49
61
  Output contract — produce EXACTLY these sections, the same shape every run:
50
62
  - New or changed requirements