@codyswann/lisa 2.303.0 → 2.304.1

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 (151) hide show
  1. package/dist/cli/doctor-readiness-report-redaction.d.ts +11 -0
  2. package/dist/cli/doctor-readiness-report-redaction.d.ts.map +1 -0
  3. package/dist/cli/doctor-readiness-report-redaction.js +59 -0
  4. package/dist/cli/doctor-readiness-report-redaction.js.map +1 -0
  5. package/dist/cli/doctor-readiness.d.ts +13 -1
  6. package/dist/cli/doctor-readiness.d.ts.map +1 -1
  7. package/dist/cli/doctor-readiness.js +2 -1
  8. package/dist/cli/doctor-readiness.js.map +1 -1
  9. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  10. package/dist/core/upstream-evidence-manifest.js +34 -13
  11. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  12. package/package.json +1 -1
  13. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
  16. package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +2 -0
  17. package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +24 -0
  18. package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +39 -7
  19. package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +2 -0
  20. package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
  21. package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +24 -0
  22. package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +40 -6
  23. package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +2 -0
  24. package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +24 -0
  25. package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +2 -0
  26. package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +3 -1
  27. package/plugins/lisa/rules/eager/prd-definition-of-ready.md +32 -0
  28. package/plugins/lisa/rules/eager/work-item-definition-of-ready.md +27 -0
  29. package/plugins/lisa/rules/reference/prd-definition-of-ready.md +81 -0
  30. package/plugins/lisa/rules/reference/work-item-definition-of-ready.md +145 -0
  31. package/plugins/lisa/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
  32. package/plugins/lisa/skills/lisa-confluence-write-prd/SKILL.md +2 -0
  33. package/plugins/lisa/skills/lisa-github-to-tracker/SKILL.md +24 -0
  34. package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +39 -7
  35. package/plugins/lisa/skills/lisa-github-write-prd/SKILL.md +2 -0
  36. package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
  37. package/plugins/lisa/skills/lisa-linear-to-tracker/SKILL.md +24 -0
  38. package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +40 -6
  39. package/plugins/lisa/skills/lisa-linear-write-prd/SKILL.md +2 -0
  40. package/plugins/lisa/skills/lisa-notion-to-tracker/SKILL.md +24 -0
  41. package/plugins/lisa/skills/lisa-notion-write-prd/SKILL.md +2 -0
  42. package/plugins/lisa/skills/lisa-research/SKILL.md +3 -1
  43. package/plugins/lisa-agy/plugin.json +1 -1
  44. package/plugins/lisa-agy/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
  45. package/plugins/lisa-agy/skills/lisa-confluence-write-prd/SKILL.md +2 -0
  46. package/plugins/lisa-agy/skills/lisa-github-to-tracker/SKILL.md +24 -0
  47. package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +39 -7
  48. package/plugins/lisa-agy/skills/lisa-github-write-prd/SKILL.md +2 -0
  49. package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
  50. package/plugins/lisa-agy/skills/lisa-linear-to-tracker/SKILL.md +24 -0
  51. package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +40 -6
  52. package/plugins/lisa-agy/skills/lisa-linear-write-prd/SKILL.md +2 -0
  53. package/plugins/lisa-agy/skills/lisa-notion-to-tracker/SKILL.md +24 -0
  54. package/plugins/lisa-agy/skills/lisa-notion-write-prd/SKILL.md +2 -0
  55. package/plugins/lisa-agy/skills/lisa-research/SKILL.md +3 -1
  56. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  59. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-copilot/rules/eager/prd-definition-of-ready.md +32 -0
  63. package/plugins/lisa-copilot/rules/eager/work-item-definition-of-ready.md +27 -0
  64. package/plugins/lisa-copilot/rules/reference/prd-definition-of-ready.md +81 -0
  65. package/plugins/lisa-copilot/rules/reference/work-item-definition-of-ready.md +145 -0
  66. package/plugins/lisa-copilot/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
  67. package/plugins/lisa-copilot/skills/lisa-confluence-write-prd/SKILL.md +2 -0
  68. package/plugins/lisa-copilot/skills/lisa-github-to-tracker/SKILL.md +24 -0
  69. package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +39 -7
  70. package/plugins/lisa-copilot/skills/lisa-github-write-prd/SKILL.md +2 -0
  71. package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
  72. package/plugins/lisa-copilot/skills/lisa-linear-to-tracker/SKILL.md +24 -0
  73. package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +40 -6
  74. package/plugins/lisa-copilot/skills/lisa-linear-write-prd/SKILL.md +2 -0
  75. package/plugins/lisa-copilot/skills/lisa-notion-to-tracker/SKILL.md +24 -0
  76. package/plugins/lisa-copilot/skills/lisa-notion-write-prd/SKILL.md +2 -0
  77. package/plugins/lisa-copilot/skills/lisa-research/SKILL.md +3 -1
  78. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-cursor/rules/prd-definition-of-ready-reference.mdc +86 -0
  80. package/plugins/lisa-cursor/rules/prd-definition-of-ready.mdc +37 -0
  81. package/plugins/lisa-cursor/rules/work-item-definition-of-ready-reference.mdc +150 -0
  82. package/plugins/lisa-cursor/rules/work-item-definition-of-ready.mdc +32 -0
  83. package/plugins/lisa-cursor/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
  84. package/plugins/lisa-cursor/skills/lisa-confluence-write-prd/SKILL.md +2 -0
  85. package/plugins/lisa-cursor/skills/lisa-github-to-tracker/SKILL.md +24 -0
  86. package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +39 -7
  87. package/plugins/lisa-cursor/skills/lisa-github-write-prd/SKILL.md +2 -0
  88. package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
  89. package/plugins/lisa-cursor/skills/lisa-linear-to-tracker/SKILL.md +24 -0
  90. package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +40 -6
  91. package/plugins/lisa-cursor/skills/lisa-linear-write-prd/SKILL.md +2 -0
  92. package/plugins/lisa-cursor/skills/lisa-notion-to-tracker/SKILL.md +24 -0
  93. package/plugins/lisa-cursor/skills/lisa-notion-write-prd/SKILL.md +2 -0
  94. package/plugins/lisa-cursor/skills/lisa-research/SKILL.md +3 -1
  95. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  97. package/plugins/lisa-expo-agy/plugin.json +1 -1
  98. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  100. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  102. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  103. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  105. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  107. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  108. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  109. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  112. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  113. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  114. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  115. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  116. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  117. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  118. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  119. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  120. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  121. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  122. package/plugins/lisa-rails-agy/plugin.json +1 -1
  123. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  124. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  125. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  126. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  127. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  128. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  129. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  130. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  131. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  132. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  133. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  134. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  135. package/plugins/src/base/rules/eager/prd-definition-of-ready.md +32 -0
  136. package/plugins/src/base/rules/eager/work-item-definition-of-ready.md +27 -0
  137. package/plugins/src/base/rules/reference/prd-definition-of-ready.md +81 -0
  138. package/plugins/src/base/rules/reference/work-item-definition-of-ready.md +145 -0
  139. package/plugins/src/base/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
  140. package/plugins/src/base/skills/lisa-confluence-write-prd/SKILL.md +2 -0
  141. package/plugins/src/base/skills/lisa-github-to-tracker/SKILL.md +24 -0
  142. package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +39 -7
  143. package/plugins/src/base/skills/lisa-github-write-prd/SKILL.md +2 -0
  144. package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
  145. package/plugins/src/base/skills/lisa-linear-to-tracker/SKILL.md +24 -0
  146. package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +40 -6
  147. package/plugins/src/base/skills/lisa-linear-write-prd/SKILL.md +2 -0
  148. package/plugins/src/base/skills/lisa-notion-to-tracker/SKILL.md +24 -0
  149. package/plugins/src/base/skills/lisa-notion-write-prd/SKILL.md +2 -0
  150. package/plugins/src/base/skills/lisa-research/SKILL.md +3 -1
  151. package/ui/index.html +37 -2
