create-pmos 0.38.5 → 0.38.7

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.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/payload/AGENTS.md +1 -1
  3. package/payload/KIT-VERSION +2 -2
  4. package/payload/okf/core/templates/report-rubric-template.md +35 -0
  5. package/payload/okf/core/templates/report-weekly-template.md +21 -10
  6. package/payload/okf/core/templates/requirements-brief-template.md +61 -0
  7. package/payload/planning/evals/eval-calibration.md +1 -1
  8. package/payload/planning/okrs/health-budgets.md +1 -1
  9. package/payload/skills/design-brief.skill +5 -6
  10. package/payload/skills/discovery.skill +1 -2
  11. package/payload/skills/eval-rubric.skill +2 -5
  12. package/payload/skills/pm-communication.skill +123 -0
  13. package/payload/skills/pmos-router.skill +4 -2
  14. package/payload/skills/prd.skill +7 -13
  15. package/payload/skills/requirements-elicitation.skill +231 -0
  16. package/payload/skills/technical-writing-ste.skill +5 -3
  17. package/payload/skills-native/design-brief/SKILL.md +5 -6
  18. package/payload/skills-native/discovery/SKILL.md +1 -2
  19. package/payload/skills-native/eval-rubric/SKILL.md +2 -5
  20. package/payload/skills-native/pm-communication/SKILL.md +125 -0
  21. package/payload/skills-native/pmos-router/SKILL.md +4 -2
  22. package/payload/skills-native/prd/SKILL.md +7 -13
  23. package/payload/skills-native/requirements-elicitation/SKILL.md +233 -0
  24. package/payload/skills-native/technical-writing-ste/SKILL.md +5 -3
  25. package/payload/state/discoveries.md +1 -1
  26. package/payload/state/log.md +1 -1
  27. package/workspace/package-lock.json +1 -1
  28. package/workspace/package.json +1 -1
  29. package/workspace/skills/gather-requirements.skill +13 -1
  30. package/workspace/skills/report-biweekly.skill +5 -5
  31. package/workspace/skills/report-daily.skill +5 -5
  32. package/workspace/skills/report-monthly.skill +5 -5
  33. package/workspace/skills/report-special.skill +3 -3
  34. package/workspace/skills/report-weekly.skill +5 -5
  35. package/workspace/skills/weekly-report.skill +3 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-pmos",
3
- "version": "0.38.5",
3
+ "version": "0.38.7",
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@8c38e46
2
+ assembled: 2026-10-03
3
3
  mode: vendor
@@ -0,0 +1,35 @@
1
+ ---
2
+ type: Template
3
+ title: Report Rubric Template
4
+ description: The scaffold for judging a report or decision record (D68 report and decision-record lanes) — accuracy and sourcing, audience fit, decision clarity and honest gaps, with a pass threshold and two caps. Copy it as the rubric the lane's review step grades against.
5
+ tags: [template, report, rubric, review, pm-artifacts]
6
+ timestamp: 2026-10-03
7
+ ---
8
+
9
+ # Report Rubric Template
10
+
11
+ **Situating context:** Authored with [D78](/okf/products/pmos/adr/d78-one-report-shape.md). The review step of the `report` and `decision-record` lanes turned green on any non-empty `reviewed_by`, with no standard to grade against. This rubric is that standard. The [pm-communication skill](/skills/pm-communication.skill) hands it to the reviewer. Copy the block below, set the audience, and keep the weights unless the PM changes them. The copy is an operational instance, not OKF knowledge.
12
+
13
+ > Usage: the reviewer is not the drafter. Grade the document, not the process that made it. Score each dimension from 0 to 1, multiply by its weight, add them, and compare to the threshold. Record the verdict in `evals.jsonl`. The PM's acceptance is separate and binds.
14
+
15
+ ---
16
+
17
+ ```markdown
18
+ # Rubric: <report or decision record title>
19
+
20
+ - initiative_id: <id>
21
+ - audience: <leadership | delivery | partner>
22
+ - pass_threshold: 0.80
23
+
24
+ | # | Dimension | Weight | Full credit |
25
+ |---|---|---|---|
26
+ | D1 | Accuracy and sourcing | 0.30 | Every claim carries a pointer: an initiative id, an acceptance, a note, or a source item. A reviewer can open each pointer and find the claim. Numbers match their source. |
27
+ | D2 | Audience fit | 0.25 | The order and content match the audience. Leadership: the decision or headline first, then the risk, then the evidence. Delivery: scope, state, acceptance and what blocks. Partner: what changed for them and what they must do, with a date. Nothing the audience cannot act on is included. |
28
+ | D3 | Decision clarity | 0.25 | The reader can tell, from the first screen, whether a decision is needed, what it is, the options, the recommendation and the date. A document with no decision says so. A decision record states the choice before the reasoning. |
29
+ | D4 | Honest gaps | 0.20 | Sources that could not be reached are named. Items that could not be verified are marked unverified. A quiet period is reported as quiet. Nothing is filled in to make the report look complete. |
30
+
31
+ ## Caps
32
+
33
+ - A claim stated as fact with no pointer that the reviewer cannot find in any source: the score is capped at 0.60.
34
+ - A source named that the drafter did not reach: the score is capped at 0.40.
35
+ ```
@@ -1,35 +1,46 @@
1
1
  ---
