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.
Files changed (110) hide show
  1. package/README.md +438 -0
  2. package/package.json +1 -1
  3. package/pipeline/agents-manifest.yaml +61 -1
  4. package/pipeline/docs/agent-reference.md +82 -23
  5. package/pipeline/docs/design/refactor-checklist.md +111 -0
  6. package/pipeline/docs/index.md +60 -0
  7. package/pipeline/docs/pipeline-overview.md +4 -0
  8. package/pipeline/prompts/bend.md +5 -11
  9. package/pipeline/prompts/critic.md +9 -0
  10. package/pipeline/prompts/data.md +59 -0
  11. package/pipeline/prompts/docgen.md +61 -0
  12. package/pipeline/prompts/fend.md +3 -10
  13. package/pipeline/prompts/iac.md +70 -0
  14. package/pipeline/prompts/lead.md +81 -3
  15. package/pipeline/prompts/libdev.md +61 -0
  16. package/pipeline/prompts/mcp-dev.md +59 -0
  17. package/pipeline/prompts/mobile.md +92 -0
  18. package/pipeline/prompts/qa-a.md +1 -1
  19. package/pipeline/prompts/qa-b.md +1 -1
  20. package/pipeline/prompts/reqs.md +5 -1
  21. package/pipeline/scripts/db-bootstrap.ts +1 -1
  22. package/pipeline/scripts/embed-sqlite.ts +5 -0
  23. package/pipeline/steps/common/quality-standards.md +19 -0
  24. package/pipeline/steps/critic/data-pipeline.md +28 -0
  25. package/pipeline/steps/critic/document-generation.md +21 -0
  26. package/pipeline/steps/critic/iac.md +29 -0
  27. package/pipeline/steps/critic/library.md +24 -0
  28. package/pipeline/steps/critic/mcp-server.md +24 -0
  29. package/pipeline/steps/critic/mobile-app.md +29 -0
  30. package/pipeline/steps/data/estimate.md +51 -0
  31. package/pipeline/steps/data/handoff.md +9 -0
  32. package/pipeline/steps/data/implement.md +16 -0
  33. package/pipeline/steps/data/read-inputs.md +13 -0
  34. package/pipeline/steps/data/write-tests.md +13 -0
  35. package/pipeline/steps/docgen/estimate.md +49 -0
  36. package/pipeline/steps/docgen/handoff.md +9 -0
  37. package/pipeline/steps/docgen/implement.md +19 -0
  38. package/pipeline/steps/docgen/read-inputs.md +13 -0
  39. package/pipeline/steps/docgen/write-tests.md +15 -0
  40. package/pipeline/steps/iac/estimate.md +50 -0
  41. package/pipeline/steps/iac/handoff.md +9 -0
  42. package/pipeline/steps/iac/implement.md +19 -0
  43. package/pipeline/steps/iac/read-inputs.md +13 -0
  44. package/pipeline/steps/iac/write-tests.md +20 -0
  45. package/pipeline/steps/judge/ship-decision.md +14 -1
  46. package/pipeline/steps/libdev/estimate.md +49 -0
  47. package/pipeline/steps/libdev/handoff.md +9 -0
  48. package/pipeline/steps/libdev/implement.md +19 -0
  49. package/pipeline/steps/libdev/read-inputs.md +13 -0
  50. package/pipeline/steps/libdev/write-tests.md +16 -0
  51. package/pipeline/steps/mcp-dev/estimate.md +49 -0
  52. package/pipeline/steps/mcp-dev/handoff.md +9 -0
  53. package/pipeline/steps/mcp-dev/implement.md +29 -0
  54. package/pipeline/steps/mcp-dev/read-inputs.md +13 -0
  55. package/pipeline/steps/mcp-dev/write-tests.md +19 -0
  56. package/pipeline/steps/mobile/emulator-lifecycle.md +67 -0
  57. package/pipeline/steps/mobile/estimate.md +51 -0
  58. package/pipeline/steps/mobile/flutter.md +30 -0
  59. package/pipeline/steps/mobile/handoff.md +18 -0
  60. package/pipeline/steps/mobile/implement.md +20 -0
  61. package/pipeline/steps/mobile/react-native.md +32 -0
  62. package/pipeline/steps/mobile/read-inputs.md +10 -0
  63. package/pipeline/steps/mobile/write-tests.md +59 -0
  64. package/pipeline/steps/orchestration/adopt-lead-and-create-team.md +1 -1
  65. package/pipeline/steps/orchestration/sprint-groom.md +4 -0
  66. package/pipeline/steps/orchestration/sprint-size.md +19 -12
  67. package/pipeline/steps/orchestration/validate-story-inputs.md +9 -0
  68. package/pipeline/steps/qa-a/data-pipeline.md +32 -0
  69. package/pipeline/steps/qa-a/document-generation.md +52 -0
  70. package/pipeline/steps/qa-a/iac.md +30 -0
  71. package/pipeline/steps/qa-a/library.md +42 -0
  72. package/pipeline/steps/qa-a/mcp-server.md +31 -0
  73. package/pipeline/steps/qa-a/mobile-app.md +59 -0
  74. package/pipeline/steps/qa-b/data-pipeline.md +48 -0
  75. package/pipeline/steps/qa-b/document-generation.md +47 -0
  76. package/pipeline/steps/qa-b/iac.md +44 -0
  77. package/pipeline/steps/qa-b/library.md +61 -0
  78. package/pipeline/steps/qa-b/mcp-server.md +40 -0
  79. package/pipeline/steps/qa-b/mobile-app.md +71 -0
  80. package/pipeline/steps/readiness/standalone-review.md +7 -2
  81. package/pipeline/steps/reqs/data-pipeline.md +56 -0
  82. package/pipeline/steps/reqs/document-generation.md +55 -0
  83. package/pipeline/steps/reqs/draft-brief.md +10 -0
  84. package/pipeline/steps/reqs/iac.md +63 -0
  85. package/pipeline/steps/reqs/library.md +56 -0
  86. package/pipeline/steps/reqs/mcp-server.md +48 -0
  87. package/pipeline/steps/reqs/mobile-app.md +54 -0
  88. package/pipeline/steps/reqs/self-review.md +5 -3
  89. package/pipeline/task-graphs/backend-api.yaml +19 -2
  90. package/pipeline/task-graphs/data-pipeline.yaml +29 -12
  91. package/pipeline/task-graphs/document-generation.yaml +29 -12
  92. package/pipeline/task-graphs/frontend-only.yaml +19 -2
  93. package/pipeline/task-graphs/fullstack-web.yaml +19 -2
  94. package/pipeline/task-graphs/library.yaml +29 -12
  95. package/pipeline/task-graphs/mcp-server.yaml +29 -12
  96. package/pipeline/task-graphs/mobile-app.yaml +171 -0
  97. package/pipeline/templates/bugs.template.md +1 -1
  98. package/pipeline/templates/critic-review.template.md +1 -1
  99. package/pipeline/templates/data-handoff.template.md +96 -0
  100. package/pipeline/templates/docgen-handoff.template.md +83 -0
  101. package/pipeline/templates/iac-handoff.template.md +83 -0
  102. package/pipeline/templates/judge-decision.template.md +11 -1
  103. package/pipeline/templates/libdev-handoff.template.md +82 -0
  104. package/pipeline/templates/mcp-dev-handoff.template.md +87 -0
  105. package/pipeline/templates/mobile-handoff.template.md +122 -0
  106. package/pipeline/templates/reqs-brief.template.md +60 -4
  107. package/skills/valent-run-deferred-tests/SKILL.md +109 -0
  108. package/src/commands/db-rebuild.js +5 -0
  109. package/src/lib/config-schema.js +1 -1
  110. 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' },
@@ -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 = `