package/package.json CHANGED
@@ -115,7 +115,7 @@
115
115
  "brace-expansion": ">=5.0.8"
116
116
  },
117
117
  "name": "@codyswann/lisa",
118
- "version": "2.303.0",
118
+ "version": "2.304.1",
119
119
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
120
120
  "main": "dist/index.js",
121
121
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.303.0",
3
+ "version": "2.304.1",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.303.0",
3
+ "version": "2.304.1",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -218,6 +218,30 @@ The register feeds three consumers: the `## Source Requirement` section on
218
218
  every created ticket (Phases 3–5), the dry-run report (above), and the
219
219
  requirement tokens in the PRD back-link (Phase 7).
220
220
 
221
+ ### Phase 1.45: Requirement Quality Gates (prd-definition-of-ready)
222
+
223
+ Validate every Phase 1.4 register entry against the `prd-definition-of-ready` rule before
224
+ planning proceeds. Per atom:
225
+
226
+ - **Singular** — one behavior per entry. An entry welding multiple shall/when clauses together is
227
+ split in the register (R4 → R4a/R4b) when the split is mechanical and meaning-preserving; when
228
+ the split would change meaning, it is a product question, not a repair.
229
+ - **Unambiguous** — FAIL on the vagueness lexicon ("as appropriate", "user-friendly", "fast",
230
+ "handle gracefully", "etc.", "and/or", unbounded "optimize"/"support"): phrasing no test can
231
+ check. The full lexicon lives in the rule's reference body.
232
+ - **Verifiable** — a fit criterion (the measurable test of satisfaction) is present or
233
+ mechanically derivable from the text; a requirement no test could check is not admitted as a
234
+ requirement.
235
+ - **Pattern shape (SHOULD)** — an EARS pattern (ubiquitous / When / While / If-then / Where) or an
236
+ equivalent single-behavior sentence; conforming shapes decompose into Gherkin mechanically.
237
+
238
+ Failures here are **requirement-level product clarifications**, not internal errors: report each in
239
+ the dry-run report as a `product-clarity` item quoting the atom verbatim, naming the defect, and
240
+ offering 1–3 candidate rewrites (an EARS-shaped rewrite is the default recommendation). In intake
241
+ flows these route to the PRD's `blocked` role with comments, exactly like ticket-validator
242
+ failures. Mechanical splits and derived fit criteria are repaired in-register and recorded in the
243
+ report — never silently.
244
+
221
245
  ### Phase 1.5: Extract Source Artifacts
222
246
 
223
247
  PRDs typically reference external design, UX, and data artifacts (Figma files, Lovable prototypes, Loom walkthroughs, screenshots, example payloads, peer Confluence pages). These MUST be preserved onto the resulting tickets — otherwise developers picking up a ticket lose the source of truth. This is the failure mode this step exists to prevent.
@@ -99,6 +99,8 @@ outcome: created | reused
99
99
 
100
100
  ## Rules
101
101
 
102
+ - The PRD body's requirements MUST conform to `prd-definition-of-ready`: identified atoms (`R1`, `R2`, …), one behavior each in an EARS-pattern shape, each with a measurable fit criterion, plus the non-functional checklist. This governs factory-authored bodies; human-authored PRDs are validated at intake instead (`*-to-tracker` Phase 1.45).
103
+
102
104
  - All access via `lisa-atlassian-access`; never call Atlassian directly.
103
105
  - State is the parent page, not a label — never attempt Confluence label writes (they 401 on scoped
104
106
  tokens; see `config-resolution`).
@@ -203,6 +203,30 @@ The register feeds three consumers: the `## Source Requirement` section on
203
203
  every created ticket (Phases 3–5), the dry-run report (above), and the
204
204
  requirement tokens in the PRD back-link (Phase 7).
205
205
 
