@chllming/wave-orchestration 0.5.4 → 0.6.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 (126) hide show
  1. package/CHANGELOG.md +52 -3
  2. package/README.md +33 -5
  3. package/docs/README.md +18 -4
  4. package/docs/agents/wave-cont-eval-role.md +36 -0
  5. package/docs/agents/{wave-evaluator-role.md → wave-cont-qa-role.md} +14 -11
  6. package/docs/agents/wave-documentation-role.md +1 -1
  7. package/docs/agents/wave-infra-role.md +1 -1
  8. package/docs/agents/wave-integration-role.md +3 -3
  9. package/docs/agents/wave-launcher-role.md +4 -3
  10. package/docs/agents/wave-security-role.md +40 -0
  11. package/docs/concepts/context7-vs-skills.md +1 -1
  12. package/docs/concepts/what-is-a-wave.md +56 -6
  13. package/docs/evals/README.md +166 -0
  14. package/docs/evals/benchmark-catalog.json +663 -0
  15. package/docs/guides/author-and-run-waves.md +135 -0
  16. package/docs/guides/planner.md +5 -0
  17. package/docs/guides/terminal-surfaces.md +2 -0
  18. package/docs/plans/component-cutover-matrix.json +1 -1
  19. package/docs/plans/component-cutover-matrix.md +1 -1
  20. package/docs/plans/current-state.md +19 -1
  21. package/docs/plans/examples/wave-example-live-proof.md +435 -0
  22. package/docs/plans/migration.md +42 -0
  23. package/docs/plans/wave-orchestrator.md +46 -7
  24. package/docs/plans/waves/wave-0.md +4 -4
  25. package/docs/reference/live-proof-waves.md +177 -0
  26. package/docs/reference/migration-0.2-to-0.5.md +26 -19
  27. package/docs/reference/npmjs-trusted-publishing.md +6 -5
  28. package/docs/reference/runtime-config/README.md +14 -4
  29. package/docs/reference/sample-waves.md +87 -0
  30. package/docs/reference/skills.md +110 -42
  31. package/docs/research/agent-context-sources.md +130 -11
  32. package/docs/research/coordination-failure-review.md +266 -0
  33. package/docs/roadmap.md +6 -2
  34. package/package.json +2 -2
  35. package/releases/manifest.json +35 -2
  36. package/scripts/research/agent-context-archive.mjs +83 -1
  37. package/scripts/research/manifests/agent-context-expanded-2026-03-22.mjs +811 -0
  38. package/scripts/wave-orchestrator/adhoc.mjs +1331 -0
  39. package/scripts/wave-orchestrator/agent-state.mjs +358 -6
  40. package/scripts/wave-orchestrator/artifact-schemas.mjs +173 -0
  41. package/scripts/wave-orchestrator/clarification-triage.mjs +10 -3
  42. package/scripts/wave-orchestrator/config.mjs +48 -12
  43. package/scripts/wave-orchestrator/context7.mjs +2 -0
  44. package/scripts/wave-orchestrator/coord-cli.mjs +51 -19
  45. package/scripts/wave-orchestrator/coordination-store.mjs +26 -4
  46. package/scripts/wave-orchestrator/coordination.mjs +83 -9
  47. package/scripts/wave-orchestrator/dashboard-state.mjs +20 -8
  48. package/scripts/wave-orchestrator/dep-cli.mjs +5 -2
  49. package/scripts/wave-orchestrator/docs-queue.mjs +8 -2
  50. package/scripts/wave-orchestrator/evals.mjs +451 -0
  51. package/scripts/wave-orchestrator/feedback.mjs +15 -1
  52. package/scripts/wave-orchestrator/install.mjs +32 -9
  53. package/scripts/wave-orchestrator/launcher-closure.mjs +281 -0
  54. package/scripts/wave-orchestrator/launcher-runtime.mjs +334 -0
  55. package/scripts/wave-orchestrator/launcher.mjs +709 -601
  56. package/scripts/wave-orchestrator/ledger.mjs +123 -20
  57. package/scripts/wave-orchestrator/local-executor.mjs +99 -12
  58. package/scripts/wave-orchestrator/planner.mjs +177 -42
  59. package/scripts/wave-orchestrator/replay.mjs +6 -3
  60. package/scripts/wave-orchestrator/role-helpers.mjs +84 -0
  61. package/scripts/wave-orchestrator/shared.mjs +75 -11
  62. package/scripts/wave-orchestrator/skills.mjs +637 -106
  63. package/scripts/wave-orchestrator/traces.mjs +71 -48
  64. package/scripts/wave-orchestrator/wave-files.mjs +947 -101
  65. package/scripts/wave.mjs +9 -0
  66. package/skills/README.md +202 -0
  67. package/skills/provider-aws/SKILL.md +111 -0
  68. package/skills/provider-aws/adapters/claude.md +1 -0
  69. package/skills/provider-aws/adapters/codex.md +1 -0
  70. package/skills/provider-aws/references/service-verification.md +39 -0
  71. package/skills/provider-aws/skill.json +50 -1
  72. package/skills/provider-custom-deploy/SKILL.md +59 -0
  73. package/skills/provider-custom-deploy/skill.json +46 -1
  74. package/skills/provider-docker-compose/SKILL.md +90 -0
  75. package/skills/provider-docker-compose/adapters/local.md +1 -0
  76. package/skills/provider-docker-compose/skill.json +49 -1
  77. package/skills/provider-github-release/SKILL.md +116 -1
  78. package/skills/provider-github-release/adapters/claude.md +1 -0
  79. package/skills/provider-github-release/adapters/codex.md +1 -0
  80. package/skills/provider-github-release/skill.json +51 -1
  81. package/skills/provider-kubernetes/SKILL.md +137 -0
  82. package/skills/provider-kubernetes/adapters/claude.md +1 -0
  83. package/skills/provider-kubernetes/adapters/codex.md +1 -0
  84. package/skills/provider-kubernetes/references/kubectl-patterns.md +58 -0
  85. package/skills/provider-kubernetes/skill.json +48 -1
  86. package/skills/provider-railway/SKILL.md +118 -1
  87. package/skills/provider-railway/references/verification-commands.md +39 -0
  88. package/skills/provider-railway/skill.json +67 -1
  89. package/skills/provider-ssh-manual/SKILL.md +91 -0
  90. package/skills/provider-ssh-manual/skill.json +50 -1
  91. package/skills/repo-coding-rules/SKILL.md +84 -0
  92. package/skills/repo-coding-rules/skill.json +30 -1
  93. package/skills/role-cont-eval/SKILL.md +90 -0
  94. package/skills/role-cont-eval/adapters/codex.md +1 -0
  95. package/skills/role-cont-eval/skill.json +36 -0
  96. package/skills/role-cont-qa/SKILL.md +93 -0
  97. package/skills/role-cont-qa/adapters/claude.md +1 -0
  98. package/skills/role-cont-qa/skill.json +36 -0
  99. package/skills/role-deploy/SKILL.md +90 -0
  100. package/skills/role-deploy/skill.json +32 -1
  101. package/skills/role-documentation/SKILL.md +66 -0
  102. package/skills/role-documentation/skill.json +32 -1
  103. package/skills/role-implementation/SKILL.md +62 -0
  104. package/skills/role-implementation/skill.json +32 -1
  105. package/skills/role-infra/SKILL.md +74 -0
  106. package/skills/role-infra/skill.json +32 -1
  107. package/skills/role-integration/SKILL.md +79 -1
  108. package/skills/role-integration/skill.json +32 -1
  109. package/skills/role-research/SKILL.md +58 -0
  110. package/skills/role-research/skill.json +32 -1
  111. package/skills/role-security/SKILL.md +60 -0
  112. package/skills/role-security/skill.json +36 -0
  113. package/skills/runtime-claude/SKILL.md +60 -1
  114. package/skills/runtime-claude/skill.json +32 -1
  115. package/skills/runtime-codex/SKILL.md +52 -1
  116. package/skills/runtime-codex/skill.json +32 -1
  117. package/skills/runtime-local/SKILL.md +39 -0
  118. package/skills/runtime-local/skill.json +32 -1
  119. package/skills/runtime-opencode/SKILL.md +51 -0
  120. package/skills/runtime-opencode/skill.json +32 -1
  121. package/skills/wave-core/SKILL.md +107 -0
  122. package/skills/wave-core/references/marker-syntax.md +62 -0
  123. package/skills/wave-core/skill.json +31 -1
  124. package/wave.config.json +35 -6
  125. package/skills/role-evaluator/SKILL.md +0 -6
  126. package/skills/role-evaluator/skill.json +0 -5
