convoke-agents 2.4.0 → 3.0.0
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/CHANGELOG.md +16 -0
- package/INSTALLATION.md +109 -86
- package/README.md +220 -163
- package/UPDATE-GUIDE.md +63 -23
- package/_bmad/bme/_gyre/README.md +100 -0
- package/_bmad/bme/_gyre/agents/.gitkeep +0 -0
- package/_bmad/bme/_gyre/agents/model-curator.md +128 -0
- package/_bmad/bme/_gyre/agents/readiness-analyst.md +127 -0
- package/_bmad/bme/_gyre/agents/review-coach.md +130 -0
- package/_bmad/bme/_gyre/agents/stack-detective.md +125 -0
- package/_bmad/bme/_gyre/compass-routing-reference.md +168 -0
- package/_bmad/bme/_gyre/config.yaml +22 -0
- package/_bmad/bme/_gyre/contracts/.gitkeep +0 -0
- package/_bmad/bme/_gyre/contracts/gc1-stack-profile.md +152 -0
- package/_bmad/bme/_gyre/contracts/gc2-capabilities-manifest.md +189 -0
- package/_bmad/bme/_gyre/contracts/gc3-findings-report.md +197 -0
- package/_bmad/bme/_gyre/contracts/gc4-feedback-loop.md +209 -0
- package/_bmad/bme/_gyre/guides/ATLAS-USER-GUIDE.md +177 -0
- package/_bmad/bme/_gyre/guides/COACH-USER-GUIDE.md +172 -0
- package/_bmad/bme/_gyre/guides/LENS-USER-GUIDE.md +181 -0
- package/_bmad/bme/_gyre/guides/SCOUT-USER-GUIDE.md +158 -0
- package/_bmad/bme/_gyre/workflows/.gitkeep +0 -0
- package/_bmad/bme/_gyre/workflows/accuracy-validation/steps/step-01-select-repos.md +55 -0
- package/_bmad/bme/_gyre/workflows/accuracy-validation/steps/step-02-run-validation.md +78 -0
- package/_bmad/bme/_gyre/workflows/accuracy-validation/steps/step-03-score-results.md +143 -0
- package/_bmad/bme/_gyre/workflows/accuracy-validation/workflow.md +41 -0
- package/_bmad/bme/_gyre/workflows/delta-report/steps/step-01-load-history.md +63 -0
- package/_bmad/bme/_gyre/workflows/delta-report/steps/step-02-compute-delta.md +72 -0
- package/_bmad/bme/_gyre/workflows/delta-report/steps/step-03-present-delta.md +143 -0
- package/_bmad/bme/_gyre/workflows/delta-report/workflow.md +34 -0
- package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-01-initialize.md +68 -0
- package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-02-detect-stack.md +49 -0
- package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-03-generate-model.md +52 -0
- package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-04-analyze-gaps.md +42 -0
- package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-05-review-findings.md +128 -0
- package/_bmad/bme/_gyre/workflows/full-analysis/workflow.md +39 -0
- package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-01-load-manifest.md +70 -0
- package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-02-observability-analysis.md +110 -0
- package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-03-deployment-analysis.md +87 -0
- package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-04-cross-domain-correlation.md +105 -0
- package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-05-present-findings.md +172 -0
- package/_bmad/bme/_gyre/workflows/gap-analysis/workflow.md +38 -0
- package/_bmad/bme/_gyre/workflows/model-generation/steps/step-01-load-profile.md +74 -0
- package/_bmad/bme/_gyre/workflows/model-generation/steps/step-02-generate-capabilities.md +116 -0
- package/_bmad/bme/_gyre/workflows/model-generation/steps/step-03-web-enrichment.md +89 -0
- package/_bmad/bme/_gyre/workflows/model-generation/steps/step-04-write-manifest.md +122 -0
- package/_bmad/bme/_gyre/workflows/model-generation/workflow.md +40 -0
- package/_bmad/bme/_gyre/workflows/model-review/steps/step-01-load-context.md +86 -0
- package/_bmad/bme/_gyre/workflows/model-review/steps/step-02-walkthrough.md +116 -0
- package/_bmad/bme/_gyre/workflows/model-review/steps/step-03-apply-amendments.md +92 -0
- package/_bmad/bme/_gyre/workflows/model-review/steps/step-04-capture-feedback.md +107 -0
- package/_bmad/bme/_gyre/workflows/model-review/steps/step-05-summary.md +60 -0
- package/_bmad/bme/_gyre/workflows/model-review/workflow.md +41 -0
- package/_bmad/bme/_gyre/workflows/stack-detection/steps/step-01-scan-filesystem.md +176 -0
- package/_bmad/bme/_gyre/workflows/stack-detection/steps/step-02-classify-stack.md +111 -0
- package/_bmad/bme/_gyre/workflows/stack-detection/steps/step-03-guard-questions.md +117 -0
- package/_bmad/bme/_gyre/workflows/stack-detection/workflow.md +42 -0
- package/_bmad/bme/_vortex/config.yaml +1 -1
- package/package.json +6 -2
- package/scripts/archive.js +304 -0
- package/scripts/convoke-doctor.js +146 -132
- package/scripts/docs-audit.js +21 -5
- package/scripts/install-gyre-agents.js +140 -0
- package/scripts/install-vortex-agents.js +0 -0
- package/scripts/update/lib/agent-registry.js +70 -0
- package/scripts/update/lib/refresh-installation.js +152 -30
- package/scripts/update/lib/validator.js +160 -1
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# GC2: Capabilities Manifest — Schema Definition
|
|
2
|
+
|
|
3
|
+
> **Contract:** GC2 | **Type:** Artifact | **Flow:** Atlas → Lens, Coach
|
|
4
|
+
>
|
|
5
|
+
> This schema defines the structure for the Capabilities Manifest produced by the model-generation workflow. The manifest contains contextual capabilities relevant to the detected stack — NOT source code, file contents, or secrets.
|
|
6
|
+
|
|
7
|
+
## Frontmatter Schema
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
---
|
|
11
|
+
contract: GC2
|
|
12
|
+
type: artifact
|
|
13
|
+
source_agent: atlas
|
|
14
|
+
source_workflow: model-generation
|
|
15
|
+
target_agents: [lens, coach]
|
|
16
|
+
input_artifacts: [GC1]
|
|
17
|
+
created: YYYY-MM-DD
|
|
18
|
+
---
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Frontmatter Field Reference
|
|
22
|
+
|
|
23
|
+
| Field | Required | Type | Description |
|
|
24
|
+
|-------|----------|------|-------------|
|
|
25
|
+
| `contract` | Yes | string | Always `GC2` |
|
|
26
|
+
| `type` | Yes | string | Always `artifact` |
|
|
27
|
+
| `source_agent` | Yes | string | Always `atlas` |
|
|
28
|
+
| `source_workflow` | Yes | string | Always `model-generation` |
|
|
29
|
+
| `target_agents` | Yes | array | Agent IDs that consume this artifact: `[lens, coach]` |
|
|
30
|
+
| `input_artifacts` | Yes | array | `[GC1]` — requires Stack Profile |
|
|
31
|
+
| `created` | Yes | date | ISO date when artifact was created |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Artifact Safety Rule
|
|
36
|
+
|
|
37
|
+
**GC2 must not contain source code, file contents, or secrets (NFR9).**
|
|
38
|
+
|
|
39
|
+
Capabilities describe WHAT should exist (categories, practices, standards) — not WHAT currently exists in the codebase. Evidence comparison is Lens's job (GC3), not Atlas's.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Body Schema
|
|
44
|
+
|
|
45
|
+
The Capabilities Manifest is written to `.gyre/capabilities.yaml` with the following structure:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
gyre_manifest:
|
|
49
|
+
version: string # manifest schema version, e.g., "1.0"
|
|
50
|
+
generated_at: ISO-8601 # generation timestamp
|
|
51
|
+
stack_summary: string # one-line stack description from GC1
|
|
52
|
+
capability_count: integer # total number of capabilities (excluding removed)
|
|
53
|
+
limited_coverage: boolean # true if <20 capabilities generated
|
|
54
|
+
capabilities:
|
|
55
|
+
- id: string # kebab-case identifier, e.g., "health-check-liveness"
|
|
56
|
+
category: string # "observability" | "deployment" | "reliability" | "security"
|
|
57
|
+
name: string # human-readable name
|
|
58
|
+
description: string # 1-3 sentences: what it is + why it matters for THIS stack
|
|
59
|
+
source: string # "standard" | "practice" | "reasoning"
|
|
60
|
+
relevance: string # why this matters for THIS stack specifically
|
|
61
|
+
amended: boolean # true if user-modified via Coach review (GC4)
|
|
62
|
+
removed: boolean # true if user removed via Coach review (GC4)
|
|
63
|
+
provenance:
|
|
64
|
+
standards_referenced: string[] # e.g., ["DORA", "OpenTelemetry", "Google PRR"]
|
|
65
|
+
web_search_performed: boolean
|
|
66
|
+
web_search_date: ISO-8601 # null if web search not performed
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Field Reference
|
|
70
|
+
|
|
71
|
+
| Field | Required | Type | Description |
|
|
72
|
+
|-------|----------|------|-------------|
|
|
73
|
+
| `version` | Yes | string | Schema version for future breaking changes (NFR17) |
|
|
74
|
+
| `generated_at` | Yes | string | ISO-8601 timestamp of generation |
|
|
75
|
+
| `stack_summary` | Yes | string | One-line description of detected stack |
|
|
76
|
+
| `capability_count` | Yes | integer | Total active capabilities (excluding removed) |
|
|
77
|
+
| `limited_coverage` | Yes | boolean | True if fewer than 20 capabilities generated |
|
|
78
|
+
| `capabilities` | Yes | array | List of capability objects |
|
|
79
|
+
| `capabilities[].id` | Yes | string | Unique kebab-case identifier |
|
|
80
|
+
| `capabilities[].category` | Yes | string | Domain category |
|
|
81
|
+
| `capabilities[].name` | Yes | string | Human-readable capability name |
|
|
82
|
+
| `capabilities[].description` | Yes | string | 1-3 sentence description with stack-specific context |
|
|
83
|
+
| `capabilities[].source` | Yes | string | Origin: "standard", "practice", or "reasoning" |
|
|
84
|
+
| `capabilities[].relevance` | Yes | string | Why this capability matters for this specific stack |
|
|
85
|
+
| `capabilities[].amended` | Yes | boolean | True if modified by user during Coach review |
|
|
86
|
+
| `capabilities[].removed` | Yes | boolean | True if removed by user during Coach review |
|
|
87
|
+
| `provenance` | Yes | object | Generation metadata |
|
|
88
|
+
| `provenance.standards_referenced` | Yes | array | Industry standards used |
|
|
89
|
+
| `provenance.web_search_performed` | Yes | boolean | Whether web search enrichment was done |
|
|
90
|
+
| `provenance.web_search_date` | No | string | ISO-8601 date of web search, null if not performed |
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Capability Categories
|
|
95
|
+
|
|
96
|
+
| Category | Description | Typical Count |
|
|
97
|
+
|----------|-------------|:------------:|
|
|
98
|
+
| `observability` | Logging, tracing, metrics, health checks, alerting | 6-10 |
|
|
99
|
+
| `deployment` | CI/CD, containers, orchestration, rollback, IaC | 5-8 |
|
|
100
|
+
| `reliability` | Graceful shutdown, circuit breakers, rate limiting, fault tolerance | 4-6 |
|
|
101
|
+
| `security` | Secrets management, vulnerability scanning, network policies, auth | 3-5 |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Capability Sources
|
|
106
|
+
|
|
107
|
+
| Source | Meaning | Examples |
|
|
108
|
+
|--------|---------|---------|
|
|
109
|
+
| `standard` | Derived from a named industry framework | DORA metrics, OpenTelemetry SDK, Google PRR checklist |
|
|
110
|
+
| `practice` | Common industry practice found via web search or domain expertise | Structured logging with correlation IDs, multi-stage Docker builds |
|
|
111
|
+
| `reasoning` | Derived from stack analysis — Atlas inferred this is relevant | "gRPC health checking protocol" inferred from gRPC + Kubernetes stack |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Artifact Location
|
|
116
|
+
|
|
117
|
+
- **Path:** `.gyre/capabilities.yaml` (relative to project root, or service root in monorepo)
|
|
118
|
+
- **Caching:** The manifest file IS the cache — re-runs load it, no regeneration unless explicit (NFR10)
|
|
119
|
+
- **Amendment persistence:** Coach writes amendments directly to this file via GC4
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Downstream Consumption
|
|
124
|
+
|
|
125
|
+
| Consumer | Purpose |
|
|
126
|
+
|----------|---------|
|
|
127
|
+
| **Lens** (readiness-analyst) | Compares each capability against filesystem evidence to identify absences — what's missing, not just what's misconfigured |
|
|
128
|
+
| **Coach** (review-coach) | Presents capabilities for user review — keep/remove/edit. Captures amendments written back via GC4 |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Example
|
|
133
|
+
|
|
134
|
+
```yaml
|
|
135
|
+
---
|
|
136
|
+
contract: GC2
|
|
137
|
+
type: artifact
|
|
138
|
+
source_agent: atlas
|
|
139
|
+
source_workflow: model-generation
|
|
140
|
+
target_agents: [lens, coach]
|
|
141
|
+
input_artifacts: [GC1]
|
|
142
|
+
created: 2026-03-22
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
gyre_manifest:
|
|
146
|
+
version: "1.0"
|
|
147
|
+
generated_at: "2026-03-22T14:30:00Z"
|
|
148
|
+
stack_summary: "Node.js Express web service on AWS EKS via GitHub Actions"
|
|
149
|
+
capability_count: 24
|
|
150
|
+
limited_coverage: false
|
|
151
|
+
capabilities:
|
|
152
|
+
- id: "structured-logging"
|
|
153
|
+
category: "observability"
|
|
154
|
+
name: "Structured JSON Logging"
|
|
155
|
+
description: "Application logs in structured JSON format with correlation IDs for request tracing. Essential for EKS workloads where CloudWatch Logs Insights or Elasticsearch are used for log analysis."
|
|
156
|
+
source: "standard"
|
|
157
|
+
relevance: "Node.js services on EKS need structured logs for CloudWatch Logs Insights queries and cross-service correlation."
|
|
158
|
+
amended: false
|
|
159
|
+
removed: false
|
|
160
|
+
- id: "health-check-liveness"
|
|
161
|
+
category: "observability"
|
|
162
|
+
name: "Kubernetes Liveness Probe"
|
|
163
|
+
description: "HTTP endpoint (typically /healthz) that Kubernetes uses to detect stuck containers and restart them. Must check application responsiveness, not downstream dependencies."
|
|
164
|
+
source: "standard"
|
|
165
|
+
relevance: "EKS requires liveness probes to auto-heal unresponsive pods. Express apps need a lightweight /healthz endpoint."
|
|
166
|
+
amended: false
|
|
167
|
+
removed: false
|
|
168
|
+
provenance:
|
|
169
|
+
standards_referenced: ["DORA", "OpenTelemetry", "Google PRR"]
|
|
170
|
+
web_search_performed: true
|
|
171
|
+
web_search_date: "2026-03-22"
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Validation Rules
|
|
177
|
+
|
|
178
|
+
A valid GC2 artifact must:
|
|
179
|
+
|
|
180
|
+
1. Have all required frontmatter fields present and correctly typed
|
|
181
|
+
2. Have all required body fields present and non-empty
|
|
182
|
+
3. Contain NO source code, file contents, or secrets
|
|
183
|
+
4. Have `version` as a string (semantic version format)
|
|
184
|
+
5. Have each capability with all required fields present
|
|
185
|
+
6. Have `category` as one of: "observability", "deployment", "reliability", "security"
|
|
186
|
+
7. Have `source` as one of: "standard", "practice", "reasoning"
|
|
187
|
+
8. Have unique `id` values across all capabilities
|
|
188
|
+
9. Have `capability_count` matching the actual count of non-removed capabilities
|
|
189
|
+
10. Have `limited_coverage` set to true if capability_count < 20
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# GC3: Findings Report — Schema Definition
|
|
2
|
+
|
|
3
|
+
> **Contract:** GC3 | **Type:** Artifact | **Flow:** Lens → Coach
|
|
4
|
+
>
|
|
5
|
+
> This schema defines the structure for the Findings Report produced by the gap-analysis workflow. Contains absence-based findings with severity, confidence, evidence summaries, and cross-domain compounds.
|
|
6
|
+
|
|
7
|
+
## Frontmatter Schema
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
---
|
|
11
|
+
contract: GC3
|
|
12
|
+
type: artifact
|
|
13
|
+
source_agent: lens
|
|
14
|
+
source_workflow: gap-analysis
|
|
15
|
+
target_agents: [coach]
|
|
16
|
+
input_artifacts: [GC2]
|
|
17
|
+
created: YYYY-MM-DD
|
|
18
|
+
---
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Frontmatter Field Reference
|
|
22
|
+
|
|
23
|
+
| Field | Required | Type | Description |
|
|
24
|
+
|-------|----------|------|-------------|
|
|
25
|
+
| `contract` | Yes | string | Always `GC3` |
|
|
26
|
+
| `type` | Yes | string | Always `artifact` |
|
|
27
|
+
| `source_agent` | Yes | string | Always `lens` |
|
|
28
|
+
| `source_workflow` | Yes | string | Always `gap-analysis` |
|
|
29
|
+
| `target_agents` | Yes | array | Agent IDs that consume this artifact: `[coach]` |
|
|
30
|
+
| `input_artifacts` | Yes | array | `[GC2]` — requires Capabilities Manifest |
|
|
31
|
+
| `created` | Yes | date | ISO date when artifact was created |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Body Schema
|
|
36
|
+
|
|
37
|
+
The Findings Report is written to `.gyre/findings.yaml` with the following structure:
|
|
38
|
+
|
|
39
|
+
```yaml
|
|
40
|
+
gyre_findings:
|
|
41
|
+
version: string # schema version, e.g., "1.0"
|
|
42
|
+
analyzed_at: ISO-8601 # analysis timestamp
|
|
43
|
+
mode: string # "crisis" | "anticipation"
|
|
44
|
+
stack_summary: string # from GC2
|
|
45
|
+
summary:
|
|
46
|
+
blockers: integer
|
|
47
|
+
recommended: integer
|
|
48
|
+
nice_to_have: integer
|
|
49
|
+
total: integer
|
|
50
|
+
novelty_ratio: string # e.g., "8 of 12 contextual"
|
|
51
|
+
findings:
|
|
52
|
+
- id: string # e.g., "OBS-001" or "DEP-003"
|
|
53
|
+
domain: string # "observability" | "deployment"
|
|
54
|
+
severity: string # "blocker" | "recommended" | "nice-to-have"
|
|
55
|
+
source: string # "static-analysis" | "contextual-model"
|
|
56
|
+
confidence: string # "high" | "medium" | "low"
|
|
57
|
+
capability_ref: string # references GC2 capability ID
|
|
58
|
+
description: string # what's missing and why it matters
|
|
59
|
+
evidence_summary: string # what was searched and what was/wasn't found
|
|
60
|
+
severity_rationale: string # why this severity level
|
|
61
|
+
compound_findings:
|
|
62
|
+
- id: string # e.g., "COMPOUND-001"
|
|
63
|
+
domain: "cross-domain"
|
|
64
|
+
severity: string # "blocker" | "recommended" | "nice-to-have"
|
|
65
|
+
source: "contextual-model"
|
|
66
|
+
confidence: string # lower of the two component confidences
|
|
67
|
+
capability_ref: string[] # references 2 GC2 capability IDs
|
|
68
|
+
description: string
|
|
69
|
+
evidence_summary: string
|
|
70
|
+
related_findings: string[] # references 2 finding IDs from different domains
|
|
71
|
+
combined_impact: string # reasoning chain: why these together are worse
|
|
72
|
+
sanity_check:
|
|
73
|
+
passed: boolean
|
|
74
|
+
warnings: string[] # e.g., ">80% capabilities flagged missing"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Field Reference — Findings
|
|
78
|
+
|
|
79
|
+
| Field | Required | Type | Description |
|
|
80
|
+
|-------|----------|------|-------------|
|
|
81
|
+
| `id` | Yes | string | Unique finding ID: OBS-NNN or DEP-NNN |
|
|
82
|
+
| `domain` | Yes | string | "observability" or "deployment" |
|
|
83
|
+
| `severity` | Yes | string | "blocker", "recommended", or "nice-to-have" |
|
|
84
|
+
| `source` | Yes | string | "static-analysis" (file evidence) or "contextual-model" (inferred) |
|
|
85
|
+
| `confidence` | Yes | string | "high", "medium", or "low" |
|
|
86
|
+
| `capability_ref` | Yes | string | Must reference a valid GC2 capability ID |
|
|
87
|
+
| `description` | Yes | string | What's missing and why it matters |
|
|
88
|
+
| `evidence_summary` | Yes | string | What was searched and what was/wasn't found |
|
|
89
|
+
| `severity_rationale` | Yes | string | Why this severity level was assigned |
|
|
90
|
+
|
|
91
|
+
### Field Reference — Compound Findings
|
|
92
|
+
|
|
93
|
+
| Field | Required | Type | Description |
|
|
94
|
+
|-------|----------|------|-------------|
|
|
95
|
+
| `id` | Yes | string | Unique compound ID: COMPOUND-NNN |
|
|
96
|
+
| `domain` | Yes | string | Always "cross-domain" |
|
|
97
|
+
| `severity` | Yes | string | May be higher than either component |
|
|
98
|
+
| `source` | Yes | string | Always "contextual-model" |
|
|
99
|
+
| `confidence` | Yes | string | Lower of the two component confidences |
|
|
100
|
+
| `capability_ref` | Yes | array | Exactly 2 GC2 capability IDs |
|
|
101
|
+
| `related_findings` | Yes | array | Exactly 2 finding IDs from different domains |
|
|
102
|
+
| `combined_impact` | Yes | string | Reasoning chain explaining amplification |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Artifact Location
|
|
107
|
+
|
|
108
|
+
- **Path:** `.gyre/findings.yaml` (relative to project root, or service root in monorepo)
|
|
109
|
+
- **Overwritten:** Each analysis run produces a fresh findings report
|
|
110
|
+
- **Previous report:** Backed up to `.gyre/findings.previous.yaml` for delta-report comparison
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Downstream Consumption
|
|
115
|
+
|
|
116
|
+
| Consumer | Purpose |
|
|
117
|
+
|----------|---------|
|
|
118
|
+
| **Coach** (review-coach) | Presents findings for user review, captures feedback on accuracy, guides severity adjustments |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Example
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
---
|
|
126
|
+
contract: GC3
|
|
127
|
+
type: artifact
|
|
128
|
+
source_agent: lens
|
|
129
|
+
source_workflow: gap-analysis
|
|
130
|
+
target_agents: [coach]
|
|
131
|
+
input_artifacts: [GC2]
|
|
132
|
+
created: 2026-03-22
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
gyre_findings:
|
|
136
|
+
version: "1.0"
|
|
137
|
+
analyzed_at: "2026-03-22T15:00:00Z"
|
|
138
|
+
mode: "crisis"
|
|
139
|
+
stack_summary: "Node.js Express web service on AWS EKS via GitHub Actions"
|
|
140
|
+
summary:
|
|
141
|
+
blockers: 2
|
|
142
|
+
recommended: 5
|
|
143
|
+
nice_to_have: 3
|
|
144
|
+
total: 10
|
|
145
|
+
novelty_ratio: "7 of 10 contextual"
|
|
146
|
+
findings:
|
|
147
|
+
- id: "OBS-001"
|
|
148
|
+
domain: "observability"
|
|
149
|
+
severity: "blocker"
|
|
150
|
+
source: "static-analysis"
|
|
151
|
+
confidence: "high"
|
|
152
|
+
capability_ref: "health-check-liveness"
|
|
153
|
+
description: "No Kubernetes liveness probe detected. EKS pods will not be auto-healed when unresponsive."
|
|
154
|
+
evidence_summary: "Glob for **/health*, **/liveness*: no files found. Grep for 'healthz', 'liveness': no matches in source files. No HEALTHCHECK in Dockerfile."
|
|
155
|
+
severity_rationale: "EKS requires liveness probes for auto-healing. Without them, stuck pods persist until manual intervention."
|
|
156
|
+
- id: "DEP-003"
|
|
157
|
+
domain: "deployment"
|
|
158
|
+
severity: "recommended"
|
|
159
|
+
source: "static-analysis"
|
|
160
|
+
confidence: "medium"
|
|
161
|
+
capability_ref: "rollback-strategy"
|
|
162
|
+
description: "No rollback mechanism detected in deployment configuration."
|
|
163
|
+
evidence_summary: "Grep for 'rollback', 'revision', 'undo' in k8s/ and .github/workflows/: no matches. K8s deployments use default rolling update without explicit rollback steps."
|
|
164
|
+
severity_rationale: "Rolling updates without explicit rollback increase recovery time from failed deployments."
|
|
165
|
+
compound_findings:
|
|
166
|
+
- id: "COMPOUND-001"
|
|
167
|
+
domain: "cross-domain"
|
|
168
|
+
severity: "blocker"
|
|
169
|
+
source: "contextual-model"
|
|
170
|
+
confidence: "high"
|
|
171
|
+
capability_ref: ["health-check-liveness", "rollback-strategy"]
|
|
172
|
+
description: "No health checks combined with no rollback creates unrecoverable deployment failure risk."
|
|
173
|
+
evidence_summary: "Combines OBS-001 (no liveness probe) with DEP-003 (no rollback). Failed deployments cannot be detected by K8s and cannot be reversed."
|
|
174
|
+
related_findings: ["OBS-001", "DEP-003"]
|
|
175
|
+
combined_impact: "Without liveness probes, K8s cannot detect that a new deployment is unhealthy. Without rollback, the failed deployment persists. Together: a bad deploy goes undetected and unrecoverable until manual SSH intervention."
|
|
176
|
+
sanity_check:
|
|
177
|
+
passed: true
|
|
178
|
+
warnings: []
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Validation Rules
|
|
184
|
+
|
|
185
|
+
A valid GC3 artifact must:
|
|
186
|
+
|
|
187
|
+
1. Have all required frontmatter fields present and correctly typed
|
|
188
|
+
2. Have all required body fields present and non-empty
|
|
189
|
+
3. Have every finding reference a valid `capability_ref` from GC2
|
|
190
|
+
4. Have every compound reference exactly 2 findings from different domains
|
|
191
|
+
5. Have compound `confidence` equal to the lower of component confidences
|
|
192
|
+
6. Have no compounds where either component has confidence "low"
|
|
193
|
+
7. Have finding IDs unique within the report
|
|
194
|
+
8. Have `severity` as one of: "blocker", "recommended", "nice-to-have"
|
|
195
|
+
9. Have `source` as one of: "static-analysis", "contextual-model"
|
|
196
|
+
10. Have `confidence` as one of: "high", "medium", "low"
|
|
197
|
+
11. Have summary counts matching actual finding counts
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# GC4: Feedback Loop — Schema Definition
|
|
2
|
+
|
|
3
|
+
> **Contract:** GC4 | **Type:** Artifact | **Flow:** Coach → Atlas
|
|
4
|
+
>
|
|
5
|
+
> This schema defines the structure for the Feedback Loop produced by the model-review workflow. Contains two mechanisms: (1) amendment flags on capabilities in GC2, and (2) a standalone feedback file for missed-gap reports.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
GC4 is a dual-mechanism contract:
|
|
10
|
+
|
|
11
|
+
1. **Amendment Flags** — stored directly on capabilities in `.gyre/capabilities.yaml` (GC2). Capabilities marked `removed: true` or `amended: true` persist across regeneration. Atlas reads these flags and respects them.
|
|
12
|
+
|
|
13
|
+
2. **Feedback File** — stored in `.gyre/feedback.yaml`. Contains user-reported missed capabilities, missed gaps, and severity adjustments. Atlas uses these to inform future model generation.
|
|
14
|
+
|
|
15
|
+
## Mechanism 1: Amendment Flags (in GC2)
|
|
16
|
+
|
|
17
|
+
Amendments are stored as additional fields on capability entries in `.gyre/capabilities.yaml`:
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
# Removed capability — excluded from future analysis
|
|
21
|
+
- id: "obs-custom-metrics"
|
|
22
|
+
name: "Custom metrics collection"
|
|
23
|
+
category: "observability"
|
|
24
|
+
# ... standard fields ...
|
|
25
|
+
removed: true
|
|
26
|
+
removed_at: "2026-03-22"
|
|
27
|
+
|
|
28
|
+
# Edited capability — persists across regeneration
|
|
29
|
+
- id: "dep-rollback"
|
|
30
|
+
name: "Automated rollback" # updated by user
|
|
31
|
+
category: "deployment"
|
|
32
|
+
description: "Canary-based rollback" # updated by user
|
|
33
|
+
# ... standard fields ...
|
|
34
|
+
amended: true
|
|
35
|
+
amended_at: "2026-03-22"
|
|
36
|
+
original_name: "Rollback strategy"
|
|
37
|
+
original_description: "Mechanism to revert failed deployments"
|
|
38
|
+
|
|
39
|
+
# User-added capability
|
|
40
|
+
- id: "obs-custom-001"
|
|
41
|
+
name: "SLO dashboard"
|
|
42
|
+
category: "observability"
|
|
43
|
+
description: "Service Level Objective tracking dashboard with burn rate alerts"
|
|
44
|
+
source: "user-added"
|
|
45
|
+
amended: true
|
|
46
|
+
amended_at: "2026-03-22"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Amendment Flag Reference
|
|
50
|
+
|
|
51
|
+
| Field | Type | When Present | Description |
|
|
52
|
+
|-------|------|-------------|-------------|
|
|
53
|
+
| `removed` | boolean | Capability removed by user | Always `true` when present |
|
|
54
|
+
| `removed_at` | date | With `removed` | ISO date of removal |
|
|
55
|
+
| `amended` | boolean | Capability edited or added by user | Always `true` when present |
|
|
56
|
+
| `amended_at` | date | With `amended` | ISO date of amendment |
|
|
57
|
+
| `original_name` | string | Name was changed | Previous name value |
|
|
58
|
+
| `original_description` | string | Description was changed | Previous description value |
|
|
59
|
+
| `original_category` | string | Category was changed | Previous category value |
|
|
60
|
+
| `source` | string | User-added capability | Set to `"user-added"` for new entries |
|
|
61
|
+
|
|
62
|
+
### Amendment Frontmatter Fields (in GC2)
|
|
63
|
+
|
|
64
|
+
When amendments are applied, the GC2 frontmatter is updated:
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
---
|
|
68
|
+
contract: GC2
|
|
69
|
+
# ... standard GC2 fields ...
|
|
70
|
+
last_reviewed: "2026-03-22" # date of most recent review
|
|
71
|
+
review_deferred: false # true if user chose "later"
|
|
72
|
+
amendment_count: 3 # total amendments applied
|
|
73
|
+
---
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Mechanism 2: Feedback File
|
|
79
|
+
|
|
80
|
+
Feedback is stored in a standalone file at `.gyre/feedback.yaml`.
|
|
81
|
+
|
|
82
|
+
### Frontmatter Schema
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
---
|
|
86
|
+
contract: GC4
|
|
87
|
+
type: artifact
|
|
88
|
+
source_agent: coach
|
|
89
|
+
target_agents: [atlas]
|
|
90
|
+
created: YYYY-MM-DD
|
|
91
|
+
updated: YYYY-MM-DD
|
|
92
|
+
---
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Frontmatter Field Reference
|
|
96
|
+
|
|
97
|
+
| Field | Required | Type | Description |
|
|
98
|
+
|-------|----------|------|-------------|
|
|
99
|
+
| `contract` | Yes | string | Always `GC4` |
|
|
100
|
+
| `type` | Yes | string | Always `artifact` |
|
|
101
|
+
| `source_agent` | Yes | string | Always `coach` |
|
|
102
|
+
| `target_agents` | Yes | array | Agent IDs that consume this artifact: `[atlas]` |
|
|
103
|
+
| `created` | Yes | date | ISO date when first feedback entry was written |
|
|
104
|
+
| `updated` | Yes | date | ISO date of most recent feedback entry |
|
|
105
|
+
|
|
106
|
+
### Body Schema
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
feedback:
|
|
110
|
+
- timestamp: ISO-8601 # when the feedback was provided
|
|
111
|
+
reporter: string # user name from config
|
|
112
|
+
type: string # "missed-capability" | "missed-gap" | "severity-adjustment" | "other"
|
|
113
|
+
description: string # user's feedback in their own words
|
|
114
|
+
domain: string # "observability" | "deployment" | "reliability" | "security" | "general"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Feedback Entry Field Reference
|
|
118
|
+
|
|
119
|
+
| Field | Required | Type | Description |
|
|
120
|
+
|-------|----------|------|-------------|
|
|
121
|
+
| `timestamp` | Yes | string | ISO-8601 timestamp of when feedback was captured |
|
|
122
|
+
| `reporter` | Yes | string | User name (from config.yaml `user_name`) |
|
|
123
|
+
| `type` | Yes | string | One of: `missed-capability`, `missed-gap`, `severity-adjustment`, `other` |
|
|
124
|
+
| `description` | Yes | string | User's feedback in their own words |
|
|
125
|
+
| `domain` | Yes | string | One of: `observability`, `deployment`, `reliability`, `security`, `general` |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Artifact Locations
|
|
130
|
+
|
|
131
|
+
| File | Purpose | Updated By |
|
|
132
|
+
|------|---------|------------|
|
|
133
|
+
| `.gyre/capabilities.yaml` | Amendment flags on capabilities | Coach (step-03-apply-amendments) |
|
|
134
|
+
| `.gyre/feedback.yaml` | Missed-gap reports and feedback | Coach (step-04-capture-feedback) |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Downstream Consumption
|
|
139
|
+
|
|
140
|
+
| Consumer | Mechanism | Purpose |
|
|
141
|
+
|----------|-----------|---------|
|
|
142
|
+
| **Atlas** (model-curator) | Amendment flags in GC2 | Respect `removed`/`amended` flags on regeneration — never re-add removed capabilities, preserve edits |
|
|
143
|
+
| **Atlas** (model-curator) | Feedback file | Incorporate missed-capability and missed-gap feedback into future model generation |
|
|
144
|
+
|
|
145
|
+
### Atlas Regeneration Rules
|
|
146
|
+
|
|
147
|
+
When Atlas regenerates the model (model-generation workflow):
|
|
148
|
+
|
|
149
|
+
1. Load existing `.gyre/capabilities.yaml` if present
|
|
150
|
+
2. For each capability with `removed: true` — do NOT regenerate, preserve the removal entry
|
|
151
|
+
3. For each capability with `amended: true` — preserve user's edits, do not overwrite
|
|
152
|
+
4. For each `missed-capability` feedback entry — consider generating a matching capability
|
|
153
|
+
5. For each `missed-gap` feedback entry — consider adding a relevant capability
|
|
154
|
+
6. New capabilities from regeneration are added alongside preserved amendments
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Example
|
|
159
|
+
|
|
160
|
+
### Feedback File Example
|
|
161
|
+
|
|
162
|
+
```yaml
|
|
163
|
+
---
|
|
164
|
+
contract: GC4
|
|
165
|
+
type: artifact
|
|
166
|
+
source_agent: coach
|
|
167
|
+
target_agents: [atlas]
|
|
168
|
+
created: 2026-03-22
|
|
169
|
+
updated: 2026-03-22
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
feedback:
|
|
173
|
+
- timestamp: "2026-03-22T15:30:00Z"
|
|
174
|
+
reporter: "Alice"
|
|
175
|
+
type: "missed-capability"
|
|
176
|
+
description: "We use SLO-based alerting with burn rate windows — the model should include SLO tracking as a capability"
|
|
177
|
+
domain: "observability"
|
|
178
|
+
- timestamp: "2026-03-22T15:32:00Z"
|
|
179
|
+
reporter: "Alice"
|
|
180
|
+
type: "severity-adjustment"
|
|
181
|
+
description: "OBS-003 (structured logging) should be a blocker, not recommended — we've had incidents from unstructured logs"
|
|
182
|
+
domain: "observability"
|
|
183
|
+
- timestamp: "2026-03-22T15:35:00Z"
|
|
184
|
+
reporter: "Alice"
|
|
185
|
+
type: "missed-gap"
|
|
186
|
+
description: "No finding about database connection pooling — we don't have it and it's causing issues under load"
|
|
187
|
+
domain: "reliability"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Validation Rules
|
|
193
|
+
|
|
194
|
+
A valid GC4 feedback file must:
|
|
195
|
+
|
|
196
|
+
1. Have all required frontmatter fields present and correctly typed
|
|
197
|
+
2. Have every feedback entry with all required fields present and non-empty
|
|
198
|
+
3. Have `type` as one of: `missed-capability`, `missed-gap`, `severity-adjustment`, `other`
|
|
199
|
+
4. Have `domain` as one of: `observability`, `deployment`, `reliability`, `security`, `general`
|
|
200
|
+
5. Have `timestamp` in ISO-8601 format
|
|
201
|
+
6. Have `updated` date >= `created` date
|
|
202
|
+
7. Not contain source code, file contents, or secrets (NFR9)
|
|
203
|
+
|
|
204
|
+
Amendment flags in GC2 must:
|
|
205
|
+
|
|
206
|
+
1. Have `removed_at` present when `removed: true`
|
|
207
|
+
2. Have `amended_at` present when `amended: true`
|
|
208
|
+
3. Have at least one `original_*` field when `amended: true` (unless `source: "user-added"`)
|
|
209
|
+
4. Have unique capability IDs (user-added capabilities use `[category]-custom-NNN` pattern)
|