206
+ ### Phase 1.45: Requirement Quality Gates (prd-definition-of-ready)
207
+
208
+ Validate every Phase 1.4 register entry against the `prd-definition-of-ready` rule before
209
+ planning proceeds. Per atom:
210
+
211
+ - **Singular** — one behavior per entry. An entry welding multiple shall/when clauses together is
212
+ split in the register (R4 → R4a/R4b) when the split is mechanical and meaning-preserving; when
213
+ the split would change meaning, it is a product question, not a repair.
214
+ - **Unambiguous** — FAIL on the vagueness lexicon ("as appropriate", "user-friendly", "fast",
215
+ "handle gracefully", "etc.", "and/or", unbounded "optimize"/"support"): phrasing no test can
216
+ check. The full lexicon lives in the rule's reference body.
217
+ - **Verifiable** — a fit criterion (the measurable test of satisfaction) is present or
218
+ mechanically derivable from the text; a requirement no test could check is not admitted as a
219
+ requirement.
220
+ - **Pattern shape (SHOULD)** — an EARS pattern (ubiquitous / When / While / If-then / Where) or an
221
+ equivalent single-behavior sentence; conforming shapes decompose into Gherkin mechanically.
222
+
223
+ Failures here are **requirement-level product clarifications**, not internal errors: report each in
224
+ the dry-run report as a `product-clarity` item quoting the atom verbatim, naming the defect, and
225
+ offering 1–3 candidate rewrites (an EARS-shaped rewrite is the default recommendation). In intake
226
+ flows these route to the PRD's `blocked` role with comments, exactly like ticket-validator
227
+ failures. Mechanical splits and derived fit criteria are repaired in-register and recorded in the
228
+ report — never silently.
229
+
206
230
  ### Phase 1.5: Extract Source Artifacts
207
231
 
208
232
  PRDs typically reference external design, UX, and data artifacts (Figma files, Lovable prototypes, Loom walkthroughs, screenshots, example payloads, peer Notion / Confluence / Linear pages). These MUST be preserved onto the resulting tickets — otherwise developers picking up a ticket lose the source of truth. This is the failure mode this step exists to prevent.
@@ -76,6 +76,8 @@ Gates are grouped into **Specification** (spec-only checks, no GitHub lookups) a
76
76
 
77
77
  Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Categories are the same fixed set used by `lisa-jira-validate-ticket` so downstream PRD-intake comment-formatting policy is shared across vendors.
78
78
 
79
+ Per-type content requirements are defined once in the vendor-neutral `work-item-definition-of-ready` rule (eager + reference); gates S4–S6 and S17 enforce them, and S18 enforces the stateless-pickup property directly.
80
+
79
81
  | Gate | Category | Product-relevant |
80
82
  |------|----------|------------------|
81
83
  | S1 Required core fields | `structural` | false |
@@ -94,6 +96,8 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
94
96
  | S14 Evidence manifest binding (leaf work units) | `acceptance-criteria` | true |
95
97
  | S15 Leaf-only build-ready | `structural` | false |
96
98
  | S16 Source Requirement traceability | `product-clarity` | true |
99
+ | S17 Improvement measurability | `acceptance-criteria` | true |
100
+ | S18 Stateless-pickup dry-run | `product-clarity` | true |
97
101
  | F1 Issue type label exists in repo | `structural` | false |
98
102
  | F2 Parent sub-issue exists and is the right type | `structural` | false |
99
103
  | F3 Linked issues exist | `structural` | false |
@@ -135,18 +139,26 @@ The `## Acceptance Criteria` section must contain at least one `Scenario:` block
135
139
 
136
140
  #### S5 — Bug-specific content
137
141
 
138
- When `issue_type = Bug`, body must additionally include:
142
+ When `issue_type = Bug`, body must additionally include the full bug anatomy from the `work-item-definition-of-ready` rule:
143
+
144
+ - **Agent-executable reproduction** — numbered steps a stateless agent can run mechanically: exact entry point, named account/role (consistent with Sign-in Required when authenticated), concrete data state, exact actions. Human-followable-only prose ("click around until it breaks") FAILs. A linked failing test satisfies this outright and is the preferred form.
145
+ - **Expected vs. actual behavior**, naming or linking the *source* of "expected" (spec, PRD requirement, prior release behavior) — a fix target is a fact, not an opinion.
146
+ - **Environment + version** — where reproduced and the build/commit observed; last-known-good when known (`unknown` must be stated, not omitted).
147
+ - **Reproducibility rate** — always, or intermittent with observed frequency; intermittent invalidates run-once verification.
148
+ - **Occurrence evidence** — at least one link/attachment: error-tracker issue, log excerpt, stack trace, screenshot/recording.
139
149
 
140
- - Reproduction steps
141
- - Expected vs. actual behavior
142
- - Environment where reproduced
150
+ A Bug's terminal state is its reproduction: the same steps (or test) fail before the fix and pass after — capture both as evidence: under the S14 manifest when `runtime_behavior_change = true`, or attached directly to the item for non-runtime Bugs (doc/config fixes), where S14 is N/A.
143
151
 
144
152
  #### S6 — Spike-specific content
145
153
 
146
154
  When `issue_type = Spike`, body must include:
147
155
 
148
- - The question being answered
149
- - Definition of done (decision doc / prototype / findings deliverable)
156
+ - The **question** being answered
157
+ - The **decision** the answer enables, and the options being weighed
158
+ - A **timebox**
159
+ - **Deliverable format and location** — decision doc / prototype / findings page, and where it will live, so the terminal state — a deliverable at that location that actually answers the question, with findings, decision and options — is checkable
160
+
161
+ Gherkin AC is intentionally N/A for Spikes (S4).
150
162
 
151
163
  #### S7 — Parent sub-issue declared
152
164
 
@@ -190,6 +202,8 @@ Accept either placement:
190
202
 
191
203
  Detect by scanning for the phrase `Source Precedence` (case-insensitive) AND verifying the four axes (business rules, visual, flow, data) are each named.
192
204
 
205
+ If the spec doesn't set `artifacts_attached`, infer it the same way S9 infers sign-in: scan the body for design/mock/prototype/data-artifact references (design-tool links, "mock", "prototype", spreadsheet or API artifacts). If such artifacts are referenced and no source-precedence guidance exists: FAIL.
206
+
193
207
  #### S13 — Relationship Search documented
194
208
 
195
209
  The issue must EITHER have at least one entry in `links`, OR the body must contain a `## Relationship Search` block listing the git history queries and `gh issue list` queries that were run with their outcomes. ("Searched git history for `<keywords>` and `gh issue list` for label `component:X`; no related work found.")
@@ -269,6 +283,22 @@ R-id with no quote: FAIL with remediation
269
283
  `product_relevant: true` — a issue whose requirement cannot be traced is
270
284
  a product-clarity problem: nobody can tell why the work exists.
271
285
 
