@codyswann/lisa 2.302.0 → 2.304.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +33 -13
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-github-validate-issue/SKILL.md +39 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-validate-issue/SKILL.md +40 -6
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-research/SKILL.md +3 -1
- package/plugins/lisa/rules/eager/prd-definition-of-ready.md +32 -0
- package/plugins/lisa/rules/eager/work-item-definition-of-ready.md +27 -0
- package/plugins/lisa/rules/reference/prd-definition-of-ready.md +81 -0
- package/plugins/lisa/rules/reference/work-item-definition-of-ready.md +145 -0
- package/plugins/lisa/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-github-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/skills/lisa-github-validate-issue/SKILL.md +39 -7
- package/plugins/lisa/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
- package/plugins/lisa/skills/lisa-linear-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/skills/lisa-linear-validate-issue/SKILL.md +40 -6
- package/plugins/lisa/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-notion-to-tracker/SKILL.md +24 -0
- package/plugins/lisa/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/lisa/skills/lisa-research/SKILL.md +3 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-agy/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-github-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-agy/skills/lisa-github-validate-issue/SKILL.md +39 -7
- package/plugins/lisa-agy/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
- package/plugins/lisa-agy/skills/lisa-linear-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-agy/skills/lisa-linear-validate-issue/SKILL.md +40 -6
- package/plugins/lisa-agy/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-notion-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-agy/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/lisa-agy/skills/lisa-research/SKILL.md +3 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/rules/eager/prd-definition-of-ready.md +32 -0
- package/plugins/lisa-copilot/rules/eager/work-item-definition-of-ready.md +27 -0
- package/plugins/lisa-copilot/rules/reference/prd-definition-of-ready.md +81 -0
- package/plugins/lisa-copilot/rules/reference/work-item-definition-of-ready.md +145 -0
- package/plugins/lisa-copilot/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-copilot/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-github-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-copilot/skills/lisa-github-validate-issue/SKILL.md +39 -7
- package/plugins/lisa-copilot/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
- package/plugins/lisa-copilot/skills/lisa-linear-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-copilot/skills/lisa-linear-validate-issue/SKILL.md +40 -6
- package/plugins/lisa-copilot/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-notion-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-copilot/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/lisa-copilot/skills/lisa-research/SKILL.md +3 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/prd-definition-of-ready-reference.mdc +86 -0
- package/plugins/lisa-cursor/rules/prd-definition-of-ready.mdc +37 -0
- package/plugins/lisa-cursor/rules/work-item-definition-of-ready-reference.mdc +150 -0
- package/plugins/lisa-cursor/rules/work-item-definition-of-ready.mdc +32 -0
- package/plugins/lisa-cursor/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-cursor/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-github-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-cursor/skills/lisa-github-validate-issue/SKILL.md +39 -7
- package/plugins/lisa-cursor/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
- package/plugins/lisa-cursor/skills/lisa-linear-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-cursor/skills/lisa-linear-validate-issue/SKILL.md +40 -6
- package/plugins/lisa-cursor/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-notion-to-tracker/SKILL.md +24 -0
- package/plugins/lisa-cursor/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/lisa-cursor/skills/lisa-research/SKILL.md +3 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/rules/eager/prd-definition-of-ready.md +32 -0
- package/plugins/src/base/rules/eager/work-item-definition-of-ready.md +27 -0
- package/plugins/src/base/rules/reference/prd-definition-of-ready.md +81 -0
- package/plugins/src/base/rules/reference/work-item-definition-of-ready.md +145 -0
- package/plugins/src/base/skills/lisa-confluence-to-tracker/SKILL.md +24 -0
- package/plugins/src/base/skills/lisa-confluence-write-prd/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-github-to-tracker/SKILL.md +24 -0
- package/plugins/src/base/skills/lisa-github-validate-issue/SKILL.md +39 -7
- package/plugins/src/base/skills/lisa-github-write-prd/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-jira-validate-ticket/SKILL.md +41 -7
- package/plugins/src/base/skills/lisa-linear-to-tracker/SKILL.md +24 -0
- package/plugins/src/base/skills/lisa-linear-validate-issue/SKILL.md +40 -6
- package/plugins/src/base/skills/lisa-linear-write-prd/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-notion-to-tracker/SKILL.md +24 -0
- package/plugins/src/base/skills/lisa-notion-write-prd/SKILL.md +2 -0
- package/plugins/src/base/skills/lisa-research/SKILL.md +3 -1
- package/ui/index.html +94 -18
|
@@ -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
|
-
|
|
143
|
-
-
|
|
144
|
-
-
|
|
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
|
-
|
|
150
|
-
-
|
|
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`–`
|
|
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.
|
|
@@ -208,6 +208,30 @@ The register feeds three consumers: the `## Source Requirement` section on
|
|
|
208
208
|
every created ticket (Phases 3–5), the dry-run report (above), and the
|
|
209
209
|
requirement tokens in the PRD back-link (Phase 7).
|
|
210
210
|
|
|
211
|
+
### Phase 1.45: Requirement Quality Gates (prd-definition-of-ready)
|
|
212
|
+
|
|
213
|
+
Validate every Phase 1.4 register entry against the `prd-definition-of-ready` rule before
|
|
214
|
+
planning proceeds. Per atom:
|
|
215
|
+
|
|
216
|
+
- **Singular** — one behavior per entry. An entry welding multiple shall/when clauses together is
|
|
217
|
+
split in the register (R4 → R4a/R4b) when the split is mechanical and meaning-preserving; when
|
|
218
|
+
the split would change meaning, it is a product question, not a repair.
|
|
219
|
+
- **Unambiguous** — FAIL on the vagueness lexicon ("as appropriate", "user-friendly", "fast",
|
|
220
|
+
"handle gracefully", "etc.", "and/or", unbounded "optimize"/"support"): phrasing no test can
|
|
221
|
+
check. The full lexicon lives in the rule's reference body.
|
|
222
|
+
- **Verifiable** — a fit criterion (the measurable test of satisfaction) is present or
|
|
223
|
+
mechanically derivable from the text; a requirement no test could check is not admitted as a
|
|
224
|
+
requirement.
|
|
225
|
+
- **Pattern shape (SHOULD)** — an EARS pattern (ubiquitous / When / While / If-then / Where) or an
|
|
226
|
+
equivalent single-behavior sentence; conforming shapes decompose into Gherkin mechanically.
|
|
227
|
+
|
|
228
|
+
Failures here are **requirement-level product clarifications**, not internal errors: report each in
|
|
229
|
+
the dry-run report as a `product-clarity` item quoting the atom verbatim, naming the defect, and
|
|
230
|
+
offering 1–3 candidate rewrites (an EARS-shaped rewrite is the default recommendation). In intake
|
|
231
|
+
flows these route to the PRD's `blocked` role with comments, exactly like ticket-validator
|
|
232
|
+
failures. Mechanical splits and derived fit criteria are repaired in-register and recorded in the
|
|
233
|
+
report — never silently.
|
|
234
|
+
|
|
211
235
|
### Phase 1.5: Extract Source Artifacts
|
|
212
236
|
|
|
213
237
|
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
|
-
|
|
144
|
-
-
|
|
145
|
-
-
|
|
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
|
-
|
|
151
|
-
-
|
|
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
|
|
@@ -190,6 +190,30 @@ The register feeds three consumers: the `## Source Requirement` section on
|
|
|
190
190
|
every created ticket (Phases 3–5), the dry-run report (above), and the
|
|
191
191
|
requirement tokens in the PRD back-link (Phase 7).
|
|
192
192
|
|
|
193
|
+
### Phase 1.45: Requirement Quality Gates (prd-definition-of-ready)
|
|
194
|
+
|
|
195
|
+
Validate every Phase 1.4 register entry against the `prd-definition-of-ready` rule before
|
|
196
|
+
planning proceeds. Per atom:
|
|
197
|
+
|
|
198
|
+
- **Singular** — one behavior per entry. An entry welding multiple shall/when clauses together is
|
|
199
|
+
split in the register (R4 → R4a/R4b) when the split is mechanical and meaning-preserving; when
|
|
200
|
+
the split would change meaning, it is a product question, not a repair.
|
|
201
|
+
- **Unambiguous** — FAIL on the vagueness lexicon ("as appropriate", "user-friendly", "fast",
|
|
202
|
+
"handle gracefully", "etc.", "and/or", unbounded "optimize"/"support"): phrasing no test can
|
|
203
|
+
check. The full lexicon lives in the rule's reference body.
|
|
204
|
+
- **Verifiable** — a fit criterion (the measurable test of satisfaction) is present or
|
|
205
|
+
mechanically derivable from the text; a requirement no test could check is not admitted as a
|
|
206
|
+
requirement.
|
|
207
|
+
- **Pattern shape (SHOULD)** — an EARS pattern (ubiquitous / When / While / If-then / Where) or an
|
|
208
|
+
equivalent single-behavior sentence; conforming shapes decompose into Gherkin mechanically.
|
|
209
|
+
|
|
210
|
+
Failures here are **requirement-level product clarifications**, not internal errors: report each in
|
|
211
|
+
the dry-run report as a `product-clarity` item quoting the atom verbatim, naming the defect, and
|
|
212
|
+
offering 1–3 candidate rewrites (an EARS-shaped rewrite is the default recommendation). In intake
|
|
213
|
+
flows these route to the PRD's `blocked` role with comments, exactly like ticket-validator
|
|
214
|
+
failures. Mechanical splits and derived fit criteria are repaired in-register and recorded in the
|
|
215
|
+
report — never silently.
|
|
216
|
+
|
|
193
217
|
### Phase 1.5: Extract Source Artifacts
|
|
194
218
|
|
|
195
219
|
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.
|
|
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
|
package/ui/index.html
CHANGED
|
@@ -5097,14 +5097,14 @@
|
|
|
5097
5097
|
/* ---------------------------------- Readiness (intake) ---------------------------------- */
|
|
5098
5098
|
DATA.sections.readiness = {
|
|
5099
5099
|
title: "Readiness",
|
|
5100
|
-
desc: "The onboarding questionnaire —
|
|
5100
|
+
desc: "The onboarding questionnaire — and the working Annex B self-assessment instrument of TASC (spec/tasc-0.1-draft.md). Answer what you use for each thing an autonomous factory depends on, and the meter shows how ready you are; each group cites the TASC criteria it evidences. Every question has a detailed home elsewhere in the console; this is the flat version you fill out first. Nothing is required all at once — an unanswered question is a known gap, not a failure.",
|
|
5101
5101
|
src: "intake · maps onto .lisa.config.json",
|
|
5102
5102
|
blocks: [
|
|
5103
5103
|
{
|
|
5104
5104
|
type: "intake",
|
|
5105
5105
|
groups: [
|
|
5106
5106
|
{
|
|
5107
|
-
label: "The bottom line",
|
|
5107
|
+
label: "The bottom line (AC7.4)",
|
|
5108
5108
|
note: "The one number the rest of this questionnaire exists to predict.",
|
|
5109
5109
|
items: [
|
|
5110
5110
|
{
|
|
@@ -5121,7 +5121,7 @@
|
|
|
5121
5121
|
],
|
|
5122
5122
|
},
|
|
5123
5123
|
{
|
|
5124
|
-
label: "Credentials & access",
|
|
5124
|
+
label: "Credentials & access (AC6)",
|
|
5125
5125
|
items: [
|
|
5126
5126
|
{
|
|
5127
5127
|
q: "Where do your agents' secrets live?",
|
|
@@ -5175,7 +5175,7 @@
|
|
|
5175
5175
|
],
|
|
5176
5176
|
},
|
|
5177
5177
|
{
|
|
5178
|
-
label: "Where agents run",
|
|
5178
|
+
label: "Where agents run (AC6 · AC9.5)",
|
|
5179
5179
|
items: [
|
|
5180
5180
|
{
|
|
5181
5181
|
q: "What sandbox do unattended agents run in?",
|
|
@@ -5227,7 +5227,7 @@
|
|
|
5227
5227
|
],
|
|
5228
5228
|
},
|
|
5229
5229
|
{
|
|
5230
|
-
label: "The agent's program",
|
|
5230
|
+
label: "The agent's program (AC8.2–8.3 · AC4.5)",
|
|
5231
5231
|
note: "Prompts, skills and models are the factory's own source code and runtime. This group asks whether that layer is under change control — or improvised per run.",
|
|
5232
5232
|
items: [
|
|
5233
5233
|
{
|
|
@@ -5270,10 +5270,22 @@
|
|
|
5270
5270
|
"None",
|
|
5271
5271
|
],
|
|
5272
5272
|
},
|
|
5273
|
+
{
|
|
5274
|
+
q: "When an agent makes a mistake, what stops the next agent repeating it?",
|
|
5275
|
+
help: "TASC AC4.5 — the self-learning loop. Mistakes and drift are captured with provenance, pass a skeptical gate, and get promoted upstream into lint rules, hooks, gates and skills. A lesson that stays prose is one the next agent never reads; recurrence of a captured mistake means the loop failed.",
|
|
5276
|
+
kind: "select",
|
|
5277
|
+
value: "Captured, judged, promoted to enforcement",
|
|
5278
|
+
options: [
|
|
5279
|
+
"Captured, judged, promoted to enforcement",
|
|
5280
|
+
"Captured in docs / notes",
|
|
5281
|
+
"Fixed locally, lesson lost",
|
|
5282
|
+
"Nothing",
|
|
5283
|
+
],
|
|
5284
|
+
},
|
|
5273
5285
|
],
|
|
5274
5286
|
},
|
|
5275
5287
|
{
|
|
5276
|
-
label: "Work intake",
|
|
5288
|
+
label: "Work intake (AC8.4 · AC8.6)",
|
|
5277
5289
|
items: [
|
|
5278
5290
|
{
|
|
5279
5291
|
q: "Where do product requirements (PRDs) live?",
|
|
@@ -5328,10 +5340,33 @@
|
|
|
5328
5340
|
"Built as written",
|
|
5329
5341
|
],
|
|
5330
5342
|
},
|
|
5343
|
+
{
|
|
5344
|
+
q: "Is there a definition of ready, enforced per work-item type?",
|
|
5345
|
+
help: "TASC AC8.6. A bug needs machine-executable reproduction; an improvement needs a measured baseline and a numeric target; a spike needs its question, timebox and deliverable location. One generic checklist cannot guarantee a stateless agent finishes without asking a human.",
|
|
5346
|
+
kind: "select",
|
|
5347
|
+
value: "Type-keyed gates, machine-validated",
|
|
5348
|
+
options: [
|
|
5349
|
+
"Type-keyed gates, machine-validated",
|
|
5350
|
+
"One generic checklist",
|
|
5351
|
+
"Reviewer judgment",
|
|
5352
|
+
"None",
|
|
5353
|
+
],
|
|
5354
|
+
},
|
|
5355
|
+
{
|
|
5356
|
+
q: "Are requirements written as testable atoms?",
|
|
5357
|
+
help: "TASC AC8.4. Identified requirement atoms — one behavior each, patterned syntax (EARS: When X, the system shall Y), each with a measurable fit criterion — are what let a planner decompose mechanically and a verifier check conformance. A paragraph welding three requirements together degrades tracing, coverage and verification all at once.",
|
|
5358
|
+
kind: "select",
|
|
5359
|
+
value: "Identified atoms — patterned + fit criteria",
|
|
5360
|
+
options: [
|
|
5361
|
+
"Identified atoms — patterned + fit criteria",
|
|
5362
|
+
"Structured prose",
|
|
5363
|
+
"Free-form documents",
|
|
5364
|
+
],
|
|
5365
|
+
},
|
|
5331
5366
|
],
|
|
5332
5367
|
},
|
|
5333
5368
|
{
|
|
5334
|
-
label: "Correctness gates",
|
|
5369
|
+
label: "Correctness gates (SI1–SI3 · AC5.4)",
|
|
5335
5370
|
items: [
|
|
5336
5371
|
{
|
|
5337
5372
|
q: "Is unit behaviour proven on every change?",
|
|
@@ -5358,7 +5393,7 @@
|
|
|
5358
5393
|
},
|
|
5359
5394
|
{
|
|
5360
5395
|
q: "Minimum unit-test coverage you enforce?",
|
|
5361
|
-
help: "Below this the build fails.
|
|
5396
|
+
help: "Below this the build fails. TASC SI2: the floor must be nonzero and disclosed, and it only ratchets up — zero is not a floor.",
|
|
5362
5397
|
kind: "number",
|
|
5363
5398
|
value: 74,
|
|
5364
5399
|
unit: "%",
|
|
@@ -5399,7 +5434,7 @@
|
|
|
5399
5434
|
],
|
|
5400
5435
|
},
|
|
5401
5436
|
{
|
|
5402
|
-
label: "Security gates",
|
|
5437
|
+
label: "Security gates (AC5 · AC9)",
|
|
5403
5438
|
items: [
|
|
5404
5439
|
{
|
|
5405
5440
|
q: "What blocks a committed secret?",
|
|
@@ -5475,9 +5510,19 @@
|
|
|
5475
5510
|
],
|
|
5476
5511
|
},
|
|
5477
5512
|
{
|
|
5478
|
-
label: "Agent attack surface",
|
|
5513
|
+
label: "Agent attack surface (AC3)",
|
|
5479
5514
|
note: "The group above secures the code; this one secures the agent. Inbound, the risk is untrusted content steering it; outbound, exfiltration — which is governed by the egress lock and credential gateway you answered earlier.",
|
|
5480
5515
|
items: [
|
|
5516
|
+
{
|
|
5517
|
+
q: "Is there a written threat model for your agents?",
|
|
5518
|
+
help: "TASC AC3.1. The rows below are mitigations; this asks whether the model itself exists as a document — revisited when the system changes — so the mitigations are answers to named threats rather than folklore.",
|
|
5519
|
+
kind: "select",
|
|
5520
|
+
options: [
|
|
5521
|
+
"Yes — revisited on system change",
|
|
5522
|
+
"Written once, going stale",
|
|
5523
|
+
"No",
|
|
5524
|
+
],
|
|
5525
|
+
},
|
|
5481
5526
|
{
|
|
5482
5527
|
q: "What stops fetched content from becoming instructions?",
|
|
5483
5528
|
help: "Prompt injection: a web page, README, or issue comment the agent reads is untrusted input that may try to steer it. Mitigation means labeling it as data and gating risky tools while it is in context.",
|
|
@@ -5573,7 +5618,7 @@
|
|
|
5573
5618
|
],
|
|
5574
5619
|
},
|
|
5575
5620
|
{
|
|
5576
|
-
label: "Code health",
|
|
5621
|
+
label: "Code health (SI7)",
|
|
5577
5622
|
note: "The bar for this whole group: authorless code. A reviewer with the author hidden should not be able to tell who — or what — wrote a change. Anything that gives the author away is an uncodified opinion, and each row below is one class of opinion made enforceable.",
|
|
5578
5623
|
items: [
|
|
5579
5624
|
{
|
|
@@ -5656,7 +5701,7 @@
|
|
|
5656
5701
|
],
|
|
5657
5702
|
},
|
|
5658
5703
|
{
|
|
5659
|
-
label: "Design & UI",
|
|
5704
|
+
label: "Design & UI (UX)",
|
|
5660
5705
|
note: "The determinism story for anything with a screen — a design system is the linter for UI. Without one an agent improvises every screen; with one it assembles from known parts. A backend or CLI answers “no UI” to each, which counts as answered.",
|
|
5661
5706
|
items: [
|
|
5662
5707
|
{
|
|
@@ -5708,7 +5753,7 @@
|
|
|
5708
5753
|
],
|
|
5709
5754
|
},
|
|
5710
5755
|
{
|
|
5711
|
-
label: "Review & merge",
|
|
5756
|
+
label: "Review & merge (AC8.1 · AC5)",
|
|
5712
5757
|
items: [
|
|
5713
5758
|
{
|
|
5714
5759
|
q: "What reviews every diff before merge?",
|
|
@@ -5745,10 +5790,21 @@
|
|
|
5745
5790
|
"No — advisory only",
|
|
5746
5791
|
],
|
|
5747
5792
|
},
|
|
5793
|
+
{
|
|
5794
|
+
q: "When did a gate last actually block a change?",
|
|
5795
|
+
help: "TASC AC5.5, and the exercised-evidence principle in one question: a gate that has never fired is indistinguishable from one that was never wired up. Being able to point at a recent block is the strongest evidence a control exists.",
|
|
5796
|
+
kind: "select",
|
|
5797
|
+
value: "Recently — we can point to it",
|
|
5798
|
+
options: [
|
|
5799
|
+
"Recently — we can point to it",
|
|
5800
|
+
"It has blocked before",
|
|
5801
|
+
"Never — or we can't tell",
|
|
5802
|
+
],
|
|
5803
|
+
},
|
|
5748
5804
|
],
|
|
5749
5805
|
},
|
|
5750
5806
|
{
|
|
5751
|
-
label: "Ship & rollback",
|
|
5807
|
+
label: "Ship & rollback (AC8.5 · AC7.2)",
|
|
5752
5808
|
note: "Change management — the human-shaped hole. In a human SDLC a person approved the deploy and reverted the bad one; every row here is that person's named replacement.",
|
|
5753
5809
|
items: [
|
|
5754
5810
|
{
|
|
@@ -5812,7 +5868,7 @@
|
|
|
5812
5868
|
],
|
|
5813
5869
|
},
|
|
5814
5870
|
{
|
|
5815
|
-
label: "Verify & acceptance",
|
|
5871
|
+
label: "Verify & acceptance (SI5–SI6)",
|
|
5816
5872
|
note: "Processing integrity: green CI proves the tests passed, not that the product works. Something has to use it.",
|
|
5817
5873
|
items: [
|
|
5818
5874
|
{
|
|
@@ -5844,7 +5900,7 @@
|
|
|
5844
5900
|
],
|
|
5845
5901
|
},
|
|
5846
5902
|
{
|
|
5847
|
-
label: "Observe",
|
|
5903
|
+
label: "Observe (AC4)",
|
|
5848
5904
|
items: [
|
|
5849
5905
|
{
|
|
5850
5906
|
q: "What captures production errors?",
|
|
@@ -5874,6 +5930,16 @@
|
|
|
5874
5930
|
"None",
|
|
5875
5931
|
],
|
|
5876
5932
|
},
|
|
5933
|
+
{
|
|
5934
|
+
q: "Does a production threshold crossing become a work item automatically?",
|
|
5935
|
+
help: "TASC AC4.3 — the routing half of observability. Sensing without filing means a human still stands between the signal and the fix. Findings enter through the same validated intake as any other work; no privileged path.",
|
|
5936
|
+
kind: "select",
|
|
5937
|
+
options: [
|
|
5938
|
+
"Yes — filed through validated intake",
|
|
5939
|
+
"Alerts a human, who files",
|
|
5940
|
+
"Dashboards only",
|
|
5941
|
+
],
|
|
5942
|
+
},
|
|
5877
5943
|
{
|
|
5878
5944
|
q: "What tells you what users actually do?",
|
|
5879
5945
|
help: "Product analytics is the richest Research input there is — it routes usage patterns back to the Research gate as PRD material.",
|
|
@@ -5890,7 +5956,7 @@
|
|
|
5890
5956
|
],
|
|
5891
5957
|
},
|
|
5892
5958
|
{
|
|
5893
|
-
label: "Operate & recover",
|
|
5959
|
+
label: "Operate & recover (AC7 · AC2)",
|
|
5894
5960
|
note: "Availability — the who-notices-at-3am group. Factories fail loudly; sensors and schedulers fail silently, and silence is ambiguous.",
|
|
5895
5961
|
items: [
|
|
5896
5962
|
{
|
|
@@ -5945,6 +6011,16 @@
|
|
|
5945
6011
|
"None",
|
|
5946
6012
|
],
|
|
5947
6013
|
},
|
|
6014
|
+
{
|
|
6015
|
+
q: "Could a non-technical operator understand what the system tells them?",
|
|
6016
|
+
help: "TASC AC2.1. Blocked reasons, clarifying questions, verdicts and escalations are read by whoever stands at the gate — often not an engineer. A boundary message that reads like a stack trace is a control that fails its audience.",
|
|
6017
|
+
kind: "select",
|
|
6018
|
+
options: [
|
|
6019
|
+
"Yes — plain language is the contract at every boundary",
|
|
6020
|
+
"Mixed",
|
|
6021
|
+
"It reads like stack traces",
|
|
6022
|
+
],
|
|
6023
|
+
},
|
|
5948
6024
|
{
|
|
5949
6025
|
q: "Does every scheduled loop end each run in a named outcome?",
|
|
5950
6026
|
help: "A runbook contract: each run terminates in exactly one of a fixed outcome set (nothing needed, work proposed, change proved, approval requested, recovery required, policy obsolete) with an operator-readable summary. A run that just stops is illegible — and illegible runs are how dead loops hide.",
|
|
@@ -5959,7 +6035,7 @@
|
|
|
5959
6035
|
],
|
|
5960
6036
|
},
|
|
5961
6037
|
{
|
|
5962
|
-
label: "Governance & accountability",
|
|
6038
|
+
label: "Governance & accountability (AC1 · AC9.1 · DP)",
|
|
5963
6039
|
note: "The audit-trail cluster: everything a human used to vouch for by being in the room.",
|
|
5964
6040
|
items: [
|
|
5965
6041
|
{
|