gaia-framework 1.64.0 → 1.65.1
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/.claude/commands/gaia-add-feature.md +2 -2
- package/.claude/commands/gaia-change-request.md +16 -4
- package/.claude/commands/gaia-edit-ux.md +17 -0
- package/.claude/commands/gaia-resume.md +1 -1
- package/.claude/commands/gaia-validate-prd.md +9 -3
- package/CLAUDE.md +1 -1
- package/README.md +3 -3
- package/_gaia/_config/adversarial-triggers.yaml +91 -0
- package/_gaia/_config/files-manifest.csv +1 -0
- package/_gaia/_config/gaia-help.csv +10 -6
- package/_gaia/_config/global.yaml +2 -1
- package/_gaia/_config/lifecycle-sequence.yaml +26 -4
- package/_gaia/_config/manifest.yaml +3 -3
- package/_gaia/_config/skill-manifest.csv +3 -1
- package/_gaia/_config/workflow-manifest.csv +5 -3
- package/_gaia/core/config.yaml +1 -1
- package/_gaia/core/engine/workflow.xml +25 -5
- package/_gaia/core/workflows/brainstorming/template.md +6 -0
- package/_gaia/lifecycle/agents/pm.md +9 -10
- package/_gaia/lifecycle/agents/ux-designer.md +1 -0
- package/_gaia/lifecycle/agents/validator.md +2 -1
- package/_gaia/lifecycle/config.yaml +1 -1
- package/_gaia/lifecycle/module-help.csv +1 -1
- package/_gaia/lifecycle/skills/document-rulesets.md +166 -0
- package/_gaia/lifecycle/skills/memory-management-cross-agent.md +218 -0
- package/_gaia/lifecycle/skills/memory-management.md +32 -122
- package/_gaia/lifecycle/templates/story-template.md +1 -0
- package/_gaia/lifecycle/workflows/1-analysis/create-product-brief/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/2-planning/create-prd/instructions.xml +4 -2
- package/_gaia/lifecycle/workflows/2-planning/create-prd/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/2-planning/create-ux-design/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/2-planning/edit-prd/instructions.xml +4 -4
- package/_gaia/lifecycle/workflows/2-planning/edit-prd/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/2-planning/edit-ux-design/checklist.md +18 -0
- package/_gaia/lifecycle/workflows/2-planning/edit-ux-design/instructions.xml +66 -0
- package/_gaia/lifecycle/workflows/2-planning/edit-ux-design/workflow.yaml +27 -0
- package/_gaia/lifecycle/workflows/3-solutioning/create-architecture/instructions.xml +3 -1
- package/_gaia/lifecycle/workflows/3-solutioning/create-architecture/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/3-solutioning/create-epics-stories/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/3-solutioning/edit-architecture/instructions.xml +4 -7
- package/_gaia/lifecycle/workflows/3-solutioning/edit-architecture/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/3-solutioning/security-threat-model/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/4-implementation/add-feature/checklist.md +42 -0
- package/_gaia/lifecycle/workflows/4-implementation/add-feature/instructions.xml +197 -0
- package/_gaia/lifecycle/workflows/{cross-phase → 4-implementation}/add-feature/workflow.yaml +20 -9
- package/_gaia/lifecycle/workflows/4-implementation/add-stories/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/4-implementation/code-review/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/4-implementation/correct-course/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/4-implementation/create-story/checklist.md +1 -1
- package/_gaia/lifecycle/workflows/4-implementation/create-story/instructions.xml +4 -3
- package/_gaia/lifecycle/workflows/4-implementation/dev-story/workflow.yaml +1 -1
- package/_gaia/lifecycle/workflows/4-implementation/retrospective/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/4-implementation/sprint-planning/instructions.xml +3 -0
- package/_gaia/lifecycle/workflows/4-implementation/sprint-planning/workflow.yaml +2 -0
- package/_gaia/lifecycle/workflows/4-implementation/triage-findings/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/4-implementation/val-refresh-ground-truth/checklist.md +15 -0
- package/_gaia/lifecycle/workflows/4-implementation/val-refresh-ground-truth/instructions.xml +153 -57
- package/_gaia/lifecycle/workflows/4-implementation/val-refresh-ground-truth/workflow.yaml +5 -0
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-artifact/instructions.xml +23 -12
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-artifact/workflow.yaml +11 -0
- package/_gaia/lifecycle/workflows/4-implementation/val-validate-plan/instructions.xml +0 -2
- package/_gaia/lifecycle/workflows/5-deployment/deployment-checklist/workflow.yaml +1 -0
- package/_gaia/lifecycle/workflows/anytime/brownfield-onboarding/instructions.xml +69 -1
- package/_gaia/lifecycle/workflows/anytime/memory-hygiene/instructions.xml +8 -18
- package/_gaia/testing/config.yaml +1 -1
- package/_gaia/testing/workflows/edit-test-plan/workflow.yaml +1 -0
- package/_gaia/testing/workflows/test-design/workflow.yaml +2 -0
- package/_gaia/testing/workflows/traceability/workflow.yaml +1 -0
- package/bin/gaia-framework.js +17 -3
- package/bin/generate-checksums.js +124 -0
- package/gaia-install.sh +46 -8
- package/package.json +6 -2
- package/_gaia/lifecycle/workflows/cross-phase/add-feature/checklist.md +0 -30
- package/_gaia/lifecycle/workflows/cross-phase/add-feature/instructions.xml +0 -85
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
inherits: "{project-root}/_gaia/_config/global.yaml"
|
|
3
3
|
|
|
4
4
|
module_name: "lifecycle"
|
|
5
|
-
module_version: "1.37.
|
|
5
|
+
module_version: "1.37.2"
|
|
6
6
|
|
|
7
7
|
planning_artifacts: "{project-root}/docs/planning-artifacts"
|
|
8
8
|
implementation_artifacts: "{project-root}/docs/implementation-artifacts"
|
|
@@ -6,7 +6,7 @@ name,code,command,description,agent
|
|
|
6
6
|
"advanced-elicitation","advanced-elicitation","gaia-advanced-elicitation","Deep requirements elicitation","orchestrator"
|
|
7
7
|
"create-product-brief","product-brief","gaia-product-brief","Create a product brief","analyst"
|
|
8
8
|
"create-prd","create-prd","gaia-create-prd","Create a PRD","pm"
|
|
9
|
-
"validate-prd","validate-prd","gaia-validate-prd","
|
|
9
|
+
"validate-prd","validate-prd","gaia-validate-prd","DEPRECATED — Use /gaia-val-validate instead","pm"
|
|
10
10
|
"edit-prd","edit-prd","gaia-edit-prd","Edit an existing PRD","pm"
|
|
11
11
|
"create-ux-design","create-ux","gaia-create-ux","Create UX design specifications","ux-designer"
|
|
12
12
|
"create-architecture","create-arch","gaia-create-arch","Design system architecture","architect"
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: document-rulesets
|
|
3
|
+
version: '1.0'
|
|
4
|
+
applicable_agents: [validator]
|
|
5
|
+
description: 'Document-specific validation rulesets for artifact type detection, structural quality checks per artifact type, and two-pass validation logic.'
|
|
6
|
+
sections: [type-detection, prd-rules, arch-rules, ux-rules, test-plan-rules, epics-rules, two-pass-logic]
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!-- SECTION: type-detection -->
|
|
10
|
+
## Artifact Type Detection
|
|
11
|
+
|
|
12
|
+
### Path-to-Ruleset Mapping
|
|
13
|
+
|
|
14
|
+
Detect the artifact type from the file path basename. Match against these patterns:
|
|
15
|
+
|
|
16
|
+
| File Pattern | Ruleset ID | Description |
|
|
17
|
+
|-------------|------------|-------------|
|
|
18
|
+
| `prd.md` | prd-rules | Product Requirements Document |
|
|
19
|
+
| `architecture.md` | arch-rules | Architecture Document |
|
|
20
|
+
| `ux-design.md` | ux-rules | UX Design Specification |
|
|
21
|
+
| `test-plan.md` | test-plan-rules | Test Plan |
|
|
22
|
+
| `epics-and-stories.md` | epics-rules | Epics and Stories |
|
|
23
|
+
|
|
24
|
+
### Detection Algorithm
|
|
25
|
+
|
|
26
|
+
1. Extract the basename from the artifact path (e.g., `docs/planning-artifacts/prd.md` -> `prd.md`)
|
|
27
|
+
2. Match basename against the mapping table above (case-insensitive)
|
|
28
|
+
3. If a match is found, return the corresponding ruleset ID
|
|
29
|
+
4. If no match is found, return `unknown` — skip document-specific rules, run factual claim verification only
|
|
30
|
+
|
|
31
|
+
### Edge Cases and Fallback
|
|
32
|
+
|
|
33
|
+
- **Nested directories**: Only the basename matters — `any/nested/path/prd.md` still matches prd-rules
|
|
34
|
+
- **Custom paths**: Files with non-standard names (e.g., `custom-doc.md`) fall back to unknown/unrecognized type
|
|
35
|
+
- **Case sensitivity**: Match is case-insensitive (`PRD.md` and `prd.md` both match prd-rules)
|
|
36
|
+
- **Fallback**: When no ruleset matches, skip structural pass entirely and proceed to factual claims only
|
|
37
|
+
<!-- END SECTION -->
|
|
38
|
+
|
|
39
|
+
<!-- SECTION: prd-rules -->
|
|
40
|
+
## PRD Validation Rules
|
|
41
|
+
|
|
42
|
+
Structural quality checks for Product Requirements Documents. This ruleset absorbs and supersedes all checks from the standalone validate-prd workflow, enabling its deprecation.
|
|
43
|
+
|
|
44
|
+
### Section Completeness Check
|
|
45
|
+
|
|
46
|
+
Verify all required PRD sections exist: overview, personas, functional requirements, non-functional requirements, user journeys, data model, integrations, constraints, success criteria. Flag missing sections as CRITICAL.
|
|
47
|
+
|
|
48
|
+
### FR/NFR Sequential Numbering
|
|
49
|
+
|
|
50
|
+
Verify functional requirements use sequential numbering (FR-001, FR-002, ...). Verify non-functional requirements use sequential numbering (NFR-001, NFR-002, ...). Flag gaps or duplicates as WARNING.
|
|
51
|
+
|
|
52
|
+
### Acceptance Criteria Quality
|
|
53
|
+
|
|
54
|
+
For each requirement, verify acceptance criteria exist, are specific (not blank or generic), are testable, unambiguous, and measurable. Flag vague criteria (e.g., "fast", "easy to use" without quantification) as WARNING.
|
|
55
|
+
|
|
56
|
+
### Priority Consistency
|
|
57
|
+
|
|
58
|
+
Verify every requirement has a priority assigned (P0/P1/P2/P3 or Must/Should/Could/Won't). Check that priorities do not contradict across related requirements. Flag missing or contradictory priorities as WARNING.
|
|
59
|
+
|
|
60
|
+
### Persona Cross-Reference
|
|
61
|
+
|
|
62
|
+
Verify user personas referenced in requirements match personas defined in the personas section. Flag orphaned persona references (used but not defined) as WARNING.
|
|
63
|
+
|
|
64
|
+
### Quality and Consistency
|
|
65
|
+
|
|
66
|
+
Verify terminology is used consistently across sections. Cross-reference all sections for contradictions. Flag inconsistencies as WARNING.
|
|
67
|
+
<!-- END SECTION -->
|
|
68
|
+
|
|
69
|
+
<!-- SECTION: arch-rules -->
|
|
70
|
+
## Architecture Validation Rules
|
|
71
|
+
|
|
72
|
+
Structural quality checks for Architecture Documents.
|
|
73
|
+
|
|
74
|
+
### Component Coverage
|
|
75
|
+
|
|
76
|
+
Verify all system components mentioned in the system overview are covered in the detailed component descriptions. Check that the C4 diagrams (context, container, component) reference all declared components. Flag undocumented components as WARNING.
|
|
77
|
+
|
|
78
|
+
### ADR Consistency
|
|
79
|
+
|
|
80
|
+
Verify each ADR has: ID, Decision, Rationale, Status. Check ADR IDs are sequential (ADR-001, ADR-002, ...). Verify ADR status values are valid (Proposed, Active, Deprecated, Superseded). Check cross-references between ADRs and component descriptions are bidirectional. Flag inconsistencies as WARNING.
|
|
81
|
+
|
|
82
|
+
### API Completeness
|
|
83
|
+
|
|
84
|
+
Verify each declared API endpoint has: method, path, request/response schema, error codes. Check that APIs referenced in component descriptions exist in the API specification section. Flag incomplete API definitions as WARNING.
|
|
85
|
+
<!-- END SECTION -->
|
|
86
|
+
|
|
87
|
+
<!-- SECTION: ux-rules -->
|
|
88
|
+
## UX Design Validation Rules
|
|
89
|
+
|
|
90
|
+
Structural quality checks for UX Design Specifications.
|
|
91
|
+
|
|
92
|
+
### Required Sections
|
|
93
|
+
|
|
94
|
+
Verify presence of: design principles, user flows, wireframes/mockups, component library, accessibility requirements, responsive breakpoints. Flag missing sections as WARNING.
|
|
95
|
+
|
|
96
|
+
### Flow Completeness
|
|
97
|
+
|
|
98
|
+
Verify each user flow has: entry point, steps, decision points, exit conditions. Check that flows reference defined screens/components. Flag incomplete flows as WARNING.
|
|
99
|
+
|
|
100
|
+
### Accessibility
|
|
101
|
+
|
|
102
|
+
Verify WCAG compliance requirements are stated. Check color contrast ratios are specified. Verify keyboard navigation patterns are defined. Flag missing accessibility considerations as WARNING.
|
|
103
|
+
<!-- END SECTION -->
|
|
104
|
+
|
|
105
|
+
<!-- SECTION: test-plan-rules -->
|
|
106
|
+
## Test Plan Validation Rules
|
|
107
|
+
|
|
108
|
+
Structural quality checks for Test Plans.
|
|
109
|
+
|
|
110
|
+
### Required Sections
|
|
111
|
+
|
|
112
|
+
Verify presence of: test strategy, test scope, test types (unit, integration, e2e), entry/exit criteria, test environment, risk assessment. Flag missing sections as WARNING.
|
|
113
|
+
|
|
114
|
+
### Coverage Mapping
|
|
115
|
+
|
|
116
|
+
Verify each functional requirement has at least one mapped test case. Check that test case IDs are unique and sequential. Verify traceability links between requirements and test cases. Flag unmapped requirements as WARNING.
|
|
117
|
+
|
|
118
|
+
### Environment Specification
|
|
119
|
+
|
|
120
|
+
Verify test environments are fully specified (OS, browser, device matrix). Check that CI/CD integration is described. Flag underspecified environments as WARNING.
|
|
121
|
+
<!-- END SECTION -->
|
|
122
|
+
|
|
123
|
+
<!-- SECTION: epics-rules -->
|
|
124
|
+
## Epics and Stories Validation Rules
|
|
125
|
+
|
|
126
|
+
Structural quality checks for Epics and Stories documents.
|
|
127
|
+
|
|
128
|
+
### Epic Structure
|
|
129
|
+
|
|
130
|
+
Verify each epic has: ID, title, description, acceptance criteria, priority, stories list. Check epic IDs are sequential (E1, E2, ...). Flag incomplete epics as WARNING.
|
|
131
|
+
|
|
132
|
+
### Story Structure
|
|
133
|
+
|
|
134
|
+
Verify each story has: key, title, user story (As a/I want/So that), acceptance criteria, tasks, size estimate. Check story keys follow convention ({epic}-S{n}). Flag incomplete stories as WARNING.
|
|
135
|
+
|
|
136
|
+
### Dependency Consistency
|
|
137
|
+
|
|
138
|
+
Verify all `depends_on` and `blocks` references point to existing stories. Check for circular dependencies. Verify priority ordering respects dependency chains. Flag broken references as WARNING.
|
|
139
|
+
<!-- END SECTION -->
|
|
140
|
+
|
|
141
|
+
<!-- SECTION: two-pass-logic -->
|
|
142
|
+
## Two-Pass Validation Logic
|
|
143
|
+
|
|
144
|
+
### Pass Ordering
|
|
145
|
+
|
|
146
|
+
Document-specific validation uses a two-pass approach:
|
|
147
|
+
|
|
148
|
+
1. **Pass 1 — Structural Rules**: Run the document-specific ruleset matched by type detection. This checks internal document quality: section completeness, numbering, cross-references within the document itself. Produces structural findings.
|
|
149
|
+
|
|
150
|
+
2. **Pass 2 — Factual Claims**: Run the standard factual claim extraction and filesystem verification (from validation-patterns skill). This checks external accuracy: file paths exist, counts match reality, references resolve. Produces factual findings.
|
|
151
|
+
|
|
152
|
+
### Merge Strategy
|
|
153
|
+
|
|
154
|
+
After both passes complete, merge findings into a single report:
|
|
155
|
+
- Structural findings are tagged with source `[STRUCTURAL]`
|
|
156
|
+
- Factual findings are tagged with source `[FACTUAL]`
|
|
157
|
+
- Both use the same severity classification (CRITICAL/WARNING/INFO)
|
|
158
|
+
- Findings are grouped by severity, then by source (structural first within each group)
|
|
159
|
+
|
|
160
|
+
### Unknown Type Handling
|
|
161
|
+
|
|
162
|
+
When the artifact type is unknown (no matching ruleset):
|
|
163
|
+
- Skip Pass 1 entirely — no structural rules to apply
|
|
164
|
+
- Run Pass 2 only — factual claim verification
|
|
165
|
+
- Report notes: "No document-specific ruleset for this artifact type — factual verification only"
|
|
166
|
+
<!-- END SECTION -->
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-management-cross-agent
|
|
3
|
+
version: '1.0'
|
|
4
|
+
applicable_agents: [all]
|
|
5
|
+
description: 'Cross-agent memory extensions: cross-reference loading (ADR-015) and budget monitoring (ADR-014). Split from memory-management.md per 300-line skill limit.'
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!-- SECTION: cross-reference-loading -->
|
|
9
|
+
## Cross-Reference Loading (ADR-015)
|
|
10
|
+
|
|
11
|
+
Load another agent's sidecar files as read-only cross-references. All cross-ref loading is JIT (just-in-time) — never preloaded at session start.
|
|
12
|
+
|
|
13
|
+
### Schema: `<memory-reads>` Tag
|
|
14
|
+
|
|
15
|
+
Agent persona files declare cross-references using this XML schema inside the `<agent>` block:
|
|
16
|
+
|
|
17
|
+
```xml
|
|
18
|
+
<memory-reads>
|
|
19
|
+
<cross-ref agent="{agent-id}" file="{file-name}" mode="{recent|full|summary}" required="{true|false}" />
|
|
20
|
+
</memory-reads>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Attributes:**
|
|
24
|
+
- `agent` (required) — the agent ID whose sidecar to read (e.g., "architect", "validator")
|
|
25
|
+
- `file` (required) — the sidecar file to read (e.g., "decision-log", "ground-truth", "conversation-context")
|
|
26
|
+
- `mode` (required) — loading mode: `recent`, `full`, or `summary`
|
|
27
|
+
- `required` (optional, default: "true") — if "false", skip gracefully when the sidecar is absent
|
|
28
|
+
|
|
29
|
+
### Read-Only Access: `load_cross_ref()`
|
|
30
|
+
|
|
31
|
+
Cross-references are loaded through `load_cross_ref()`, which is a **read-only** path — separate from `load_own()` (the agent's own sidecar, which supports read/write).
|
|
32
|
+
|
|
33
|
+
**Parameters:**
|
|
34
|
+
- `sidecar_path` — absolute path to the **target** agent's sidecar directory (e.g., `_memory/architect-sidecar/`)
|
|
35
|
+
- `file_name` — which file to read (e.g., "decision-log.md", "ground-truth.md")
|
|
36
|
+
- `mode` — loading mode: `recent`, `full`, or `summary`
|
|
37
|
+
- `budget_remaining` — remaining token budget for cross-references
|
|
38
|
+
|
|
39
|
+
**Write-Guard:**
|
|
40
|
+
Any attempt to write to a sidecar that is not the current agent's own sidecar MUST raise a **hard error** (not a warning). The write-guard blocks all write operations through `load_cross_ref()`. Only `load_own()` permits writes, and only to the agent's own sidecar directory.
|
|
41
|
+
|
|
42
|
+
**Procedure:**
|
|
43
|
+
1. Validate the target sidecar path is NOT the current agent's own sidecar (self-reference guard)
|
|
44
|
+
2. Check budget_remaining BEFORE loading — if insufficient, apply progressive downgrade
|
|
45
|
+
3. Read the target file from disk (read-only — no file creation, no modification)
|
|
46
|
+
4. Apply mode filtering (see Loading Modes below)
|
|
47
|
+
5. Calculate token estimate: character count / 4 (using `token_approximation` from `_memory/config.yaml`)
|
|
48
|
+
6. Return filtered content as read-only data with token estimate for caller budget deduction
|
|
49
|
+
|
|
50
|
+
### Loading Modes
|
|
51
|
+
|
|
52
|
+
**`recent` mode** — Load entries from the last 2 sprints only:
|
|
53
|
+
- Parse decision-log entries using ADR-016 format
|
|
54
|
+
- Filter by Sprint field: keep entries where sprint matches current sprint or previous sprint
|
|
55
|
+
- If sprint metadata is absent from entries, fall back to date-based filtering (last 30 days)
|
|
56
|
+
- Approximate token cost: character count / 4
|
|
57
|
+
|
|
58
|
+
**`full` mode** — Load the entire file content:
|
|
59
|
+
- Read full file, respect budget cap
|
|
60
|
+
- If file exceeds budget_remaining: truncate oldest entries first (keep most recent)
|
|
61
|
+
- Approximate token cost: character count / 4
|
|
62
|
+
|
|
63
|
+
**`summary` mode** — Load section headers only:
|
|
64
|
+
- Parse the file for markdown headers (lines starting with `#`, `##`, `###`)
|
|
65
|
+
- Stop at section boundaries — do not load body content
|
|
66
|
+
- Minimal token cost
|
|
67
|
+
|
|
68
|
+
### JIT Loading
|
|
69
|
+
|
|
70
|
+
Cross-references are loaded **just-in-time** during workflow step execution — NOT at agent activation or session start. Loading is triggered only when a workflow step explicitly requires cross-agent context.
|
|
71
|
+
|
|
72
|
+
**Trigger:** The workflow engine checks `<memory-reads>` declarations and loads cross-references only when the current step's execution context requires cross-agent data. No cross-references are preloaded eagerly.
|
|
73
|
+
|
|
74
|
+
### Budget Enforcement
|
|
75
|
+
|
|
76
|
+
**Pre-load budget check:** Before each cross-reference load, calculate:
|
|
77
|
+
- Tokens already consumed by own sidecar
|
|
78
|
+
- Tokens already consumed by previously loaded cross-references
|
|
79
|
+
- Estimated tokens for the next cross-reference (based on mode and file size)
|
|
80
|
+
|
|
81
|
+
**Per-agent `cross_ref_budget_cap`:** Some agents have a `cross_ref_budget_cap` in `_memory/config.yaml` (e.g., validator: 0.5). This caps cross-reference token consumption at that fraction of the agent's session budget. If loading would exceed the cap, halt loading and downgrade remaining cross-refs progressively.
|
|
82
|
+
|
|
83
|
+
**Progressive downgrade chain:** When budget is insufficient for the requested mode:
|
|
84
|
+
1. `full` → downgrade to `recent`
|
|
85
|
+
2. `recent` → downgrade to `summary`
|
|
86
|
+
3. `summary` → downgrade to `skip` (do not load, log warning)
|
|
87
|
+
|
|
88
|
+
Log every downgrade as a warning in the session checkpoint:
|
|
89
|
+
`"Cross-ref downgraded: {agent}/{file} from {original_mode} to {new_mode} — budget {used}/{total}"`
|
|
90
|
+
|
|
91
|
+
**Val's 50% cross-ref budget cap:**
|
|
92
|
+
Val (validator) has a `cross_ref_budget_cap` of 0.5 in `_memory/config.yaml`, meaning cross-references may consume at most 50% of Val's 300K session budget (= 150K tokens max for cross-refs). Val's load priority order: architect, pm, sm. If the 150K cap is hit mid-load, remaining cross-references are downgraded progressively.
|
|
93
|
+
|
|
94
|
+
**Tier budget ceilings:**
|
|
95
|
+
- Tier 1 agents: 300K session budget (own sidecar + cross-refs combined)
|
|
96
|
+
- Tier 2 agents: 100K session budget (own sidecar + cross-refs combined)
|
|
97
|
+
- Tier 3 agents: no explicit budget enforcement
|
|
98
|
+
|
|
99
|
+
### Graceful Error Handling
|
|
100
|
+
|
|
101
|
+
**Missing sidecar directory or file:**
|
|
102
|
+
- If the target sidecar directory does not exist: log a warning ("Cross-ref skipped: {agent} sidecar directory not found"), skip this cross-reference, and continue workflow execution without error
|
|
103
|
+
- If the target file within the sidecar does not exist: log a warning ("Cross-ref skipped: {agent}/{file} not found"), skip, continue
|
|
104
|
+
|
|
105
|
+
**Empty sidecar directory:**
|
|
106
|
+
- If the target sidecar directory exists but contains no files: return empty result gracefully with no error — matching the contract of the `session-load` section
|
|
107
|
+
|
|
108
|
+
**Malformed or corrupt sidecar files:**
|
|
109
|
+
- If the target file exists but cannot be parsed (malformed markdown, corrupt content, unparseable entries): log a warning ("Cross-ref skipped: {agent}/{file} is malformed"), skip this cross-reference, and continue
|
|
110
|
+
- Never halt the workflow due to a cross-reference loading failure
|
|
111
|
+
|
|
112
|
+
**Absent optional cross-references:**
|
|
113
|
+
- If `<cross-ref required="false">` and the target is absent: skip silently (no warning)
|
|
114
|
+
- If `<cross-ref required="true">` (default) and the target is absent: log warning but still continue
|
|
115
|
+
|
|
116
|
+
**Agent not in cross-reference matrix:**
|
|
117
|
+
- If the calling agent has no entry in `_memory/config.yaml` `cross_references`, return empty result with no error
|
|
118
|
+
|
|
119
|
+
### Consistency Validation
|
|
120
|
+
|
|
121
|
+
At session start, validate that agent persona `<memory-reads>` declarations are consistent with `_memory/config.yaml` cross_references matrix:
|
|
122
|
+
|
|
123
|
+
1. Parse the agent's `<memory-reads>` block from the persona file
|
|
124
|
+
2. Load the agent's entry from `_memory/config.yaml` → `cross_references.{agent_id}.reads_from`
|
|
125
|
+
3. Compare: every entry in config.yaml should have a matching `<cross-ref>` in the persona file
|
|
126
|
+
4. If mismatch found: produce a **warning** (not an error) — `_memory/config.yaml` is the authoritative source
|
|
127
|
+
|
|
128
|
+
**Self-reference guard:**
|
|
129
|
+
If an agent's `<memory-reads>` declares a `<cross-ref>` where the `agent` attribute matches the current agent's own ID, reject it with a validation error at session start. An agent must not reference its own sidecar as a cross-reference — own-sidecar access is through `load_own()`.
|
|
130
|
+
|
|
131
|
+
### Checkpoint Provenance
|
|
132
|
+
|
|
133
|
+
After loading cross-references, record in the session checkpoint:
|
|
134
|
+
- Which cross-references were loaded (agent, file, mode)
|
|
135
|
+
- File checksums (`shasum -a 256`) of each loaded cross-reference file
|
|
136
|
+
- Any downgrades or skips that occurred
|
|
137
|
+
- Total tokens consumed by cross-references
|
|
138
|
+
|
|
139
|
+
This enables `/gaia-resume` to detect stale cross-references when resuming a session.
|
|
140
|
+
<!-- END SECTION -->
|
|
141
|
+
|
|
142
|
+
<!-- SECTION: budget-monitoring -->
|
|
143
|
+
## Budget Monitoring (ADR-014)
|
|
144
|
+
|
|
145
|
+
Shared utility for checking token budget usage against tier-defined thresholds. Used by `session-save` and other memory operations to determine when archival is needed.
|
|
146
|
+
|
|
147
|
+
### Parameters
|
|
148
|
+
|
|
149
|
+
- `sidecar_path` — absolute path to the agent's sidecar directory
|
|
150
|
+
- `tier_budget` — session token budget for this agent's tier (from `_memory/config.yaml`). If null or absent, the agent is untiered.
|
|
151
|
+
- `current_usage` — current token count (own sidecar files + cross-refs loaded in this session)
|
|
152
|
+
- `projected_addition` — token count of content about to be written/loaded
|
|
153
|
+
|
|
154
|
+
### Threshold Definitions (config-driven)
|
|
155
|
+
|
|
156
|
+
All thresholds are read from `_memory/config.yaml` `archival` block at runtime. Never hardcode these values.
|
|
157
|
+
|
|
158
|
+
- `budget_warn_at` — fraction of budget at which a warning is returned (e.g., 0.8 = 80%)
|
|
159
|
+
- `budget_alert_at` — fraction of budget at which an alert is returned (e.g., 0.9 = 90%)
|
|
160
|
+
- `budget_archive_at` — fraction of budget at which archival is triggered (e.g., 1.0 = 100%)
|
|
161
|
+
- `token_approximation` — characters per token for size estimation (e.g., 4)
|
|
162
|
+
- `archive_subdir` — subdirectory name within sidecar for archived entries (e.g., "archive")
|
|
163
|
+
|
|
164
|
+
### Procedure
|
|
165
|
+
|
|
166
|
+
1. Read `_memory/config.yaml` archival block to get threshold values
|
|
167
|
+
2. Calculate `projected_total = current_usage + projected_addition`
|
|
168
|
+
3. Calculate `usage_ratio = projected_total / tier_budget`
|
|
169
|
+
4. Return threshold status:
|
|
170
|
+
- `usage_ratio < budget_warn_at` → status: `ok` (no action needed)
|
|
171
|
+
- `usage_ratio >= budget_warn_at AND < budget_alert_at` → status: `warn` ("approaching budget limit")
|
|
172
|
+
- `usage_ratio >= budget_alert_at AND < budget_archive_at` → status: `alert` ("near budget limit")
|
|
173
|
+
- `usage_ratio >= budget_archive_at` → status: `archive_needed` ("budget exceeded, archival required")
|
|
174
|
+
|
|
175
|
+
### Archival Protocol
|
|
176
|
+
|
|
177
|
+
When status is `archive_needed`:
|
|
178
|
+
1. Identify the oldest N entries in `decision-log.md` that would free sufficient tokens
|
|
179
|
+
2. Move those entries to `{sidecar_path}/{archive_subdir}/` (e.g., `_memory/architect-sidecar/archive/`)
|
|
180
|
+
3. Create the archive subdirectory if it does not exist (`mkdir -p`)
|
|
181
|
+
4. Use atomic read-modify-write pattern: read full file, remove archived entries, write full file back
|
|
182
|
+
5. Re-check budget after archival — if still over budget, archive more entries (up to 3 iterations)
|
|
183
|
+
6. Archive subdirectory is gitignored — archived entries are historical, not version-controlled
|
|
184
|
+
|
|
185
|
+
### Token Estimation
|
|
186
|
+
|
|
187
|
+
Token count is approximated using the `token_approximation` value from `_memory/config.yaml` (default: 4 chars per token). No tokenizer library is used — this aligns with ADR-005 (zero runtime dependencies).
|
|
188
|
+
|
|
189
|
+
Formula: `tokens = character_count / token_approximation`
|
|
190
|
+
|
|
191
|
+
### Running Session Total
|
|
192
|
+
|
|
193
|
+
Track cumulative token usage across the session:
|
|
194
|
+
- Own sidecar files loaded via `session-load`
|
|
195
|
+
- Cross-references loaded via `cross-reference-loading`
|
|
196
|
+
- New entries being written via `session-save`
|
|
197
|
+
|
|
198
|
+
The combined total is checked against the tier budget ceiling.
|
|
199
|
+
|
|
200
|
+
### Untiered Agent Handling
|
|
201
|
+
|
|
202
|
+
If `tier_budget` is null, absent, or the agent has no tier assignment in `_memory/config.yaml` (applies to 9 untiered agents: analyst, data-engineer, performance, ux-designer, brainstorming-coach, design-thinking-coach, innovation-strategist, presentation-designer, problem-solver):
|
|
203
|
+
- Skip all budget enforcement — no threshold checks, no archival trigger
|
|
204
|
+
- Return status: `no_budget` with no error
|
|
205
|
+
- This is a no-op: the caller proceeds without any budget constraint
|
|
206
|
+
- Never raise an error for untiered agents
|
|
207
|
+
|
|
208
|
+
### Return Value
|
|
209
|
+
|
|
210
|
+
```yaml
|
|
211
|
+
status: ok | warn | alert | archive_needed | no_budget
|
|
212
|
+
usage_ratio: 0.75 # current usage as fraction of budget (null if no_budget)
|
|
213
|
+
tokens_used: 225000 # current token count (null if no_budget)
|
|
214
|
+
tokens_budget: 300000 # tier budget ceiling (null if no_budget)
|
|
215
|
+
tokens_projected: 230000 # projected total after addition (null if no_budget)
|
|
216
|
+
message: "Budget at 75% — no action needed"
|
|
217
|
+
```
|
|
218
|
+
<!-- END SECTION -->
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory-management
|
|
3
|
-
version: '1.
|
|
3
|
+
version: '1.1'
|
|
4
4
|
applicable_agents: [all]
|
|
5
|
-
description: '
|
|
5
|
+
description: 'Core memory operations: session load/save, decision formatting, stale detection, deduplication, context summarization, budget monitoring. Cross-agent sections in memory-management-cross-agent.md.'
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
<!-- SECTION: decision-formatting -->
|
|
@@ -96,13 +96,13 @@ Persist agent session data to sidecar files. Agent-agnostic — takes sidecar pa
|
|
|
96
96
|
- Read entire file, replace in memory, write entire file back
|
|
97
97
|
|
|
98
98
|
**Token budget enforcement (before write):**
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
99
|
+
- Before writing, invoke the `budget-monitoring` section (from `memory-management-cross-agent.md`) to check projected usage against tier budget
|
|
100
|
+
- Pass: sidecar_path, tier_budget, projected_size (current size + new entries size)
|
|
101
|
+
- `budget-monitoring` returns the threshold status: ok, warn, alert, or archive_needed
|
|
102
|
+
- If `archive_needed`: move oldest N entries to `{sidecar_path}/{archive_subdir}/` subdirectory to make room, then re-check
|
|
103
|
+
- If user declines archival: force save anyway, exceeding the budget
|
|
104
104
|
- Never silently truncate or block a save operation
|
|
105
|
-
-
|
|
105
|
+
- See `budget-monitoring` section in `memory-management-cross-agent.md` for threshold definitions and config source
|
|
106
106
|
<!-- END SECTION -->
|
|
107
107
|
|
|
108
108
|
<!-- SECTION: context-summarization -->
|
|
@@ -195,128 +195,38 @@ Detect and merge duplicate decision entries within a decision log.
|
|
|
195
195
|
**Output:** List of duplicate pairs with recommended action (auto-archive or review).
|
|
196
196
|
<!-- END SECTION -->
|
|
197
197
|
|
|
198
|
-
<!--
|
|
199
|
-
## Cross-Reference Loading (ADR-015)
|
|
198
|
+
<!-- Cross-agent extensions (cross-reference-loading) are in memory-management-cross-agent.md -->
|
|
200
199
|
|
|
201
|
-
|
|
200
|
+
<!-- SECTION: budget-monitoring -->
|
|
201
|
+
## Budget Monitoring
|
|
202
202
|
|
|
203
|
-
|
|
203
|
+
Calculate and report token budget usage per agent sidecar. Reusable by any workflow that needs budget status. All thresholds are config-driven — read from `_memory/config.yaml` archival block at runtime.
|
|
204
204
|
|
|
205
|
-
|
|
205
|
+
**Input:**
|
|
206
|
+
- Agent sidecar file sizes (bytes) from filesystem scan
|
|
207
|
+
- Tier budgets from `_memory/config.yaml`: `tiers.tier_1.session_budget` (300K), `tiers.tier_2.session_budget` (100K)
|
|
208
|
+
- Per-agent ground truth budgets: `agents.{agent-id}.ground_truth_budget` (Tier 1 only)
|
|
206
209
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
<!-- Additional cross-ref entries -->
|
|
211
|
-
</memory-reads>
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
**Attributes:**
|
|
215
|
-
- `agent` (required) — the agent ID whose sidecar to read (e.g., "architect", "validator")
|
|
216
|
-
- `file` (required) — the sidecar file to read (e.g., "decision-log", "ground-truth", "conversation-context")
|
|
217
|
-
- `mode` (required) — loading mode: `recent`, `full`, or `summary`
|
|
218
|
-
- `required` (optional, default: "true") — if "false", skip gracefully when the sidecar is absent
|
|
219
|
-
|
|
220
|
-
### Read-Only Access: `load_cross_ref()`
|
|
221
|
-
|
|
222
|
-
Cross-references are loaded through `load_cross_ref()`, which is a **read-only** path — separate from `load_own()` (the agent's own sidecar, which supports read/write).
|
|
223
|
-
|
|
224
|
-
**Parameters:**
|
|
225
|
-
- `sidecar_path` — absolute path to the **target** agent's sidecar directory (e.g., `_memory/architect-sidecar/`)
|
|
226
|
-
- `file_name` — which file to read (e.g., "decision-log.md", "ground-truth.md")
|
|
227
|
-
- `mode` — loading mode: `recent`, `full`, or `summary`
|
|
228
|
-
- `budget_remaining` — remaining token budget for cross-references
|
|
229
|
-
|
|
230
|
-
**Write-Guard:**
|
|
231
|
-
Any attempt to write to a sidecar that is not the current agent's own sidecar MUST raise a **hard error** (not a warning). The write-guard blocks all write operations through `load_cross_ref()`. Only `load_own()` permits writes, and only to the agent's own sidecar directory.
|
|
232
|
-
|
|
233
|
-
**Procedure:**
|
|
234
|
-
1. Validate the target sidecar path is NOT the current agent's own sidecar (self-reference guard — see Validation section below)
|
|
235
|
-
2. Check budget_remaining BEFORE loading — if insufficient, apply progressive downgrade
|
|
236
|
-
3. Read the target file from disk (read-only — no file creation, no modification)
|
|
237
|
-
4. Apply mode filtering (see Loading Modes below)
|
|
238
|
-
5. Return filtered content as read-only data
|
|
239
|
-
|
|
240
|
-
### Loading Modes
|
|
241
|
-
|
|
242
|
-
**`recent` mode** — Load entries from the last 2 sprints only:
|
|
243
|
-
- Parse decision-log entries using ADR-016 format
|
|
244
|
-
- Filter by Sprint field: keep entries where sprint matches current sprint or previous sprint
|
|
245
|
-
- If sprint metadata is absent from entries, fall back to date-based filtering (last 30 days)
|
|
246
|
-
- Approximate token cost: character count / 4
|
|
247
|
-
|
|
248
|
-
**`full` mode** — Load the entire file content:
|
|
249
|
-
- Read full file, respect budget cap
|
|
250
|
-
- If file exceeds budget_remaining: truncate oldest entries first (keep most recent)
|
|
251
|
-
- Approximate token cost: character count / 4
|
|
252
|
-
|
|
253
|
-
**`summary` mode** — Load section headers only:
|
|
254
|
-
- Parse the file for markdown headers (lines starting with `#`, `##`, `###`)
|
|
255
|
-
- Stop at section boundaries — do not load body content
|
|
256
|
-
- Minimal token cost
|
|
257
|
-
|
|
258
|
-
### JIT Loading
|
|
259
|
-
|
|
260
|
-
Cross-references are loaded **just-in-time** during workflow step execution — NOT at agent activation or session start. Loading is triggered only when a workflow step explicitly requires cross-agent context.
|
|
261
|
-
|
|
262
|
-
**Trigger:** The workflow engine checks `<memory-reads>` declarations and loads cross-references only when the current step's execution context requires cross-agent data. No cross-references are preloaded eagerly.
|
|
263
|
-
|
|
264
|
-
### Budget Enforcement
|
|
265
|
-
|
|
266
|
-
**Pre-load budget check:** Before each cross-reference load, calculate:
|
|
267
|
-
- Tokens already consumed by own sidecar
|
|
268
|
-
- Tokens already consumed by previously loaded cross-references
|
|
269
|
-
- Estimated tokens for the next cross-reference (based on mode and file size)
|
|
270
|
-
|
|
271
|
-
**Progressive downgrade chain:** When budget is insufficient for the requested mode:
|
|
272
|
-
1. `full` → downgrade to `recent`
|
|
273
|
-
2. `recent` → downgrade to `summary`
|
|
274
|
-
3. `summary` → downgrade to `skip` (do not load, log warning)
|
|
275
|
-
|
|
276
|
-
Log every downgrade as a warning in the session checkpoint:
|
|
277
|
-
`"Cross-ref downgraded: {agent}/{file} from {original_mode} to {new_mode} — budget {used}/{total}"`
|
|
278
|
-
|
|
279
|
-
**Val's 50% cross-ref budget cap:**
|
|
280
|
-
Val (validator) has a `cross_ref_budget_cap` of 0.5 in `_memory/config.yaml`, meaning cross-references may consume at most 50% of Val's 300K session budget (= 150K tokens max for cross-refs). Val's load priority order: architect → pm → sm. If the 150K cap is hit mid-load, remaining cross-references are downgraded progressively.
|
|
281
|
-
|
|
282
|
-
**Tier budget ceilings:**
|
|
283
|
-
- Tier 1 agents: 300K session budget (own sidecar + cross-refs combined)
|
|
284
|
-
- Tier 2 agents: 100K session budget (own sidecar + cross-refs combined)
|
|
285
|
-
- Tier 3 agents: no explicit budget enforcement
|
|
286
|
-
|
|
287
|
-
### Graceful Error Handling
|
|
288
|
-
|
|
289
|
-
**Missing sidecar directory or file:**
|
|
290
|
-
- If the target sidecar directory does not exist: log a warning ("Cross-ref skipped: {agent} sidecar directory not found"), skip this cross-reference, and continue workflow execution
|
|
291
|
-
- If the target file within the sidecar does not exist: log a warning ("Cross-ref skipped: {agent}/{file} not found"), skip, continue
|
|
292
|
-
|
|
293
|
-
**Malformed or corrupt sidecar files:**
|
|
294
|
-
- If the target file exists but cannot be parsed (malformed markdown, corrupt content, unparseable entries): log a warning ("Cross-ref skipped: {agent}/{file} is malformed"), skip this cross-reference, and continue
|
|
295
|
-
- Never halt the workflow due to a cross-reference loading failure
|
|
296
|
-
|
|
297
|
-
**Absent optional cross-references:**
|
|
298
|
-
- If `<cross-ref required="false">` and the target is absent: skip silently (no warning)
|
|
299
|
-
- If `<cross-ref required="true">` (default) and the target is absent: log warning but still continue
|
|
300
|
-
|
|
301
|
-
### Consistency Validation
|
|
210
|
+
**Token calculation:**
|
|
211
|
+
- Approximate tokens = file size in bytes / 4 (chars-per-token convention)
|
|
212
|
+
- Sum across all sidecar files per agent (decision-log.md + conversation-context.md + ground-truth.md)
|
|
302
213
|
|
|
303
|
-
|
|
214
|
+
**Threshold classification (config-driven from `_memory/config.yaml`):**
|
|
215
|
+
- `budget_warn_at` — **warning:** at or above this fraction of budget (default: 0.8 = 80%)
|
|
216
|
+
- `budget_alert_at` — **critical:** at or above this fraction (default: 0.9 = 90%)
|
|
217
|
+
- `budget_archive_at` — **over-budget:** at or above this fraction (default: 1.0 = 100%) — triggers archival
|
|
304
218
|
|
|
305
|
-
|
|
306
|
-
2. Load the agent's entry from `_memory/config.yaml` → `cross_references.{agent_id}.reads_from`
|
|
307
|
-
3. Compare: every entry in config.yaml should have a matching `<cross-ref>` in the persona file
|
|
308
|
-
4. If mismatch found: produce a **warning** (not an error) — `_memory/config.yaml` is the authoritative source. The persona file declaration should mirror it.
|
|
219
|
+
When usage reaches `budget_archive_at`, archival is triggered: oldest entries are moved to `{sidecar_path}/archive/` to free budget.
|
|
309
220
|
|
|
310
|
-
**
|
|
311
|
-
|
|
221
|
+
**Tier handling:**
|
|
222
|
+
- Tier 1: report session budget usage and ground truth budget usage separately
|
|
223
|
+
- Tier 2: report session budget usage only (no ground truth file)
|
|
224
|
+
- Tier 3 / untiered: skip all budget enforcement — no threshold checks, no archival trigger. Return no-op status with no error. Untiered agents proceed without any budget constraint.
|
|
312
225
|
|
|
313
|
-
|
|
226
|
+
**Output format (Token Budget Table):**
|
|
314
227
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
- File checksums (`shasum -a 256`) of each loaded cross-reference file
|
|
318
|
-
- Any downgrades or skips that occurred
|
|
319
|
-
- Total tokens consumed by cross-references
|
|
228
|
+
| Agent | Tier | Files Scanned | Token Usage | Session Budget | GT Budget | % Used | Status |
|
|
229
|
+
|-------|------|---------------|-------------|----------------|-----------|--------|--------|
|
|
320
230
|
|
|
321
|
-
|
|
231
|
+
For Tier 3 and untiered agents, budget columns show "no budget enforced" with actual token count.
|
|
322
232
|
<!-- END SECTION -->
|
|
@@ -7,6 +7,7 @@ config_source: "{project-root}/_gaia/lifecycle/config.yaml"
|
|
|
7
7
|
installed_path: "{project-root}/_gaia/lifecycle/workflows/1-analysis/create-product-brief"
|
|
8
8
|
instructions: "{installed_path}/instructions.xml"
|
|
9
9
|
validation: "{installed_path}/checklist.md"
|
|
10
|
+
template: "{project-root}/_gaia/lifecycle/templates/product-brief-template.md"
|
|
10
11
|
input_file_patterns:
|
|
11
12
|
brainstorm:
|
|
12
13
|
whole: "{planning_artifacts}/project-brainstorm.md"
|
|
@@ -63,7 +63,9 @@
|
|
|
63
63
|
</template-output>
|
|
64
64
|
</step>
|
|
65
65
|
<step n="12" title="Adversarial Review">
|
|
66
|
-
<action>
|
|
66
|
+
<action>Read {project-root}/_gaia/_config/adversarial-triggers.yaml to evaluate trigger rules. Determine the current change_type: if this workflow was invoked with a change_type context (e.g., from add-feature triage), use that value. If no context is available (standalone PRD creation), default to "feature".</action>
|
|
67
|
+
<action>Look up the trigger rule for change_type + artifact "prd". If adversarial is false for this combination: skip the adversarial review — log "Adversarial review skipped: change_type={change_type} does not trigger for PRD per adversarial-triggers.yaml" and proceed to next step. Add a "## Review Findings Incorporated" section with "Adversarial review not triggered — change type: {change_type}".</action>
|
|
68
|
+
<action>If adversarial is true: Spawn a subagent using the Agent tool: "Load {project-root}/_gaia/core/tasks/review-adversarial.xml. Read its entire contents. Target: {planning_artifacts}/prd.md. Target label: prd. Follow the task instructions EXACTLY." This is required — findings will be incorporated back into the PRD.</action>
|
|
67
69
|
<action>When subagent returns: verify adversarial-review-prd-{date}.md exists in {planning_artifacts}/</action>
|
|
68
70
|
</step>
|
|
69
71
|
<step n="13" title="Incorporate Adversarial Findings">
|
|
@@ -75,6 +77,6 @@
|
|
|
75
77
|
</template-output>
|
|
76
78
|
</step>
|
|
77
79
|
<next-step source="lifecycle-sequence.yaml">
|
|
78
|
-
<primary command="/gaia-
|
|
80
|
+
<primary command="/gaia-create-ux">Create UX design specifications for the validated PRD</primary>
|
|
79
81
|
</next-step>
|
|
80
82
|
</workflow>
|
|
@@ -2,6 +2,7 @@ name: create-prd
|
|
|
2
2
|
description: 'Create a Product Requirements Document from scratch'
|
|
3
3
|
module: lifecycle
|
|
4
4
|
agent: pm
|
|
5
|
+
val_validate_output: true
|
|
5
6
|
config_resolved: "{installed_path}/.resolved/create-prd.yaml"
|
|
6
7
|
config_source: "{project-root}/_gaia/lifecycle/config.yaml"
|
|
7
8
|
installed_path: "{project-root}/_gaia/lifecycle/workflows/2-planning/create-prd"
|
|
@@ -2,6 +2,7 @@ name: create-ux-design
|
|
|
2
2
|
description: 'Plan UX patterns and design specifications'
|
|
3
3
|
module: lifecycle
|
|
4
4
|
agent: ux-designer
|
|
5
|
+
val_validate_output: true
|
|
5
6
|
config_resolved: "{installed_path}/.resolved/create-ux-design.yaml"
|
|
6
7
|
config_source: "{project-root}/_gaia/lifecycle/config.yaml"
|
|
7
8
|
installed_path: "{project-root}/_gaia/lifecycle/workflows/2-planning/create-ux-design"
|