286
+ #### S17 — Improvement measurability
287
+
288
+ When `issue_type = Improvement`, the body must define the improvement as a measured delta per `work-item-definition-of-ready`:
289
+
290
+ - **Metric + measurement method** the agent can run (command, query, dashboard export)
291
+ - **Baseline** — the current measured value (a number, not an adjective)
292
+ - **Target** — the numeric value or bound that defines done
293
+
294
+ Without a baseline and a target an Improvement has no verifiable terminal state and can never be autonomously closed. FAIL names the missing pieces; when no baseline exists yet, the remediation is to file measuring it as the first step. `N/A` for every other type.
295
+
296
+ #### S18 — Stateless-pickup dry-run
297
+
298
+ The autonomy gate, run last, on every build-ready leaf (use the S15 classification; `N/A` for containers and non-build-ready items). Simulate a stateless agent reading only this item and the links it can resolve — session knowledge about the codebase does not count, because the next claimant will not have it. List every question that agent would have to ask a human before starting work, before choosing between materially different implementations, or before declaring the work done.
299
+
300
+ Zero questions → PASS. Any question → FAIL, with each question listed verbatim as its own remediation line — these are exactly the clarifying comments the caller posts to the source. The structure gates are proxies; this gate checks the readiness property itself: `ready` means a stateless agent can drive this item to its terminal state with zero human clarification (see `work-item-definition-of-ready`).
301
+
272
302
  ### Feasibility Gates (require GitHub lookups; skip in `--spec-only`)
273
303
 
274
304
  #### F1 — Issue type label exists in repo
@@ -423,6 +453,8 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
423
453
  - [PASS|FAIL|N/A] S14 Evidence manifest binding — <one-line reason>
424
454
  - [PASS|FAIL|N/A] S15 Leaf-only build-ready — <one-line reason>
425
455
  - [PASS|FAIL|N/A] S16 Source Requirement traceability — <one-line reason>
456
+ - [PASS|FAIL|N/A] S17 Improvement measurability — <one-line reason>
457
+ - [PASS|FAIL|N/A] S18 Stateless-pickup dry-run — <one-line reason>
426
458
 
427
459
  ### Feasibility Gates (omit this section when --spec-only)
428
460
  - [PASS|FAIL|N/A] F1 Issue type label exists in repo — <one-line reason>
@@ -449,7 +481,7 @@ The verdict is `PASS` if every applicable gate is `PASS`. Any `FAIL` makes the v
449
481
 
450
482
  Same shape and meaning as `lisa-jira-validate-ticket` so downstream PRD-intake skills (Notion, Confluence, Linear, GitHub) can format comments uniformly:
451
483
 
452
- - **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
484
+ - **gate**: the gate ID (`S1`–`S18`, `F1`–`F5`).
453
485
  - **category**: the gate's fixed category from the table.
454
486
  - **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem the caller should fix without bothering product.
455
487
  - **what**: plain-language, product-readable.
@@ -146,6 +146,8 @@ outcome: created | reused
146
146
 
147
147
  ## Rules
148
148
 
149
+ - The PRD body's requirements MUST conform to `prd-definition-of-ready`: identified atoms (`R1`, `R2`, …), one behavior each in an EARS-pattern shape, each with a measurable fit criterion, plus the non-functional checklist. This governs factory-authored bodies; human-authored PRDs are validated at intake instead (`*-to-tracker` Phase 1.45).
150
+
149
151
  - Exactly one PRD lifecycle label at all times (leaf-only does not apply — PRDs are not build leaves).
150
152
  - Match dedupe by marker, never by title.
151
153
  - Preserve an existing canonical `## Lisa Usage` section on update; never append a second usage
@@ -73,6 +73,8 @@ Gates are grouped into **Specification** (spec-only checks, no JIRA lookups) and
73
73
 
74
74
  Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Categories drive how downstream callers (notably `lisa-notion-prd-intake`) translate failures into product-facing comments; `product_relevant=false` failures indicate internal data-quality problems (broken parent links, missing core fields) that the agent should fix itself rather than ask product to clarify.
75
75
 
76
+ Per-type content requirements are defined once in the vendor-neutral `work-item-definition-of-ready` rule (eager + reference); gates S4–S6 and S17 enforce them, and S18 enforces the stateless-pickup property directly.
77
+
76
78
  | Gate | Category | Product-relevant |
77
79
  |------|----------|------------------|
78
80
  | S1 Required core fields | `structural` | false |
@@ -91,6 +93,8 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
91
93
  | S14 Evidence manifest binding (leaf work units) | `acceptance-criteria` | true |
92
94
  | S15 Leaf-only build-ready | `structural` | false |
93
95
  | S16 Source Requirement traceability | `product-clarity` | true |
96
+ | S17 Improvement measurability | `acceptance-criteria` | true |
97
+ | S18 Stateless-pickup dry-run | `product-clarity` | true |
94
98
  | F1 Issue type valid in project | `structural` | false |
95
99
  | F2 Epic parent exists and is an Epic | `structural` | false |
96
100
  | F3 Linked tickets exist | `structural` | false |
