valent-pipeline 0.2.19 → 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/lead-lifecycle.md +1 -1
- 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/knowledge.md +2 -0
- package/pipeline/prompts/lead.md +97 -6
- 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-execute.md +3 -2
- package/pipeline/steps/orchestration/sprint-groom.md +4 -0
- package/pipeline/steps/orchestration/sprint-size.md +26 -16
- 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/skills/valent-run-epic/SKILL.md +1 -1
- package/skills/valent-run-project/SKILL.md +1 -1
- 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,122 @@
|
|
|
1
|
+
# mobile-handoff
|
|
2
|
+
<!-- Template version: 1.0 | Used by: MOBILE | Read by: CRITIC, QA-B -->
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
agent: {agent-name}
|
|
6
|
+
story: {story-id}
|
|
7
|
+
status: {in_progress | completed}
|
|
8
|
+
stepsCompleted: []
|
|
9
|
+
pendingSteps: []
|
|
10
|
+
lastCheckpoint: {ISO-8601 timestamp}
|
|
11
|
+
inputsRead: []
|
|
12
|
+
outputsWritten: []
|
|
13
|
+
blockers: []
|
|
14
|
+
ios_deferred: {true | false}
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Orchestrator Summary -- required
|
|
18
|
+
- **Agent:** {agent-name}
|
|
19
|
+
- **Story:** {story-id}
|
|
20
|
+
- **Verdict:** {pass | fail | needs-review}
|
|
21
|
+
- **State transition:** {from-phase} -> {to-phase}
|
|
22
|
+
- **Files created/modified:** {list of file paths}
|
|
23
|
+
- **Flags:** {alerts for downstream agents, or "none"}
|
|
24
|
+
|
|
25
|
+
## Files Created/Modified -- required
|
|
26
|
+
<!-- All production and test files created or modified, with purpose. -->
|
|
27
|
+
|
|
28
|
+
| File | Action | Purpose |
|
|
29
|
+
|------|--------|---------|
|
|
30
|
+
| {file-path} | {created \| modified} | {one-line description} |
|
|
31
|
+
|
|
32
|
+
## Screens Implemented -- required
|
|
33
|
+
<!-- Mobile screens implemented in this story. -->
|
|
34
|
+
|
|
35
|
+
| Screen | File Path | Description | Navigation |
|
|
36
|
+
|--------|-----------|-------------|------------|
|
|
37
|
+
| {screen-name} | {file-path} | {one-line description} | {stack \| tab \| drawer \| modal \| deep-link} |
|
|
38
|
+
|
|
39
|
+
## Components Created -- required
|
|
40
|
+
<!-- UI components implemented in this story. -->
|
|
41
|
+
|
|
42
|
+
| Component | File Path | Description | Props |
|
|
43
|
+
|-----------|-----------|-------------|-------|
|
|
44
|
+
| {component-name} | {file-path} | {one-line description} | {key props and types} |
|
|
45
|
+
|
|
46
|
+
## Navigation Structure -- conditional
|
|
47
|
+
<!-- Only include if new navigation routes were added -->
|
|
48
|
+
|
|
49
|
+
| Route / Deep Link | Screen | Description | Auth Required |
|
|
50
|
+
|-------------------|--------|-------------|---------------|
|
|
51
|
+
| {deep-link-uri or nav-route} | {screen-name} | {one-line description} | {yes \| no} |
|
|
52
|
+
|
|
53
|
+
## API Dependencies on BEND -- required
|
|
54
|
+
<!-- Every backend endpoint consumed by the mobile app, with integration details. -->
|
|
55
|
+
|
|
56
|
+
| Method | Endpoint | Used By | Purpose | Error Handling |
|
|
57
|
+
|--------|----------|---------|---------|----------------|
|
|
58
|
+
| {HTTP method} | {route path} | {screen-name} | {one-line description} | {how errors are displayed to user} |
|
|
59
|
+
|
|
60
|
+
## Emulator Configuration -- required
|
|
61
|
+
<!-- Emulator/simulator used for testing. -->
|
|
62
|
+
|
|
63
|
+
| Platform | Device | OS Version | Status |
|
|
64
|
+
|----------|--------|------------|--------|
|
|
65
|
+
| Android | {AVD name or device} | {API level} | {booted \| failed \| skipped} |
|
|
66
|
+
| iOS | {simulator name} | {iOS version} | {booted \| failed \| skipped \| deferred} |
|
|
67
|
+
|
|
68
|
+
## Maestro Flow Files -- required
|
|
69
|
+
<!-- E2E test flows written and executed. -->
|
|
70
|
+
|
|
71
|
+
| Flow File | AC Coverage | Platform | Status |
|
|
72
|
+
|-----------|-------------|----------|--------|
|
|
73
|
+
| {file-path} | {AC-ids} | {both \| android \| ios} | {passed \| failed \| deferred} |
|
|
74
|
+
|
|
75
|
+
## Test Files Written -- required
|
|
76
|
+
<!-- All test files created or modified, mapped to the spec cases they satisfy. -->
|
|
77
|
+
|
|
78
|
+
| Test File | Test Cases | Spec Reference |
|
|
79
|
+
|-----------|-----------|----------------|
|
|
80
|
+
| {file-path} | {list of test case names} | `qa-test-spec.md#{ac-id}` |
|
|
81
|
+
|
|
82
|
+
## Test Results Summary -- required
|
|
83
|
+
<!-- Aggregate results from running the test suite, separated by platform. -->
|
|
84
|
+
|
|
85
|
+
### Android
|
|
86
|
+
| Suite | Total | Passed | Failed | Skipped | Duration |
|
|
87
|
+
|-------|-------|--------|--------|---------|----------|
|
|
88
|
+
| {suite-name} | {count} | {count} | {count} | {count} | {duration} |
|
|
89
|
+
|
|
90
|
+
### iOS
|
|
91
|
+
| Suite | Total | Passed | Failed | Skipped | Duration |
|
|
92
|
+
|-------|-------|--------|--------|---------|----------|
|
|
93
|
+
| {suite-name or "Deferred"} | {count} | {count} | {count} | {count} | {duration} |
|
|
94
|
+
|
|
95
|
+
## Platform Coverage -- required
|
|
96
|
+
<!-- Summary of platform test coverage for this story. -->
|
|
97
|
+
|
|
98
|
+
| Platform | Tests Run | Tests Passed | Deferred | Reason |
|
|
99
|
+
|----------|-----------|--------------|----------|--------|
|
|
100
|
+
| Android | {count} | {count} | 0 | N/A |
|
|
101
|
+
| iOS | {count} | {count} | {count} | {reason or "N/A"} |
|
|
102
|
+
|
|
103
|
+
## Deferred iOS Tests -- conditional
|
|
104
|
+
<!-- Only include when ios_deferred is true. Lists Maestro flows that could not run on this host. -->
|
|
105
|
+
|
|
106
|
+
| Flow File | AC Coverage | Reason |
|
|
107
|
+
|-----------|-------------|--------|
|
|
108
|
+
| {file-path} | {AC-ids} | {Host OS lacks iOS simulator} |
|
|
109
|
+
|
|
110
|
+
## Implementation Decisions -- required
|
|
111
|
+
<!-- Key decisions made during implementation. Each entry: decision, rationale, alternatives rejected. -->
|
|
112
|
+
|
|
113
|
+
- **Decision:** {what was decided}
|
|
114
|
+
- **Rationale:** {why}
|
|
115
|
+
- **Rejected:** {alternatives considered and why they lost}
|
|
116
|
+
|
|
117
|
+
## Cross-References -- required
|
|
118
|
+
<!-- Explicit pointers to upstream artifacts consumed. -->
|
|
119
|
+
- Reqs brief: `reqs-brief.md#{section}`
|
|
120
|
+
- UXA spec: `uxa-spec.md#{section}`
|
|
121
|
+
- Test spec: `qa-test-spec.md#{section}`
|
|
122
|
+
- BEND handoff: `bend-handoff.md#{section}`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# reqs-brief
|
|
2
|
-
<!-- Template version: 1.0 | Used by: REQS | Read by: UXA, QA-A, BEND, FEND, CRITIC, READINESS -->
|
|
2
|
+
<!-- Template version: 1.0 | Used by: REQS | Read by: UXA, QA-A, BEND, FEND, DATA, MCP-DEV, LIBDEV, DOCGEN, IAC, CRITIC, READINESS -->
|
|
3
3
|
|
|
4
4
|
---
|
|
5
5
|
agent: reqs
|
|
@@ -35,7 +35,8 @@ blockers: []
|
|
|
35
35
|
|---------|------|-------------|------------|
|
|
36
36
|
| {br-id} | {rule statement} | {ac-id list} | {edge case notes or "none"} |
|
|
37
37
|
|
|
38
|
-
## Database Changes --
|
|
38
|
+
## Database Changes -- conditional
|
|
39
|
+
<!-- Only include if api or data-pipeline in testing_profiles -->
|
|
39
40
|
<!-- Tables to create/modify. Each entry: table name, action (create/alter/drop), columns with types, constraints, indexes, relationships. -->
|
|
40
41
|
|
|
41
42
|
```yaml
|
|
@@ -48,14 +49,16 @@ database_changes:
|
|
|
48
49
|
relationships: [{relationship}]
|
|
49
50
|
```
|
|
50
51
|
|
|
51
|
-
## API Endpoints --
|
|
52
|
+
## API Endpoints -- conditional
|
|
53
|
+
<!-- Only include if api in testing_profiles -->
|
|
52
54
|
<!-- Each endpoint: method, path, request body, response codes, response body shape, auth requirements. -->
|
|
53
55
|
|
|
54
56
|
| Method | Path | Request Body | Response Codes | Response Shape | Auth |
|
|
55
57
|
|--------|------|-------------|---------------|----------------|------|
|
|
56
58
|
| {method} | {path} | {body or "none"} | {codes} | {shape} | {auth requirement} |
|
|
57
59
|
|
|
58
|
-
## Authentication and Authorization --
|
|
60
|
+
## Authentication and Authorization -- conditional
|
|
61
|
+
<!-- Only include if api or ui in testing_profiles -->
|
|
59
62
|
<!-- Auth flow, token handling, role/permission requirements, tenant isolation rules. -->
|
|
60
63
|
- **Auth mechanism:** {mechanism}
|
|
61
64
|
- **Roles:** {role list with permissions}
|
|
@@ -71,6 +74,59 @@ database_changes:
|
|
|
71
74
|
- **Pagination:** {strategy or "n/a"}
|
|
72
75
|
- **Rate limiting:** {strategy or "n/a"}
|
|
73
76
|
|
|
77
|
+
## Data Pipeline Specification -- conditional
|
|
78
|
+
<!-- Only include if data-pipeline in testing_profiles -->
|
|
79
|
+
|
|
80
|
+
| Stage | Input | Transform | Output | Quality Rules | Error Handling |
|
|
81
|
+
|-------|-------|-----------|--------|---------------|----------------|
|
|
82
|
+
| {stage-name} | {input source/format} | {transformation logic} | {output target/format} | {quality checks} | {error strategy} |
|
|
83
|
+
|
|
84
|
+
- **Idempotency strategy:** {approach — natural keys, upsert, dedup}
|
|
85
|
+
- **Checkpoint/resume:** {what state is persisted, recovery granularity}
|
|
86
|
+
- **Schema evolution:** {strategy — additive-only, migration scripts, etc.}
|
|
87
|
+
|
|
88
|
+
## Tool Definitions -- conditional
|
|
89
|
+
<!-- Only include if mcp-server in testing_profiles -->
|
|
90
|
+
|
|
91
|
+
| Tool Name | Description | inputSchema | Output Types | Error Behavior |
|
|
92
|
+
|-----------|-------------|-------------|-------------|----------------|
|
|
93
|
+
| {name} | {purpose} | {JSON Schema summary} | {text/image/audio/resource} | {JSON-RPC error code or isError:true scenario} |
|
|
94
|
+
|
|
95
|
+
- **Capabilities:** {what server advertises at initialize}
|
|
96
|
+
- **Transport:** {stdio / SSE / streamable HTTP}
|
|
97
|
+
|
|
98
|
+
## Public API Surface -- conditional
|
|
99
|
+
<!-- Only include if library in testing_profiles -->
|
|
100
|
+
|
|
101
|
+
| Export | Signature | Return Type | Module Path | Breaking Change? |
|
|
102
|
+
|--------|-----------|-------------|-------------|-----------------|
|
|
103
|
+
| {symbol} | {function signature or type} | {return type} | {path in exports map} | {yes/no — vs prior version} |
|
|
104
|
+
|
|
105
|
+
- **Semver policy:** {what constitutes major/minor/patch}
|
|
106
|
+
- **Module system:** {CJS / ESM / dual}
|
|
107
|
+
- **Peer dependencies:** {required peer deps and version ranges}
|
|
108
|
+
|
|
109
|
+
## Template Specifications -- conditional
|
|
110
|
+
<!-- Only include if document-generation in testing_profiles -->
|
|
111
|
+
|
|
112
|
+
| Template | Variables (required) | Variables (optional) | Output Format | Conditional Sections |
|
|
113
|
+
|----------|---------------------|---------------------|---------------|---------------------|
|
|
114
|
+
| {template-name} | {var: type, var: type} | {var: type (default)} | {PDF/HTML/Markdown} | {section: condition} |
|
|
115
|
+
|
|
116
|
+
- **Encoding:** {UTF-8, unicode support, RTL}
|
|
117
|
+
- **Asset dependencies:** {fonts, images, logos — embedded or referenced}
|
|
118
|
+
|
|
119
|
+
## Infrastructure Resources -- conditional
|
|
120
|
+
<!-- Only include if iac in testing_profiles -->
|
|
121
|
+
|
|
122
|
+
| Resource | Provider | Type | Purpose | Tags | Destroy Protection |
|
|
123
|
+
|----------|----------|------|---------|------|--------------------|
|
|
124
|
+
| {name} | {AWS/Azure/GCP} | {resource type} | {purpose} | {required tags} | {yes/no} |
|
|
125
|
+
|
|
126
|
+
- **State management:** {remote backend, locking mechanism}
|
|
127
|
+
- **IAM policy:** {roles/permissions created, least-privilege verification}
|
|
128
|
+
- **Environment topology:** {dev/staging/prod differences}
|
|
129
|
+
|
|
74
130
|
## NFR Targets -- required
|
|
75
131
|
<!-- Non-functional requirement targets. Each entry: category, metric, target value, measurement method. -->
|
|
76
132
|
|
|
@@ -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.
|
|
@@ -97,7 +97,7 @@ Phase 1 agents (REQS, UXA, QA-A, READINESS) stay alive across the grooming batch
|
|
|
97
97
|
|
|
98
98
|
Read and follow `.valent-pipeline/steps/orchestration/sprint-size.md`.
|
|
99
99
|
|
|
100
|
-
BEND/FEND estimate Fibonacci points per story.
|
|
100
|
+
BEND/FEND estimate Fibonacci points per story (filtered by `testing_profiles`). Agents persist into story 1 execution.
|
|
101
101
|
|
|
102
102
|
#### 4f. Sprint Planning
|
|
103
103
|
|
|
@@ -111,7 +111,7 @@ Phase 1 agents (REQS, UXA, QA-A, READINESS) stay alive across the grooming batch
|
|
|
111
111
|
|
|
112
112
|
Read and follow `.valent-pipeline/steps/orchestration/sprint-size.md`.
|
|
113
113
|
|
|
114
|
-
BEND/FEND estimate Fibonacci points per story.
|
|
114
|
+
BEND/FEND estimate Fibonacci points per story (filtered by `testing_profiles`). Agents persist into story 1 execution.
|
|
115
115
|
|
|
116
116
|
#### 4f. Sprint Planning
|
|
117
117
|
|
|
@@ -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 = `
|