convoke-agents 2.4.0 → 3.0.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/INSTALLATION.md +109 -86
  3. package/README.md +220 -163
  4. package/UPDATE-GUIDE.md +63 -23
  5. package/_bmad/bme/_gyre/README.md +100 -0
  6. package/_bmad/bme/_gyre/agents/.gitkeep +0 -0
  7. package/_bmad/bme/_gyre/agents/model-curator.md +128 -0
  8. package/_bmad/bme/_gyre/agents/readiness-analyst.md +127 -0
  9. package/_bmad/bme/_gyre/agents/review-coach.md +130 -0
  10. package/_bmad/bme/_gyre/agents/stack-detective.md +125 -0
  11. package/_bmad/bme/_gyre/compass-routing-reference.md +168 -0
  12. package/_bmad/bme/_gyre/config.yaml +22 -0
  13. package/_bmad/bme/_gyre/contracts/.gitkeep +0 -0
  14. package/_bmad/bme/_gyre/contracts/gc1-stack-profile.md +152 -0
  15. package/_bmad/bme/_gyre/contracts/gc2-capabilities-manifest.md +189 -0
  16. package/_bmad/bme/_gyre/contracts/gc3-findings-report.md +197 -0
  17. package/_bmad/bme/_gyre/contracts/gc4-feedback-loop.md +209 -0
  18. package/_bmad/bme/_gyre/guides/ATLAS-USER-GUIDE.md +177 -0
  19. package/_bmad/bme/_gyre/guides/COACH-USER-GUIDE.md +172 -0
  20. package/_bmad/bme/_gyre/guides/LENS-USER-GUIDE.md +181 -0
  21. package/_bmad/bme/_gyre/guides/SCOUT-USER-GUIDE.md +158 -0
  22. package/_bmad/bme/_gyre/workflows/.gitkeep +0 -0
  23. package/_bmad/bme/_gyre/workflows/accuracy-validation/steps/step-01-select-repos.md +55 -0
  24. package/_bmad/bme/_gyre/workflows/accuracy-validation/steps/step-02-run-validation.md +78 -0
  25. package/_bmad/bme/_gyre/workflows/accuracy-validation/steps/step-03-score-results.md +143 -0
  26. package/_bmad/bme/_gyre/workflows/accuracy-validation/workflow.md +41 -0
  27. package/_bmad/bme/_gyre/workflows/delta-report/steps/step-01-load-history.md +63 -0
  28. package/_bmad/bme/_gyre/workflows/delta-report/steps/step-02-compute-delta.md +72 -0
  29. package/_bmad/bme/_gyre/workflows/delta-report/steps/step-03-present-delta.md +143 -0
  30. package/_bmad/bme/_gyre/workflows/delta-report/workflow.md +34 -0
  31. package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-01-initialize.md +68 -0
  32. package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-02-detect-stack.md +49 -0
  33. package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-03-generate-model.md +52 -0
  34. package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-04-analyze-gaps.md +42 -0
  35. package/_bmad/bme/_gyre/workflows/full-analysis/steps/step-05-review-findings.md +128 -0
  36. package/_bmad/bme/_gyre/workflows/full-analysis/workflow.md +39 -0
  37. package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-01-load-manifest.md +70 -0
  38. package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-02-observability-analysis.md +110 -0
  39. package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-03-deployment-analysis.md +87 -0
  40. package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-04-cross-domain-correlation.md +105 -0
  41. package/_bmad/bme/_gyre/workflows/gap-analysis/steps/step-05-present-findings.md +172 -0
  42. package/_bmad/bme/_gyre/workflows/gap-analysis/workflow.md +38 -0
  43. package/_bmad/bme/_gyre/workflows/model-generation/steps/step-01-load-profile.md +74 -0
  44. package/_bmad/bme/_gyre/workflows/model-generation/steps/step-02-generate-capabilities.md +116 -0
  45. package/_bmad/bme/_gyre/workflows/model-generation/steps/step-03-web-enrichment.md +89 -0
  46. package/_bmad/bme/_gyre/workflows/model-generation/steps/step-04-write-manifest.md +122 -0
  47. package/_bmad/bme/_gyre/workflows/model-generation/workflow.md +40 -0
  48. package/_bmad/bme/_gyre/workflows/model-review/steps/step-01-load-context.md +86 -0
  49. package/_bmad/bme/_gyre/workflows/model-review/steps/step-02-walkthrough.md +116 -0
  50. package/_bmad/bme/_gyre/workflows/model-review/steps/step-03-apply-amendments.md +92 -0
  51. package/_bmad/bme/_gyre/workflows/model-review/steps/step-04-capture-feedback.md +107 -0
  52. package/_bmad/bme/_gyre/workflows/model-review/steps/step-05-summary.md +60 -0
  53. package/_bmad/bme/_gyre/workflows/model-review/workflow.md +41 -0
  54. package/_bmad/bme/_gyre/workflows/stack-detection/steps/step-01-scan-filesystem.md +176 -0
  55. package/_bmad/bme/_gyre/workflows/stack-detection/steps/step-02-classify-stack.md +111 -0
  56. package/_bmad/bme/_gyre/workflows/stack-detection/steps/step-03-guard-questions.md +117 -0
  57. package/_bmad/bme/_gyre/workflows/stack-detection/workflow.md +42 -0
  58. package/_bmad/bme/_vortex/config.yaml +1 -1
  59. package/package.json +5 -2
  60. package/scripts/archive.js +304 -0
  61. package/scripts/convoke-doctor.js +146 -132
  62. package/scripts/docs-audit.js +21 -5
  63. package/scripts/install-gyre-agents.js +140 -0
  64. package/scripts/install-vortex-agents.js +0 -0
  65. package/scripts/update/lib/agent-registry.js +70 -0
  66. package/scripts/update/lib/refresh-installation.js +152 -30
  67. 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)