@@ -138,16 +142,26 @@ The `Acceptance Criteria` section must contain at least one criterion in `Given
138
142
 
139
143
  #### S5 — Bug-specific content
140
144
 
141
- When `issue_type = Bug`, description must additionally include:
142
- - Reproduction steps
143
- - Expected vs. actual behavior
144
- - Environment where reproduced
145
+ When `issue_type = Bug`, description must additionally include the full bug anatomy from the `work-item-definition-of-ready` rule:
146
+
147
+ - **Agent-executable reproduction** — numbered steps a stateless agent can run mechanically: exact entry point, named account/role (consistent with Sign-in Required when authenticated), concrete data state, exact actions. Human-followable-only prose ("click around until it breaks") FAILs. A linked failing test satisfies this outright and is the preferred form.
148
+ - **Expected vs. actual behavior**, naming or linking the *source* of "expected" (spec, PRD requirement, prior release behavior) — a fix target is a fact, not an opinion.
149
+ - **Environment + version** — where reproduced and the build/commit observed; last-known-good when known (`unknown` must be stated, not omitted).
150
+ - **Reproducibility rate** — always, or intermittent with observed frequency; intermittent invalidates run-once verification.
151
+ - **Occurrence evidence** — at least one link/attachment: error-tracker issue, log excerpt, stack trace, screenshot/recording.
152
+
153
+ A Bug's terminal state is its reproduction: the same steps (or test) fail before the fix and pass after — capture both as evidence: under the S14 manifest when `runtime_behavior_change = true`, or attached directly to the item for non-runtime Bugs (doc/config fixes), where S14 is N/A.
145
154
 
146
155
  #### S6 — Spike-specific content
147
156
 
148
157
  When `issue_type = Spike`, description must include:
149
- - The question being answered
150
- - Definition of done (decision doc / prototype / findings deliverable)
158
+
159
+ - The **question** being answered
160
+ - The **decision** the answer enables, and the options being weighed
161
+ - A **timebox**
162
+ - **Deliverable format and location** — decision doc / prototype / findings page, and where it will live, so the terminal state — a deliverable at that location that actually answers the question, with findings, decision and options — is checkable
163
+
164
+ Gherkin AC is intentionally N/A for Spikes (S4).
151
165
 
152
166
  #### S7 — Epic parent declared
153
167
 
@@ -191,6 +205,8 @@ Accept either placement — both are valid per `lisa-tracker-source-artifacts`:
191
205
 
192
206
  Detect by scanning for the phrase `Source Precedence` (case-insensitive) anywhere in the description, AND verifying the four axes (business rules, visual, flow, data) are each named. Missing the phrase OR missing one or more axes: FAIL with a remediation that names the missing axes.
193
207
 
208
+ If the spec doesn't set `artifacts_attached`, infer it the same way S9 infers sign-in: scan the description for design/mock/prototype/data-artifact references (design-tool links, "mock", "prototype", spreadsheet or API artifacts). If such artifacts are referenced and no source-precedence guidance exists: FAIL.
209
+
194
210
  #### S13 — Relationship Search documented
195
211
 
196
212
  The ticket must EITHER have at least one issue link in `links`, OR the description / a comment must contain a `## Relationship Search` block listing the git history queries and JQL queries that were run with their outcomes ("Searched git history for `<keywords>` and JQL for component=`X`; no related work found.").
@@ -269,6 +285,22 @@ R-id with no quote: FAIL with remediation
269
285
  `product_relevant: true` — a ticket whose requirement cannot be traced is
270
286
  a product-clarity problem: nobody can tell why the work exists.
271
287
 
288
+ #### S17 — Improvement measurability
289
+
290
+ When `issue_type = Improvement`, the description must define the improvement as a measured delta per `work-item-definition-of-ready`:
291
+
292
+ - **Metric + measurement method** the agent can run (command, query, dashboard export)
293
+ - **Baseline** — the current measured value (a number, not an adjective)
294
+ - **Target** — the numeric value or bound that defines done
295
+
296
+ Without a baseline and a target an Improvement has no verifiable terminal state and can never be autonomously closed. FAIL names the missing pieces; when no baseline exists yet, the remediation is to file measuring it as the first step. `N/A` for every other type.
297
+
298
+ #### S18 — Stateless-pickup dry-run
299
+
300
+ The autonomy gate, run last, on every build-ready leaf (use the S15 classification; `N/A` for containers and non-build-ready items). Simulate a stateless agent reading only this item and the links it can resolve — session knowledge about the codebase does not count, because the next claimant will not have it. List every question that agent would have to ask a human before starting work, before choosing between materially different implementations, or before declaring the work done.
301
+
302
+ Zero questions → PASS. Any question → FAIL, with each question listed verbatim as its own remediation line — these are exactly the clarifying comments the caller posts to the source. The structure gates are proxies; this gate checks the readiness property itself: `ready` means a stateless agent can drive this item to its terminal state with zero human clarification (see `work-item-definition-of-ready`).
303
+
272
304
  ### Feasibility Gates (require JIRA lookups; skip in dry-run if requested)
273
305
 
274
306
  #### F1 — Issue type valid in project
@@ -354,6 +386,8 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
354
386
  - [PASS|FAIL|N/A] S14 Evidence manifest binding — <one-line reason>
355
387
  - [PASS|FAIL|N/A] S15 Leaf-only build-ready — <one-line reason>
356
388
  - [PASS|FAIL|N/A] S16 Source Requirement traceability — <one-line reason>
389
+ - [PASS|FAIL|N/A] S17 Improvement measurability — <one-line reason>
390
+ - [PASS|FAIL|N/A] S18 Stateless-pickup dry-run — <one-line reason>
357
391
 
358
392
  ### Feasibility Gates (omit this section when --spec-only)
359
393
  - [PASS|FAIL|N/A] F1 Issue type valid in project — <one-line reason>
@@ -379,7 +413,7 @@ The verdict is `PASS` if and only if every applicable gate is `PASS`. Any `FAIL`
379
413
 
380
414
  ### Failure-detail fields
381
415
 
382
- - **gate**: the gate ID (`S1`–`S15`, `F1`–`F5`).
416
+ - **gate**: the gate ID (`S1`–`S18`, `F1`–`F5`).
383
417
  - **category**: the gate's fixed category from the table above. Callers use this to label or filter comments — `product-clarity`, `acceptance-criteria`, `design-ux`, `scope`, `dependency`, `data`, `technical`, or `structural`.
384
418
  - **product_relevant**: matches the gate's table entry. `false` means the failure is an internal data-quality problem (e.g., the agent built a malformed spec, an issue type is invalid in the project) and the caller should fix it without bothering the product team. `true` means the PRD needs product input to resolve.
385
419
  - **what**: plain-language description of the issue. No gate IDs, no JIRA jargon, no engineering shorthand. A product owner reading this on a Notion comment should understand what is unclear and why.
@@ -203,6 +203,30 @@ The register feeds three consumers: the `## Source Requirement` section on
203
203
  every created ticket (Phases 3–5), the dry-run report (above), and the
204
204
  requirement tokens in the PRD back-link (Phase 7).
205
205
 