2
2
  type: Template
3
3
  title: Weekly Report Template
4
- description: A regular status report (D68 report lane, light track by default): what moved, against which KR or domain goal, what is blocked, and what needs the reader.
4
+ description: A regular status report (D68 report lane, light track by default) in the one report frame of D78 — Headline, What moved, Risks, Metrics, Needs your call, Sources reached and not reached — for a named audience.
5
5
  tags: [template, report, status, pm-artifacts]
6
- timestamp: 2026-10-01
6
+ timestamp: 2026-10-03
7
7
  ---
8
8
 
9
9
  # Weekly Report Template
10
10
 
11
- **Situating context:** Authored with [D68](/okf/products/pmos/adr/d68-repository-profiles.md) for the pm-artifacts profile, by release R3 of [the PMOS overhaul plan](/planning/research/pm-overhaul-plan.md). Copy the block below into the repository's planning area, fill every `<…>`, and point the initiative record at it (`brief_path` for a brief, `doc_path` for the deliverable). The copy is an operational instance, not OKF knowledge.
11
+ **Situating context:** Authored with [D68](/okf/products/pmos/adr/d68-repository-profiles.md) for the pm-artifacts profile, by release R3 of [the PMOS overhaul plan](/planning/research/pm-overhaul-plan.md). Copy the block below into the repository's planning area, fill every `<…>`, and point the initiative record at it (`brief_path` for a brief, `doc_path` for the deliverable). The copy is an operational instance, not OKF knowledge. The section list is the report frame of [D78](/okf/products/pmos/adr/d78-one-report-shape.md): Headline first, Needs your call and Sources reached and not reached last. A PM's definition file may replace the middle sections (What moved, Risks, Metrics). The [pm-communication skill](/skills/pm-communication.skill) drafts this document for a named audience. Keep the `initiative_id` line: the workflow audit uses it to find the report.
12
12
 
13
13
  ---
14
14
 
15
15
  ```markdown
16
+ ---
17
+ type: Reference
18
+ title: "Report — <week of YYYY-MM-DD> — <scope: domain | portfolio>"
19
+ initiative_id: <id of the report-lane initiative>
20
+ audience: <leadership | delivery | partner>
21
+ status: draft
22
+ ---
23
+
16
24
  # Weekly report — <week of YYYY-MM-DD> — <scope: domain | portfolio>
17
25
 
18
26
  ## Headline
19
- <one sentence: the most important change this week>
27
+ <one or two sentences: what the reader most needs to know. Put the decision first if there is one.>
20
28
 
21
- ## Moved this week
29
+ ## What moved
22
30
  | initiative | anchor (KR · domain) | what moved | evidence |
23
31
  |---|---|---|---|
24
32
 
33
+ ## Risks
34
+ | initiative | risk or blocker | what is needed | from whom |
35
+ |---|---|---|---|
36
+
25
37
  ## Metrics
26
38
  | metric | last week | this week | target | trend |
27
39
  |---|---|---|---|---|
28
40
 
29
- ## Blocked or at risk
30
- | initiative | blocker | what is needed | from whom |
31
- |---|---|---|---|
41
+ ## Needs your call
42
+ <each decision or review waiting on the reader: the question, the options, your recommendation, the date it is needed by>
32
43
 
33
- ## Needs you
34
- <the decisions or reviews waiting on the reader>
44
+ ## Sources reached and not reached
45
+ <each source kind: reached, or not reached and why. Say if nothing changed.>
35
46
  ```
