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.
- package/package.json +1 -1
- package/payload/AGENTS.md +1 -1
- package/payload/KIT-VERSION +2 -2
- package/payload/okf/core/templates/report-rubric-template.md +35 -0
- package/payload/okf/core/templates/report-weekly-template.md +21 -10
- package/payload/okf/core/templates/requirements-brief-template.md +61 -0
- package/payload/planning/evals/eval-calibration.md +1 -1
- package/payload/planning/okrs/health-budgets.md +1 -1
- package/payload/skills/design-brief.skill +5 -6
- package/payload/skills/discovery.skill +1 -2
- package/payload/skills/eval-rubric.skill +2 -5
- package/payload/skills/pm-communication.skill +123 -0
- package/payload/skills/pmos-router.skill +4 -2
- package/payload/skills/prd.skill +7 -13
- package/payload/skills/requirements-elicitation.skill +231 -0
- package/payload/skills/technical-writing-ste.skill +5 -3
- package/payload/skills-native/design-brief/SKILL.md +5 -6
- package/payload/skills-native/discovery/SKILL.md +1 -2
- package/payload/skills-native/eval-rubric/SKILL.md +2 -5
- package/payload/skills-native/pm-communication/SKILL.md +125 -0
- package/payload/skills-native/pmos-router/SKILL.md +4 -2
- package/payload/skills-native/prd/SKILL.md +7 -13
- package/payload/skills-native/requirements-elicitation/SKILL.md +233 -0
- package/payload/skills-native/technical-writing-ste/SKILL.md +5 -3
- package/payload/state/discoveries.md +1 -1
- package/payload/state/log.md +1 -1
- package/workspace/package-lock.json +1 -1
- package/workspace/package.json +1 -1
- package/workspace/skills/gather-requirements.skill +13 -1
- package/workspace/skills/report-biweekly.skill +5 -5
- package/workspace/skills/report-daily.skill +5 -5
- package/workspace/skills/report-monthly.skill +5 -5
- package/workspace/skills/report-special.skill +3 -3
- package/workspace/skills/report-weekly.skill +5 -5
- 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.
|
|
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`
|
package/payload/KIT-VERSION
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
kernel-source: pmos@
|
|
2
|
-
assembled: 2026-10-
|
|
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)
|
|
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-
|
|
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
|
|
27
|
+
<one or two sentences: what the reader most needs to know. Put the decision first if there is one.>
|
|
20
28
|
|
|
21
|
-
##
|
|
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
|
-
##
|
|
30
|
-
|
|
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
|
-
##
|
|
34
|
-
<
|
|
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-
|
|
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-
|
|
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. **
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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.
|
|
@@ -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
|
|
83
|
-
|
|
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
|
|
101
|
-
|
|
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.
|
package/payload/skills/prd.skill
CHANGED
|
@@ -30,22 +30,17 @@ agreed.
|
|
|
30
30
|
|
|
31
31
|
## Procedure
|
|
32
32
|
|
|
33
|
-
0a. **Existing surface? Understand it first — before
|
|
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
|
|
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. **
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
-
|
|
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) +
|