206
+ ### Phase 1.45: Requirement Quality Gates (prd-definition-of-ready)
207
+
208
+ Validate every Phase 1.4 register entry against the `prd-definition-of-ready` rule before
209
+ planning proceeds. Per atom:
210
+
211
+ - **Singular** — one behavior per entry. An entry welding multiple shall/when clauses together is
212
+ split in the register (R4 → R4a/R4b) when the split is mechanical and meaning-preserving; when
213
+ the split would change meaning, it is a product question, not a repair.
214
+ - **Unambiguous** — FAIL on the vagueness lexicon ("as appropriate", "user-friendly", "fast",
215
+ "handle gracefully", "etc.", "and/or", unbounded "optimize"/"support"): phrasing no test can
216
+ check. The full lexicon lives in the rule's reference body.
217
+ - **Verifiable** — a fit criterion (the measurable test of satisfaction) is present or
218
+ mechanically derivable from the text; a requirement no test could check is not admitted as a
219
+ requirement.
220
+ - **Pattern shape (SHOULD)** — an EARS pattern (ubiquitous / When / While / If-then / Where) or an
221
+ equivalent single-behavior sentence; conforming shapes decompose into Gherkin mechanically.
222
+
223
+ Failures here are **requirement-level product clarifications**, not internal errors: report each in
224
+ the dry-run report as a `product-clarity` item quoting the atom verbatim, naming the defect, and
225
+ offering 1–3 candidate rewrites (an EARS-shaped rewrite is the default recommendation). In intake
226
+ flows these route to the PRD's `blocked` role with comments, exactly like ticket-validator
227
+ failures. Mechanical splits and derived fit criteria are repaired in-register and recorded in the
228
+ report — never silently.
229
+
206
230
  ### Phase 1.5: Extract Source Artifacts
207
231
 
208
232
  PRDs typically reference external design, UX, and data artifacts (Figma files, Lovable prototypes, Loom walkthroughs, screenshots, example payloads, peer Linear or Confluence pages). These MUST be preserved onto the resulting tickets — otherwise developers picking up a ticket lose the source of truth. This is the failure mode this step exists to prevent.
@@ -74,6 +74,8 @@ Gates are grouped into **Specification** (spec-only checks, no Linear lookups) a
74
74
 
75
75
  Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Categories drive how downstream callers (notably `lisa-linear-prd-intake`) translate failures into product-facing comments; `product_relevant=false` failures indicate internal data-quality problems the agent should fix itself rather than ask product to clarify.
76
76
 
77
+ Per-type content requirements are defined once in the vendor-neutral `work-item-definition-of-ready` rule (eager + reference); gates S4–S6 and S17 enforce them, and S18 enforces the stateless-pickup property directly.
78
+
77
79
  | Gate | Category | Product-relevant |
78
80
  |------|----------|------------------|
79
81
  | S1 Required core fields | `structural` | false |
@@ -92,6 +94,8 @@ Each gate is tagged with a fixed `category` and a `product_relevant` boolean. Ca
92
94
  | S14 Evidence manifest binding (leaf work units) | `acceptance-criteria` | true |
93
95
  | S15 Leaf-only build-ready | `structural` | false |
94
96
  | S16 Source Requirement traceability | `product-clarity` | true |
97
+ | S17 Improvement measurability | `acceptance-criteria` | true |
98
+ | S18 Stateless-pickup dry-run | `product-clarity` | true |
95
99
  | F1 Issue type valid in team | `structural` | false |
96
100
  | F2 Project parent exists and is in same team | `structural` | false |
97
101
  | F3 Linked items exist | `structural` | false |
@@ -139,16 +143,26 @@ The `Acceptance Criteria` section must contain at least one criterion in `Given
139
143
 
140
144
  #### S5 — Bug-specific content
141
145
 
142
- When `issue_type = Bug`, description must additionally include:
143
- - Reproduction steps
144
- - Expected vs. actual behavior
145
- - Environment where reproduced
146
+ When `issue_type = Bug`, description must additionally include the full bug anatomy from the `work-item-definition-of-ready` rule:
147
+
148
+ - **Agent-executable reproduction** — numbered steps a stateless agent can run mechanically: exact entry point, named account/role (consistent with Sign-in Required when authenticated), concrete data state, exact actions. Human-followable-only prose ("click around until it breaks") FAILs. A linked failing test satisfies this outright and is the preferred form.
149
+ - **Expected vs. actual behavior**, naming or linking the *source* of "expected" (spec, PRD requirement, prior release behavior) — a fix target is a fact, not an opinion.
150
+ - **Environment + version** — where reproduced and the build/commit observed; last-known-good when known (`unknown` must be stated, not omitted).
151
+ - **Reproducibility rate** — always, or intermittent with observed frequency; intermittent invalidates run-once verification.
152
+ - **Occurrence evidence** — at least one link/attachment: error-tracker issue, log excerpt, stack trace, screenshot/recording.
153
+
154
+ A Bug's terminal state is its reproduction: the same steps (or test) fail before the fix and pass after — capture both as evidence: under the S14 manifest when `runtime_behavior_change = true`, or attached directly to the item for non-runtime Bugs (doc/config fixes), where S14 is N/A.
146
155
 
147
156
  #### S6 — Spike-specific content
148
157
 
149
158
  When `issue_type = Spike`, description must include:
150
- - The question being answered
151
- - Definition of done (decision doc / prototype / findings deliverable)
159
+
160
+ - The **question** being answered
161
+ - The **decision** the answer enables, and the options being weighed
162
+ - A **timebox**
163
+ - **Deliverable format and location** — decision doc / prototype / findings page, and where it will live, so the terminal state — a deliverable at that location that actually answers the question, with findings, decision and options — is checkable
164
+
165
+ Gherkin AC is intentionally N/A for Spikes (S4).
152
166
 
153
167
  #### S7 — Project parent declared
154
168
 
@@ -194,6 +208,8 @@ Accept either placement:
194
208
 
195
209
  Detect by scanning for the phrase `Source Precedence` (case-insensitive) anywhere in the description AND verifying the four axes are each named. Missing the phrase OR any axis: FAIL with remediation naming the missing axes.
196
210
 
211
+ If the spec doesn't set `artifacts_attached`, infer it the same way S9 infers sign-in: scan the description for design/mock/prototype/data-artifact references (design-tool links, "mock", "prototype", spreadsheet or API artifacts). If such artifacts are referenced and no source-precedence guidance exists: FAIL.
212
+
197
213
  #### S13 — Relationship Search documented
198
214
 
199
215
  The item must EITHER have at least one entry in `relations`, OR the description / a comment must contain a `## Relationship Search` block listing the git history queries and Linear MCP queries that were run with their outcomes.
@@ -271,6 +287,22 @@ R-id with no quote: FAIL with remediation
271
287
  `product_relevant: true` — a issue whose requirement cannot be traced is
272
288
  a product-clarity problem: nobody can tell why the work exists.
273
289
 
