bigpowers 2.87.3 → 2.87.5
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/.cursor/rules/align-grid.mdc +109 -0
- package/.cursor/rules/assess-impact.mdc +90 -0
- package/.cursor/rules/audit-code.mdc +183 -0
- package/.cursor/rules/audit-plan.mdc +88 -0
- package/.cursor/rules/build-epic.mdc +104 -0
- package/.cursor/rules/change-request.mdc +120 -0
- package/.cursor/rules/commit-message.mdc +139 -0
- package/.cursor/rules/compose-workflow.mdc +81 -0
- package/.cursor/rules/context7-mcp.mdc +54 -0
- package/.cursor/rules/craft-skill.mdc +195 -0
- package/.cursor/rules/deepen-architecture.mdc +259 -0
- package/.cursor/rules/define-language.mdc +79 -0
- package/.cursor/rules/define-success.mdc +11 -0
- package/.cursor/rules/delegate-task.mdc +90 -0
- package/.cursor/rules/deploy.mdc +197 -0
- package/.cursor/rules/design-interface.mdc +96 -0
- package/.cursor/rules/develop-tdd.mdc +415 -0
- package/.cursor/rules/diagnose-root.mdc +23 -0
- package/.cursor/rules/diagnose-stall.mdc +53 -0
- package/.cursor/rules/dispatch-agents.mdc +117 -0
- package/.cursor/rules/edit-document.mdc +22 -0
- package/.cursor/rules/elaborate-spec.mdc +100 -0
- package/.cursor/rules/enforce-first.mdc +44 -0
- package/.cursor/rules/evolve-skill.mdc +54 -0
- package/.cursor/rules/execute-plan.mdc +60 -0
- package/.cursor/rules/extract-design.mdc +131 -0
- package/.cursor/rules/find-way.mdc +190 -0
- package/.cursor/rules/fix-bug.mdc +66 -0
- package/.cursor/rules/gate-trace.mdc +91 -0
- package/.cursor/rules/generate-allure-report.mdc +284 -0
- package/.cursor/rules/grill-me.mdc +107 -0
- package/.cursor/rules/grill-with-docs.mdc +52 -0
- package/.cursor/rules/guard-git.mdc +230 -0
- package/.cursor/rules/harden-vps.mdc +290 -0
- package/.cursor/rules/hook-commits.mdc +93 -0
- package/.cursor/rules/inspect-quality.mdc +105 -0
- package/.cursor/rules/investigate-bug.mdc +126 -0
- package/.cursor/rules/kickoff-branch.mdc +142 -0
- package/.cursor/rules/maintain-wiki.mdc +63 -0
- package/.cursor/rules/map-codebase.mdc +70 -0
- package/.cursor/rules/migrate-spec.mdc +907 -0
- package/.cursor/rules/model-domain.mdc +231 -0
- package/.cursor/rules/orchestrate-project.mdc +173 -0
- package/.cursor/rules/organize-workspace.mdc +163 -0
- package/.cursor/rules/plan-refactor.mdc +86 -0
- package/.cursor/rules/plan-release.mdc +144 -0
- package/.cursor/rules/plan-tests.mdc +74 -0
- package/.cursor/rules/plan-work.mdc +271 -0
- package/.cursor/rules/publish-package.mdc +337 -0
- package/.cursor/rules/quick-fix.mdc +113 -0
- package/.cursor/rules/release-branch.mdc +301 -0
- package/.cursor/rules/request-review.mdc +112 -0
- package/.cursor/rules/research-first.mdc +86 -0
- package/.cursor/rules/reset-baseline.mdc +20 -0
- package/.cursor/rules/respond-review.mdc +70 -0
- package/.cursor/rules/run-benchmark.mdc +84 -0
- package/.cursor/rules/run-evals.mdc +79 -0
- package/.cursor/rules/run-planning.mdc +100 -0
- package/.cursor/rules/scope-work.mdc +62 -0
- package/.cursor/rules/search-skills.mdc +72 -0
- package/.cursor/rules/security-review.mdc +383 -0
- package/.cursor/rules/seed-conventions.mdc +311 -0
- package/.cursor/rules/session-state.mdc +145 -0
- package/.cursor/rules/setup-environment.mdc +38 -0
- package/.cursor/rules/simple-english.mdc +345 -0
- package/.cursor/rules/simulate-agents.mdc +25 -0
- package/.cursor/rules/slice-tasks.mdc +67 -0
- package/.cursor/rules/smoke-test.mdc +260 -0
- package/.cursor/rules/spike-prototype.mdc +94 -0
- package/.cursor/rules/stocktake-skills.mdc +73 -0
- package/.cursor/rules/survey-context.mdc +134 -0
- package/.cursor/rules/terse-mode.mdc +41 -0
- package/.cursor/rules/trace-requirement.mdc +68 -0
- package/.cursor/rules/using-bigpowers.mdc +110 -0
- package/.cursor/rules/validate-contracts.mdc +285 -0
- package/.cursor/rules/validate-fix.mdc +146 -0
- package/.cursor/rules/verify-work.mdc +190 -0
- package/.cursor/rules/visual-dashboard.mdc +49 -0
- package/.cursor/rules/wire-ci.mdc +380 -0
- package/.cursor/rules/wire-observability.mdc +96 -0
- package/.cursor/rules/write-document.mdc +280 -0
- package/.gemini/extensions/bigpowers/commands/prompts/align-grid.md +109 -0
- package/.gemini/extensions/bigpowers/commands/prompts/assess-impact.md +90 -0
- package/.gemini/extensions/bigpowers/commands/prompts/audit-code.md +183 -0
- package/.gemini/extensions/bigpowers/commands/prompts/audit-plan.md +88 -0
- package/.gemini/extensions/bigpowers/commands/prompts/build-epic.md +104 -0
- package/.gemini/extensions/bigpowers/commands/prompts/change-request.md +120 -0
- package/.gemini/extensions/bigpowers/commands/prompts/commit-message.md +139 -0
- package/.gemini/extensions/bigpowers/commands/prompts/compose-workflow.md +81 -0
- package/.gemini/extensions/bigpowers/commands/prompts/context7-mcp.md +54 -0
- package/.gemini/extensions/bigpowers/commands/prompts/craft-skill.md +195 -0
- package/.gemini/extensions/bigpowers/commands/prompts/deepen-architecture.md +259 -0
- package/.gemini/extensions/bigpowers/commands/prompts/define-language.md +79 -0
- package/.gemini/extensions/bigpowers/commands/prompts/define-success.md +11 -0
- package/.gemini/extensions/bigpowers/commands/prompts/delegate-task.md +90 -0
- package/.gemini/extensions/bigpowers/commands/prompts/deploy.md +197 -0
- package/.gemini/extensions/bigpowers/commands/prompts/design-interface.md +96 -0
- package/.gemini/extensions/bigpowers/commands/prompts/develop-tdd.md +415 -0
- package/.gemini/extensions/bigpowers/commands/prompts/diagnose-root.md +23 -0
- package/.gemini/extensions/bigpowers/commands/prompts/diagnose-stall.md +53 -0
- package/.gemini/extensions/bigpowers/commands/prompts/dispatch-agents.md +117 -0
- package/.gemini/extensions/bigpowers/commands/prompts/edit-document.md +22 -0
- package/.gemini/extensions/bigpowers/commands/prompts/elaborate-spec.md +100 -0
- package/.gemini/extensions/bigpowers/commands/prompts/enforce-first.md +44 -0
- package/.gemini/extensions/bigpowers/commands/prompts/evolve-skill.md +54 -0
- package/.gemini/extensions/bigpowers/commands/prompts/execute-plan.md +60 -0
- package/.gemini/extensions/bigpowers/commands/prompts/extract-design.md +131 -0
- package/.gemini/extensions/bigpowers/commands/prompts/find-way.md +190 -0
- package/.gemini/extensions/bigpowers/commands/prompts/fix-bug.md +66 -0
- package/.gemini/extensions/bigpowers/commands/prompts/gate-trace.md +91 -0
- package/.gemini/extensions/bigpowers/commands/prompts/generate-allure-report.md +284 -0
- package/.gemini/extensions/bigpowers/commands/prompts/grill-me.md +107 -0
- package/.gemini/extensions/bigpowers/commands/prompts/grill-with-docs.md +52 -0
- package/.gemini/extensions/bigpowers/commands/prompts/guard-git.md +230 -0
- package/.gemini/extensions/bigpowers/commands/prompts/harden-vps.md +290 -0
- package/.gemini/extensions/bigpowers/commands/prompts/hook-commits.md +93 -0
- package/.gemini/extensions/bigpowers/commands/prompts/inspect-quality.md +105 -0
- package/.gemini/extensions/bigpowers/commands/prompts/investigate-bug.md +126 -0
- package/.gemini/extensions/bigpowers/commands/prompts/kickoff-branch.md +142 -0
- package/.gemini/extensions/bigpowers/commands/prompts/maintain-wiki.md +63 -0
- package/.gemini/extensions/bigpowers/commands/prompts/map-codebase.md +70 -0
- package/.gemini/extensions/bigpowers/commands/prompts/migrate-spec.md +907 -0
- package/.gemini/extensions/bigpowers/commands/prompts/model-domain.md +231 -0
- package/.gemini/extensions/bigpowers/commands/prompts/orchestrate-project.md +173 -0
- package/.gemini/extensions/bigpowers/commands/prompts/organize-workspace.md +163 -0
- package/.gemini/extensions/bigpowers/commands/prompts/plan-refactor.md +86 -0
- package/.gemini/extensions/bigpowers/commands/prompts/plan-release.md +144 -0
- package/.gemini/extensions/bigpowers/commands/prompts/plan-tests.md +74 -0
- package/.gemini/extensions/bigpowers/commands/prompts/plan-work.md +271 -0
- package/.gemini/extensions/bigpowers/commands/prompts/publish-package.md +337 -0
- package/.gemini/extensions/bigpowers/commands/prompts/quick-fix.md +113 -0
- package/.gemini/extensions/bigpowers/commands/prompts/release-branch.md +301 -0
- package/.gemini/extensions/bigpowers/commands/prompts/request-review.md +112 -0
- package/.gemini/extensions/bigpowers/commands/prompts/research-first.md +86 -0
- package/.gemini/extensions/bigpowers/commands/prompts/reset-baseline.md +20 -0
- package/.gemini/extensions/bigpowers/commands/prompts/respond-review.md +70 -0
- package/.gemini/extensions/bigpowers/commands/prompts/run-benchmark.md +84 -0
- package/.gemini/extensions/bigpowers/commands/prompts/run-evals.md +79 -0
- package/.gemini/extensions/bigpowers/commands/prompts/run-planning.md +100 -0
- package/.gemini/extensions/bigpowers/commands/prompts/scope-work.md +62 -0
- package/.gemini/extensions/bigpowers/commands/prompts/search-skills.md +72 -0
- package/.gemini/extensions/bigpowers/commands/prompts/security-review.md +383 -0
- package/.gemini/extensions/bigpowers/commands/prompts/seed-conventions.md +311 -0
- package/.gemini/extensions/bigpowers/commands/prompts/session-state.md +145 -0
- package/.gemini/extensions/bigpowers/commands/prompts/setup-environment.md +38 -0
- package/.gemini/extensions/bigpowers/commands/prompts/simple-english.md +345 -0
- package/.gemini/extensions/bigpowers/commands/prompts/simulate-agents.md +25 -0
- package/.gemini/extensions/bigpowers/commands/prompts/slice-tasks.md +67 -0
- package/.gemini/extensions/bigpowers/commands/prompts/smoke-test.md +260 -0
- package/.gemini/extensions/bigpowers/commands/prompts/spike-prototype.md +94 -0
- package/.gemini/extensions/bigpowers/commands/prompts/stocktake-skills.md +73 -0
- package/.gemini/extensions/bigpowers/commands/prompts/survey-context.md +134 -0
- package/.gemini/extensions/bigpowers/commands/prompts/terse-mode.md +41 -0
- package/.gemini/extensions/bigpowers/commands/prompts/trace-requirement.md +68 -0
- package/.gemini/extensions/bigpowers/commands/prompts/using-bigpowers.md +110 -0
- package/.gemini/extensions/bigpowers/commands/prompts/validate-contracts.md +285 -0
- package/.gemini/extensions/bigpowers/commands/prompts/validate-fix.md +146 -0
- package/.gemini/extensions/bigpowers/commands/prompts/verify-work.md +190 -0
- package/.gemini/extensions/bigpowers/commands/prompts/visual-dashboard.md +49 -0
- package/.gemini/extensions/bigpowers/commands/prompts/wire-ci.md +380 -0
- package/.gemini/extensions/bigpowers/commands/prompts/wire-observability.md +96 -0
- package/.gemini/extensions/bigpowers/commands/prompts/write-document.md +280 -0
- package/.gemini/extensions/bigpowers/gemini-extension.json +16 -0
- package/.gemini/extensions/bigpowers/hooks/HOOKS.md +43 -0
- package/.gemini/extensions/bigpowers/hooks/before-tool-git-guard.sh +26 -0
- package/.gemini/extensions/bigpowers/hooks/before-tool-rtk.sh +14 -0
- package/.gemini/extensions/bigpowers/hooks/before-tool-token-mgmt.sh +19 -0
- package/.gemini/extensions/bigpowers/hooks/hooks-manifest.json +36 -0
- package/.gemini/extensions/bigpowers/hooks/run-hook.cmd +29 -0
- package/.gemini/extensions/bigpowers/hooks/session-start +48 -0
- package/.gemini/extensions/bigpowers/hooks/settings.json.example +41 -0
- package/.gemini/extensions/bigpowers/skills/align-grid/SKILL.md +111 -0
- package/.gemini/extensions/bigpowers/skills/assess-impact/SKILL.md +92 -0
- package/.gemini/extensions/bigpowers/skills/audit-code/SKILL.md +185 -0
- package/.gemini/extensions/bigpowers/skills/audit-plan/SKILL.md +90 -0
- package/.gemini/extensions/bigpowers/skills/build-epic/SKILL.md +106 -0
- package/.gemini/extensions/bigpowers/skills/change-request/SKILL.md +122 -0
- package/.gemini/extensions/bigpowers/skills/commit-message/SKILL.md +141 -0
- package/.gemini/extensions/bigpowers/skills/compose-workflow/SKILL.md +83 -0
- package/.gemini/extensions/bigpowers/skills/context7-mcp/SKILL.md +56 -0
- package/.gemini/extensions/bigpowers/skills/craft-skill/SKILL.md +197 -0
- package/.gemini/extensions/bigpowers/skills/deepen-architecture/SKILL.md +261 -0
- package/.gemini/extensions/bigpowers/skills/define-language/SKILL.md +81 -0
- package/.gemini/extensions/bigpowers/skills/define-success/SKILL.md +13 -0
- package/.gemini/extensions/bigpowers/skills/delegate-task/SKILL.md +92 -0
- package/.gemini/extensions/bigpowers/skills/deploy/SKILL.md +199 -0
- package/.gemini/extensions/bigpowers/skills/design-interface/SKILL.md +98 -0
- package/.gemini/extensions/bigpowers/skills/develop-tdd/SKILL.md +417 -0
- package/.gemini/extensions/bigpowers/skills/diagnose-root/SKILL.md +25 -0
- package/.gemini/extensions/bigpowers/skills/diagnose-stall/SKILL.md +55 -0
- package/.gemini/extensions/bigpowers/skills/dispatch-agents/SKILL.md +119 -0
- package/.gemini/extensions/bigpowers/skills/edit-document/SKILL.md +24 -0
- package/.gemini/extensions/bigpowers/skills/elaborate-spec/SKILL.md +102 -0
- package/.gemini/extensions/bigpowers/skills/enforce-first/SKILL.md +46 -0
- package/.gemini/extensions/bigpowers/skills/evolve-skill/SKILL.md +56 -0
- package/.gemini/extensions/bigpowers/skills/execute-plan/SKILL.md +62 -0
- package/.gemini/extensions/bigpowers/skills/extract-design/SKILL.md +133 -0
- package/.gemini/extensions/bigpowers/skills/find-way/SKILL.md +192 -0
- package/.gemini/extensions/bigpowers/skills/fix-bug/SKILL.md +68 -0
- package/.gemini/extensions/bigpowers/skills/gate-trace/SKILL.md +93 -0
- package/.gemini/extensions/bigpowers/skills/generate-allure-report/SKILL.md +286 -0
- package/.gemini/extensions/bigpowers/skills/grill-me/SKILL.md +109 -0
- package/.gemini/extensions/bigpowers/skills/grill-with-docs/SKILL.md +54 -0
- package/.gemini/extensions/bigpowers/skills/guard-git/SKILL.md +232 -0
- package/.gemini/extensions/bigpowers/skills/harden-vps/SKILL.md +292 -0
- package/.gemini/extensions/bigpowers/skills/hook-commits/SKILL.md +95 -0
- package/.gemini/extensions/bigpowers/skills/inspect-quality/SKILL.md +107 -0
- package/.gemini/extensions/bigpowers/skills/investigate-bug/SKILL.md +128 -0
- package/.gemini/extensions/bigpowers/skills/kickoff-branch/SKILL.md +144 -0
- package/.gemini/extensions/bigpowers/skills/maintain-wiki/SKILL.md +65 -0
- package/.gemini/extensions/bigpowers/skills/map-codebase/SKILL.md +72 -0
- package/.gemini/extensions/bigpowers/skills/migrate-spec/SKILL.md +909 -0
- package/.gemini/extensions/bigpowers/skills/model-domain/SKILL.md +233 -0
- package/.gemini/extensions/bigpowers/skills/orchestrate-project/SKILL.md +175 -0
- package/.gemini/extensions/bigpowers/skills/organize-workspace/SKILL.md +165 -0
- package/.gemini/extensions/bigpowers/skills/plan-refactor/SKILL.md +88 -0
- package/.gemini/extensions/bigpowers/skills/plan-release/SKILL.md +146 -0
- package/.gemini/extensions/bigpowers/skills/plan-tests/SKILL.md +76 -0
- package/.gemini/extensions/bigpowers/skills/plan-work/SKILL.md +273 -0
- package/.gemini/extensions/bigpowers/skills/publish-package/SKILL.md +339 -0
- package/.gemini/extensions/bigpowers/skills/quick-fix/SKILL.md +115 -0
- package/.gemini/extensions/bigpowers/skills/release-branch/SKILL.md +303 -0
- package/.gemini/extensions/bigpowers/skills/request-review/SKILL.md +114 -0
- package/.gemini/extensions/bigpowers/skills/research-first/SKILL.md +88 -0
- package/.gemini/extensions/bigpowers/skills/reset-baseline/SKILL.md +22 -0
- package/.gemini/extensions/bigpowers/skills/respond-review/SKILL.md +72 -0
- package/.gemini/extensions/bigpowers/skills/run-benchmark/SKILL.md +86 -0
- package/.gemini/extensions/bigpowers/skills/run-evals/SKILL.md +81 -0
- package/.gemini/extensions/bigpowers/skills/run-planning/SKILL.md +102 -0
- package/.gemini/extensions/bigpowers/skills/scope-work/SKILL.md +64 -0
- package/.gemini/extensions/bigpowers/skills/search-skills/SKILL.md +74 -0
- package/.gemini/extensions/bigpowers/skills/security-review/SKILL.md +385 -0
- package/.gemini/extensions/bigpowers/skills/seed-conventions/SKILL.md +313 -0
- package/.gemini/extensions/bigpowers/skills/session-state/SKILL.md +147 -0
- package/.gemini/extensions/bigpowers/skills/setup-environment/SKILL.md +40 -0
- package/.gemini/extensions/bigpowers/skills/simple-english/SKILL.md +347 -0
- package/.gemini/extensions/bigpowers/skills/simulate-agents/SKILL.md +27 -0
- package/.gemini/extensions/bigpowers/skills/slice-tasks/SKILL.md +69 -0
- package/.gemini/extensions/bigpowers/skills/smoke-test/SKILL.md +262 -0
- package/.gemini/extensions/bigpowers/skills/spike-prototype/SKILL.md +96 -0
- package/.gemini/extensions/bigpowers/skills/stocktake-skills/SKILL.md +75 -0
- package/.gemini/extensions/bigpowers/skills/survey-context/SKILL.md +136 -0
- package/.gemini/extensions/bigpowers/skills/terse-mode/SKILL.md +43 -0
- package/.gemini/extensions/bigpowers/skills/trace-requirement/SKILL.md +70 -0
- package/.gemini/extensions/bigpowers/skills/using-bigpowers/SKILL.md +112 -0
- package/.gemini/extensions/bigpowers/skills/validate-contracts/SKILL.md +287 -0
- package/.gemini/extensions/bigpowers/skills/validate-fix/SKILL.md +148 -0
- package/.gemini/extensions/bigpowers/skills/verify-work/SKILL.md +192 -0
- package/.gemini/extensions/bigpowers/skills/visual-dashboard/SKILL.md +51 -0
- package/.gemini/extensions/bigpowers/skills/wire-ci/SKILL.md +382 -0
- package/.gemini/extensions/bigpowers/skills/wire-observability/SKILL.md +98 -0
- package/.gemini/extensions/bigpowers/skills/write-document/SKILL.md +282 -0
- package/.pi/package.json +1 -1
- package/CHANGELOG.md +14 -0
- package/package.json +1 -1
- package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
- package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
- package/scripts/lib/install-helpers.js +147 -20
- package/scripts/test-install-helpers.js +141 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: smoke-test
|
|
3
|
+
model: sonnet
|
|
4
|
+
description: "Post-deploy health-check against a live URL. Validates HTTP status, response content, and critical endpoints. Runnable standalone OR as the final step of the deploy skill."
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Smoke Test
|
|
9
|
+
|
|
10
|
+
> **HARD GATE** — Do NOT run smoke-test against a URL that hasn't been deployed yet. Always run `deploy` first, then `smoke-test`.
|
|
11
|
+
>
|
|
12
|
+
> **HARD GATE** — A failed smoke test means the deployment is broken. Do NOT mark a deploy as successful until all smoke checks pass.
|
|
13
|
+
|
|
14
|
+
Validate a deployed application is healthy by running HTTP checks against live URLs. Each check asserts HTTP status, optional body signal (regex), and optional response-time threshold.
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
Smoke checks live in `smoke-checks.yaml` at the project root:
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
base_url: "https://example.com"
|
|
22
|
+
checks:
|
|
23
|
+
- name: "Homepage"
|
|
24
|
+
path: "/"
|
|
25
|
+
expected_status: 200
|
|
26
|
+
content_signal: "welcome|ok"
|
|
27
|
+
max_response_time_ms: 3000
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
| Field | Required | Default | Description |
|
|
31
|
+
|-------|----------|---------|-------------|
|
|
32
|
+
| `name` | Yes | — | Human-readable check name |
|
|
33
|
+
| `path` | Yes | `/` | URL path relative to base_url |
|
|
34
|
+
| `method` | No | `GET` | HTTP method |
|
|
35
|
+
| `expected_status` | No | `200` | Expected HTTP status code |
|
|
36
|
+
| `content_signal` | No | — | Regex or string in response body |
|
|
37
|
+
| `max_response_time_ms` | No | — | Fail if slower than threshold (ms) |
|
|
38
|
+
|
|
39
|
+
Ad-hoc single-URL mode: `DEPLOY_URL=https://host bash scripts/run-smoke.sh`
|
|
40
|
+
|
|
41
|
+
## Process
|
|
42
|
+
|
|
43
|
+
### 1. Load checks
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
SMOKE_CHECKS_FILE="${SMOKE_CHECKS_FILE:-smoke-checks.yaml}"
|
|
47
|
+
BASE_URL="${DEPLOY_URL:-$BASE_URL}"
|
|
48
|
+
test -f "$SMOKE_CHECKS_FILE" || test -n "$BASE_URL" || { echo "ERROR: no checks file or URL"; exit 1; }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2. Run each check
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
bash scripts/run-smoke.sh "${DEPLOY_URL:-}" "${SMOKE_CHECKS_FILE:-smoke-checks.yaml}"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The runner performs curl requests per check, records pass/fail per assertion, and prints a summary.
|
|
58
|
+
|
|
59
|
+
### 3. Assert results
|
|
60
|
+
|
|
61
|
+
- Any HTTP status mismatch → FAIL
|
|
62
|
+
- Missing `content_signal` when configured → FAIL
|
|
63
|
+
- Response time over `max_response_time_ms` → FAIL
|
|
64
|
+
- Exit code non-zero → deployment not healthy
|
|
65
|
+
|
|
66
|
+
### 4. Generate report
|
|
67
|
+
|
|
68
|
+
Capture stdout from `run-smoke.sh` as evidence. Persist to `specs/verifications/smoke-<date>.log` for release-branch.
|
|
69
|
+
|
|
70
|
+
## Integration with deploy skill
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
DEPLOY_URL="$DEPLOY_URL" bash scripts/run-smoke.sh
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Verify arc
|
|
77
|
+
|
|
78
|
+
Part of **★ VERIFY ★**: `verify-work` → `validate-contracts` → `smoke-test` → `run-evals` → `audit-code`
|
|
79
|
+
|
|
80
|
+
## Verify
|
|
81
|
+
|
|
82
|
+
→ verify: `test -x scripts/run-smoke.sh && grep -q 'run-smoke.sh' skills/smoke-test/SKILL.md && ! grep -q 'See \[REFERENCE.md\](REFERENCE.md)$' skills/smoke-test/SKILL.md && echo OK`
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
# Smoke Test — Reference
|
|
87
|
+
|
|
88
|
+
## Navigation
|
|
89
|
+
|
|
90
|
+
| Lines | Section |
|
|
91
|
+
|-------|---------|
|
|
92
|
+
| 1 | Title |
|
|
93
|
+
| 3–17 | Navigation |
|
|
94
|
+
| 18–34 | Runner script |
|
|
95
|
+
| 35–46 | Configuration reference |
|
|
96
|
+
| 47–55 | Verification |
|
|
97
|
+
| 56–89 | Reference block 1 |
|
|
98
|
+
| 90–107 | Reference block 2 |
|
|
99
|
+
| 108–122 | Reference block 3 |
|
|
100
|
+
| 123–159 | Reference block 4 |
|
|
101
|
+
| 160–177 | Reference block 5 |
|
|
102
|
+
|
|
103
|
+
## Runner script
|
|
104
|
+
|
|
105
|
+
A ready-to-use runner is provided for standalone operation:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
bash scripts/run-smoke.sh [url] [smoke-checks-file]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The runner:
|
|
112
|
+
1. Uses `$DEPLOY_URL`, `$SMOKE_CHECKS_FILE`, or CLI arguments
|
|
113
|
+
2. Runs all defined checks
|
|
114
|
+
3. Prints a pass/fail summary
|
|
115
|
+
4. Exits 0 on all pass, non-zero on any failure
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Configuration reference
|
|
121
|
+
|
|
122
|
+
| Variable | Default | Description |
|
|
123
|
+
|----------|---------|-------------|
|
|
124
|
+
| `SMOKE_CHECKS_FILE` | `smoke-checks.yaml` | Path to smoke checks YAML |
|
|
125
|
+
| `DEPLOY_URL` / `BASE_URL` | *(required)* | Base URL for all checks |
|
|
126
|
+
| `SMOKE_TIMEOUT` | `30` | Per-check timeout (seconds) |
|
|
127
|
+
| `SMOKE_RETRIES` | `0` | Number of retries on failure |
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Verification
|
|
133
|
+
|
|
134
|
+
→ verify: `test -f smoke-test/SKILL.md && grep -q 'name: smoke-test' smoke-test/SKILL.md && echo OK`
|
|
135
|
+
→ verify: `grep -qi 'smoke.checks.yaml\|checklist\|expected_status\|content_signal' smoke-test/SKILL.md && echo OK`
|
|
136
|
+
→ verify: `grep -ci 'pass\|fail\|summary\|report' smoke-test/SKILL.md | awk '{if($1>=2) print "OK"; else print "FAIL"}'`
|
|
137
|
+
→ verify: `grep -q 'smoke-test' SKILL-INDEX.md && echo OK`
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Reference block 1
|
|
142
|
+
|
|
143
|
+
```yaml
|
|
144
|
+
# smoke-checks.yaml — auto-loaded if present at project root
|
|
145
|
+
base_url: "https://example.com"
|
|
146
|
+
checks:
|
|
147
|
+
- name: "Homepage"
|
|
148
|
+
path: "/"
|
|
149
|
+
method: GET
|
|
150
|
+
expected_status: 200
|
|
151
|
+
content_signal: "bigpowers"
|
|
152
|
+
max_response_time_ms: 3000
|
|
153
|
+
|
|
154
|
+
- name: "API Health"
|
|
155
|
+
path: "/api/health"
|
|
156
|
+
method: GET
|
|
157
|
+
expected_status: 200
|
|
158
|
+
content_signal: "ok|healthy"
|
|
159
|
+
|
|
160
|
+
- name: "API Jogos"
|
|
161
|
+
path: "/api/jogos"
|
|
162
|
+
method: GET
|
|
163
|
+
expected_status: 200
|
|
164
|
+
content_signal: "jogos|games"
|
|
165
|
+
|
|
166
|
+
- name: "Not Found handling"
|
|
167
|
+
path: "/nonexistent"
|
|
168
|
+
method: GET
|
|
169
|
+
expected_status: 404
|
|
170
|
+
content_signal: "not found|404"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Reference block 2
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
SMOKE_CHECKS_FILE="${SMOKE_CHECKS_FILE:-smoke-checks.yaml}"
|
|
179
|
+
BASE_URL="${DEPLOY_URL:-$BASE_URL}"
|
|
180
|
+
|
|
181
|
+
if [ -f "$SMOKE_CHECKS_FILE" ]; then
|
|
182
|
+
echo "Loaded smoke checks from $SMOKE_CHECKS_FILE"
|
|
183
|
+
elif [ -n "$BASE_URL" ]; then
|
|
184
|
+
echo "No smoke-checks.yaml found. Using single URL check against $BASE_URL"
|
|
185
|
+
else
|
|
186
|
+
echo "ERROR: No smoke-checks.yaml found and no DEPLOY_URL/BASE_URL set."
|
|
187
|
+
exit 1
|
|
188
|
+
fi
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Reference block 3
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
url="${BASE_URL}${path}"
|
|
197
|
+
start_time=$(python3 -c 'import time; print(int(time.time() * 1000))')
|
|
198
|
+
|
|
199
|
+
# Perform the HTTP request
|
|
200
|
+
response=$(curl -s -o /tmp/smoke_body.txt -w "%{http_code}" "$url")
|
|
201
|
+
response_time=$(( $(python3 -c 'import time; print(int(time.time() * 1000))') - start_time ))
|
|
202
|
+
status=$response
|
|
203
|
+
body=$(cat /tmp/smoke_body.txt)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Reference block 4
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
checks_passed=0
|
|
212
|
+
checks_failed=0
|
|
213
|
+
failures=""
|
|
214
|
+
|
|
215
|
+
# Assert status code
|
|
216
|
+
if [ "$status" -ne "${expected_status:-200}" ]; then
|
|
217
|
+
echo " FAIL: expected status ${expected_status} but got $status"
|
|
218
|
+
checks_failed=$((checks_failed + 1))
|
|
219
|
+
failures="${failures} - $name: HTTP $status (expected ${expected_status})\n"
|
|
220
|
+
else
|
|
221
|
+
echo " PASS: HTTP $status"
|
|
222
|
+
fi
|
|
223
|
+
|
|
224
|
+
# Assert content signal
|
|
225
|
+
if [ -n "$content_signal" ]; then
|
|
226
|
+
if echo "$body" | grep -qiE "$content_signal"; then
|
|
227
|
+
echo " PASS: body contains \"$content_signal\""
|
|
228
|
+
else
|
|
229
|
+
echo " FAIL: body does not contain \"$content_signal\""
|
|
230
|
+
checks_failed=$((checks_failed + 1))
|
|
231
|
+
failures="${failures} - $name: missing content signal \"$content_signal\"\n"
|
|
232
|
+
fi
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
# Assert response time
|
|
236
|
+
if [ -n "$max_response_time_ms" ] && [ "$response_time" -gt "$max_response_time_ms" ]; then
|
|
237
|
+
echo " FAIL: response time ${response_time}ms exceeds ${max_response_time_ms}ms"
|
|
238
|
+
checks_failed=$((checks_failed + 1))
|
|
239
|
+
failures="${failures} - $name: response time ${response_time}ms (max ${max_response_time_ms}ms)\n"
|
|
240
|
+
fi
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Reference block 5
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
total=$((checks_passed + checks_failed))
|
|
249
|
+
echo ""
|
|
250
|
+
echo "=== Smoke Test Summary ==="
|
|
251
|
+
echo "Total: $total | Passed: $checks_passed | Failed: $checks_failed"
|
|
252
|
+
|
|
253
|
+
if [ "$checks_failed" -gt 0 ]; then
|
|
254
|
+
echo ""
|
|
255
|
+
echo "Failures:"
|
|
256
|
+
echo -e "$failures"
|
|
257
|
+
exit 1
|
|
258
|
+
else
|
|
259
|
+
echo "All checks passed."
|
|
260
|
+
exit 0
|
|
261
|
+
fi
|
|
262
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spike-prototype
|
|
3
|
+
model: sonnet
|
|
4
|
+
description: "Throw-away prototype for unknown problem spaces. Output is learning notes in specs/archive/spikes/SPIKE-<name>.md, not production code. Use when the domain or technology is unexplored, when estimates are impossible without experimentation, or when user says \"spike\", \"prototype\", or \"proof of concept\"."
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Spike Prototype
|
|
9
|
+
> **HARD GATE** — **HARD GATE** — Spikes are time-boxed experiments, not shipping code. Results must be throwaway or clearly isolated. Do NOT merge a spike without a plan to integrate it or replace it with a proper implementation.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
A spike is a time-boxed experiment to answer a specific question. The code is thrown away. The learning is kept in `specs/archive/spikes/SPIKE-<name>.md`.
|
|
13
|
+
|
|
14
|
+
**The spike produces learning, not code to ship.** If you find yourself cleaning up spike code for production, stop — run `plan-work` and `develop-tdd` instead with the insights you gained.
|
|
15
|
+
|
|
16
|
+
## When to spike
|
|
17
|
+
|
|
18
|
+
- The technology is unfamiliar (new library, API, infrastructure)
|
|
19
|
+
- The approach is uncertain (multiple solutions exist; none has been tried)
|
|
20
|
+
- Estimates are impossible without seeing how the thing actually behaves
|
|
21
|
+
- A key assumption needs to be validated before committing to a design
|
|
22
|
+
|
|
23
|
+
## Process
|
|
24
|
+
|
|
25
|
+
### 1. Define the question
|
|
26
|
+
|
|
27
|
+
Before writing a single line, state the question the spike must answer:
|
|
28
|
+
|
|
29
|
+
> "Can we [specific thing] using [specific approach] within [constraint]?"
|
|
30
|
+
|
|
31
|
+
Examples:
|
|
32
|
+
- "Can we stream large files from S3 to the client without buffering in memory?"
|
|
33
|
+
- "Does the Stripe webhook SDK handle signature verification correctly in our edge runtime?"
|
|
34
|
+
- "Can we achieve < 100ms p99 response time for the search endpoint with a naive Postgres full-text search?"
|
|
35
|
+
|
|
36
|
+
A spike with no question is just unplanned coding. Refuse to start if the question isn't clear.
|
|
37
|
+
|
|
38
|
+
### 2. Set a timebox
|
|
39
|
+
|
|
40
|
+
Agree on a timebox with the user: 30 minutes, 1 hour, 2 hours. When time is up, stop — even if the question isn't fully answered. Partial learning is still learning.
|
|
41
|
+
|
|
42
|
+
### 3. Experiment
|
|
43
|
+
|
|
44
|
+
Write the simplest code that could answer the question. Ignore:
|
|
45
|
+
- Error handling
|
|
46
|
+
- Test coverage
|
|
47
|
+
- Code quality
|
|
48
|
+
- Production concerns
|
|
49
|
+
|
|
50
|
+
Focus entirely on answering the question.
|
|
51
|
+
|
|
52
|
+
### 4. Write specs/archive/spikes/SPIKE-<name>.md
|
|
53
|
+
|
|
54
|
+
Save the learning to `specs/archive/spikes/SPIKE-<name>.md`. Create the `specs/` directory if it doesn't exist.
|
|
55
|
+
|
|
56
|
+
<spike-template>
|
|
57
|
+
|
|
58
|
+
# Spike: [name]
|
|
59
|
+
|
|
60
|
+
## Question
|
|
61
|
+
|
|
62
|
+
[The specific question this spike was answering]
|
|
63
|
+
|
|
64
|
+
## Result
|
|
65
|
+
|
|
66
|
+
[Answered / Partially answered / Not answered]
|
|
67
|
+
|
|
68
|
+
## Findings
|
|
69
|
+
|
|
70
|
+
[What you learned — concrete observations, not opinions]
|
|
71
|
+
|
|
72
|
+
## Evidence
|
|
73
|
+
|
|
74
|
+
[Code snippet, benchmark result, API response, or screenshot that proves the finding]
|
|
75
|
+
|
|
76
|
+
## Implications for the plan
|
|
77
|
+
|
|
78
|
+
[How this changes the approach, the design, or the estimate]
|
|
79
|
+
|
|
80
|
+
## What was NOT explored
|
|
81
|
+
|
|
82
|
+
[Known gaps — things the spike didn't validate]
|
|
83
|
+
|
|
84
|
+
## Recommendation
|
|
85
|
+
|
|
86
|
+
[Should we proceed with this approach? If yes, what does plan-work need to account for?]
|
|
87
|
+
|
|
88
|
+
</spike-template>
|
|
89
|
+
|
|
90
|
+
### 5. Delete the spike code
|
|
91
|
+
|
|
92
|
+
After writing the findings, delete or discard the spike code. It is not meant to ship.
|
|
93
|
+
|
|
94
|
+
### 6. Feed back into plan-work
|
|
95
|
+
|
|
96
|
+
The spike findings are the input to `plan-work`. Call `plan-work` next, informed by `specs/archive/spikes/SPIKE-<name>.md`.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stocktake-skills
|
|
3
|
+
model: sonnet
|
|
4
|
+
description: "Sequential subagent batch audit of the bigpowers skill catalog — Quick Scan (changed only) or Full (all skills). Use during sustain phase, before a major release, or when catalog drift is suspected."
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# story: e09s01
|
|
9
|
+
<!-- story: e45s12 -->
|
|
10
|
+
<!-- story: e79s04 -->
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# Stocktake Skills
|
|
14
|
+
> **HARD GATE** — **HARD GATE** — Skill inventory must be current. Missing HARD GATEs, stale descriptions, or broken verify commands are defects, not cosmetic. Fix them in `evolve-skill`.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Audit SKILL.md catalog for drift, stale triggers, missing HARD GATEs, and INDEX mismatches.
|
|
18
|
+
|
|
19
|
+
## Modes
|
|
20
|
+
|
|
21
|
+
| Mode | Scope |
|
|
22
|
+
|------|-------|
|
|
23
|
+
| **Quick Scan** | Skills changed since last tag or in current diff |
|
|
24
|
+
| **Full** | All skills per SKILL-INDEX.md + catalog audit |
|
|
25
|
+
| **--verify** | Run `bash scripts/run-skill-verify.sh` and append health results to the stocktake report |
|
|
26
|
+
|
|
27
|
+
## Process
|
|
28
|
+
|
|
29
|
+
0. **Catalog validator (code-enforced)** — run `bash scripts/validate-skill-catalog.sh`. Any FAIL is a critical finding before manual review. Add `--archive` to list zero-usage skills from `metrics.skill_timings` for auto-archiving candidates (move to `specs/epics/archive/` or delete after user confirms).
|
|
30
|
+
0b. **Agentic STE audit (e79s04)** — run `bash scripts/validate-agentic-ste.sh --audit skills/`. Flag hedge words and sentences over 20 words per [AGENTIC-STE.md](../../docs/AGENTIC-STE.md). Record WARN lines in the stocktake report as **STE debt** — do NOT rewrite the full catalog in one pass. Route critical repeat offenders to `evolve-skill`.
|
|
31
|
+
1. Run `bash scripts/audit-catalog.sh` to verify pi/skills ↔ source SKILL.md sync. Mismatch is a critical finding.
|
|
32
|
+
2. Run mode; for each skill check: exists, verb-noun, <300 lines total, HARD GATE present, INDEX row matches.
|
|
33
|
+
3. Write `specs/STOCKTAKE-<date>.md` with findings table (skill, issue, severity).
|
|
34
|
+
4. **Effectiveness report (--full mode only):** Read `specs/state.yaml` `metrics.skill_timings` and report:
|
|
35
|
+
- Top 5 most-used skills (by calls, total_seconds)
|
|
36
|
+
- Skills with zero calls (potential dead weight)
|
|
37
|
+
- Skills with high average time (candidates for `evolve-skill`)
|
|
38
|
+
5. Critical findings → `plan-work` story; cosmetic → `evolve-skill` candidate.
|
|
39
|
+
6. **--verify mode:** Run `bash scripts/run-skill-verify.sh` and append a `## Verify Health` section to the stocktake report: `"N/68 PASS, M FAIL, K SKIP"`. FAIL skills are critical findings and go straight to `plan-work`.
|
|
40
|
+
|
|
41
|
+
### Skill timing data (`metrics.skill_timings`)
|
|
42
|
+
|
|
43
|
+
In `--full` mode, read `specs/state.yaml` `metrics.skill_timings` for per-skill usage stats:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
metrics:
|
|
47
|
+
skill_timings:
|
|
48
|
+
survey-context:
|
|
49
|
+
calls: 12
|
|
50
|
+
total_seconds: 180
|
|
51
|
+
avg_seconds: 15.0
|
|
52
|
+
develop-tdd:
|
|
53
|
+
calls: 30
|
|
54
|
+
total_seconds: 5400
|
|
55
|
+
avg_seconds: 180.0
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Timing data is populated by `scripts/bp-timing.sh start|end <skill>` calls within critical-path skills.
|
|
59
|
+
|
|
60
|
+
## Verify
|
|
61
|
+
|
|
62
|
+
→ verify: `compgen -G 'specs/STOCKTAKE-*.md' >/dev/null && bash scripts/validate-skill-catalog.sh`
|
|
63
|
+
|
|
64
|
+
See [REFERENCE.md](REFERENCE.md) for checklist.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
# Stocktake checklist
|
|
69
|
+
|
|
70
|
+
- [ ] SKILL.md exists at repo root `<name>/SKILL.md`
|
|
71
|
+
- [ ] Listed in SKILL-INDEX.md with correct phase
|
|
72
|
+
- [ ] `description` includes "Use when..."
|
|
73
|
+
- [ ] At least one HARD GATE callout
|
|
74
|
+
- [ ] specs/ output documented if applicable
|
|
75
|
+
- [ ] No edit to `.cursor/rules/` or `.gemini/` (generated only)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: survey-context
|
|
3
|
+
model: haiku
|
|
4
|
+
description: "Per-task context bootstrap — reads existing specs/ and tech-architecture docs to map the current lifecycle phase and suggest the next skill. Use at the start of any task, when returning after a break, or when unsure what to do next. For deriving a tech-stack doc from scratch, use map-codebase first."
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Survey Context
|
|
9
|
+
|
|
10
|
+
Read the project's current state and give a phase map + next-skill recommendation. This is the "where am I?" skill — run it at the start of every task.
|
|
11
|
+
|
|
12
|
+
> **Use this vs map-codebase:** `survey-context` consumes existing specs and docs (fast; does not re-derive). `map-codebase` builds the tech-stack doc from scratch by scanning the codebase. Run `map-codebase` when `specs/tech-architecture/tech-stack.md` doesn't exist yet; run `survey-context` when it does.
|
|
13
|
+
|
|
14
|
+
> **HARD GATE** — Read specs/ files before suggesting next steps. If state.yaml is stale or contradicts the codebase, request clarification rather than assuming intent.
|
|
15
|
+
|
|
16
|
+
Orchestrate-project 6 phases: Phase 1 Discover - Phase 2 Elaborate - Phase 3 Plan - Phase 4 Build - Phase 5 Verify - Phase 6 Release
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
|
|
20
|
+
> **Timing:** `bash scripts/bp-timing.sh start survey-context` at invocation; `bash scripts/bp-timing.sh end survey-context` before handoff.
|
|
21
|
+
|
|
22
|
+
### 1. Read CONVENTIONS.md
|
|
23
|
+
|
|
24
|
+
If `CONVENTIONS.md` exists at the project root, read it first. It contains the rules all agents must follow in this project.
|
|
25
|
+
|
|
26
|
+
### 2. Read specs/ (YAML-first)
|
|
27
|
+
|
|
28
|
+
Scan the `specs/` directory if it exists:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
specs/
|
|
32
|
+
├── state.yaml → session: active_flow, epic, git, handoff
|
|
33
|
+
├── release-plan.yaml → target version, WSJF epic index
|
|
34
|
+
├── execution-status.yaml → flat story/epic status
|
|
35
|
+
├── planning-status.yaml → discover-phase checklist (optional)
|
|
36
|
+
├── requirements/
|
|
37
|
+
│ ├── VISION_LATEST.yaml
|
|
38
|
+
│ ├── SCOPE_LATEST.yaml
|
|
39
|
+
│ └── GLOSSARY_LATEST.yaml
|
|
40
|
+
├── plans/ → TECH_STACK, TEST_PLAN, etc.
|
|
41
|
+
├── epics/ → eNN shards (flat yaml or eNN/stories/)
|
|
42
|
+
└── bugs/ → BUG-*.md + registry.yaml
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
For each YAML file found, note: exists? keys populated? `handoff.next_skill`?
|
|
46
|
+
|
|
47
|
+
Legacy markdown (`specs/archive/STATE.md`, `RELEASE-PLAN.md`) is **not** SoT if YAML exists.
|
|
48
|
+
|
|
49
|
+
→ verify: `bash scripts/validate-specs-yaml.sh`
|
|
50
|
+
|
|
51
|
+
### 3. Read CLAUDE.md
|
|
52
|
+
|
|
53
|
+
If `CLAUDE.md` exists at the project root, read it for project context (stack, commands, architecture, conventions).
|
|
54
|
+
|
|
55
|
+
### 4. Check git state
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git status --short
|
|
59
|
+
git log --oneline -5
|
|
60
|
+
git branch --show-current
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Note: is there a feature branch active? Are there uncommitted changes? Do they match `specs/state.yaml` `git` block?
|
|
64
|
+
|
|
65
|
+
### 5. Map the lifecycle phase
|
|
66
|
+
|
|
67
|
+
Based on what you've found, identify which PMBOK phase this project is currently in:
|
|
68
|
+
|
|
69
|
+
| Phase | Signals |
|
|
70
|
+
|-------|---------|
|
|
71
|
+
| **Discover** | No `requirements/SCOPE_LATEST.yaml` yet, or only rough notes |
|
|
72
|
+
| **Design** | SCOPE exists but no `release-plan.yaml` |
|
|
73
|
+
| **Plan** | `release-plan.yaml` exists; on `main`/`master` branch |
|
|
74
|
+
| **Initiate** | On a feature branch; no code changes yet |
|
|
75
|
+
| **Execute** | `state.yaml` `active_flow: build_epic`; epic capsule in progress |
|
|
76
|
+
| **Verify** | Implementation done; run `verify-work` or `run-evals` |
|
|
77
|
+
| **Bug** | `state.yaml` `active_flow: fix_bug` or open `specs/bugs/BUG-*.md` |
|
|
78
|
+
| **Review** | All code written; no PR yet |
|
|
79
|
+
| **Integrate** | PR open; tests passing |
|
|
80
|
+
| **Sustain** | Ongoing; no active task |
|
|
81
|
+
|
|
82
|
+
Prefer `specs/state.yaml` `active_flow` and `handoff.next_skill` when present.
|
|
83
|
+
|
|
84
|
+
### 6. Suggest next skill
|
|
85
|
+
|
|
86
|
+
Based on the phase and state, recommend the most useful next step:
|
|
87
|
+
|
|
88
|
+
- **If in Plan/Bug phase and on `main`**: Suggest `kickoff-branch` next.
|
|
89
|
+
- **If in Initiate phase**: Suggest `develop-tdd` or `execute-plan` or `ship-epic`.
|
|
90
|
+
- **If in Execute phase**: Suggest `ship-epic` (resume) or `develop-tdd` for `active_story_id`.
|
|
91
|
+
- **If in Verify phase**: Suggest `verify-work` (UAT) or `run-evals`.
|
|
92
|
+
|
|
93
|
+
Example:
|
|
94
|
+
```
|
|
95
|
+
Phase: Execute
|
|
96
|
+
Active branch: feat/e02-verify (state.yaml matches)
|
|
97
|
+
release-plan.yaml: v3.0.0, 10 epics
|
|
98
|
+
active_epic_id: e02
|
|
99
|
+
|
|
100
|
+
Suggested next: ship-epic (resume e02s01 at develop-tdd)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Be specific — name the exact skill and why. If multiple options exist, list them in priority order.
|
|
104
|
+
|
|
105
|
+
### 7. Surface blockers
|
|
106
|
+
|
|
107
|
+
If something looks wrong:
|
|
108
|
+
- Broken tests in the baseline
|
|
109
|
+
- Open `specs/bugs/BUG-*.md` with no active fix branch
|
|
110
|
+
- Epic shards missing `verify:` on tasks
|
|
111
|
+
- `validate-specs-yaml.sh` fails
|
|
112
|
+
- Git hash in `state.yaml` stale vs `git rev-parse`
|
|
113
|
+
|
|
114
|
+
Report blockers first, before recommendations.
|
|
115
|
+
|
|
116
|
+
### 8. Record story start timestamp
|
|
117
|
+
|
|
118
|
+
At story start, write `metrics.story_start` with the current ISO 8601 timestamp to `specs/state.yaml` as an **informational progress marker only** — not a measurement input. Cycle-time metrics are now derived from git commit history via `scripts/record-cycle-time.sh` (see `skills/release-branch/REFERENCE.md` §Cycle-time recording).
|
|
119
|
+
|
|
120
|
+
## Utility outputs
|
|
121
|
+
|
|
122
|
+
### list-epics (absorbed)
|
|
123
|
+
|
|
124
|
+
Loop through all `specs/epics/*/epic.yaml` files and print a summary of story counts per epic. Useful for understanding overall project scope and epic distribution.
|
|
125
|
+
|
|
126
|
+
### check-gates (absorbed)
|
|
127
|
+
|
|
128
|
+
Print the current `active_flow` from `specs/state.yaml`, run `bash scripts/validate-specs-yaml.sh` to verify YAML integrity, and show `git status` to report uncommitted changes and branch state. Use before handoffs or context transitions.
|
|
129
|
+
|
|
130
|
+
## Handoff
|
|
131
|
+
|
|
132
|
+
Gate: READY -> next: plan-work
|
|
133
|
+
Writes: state.yaml handoff.next_skill = plan-work
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
<!-- story: e03s03 -->
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: terse-mode
|
|
3
|
+
model: haiku
|
|
4
|
+
description: "Fallback ultra-compressed communication mode. Cuts token usage ~75% by dropping filler, articles, and pleasantries while keeping full technical accuracy. Use ONLY when context is critically long and compressing output is necessary to continue. Not a strategy — token discipline comes from code shape (small functions, unique names, headless tests), not terser prompts. Use when user says \"caveman mode\", \"terse mode\", \"less tokens\", \"be brief\", or invokes /terse-mode."
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
9
|
+
|
|
10
|
+
## Persistence
|
|
11
|
+
> **HARD GATE** — **HARD GATE** — Terse mode is for reducing token usage in long sessions. Do NOT use terse mode when clarity is critical (complex design decisions, bug investigations). Enable it only on explicit user request.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
ACTIVE EVERY RESPONSE once triggered. No revert after many turns. No filler drift. Still active if unsure. Off only when user says "stop" or "normal mode".
|
|
15
|
+
|
|
16
|
+
## Rules
|
|
17
|
+
|
|
18
|
+
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Abbreviate common terms (DB/auth/config/req/res/fn/impl). Strip conjunctions. Use arrows for causality (X -> Y). One word when one word enough.
|
|
19
|
+
|
|
20
|
+
Technical terms stay exact. Code blocks unchanged. Errors quoted exact.
|
|
21
|
+
|
|
22
|
+
Pattern: `[thing] [action] [reason]. [next step].`
|
|
23
|
+
|
|
24
|
+
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
25
|
+
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
|
|
26
|
+
|
|
27
|
+
## Auto-Clarity Exception
|
|
28
|
+
|
|
29
|
+
Drop terse temporarily for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question. Resume after clear part done.
|
|
30
|
+
|
|
31
|
+
Example — destructive op:
|
|
32
|
+
|
|
33
|
+
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
|
|
34
|
+
>
|
|
35
|
+
> ```sql
|
|
36
|
+
> DROP TABLE users;
|
|
37
|
+
> ```
|
|
38
|
+
>
|
|
39
|
+
> Terse resume. Verify backup exist first.
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
<!-- story: e04s02 -->
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trace-requirement
|
|
3
|
+
model: haiku
|
|
4
|
+
description: "Link story IDs from specs/release-plan.yaml + epic capsule directories to the implementing code and tests. Produces specs/TRACEABILITY_LATEST.md. Use when you want to verify coverage of a release plan, audit which stories are implemented, or find \"dark\" stories with no code."
|
|
5
|
+
disable-model-invocation: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Trace Requirement
|
|
9
|
+
|
|
10
|
+
Build a traceability matrix from `specs/release-plan.yaml + epic capsule directories` to implementing code and tests. Surfaces gaps in both directions: stories with no code, and code with no story.
|
|
11
|
+
|
|
12
|
+
## Pre-flight
|
|
13
|
+
|
|
14
|
+
> **HARD GATE** — `specs/release-plan.yaml + epic capsule directories` must exist. If it doesn't, run `plan-release` first.
|
|
15
|
+
|
|
16
|
+
→ verify: `test -f specs/release-plan.yaml && test -d specs/epics`
|
|
17
|
+
|
|
18
|
+
Read `specs/release-plan.yaml + epic capsule directories` fully before proceeding.
|
|
19
|
+
|
|
20
|
+
## Process
|
|
21
|
+
|
|
22
|
+
### 1. Extract story IDs
|
|
23
|
+
|
|
24
|
+
From release-plan.yaml, collect all story IDs (e.g. `1.1`, `1.2`, `2.1`).
|
|
25
|
+
|
|
26
|
+
→ verify: `grep -rho 'e[0-9]\+s[0-9]\+' specs/release-plan.yaml specs/epics/*/epic.yaml 2>/dev/null | sort -u | head -1 | grep -q .`
|
|
27
|
+
|
|
28
|
+
### 2. Search for story tags in code
|
|
29
|
+
|
|
30
|
+
Look for `// story: X.Y` or `# story: X.Y` comments in source files and tests:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
grep -rn "story: " . --include="*.ts" --include="*.js" --include="*.py" --include="*.sh" | grep -v node_modules
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
→ verify: `[ "$(grep -rl "story: " . --include="*.ts" --include="*.sh" --include="*.py" 2>/dev/null | wc -l | tr -d " ")" -gt 0 ]`
|
|
37
|
+
|
|
38
|
+
### 3. Build the matrix
|
|
39
|
+
|
|
40
|
+
For each story ID:
|
|
41
|
+
- **Implemented**: list files that contain `// story: X.Y`
|
|
42
|
+
- **Tested**: list test files that contain `// story: X.Y`
|
|
43
|
+
- **Dark**: story has no tag in any file — flag as unimplemented
|
|
44
|
+
|
|
45
|
+
For each tagged file with no matching story ID in release-plan.yaml:
|
|
46
|
+
- **Orphan**: code exists but story was removed or never planned — flag for cleanup
|
|
47
|
+
|
|
48
|
+
### 4. Write specs/TRACEABILITY_LATEST.md
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
## Story Coverage
|
|
52
|
+
|
|
53
|
+
| Story | Title | Files | Tests | Status |
|
|
54
|
+
|-------|--------------------|-------|-------|-----------|
|
|
55
|
+
| 1.1 | [title] | 2 | 1 | Covered |
|
|
56
|
+
| 1.2 | [title] | 0 | 0 | Dark |
|
|
57
|
+
|
|
58
|
+
## Orphan Code (no story tag)
|
|
59
|
+
- [file]: contains untagged implementation
|
|
60
|
+
|
|
61
|
+
## Gaps (dark stories)
|
|
62
|
+
- Story 1.2: no implementation found → run plan-work
|
|
63
|
+
|
|
64
|
+
## Coverage summary
|
|
65
|
+
Stories: [X] covered / [Y] dark / [Z] total
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
→ verify: `grep -c "Covered\|Dark" specs/TRACEABILITY_LATEST.md`
|
|
69
|
+
|
|
70
|
+
Suggest `plan-work` for each dark story found.
|