package/scripts/wave.mjs CHANGED
@@ -17,6 +17,7 @@ function printHelp() {
17
17
  wave project setup [options]
18
18
  wave project show [options]
19
19
  wave draft [draft options]
20
+ wave adhoc [adhoc options]
20
21
  wave launch [launcher options]
21
22
  wave autonomous [autonomous options]
22
23
  wave feedback [feedback options]
@@ -51,6 +52,14 @@ if (["init", "upgrade", "changelog", "doctor"].includes(subcommand)) {
51
52
  console.error(`[wave] ${error instanceof Error ? error.message : String(error)}`);
52
53
  process.exit(Number.isInteger(error?.exitCode) ? error.exitCode : 1);
53
54
  }
55
+ } else if (subcommand === "adhoc") {
56
+ try {
57
+ const { runAdhocCli } = await import("./wave-orchestrator/adhoc.mjs");
58
+ await runAdhocCli(rest);
59
+ } catch (error) {
60
+ console.error(`[wave] ${error instanceof Error ? error.message : String(error)}`);
61
+ process.exit(Number.isInteger(error?.exitCode) ? error.exitCode : 1);
62
+ }
54
63
  } else if (subcommand === "launch") {
55
64
  try {
56
65
  const { runLauncherCli } = await import("./wave-orchestrator/launcher.mjs");
@@ -0,0 +1,202 @@
1
+ # Skills
2
+
3
+ Skills are repo-owned procedural bundles that Wave attaches to agents at runtime. They capture durable operating knowledge such as coding norms, role checklists, runtime behavior, provider verification, and closure rules.
4
+
5
+ Skills are not one-off prompts. They are reusable procedures with explicit routing metadata.
6
+
7
+ ## Bundle Layout
8
+
9
+ Each skill lives under `skills/<skill-id>/`:
10
+
11
+ ```text
12
+ skills/<skill-id>/
13
+ skill.json
14
+ SKILL.md
15
+ adapters/
16
+ claude.md
17
+ codex.md
18
+ opencode.md
19
+ local.md
20
+ references/
21
+ ...
22
+ ```
23
+
24
+ - `skill.json` is required.
25
+ - `SKILL.md` is required.
26
+ - `adapters/` is optional and runtime-specific.
27
+ - `references/` is optional and can be nested recursively.
28
+
29
+ ## `skill.json`
30
+
31
+ Required fields:
32
+
33
+ | Field | Purpose |
34
+ | --- | --- |
35
+ | `id` | Must match the directory name. |
36
+ | `title` | Human-readable name. |
37
+ | `description` | Short routing summary. |
38
+ | `activation.when` | Human-readable statement of when the skill should apply. |
39
+
40
+ Optional fields:
41
+
42
+ | Field | Purpose |
43
+ | --- | --- |
44
+ | `version` | Bundle version for traceability. |
45
+ | `tags` | Lightweight grouping tags. |
46
+ | `activation.roles` | Restrict auto-attachment to specific roles. |
47
+ | `activation.runtimes` | Restrict auto-attachment to specific runtimes. |
48
+ | `activation.deployKinds` | Restrict auto-attachment to specific deploy kinds. |
49
+ | `termination.when` | Explicit stop condition for the procedure. |
50
+ | `permissions.network` | Declared network expectations. |
51
+ | `permissions.shell` | Declared shell/tool expectations. |
52
+ | `permissions.mcpServers` | Declared MCP expectations. |
53
+ | `trust.tier` | Provenance marker such as `repo-owned`. |
54
+ | `evalCases[]` | Deterministic routing checks exercised by `wave doctor`. |
55
+
56
+ ## `SKILL.md`
57
+
58
+ `SKILL.md` is the canonical instruction body. Keep it:
59
+
60
+ - procedural
61
+ - reusable across many waves
62
+ - smaller than a full reference manual
63
+ - free of assignment-specific details
64
+
65
+ Use `references/` for detailed catalogs, command inventories, and longer examples that would otherwise bloat the canonical skill.
66
+
67
+ ## `adapters/`
68
+
69
+ Adapters are small runtime-specific overlays. Use them only when the runtime interaction materially differs.
70
+
71
+ Common reasons:
72
+
73
+ - Claude should prefer MCP or system-prompt-aware behavior.
74
+ - Codex should stay terminal-first and deterministic.
75
+ - OpenCode should lean on file attachments and direct edits.
76
+ - Local should stay within smoke-validation limits.
77
+
78
+ ## `references/`
79
+
80
+ Reference files are progressive-disclosure material. Wave lists them in the compact catalog and, for OpenCode, attaches them as files. The agent reads them on demand rather than paying the token cost up front.
81
+
82
+ Use references for:
83
+
84
+ - command catalogs
85
+ - provider failure-mode inventories
86
+ - longer examples
87
+ - repo-specific extensions that do not belong in the core procedure
88
+
89
+ ## Resolution Model
90
+
91
+ Wave stacks skills in this order:
92
+
93
+ 1. global `skills.base`
94
+ 2. lane `skills.base`
95
+ 3. global `skills.byRole[role]`
96
+ 4. lane `skills.byRole[role]`
97
+ 5. global `skills.byRuntime[runtime]`
98
+ 6. lane `skills.byRuntime[runtime]`
99
+ 7. global `skills.byDeployKind[kind]`
100
+ 8. lane `skills.byDeployKind[kind]`
101
+ 9. agent `### Skills`
102
+
103
+ Then it filters configured skills through manifest activation:
104
+
105
+ - role skills should declare their role
106
+ - runtime skills should declare their runtime
107
+ - provider skills should usually declare both deploy kinds and the roles that genuinely need provider context
108
+
109
+ Explicit per-agent `### Skills` still force attachment. Use that only for real exceptions.
110
+
111
+ ## Metadata-First Delivery
112
+
113
+ Wave no longer inlines every skill body into every runtime prompt by default.
114
+
115
+ Generated artifacts:
116
+
117
+ | File | Purpose |
118
+ | --- | --- |
119
+ | `skills.resolved.md` | Compact skill catalog for the active run. |
120
+ | `skills.expanded.md` | Full canonical/debug view with `SKILL.md` bodies and adapters. |
121
+ | `skills.metadata.json` | Structured ids, activation, permissions, hashes, paths, and artifacts. |
122
+ | `<runtime>-skills.txt` | Runtime-specific compact projection. |
123
+
124
+ Runtime behavior:
125
+
126
+ | Runtime | Delivery model |
127
+ | --- | --- |
128
+ | Codex | Compact catalog in prompt plus bundle directories through `--add-dir`. |
129
+ | Claude | Compact catalog appended to the generated system prompt. |
130
+ | OpenCode | Compact catalog injected into `opencode.json`; `skill.json`, `SKILL.md`, the selected adapter, and recursive references attached via `--file`. |
131
+ | Local | Compact catalog only. |
132
+
133
+ ## Validation
134
+
135
+ Run:
136
+
137
+ ```sh
138
+ node scripts/wave.mjs doctor --json
139
+ ```
140
+
141
+ Doctor validates:
142
+
143
+ - bundle existence
144
+ - manifest schema
145
+ - selector-key correctness
146
+ - config-to-manifest activation consistency
147
+ - every declared `evalCases[]`
148
+
149
+ This is fail-closed. Selector typos and malformed bundles are errors, not silent no-ops.
150
+
151
+ ## Skill Categories
152
+
153
+ Base:
154
+
155
+ - `wave-core`
156
+ - `repo-coding-rules`
157
+
158
+ Role:
159
+
160
+ - `role-implementation`
161
+ - `role-integration`
162
+ - `role-documentation`
163
+ - `role-infra`
164
+ - `role-deploy`
165
+ - `role-research`
166
+ - `role-cont-qa`
167
+ - `role-cont-eval`
168
+
169
+ Runtime:
170
+
171
+ - `runtime-codex`
172
+ - `runtime-claude`
173
+ - `runtime-opencode`
174
+ - `runtime-local`
175
+
176
+ Provider:
177
+
178
+ - `provider-railway`
179
+ - `provider-aws`
180
+ - `provider-kubernetes`
181
+ - `provider-docker-compose`
182
+ - `provider-ssh-manual`
183
+ - `provider-custom-deploy`
184
+ - `provider-github-release`
185
+
186
+ Provider skills are configured by deploy kind, but the shipped manifests further restrict them to `deploy`, `infra`, `integration`, and `cont-qa` auto-attachment.
187
+
188
+ ## Creating or Updating a Skill
189
+
190
+ 1. Create `skills/<skill-id>/`.
191
+ 2. Add `skill.json` with at least `id`, `title`, `description`, and `activation.when`.
192
+ 3. Add `SKILL.md`.
193
+ 4. Add adapters or references only where they materially help.
194
+ 5. Register the bundle in `wave.config.json` if it should auto-attach.
195
+ 6. Add meaningful `evalCases[]`.
196
+ 7. Run `node scripts/wave.mjs doctor --json`.
197
+
198
+ ## Further Reading
199
+
200
+ - [Skills Reference](../docs/reference/skills.md)
201
+ - [Context7 vs Skills](../docs/concepts/context7-vs-skills.md)
202
+ - [What Is A Wave](../docs/concepts/what-is-a-wave.md)
@@ -1,6 +1,117 @@
1
1
  # AWS
2
2
 
3
+ <!-- CUSTOMIZE: Add your AWS account IDs, regions, service names, and IAM role ARNs below. -->
4
+
5
+ ## Core Rules
6
+
3
7
  - Name the exact AWS service, account, region, and resource involved.
4
8
  - Prefer explicit CLI or console-equivalent evidence for deployment and environment state.
5
9
  - Separate IAM or identity issues from workload health or rollout issues.
6
10
  - If AWS state is inferred indirectly, mark the proof gap instead of implying live verification.
11
+ - Always include the region in verification commands. Do not rely on default region configuration.
12
+
13
+ ## Resource Identification
14
+
15
+ Every AWS verification must specify:
16
+
17
+ - **Service type** -- ECS, Lambda, EC2, S3, CloudFront, RDS, DynamoDB, SQS, SNS, etc.
18
+ - **Account ID** -- the 12-digit AWS account number.
19
+ - **Region** -- the AWS region (e.g., `us-east-1`, `eu-west-1`).
20
+ - **Resource identifier** -- ARN, resource name, or resource ID depending on the service.
21
+
22
+ Do not use shorthand. `the ECS service` is insufficient. `ecs service my-api in cluster prod-cluster, account 123456789012, us-east-1` is correct.
23
+
24
+ ## Verification Procedures
25
+
26
+ ### ECS (Task and Service Status)
27
+
28
+ ```
29
+ aws ecs describe-services --cluster <cluster> --services <service> --region <region>
30
+ aws ecs list-tasks --cluster <cluster> --service-name <service> --region <region>
31
+ aws ecs describe-tasks --cluster <cluster> --tasks <task-arn> --region <region>
32
+ ```
33
+
34
+ Confirm: desired count matches running count, last deployment status is PRIMARY and COMPLETED, no tasks in STOPPED state with error exit codes.
35
+
36
+ ### Lambda
37
+
38
+ ```
39
+ aws lambda get-function --function-name <name> --region <region>
40
+ aws lambda invoke --function-name <name> --payload '{}' /dev/stdout --region <region>
41
+ ```
42
+
43
+ Confirm: function exists, runtime is expected version, last modified timestamp is recent if just deployed, invoke returns expected status code.
44
+
45
+ ### EC2
46
+
47
+ ```
48
+ aws ec2 describe-instances --instance-ids <id> --region <region>
49
+ ```
50
+
51
+ Confirm: instance state is `running`, status checks pass (system and instance), security groups and network configuration match expectations.
52
+
53
+ ### S3
54
+
55
+ ```
56
+ aws s3 ls s3://<bucket>/ --region <region>
57
+ aws s3api head-bucket --bucket <bucket> --region <region>
58
+ ```
59
+
60
+ Confirm: bucket exists, expected objects are present, access permissions are correct.
61
+
62
+ ### CloudWatch Metrics
63
+
64
+ ```
65
+ aws cloudwatch get-metric-statistics --namespace <ns> --metric-name <metric> --dimensions <dims> --start-time <start> --end-time <end> --period 300 --statistics Average --region <region>
66
+ ```
67
+
68
+ Use for: error rate trends, latency baselines, invocation counts, and health signal confirmation.
69
+
70
+ <!-- CUSTOMIZE: Add verification procedures for additional AWS services used in your project here. -->
71
+
72
+ ## Evidence Format
73
+
74
+ When recording AWS verification, use this structure:
75
+
76
+ ```
77
+ Service: <aws-service-type>
78
+ Resource: <ARN-or-name>
79
+ Account: <account-id>
80
+ Region: <region>
81
+ Verification Command: <exact-command-run>
82
+ Result: <summary-of-output>
83
+ Status: <healthy|degraded|failed|unknown>
84
+ Timestamp Context: <when-verified>
85
+ ```
86
+
87
+ Omit fields that were not checked. Do not fill in fields with assumed values.
88
+
89
+ ## IAM vs Workload Issues
90
+
91
+ These are different failure domains with different owners and different fixes:
92
+
93
+ ### IAM / Identity Failures
94
+
95
+ - Symptom: `AccessDenied`, `UnauthorizedAccess`, `AssumeRolePolicy` errors.
96
+ - Owner: infrastructure role (the agent or team managing IAM policies and roles).
97
+ - Fix: policy update, trust relationship change, or role assumption path correction.
98
+ - Do not conflate with app health. A Lambda may be healthy but unable to reach S3 due to a missing IAM policy.
99
+
100
+ ### Workload / Application Failures
101
+
102
+ - Symptom: crash loops, OOM kills, health check failures, timeout errors, application-level error responses.
103
+ - Owner: deploy role (the agent or team managing the application code and configuration).
104
+ - Fix: code fix, configuration change, resource scaling, or dependency resolution.
105
+
106
+ When reporting failures, classify which domain the failure belongs to. If both are present, report them as separate issues with separate owners.
107
+
108
+ ## Customization
109
+
110
+ <!-- CUSTOMIZE: Override or extend any section above. Common additions:
111
+ - AWS account IDs: production=<id>, staging=<id>
112
+ - Primary regions: <comma-separated-list>
113
+ - Service inventory: <service-type> -> <resource-name> -> <region>
114
+ - IAM role ARNs: deploy-role=<arn>, infra-role=<arn>
115
+ - CloudWatch alarm names and thresholds
116
+ - Custom health check endpoints per service
117
+ -->
@@ -0,0 +1 @@
1
+ Prefer AWS CLI commands with `--output json` for machine-readable evidence. Use MCP tools for AWS operations when available. Record exact CLI commands and JSON output excerpts as deployment proof. Separate IAM verification from workload health checks — run both but report independently.
@@ -0,0 +1 @@
1
+ Use AWS CLI commands with `--output json` for all verification. Network access may be restricted in sandbox — if AWS APIs are unreachable, record the access gap as deploy risk rather than inferring state. Keep CLI invocations deterministic and capture stdout for evidence.
@@ -0,0 +1,39 @@
1
+ # AWS Service Verification Patterns
2
+
3
+ Reference for verifying AWS deployment state per service type.
4
+
5
+ ## ECS (Elastic Container Service)
6
+ - Task status: `aws ecs describe-tasks --cluster <cluster> --tasks <task-arn>`
7
+ - Service status: `aws ecs describe-services --cluster <cluster> --services <service-name>`
8
+ - Key checks: desiredCount == runningCount, no STOPPED tasks with non-zero exit code, deployment in COMPLETED state.
9
+ - Logs: `aws logs get-log-events --log-group-name <group> --log-stream-name <stream>`
10
+
11
+ ## Lambda
12
+ - Function status: `aws lambda get-function --function-name <name>`
13
+ - Invoke test: `aws lambda invoke --function-name <name> --payload '{}' /dev/stdout`
14
+ - Key checks: State is Active, LastUpdateStatus is Successful, invoke returns expected status code.
15
+
16
+ ## EC2
17
+ - Instance status: `aws ec2 describe-instance-status --instance-ids <id>`
18
+ - Key checks: InstanceState is running, SystemStatus and InstanceStatus are ok.
19
+ - Connect test: Verify security groups allow expected ports.
20
+
21
+ ## S3
22
+ - Bucket verification: `aws s3 ls s3://<bucket>/`
23
+ - Key checks: Bucket exists, expected objects are present, ACLs/policies are correct.
24
+
25
+ ## CloudWatch
26
+ - Metrics: `aws cloudwatch get-metric-statistics --namespace <ns> --metric-name <metric> --period 300 --statistics Average`
27
+ - Alarms: `aws cloudwatch describe-alarms --alarm-names <name>`
28
+ - Key checks: No ALARM state, error rate metrics within threshold.
29
+
30
+ ## RDS
31
+ - Instance status: `aws rds describe-db-instances --db-instance-identifier <id>`
32
+ - Key checks: DBInstanceStatus is available, no pending modifications.
33
+
34
+ ## General Pattern
35
+ For any AWS service:
36
+ 1. Identify the resource ARN or name.
37
+ 2. Use the describe/get API to verify state.
38
+ 3. Check for pending operations or degraded status.
39
+ 4. Record the region, account, and exact command used as evidence.
@@ -1,5 +1,54 @@
1
1
  {
2
2
  "id": "provider-aws",
3
3
  "title": "AWS",
4
- "description": "AWS environment and rollout norms."
4
+ "description": "Guides deploy verification against AWS services: resource identification, per-service health checks, IAM vs workload issue separation, and evidence recording.",
5
+ "activation": {
6
+ "when": "Attach when the wave deploy surface is AWS and the agent must reason about AWS-specific rollout or closure state.",
7
+ "roles": [
8
+ "deploy",
9
+ "infra",
10
+ "integration",
11
+ "cont-qa"
12
+ ],
13
+ "runtimes": [],
14
+ "deployKinds": [
15
+ "aws"
16
+ ]
17
+ },
18
+ "termination": "Stop when AWS service evidence is captured or the blocking surface is isolated.",
19
+ "permissions": {
20
+ "network": [
21
+ "amazonaws.com"
22
+ ],
23
+ "shell": [
24
+ "aws"
25
+ ],
26
+ "mcpServers": []
27
+ },
28
+ "trust": {
29
+ "tier": "repo-owned"
30
+ },
31
+ "evalCases": [
32
+ {
33
+ "id": "deploy-aws",
34
+ "role": "deploy",
35
+ "runtime": "opencode",
36
+ "deployKind": "aws",
37
+ "expectActive": true
38
+ },
39
+ {
40
+ "id": "infra-aws",
41
+ "role": "infra",
42
+ "runtime": "claude",
43
+ "deployKind": "aws",
44
+ "expectActive": true
45
+ },
46
+ {
47
+ "id": "documentation-aws",
48
+ "role": "documentation",
49
+ "runtime": "claude",
50
+ "deployKind": "aws",
51
+ "expectActive": false
52
+ }
53
+ ]
5
54
  }
@@ -1,5 +1,64 @@
1
1
  # Custom Deploy
2
2
 
3
+ <!-- CUSTOMIZE: Add your custom verification commands, health endpoints, deployment scripts, and environment-specific conventions below. -->
4
+
5
+ ## Core Rules
6
+
3
7
  - Make the custom environment contract explicit before treating it as proved.
4
8
  - Name the exact verification surface, command, or operator artifact used as evidence.
5
9
  - If the environment lacks a stable verification path, record the resulting deploy risk.
10
+ - Do not borrow verification assumptions from standard providers. Custom environments have custom proof requirements.
11
+ - Every claim of "verified" must reference a concrete command, output, or artifact.
12
+
13
+ ## Contract Definition
14
+
15
+ Before claiming any deploy target is verified in a custom environment, define the contract:
16
+
17
+ 1. **Verification surface** -- what tool, command, API, or artifact serves as the source of truth for this environment's state? Name it exactly.
18
+ 2. **Healthy signal** -- what specific output, status code, or artifact state means the deploy is healthy? Define the exact match criteria.
19
+ 3. **Degraded signal** -- what output means the deploy is running but not fully healthy? Define the boundary between degraded and healthy.
20
+ 4. **Failed signal** -- what output means the deploy has failed? Define the criteria that distinguish failure from degraded.
21
+ 5. **Unknown signal** -- if the verification surface is unreachable or returns unexpected output, the state is unknown. Do not default to healthy or failed.
22
+
23
+ If any of these cannot be defined, record the gap as deploy risk before proceeding.
24
+
25
+ ## Verification Surface
26
+
27
+ Name the exact verification mechanism:
28
+
29
+ - **Command-based** -- a CLI command that returns structured output. Preferred. Record the exact command, expected output format, and how to parse healthy/degraded/failed from it.
30
+ - **API-based** -- an HTTP endpoint that returns status. Record the URL, expected status code, expected response body or fields, and authentication method.
31
+ - **Artifact-based** -- a file, database record, or log entry that serves as proof. Record the exact path or query, expected content, and how freshness is determined.
32
+ - **Process-based** -- a running process or service that can be checked. Record the process name, how to check it, and what constitutes healthy state.
33
+
34
+ Prefer verification surfaces with machine-readable output. If the only evidence is human-readable prose (e.g., a dashboard screenshot), record that as a proof quality limitation.
35
+
36
+ If no stable verification surface exists for the custom environment, this is itself a deploy risk. Record:
37
+
38
+ ```
39
+ Deploy Risk: No stable verification surface for <environment-name>.
40
+ Attempted: <what-was-tried>
41
+ Observed: <what-was-seen>
42
+ Gap: <what-remains-unknown>
43
+ ```
44
+
45
+ ## Risk Recording
46
+
47
+ When the custom environment lacks standard verification capabilities, record the full state:
48
+
49
+ 1. **What was attempted** -- the exact commands, API calls, or checks that were run.
50
+ 2. **What was observed** -- the exact output, including partial or ambiguous results.
51
+ 3. **What remains unknown** -- the specific questions that could not be answered.
52
+ 4. **Risk assessment** -- how the unknowns affect confidence in the deploy state. Be specific: "cannot confirm database migration ran" is useful; "some things are unclear" is not.
53
+
54
+ Include this risk record in the `[deploy-status]` marker detail field or as a separate coordination record.
55
+
56
+ ## Customization
57
+
58
+ <!-- CUSTOMIZE: Override or extend any section above. Common additions:
59
+ - Custom verification commands: <command> -> <expected-output>
60
+ - Health endpoints: <url> -> <expected-status> -> <expected-body>
61
+ - Deployment scripts: <script-path> -> <usage>
62
+ - Environment-specific conventions: <env-name> -> <verification-approach>
63
+ - Known proof gaps and accepted risk levels
64
+ -->
@@ -1,5 +1,50 @@
1
1
  {
2
2
  "id": "provider-custom-deploy",
3
3
  "title": "Custom Deploy",
4
- "description": "Fallback deploy norms for custom environments."
4
+ "description": "Guides custom environment verification: contract definition, verification surface identification, and deploy risk recording when standard paths are unavailable.",
5
+ "activation": {
6
+ "when": "Attach when the wave uses a custom deploy contract and the agent must make the verification surface explicit.",
7
+ "roles": [
8
+ "deploy",
9
+ "infra",
10
+ "integration",
11
+ "cont-qa"
12
+ ],
13
+ "runtimes": [],
14
+ "deployKinds": [
15
+ "custom"
16
+ ]
17
+ },
18
+ "termination": "Stop when the custom deploy contract, evidence, and residual risk are explicitly recorded.",
19
+ "permissions": {
20
+ "network": [],
21
+ "shell": [],
22
+ "mcpServers": []
23
+ },
24
+ "trust": {
25
+ "tier": "repo-owned"
26
+ },
27
+ "evalCases": [
28
+ {
29
+ "id": "deploy-custom",
30
+ "role": "deploy",
31
+ "runtime": "opencode",
32
+ "deployKind": "custom",
33
+ "expectActive": true
34
+ },
35
+ {
36
+ "id": "integration-custom",
37
+ "role": "integration",
38
+ "runtime": "claude",
39
+ "deployKind": "custom",
40
+ "expectActive": true
41
+ },
42
+ {
43
+ "id": "documentation-custom",
44
+ "role": "documentation",
45
+ "runtime": "claude",
46
+ "deployKind": "custom",
47
+ "expectActive": false
48
+ }
49
+ ]
5
50
  }
@@ -1,6 +1,96 @@
1
1
  # Docker Compose
2
2
 
3
+ <!-- CUSTOMIZE: Add your compose file paths, service names, and health check endpoints below. -->
4
+
5
+ ## Core Rules
6
+
3
7
  - Use compose file names, service names, ports, and health checks exactly.
4
8
  - Distinguish local container health from production readiness.
5
9
  - Record the exact compose commands or logs used as proof.
6
10
  - Make service dependency and readiness ordering explicit when rollout depends on it.
11
+ - Container running is not the same as application healthy. Always verify beyond container state.
12
+
13
+ ## Service Identification
14
+
15
+ Every Docker Compose verification must specify:
16
+
17
+ - **Compose file path** -- the exact path to the compose file (e.g., `docker-compose.yml`, `docker-compose.prod.yml`, `compose.yaml`).
18
+ - **Service names** -- exact names as defined in the compose file.
19
+ - **Exposed ports** -- host:container port mappings for each service.
20
+ - **Volume mounts** -- named volumes or bind mounts that carry persistent state.
21
+ - **Network names** -- custom networks defined in the compose file, if any.
22
+
23
+ Do not use shorthand. `the database service` is insufficient. `service postgres in docker-compose.yml, port 5432:5432, volume pgdata:/var/lib/postgresql/data` is correct.
24
+
25
+ ## Verification Procedures
26
+
27
+ ### Container State
28
+
29
+ ```
30
+ docker compose -f <file> ps
31
+ docker compose -f <file> ps --format json
32
+ ```
33
+
34
+ Confirm: all expected services are listed, state is `running` (not `exited`, `restarting`, or `created`), health status is `healthy` if healthcheck is defined.
35
+
36
+ ### Service Logs
37
+
38
+ ```
39
+ docker compose -f <file> logs <service> --tail=50
40
+ docker compose -f <file> logs <service> --since 5m
41
+ ```
42
+
43
+ Confirm: no fatal errors, startup completed successfully, application-level health indicators are positive.
44
+
45
+ ### Health Checks
46
+
47
+ ```
48
+ docker compose -f <file> exec <service> <health-command>
49
+ curl -s http://localhost:<port>/health
50
+ ```
51
+
52
+ Confirm: health endpoint returns expected status code and body. If the service defines a Docker healthcheck, verify it shows `healthy` in `docker compose ps`.
53
+
54
+ ### Detailed Container State
55
+
56
+ ```
57
+ docker inspect <container-name-or-id>
58
+ docker inspect --format='{{.State.Health.Status}}' <container-name-or-id>
59
+ ```
60
+
61
+ Use for: investigating restart reasons, checking exact health check output, verifying environment variables and mount points inside the container.
62
+
63
+ <!-- CUSTOMIZE: Add project-specific verification commands or health endpoints here. -->
64
+
65
+ ## Local vs Production
66
+
67
+ Do not conflate container state with application readiness:
68
+
69
+ - **Container running** -- the process started. This does not mean it is accepting requests or connected to its dependencies.
70
+ - **Container healthy** -- the Docker healthcheck passed. This confirms a basic liveness check but may not cover all application functionality.
71
+ - **Application healthy** -- the application responds correctly to real requests, is connected to all dependencies, and is processing work as expected.
72
+ - **Production ready** -- the full stack is up, all integration points are verified, and the environment matches production configuration.
73
+
74
+ When reporting status, be precise about which level of health you verified. If you only confirmed container state, say so.
75
+
76
+ ## Dependency Ordering
77
+
78
+ Compose services often depend on each other. Verify startup order:
79
+
80
+ 1. **`depends_on` declarations** -- confirm they are present in the compose file for services that need them.
81
+ 2. **Healthcheck-based readiness** -- `depends_on` with `condition: service_healthy` ensures the dependency is ready, not just started. Prefer this over bare `depends_on`.
82
+ 3. **Startup order verification** -- after `docker compose up`, check logs to confirm services started in the correct order and downstream services did not fail due to missing upstream dependencies.
83
+ 4. **Retry behavior** -- if a service connects to a dependency on startup, verify it has retry logic or that the dependency was healthy before the service started.
84
+
85
+ When dependency ordering issues cause failures, record the exact failure chain: which service failed, which dependency was not ready, and what error appeared.
86
+
87
+ ## Customization
88
+
89
+ <!-- CUSTOMIZE: Override or extend any section above. Common additions:
90
+ - Compose file paths: <comma-separated-list>
91
+ - Service names: <comma-separated-list>
92
+ - Health check endpoints: <service> -> <url>
93
+ - Required environment variables per service
94
+ - Volume backup and restore procedures
95
+ - Network topology notes
96
+ -->
@@ -0,0 +1 @@
1
+ The local runtime may have Docker access for compose verification. Use `docker compose ps` and `docker compose logs` when available. If Docker is not running, limit output to compose file validation and service definition review. Do not claim container health from file inspection alone.