@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.
- package/CHANGELOG.md +52 -3
- package/README.md +33 -5
- package/docs/README.md +18 -4
- package/docs/agents/wave-cont-eval-role.md +36 -0
- package/docs/agents/{wave-evaluator-role.md → wave-cont-qa-role.md} +14 -11
- package/docs/agents/wave-documentation-role.md +1 -1
- package/docs/agents/wave-infra-role.md +1 -1
- package/docs/agents/wave-integration-role.md +3 -3
- package/docs/agents/wave-launcher-role.md +4 -3
- package/docs/agents/wave-security-role.md +40 -0
- package/docs/concepts/context7-vs-skills.md +1 -1
- package/docs/concepts/what-is-a-wave.md +56 -6
- package/docs/evals/README.md +166 -0
- package/docs/evals/benchmark-catalog.json +663 -0
- package/docs/guides/author-and-run-waves.md +135 -0
- package/docs/guides/planner.md +5 -0
- package/docs/guides/terminal-surfaces.md +2 -0
- package/docs/plans/component-cutover-matrix.json +1 -1
- package/docs/plans/component-cutover-matrix.md +1 -1
- package/docs/plans/current-state.md +19 -1
- package/docs/plans/examples/wave-example-live-proof.md +435 -0
- package/docs/plans/migration.md +42 -0
- package/docs/plans/wave-orchestrator.md +46 -7
- package/docs/plans/waves/wave-0.md +4 -4
- package/docs/reference/live-proof-waves.md +177 -0
- package/docs/reference/migration-0.2-to-0.5.md +26 -19
- package/docs/reference/npmjs-trusted-publishing.md +6 -5
- package/docs/reference/runtime-config/README.md +14 -4
- package/docs/reference/sample-waves.md +87 -0
- package/docs/reference/skills.md +110 -42
- package/docs/research/agent-context-sources.md +130 -11
- package/docs/research/coordination-failure-review.md +266 -0
- package/docs/roadmap.md +6 -2
- package/package.json +2 -2
- package/releases/manifest.json +35 -2
- package/scripts/research/agent-context-archive.mjs +83 -1
- package/scripts/research/manifests/agent-context-expanded-2026-03-22.mjs +811 -0
- package/scripts/wave-orchestrator/adhoc.mjs +1331 -0
- package/scripts/wave-orchestrator/agent-state.mjs +358 -6
- package/scripts/wave-orchestrator/artifact-schemas.mjs +173 -0
- package/scripts/wave-orchestrator/clarification-triage.mjs +10 -3
- package/scripts/wave-orchestrator/config.mjs +48 -12
- package/scripts/wave-orchestrator/context7.mjs +2 -0
- package/scripts/wave-orchestrator/coord-cli.mjs +51 -19
- package/scripts/wave-orchestrator/coordination-store.mjs +26 -4
- package/scripts/wave-orchestrator/coordination.mjs +83 -9
- package/scripts/wave-orchestrator/dashboard-state.mjs +20 -8
- package/scripts/wave-orchestrator/dep-cli.mjs +5 -2
- package/scripts/wave-orchestrator/docs-queue.mjs +8 -2
- package/scripts/wave-orchestrator/evals.mjs +451 -0
- package/scripts/wave-orchestrator/feedback.mjs +15 -1
- package/scripts/wave-orchestrator/install.mjs +32 -9
- package/scripts/wave-orchestrator/launcher-closure.mjs +281 -0
- package/scripts/wave-orchestrator/launcher-runtime.mjs +334 -0
- package/scripts/wave-orchestrator/launcher.mjs +709 -601
- package/scripts/wave-orchestrator/ledger.mjs +123 -20
- package/scripts/wave-orchestrator/local-executor.mjs +99 -12
- package/scripts/wave-orchestrator/planner.mjs +177 -42
- package/scripts/wave-orchestrator/replay.mjs +6 -3
- package/scripts/wave-orchestrator/role-helpers.mjs +84 -0
- package/scripts/wave-orchestrator/shared.mjs +75 -11
- package/scripts/wave-orchestrator/skills.mjs +637 -106
- package/scripts/wave-orchestrator/traces.mjs +71 -48
- package/scripts/wave-orchestrator/wave-files.mjs +947 -101
- package/scripts/wave.mjs +9 -0
- package/skills/README.md +202 -0
- package/skills/provider-aws/SKILL.md +111 -0
- package/skills/provider-aws/adapters/claude.md +1 -0
- package/skills/provider-aws/adapters/codex.md +1 -0
- package/skills/provider-aws/references/service-verification.md +39 -0
- package/skills/provider-aws/skill.json +50 -1
- package/skills/provider-custom-deploy/SKILL.md +59 -0
- package/skills/provider-custom-deploy/skill.json +46 -1
- package/skills/provider-docker-compose/SKILL.md +90 -0
- package/skills/provider-docker-compose/adapters/local.md +1 -0
- package/skills/provider-docker-compose/skill.json +49 -1
- package/skills/provider-github-release/SKILL.md +116 -1
- package/skills/provider-github-release/adapters/claude.md +1 -0
- package/skills/provider-github-release/adapters/codex.md +1 -0
- package/skills/provider-github-release/skill.json +51 -1
- package/skills/provider-kubernetes/SKILL.md +137 -0
- package/skills/provider-kubernetes/adapters/claude.md +1 -0
- package/skills/provider-kubernetes/adapters/codex.md +1 -0
- package/skills/provider-kubernetes/references/kubectl-patterns.md +58 -0
- package/skills/provider-kubernetes/skill.json +48 -1
- package/skills/provider-railway/SKILL.md +118 -1
- package/skills/provider-railway/references/verification-commands.md +39 -0
- package/skills/provider-railway/skill.json +67 -1
- package/skills/provider-ssh-manual/SKILL.md +91 -0
- package/skills/provider-ssh-manual/skill.json +50 -1
- package/skills/repo-coding-rules/SKILL.md +84 -0
- package/skills/repo-coding-rules/skill.json +30 -1
- package/skills/role-cont-eval/SKILL.md +90 -0
- package/skills/role-cont-eval/adapters/codex.md +1 -0
- package/skills/role-cont-eval/skill.json +36 -0
- package/skills/role-cont-qa/SKILL.md +93 -0
- package/skills/role-cont-qa/adapters/claude.md +1 -0
- package/skills/role-cont-qa/skill.json +36 -0
- package/skills/role-deploy/SKILL.md +90 -0
- package/skills/role-deploy/skill.json +32 -1
- package/skills/role-documentation/SKILL.md +66 -0
- package/skills/role-documentation/skill.json +32 -1
- package/skills/role-implementation/SKILL.md +62 -0
- package/skills/role-implementation/skill.json +32 -1
- package/skills/role-infra/SKILL.md +74 -0
- package/skills/role-infra/skill.json +32 -1
- package/skills/role-integration/SKILL.md +79 -1
- package/skills/role-integration/skill.json +32 -1
- package/skills/role-research/SKILL.md +58 -0
- package/skills/role-research/skill.json +32 -1
- package/skills/role-security/SKILL.md +60 -0
- package/skills/role-security/skill.json +36 -0
- package/skills/runtime-claude/SKILL.md +60 -1
- package/skills/runtime-claude/skill.json +32 -1
- package/skills/runtime-codex/SKILL.md +52 -1
- package/skills/runtime-codex/skill.json +32 -1
- package/skills/runtime-local/SKILL.md +39 -0
- package/skills/runtime-local/skill.json +32 -1
- package/skills/runtime-opencode/SKILL.md +51 -0
- package/skills/runtime-opencode/skill.json +32 -1
- package/skills/wave-core/SKILL.md +107 -0
- package/skills/wave-core/references/marker-syntax.md +62 -0
- package/skills/wave-core/skill.json +31 -1
- package/wave.config.json +35 -6
- package/skills/role-evaluator/SKILL.md +0 -6
- package/skills/role-evaluator/skill.json +0 -5
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "provider-docker-compose",
|
|
3
3
|
"title": "Docker Compose",
|
|
4
|
-
"description": "Docker Compose
|
|
4
|
+
"description": "Guides deploy verification against Docker Compose services: container health, local vs production readiness distinction, and dependency ordering.",
|
|
5
|
+
"activation": {
|
|
6
|
+
"when": "Attach when the wave deploy surface is Docker Compose and the agent must reason about service/container health ordering.",
|
|
7
|
+
"roles": [
|
|
8
|
+
"deploy",
|
|
9
|
+
"infra",
|
|
10
|
+
"integration",
|
|
11
|
+
"cont-qa"
|
|
12
|
+
],
|
|
13
|
+
"runtimes": [],
|
|
14
|
+
"deployKinds": [
|
|
15
|
+
"docker-compose"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"termination": "Stop when container health evidence and dependency ordering are explicit.",
|
|
19
|
+
"permissions": {
|
|
20
|
+
"network": [],
|
|
21
|
+
"shell": [
|
|
22
|
+
"docker",
|
|
23
|
+
"docker-compose"
|
|
24
|
+
],
|
|
25
|
+
"mcpServers": []
|
|
26
|
+
},
|
|
27
|
+
"trust": {
|
|
28
|
+
"tier": "repo-owned"
|
|
29
|
+
},
|
|
30
|
+
"evalCases": [
|
|
31
|
+
{
|
|
32
|
+
"id": "deploy-docker-compose",
|
|
33
|
+
"role": "deploy",
|
|
34
|
+
"runtime": "opencode",
|
|
35
|
+
"deployKind": "docker-compose",
|
|
36
|
+
"expectActive": true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "cont-qa-docker-compose",
|
|
40
|
+
"role": "cont-qa",
|
|
41
|
+
"runtime": "claude",
|
|
42
|
+
"deployKind": "docker-compose",
|
|
43
|
+
"expectActive": true
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "documentation-docker-compose",
|
|
47
|
+
"role": "documentation",
|
|
48
|
+
"runtime": "claude",
|
|
49
|
+
"deployKind": "docker-compose",
|
|
50
|
+
"expectActive": false
|
|
51
|
+
}
|
|
52
|
+
]
|
|
5
53
|
}
|
|
@@ -1,6 +1,121 @@
|
|
|
1
1
|
# GitHub Release
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<!-- CUSTOMIZE: Add your tag naming convention, required assets, release note template, and dependent deploys below. -->
|
|
4
|
+
|
|
5
|
+
## Core Rules
|
|
6
|
+
|
|
7
|
+
- Keep tag names, release IDs, asset names, and notes exact.
|
|
4
8
|
- Distinguish draft, prerelease, and published release state explicitly.
|
|
5
9
|
- Treat release notes, attached artifacts, and publication state as separate proof surfaces.
|
|
6
10
|
- If publication depends on another deploy system, keep that dependency explicit.
|
|
11
|
+
- Do not claim "released" until the release is published (not draft), all required assets are uploaded, and dependent deploys are confirmed.
|
|
12
|
+
|
|
13
|
+
## Release State Model
|
|
14
|
+
|
|
15
|
+
GitHub releases have three distinct states. Each is a separate proof surface:
|
|
16
|
+
|
|
17
|
+
### Draft
|
|
18
|
+
|
|
19
|
+
- Not visible to the public.
|
|
20
|
+
- Editable: notes, assets, tag, and title can all be modified.
|
|
21
|
+
- Use drafts for staging releases before all verification is complete.
|
|
22
|
+
- A draft release is NOT a published release. Do not emit success markers for draft state.
|
|
23
|
+
|
|
24
|
+
### Prerelease
|
|
25
|
+
|
|
26
|
+
- Visible to the public but flagged as prerelease.
|
|
27
|
+
- Appears in the releases list with a "Pre-release" badge.
|
|
28
|
+
- Use for release candidates, beta builds, or staged rollouts.
|
|
29
|
+
- A prerelease is public but carries an explicit "not stable" signal.
|
|
30
|
+
|
|
31
|
+
### Published
|
|
32
|
+
|
|
33
|
+
- Full release, visible to all users.
|
|
34
|
+
- Appears as the "Latest release" if it has the highest semver tag (unless another release is pinned).
|
|
35
|
+
- This is the only state that satisfies "release complete" in exit contracts.
|
|
36
|
+
|
|
37
|
+
When reporting release state, name which of the three states the release is in. Do not use ambiguous terms like "created" or "exists."
|
|
38
|
+
|
|
39
|
+
## Verification Procedures
|
|
40
|
+
|
|
41
|
+
### Release Status
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
gh release view <tag> --repo <owner/repo>
|
|
45
|
+
gh release view <tag> --repo <owner/repo> --json tagName,isDraft,isPrerelease,publishedAt,name
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Confirm: release exists, state matches expectations (draft/prerelease/published), tag is correct, title and body are present.
|
|
49
|
+
|
|
50
|
+
### Tag Existence
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
git tag -l <tag>
|
|
54
|
+
gh api repos/<owner>/<repo>/git/refs/tags/<tag>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Confirm: tag exists in the repository, points to the correct commit. If the tag does not exist, the release cannot be finalized.
|
|
58
|
+
|
|
59
|
+
### Asset Listing
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
gh release view <tag> --repo <owner/repo> --json assets
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Confirm: all required assets are listed, each asset has size > 0, names match expected conventions. If checksums are required, verify checksum files are present.
|
|
66
|
+
|
|
67
|
+
### Release Notes Content
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
gh release view <tag> --repo <owner/repo> --json body
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Confirm: release notes contain required sections (changelog, breaking changes, migration notes as applicable), no placeholder text remains, links are valid.
|
|
74
|
+
|
|
75
|
+
<!-- CUSTOMIZE: Add your project-specific verification commands or asset naming conventions here. -->
|
|
76
|
+
|
|
77
|
+
## Asset Management
|
|
78
|
+
|
|
79
|
+
Verify each asset individually:
|
|
80
|
+
|
|
81
|
+
1. **Presence** -- the asset appears in the asset list with the expected name.
|
|
82
|
+
2. **Size** -- the asset size is greater than zero. A zero-byte asset indicates an upload failure.
|
|
83
|
+
3. **Checksum** -- if the project requires checksums (SHA256, MD5), verify the checksum file is present and its content matches the corresponding asset.
|
|
84
|
+
4. **Content type** -- if specific MIME types are expected, verify them.
|
|
85
|
+
|
|
86
|
+
Do not claim the release is complete until all required assets are uploaded and verified. If any asset is missing or zero-byte, the release is incomplete.
|
|
87
|
+
|
|
88
|
+
Upload assets using:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
gh release upload <tag> <file> --repo <owner/repo>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Cross-System Dependencies
|
|
95
|
+
|
|
96
|
+
Releases often depend on other systems being in a verified state before publication:
|
|
97
|
+
|
|
98
|
+
- **Deployment dependency** -- if the release depends on a successful deploy (e.g., Railway, AWS, npm), verify the deploy is healthy before publishing the release.
|
|
99
|
+
- **Registry dependency** -- if the release includes a package published to npm, PyPI, or another registry, verify the package is available in the registry before publishing the GitHub release.
|
|
100
|
+
- **CI dependency** -- if the release requires CI checks to pass on the release commit, verify all required checks are green.
|
|
101
|
+
|
|
102
|
+
Keep each dependency explicit:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Dependency: <system> must be <state> before release can be published.
|
|
106
|
+
Status: <verified|pending|failed>
|
|
107
|
+
Evidence: <how-verified>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Do not publish a release with unverified dependencies. Record the unverified dependency as a blocker.
|
|
111
|
+
|
|
112
|
+
## Customization
|
|
113
|
+
|
|
114
|
+
<!-- CUSTOMIZE: Override or extend any section above. Common additions:
|
|
115
|
+
- Tag naming convention: v<major>.<minor>.<patch>, v<major>.<minor>.<patch>-rc.<n>
|
|
116
|
+
- Required assets: <comma-separated-list-of-filenames>
|
|
117
|
+
- Checksum requirements: SHA256, MD5, none
|
|
118
|
+
- Release note template sections: Changelog, Breaking Changes, Migration Guide
|
|
119
|
+
- Dependent deploys: <system> -> <verification-command>
|
|
120
|
+
- Auto-publish conditions: all CI checks green + all assets uploaded
|
|
121
|
+
-->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Prefer the `gh` CLI for release operations: `gh release view`, `gh release create`, `gh release upload`. Use `--json` flag for machine-readable output. Verify tag existence with `git tag -l` before creating releases. Use MCP GitHub tools when available for issue and PR cross-references.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use the `gh` CLI with `--json` for release verification. If `gh` is not available in the sandbox, use `git tag -l` for tag verification and record the release verification gap. Keep all release operations deterministic and non-interactive.
|
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "provider-github-release",
|
|
3
3
|
"title": "GitHub Release",
|
|
4
|
-
"description": "GitHub release
|
|
4
|
+
"description": "Guides GitHub release verification: release state model, asset management, tag and publication proof, and cross-system dependency tracking.",
|
|
5
|
+
"activation": {
|
|
6
|
+
"when": "Attach when the wave deploy surface is a GitHub Release and the agent must verify publication state, tags, and assets.",
|
|
7
|
+
"roles": [
|
|
8
|
+
"deploy",
|
|
9
|
+
"infra",
|
|
10
|
+
"integration",
|
|
11
|
+
"cont-qa"
|
|
12
|
+
],
|
|
13
|
+
"runtimes": [],
|
|
14
|
+
"deployKinds": [
|
|
15
|
+
"github-release"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"termination": "Stop when release publication evidence is captured and cross-system dependencies are explicit.",
|
|
19
|
+
"permissions": {
|
|
20
|
+
"network": [
|
|
21
|
+
"github.com"
|
|
22
|
+
],
|
|
23
|
+
"shell": [
|
|
24
|
+
"gh",
|
|
25
|
+
"git"
|
|
26
|
+
],
|
|
27
|
+
"mcpServers": []
|
|
28
|
+
},
|
|
29
|
+
"trust": {
|
|
30
|
+
"tier": "repo-owned"
|
|
31
|
+
},
|
|
32
|
+
"evalCases": [
|
|
33
|
+
{
|
|
34
|
+
"id": "deploy-github-release",
|
|
35
|
+
"role": "deploy",
|
|
36
|
+
"runtime": "opencode",
|
|
37
|
+
"deployKind": "github-release",
|
|
38
|
+
"expectActive": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "integration-github-release",
|
|
42
|
+
"role": "integration",
|
|
43
|
+
"runtime": "claude",
|
|
44
|
+
"deployKind": "github-release",
|
|
45
|
+
"expectActive": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "documentation-github-release",
|
|
49
|
+
"role": "documentation",
|
|
50
|
+
"runtime": "claude",
|
|
51
|
+
"deployKind": "github-release",
|
|
52
|
+
"expectActive": false
|
|
53
|
+
}
|
|
54
|
+
]
|
|
5
55
|
}
|
|
@@ -1,6 +1,143 @@
|
|
|
1
1
|
# Kubernetes
|
|
2
2
|
|
|
3
|
+
<!-- CUSTOMIZE: Add your cluster names, namespaces, workload names, and health probe paths below. -->
|
|
4
|
+
|
|
5
|
+
## Core Rules
|
|
6
|
+
|
|
3
7
|
- Name the exact cluster, namespace, workload, and rollout surface involved.
|
|
4
8
|
- Prefer explicit `kubectl` state, health, and event evidence over generic rollout notes.
|
|
5
9
|
- Distinguish manifest drift, admission failure, image failure, and readiness failure.
|
|
6
10
|
- If rollback or restart is involved, make the operator-visible recovery posture explicit.
|
|
11
|
+
- Always specify `--context` or `--kubeconfig` when multiple clusters are accessible.
|
|
12
|
+
|
|
13
|
+
## Resource Identification
|
|
14
|
+
|
|
15
|
+
Every Kubernetes verification must specify:
|
|
16
|
+
|
|
17
|
+
- **Cluster name** -- the cluster context name as it appears in kubeconfig.
|
|
18
|
+
- **Namespace** -- the Kubernetes namespace. Never omit this; do not rely on the default namespace.
|
|
19
|
+
- **Workload type** -- Deployment, StatefulSet, DaemonSet, Job, CronJob, or bare Pod.
|
|
20
|
+
- **Resource name** -- the exact name of the workload resource.
|
|
21
|
+
|
|
22
|
+
Example: `Deployment api-server in namespace production, cluster prod-us-east-1`.
|
|
23
|
+
|
|
24
|
+
## Verification Procedures
|
|
25
|
+
|
|
26
|
+
### Pod State
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
kubectl get pods -n <namespace> -l app=<label> --context <cluster>
|
|
30
|
+
kubectl describe pod <pod-name> -n <namespace> --context <cluster>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Confirm: all pods in `Running` state, restart count is zero or stable, no pods in `CrashLoopBackOff`, `ImagePullBackOff`, or `Pending`.
|
|
34
|
+
|
|
35
|
+
### Deployment and Rollout
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
kubectl get deploy <name> -n <namespace> --context <cluster>
|
|
39
|
+
kubectl rollout status deploy/<name> -n <namespace> --context <cluster>
|
|
40
|
+
kubectl get replicasets -n <namespace> -l app=<label> --context <cluster>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Confirm: desired replicas match ready replicas, rollout is complete (not progressing or stalled), only one active ReplicaSet for the current revision.
|
|
44
|
+
|
|
45
|
+
### Services and Endpoints
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
kubectl get svc <name> -n <namespace> --context <cluster>
|
|
49
|
+
kubectl get endpoints <name> -n <namespace> --context <cluster>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Confirm: service exists, endpoints list is non-empty and matches expected pod count, port mappings are correct.
|
|
53
|
+
|
|
54
|
+
### Events
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
kubectl get events -n <namespace> --sort-by=.lastTimestamp --context <cluster>
|
|
58
|
+
kubectl describe deploy <name> -n <namespace> --context <cluster>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Check for: `FailedScheduling`, `FailedMount`, `Unhealthy`, `BackOff`, `FailedCreate`, or admission webhook rejection events.
|
|
62
|
+
|
|
63
|
+
### Application Logs
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
kubectl logs deploy/<name> -n <namespace> --tail=100 --context <cluster>
|
|
67
|
+
kubectl logs <pod-name> -n <namespace> -c <container> --tail=100 --context <cluster>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Confirm: no unhandled exceptions, startup completed successfully, application-level health indicators are positive.
|
|
71
|
+
|
|
72
|
+
<!-- CUSTOMIZE: Add verification procedures for Ingress, HPA, PDB, ConfigMaps, or Secrets checks specific to your project here. -->
|
|
73
|
+
|
|
74
|
+
## Failure Classification
|
|
75
|
+
|
|
76
|
+
Classify Kubernetes failures precisely:
|
|
77
|
+
|
|
78
|
+
### Manifest Drift
|
|
79
|
+
|
|
80
|
+
- Desired spec does not match actual running state.
|
|
81
|
+
- Symptom: `kubectl diff` shows changes, ReplicaSet count mismatch, container image tag differs from expected.
|
|
82
|
+
- Fix: re-apply manifests or investigate what modified the live state.
|
|
83
|
+
|
|
84
|
+
### Admission Failure
|
|
85
|
+
|
|
86
|
+
- Webhook or policy controller rejected the resource creation or update.
|
|
87
|
+
- Symptom: events show `admission webhook denied`, OPA/Gatekeeper/Kyverno policy violation.
|
|
88
|
+
- Fix: update the manifest to comply with policy, or update the policy if the manifest is correct.
|
|
89
|
+
|
|
90
|
+
### Image Failure
|
|
91
|
+
|
|
92
|
+
- Container image cannot be pulled or crashes immediately on start.
|
|
93
|
+
- Symptom: `ImagePullBackOff` (registry auth, image not found, tag not found) or `CrashLoopBackOff` (image starts and exits non-zero).
|
|
94
|
+
- Fix: verify image exists in registry, check pull secrets, check application startup for fatal errors.
|
|
95
|
+
|
|
96
|
+
### Readiness Failure
|
|
97
|
+
|
|
98
|
+
- Pod is running but not passing readiness probes.
|
|
99
|
+
- Symptom: pod shows `Running` but `0/1 Ready`, endpoints list is empty, service returns 503.
|
|
100
|
+
- Fix: check readiness probe configuration (path, port, timeout), check application health endpoint, check dependencies the app needs at startup.
|
|
101
|
+
|
|
102
|
+
Name the failure type explicitly in the `[deploy-status]` marker detail field.
|
|
103
|
+
|
|
104
|
+
## Recovery Posture
|
|
105
|
+
|
|
106
|
+
### Rollback
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
kubectl rollout undo deploy/<name> -n <namespace> --context <cluster>
|
|
110
|
+
kubectl rollout status deploy/<name> -n <namespace> --context <cluster>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Use when: the current revision is unhealthy and the previous revision was known healthy. Verify the rollback completes and pods are ready.
|
|
114
|
+
|
|
115
|
+
### Restart
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
kubectl rollout restart deploy/<name> -n <namespace> --context <cluster>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Use when: the current revision should be correct but pods are in a bad state (stale connections, resource exhaustion, transient failure). This re-creates pods with the same spec.
|
|
122
|
+
|
|
123
|
+
### Scale Adjustment
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
kubectl scale deploy/<name> --replicas=<n> -n <namespace> --context <cluster>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Use when: the issue is capacity-related (OOM, CPU throttling, request queuing). Scale up to relieve pressure, then investigate root cause.
|
|
130
|
+
|
|
131
|
+
After any recovery action, re-verify using the procedures above and emit the appropriate `[deploy-status]` marker.
|
|
132
|
+
|
|
133
|
+
## Customization
|
|
134
|
+
|
|
135
|
+
<!-- CUSTOMIZE: Override or extend any section above. Common additions:
|
|
136
|
+
- Cluster names: prod=<context>, staging=<context>
|
|
137
|
+
- Namespaces: <comma-separated-list>
|
|
138
|
+
- Workload inventory: <namespace>/<type>/<name>
|
|
139
|
+
- Health probe paths: <workload> -> <path>
|
|
140
|
+
- Ingress hostnames and TLS configuration
|
|
141
|
+
- HPA scaling thresholds
|
|
142
|
+
- PDB minimum availability requirements
|
|
143
|
+
-->
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use kubectl with `-o json` or `-o wide` for machine-readable verification output. For complex diagnostics, use the Agent tool to run parallel kubectl commands across namespaces. Prefer `kubectl rollout status` with `--timeout` over polling pod status manually.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Use kubectl with `-o json` for all verification. Keep kubectl commands deterministic and non-interactive. If kubeconfig is not available in the sandbox, record the access gap as deploy risk. Capture full command output for evidence.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Kubernetes Verification Patterns
|
|
2
|
+
|
|
3
|
+
Reference for verifying Kubernetes workload state using kubectl.
|
|
4
|
+
|
|
5
|
+
## Workload Health
|
|
6
|
+
- Deployment status: `kubectl -n <ns> get deploy <name> -o wide`
|
|
7
|
+
- Pod status: `kubectl -n <ns> get pods -l app=<label> -o wide`
|
|
8
|
+
- Rollout status: `kubectl -n <ns> rollout status deploy/<name> --timeout=120s`
|
|
9
|
+
- Key checks: READY count matches DESIRED, all pods Running, no restarts.
|
|
10
|
+
|
|
11
|
+
## Pod Diagnostics
|
|
12
|
+
- Events: `kubectl -n <ns> describe pod <name>` (check Events section)
|
|
13
|
+
- Logs: `kubectl -n <ns> logs <pod> -c <container> --tail=100`
|
|
14
|
+
- Previous logs (after crash): `kubectl -n <ns> logs <pod> -c <container> --previous`
|
|
15
|
+
- Resource usage: `kubectl -n <ns> top pod <name>`
|
|
16
|
+
|
|
17
|
+
## Service and Networking
|
|
18
|
+
- Service endpoints: `kubectl -n <ns> get endpoints <svc-name>`
|
|
19
|
+
- Service details: `kubectl -n <ns> describe svc <name>`
|
|
20
|
+
- Key checks: Endpoints list has pod IPs, port mappings are correct.
|
|
21
|
+
|
|
22
|
+
## Failure Patterns
|
|
23
|
+
|
|
24
|
+
### Image Pull Failure
|
|
25
|
+
- Symptom: Pod stuck in ImagePullBackOff or ErrImagePull.
|
|
26
|
+
- Diagnose: `kubectl -n <ns> describe pod <name>` → Events show pull error.
|
|
27
|
+
- Fix: Check image name/tag, registry credentials, network access.
|
|
28
|
+
|
|
29
|
+
### Crash Loop
|
|
30
|
+
- Symptom: Pod in CrashLoopBackOff, restart count increasing.
|
|
31
|
+
- Diagnose: `kubectl -n <ns> logs <pod> --previous` → Check exit reason.
|
|
32
|
+
- Fix: Application error, missing config, resource limits too tight.
|
|
33
|
+
|
|
34
|
+
### Readiness Probe Failure
|
|
35
|
+
- Symptom: Pod Running but not Ready (0/1).
|
|
36
|
+
- Diagnose: `kubectl -n <ns> describe pod <name>` → Readiness probe failed.
|
|
37
|
+
- Fix: Check probe path/port, application startup time, increase initialDelaySeconds.
|
|
38
|
+
|
|
39
|
+
### Admission Webhook Rejection
|
|
40
|
+
- Symptom: Pod creation fails immediately.
|
|
41
|
+
- Diagnose: `kubectl -n <ns> get events --field-selector reason=FailedCreate`
|
|
42
|
+
- Fix: Check webhook policies, pod security standards, resource quotas.
|
|
43
|
+
|
|
44
|
+
## Rollback and Recovery
|
|
45
|
+
- Rollback: `kubectl -n <ns> rollout undo deploy/<name>`
|
|
46
|
+
- Rollback to specific revision: `kubectl -n <ns> rollout undo deploy/<name> --to-revision=<n>`
|
|
47
|
+
- Restart (rolling): `kubectl -n <ns> rollout restart deploy/<name>`
|
|
48
|
+
- Scale: `kubectl -n <ns> scale deploy/<name> --replicas=<n>`
|
|
49
|
+
- Pause rollout: `kubectl -n <ns> rollout pause deploy/<name>`
|
|
50
|
+
|
|
51
|
+
## Evidence Template
|
|
52
|
+
Record for each verification:
|
|
53
|
+
- Cluster: <name>
|
|
54
|
+
- Namespace: <ns>
|
|
55
|
+
- Resource: <type>/<name>
|
|
56
|
+
- Command: <exact kubectl command>
|
|
57
|
+
- Result: <key output fields>
|
|
58
|
+
- Assessment: <healthy|degraded|failed>
|
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "provider-kubernetes",
|
|
3
3
|
"title": "Kubernetes",
|
|
4
|
-
"description": "Kubernetes
|
|
4
|
+
"description": "Guides deploy verification against Kubernetes clusters: workload health, failure classification across manifest, admission, image, and readiness surfaces.",
|
|
5
|
+
"activation": {
|
|
6
|
+
"when": "Attach when the wave deploy surface is Kubernetes and the agent must classify workload, admission, image, or readiness failures.",
|
|
7
|
+
"roles": [
|
|
8
|
+
"deploy",
|
|
9
|
+
"infra",
|
|
10
|
+
"integration",
|
|
11
|
+
"cont-qa"
|
|
12
|
+
],
|
|
13
|
+
"runtimes": [],
|
|
14
|
+
"deployKinds": [
|
|
15
|
+
"kubernetes"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"termination": "Stop when Kubernetes workload evidence is captured and the failure surface is classified.",
|
|
19
|
+
"permissions": {
|
|
20
|
+
"network": [],
|
|
21
|
+
"shell": [
|
|
22
|
+
"kubectl"
|
|
23
|
+
],
|
|
24
|
+
"mcpServers": []
|
|
25
|
+
},
|
|
26
|
+
"trust": {
|
|
27
|
+
"tier": "repo-owned"
|
|
28
|
+
},
|
|
29
|
+
"evalCases": [
|
|
30
|
+
{
|
|
31
|
+
"id": "deploy-kubernetes",
|
|
32
|
+
"role": "deploy",
|
|
33
|
+
"runtime": "opencode",
|
|
34
|
+
"deployKind": "kubernetes",
|
|
35
|
+
"expectActive": true
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "infra-kubernetes",
|
|
39
|
+
"role": "infra",
|
|
40
|
+
"runtime": "claude",
|
|
41
|
+
"deployKind": "kubernetes",
|
|
42
|
+
"expectActive": true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "documentation-kubernetes",
|
|
46
|
+
"role": "documentation",
|
|
47
|
+
"runtime": "claude",
|
|
48
|
+
"deployKind": "kubernetes",
|
|
49
|
+
"expectActive": false
|
|
50
|
+
}
|
|
51
|
+
]
|
|
5
52
|
}
|
|
@@ -1,6 +1,123 @@
|
|
|
1
1
|
# Railway
|
|
2
2
|
|
|
3
|
+
<!-- CUSTOMIZE: Add your Railway project ID, service names, environment names, and domain mappings below. -->
|
|
4
|
+
|
|
5
|
+
## Core Rules
|
|
6
|
+
|
|
3
7
|
- Prefer the Railway MCP or Railway CLI as the source of truth for deployment, environment, and service state.
|
|
4
|
-
- Keep service names, environment names, domains, and deployment
|
|
8
|
+
- Keep service names, environment names, domains, and deployment IDs exact.
|
|
5
9
|
- Record what was verified: build logs, deploy logs, variables, domains, or rollout state.
|
|
6
10
|
- If Railway state is degraded or ambiguous, leave a concrete deploy risk instead of implying healthy rollout.
|
|
11
|
+
- Do not treat a successful build as proof of a healthy deploy. Build and deploy are separate proof surfaces.
|
|
12
|
+
|
|
13
|
+
## Source of Truth
|
|
14
|
+
|
|
15
|
+
Use these sources in preference order:
|
|
16
|
+
|
|
17
|
+
1. **Railway MCP** -- highest fidelity. Use MCP tools when available for service state, deploy status, and variable queries.
|
|
18
|
+
2. **Railway CLI** -- direct CLI commands when MCP is not available. Requires `railway` CLI authenticated and linked to the correct project.
|
|
19
|
+
3. **Railway Dashboard** -- lowest preference. Use only when CLI and MCP are both unavailable. Dashboard observations must be recorded with explicit timestamps.
|
|
20
|
+
|
|
21
|
+
Never mix sources for a single verification claim. State which source you used.
|
|
22
|
+
|
|
23
|
+
## Verification Procedures
|
|
24
|
+
|
|
25
|
+
### Service List and Status
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
railway status
|
|
29
|
+
railway service list
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Confirm: service exists, is linked to the correct project and environment, current deploy state.
|
|
33
|
+
|
|
34
|
+
### Deploy Status
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
railway logs --deploy
|
|
38
|
+
railway logs --build
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Confirm: latest deployment ID, build success or failure, deploy health (running, crashed, pending).
|
|
42
|
+
|
|
43
|
+
### Environment Variables
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
railway variables
|
|
47
|
+
railway variables --environment <env-name>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Confirm: required variables are set, no placeholder or empty values for critical keys, no secret leakage in logs.
|
|
51
|
+
|
|
52
|
+
### Domain Bindings
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
railway domain
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Confirm: custom domains are bound, SSL provisioned, no dangling or conflicting bindings.
|
|
59
|
+
|
|
60
|
+
### Health Verification
|
|
61
|
+
|
|
62
|
+
After confirming deploy status, verify the application is responding:
|
|
63
|
+
|
|
64
|
+
- Check the service URL or custom domain with a health endpoint.
|
|
65
|
+
- Confirm HTTP status code and response body match expectations.
|
|
66
|
+
- If health check fails but deploy shows running, classify as deploy-healthy-but-app-unhealthy.
|
|
67
|
+
|
|
68
|
+
<!-- CUSTOMIZE: Add your project-specific health endpoints, expected responses, and timeout thresholds here. -->
|
|
69
|
+
|
|
70
|
+
## Evidence Format
|
|
71
|
+
|
|
72
|
+
When recording Railway verification, use this structure:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Service: <exact-service-name>
|
|
76
|
+
Environment: <environment-name>
|
|
77
|
+
Deploy ID: <deploy-id>
|
|
78
|
+
Deploy Status: <building|deploying|running|crashed|removed>
|
|
79
|
+
Build Status: <success|failed|pending>
|
|
80
|
+
Domains: <comma-separated-domain-list>
|
|
81
|
+
Health: <healthy|unhealthy|unknown>
|
|
82
|
+
Variables Confirmed: <yes|partial|no>
|
|
83
|
+
Source: <MCP|CLI|Dashboard>
|
|
84
|
+
Timestamp Context: <when-verified>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Omit fields that were not checked. Do not fill in fields with assumed values.
|
|
88
|
+
|
|
89
|
+
## Failure Classification
|
|
90
|
+
|
|
91
|
+
Classify Railway failures precisely:
|
|
92
|
+
|
|
93
|
+
- **Build failure** -- Nixpacks or Dockerfile build step failed. Check build logs for the exact error. Common causes: missing dependency, invalid Dockerfile, incompatible runtime version.
|
|
94
|
+
- **Deploy failure** -- build succeeded but the service crashed on startup. Check deploy logs for crash loop, port binding failure, or missing environment variable.
|
|
95
|
+
- **Domain failure** -- service is running but the domain is not resolving, SSL is not provisioned, or the domain binding is missing.
|
|
96
|
+
- **Variable drift** -- expected environment variables are missing, empty, or have unexpected values. Compare against the wave definition or config source.
|
|
97
|
+
- **Region/resource failure** -- service is pending due to resource constraints or region availability.
|
|
98
|
+
|
|
99
|
+
Name the failure type explicitly in the `[deploy-status]` marker detail field.
|
|
100
|
+
|
|
101
|
+
## Rollback
|
|
102
|
+
|
|
103
|
+
When a deploy fails and rollback is needed:
|
|
104
|
+
|
|
105
|
+
1. Identify the last known healthy deployment ID from deploy logs or service history.
|
|
106
|
+
2. Redeploy the previous version using `railway rollback` or by redeploying the previous commit.
|
|
107
|
+
3. Verify the rollback deploy reaches running state and health checks pass.
|
|
108
|
+
4. If variables were changed as part of the failed deploy, revert them explicitly.
|
|
109
|
+
5. Emit `[deploy-status] state=rolled-back service=<name> detail=<reason and target deploy ID>`.
|
|
110
|
+
|
|
111
|
+
Trigger rollback when: service is crash-looping, health checks fail after a reasonable timeout, or the task explicitly requests rollback.
|
|
112
|
+
|
|
113
|
+
## Customization
|
|
114
|
+
|
|
115
|
+
<!-- CUSTOMIZE: Override or extend any section above. Common additions:
|
|
116
|
+
- Railway project ID: <your-project-id>
|
|
117
|
+
- Service names: <comma-separated-list>
|
|
118
|
+
- Environment names: production, staging, development
|
|
119
|
+
- Domain mappings: <service> -> <domain>
|
|
120
|
+
- Health check endpoints: <service> -> <path>
|
|
121
|
+
- Required environment variables per service
|
|
122
|
+
- Build timeout thresholds
|
|
123
|
+
-->
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Railway Verification Commands
|
|
2
|
+
|
|
3
|
+
Reference for verifying Railway deployment state. Prefer MCP when available; fall back to CLI.
|
|
4
|
+
|
|
5
|
+
## Service Discovery
|
|
6
|
+
- MCP: Use railway_service_list to enumerate all services in the project.
|
|
7
|
+
- CLI: `railway service list`
|
|
8
|
+
|
|
9
|
+
## Deploy Status
|
|
10
|
+
- MCP: Use railway_deployment_list with service ID to see recent deployments.
|
|
11
|
+
- CLI: `railway status`
|
|
12
|
+
- Key fields: deployment ID, status (SUCCESS/BUILDING/DEPLOYING/FAILED/CRASHED), created timestamp.
|
|
13
|
+
|
|
14
|
+
## Build Logs
|
|
15
|
+
- MCP: Use railway_deployment_logs with deployment ID.
|
|
16
|
+
- CLI: `railway logs --deployment <id>`
|
|
17
|
+
- Look for: build completion, Nixpacks/Dockerfile detection, dependency install success, start command.
|
|
18
|
+
|
|
19
|
+
## Environment Variables
|
|
20
|
+
- MCP: Use railway_variable_list with service and environment IDs.
|
|
21
|
+
- CLI: `railway variables`
|
|
22
|
+
- Verify: required variables are set, no stale values, no accidentally exposed secrets.
|
|
23
|
+
|
|
24
|
+
## Domain Bindings
|
|
25
|
+
- MCP: Use railway_custom_domain_list or railway_service_domain_list.
|
|
26
|
+
- CLI: `railway domain`
|
|
27
|
+
- Verify: custom domains are attached, DNS is configured, SSL certificates are active.
|
|
28
|
+
|
|
29
|
+
## Service Health
|
|
30
|
+
- After deploy, verify the service is actually responding:
|
|
31
|
+
- Check deploy status is SUCCESS, not BUILDING or CRASHED.
|
|
32
|
+
- If the service has a health endpoint, verify it returns 200.
|
|
33
|
+
- Check for crash loops: multiple rapid deployments with CRASHED status.
|
|
34
|
+
|
|
35
|
+
## Rollback
|
|
36
|
+
- Redeploy a previous known-good deployment:
|
|
37
|
+
- MCP: Use railway_deployment_redeploy with the last healthy deployment ID.
|
|
38
|
+
- CLI: `railway redeploy --deployment <id>`
|
|
39
|
+
- Revert variables if the failure was config-related.
|