@@ -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-03T01:20:42Z"}
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-03T01:20:42Z"}
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:**
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: pm-communication
3
+ description: Draft a status report, stakeholder update or decision record for one named audience (leadership, delivery or partner), write it where the initiative's record points, and set doc_path. Use when the PM asks for a status update, a stakeholder update, a decision communication, a report, or to put a scheduled draft under a lane.
4
+ version: 1.0.0
5
+ owner: wawan
6
+ risk: low
7
+ category: communication
8
+ scope: read:okf, read:planning, read:state, write:planning/reports
9
+ ---
10
+
11
+ # pm-communication — Draft the update for the reader
12
+
13
+ This skill is the producer for the `report` and `decision-record` lanes of the document profile
14
+ ([D77](/okf/products/pmos/adr/d77-lane-definitions.md)). It drafts one document for one audience in
15
+ the report frame of [D78](/okf/products/pmos/adr/d78-one-report-shape.md). It writes a file. It sends
16
+ nothing.
17
+
18
+ > **Format note:** this skill follows [SKILL-FORMAT](/skills/SKILL-FORMAT.md). The text is
19
+ > instructional (class A of [technical-writing-ste](/skills/technical-writing-ste.skill)).
20
+ > The documents it drafts are class B, except the request in *Needs your call*.
21
+
22
+ ## When to use vs. not
23
+
24
+ - **Use** for a status report, a stakeholder update, a decision record or a decision communication.
25
+ - **Use** to put a scheduled draft under the `report` lane (step 4).
26
+ - **Do not use** for customer-facing copy or release notes. That is the content lane and the
27
+ [copywriting skill](/skills/copywriting.skill).
28
+ - **Do not use** to decide the lane. That is the [pmos-router](/skills/pmos-router.skill).
29
+ - **Do not use** to gather what the PM wants to say. That is the
30
+ [requirements-elicitation skill](/skills/requirements-elicitation.skill), which holds the
31
+ questions for the `report` and `decision-record` lanes. Follow it when step 2 needs answers.
32
+
33
+ ## Rules that always hold
34
+
35
+ 1. The draft is a file in this repository. Never send, post, share, email, publish or upload it. The PM does that (D71).
36
+ 2. Every claim carries a pointer: an initiative id, an acceptance, a note, a run or a source item. A claim with no pointer is left out or marked "unverified".
37
+ 3. Write nothing that you did not read. Name each source you could not reach. If nothing changed, say so.
38
+ 4. Never write `reviewed_by`, a review verdict, an acceptance or a handoff. Those belong to the reviewer and the PM.
39
+ 5. A gathered note with `confidence: unconfirmed` is marked unverified in the draft. Never write it as a fact.
40
+ 6. Skip threads and pages that are private, personal, confidential or HR. Count them. Do not read them.
41
+ 7. Never copy message bodies, attachments, tokens or credentials. Quote at most one short sentence per item.
42
+
43
+ ## Procedure
44
+
45
+ 1. **Find the lane and the record.** Read the initiative record and its `type`. Run
46
+ `node scripts/workflow-state.js --lanes --json` (in a kit repository the script is
47
+ `pmos/scripts/workflow-state.js`). Find the lane in `defs`. It must be `report` or
48
+ `decision-record`. State the lane's `output` and `done` in plain words before you draft.
49
+ *Done when:* the PM has seen the lane's output and done-rule.
50
+
51
+ If the profile has no such lane (the code profile), say so. Offer the content lane with an
52
+ internal audience, and stop. If the script is missing or the lane is unknown, say so and ask
53
+ which lane applies.
54
+
55
+ 2. **Name the audience.** The audience is leadership, delivery or partner. Read it from the
56
+ record, the PM's definition file or the PM's request. If none names it, ask the PM, with a
57
+ recommended answer, by the requirements-elicitation skill. Do not choose one.
58
+ *Done when:* the audience is one of the three and the PM has confirmed it.
59
+
60
+ 3. **Gather the facts.** Read what the draft will claim: the initiatives and their acceptances
61
+ (`node scripts/workflow-state.js`), the runs, the notes in `<state>/requirements/` (`<state>`
62
+ is `pmos/state/` if it exists, and `planning/` if not), and each source the PM's definition
63
+ file names that you can reach. For a report, read `<state>/reports/definitions/<cadence>.md`
64
+ if it exists and follow it where it does not remove a part of the frame. Look facts up. Do
65
+ not ask the PM for a fact that a file holds.
66
+ *Done when:* each claim you will make has a pointer, and each source you could not reach is listed.
67
+
68
+ 4. **Adopt a scheduled draft, if the PM names one.** If the PM points at an existing draft (a
69
+ file under `<state>/reports/`), do not draft a new one. Set the record's `doc_path` to that
70
+ file (step 6) and go to step 7 on it. Tell the PM that the draft was written by a schedule
71
+ and was not part of the lane until now.
72
+ *Done when:* the PM has said whether to adopt or to draft a new one.
73
+
74
+ 5. **Draft in the audience's register.** For a report, copy the
75
+ [report template](/okf/core/templates/report-weekly-template.md). For a decision record, copy the
76
+ [decision-record template](/okf/core/templates/decision-record-template.md). Fill every section
77
+ in the order and register for the audience (see [Registers](#registers)). The Headline comes
78
+ first. If a decision is needed, the Headline says what it is.
79
+ Write the file to the record's `doc_path`. If the record has none, write
80
+ `planning/reports/<initiative-id>-<YYYY-MM-DD>.md`. If the file exists, do not overwrite it:
81
+ append a section `## Later run HH:MM`. Start with this frontmatter, one key per line:
82
+ `type: Reference`, `title`, `initiative_id`, `audience`, `status: draft`,
83
+ `generated: {by: claude-code/pm-communication, at: "<ISO 8601>"}` and
84
+ `sources: [{resource: "<pointer>", title: "<what it is>"}]`. Do not add `timestamp` or `verified`.
85
+ *Done when:* the file exists and has all the sections of its template.
86
+
87
+ 6. **Point the record at it.** Set `doc_path` on the initiative record to the file. This is the
88
+ only key you set. If `doc_path` already names a different file, do not change it: ask the PM.
89
+ *Done when:* `node scripts/workflow-state.js <id>` shows the draft step done with this file as its basis.
90
+
91
+ 7. **Check the draft against the done-rule.** Read the lane's `done` text. Say which part is
92
+ met: the document exists (yes), a reviewer has judged it (not yet), the PM has accepted it
93
+ (not yet), and handed off, where the lane says so (not yet). Then check the draft:
94
+ the Headline is first; the decision or the absence of one is visible on the first screen;
95
+ each claim has a pointer; *Sources reached and not reached* is last; nothing in it is
96
+ outside the audience's register.
97
+ *Done when:* every check passes or the failing one is named to the PM.
98
+
99
+ 8. **Hand over.** Say where the draft is. Name the review step: the reviewer is not you, and
100
+ grades against the [report rubric](/okf/core/templates/report-rubric-template.md). State the open
101
+ questions and the sources not reached. Do not send the draft.
102
+ *Done when:* the PM knows where the draft is, who must review it, and what is still open.
103
+
104
+ ## Registers
105
+
106
+ One register per audience. The order is fixed. What a register leaves out is as much a part of it
107
+ as what it includes. A decision comes before its reasoning for every audience.
108
+
109
+ | Audience | Order | Include | Leave out | Length |
110
+ |---|---|---|---|---|
111
+ | **Leadership** | The decision or headline; the risk; the evidence | The call you need and by when; the effect on a goal or a date; one number that shows it | Task lists, tool names, how the work was done | One screen |
112
+ | **Delivery** | Scope and state; acceptance; what blocks | Initiative ids, acceptance state, blockers with an owner, next step | Strategy, history before this period | As long as the work needs, in tables |
113
+ | **Partner** | What changed for them; what they must do, and by when | The change in their terms, the date, who to ask | Internal ids, internal debate, anything they cannot act on | Short: the action first |
114
+
115
+ For a decision record, the choice and its owner come first. Then who must act and by when. The
116
+ reasoning and the options considered come last.
117
+
118
+ ## Failure behaviour
119
+
120
+ - The audience is not named and the PM does not answer: do not draft. Say what is missing.
121
+ - The lane definition cannot be read: say so, and ask which lane applies.
122
+ - No source can be reached: write a short honest draft that says so. Do not fill the gap.
123
+ - `doc_path` names a different file: do not change it. Ask the PM.
@@ -63,6 +63,8 @@ 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) |
67
+ | "**Write a status update**, a **stakeholder update** or a **decision communication**", or put a scheduled report draft under a lane — a report, an update or a decision record for a named audience (leadership, delivery or partner) | **Document profile: the `report` or `decision-record` lane.** **Code profile: the content lane**, with an internal audience (customer-facing copy is a different request) | [pm-communication skill](/skills/pm-communication.skill) → a draft at `doc_path`, in the report frame of D78 (Headline, the middle sections, Needs your call, Sources reached and not reached); it asks for the audience, sets `doc_path`, never sends and never writes the review or the acceptance. The reviewer grades against the [report rubric](/okf/core/templates/report-rubric-template.md) | Initiative Gate (the lane's record); the review and acceptance steps stay open for the reviewer and the PM |
66
68
 
67
69
  **Every route** still takes the universal steps: anchored initiative row (`create_initiative`),
68
70
  branch `initiative/<id>`, and the human Acceptance Gate at the end (D12) — the router never bypasses
@@ -97,5 +99,5 @@ Check your position at any time with `node scripts/workflow-state.js <id>`.
97
99
  already decided to explore, go straight to prototype.
98
100
  - **Anchor-free trivia** (a typo, a broken link): the `no-initiative` label, no lane. Real work
99
101
  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.
102
+ - **Unknown shape after the checks:** ask the PM one routing question, as the
103
+ [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) +