valent-pipeline 0.2.20 → 0.2.21
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/README.md +438 -0
- package/package.json +1 -1
- package/pipeline/agents-manifest.yaml +61 -1
- package/pipeline/docs/agent-reference.md +82 -23
- package/pipeline/docs/design/refactor-checklist.md +111 -0
- package/pipeline/docs/index.md +60 -0
- package/pipeline/docs/pipeline-overview.md +4 -0
- package/pipeline/prompts/bend.md +5 -11
- package/pipeline/prompts/critic.md +9 -0
- package/pipeline/prompts/data.md +59 -0
- package/pipeline/prompts/docgen.md +61 -0
- package/pipeline/prompts/fend.md +3 -10
- package/pipeline/prompts/iac.md +70 -0
- package/pipeline/prompts/lead.md +81 -3
- package/pipeline/prompts/libdev.md +61 -0
- package/pipeline/prompts/mcp-dev.md +59 -0
- package/pipeline/prompts/mobile.md +92 -0
- package/pipeline/prompts/qa-a.md +1 -1
- package/pipeline/prompts/qa-b.md +1 -1
- package/pipeline/prompts/reqs.md +5 -1
- package/pipeline/scripts/db-bootstrap.ts +1 -1
- package/pipeline/scripts/embed-sqlite.ts +5 -0
- package/pipeline/steps/common/quality-standards.md +19 -0
- package/pipeline/steps/critic/data-pipeline.md +28 -0
- package/pipeline/steps/critic/document-generation.md +21 -0
- package/pipeline/steps/critic/iac.md +29 -0
- package/pipeline/steps/critic/library.md +24 -0
- package/pipeline/steps/critic/mcp-server.md +24 -0
- package/pipeline/steps/critic/mobile-app.md +29 -0
- package/pipeline/steps/data/estimate.md +51 -0
- package/pipeline/steps/data/handoff.md +9 -0
- package/pipeline/steps/data/implement.md +16 -0
- package/pipeline/steps/data/read-inputs.md +13 -0
- package/pipeline/steps/data/write-tests.md +13 -0
- package/pipeline/steps/docgen/estimate.md +49 -0
- package/pipeline/steps/docgen/handoff.md +9 -0
- package/pipeline/steps/docgen/implement.md +19 -0
- package/pipeline/steps/docgen/read-inputs.md +13 -0
- package/pipeline/steps/docgen/write-tests.md +15 -0
- package/pipeline/steps/iac/estimate.md +50 -0
- package/pipeline/steps/iac/handoff.md +9 -0
- package/pipeline/steps/iac/implement.md +19 -0
- package/pipeline/steps/iac/read-inputs.md +13 -0
- package/pipeline/steps/iac/write-tests.md +20 -0
- package/pipeline/steps/judge/ship-decision.md +14 -1
- package/pipeline/steps/libdev/estimate.md +49 -0
- package/pipeline/steps/libdev/handoff.md +9 -0
- package/pipeline/steps/libdev/implement.md +19 -0
- package/pipeline/steps/libdev/read-inputs.md +13 -0
- package/pipeline/steps/libdev/write-tests.md +16 -0
- package/pipeline/steps/mcp-dev/estimate.md +49 -0
- package/pipeline/steps/mcp-dev/handoff.md +9 -0
- package/pipeline/steps/mcp-dev/implement.md +29 -0
- package/pipeline/steps/mcp-dev/read-inputs.md +13 -0
- package/pipeline/steps/mcp-dev/write-tests.md +19 -0
- package/pipeline/steps/mobile/emulator-lifecycle.md +67 -0
- package/pipeline/steps/mobile/estimate.md +51 -0
- package/pipeline/steps/mobile/flutter.md +30 -0
- package/pipeline/steps/mobile/handoff.md +18 -0
- package/pipeline/steps/mobile/implement.md +20 -0
- package/pipeline/steps/mobile/react-native.md +32 -0
- package/pipeline/steps/mobile/read-inputs.md +10 -0
- package/pipeline/steps/mobile/write-tests.md +59 -0
- package/pipeline/steps/orchestration/adopt-lead-and-create-team.md +1 -1
- package/pipeline/steps/orchestration/sprint-groom.md +4 -0
- package/pipeline/steps/orchestration/sprint-size.md +19 -12
- package/pipeline/steps/orchestration/validate-story-inputs.md +9 -0
- package/pipeline/steps/qa-a/data-pipeline.md +32 -0
- package/pipeline/steps/qa-a/document-generation.md +52 -0
- package/pipeline/steps/qa-a/iac.md +30 -0
- package/pipeline/steps/qa-a/library.md +42 -0
- package/pipeline/steps/qa-a/mcp-server.md +31 -0
- package/pipeline/steps/qa-a/mobile-app.md +59 -0
- package/pipeline/steps/qa-b/data-pipeline.md +48 -0
- package/pipeline/steps/qa-b/document-generation.md +47 -0
- package/pipeline/steps/qa-b/iac.md +44 -0
- package/pipeline/steps/qa-b/library.md +61 -0
- package/pipeline/steps/qa-b/mcp-server.md +40 -0
- package/pipeline/steps/qa-b/mobile-app.md +71 -0
- package/pipeline/steps/readiness/standalone-review.md +7 -2
- package/pipeline/steps/reqs/data-pipeline.md +56 -0
- package/pipeline/steps/reqs/document-generation.md +55 -0
- package/pipeline/steps/reqs/draft-brief.md +10 -0
- package/pipeline/steps/reqs/iac.md +63 -0
- package/pipeline/steps/reqs/library.md +56 -0
- package/pipeline/steps/reqs/mcp-server.md +48 -0
- package/pipeline/steps/reqs/mobile-app.md +54 -0
- package/pipeline/steps/reqs/self-review.md +5 -3
- package/pipeline/task-graphs/backend-api.yaml +19 -2
- package/pipeline/task-graphs/data-pipeline.yaml +29 -12
- package/pipeline/task-graphs/document-generation.yaml +29 -12
- package/pipeline/task-graphs/frontend-only.yaml +19 -2
- package/pipeline/task-graphs/fullstack-web.yaml +19 -2
- package/pipeline/task-graphs/library.yaml +29 -12
- package/pipeline/task-graphs/mcp-server.yaml +29 -12
- package/pipeline/task-graphs/mobile-app.yaml +171 -0
- package/pipeline/templates/bugs.template.md +1 -1
- package/pipeline/templates/critic-review.template.md +1 -1
- package/pipeline/templates/data-handoff.template.md +96 -0
- package/pipeline/templates/docgen-handoff.template.md +83 -0
- package/pipeline/templates/iac-handoff.template.md +83 -0
- package/pipeline/templates/judge-decision.template.md +11 -1
- package/pipeline/templates/libdev-handoff.template.md +82 -0
- package/pipeline/templates/mcp-dev-handoff.template.md +87 -0
- package/pipeline/templates/mobile-handoff.template.md +122 -0
- package/pipeline/templates/reqs-brief.template.md +60 -4
- package/skills/valent-run-deferred-tests/SKILL.md +109 -0
- package/src/commands/db-rebuild.js +5 -0
- package/src/lib/config-schema.js +1 -1
- package/src/lib/db.js +1 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: valent-run-deferred-tests
|
|
3
|
+
description: 'Run deferred iOS tests on a Mac host. Use when the user says "run deferred tests", "run ios tests", or "complete deferred"'
|
|
4
|
+
argument-hint: '<story-id>'
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# valent-run-deferred-tests
|
|
8
|
+
|
|
9
|
+
Run deferred iOS Maestro flows for stories that shipped as SHIP-PARTIAL on a non-Mac host. Requires a Mac with Xcode and iOS Simulator installed.
|
|
10
|
+
|
|
11
|
+
## Arguments
|
|
12
|
+
|
|
13
|
+
The user provides a story ID: `STORY-042`
|
|
14
|
+
|
|
15
|
+
If no argument is provided, scan `{story_output_directory}` for all stories with `ios_deferred: true` in their `mobile-handoff.md` and process them all.
|
|
16
|
+
|
|
17
|
+
## Execution Steps
|
|
18
|
+
|
|
19
|
+
### Step 0: Pre-Flight Checks
|
|
20
|
+
|
|
21
|
+
1. Verify host is Mac: `uname -s` must return `Darwin`
|
|
22
|
+
- If not Mac: **STOP** with: `This skill requires a Mac with Xcode and iOS Simulator. Current host: {uname output}.`
|
|
23
|
+
2. Verify Xcode tools: `xcrun simctl list devices` must succeed
|
|
24
|
+
- If fails: **STOP** with: `Xcode command line tools not installed. Run: xcode-select --install`
|
|
25
|
+
3. Verify Maestro installed: `maestro --version` must succeed
|
|
26
|
+
- If fails: **STOP** with: `Maestro not installed. Install with: curl -Ls "https://get.maestro.mobile.dev" | bash`
|
|
27
|
+
|
|
28
|
+
### Step 1: Load Pipeline Config
|
|
29
|
+
|
|
30
|
+
Read `.valent-pipeline/pipeline-config.yaml` for tech stack, project config, and story output directory.
|
|
31
|
+
|
|
32
|
+
### Step 2: Load Story Artifacts
|
|
33
|
+
|
|
34
|
+
Read `{story_output_dir}/mobile-handoff.md`. Verify:
|
|
35
|
+
- `ios_deferred: true` in frontmatter
|
|
36
|
+
- `Deferred iOS Tests` section exists with at least one flow listed
|
|
37
|
+
|
|
38
|
+
If `ios_deferred` is not `true`, **STOP** with: `Story {story_id} does not have deferred iOS tests.`
|
|
39
|
+
|
|
40
|
+
Read `{story_output_dir}/qa-test-spec.md` for the original test specifications. If ACs have changed since the original run (compare against current repo state), flag the drift and spec against current reality.
|
|
41
|
+
|
|
42
|
+
### Step 3: Clean Install Dependencies
|
|
43
|
+
|
|
44
|
+
From repo root:
|
|
45
|
+
- `npm ci` or `yarn install --frozen-lockfile` (Node dependencies)
|
|
46
|
+
- If React Native: `cd ios && pod install && cd ..` (CocoaPods)
|
|
47
|
+
- If Flutter: `flutter pub get`
|
|
48
|
+
|
|
49
|
+
This is done once, shared across all deferred stories.
|
|
50
|
+
|
|
51
|
+
### Step 4: Build iOS App
|
|
52
|
+
|
|
53
|
+
Build the iOS binary from HEAD of `main` (one build, shared across all stories):
|
|
54
|
+
- React Native: `npx react-native build-ios --scheme {scheme} --configuration Debug --simulator`
|
|
55
|
+
- Flutter: `flutter build ios --debug --simulator`
|
|
56
|
+
|
|
57
|
+
If build fails, **STOP** with build output. This is a blocking issue.
|
|
58
|
+
|
|
59
|
+
### Step 5: Boot iOS Simulator
|
|
60
|
+
|
|
61
|
+
Follow emulator lifecycle procedure from `.valent-pipeline/steps/mobile/emulator-lifecycle.md` (iOS section):
|
|
62
|
+
1. `xcrun simctl list devices available` — pick appropriate device
|
|
63
|
+
2. `xcrun simctl boot {device_udid}`
|
|
64
|
+
3. Wait for boot confirmation
|
|
65
|
+
|
|
66
|
+
Install the built app on the simulator.
|
|
67
|
+
|
|
68
|
+
### Step 6: Execute Deferred Maestro Flows (Per Story)
|
|
69
|
+
|
|
70
|
+
For each deferred flow from `mobile-handoff.md#deferred-ios-tests`:
|
|
71
|
+
1. **State isolation:** `xcrun simctl terminate {device_udid} {bundle_id}` + `xcrun simctl privacy {device_udid} reset all {bundle_id}`
|
|
72
|
+
2. **Pre-grant permissions:** per flow requirements
|
|
73
|
+
3. **Execute:** `maestro test {flow_file} --device {ios_simulator_name}`
|
|
74
|
+
4. **Record result:** pass/fail with output
|
|
75
|
+
|
|
76
|
+
### Step 7: Update Story Artifacts
|
|
77
|
+
|
|
78
|
+
- Update `mobile-handoff.md`:
|
|
79
|
+
- Move flows from `Deferred iOS Tests` to `Maestro Flow Files` with iOS results
|
|
80
|
+
- Update `Platform Coverage` table with iOS results
|
|
81
|
+
- Update `Test Results Summary` iOS section
|
|
82
|
+
- Set `ios_deferred: false` in frontmatter if all flows passed
|
|
83
|
+
|
|
84
|
+
- Update `execution-report.md`:
|
|
85
|
+
- Add iOS results to the `Mobile Platform Coverage Audit` section
|
|
86
|
+
- Update platform coverage from `PARTIAL-IOS-DEFERRED` to `FULL` (if all pass)
|
|
87
|
+
|
|
88
|
+
- If **all deferred flows pass:**
|
|
89
|
+
- Update `judge-decision.md`: change verdict from `SHIP-PARTIAL` to `SHIP`, update Platform Coverage evidence item to `PASS`, add `SHIP-PARTIAL Detail` noting "Resolved via /run-deferred-tests"
|
|
90
|
+
- Story transitions from `android-only-verified` → `verified`
|
|
91
|
+
|
|
92
|
+
- If **any deferred flows fail:**
|
|
93
|
+
- File bugs in `bugs.md` against current code (routed to next sprint)
|
|
94
|
+
- Story remains `SHIP-PARTIAL` until bugs are fixed and deferred tests re-run
|
|
95
|
+
- Update `judge-decision.md` with failure details but do NOT change verdict
|
|
96
|
+
|
|
97
|
+
### Step 8: Report
|
|
98
|
+
|
|
99
|
+
Output summary:
|
|
100
|
+
- Stories processed: {count}
|
|
101
|
+
- Per story: flows executed, pass/fail counts, updated verdict
|
|
102
|
+
- If failures: bug IDs filed, recommended next steps
|
|
103
|
+
|
|
104
|
+
## Notes
|
|
105
|
+
|
|
106
|
+
- This skill is idempotent — re-running picks up any remaining deferred flows.
|
|
107
|
+
- Deferred flows are the same YAML files MOBILE wrote; they just weren't executed on the original host.
|
|
108
|
+
- The iOS binary is built once from HEAD and shared across all stories. If code has changed significantly since the original run, test failures may reflect current code state, not the original implementation.
|
|
109
|
+
- If processing multiple stories, the simulator stays booted between stories — only app state is cleared.
|
|
@@ -9,6 +9,11 @@ const ARTIFACT_MAP = {
|
|
|
9
9
|
'qa-test-spec.md': { type: 'qa-test-spec', agent: 'QA-A' },
|
|
10
10
|
'bend-handoff.md': { type: 'bend-handoff', agent: 'BEND' },
|
|
11
11
|
'fend-handoff.md': { type: 'fend-handoff', agent: 'FEND' },
|
|
12
|
+
'data-handoff.md': { type: 'data-handoff', agent: 'DATA' },
|
|
13
|
+
'mcp-dev-handoff.md': { type: 'mcp-dev-handoff', agent: 'MCP-DEV' },
|
|
14
|
+
'libdev-handoff.md': { type: 'libdev-handoff', agent: 'LIBDEV' },
|
|
15
|
+
'docgen-handoff.md': { type: 'docgen-handoff', agent: 'DOCGEN' },
|
|
16
|
+
'iac-handoff.md': { type: 'iac-handoff', agent: 'IAC' },
|
|
12
17
|
'critic-review.md': { type: 'critic-review', agent: 'CRITIC' },
|
|
13
18
|
'execution-report.md': { type: 'execution-report', agent: 'QA-B' },
|
|
14
19
|
'bugs.md': { type: 'bugs', agent: 'QA-B' },
|
package/src/lib/config-schema.js
CHANGED
|
@@ -116,7 +116,7 @@ export const defaults = {
|
|
|
116
116
|
},
|
|
117
117
|
models: {
|
|
118
118
|
opus: ['BEND', 'FEND', 'CRITIC'],
|
|
119
|
-
sonnet: ['REQS', 'UXA', 'QA-A', 'QA-B', 'READINESS', 'JUDGE', 'PMCP', 'Retrospective'],
|
|
119
|
+
sonnet: ['REQS', 'UXA', 'QA-A', 'QA-B', 'READINESS', 'JUDGE', 'PMCP', 'Retrospective', 'DATA', 'MCP-DEV', 'LIBDEV', 'DOCGEN', 'IAC'],
|
|
120
120
|
haiku: ['Knowledge', 'Embed', 'Help'],
|
|
121
121
|
},
|
|
122
122
|
quality: {
|
package/src/lib/db.js
CHANGED
|
@@ -12,7 +12,7 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
12
12
|
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
14
|
// Schema DDL — authoritative source. Keep pipeline/scripts/db-bootstrap.ts
|
|
15
|
-
// in sync when modifying (see docs/design/refactor-checklist.md).
|
|
15
|
+
// in sync when modifying (see pipeline/docs/design/refactor-checklist.md).
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
17
|
|
|
18
18
|
export const SCHEMA_DDL = `
|