290
+ #### S17 — Improvement measurability
291
+
292
+ When `issue_type = Improvement`, the description must define the improvement as a measured delta per `work-item-definition-of-ready`:
293
+
294
+ - **Metric + measurement method** the agent can run (command, query, dashboard export)
295
+ - **Baseline** — the current measured value (a number, not an adjective)
296
+ - **Target** — the numeric value or bound that defines done
297
+
298
+ Without a baseline and a target an Improvement has no verifiable terminal state and can never be autonomously closed. FAIL names the missing pieces; when no baseline exists yet, the remediation is to file measuring it as the first step. `N/A` for every other type.
299
+
300
+ #### S18 — Stateless-pickup dry-run
301
+
302
+ The autonomy gate, run last, on every build-ready leaf (use the S15 classification; `N/A` for containers and non-build-ready items). Simulate a stateless agent reading only this item and the links it can resolve — session knowledge about the codebase does not count, because the next claimant will not have it. List every question that agent would have to ask a human before starting work, before choosing between materially different implementations, or before declaring the work done.
303
+
304
+ Zero questions → PASS. Any question → FAIL, with each question listed verbatim as its own remediation line — these are exactly the clarifying comments the caller posts to the source. The structure gates are proxies; this gate checks the readiness property itself: `ready` means a stateless agent can drive this item to its terminal state with zero human clarification (see `work-item-definition-of-ready`).
305
+
274
306
  ### Feasibility Gates (require Linear lookups; skip in dry-run if requested)
275
307
 
276
308
  #### F1 — Issue type valid in team
@@ -360,6 +392,8 @@ Output is a single fenced text block. Callers parse it; do not add free-form pro
360
392
  - [PASS|FAIL|N/A] S14 Evidence manifest binding — <one-line reason>
361
393
  - [PASS|FAIL|N/A] S15 Leaf-only build-ready — <one-line reason>
362
394
  - [PASS|FAIL|N/A] S16 Source Requirement traceability — <one-line reason>
395
+ - [PASS|FAIL|N/A] S17 Improvement measurability — <one-line reason>
396
+ - [PASS|FAIL|N/A] S18 Stateless-pickup dry-run — <one-line reason>
363
397
 
364
398
  ### Feasibility Gates (omit when --spec-only)
365
399
  - [PASS|FAIL|N/A] F1 Issue type valid in team — <one-line reason>
@@ -86,6 +86,8 @@ outcome: created | reused
86
86
 
87
87
  ## Rules
88
88
 
89
+ - The PRD body's requirements MUST conform to `prd-definition-of-ready`: identified atoms (`R1`, `R2`, …), one behavior each in an EARS-pattern shape, each with a measurable fit criterion, plus the non-functional checklist. This governs factory-authored bodies; human-authored PRDs are validated at intake instead (`*-to-tracker` Phase 1.45).
90
+
89
91
  - Exactly one PRD lifecycle project-label at all times.
90
92
  - Match dedupe by marker, never by project name.
91
93
  - Preserve an existing canonical `## Lisa Usage` section on update; never append a second usage
@@ -184,6 +184,30 @@ The register feeds three consumers: the `## Source Requirement` section on
184
184
  every created ticket (Phases 3–5), the dry-run report (above), and the
185
185
  requirement tokens in the PRD back-link (Phase 7).
186
186
 
187
+ ### Phase 1.45: Requirement Quality Gates (prd-definition-of-ready)
188
+
189
+ Validate every Phase 1.4 register entry against the `prd-definition-of-ready` rule before
190
+ planning proceeds. Per atom:
191
+
192
+ - **Singular** — one behavior per entry. An entry welding multiple shall/when clauses together is
193
+ split in the register (R4 → R4a/R4b) when the split is mechanical and meaning-preserving; when
194
+ the split would change meaning, it is a product question, not a repair.
195
+ - **Unambiguous** — FAIL on the vagueness lexicon ("as appropriate", "user-friendly", "fast",
196
+ "handle gracefully", "etc.", "and/or", unbounded "optimize"/"support"): phrasing no test can
197
+ check. The full lexicon lives in the rule's reference body.
198
+ - **Verifiable** — a fit criterion (the measurable test of satisfaction) is present or
199
+ mechanically derivable from the text; a requirement no test could check is not admitted as a
200
+ requirement.
201
+ - **Pattern shape (SHOULD)** — an EARS pattern (ubiquitous / When / While / If-then / Where) or an
202
+ equivalent single-behavior sentence; conforming shapes decompose into Gherkin mechanically.
203
+
204
+ Failures here are **requirement-level product clarifications**, not internal errors: report each in
205
+ the dry-run report as a `product-clarity` item quoting the atom verbatim, naming the defect, and
206
+ offering 1–3 candidate rewrites (an EARS-shaped rewrite is the default recommendation). In intake
207
+ flows these route to the PRD's `blocked` role with comments, exactly like ticket-validator
208
+ failures. Mechanical splits and derived fit criteria are repaired in-register and recorded in the
209
+ report — never silently.
210
+
187
211
  ### Phase 1.5: Extract Source Artifacts
188
212
 
189
213
  PRDs typically reference external design, UX, and data artifacts (Figma files, Lovable prototypes, Loom walkthroughs, screenshots, example payloads, Confluence pages). These MUST be preserved onto the resulting tickets — otherwise developers picking up a ticket lose the source of truth. This is the failure mode this step exists to prevent.
@@ -100,6 +100,8 @@ outcome: created | reused
100
100
 
101
101
  ## Rules
102
102
 
103
+ - The PRD body's requirements MUST conform to `prd-definition-of-ready`: identified atoms (`R1`, `R2`, …), one behavior each in an EARS-pattern shape, each with a measurable fit criterion, plus the non-functional checklist. This governs factory-authored bodies; human-authored PRDs are validated at intake instead (`*-to-tracker` Phase 1.45).
104
+
103
105
  - All access via `lisa-notion-access`; never touch the Notion API/MCP directly.
104
106
  - Match dedupe by marker, never by title.
105
107
  - Preserve an existing canonical `## Lisa Usage` section on update; never append a second usage
@@ -56,7 +56,9 @@ A PRD **created in the configured PRD source** (per the intent-routing rule's Re
56
56
  definition) structured as: problem statement, high-level solution description, links (if needed),
57
57
  user stories (each with its own functional/non-functional requirements and, only for stories with
58
58
  new UI/visual work, a design-file pointer), overall acceptance criteria, open questions, and the
