valent-pipeline 0.2.23 → 0.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -28,10 +28,30 @@ Also file bugs for:
|
|
|
28
28
|
|
|
29
29
|
Write to `{story_output_dir}/bugs.md`.
|
|
30
30
|
|
|
31
|
-
## Step 8: Check for Regressions
|
|
31
|
+
## Step 8: Check for Regressions and Pre-Existing Failures
|
|
32
|
+
|
|
33
|
+
### 8a: Regressions (previously passing, now failing)
|
|
32
34
|
|
|
33
35
|
Compare current test results against any previously passing tests. Flag any test that:
|
|
34
36
|
- Previously passed (in prior story executions) and now fails
|
|
35
37
|
- Was not modified as part of this story
|
|
36
38
|
|
|
37
|
-
Regressions are **always P1 or P2**
|
|
39
|
+
Regressions are **always P1 or P2** — they indicate the story broke existing functionality.
|
|
40
|
+
|
|
41
|
+
### 8b: Pre-existing failures
|
|
42
|
+
|
|
43
|
+
Every failing test in the full suite is a bug — regardless of whether it was already failing before this story. There is no "pre-existing" exemption.
|
|
44
|
+
|
|
45
|
+
For each failure in the full test suite that was NOT already filed as a bug in Step 7 (story-specific) or Step 8a (regression):
|
|
46
|
+
|
|
47
|
+
1. File a bug in `bugs.md` with category `pre-existing`
|
|
48
|
+
2. Priority: **P3** (Major) — these are not attributable to the current story but they are real failures that degrade the test suite
|
|
49
|
+
3. Route to BEND (default) or the agent whose code owns the failing test
|
|
50
|
+
4. Include in the execution report under a **Pre-Existing Failures** section:
|
|
51
|
+
- Total count
|
|
52
|
+
- Per-file breakdown
|
|
53
|
+
- Whether the count grew, shrank, or stayed the same compared to the prior story's execution report
|
|
54
|
+
|
|
55
|
+
**These bugs do NOT block the current story's ship decision.** They are filed for the retrospective to surface and for PM to consider when reprioritizing the backlog. JUDGE evaluates ship readiness based on story-specific bugs (Step 7) and regressions (Step 8a) only.
|
|
56
|
+
|
|
57
|
+
**But the count matters.** If pre-existing failure count grew since the last shipped story, flag this in the execution report summary as: `⚠ Pre-existing failures grew from {N} to {M} (+{delta})`. This signal feeds into PM's sprint analysis and the retrospective's pattern detection.
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
# Design: Post-Implementation PRD Completion Audit
|
|
2
|
-
|
|
3
|
-
**Status:** Proposal
|
|
4
|
-
**Scope:** Both epic and project mode
|
|
5
|
-
**Where it runs:** After all stories ship (Step 5 in valent-run-epic and valent-run-project), before writing the epic/project report.
|
|
6
|
-
|
|
7
|
-
## Problem
|
|
8
|
-
|
|
9
|
-
The epics-and-stories breakdown is done once, early, and may miss PRD requirements. Stories can also be cancelled or blocked during execution. There is currently no post-implementation check that verifies the full PRD was actually delivered. The existing pre-implementation readiness check (bmad-check-implementation-readiness) runs before any code is written and only validates that epics *claim* to cover FRs — it doesn't verify that shipped code actually delivers them.
|
|
10
|
-
|
|
11
|
-
## Proposed Solution
|
|
12
|
-
|
|
13
|
-
A new orchestration step (`sprint-prd-audit.md`) that runs at epic/project completion. It re-reads the PRD, extracts all functional requirements, and checks each against what was actually shipped — generating gap stories for anything missed.
|
|
14
|
-
|
|
15
|
-
### Trigger Point
|
|
16
|
-
|
|
17
|
-
Insert between the sprint loop exit and the report generation:
|
|
18
|
-
|
|
19
|
-
- **valent-run-epic SKILL.md:** After Step 4 loop exits, before Step 5a (Write Epic Report)
|
|
20
|
-
- **valent-run-project SKILL.md:** After Step 4 loop exits, before Step 5a (Write Project Report)
|
|
21
|
-
|
|
22
|
-
### Step-by-Step Flow
|
|
23
|
-
|
|
24
|
-
#### Step 1: Extract PRD Functional Requirements
|
|
25
|
-
|
|
26
|
-
Read the PRD from `{prd_path}` (already a pipeline config variable). Extract every functional requirement (FR), keyed by FR number or section heading. Build a checklist:
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
FR1: [requirement text] → status: unchecked
|
|
30
|
-
FR2: [requirement text] → status: unchecked
|
|
31
|
-
...
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Also extract non-functional requirements (NFRs) that have testable acceptance criteria.
|
|
35
|
-
|
|
36
|
-
#### Step 2: Map Shipped Stories to FRs
|
|
37
|
-
|
|
38
|
-
For each shipped story (from `{epic_progress_path}` or `{backlog_path}` where status = `shipped`):
|
|
39
|
-
|
|
40
|
-
1. Read the story's `reqs-brief.md` from its output directory
|
|
41
|
-
2. Extract which FRs the story claims to address (REQS agent already tags these during grooming)
|
|
42
|
-
3. Mark those FRs as `covered` in the checklist
|
|
43
|
-
|
|
44
|
-
For cancelled or blocked stories:
|
|
45
|
-
- Extract their claimed FRs
|
|
46
|
-
- Mark as `gap-cancelled` or `gap-blocked`
|
|
47
|
-
|
|
48
|
-
#### Step 3: Cross-Reference with Test Evidence
|
|
49
|
-
|
|
50
|
-
For each `covered` FR, verify that shipped test evidence exists:
|
|
51
|
-
|
|
52
|
-
1. Query the calibration table for the covering story's test results
|
|
53
|
-
2. Check that the story's QA-B test spec includes tests traceable to the FR
|
|
54
|
-
3. If a FR is "covered" by a story but that story had no tests touching the FR, downgrade to `weak-coverage`
|
|
55
|
-
|
|
56
|
-
#### Step 4: Generate Gap Report
|
|
57
|
-
|
|
58
|
-
Produce `prd-audit-report.md` in the epic/project output directory:
|
|
59
|
-
|
|
60
|
-
```markdown
|
|
61
|
-
# PRD Completion Audit
|
|
62
|
-
|
|
63
|
-
## Coverage Summary
|
|
64
|
-
- Total FRs: {count}
|
|
65
|
-
- Covered (with tests): {count}
|
|
66
|
-
- Weak coverage (no direct tests): {count}
|
|
67
|
-
- Gaps (cancelled/blocked story): {count}
|
|
68
|
-
- Gaps (never mapped to a story): {count}
|
|
69
|
-
- Coverage: {percentage}%
|
|
70
|
-
|
|
71
|
-
## Gap Details
|
|
72
|
-
|
|
73
|
-
### Never Mapped to a Story
|
|
74
|
-
| FR | Requirement | Recommendation |
|
|
75
|
-
|----|------------|----------------|
|
|
76
|
-
| FR7 | [text] | Create story in epic {X} |
|
|
77
|
-
|
|
78
|
-
### Lost to Cancelled/Blocked Stories
|
|
79
|
-
| FR | Requirement | Original Story | Status | Recommendation |
|
|
80
|
-
|----|------------|---------------|--------|----------------|
|
|
81
|
-
| FR3 | [text] | KANBAN-005 | cancelled | Re-scope into new story |
|
|
82
|
-
|
|
83
|
-
### Weak Coverage (no direct test evidence)
|
|
84
|
-
| FR | Requirement | Covering Story | Recommendation |
|
|
85
|
-
|----|------------|---------------|----------------|
|
|
86
|
-
| FR9 | [text] | KANBAN-012 | Add targeted tests |
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
#### Step 5: Generate Gap Stories (Optional, User-Confirmed)
|
|
90
|
-
|
|
91
|
-
If gaps exist:
|
|
92
|
-
|
|
93
|
-
1. Present the gap report to the user
|
|
94
|
-
2. Ask: "Generate backlog stories for {N} uncovered requirements?"
|
|
95
|
-
3. If confirmed:
|
|
96
|
-
- For each gap FR, create a new story in `{backlog_path}` with:
|
|
97
|
-
- `type: story`
|
|
98
|
-
- `status: pending`
|
|
99
|
-
- `epic: {epic_id}` (or assign to most relevant epic in project mode)
|
|
100
|
-
- `title: "Implement FR{N}: {short description}"`
|
|
101
|
-
- `priority: {next available}`
|
|
102
|
-
- `source: prd-audit`
|
|
103
|
-
- Report the new story IDs
|
|
104
|
-
- These stories are available for the next epic/project run
|
|
105
|
-
|
|
106
|
-
### Agent Usage
|
|
107
|
-
|
|
108
|
-
This step is executed by Lead directly — no new agents needed. Lead already has access to read the PRD, backlog, story output directories, and the calibration DB. The step is read-heavy and analytical, not generative.
|
|
109
|
-
|
|
110
|
-
If the PRD is large (sharded across multiple files), Lead reads all shards. Context pressure is manageable because this runs after all story agents are torn down.
|
|
111
|
-
|
|
112
|
-
### Configuration
|
|
113
|
-
|
|
114
|
-
Add to `pipeline-config.yaml` under `sprint:`:
|
|
115
|
-
|
|
116
|
-
```yaml
|
|
117
|
-
sprint:
|
|
118
|
-
prd_audit: true # enable post-implementation PRD audit (default: true)
|
|
119
|
-
prd_audit_auto_stories: false # auto-generate gap stories without user confirmation (default: false)
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Dependencies
|
|
123
|
-
|
|
124
|
-
- REQS agent must tag FRs in `reqs-brief.md` during grooming (already does this)
|
|
125
|
-
- PRD must use numbered/identifiable FR format (standard PRD template already requires this)
|
|
126
|
-
- Calibration table must have test result data per story (already recorded during sprint review)
|
|
127
|
-
|
|
128
|
-
### Open Questions
|
|
129
|
-
|
|
130
|
-
1. Should the audit run per-sprint as well, or only at epic/project completion? Per-sprint would catch drift earlier but adds overhead.
|
|
131
|
-
2. For project mode with multiple PRDs (one per epic), should the audit cross-reference all PRDs or just the one matching each epic?
|
|
132
|
-
3. Should `weak-coverage` FRs block the epic/project completion report, or just be informational?
|