bigpowers 2.72.1 → 2.73.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/.continue/rules/align-grid.md +0 -0
- package/.continue/rules/assess-impact.md +0 -0
- package/.continue/rules/audit-code.md +0 -0
- package/.continue/rules/audit-plan.md +0 -0
- package/.continue/rules/build-epic.md +0 -0
- package/.continue/rules/change-request.md +0 -0
- package/.continue/rules/commit-message.md +0 -0
- package/.continue/rules/compose-workflow.md +0 -0
- package/.continue/rules/craft-skill.md +0 -0
- package/.continue/rules/deepen-architecture.md +0 -0
- package/.continue/rules/define-language.md +0 -0
- package/.continue/rules/define-success.md +0 -0
- package/.continue/rules/delegate-task.md +0 -0
- package/.continue/rules/deploy.md +0 -0
- package/.continue/rules/design-interface.md +0 -0
- package/.continue/rules/develop-tdd.md +0 -0
- package/.continue/rules/diagnose-root.md +0 -0
- package/.continue/rules/dispatch-agents.md +0 -0
- package/.continue/rules/edit-document.md +0 -0
- package/.continue/rules/elaborate-spec.md +0 -0
- package/.continue/rules/enforce-first.md +0 -0
- package/.continue/rules/evolve-skill.md +0 -0
- package/.continue/rules/execute-plan.md +0 -0
- package/.continue/rules/extract-design.md +0 -0
- package/.continue/rules/fix-bug.md +0 -0
- package/.continue/rules/gate-trace.md +0 -0
- package/.continue/rules/grill-me.md +0 -0
- package/.continue/rules/grill-with-docs.md +0 -0
- package/.continue/rules/guard-git.md +0 -0
- package/.continue/rules/hook-commits.md +0 -0
- package/.continue/rules/inspect-quality.md +0 -0
- package/.continue/rules/investigate-bug.md +0 -0
- package/.continue/rules/kickoff-branch.md +0 -0
- package/.continue/rules/maintain-wiki.md +0 -0
- package/.continue/rules/map-codebase.md +0 -0
- package/.continue/rules/migrate-spec.md +0 -0
- package/.continue/rules/model-domain.md +0 -0
- package/.continue/rules/orchestrate-project.md +0 -0
- package/.continue/rules/organize-workspace.md +0 -0
- package/.continue/rules/plan-refactor.md +0 -0
- package/.continue/rules/plan-release.md +0 -0
- package/.continue/rules/plan-tests.md +0 -0
- package/.continue/rules/plan-work.md +0 -0
- package/.continue/rules/publish-package.md +0 -0
- package/.continue/rules/quick-fix.md +0 -0
- package/.continue/rules/release-branch.md +0 -0
- package/.continue/rules/request-review.md +0 -0
- package/.continue/rules/research-first.md +0 -0
- package/.continue/rules/reset-baseline.md +0 -0
- package/.continue/rules/respond-review.md +0 -0
- package/.continue/rules/run-benchmark.md +0 -0
- package/.continue/rules/run-evals.md +0 -0
- package/.continue/rules/run-planning.md +0 -0
- package/.continue/rules/scope-work.md +0 -0
- package/.continue/rules/search-skills.md +0 -0
- package/.continue/rules/security-review.md +0 -0
- package/.continue/rules/seed-conventions.md +0 -0
- package/.continue/rules/session-state.md +0 -0
- package/.continue/rules/setup-environment.md +0 -0
- package/.continue/rules/simulate-agents.md +0 -0
- package/.continue/rules/slice-tasks.md +0 -0
- package/.continue/rules/smoke-test.md +0 -0
- package/.continue/rules/spike-prototype.md +0 -0
- package/.continue/rules/stocktake-skills.md +0 -0
- package/.continue/rules/survey-context.md +0 -0
- package/.continue/rules/terse-mode.md +0 -0
- package/.continue/rules/trace-requirement.md +0 -0
- package/.continue/rules/using-bigpowers.md +0 -0
- package/.continue/rules/validate-contracts.md +0 -0
- package/.continue/rules/validate-fix.md +0 -0
- package/.continue/rules/verify-work.md +0 -0
- package/.continue/rules/visual-dashboard.md +0 -0
- package/.continue/rules/wire-ci.md +0 -0
- package/.continue/rules/wire-observability.md +0 -0
- package/.continue/rules/write-document.md +0 -0
- package/.kilocode/rules/align-grid.md +0 -0
- package/.kilocode/rules/assess-impact.md +0 -0
- package/.kilocode/rules/audit-code.md +0 -0
- package/.kilocode/rules/audit-plan.md +0 -0
- package/.kilocode/rules/build-epic.md +0 -0
- package/.kilocode/rules/change-request.md +0 -0
- package/.kilocode/rules/commit-message.md +0 -0
- package/.kilocode/rules/compose-workflow.md +0 -0
- package/.kilocode/rules/craft-skill.md +0 -0
- package/.kilocode/rules/deepen-architecture.md +0 -0
- package/.kilocode/rules/define-language.md +0 -0
- package/.kilocode/rules/define-success.md +0 -0
- package/.kilocode/rules/delegate-task.md +0 -0
- package/.kilocode/rules/deploy.md +0 -0
- package/.kilocode/rules/design-interface.md +0 -0
- package/.kilocode/rules/develop-tdd.md +0 -0
- package/.kilocode/rules/diagnose-root.md +0 -0
- package/.kilocode/rules/dispatch-agents.md +0 -0
- package/.kilocode/rules/edit-document.md +0 -0
- package/.kilocode/rules/elaborate-spec.md +0 -0
- package/.kilocode/rules/enforce-first.md +0 -0
- package/.kilocode/rules/evolve-skill.md +0 -0
- package/.kilocode/rules/execute-plan.md +0 -0
- package/.kilocode/rules/extract-design.md +0 -0
- package/.kilocode/rules/fix-bug.md +0 -0
- package/.kilocode/rules/gate-trace.md +0 -0
- package/.kilocode/rules/grill-me.md +0 -0
- package/.kilocode/rules/grill-with-docs.md +0 -0
- package/.kilocode/rules/guard-git.md +0 -0
- package/.kilocode/rules/hook-commits.md +0 -0
- package/.kilocode/rules/inspect-quality.md +0 -0
- package/.kilocode/rules/investigate-bug.md +0 -0
- package/.kilocode/rules/kickoff-branch.md +0 -0
- package/.kilocode/rules/maintain-wiki.md +0 -0
- package/.kilocode/rules/map-codebase.md +0 -0
- package/.kilocode/rules/migrate-spec.md +0 -0
- package/.kilocode/rules/model-domain.md +0 -0
- package/.kilocode/rules/orchestrate-project.md +0 -0
- package/.kilocode/rules/organize-workspace.md +0 -0
- package/.kilocode/rules/plan-refactor.md +0 -0
- package/.kilocode/rules/plan-release.md +0 -0
- package/.kilocode/rules/plan-tests.md +0 -0
- package/.kilocode/rules/plan-work.md +0 -0
- package/.kilocode/rules/publish-package.md +0 -0
- package/.kilocode/rules/quick-fix.md +0 -0
- package/.kilocode/rules/release-branch.md +0 -0
- package/.kilocode/rules/request-review.md +0 -0
- package/.kilocode/rules/research-first.md +0 -0
- package/.kilocode/rules/reset-baseline.md +0 -0
- package/.kilocode/rules/respond-review.md +0 -0
- package/.kilocode/rules/run-benchmark.md +0 -0
- package/.kilocode/rules/run-evals.md +0 -0
- package/.kilocode/rules/run-planning.md +0 -0
- package/.kilocode/rules/scope-work.md +0 -0
- package/.kilocode/rules/search-skills.md +0 -0
- package/.kilocode/rules/security-review.md +0 -0
- package/.kilocode/rules/seed-conventions.md +0 -0
- package/.kilocode/rules/session-state.md +0 -0
- package/.kilocode/rules/setup-environment.md +0 -0
- package/.kilocode/rules/simulate-agents.md +0 -0
- package/.kilocode/rules/slice-tasks.md +0 -0
- package/.kilocode/rules/smoke-test.md +0 -0
- package/.kilocode/rules/spike-prototype.md +0 -0
- package/.kilocode/rules/stocktake-skills.md +0 -0
- package/.kilocode/rules/survey-context.md +0 -0
- package/.kilocode/rules/terse-mode.md +0 -0
- package/.kilocode/rules/trace-requirement.md +0 -0
- package/.kilocode/rules/using-bigpowers.md +0 -0
- package/.kilocode/rules/validate-contracts.md +0 -0
- package/.kilocode/rules/validate-fix.md +0 -0
- package/.kilocode/rules/verify-work.md +0 -0
- package/.kilocode/rules/visual-dashboard.md +0 -0
- package/.kilocode/rules/wire-ci.md +0 -0
- package/.kilocode/rules/wire-observability.md +0 -0
- package/.kilocode/rules/write-document.md +0 -0
- package/.pi/package.json +1 -1
- package/.pi/prompts/seed-conventions.md +46 -8
- package/.pi/prompts/using-bigpowers.md +2 -2
- package/.pi/skills/seed-conventions/SKILL.md +46 -8
- package/.pi/skills/using-bigpowers/SKILL.md +2 -2
- package/CHANGELOG.md +14 -0
- package/audit-independent-unwaived-2026-07-06.md +49 -0
- package/package.json +1 -1
- package/scripts/adapters/agy.sh +6 -0
- package/scripts/adapters/aider.sh +7 -0
- package/scripts/adapters/cline.sh +8 -0
- package/scripts/adapters/continue.sh +11 -0
- package/scripts/adapters/cursor.sh +25 -0
- package/scripts/adapters/gemini.sh +36 -0
- package/scripts/adapters/goose.sh +3 -0
- package/scripts/adapters/hermes.sh +10 -0
- package/scripts/adapters/iflow.sh +6 -0
- package/scripts/adapters/kilocode.sh +11 -0
- package/scripts/adapters/omp.sh +10 -0
- package/scripts/adapters/pi.sh +37 -0
- package/scripts/adapters/qwen.sh +6 -0
- package/scripts/adapters/shai.sh +6 -0
- package/scripts/adapters/vibe.sh +6 -0
- package/scripts/adapters/zed.sh +10 -0
- package/scripts/check-blind-spots.sh +3 -0
- package/scripts/generate-context-bundle.sh +57 -0
- package/scripts/install.sh +21 -0
- package/scripts/lib/context-wire.sh +66 -0
- package/scripts/lib/target-contracts.sh +77 -0
- package/scripts/lib/trace-stories.py +3 -2
- package/scripts/sync-bugs-registry.sh +3 -1
- package/scripts/sync-skills.sh +24 -9
- package/scripts/targets.yaml +202 -0
- package/scripts/test-adapters.sh +80 -0
- package/scripts/test-trace-strict.sh +132 -0
- package/scripts/validate-targets-yaml.sh +69 -0
- package/scripts/verify-install.sh +76 -3
- package/skills/seed-conventions/REFERENCE.md +40 -5
- package/skills/seed-conventions/SKILL.md +6 -3
- package/skills/using-bigpowers/SKILL.md +2 -2
- package/skills-lock.json +2 -2
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# story: e37s05
|
|
2
|
+
registry_version: "1"
|
|
3
|
+
generated_by: bigpowers
|
|
4
|
+
|
|
5
|
+
targets:
|
|
6
|
+
- id: cursor
|
|
7
|
+
name: Cursor
|
|
8
|
+
tier: default_on
|
|
9
|
+
skill:
|
|
10
|
+
adapter: cursor
|
|
11
|
+
output: .cursor/rules
|
|
12
|
+
context:
|
|
13
|
+
adapter: cursor
|
|
14
|
+
mode: symlink
|
|
15
|
+
file: CLAUDE.md
|
|
16
|
+
contracts:
|
|
17
|
+
- cursor_rules_nonempty
|
|
18
|
+
- symlink_claude_md
|
|
19
|
+
|
|
20
|
+
- id: gemini
|
|
21
|
+
name: Gemini CLI
|
|
22
|
+
tier: default_on
|
|
23
|
+
skill:
|
|
24
|
+
adapter: gemini
|
|
25
|
+
output: .gemini/extensions/bigpowers
|
|
26
|
+
context:
|
|
27
|
+
adapter: gemini
|
|
28
|
+
mode: symlink
|
|
29
|
+
file: GEMINI.md
|
|
30
|
+
contracts:
|
|
31
|
+
- gemini_ext_exists
|
|
32
|
+
|
|
33
|
+
- id: pi
|
|
34
|
+
name: pi Agent
|
|
35
|
+
tier: default_on
|
|
36
|
+
skill:
|
|
37
|
+
adapter: pi
|
|
38
|
+
output: .pi/skills
|
|
39
|
+
context:
|
|
40
|
+
adapter: pi
|
|
41
|
+
mode: symlink
|
|
42
|
+
file: CLAUDE.md
|
|
43
|
+
contracts:
|
|
44
|
+
- pi_skills_nonempty
|
|
45
|
+
|
|
46
|
+
- id: cline
|
|
47
|
+
name: Cline
|
|
48
|
+
tier: default_on
|
|
49
|
+
skill: null
|
|
50
|
+
context:
|
|
51
|
+
adapter: cline
|
|
52
|
+
mode: native
|
|
53
|
+
contracts:
|
|
54
|
+
- agents_md_exists
|
|
55
|
+
|
|
56
|
+
- id: aider
|
|
57
|
+
name: Aider
|
|
58
|
+
tier: opt_in
|
|
59
|
+
skill: null
|
|
60
|
+
context:
|
|
61
|
+
adapter: aider
|
|
62
|
+
mode: config-bridge
|
|
63
|
+
bridge_file: .aider.conf.yml
|
|
64
|
+
bridge_key: read
|
|
65
|
+
contracts:
|
|
66
|
+
- aider_bridge
|
|
67
|
+
|
|
68
|
+
# Wave A (e37s09) — Goose native AGENTS.md; agy proprietary beta
|
|
69
|
+
- id: goose
|
|
70
|
+
name: Goose (Block OSS)
|
|
71
|
+
tier: default_on
|
|
72
|
+
skill: null
|
|
73
|
+
context:
|
|
74
|
+
adapter: goose
|
|
75
|
+
mode: native
|
|
76
|
+
contracts:
|
|
77
|
+
- agents_md_exists
|
|
78
|
+
|
|
79
|
+
- id: agy
|
|
80
|
+
name: Antigravity agy (proprietary beta)
|
|
81
|
+
tier: opt_in
|
|
82
|
+
skill: null
|
|
83
|
+
context:
|
|
84
|
+
adapter: agy
|
|
85
|
+
mode: symlink
|
|
86
|
+
file: CLAUDE.md
|
|
87
|
+
contracts:
|
|
88
|
+
- symlink_claude_md
|
|
89
|
+
|
|
90
|
+
# Wave B (e37s10) — skills-dir adapters
|
|
91
|
+
- id: zed
|
|
92
|
+
name: Zed
|
|
93
|
+
tier: opt_in
|
|
94
|
+
skill:
|
|
95
|
+
adapter: zed
|
|
96
|
+
output: ~/.config/zed/assistant
|
|
97
|
+
context:
|
|
98
|
+
adapter: zed
|
|
99
|
+
mode: copy
|
|
100
|
+
file: AGENTS.md
|
|
101
|
+
contracts:
|
|
102
|
+
- agents_md_exists
|
|
103
|
+
|
|
104
|
+
- id: omp
|
|
105
|
+
name: Open Multi-Process
|
|
106
|
+
tier: opt_in
|
|
107
|
+
skill:
|
|
108
|
+
adapter: omp
|
|
109
|
+
output: .omp/skills
|
|
110
|
+
context:
|
|
111
|
+
adapter: omp
|
|
112
|
+
mode: symlink
|
|
113
|
+
file: CLAUDE.md
|
|
114
|
+
contracts:
|
|
115
|
+
- symlink_claude_md
|
|
116
|
+
|
|
117
|
+
- id: hermes
|
|
118
|
+
name: Hermes Agent
|
|
119
|
+
tier: opt_in
|
|
120
|
+
skill:
|
|
121
|
+
adapter: hermes
|
|
122
|
+
output: .hermes/skills
|
|
123
|
+
context:
|
|
124
|
+
adapter: hermes
|
|
125
|
+
mode: config-bridge
|
|
126
|
+
bridge_file: .hermes/config.yaml
|
|
127
|
+
bridge_key: instructions
|
|
128
|
+
contracts:
|
|
129
|
+
- agents_md_exists
|
|
130
|
+
|
|
131
|
+
# Wave C (e37s11)
|
|
132
|
+
- id: qwen
|
|
133
|
+
name: Qwen (Alibaba)
|
|
134
|
+
tier: opt_in
|
|
135
|
+
skill: null
|
|
136
|
+
context:
|
|
137
|
+
adapter: qwen
|
|
138
|
+
mode: symlink
|
|
139
|
+
file: QWEN.md
|
|
140
|
+
contracts:
|
|
141
|
+
- agents_md_exists
|
|
142
|
+
|
|
143
|
+
- id: kilocode
|
|
144
|
+
name: Kilocode
|
|
145
|
+
tier: opt_in
|
|
146
|
+
skill:
|
|
147
|
+
adapter: kilocode
|
|
148
|
+
output: .kilocode/rules
|
|
149
|
+
context:
|
|
150
|
+
adapter: kilocode
|
|
151
|
+
mode: copy
|
|
152
|
+
file: AGENTS.md
|
|
153
|
+
contracts:
|
|
154
|
+
- agents_md_exists
|
|
155
|
+
|
|
156
|
+
# Wave D (e37s12)
|
|
157
|
+
- id: continue
|
|
158
|
+
name: Continue
|
|
159
|
+
tier: opt_in
|
|
160
|
+
skill:
|
|
161
|
+
adapter: continue
|
|
162
|
+
output: .continue/rules
|
|
163
|
+
context:
|
|
164
|
+
adapter: continue
|
|
165
|
+
mode: copy
|
|
166
|
+
file: AGENTS.md
|
|
167
|
+
contracts:
|
|
168
|
+
- agents_md_exists
|
|
169
|
+
|
|
170
|
+
# Wave E (e37s13) — optional low-priority
|
|
171
|
+
- id: iflow
|
|
172
|
+
name: iFlow
|
|
173
|
+
tier: optional
|
|
174
|
+
skill: null
|
|
175
|
+
context:
|
|
176
|
+
adapter: iflow
|
|
177
|
+
mode: symlink
|
|
178
|
+
file: AGENTS.md
|
|
179
|
+
contracts:
|
|
180
|
+
- agents_md_exists
|
|
181
|
+
|
|
182
|
+
- id: vibe
|
|
183
|
+
name: Vibe
|
|
184
|
+
tier: optional
|
|
185
|
+
skill: null
|
|
186
|
+
context:
|
|
187
|
+
adapter: vibe
|
|
188
|
+
mode: symlink
|
|
189
|
+
file: AGENTS.md
|
|
190
|
+
contracts:
|
|
191
|
+
- agents_md_exists
|
|
192
|
+
|
|
193
|
+
- id: shai
|
|
194
|
+
name: Shai
|
|
195
|
+
tier: optional
|
|
196
|
+
skill: null
|
|
197
|
+
context:
|
|
198
|
+
adapter: shai
|
|
199
|
+
mode: symlink
|
|
200
|
+
file: AGENTS.md
|
|
201
|
+
contracts:
|
|
202
|
+
- agents_md_exists
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# scenario: SC-e37s05-P1-02
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
TARGETS_FILE="$SCRIPT_DIR/targets.yaml"
|
|
8
|
+
DRY_RUN=0
|
|
9
|
+
FILTER=""
|
|
10
|
+
|
|
11
|
+
for arg in "$@"; do
|
|
12
|
+
case "$arg" in
|
|
13
|
+
--dry-run) DRY_RUN=1 ;;
|
|
14
|
+
-*) echo "test-adapters: unknown flag $arg" >&2; exit 2 ;;
|
|
15
|
+
*) FILTER="$arg" ;;
|
|
16
|
+
esac
|
|
17
|
+
done
|
|
18
|
+
|
|
19
|
+
command -v yq >/dev/null || { echo "test-adapters: yq required" >&2; exit 1; }
|
|
20
|
+
bash "$SCRIPT_DIR/validate-targets-yaml.sh" >/dev/null
|
|
21
|
+
|
|
22
|
+
PASS=0
|
|
23
|
+
FAIL=0
|
|
24
|
+
TMPDIR=""
|
|
25
|
+
|
|
26
|
+
cleanup() { [[ -n "$TMPDIR" && -d "$TMPDIR" ]] && rm -rf "$TMPDIR"; }
|
|
27
|
+
trap cleanup EXIT
|
|
28
|
+
|
|
29
|
+
pass() { echo " PASS $1"; PASS=$((PASS + 1)); }
|
|
30
|
+
fail() { echo " FAIL $1"; FAIL=$((FAIL + 1)); }
|
|
31
|
+
|
|
32
|
+
test_adapter() {
|
|
33
|
+
local id="$1"
|
|
34
|
+
local adapter_file="$SCRIPT_DIR/adapters/${id}.sh"
|
|
35
|
+
|
|
36
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
37
|
+
echo "would test: $id"
|
|
38
|
+
return 0
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
[[ -f "$adapter_file" ]] || { fail "$id: adapter missing"; return; }
|
|
42
|
+
pass "$id: exists"
|
|
43
|
+
|
|
44
|
+
# shellcheck source=/dev/null
|
|
45
|
+
source "$adapter_file" 2>/dev/null && pass "$id: sourceable" || { fail "$id: source error"; return; }
|
|
46
|
+
|
|
47
|
+
local has_skill has_context mode
|
|
48
|
+
has_skill=$(yq -r ".targets[] | select(.id==\"$id\") | .skill != null" "$TARGETS_FILE")
|
|
49
|
+
has_context=$(yq -r ".targets[] | select(.id==\"$id\") | .context != null" "$TARGETS_FILE")
|
|
50
|
+
mode=$(yq -r ".targets[] | select(.id==\"$id\") | .context.mode // \"\"" "$TARGETS_FILE")
|
|
51
|
+
|
|
52
|
+
if [[ "$has_skill" == "true" ]]; then
|
|
53
|
+
declare -f render_skill >/dev/null 2>&1 && pass "$id: render_skill defined" || fail "$id: render_skill missing"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
if [[ "$has_context" == "true" && "$mode" != "native" ]]; then
|
|
57
|
+
declare -f wire_context >/dev/null 2>&1 && pass "$id: wire_context defined" || fail "$id: wire_context missing"
|
|
58
|
+
|
|
59
|
+
TMPDIR=$(mktemp -d)
|
|
60
|
+
cp "$SCRIPT_DIR/../docs/templates/AGENTS.md" "$TMPDIR/AGENTS.md" 2>/dev/null || echo "# test" > "$TMPDIR/AGENTS.md"
|
|
61
|
+
(
|
|
62
|
+
cd "$TMPDIR"
|
|
63
|
+
# shellcheck source=/dev/null
|
|
64
|
+
source "$adapter_file"
|
|
65
|
+
wire_context 2>/dev/null || true
|
|
66
|
+
wire_context 2>/dev/null && pass "$id: idempotent wire_context" || fail "$id: wire_context failed"
|
|
67
|
+
)
|
|
68
|
+
fi
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if [[ -n "$FILTER" ]]; then
|
|
72
|
+
test_adapter "$FILTER"
|
|
73
|
+
else
|
|
74
|
+
while IFS= read -r adapter; do
|
|
75
|
+
[[ -n "$adapter" ]] && test_adapter "$adapter"
|
|
76
|
+
done < <(yq -r '.targets[] | (.skill.adapter // .context.adapter)' "$TARGETS_FILE" | sort -u)
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
echo "test-adapters: $PASS passed, $FAIL failed"
|
|
80
|
+
[[ "$FAIL" -eq 0 ]] || exit 1
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# test-trace-strict.sh — strict mode must not block unimplemented P0 stories
|
|
3
|
+
#
|
|
4
|
+
# Covers BUG-2026-07-06T205700:
|
|
5
|
+
# - todo/planned/backlog P0 stories with 0 links do not fail --strict
|
|
6
|
+
# - done P0 stories with 0 links still fail --strict
|
|
7
|
+
#
|
|
8
|
+
# Usage: bash scripts/test-trace-strict.sh
|
|
9
|
+
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/python-env.sh"
|
|
12
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
13
|
+
resolve_repo_root
|
|
14
|
+
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
GREEN='\033[0;32m'
|
|
17
|
+
NC='\033[0m'
|
|
18
|
+
|
|
19
|
+
TRACE_ENGINE="$REPO_ROOT/scripts/lib/trace-stories.py"
|
|
20
|
+
FAILURES=0
|
|
21
|
+
|
|
22
|
+
pass() { echo -e "${GREEN}PASS${NC} $1"; }
|
|
23
|
+
fail() { echo -e "${RED}FAIL${NC} $1"; FAILURES=$((FAILURES + 1)); }
|
|
24
|
+
|
|
25
|
+
run_strict() {
|
|
26
|
+
local root="$1"
|
|
27
|
+
local matrix_json
|
|
28
|
+
local trace_md
|
|
29
|
+
local okf_dir
|
|
30
|
+
matrix_json=$(mktemp)
|
|
31
|
+
trace_md=$(mktemp)
|
|
32
|
+
okf_dir=$(mktemp -d)
|
|
33
|
+
set +e
|
|
34
|
+
local output
|
|
35
|
+
output=$($PYTHON "$TRACE_ENGINE" "$root" "$matrix_json" "$trace_md" "$okf_dir" 1 "" 2>&1)
|
|
36
|
+
local exit_code=$?
|
|
37
|
+
set -e
|
|
38
|
+
rm -f "$matrix_json" "$trace_md"
|
|
39
|
+
rm -rf "$okf_dir"
|
|
40
|
+
printf '%s\n' "$output"
|
|
41
|
+
return "$exit_code"
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
write_fixture() {
|
|
45
|
+
local root="$1"
|
|
46
|
+
local done_story="${2:-}"
|
|
47
|
+
|
|
48
|
+
mkdir -p "$root/specs/epics/e99-test"
|
|
49
|
+
cat >"$root/specs/release-plan.yaml" <<'EOF'
|
|
50
|
+
release:
|
|
51
|
+
version: "1.0.0"
|
|
52
|
+
codename: "Strict Test"
|
|
53
|
+
status: "proposed"
|
|
54
|
+
epics:
|
|
55
|
+
- id: e99
|
|
56
|
+
title: "Strict Test Epic"
|
|
57
|
+
wsjf: 5.0
|
|
58
|
+
bcps: 51
|
|
59
|
+
mode: capsule
|
|
60
|
+
status: proposed
|
|
61
|
+
capsule_dir: epics/e99-test
|
|
62
|
+
EOF
|
|
63
|
+
|
|
64
|
+
{
|
|
65
|
+
echo "stories:"
|
|
66
|
+
for i in $(seq 1 51); do
|
|
67
|
+
sid=$(printf 'e99s%02d' "$i")
|
|
68
|
+
printf ' - id: %s\n title: "Story %d"\n bcp: 1\n' "$sid" "$i"
|
|
69
|
+
done
|
|
70
|
+
} >"$root/specs/epics/e99-test/epic.yaml"
|
|
71
|
+
|
|
72
|
+
{
|
|
73
|
+
echo "development_status:"
|
|
74
|
+
for i in $(seq 1 51); do
|
|
75
|
+
sid=$(printf 'e99s%02d' "$i")
|
|
76
|
+
if [[ -n "$done_story" && "$sid" == "$done_story" ]]; then
|
|
77
|
+
echo " $sid: done"
|
|
78
|
+
else
|
|
79
|
+
echo " $sid: todo"
|
|
80
|
+
fi
|
|
81
|
+
done
|
|
82
|
+
} >"$root/specs/execution-status.yaml"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
echo "=== trace-strict: integration (real repo) ==="
|
|
86
|
+
set +e
|
|
87
|
+
bash "$REPO_ROOT/scripts/trace-stories.sh" --strict --json >/dev/null 2>&1
|
|
88
|
+
repo_exit=$?
|
|
89
|
+
set -e
|
|
90
|
+
if [[ $repo_exit -eq 0 ]]; then
|
|
91
|
+
pass "trace-stories.sh --strict exits 0 on repo"
|
|
92
|
+
else
|
|
93
|
+
fail "trace-stories.sh --strict exits $repo_exit on repo (expected 0)"
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
echo ""
|
|
97
|
+
echo "=== trace-strict: fixture — all todo P0, 0 links ==="
|
|
98
|
+
FIXTURE_ROOT=$(mktemp -d)
|
|
99
|
+
trap 'rm -rf "$FIXTURE_ROOT"' EXIT
|
|
100
|
+
write_fixture "$FIXTURE_ROOT"
|
|
101
|
+
set +e
|
|
102
|
+
todo_output=$(run_strict "$FIXTURE_ROOT")
|
|
103
|
+
todo_exit=$?
|
|
104
|
+
set -e
|
|
105
|
+
if [[ $todo_exit -eq 0 ]]; then
|
|
106
|
+
pass "strict passes when P0 stories are todo with 0 links"
|
|
107
|
+
else
|
|
108
|
+
fail "strict exits $todo_exit on all-todo fixture (expected 0)"
|
|
109
|
+
echo "$todo_output"
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
echo ""
|
|
113
|
+
echo "=== trace-strict: fixture — done P0 with 0 links ==="
|
|
114
|
+
write_fixture "$FIXTURE_ROOT" "e99s01"
|
|
115
|
+
set +e
|
|
116
|
+
done_output=$(run_strict "$FIXTURE_ROOT")
|
|
117
|
+
done_exit=$?
|
|
118
|
+
set -e
|
|
119
|
+
if [[ $done_exit -eq 2 ]] && grep -q "P0 stories with 0% coverage" <<<"$done_output"; then
|
|
120
|
+
pass "strict fails when a done P0 story has 0 links"
|
|
121
|
+
else
|
|
122
|
+
fail "strict exits $done_exit on done-dark fixture (expected 2 with P0 message)"
|
|
123
|
+
echo "$done_output"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
echo ""
|
|
127
|
+
if [[ $FAILURES -eq 0 ]]; then
|
|
128
|
+
echo "test-trace-strict: PASS"
|
|
129
|
+
exit 0
|
|
130
|
+
fi
|
|
131
|
+
echo "test-trace-strict: FAIL ($FAILURES failure(s))"
|
|
132
|
+
exit 1
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# story: e37s05
|
|
3
|
+
# scenario: SC-e37s05-P1-01
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
TARGETS_FILE="${1:-$SCRIPT_DIR/targets.yaml}"
|
|
8
|
+
|
|
9
|
+
if ! command -v yq >/dev/null 2>&1; then
|
|
10
|
+
echo "validate-targets-yaml: yq required — brew install yq" >&2
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
[[ -f "$TARGETS_FILE" ]] || { echo "validate-targets-yaml: missing $TARGETS_FILE" >&2; exit 1; }
|
|
15
|
+
|
|
16
|
+
version=$(yq -r '.registry_version // ""' "$TARGETS_FILE")
|
|
17
|
+
[[ -n "$version" && "$version" != "null" ]] || { echo "validate-targets-yaml: registry_version required" >&2; exit 1; }
|
|
18
|
+
|
|
19
|
+
count=$(yq '.targets | length' "$TARGETS_FILE")
|
|
20
|
+
[[ "$count" -ge 5 ]] || { echo "validate-targets-yaml: need >= 5 targets, got $count" >&2; exit 1; }
|
|
21
|
+
|
|
22
|
+
valid_tiers=" default_on opt_in optional "
|
|
23
|
+
valid_modes=" native symlink copy config-bridge "
|
|
24
|
+
|
|
25
|
+
while IFS= read -r row; do
|
|
26
|
+
id=$(echo "$row" | yq -r '.id // ""')
|
|
27
|
+
name=$(echo "$row" | yq -r '.name // ""')
|
|
28
|
+
tier=$(echo "$row" | yq -r '.tier // ""')
|
|
29
|
+
skill_null=$(echo "$row" | yq -r '.skill == null')
|
|
30
|
+
context_null=$(echo "$row" | yq -r '.context == null')
|
|
31
|
+
|
|
32
|
+
[[ -n "$id" ]] || { echo "validate-targets-yaml: target missing id" >&2; exit 1; }
|
|
33
|
+
[[ -n "$name" ]] || { echo "validate-targets-yaml: $id missing name" >&2; exit 1; }
|
|
34
|
+
[[ "$valid_tiers" == *" $tier "* ]] || { echo "validate-targets-yaml: $id invalid tier: $tier" >&2; exit 1; }
|
|
35
|
+
[[ "$skill_null" == "false" || "$context_null" == "false" ]] || {
|
|
36
|
+
echo "validate-targets-yaml: $id needs skill or context" >&2; exit 1
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if [[ "$skill_null" == "false" ]]; then
|
|
40
|
+
adapter=$(echo "$row" | yq -r '.skill.adapter // ""')
|
|
41
|
+
[[ -n "$adapter" ]] || { echo "validate-targets-yaml: $id skill.adapter required" >&2; exit 1; }
|
|
42
|
+
adapter_file="$SCRIPT_DIR/adapters/${adapter}.sh"
|
|
43
|
+
[[ -f "$adapter_file" ]] || { echo "validate-targets-yaml: missing adapter $adapter_file" >&2; exit 1; }
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
if [[ "$context_null" == "false" ]]; then
|
|
47
|
+
mode=$(echo "$row" | yq -r '.context.mode // ""')
|
|
48
|
+
adapter=$(echo "$row" | yq -r '.context.adapter // ""')
|
|
49
|
+
[[ "$valid_modes" == *" $mode "* ]] || { echo "validate-targets-yaml: $id invalid context.mode: $mode" >&2; exit 1; }
|
|
50
|
+
[[ -n "$adapter" ]] || { echo "validate-targets-yaml: $id context.adapter required" >&2; exit 1; }
|
|
51
|
+
adapter_file="$SCRIPT_DIR/adapters/${adapter}.sh"
|
|
52
|
+
[[ -f "$adapter_file" ]] || { echo "validate-targets-yaml: missing context adapter $adapter_file" >&2; exit 1; }
|
|
53
|
+
if [[ "$mode" == "symlink" || "$mode" == "copy" ]]; then
|
|
54
|
+
file=$(echo "$row" | yq -r '.context.file // ""')
|
|
55
|
+
[[ -n "$file" ]] || { echo "validate-targets-yaml: $id context.file required for $mode" >&2; exit 1; }
|
|
56
|
+
fi
|
|
57
|
+
if [[ "$mode" == "config-bridge" ]]; then
|
|
58
|
+
bf=$(echo "$row" | yq -r '.context.bridge_file // ""')
|
|
59
|
+
bk=$(echo "$row" | yq -r '.context.bridge_key // ""')
|
|
60
|
+
[[ -n "$bf" && -n "$bk" ]] || { echo "validate-targets-yaml: $id bridge_file/key required" >&2; exit 1; }
|
|
61
|
+
fi
|
|
62
|
+
fi
|
|
63
|
+
done < <(yq -o=json '.targets[]' "$TARGETS_FILE" | jq -c '.')
|
|
64
|
+
|
|
65
|
+
# Unique ids
|
|
66
|
+
dup=$(yq -r '.targets[].id' "$TARGETS_FILE" | sort | uniq -d)
|
|
67
|
+
[[ -z "$dup" ]] || { echo "validate-targets-yaml: duplicate ids: $dup" >&2; exit 1; }
|
|
68
|
+
|
|
69
|
+
echo "validate-targets-yaml: PASS ($count targets)"
|
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# story: e47s04
|
|
3
|
-
# verify-install.sh — manual assertion harness for install + seed wiring
|
|
2
|
+
# story: e47s04 e37s02 e37s04 e37s08
|
|
3
|
+
# verify-install.sh — manual assertion harness for install + seed wiring + Reach matrix
|
|
4
4
|
set -euo pipefail
|
|
5
5
|
source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
6
6
|
resolve_repo_root
|
|
7
7
|
|
|
8
|
+
MATRIX_MODE=0
|
|
9
|
+
FULL_MATRIX=0
|
|
10
|
+
for arg in "$@"; do
|
|
11
|
+
case "$arg" in
|
|
12
|
+
--matrix) MATRIX_MODE=1 ;;
|
|
13
|
+
--full) FULL_MATRIX=1 ;;
|
|
14
|
+
esac
|
|
15
|
+
done
|
|
16
|
+
|
|
17
|
+
if [[ "$MATRIX_MODE" -eq 1 ]]; then
|
|
18
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/target-contracts.sh"
|
|
19
|
+
command -v yq >/dev/null || { echo "verify-install: yq required for --matrix" >&2; exit 1; }
|
|
20
|
+
cd "$REPO_ROOT"
|
|
21
|
+
PASS=0
|
|
22
|
+
FAIL=0
|
|
23
|
+
while IFS= read -r row; do
|
|
24
|
+
id=$(echo "$row" | yq -r '.id')
|
|
25
|
+
tier=$(echo "$row" | yq -r '.tier')
|
|
26
|
+
[[ "$tier" == "optional" && "$FULL_MATRIX" -eq 0 ]] && continue
|
|
27
|
+
if [[ "$tier" == "opt_in" ]]; then
|
|
28
|
+
echo "${id}: SKIP (opt_in)"
|
|
29
|
+
continue
|
|
30
|
+
fi
|
|
31
|
+
contracts=$(echo "$row" | yq -r '.contracts // [] | .[]' 2>/dev/null || true)
|
|
32
|
+
target_pass=1
|
|
33
|
+
while IFS= read -r contract; do
|
|
34
|
+
[[ -z "$contract" ]] && continue
|
|
35
|
+
result=$(run_contract "$id" "$contract" 2>&1 | head -1)
|
|
36
|
+
echo "$result"
|
|
37
|
+
[[ "$result" == FAIL* ]] && target_pass=0
|
|
38
|
+
done <<< "$contracts"
|
|
39
|
+
if [[ "$target_pass" -eq 1 ]]; then
|
|
40
|
+
echo "${id}: PASS"
|
|
41
|
+
PASS=$((PASS + 1))
|
|
42
|
+
else
|
|
43
|
+
echo "${id}: FAIL"
|
|
44
|
+
FAIL=$((FAIL + 1))
|
|
45
|
+
fi
|
|
46
|
+
done < <(yq -o=json '.targets[]' "$REPO_ROOT/scripts/targets.yaml" | jq -c '.')
|
|
47
|
+
echo "verify-install --matrix: $PASS passed, $FAIL failed"
|
|
48
|
+
[[ "$FAIL" -eq 0 && "$PASS" -gt 0 ]] || exit 1
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
|
|
8
52
|
PASS=0
|
|
9
53
|
FAIL=0
|
|
10
54
|
TMPDIR=""
|
|
@@ -27,16 +71,45 @@ echo "$DRY_OUT" | grep -q 'Gemini CLI →' && pass "install includes Gemini CLI"
|
|
|
27
71
|
echo "$DRY_OUT" | grep -q 'Cursor →' && pass "install includes Cursor" || fail "install missing Cursor"
|
|
28
72
|
|
|
29
73
|
for tool in "Claude Code" "pi"; do
|
|
30
|
-
# Find the skills count in the tool's section (between this tool header and next section)
|
|
31
74
|
section=$(echo "$DRY_OUT" | sed -n "/${tool} →/,/^$/p")
|
|
32
75
|
count=$(echo "$section" | grep -o '[0-9]\+ skills installed' | grep -o '[0-9]\+' || echo "0")
|
|
33
76
|
[[ "$count" -gt 0 ]] && pass "${tool}: $count skills" || fail "${tool}: 0 skills"
|
|
34
77
|
done
|
|
35
78
|
|
|
79
|
+
echo ""
|
|
80
|
+
echo "=== AGENTS.md spine (e37s04) ==="
|
|
81
|
+
[[ -f "$REPO_ROOT/docs/templates/AGENTS.md" ]] && pass "Reach template exists" || fail "Reach template missing"
|
|
82
|
+
grep -q 'Preflight' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Preflight" || fail "template: missing Preflight"
|
|
83
|
+
grep -qi 'cline\|aider\|opencode' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: multi-agent preamble" || fail "template: missing OSS targets"
|
|
84
|
+
grep -q '## Test' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Test section" || fail "template: missing Test"
|
|
85
|
+
grep -q '## Lint' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Lint section" || fail "template: missing Lint"
|
|
86
|
+
grep -q '## Build' "$REPO_ROOT/docs/templates/AGENTS.md" && pass "template: Build section" || fail "template: missing Build"
|
|
87
|
+
|
|
88
|
+
echo ""
|
|
89
|
+
echo "=== Cline native AGENTS.md (e37s02) ==="
|
|
90
|
+
[[ -f "$REPO_ROOT/AGENTS.md" || -f "$REPO_ROOT/docs/templates/AGENTS.md" ]] && pass "Cline: AGENTS.md present (native reader)" || fail "Cline: AGENTS.md missing"
|
|
91
|
+
grep -qi 'cline' "$REPO_ROOT/skills/using-bigpowers/SKILL.md" && pass "using-bigpowers: Cline section" || fail "using-bigpowers: missing Cline"
|
|
92
|
+
|
|
93
|
+
echo ""
|
|
94
|
+
echo "=== Aider bridge (e37s03) ==="
|
|
95
|
+
grep -qi 'aider' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "seed-conventions: Aider wiring" || fail "seed-conventions: missing Aider"
|
|
96
|
+
grep -qi 'Aider-AI' "$REPO_ROOT/skills/using-bigpowers/SKILL.md" && pass "using-bigpowers: Aider-AI upstream" || fail "using-bigpowers: missing Aider-AI"
|
|
97
|
+
|
|
98
|
+
echo ""
|
|
99
|
+
echo "=== Optional Codex wave (e37s04) ==="
|
|
100
|
+
if grep -qi 'codex' "$REPO_ROOT/skills/seed-conventions/SKILL.md" 2>/dev/null; then
|
|
101
|
+
grep -qi 'config.toml' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "Codex: REFERENCE config.toml" || fail "Codex: missing config.toml"
|
|
102
|
+
echo "$DRY_OUT" | grep -qi 'codex' && pass "Codex: install --dry-run mentions codex" || fail "Codex: install missing codex"
|
|
103
|
+
else
|
|
104
|
+
pass "Codex: wave absent — assertions skipped"
|
|
105
|
+
fi
|
|
106
|
+
|
|
36
107
|
echo ""
|
|
37
108
|
echo "=== seed-conventions local wiring ==="
|
|
38
109
|
grep -qi 'local tool wiring' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: local tool wiring" || fail "SKILL.md: missing local tool wiring"
|
|
39
110
|
grep -qi 'opencode.json' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "REFERENCE.md: opencode.json" || fail "REFERENCE.md: missing opencode.json"
|
|
111
|
+
grep -qi 'AGENTS.md' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: AGENTS.md spine" || fail "SKILL.md: missing AGENTS.md"
|
|
112
|
+
grep -qi 'symlink' "$REPO_ROOT/skills/seed-conventions/SKILL.md" && pass "SKILL.md: CLAUDE.md symlink" || fail "SKILL.md: missing symlink"
|
|
40
113
|
grep -qi 'cursor/rules' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" && pass "REFERENCE.md: Cursor symlink" || fail "REFERENCE.md: missing Cursor symlink"
|
|
41
114
|
|
|
42
115
|
OPENCODE_JSON=$(sed -n '/```json/,/```/p' "$REPO_ROOT/skills/seed-conventions/REFERENCE.md" | grep -v '```' || true)
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
# story: e51s02
|
|
1
|
+
# story: e51s02 e37s01 e37s03 e37s14
|
|
2
2
|
# Seed Conventions — Reference Templates
|
|
3
3
|
|
|
4
|
-
##
|
|
4
|
+
## AGENTS.md spine (Reach Template — e37s01)
|
|
5
|
+
|
|
6
|
+
Canonical source: copy from `docs/templates/AGENTS.md` in the bigpowers repo (Reach Template).
|
|
7
|
+
Do not invent structure ad hoc — the template includes multi-agent preamble, Preflight, Test/Lint/Build sections.
|
|
8
|
+
|
|
9
|
+
When local tool wiring is opted in:
|
|
10
|
+
1. Copy Reach Template → project root `AGENTS.md`, fill interview placeholders
|
|
11
|
+
2. `ln -sf AGENTS.md CLAUDE.md` (or content copy on Windows when symlink fails)
|
|
12
|
+
3. Write `opencode.json` with `"instructions": ["AGENTS.md"]`
|
|
13
|
+
|
|
14
|
+
When user **opts out** of local tool wiring, do not emit AGENTS.md spine artifacts.
|
|
15
|
+
|
|
16
|
+
## Agent config template (legacy — prefer AGENTS.md spine)
|
|
5
17
|
|
|
6
18
|
All three files use the same structure — only the header differs:
|
|
7
|
-
- `CLAUDE.md` → `# [Project Name] — Claude Code`
|
|
19
|
+
- `CLAUDE.md` → `# [Project Name] — Claude Code` (or symlink to AGENTS.md)
|
|
8
20
|
- `GEMINI.md` → `# [Project Name] — Gemini CLI`
|
|
9
|
-
- `AGENTS.md` → `# [Project Name] —
|
|
21
|
+
- `AGENTS.md` → `# [Project Name] — AI Agents` (Reach Template header)
|
|
10
22
|
|
|
11
23
|
```markdown
|
|
12
24
|
# [Project Name] — [Agent]
|
|
@@ -55,10 +67,33 @@ Stack: [language, framework, runtime]
|
|
|
55
67
|
```json
|
|
56
68
|
{
|
|
57
69
|
"$schema": "https://opencode.ai/config.json",
|
|
58
|
-
"instructions": [".
|
|
70
|
+
"instructions": ["AGENTS.md"]
|
|
59
71
|
}
|
|
60
72
|
```
|
|
61
73
|
|
|
74
|
+
## Aider — `.aider.conf.yml` bridge (e37s03)
|
|
75
|
+
|
|
76
|
+
When Aider wiring is opted in:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
read: AGENTS.md
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Upstream: [Aider-AI/aider](https://github.com/Aider-AI/aider) (not paul-gauthier/aider).
|
|
83
|
+
|
|
84
|
+
## Codex CLI — project-local `.codex/config.toml` + AGENTS.md (e37s14)
|
|
85
|
+
|
|
86
|
+
Source: https://developers.openai.com/codex/guides/agents-md
|
|
87
|
+
|
|
88
|
+
Codex is instruction-file-only — no slash skills. When Codex wiring is opted in:
|
|
89
|
+
|
|
90
|
+
```toml
|
|
91
|
+
# .codex/config.toml
|
|
92
|
+
instructions = ["AGENTS.md"]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Use AGENTS.md header `# [Project Name] — AI Agents` (shared with OpenCode/Cline). Single AGENTS.md serves dual-tool projects.
|
|
96
|
+
|
|
62
97
|
## CONVENTIONS.md
|
|
63
98
|
|
|
64
99
|
Use the standard bigpowers CONVENTIONS.md as the base. Fill in the project-specific defensive code categories from the interview answers.
|
|
@@ -32,13 +32,16 @@ Ask the user these questions (one at a time, wait for each answer):
|
|
|
32
32
|
5. **Conventions** — "Any naming, file organization, or patterns all agents must follow?"
|
|
33
33
|
6. **Never-do list** — "What are the hard stops? Things an agent must never touch?"
|
|
34
34
|
7. **Defensive code categories** — "Which apply? (Rate limit / Retry / Circuit breaker / Timeout / Graceful degradation)"
|
|
35
|
-
8. **Local tool wiring (optional)** — "Wire bigpowers
|
|
35
|
+
8. **Local tool wiring (optional)** — "Wire bigpowers for project-local tools? (Cursor, OpenCode, Cline, Aider, Codex CLI)" If yes, generate AGENTS.md spine artifacts per [REFERENCE.md](REFERENCE.md) §Local tool wiring and §AGENTS.md spine. If no, skip — standard seed output unchanged (no AGENTS.md spine unless opted in).
|
|
36
36
|
|
|
37
37
|
## Generate files
|
|
38
38
|
|
|
39
39
|
After the interview, generate each file using the templates in [REFERENCE.md](REFERENCE.md):
|
|
40
|
-
- `
|
|
41
|
-
- `
|
|
40
|
+
- `AGENTS.md` — from `docs/templates/AGENTS.md` Reach Template (canonical spine source)
|
|
41
|
+
- `CLAUDE.md` — symlink to `AGENTS.md` (copy fallback on Windows when symlink fails)
|
|
42
|
+
- `GEMINI.md` — symlink to `AGENTS.md` when Gemini wiring opted in
|
|
43
|
+
- `opencode.json` — with `"instructions": ["AGENTS.md"]` when OpenCode opted in
|
|
44
|
+
- `.aider.conf.yml` — with `read: AGENTS.md` when Aider opted in
|
|
42
45
|
- `CONVENTIONS.md` — bigpowers standard template + project defensive code categories
|
|
43
46
|
|
|
44
47
|
### `specs/` directory
|
|
@@ -19,9 +19,9 @@ npm install -g bigpowers # global install
|
|
|
19
19
|
bigpowers setup # sync skills + link to your tools
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
From source
|
|
22
|
+
From source: `git clone` → `bash scripts/install.sh`. Package: [bigpowers on npm](https://www.npmjs.com/package/bigpowers).
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
**Reach tools:** **Cline** — native AGENTS.md reader (no extension). **Aider** — opt-in `.aider.conf.yml` with `read: AGENTS.md` ([Aider-AI/aider](https://github.com/Aider-AI/aider)). **Codex CLI** — optional `.codex/config.toml` via seed-conventions; global `~/.codex/AGENTS.md` from install.sh.
|
|
25
25
|
|
|
26
26
|
## What bigpowers is
|
|
27
27
|
|