59
- "Recommended Tooling for Plan Phase" section. The final
59
+ "Recommended Tooling for Plan Phase" section. Requirements MUST conform to the
60
+ `prd-definition-of-ready` rule: identified atoms (`R1`, `R2`, …), one behavior each in an
61
+ EARS-pattern shape, each with a measurable fit criterion, plus the non-functional checklist. The final
60
62
  flow step invokes `lisa-prd-source-write`, which creates the PRD in the configured `source` (Notion
61
63
  page in the PRD database, Confluence page under the lifecycle parent, GitHub issue, or Linear
62
64
  project) in the `draft` role by default or `ready` when `prd_ready=true`. **The PRD lives in the
@@ -0,0 +1,32 @@
1
+ # PRD Definition of Ready (requirement atoms)
2
+
3
+ **A requirements document is ready when a planner can decompose it mechanically and a verifier can check the result against it.** Both properties come from the shape of the requirements, not the prose around them. Modeled on ISO/IEC/IEEE 29148's requirement quality characteristics and the EARS sentence patterns; the fit criterion is Volere's.
4
+
5
+ ## The atom
6
+
7
+ Every requirement is an **identified atom**:
8
+
9
+ - **Identified** — carries an id (`R1`, `R2`, …). Ids are per-generation; the verbatim text is the durable anchor (same convention as the `*-to-tracker` Requirement Register).
10
+ - **Singular** — one behavior per atom. "The system shall X and Y when Z" is two atoms.
11
+ - **Unambiguous** — no vagueness lexicon: *as appropriate, user-friendly, fast, robust, handle gracefully, etc., and/or, optimize, seamless, intuitive, support* (unbounded). Each is a word no test can check.
12
+ - **Verifiable** — carries a **fit criterion**: the measurable test of satisfaction ("p95 upload completes < 4s for files ≤ 25 MB"). A requirement no test could check is a wish.
13
+ - **Pattern-shaped (SHOULD)** — one of the EARS patterns, which decompose into Gherkin mechanically:
14
+ - Ubiquitous: *The `<system>` shall `<response>`*
15
+ - Event-driven: *When `<trigger>`, the `<system>` shall `<response>`*
16
+ - State-driven: *While `<state>`, the `<system>` shall `<response>`*
17
+ - Unwanted behavior: *If `<condition>`, then the `<system>` shall `<response>`*
18
+ - Optional feature: *Where `<feature>` is present, the `<system>` shall `<response>`*
19
+
20
+ ## The document
21
+
22
+ Beyond the atoms, a ready PRD carries: problem statement · solution outline · user stories grouping their atoms · an explicit **non-functional checklist** (walk the ISO 25010 axes — performance, security, reliability, usability, compatibility, maintainability — and either state the requirement as an atom or state "no requirement"; silence is not a decision) · out of scope · open questions (the honest home for what is NOT ready).
23
+
24
+ ## Enforcement points
25
+
26
+ - **Write time** — `lisa-research` authors to this shape; `*-write-prd` skills carry it as a body rule.
27
+ - **Intake time (the universal gate)** — `*-to-tracker` Phase 1.45 validates every register atom, because human-authored PRDs never pass through the write path. Failures are product clarifications quoting the atom verbatim with candidate rewrites.
28
+ - **Verify time** — `verify-prd` / spec-conformance consume the atoms; fit criteria become the conformance checks.
29
+
30
+ Downstream, ticket gate S16 quotes these atoms verbatim and `prd-ticket-coverage` audits atom→ticket coverage — both degrade when "one requirement" is secretly three welded together.
31
+
32
+ Full rationale, the vagueness lexicon, and worked rewrites: [the reference body of this rule](../reference/prd-definition-of-ready.md).
@@ -0,0 +1,27 @@
1
+ # Work-Item Definition of Ready (type-keyed)
2
+
3
+ **`ready` means: a stateless agent can claim this item and drive it to its terminal state with zero human clarification.** Every readiness gate exists because its absence forces a question; the bar is type-keyed because different work types break autonomy differently.
4
+
5
+ ## Shared core (every leaf, enforced by `*-validate-*` S1–S16)
6
+
7
+ Three-audience description · Gherkin acceptance criteria (except Spike) · Out of Scope · single-repo scope · relationship search · typed evidence manifest on runtime changes · Source Requirement traceability when PRD-sourced · provable read access to every named external surface.
8
+
9
+ ## Per-type additions
10
+
11
+ | Type | Must additionally carry | Terminal state is |
12
+ |---|---|---|
13
+ | **Bug** | agent-executable reproduction (or a failing test) · expected-vs-actual with the *source* of "expected" · environment + version observed, last-known-good when known · reproducibility rate (always / intermittent + frequency) · at least one occurrence evidence link | the same repro/test fails before the fix and passes after |
14
+ | **Story** | user-visible AC; SHOULD name non-happy-path states (error / empty / loading) for UI stories · design source precedence when artifacts exist | every AC exercised on the running product |
15
+ | **Task** | an observable done-state and the command/check that proves it | the verification check passes |
16
+ | **Improvement** | metric + measurement method the agent can run · measured baseline value · numeric target | measured value meets the target |
17
+ | **Spike** | the question · the decision it enables + options weighed · a timebox · deliverable format **and location** | a deliverable at the named location that answers the question — findings, decision, options weighed |
18
+ | **Sub-task** | a parent, always · otherwise the bar of its own type | per its type |
19
+ | **Epic / container** | never build-ready (`leaf-only-lifecycle`) · judged on decomposition completeness, not buildability | all required children terminal |
20
+
21
+ ## The stateless-pickup test (S18)
22
+
23
+ The final gate checks the property itself instead of proxies for it: read the item as a fresh agent with no session context, using only the item and what it links to. List every question you would have to ask a human before starting, choosing between materially different implementations, or declaring done. **Ready = zero questions.** Each question found is the FAIL remediation, verbatim.
24
+
25
+ Sources this bar distills: INVEST (stories) · ISTQB / IEEE 1044 defect anatomy and minimal-reproducible-example practice (bugs) · SMART (improvements) · Scrum's Definition of Ready (the framing) · TASC AC8.6 (the normative criterion).
26
+
27
+ Full rationale and worked examples: [the reference body of this rule](../reference/work-item-definition-of-ready.md).