bigpowers 2.86.6 → 2.86.8
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/.agents/skills/guard-git/SKILL.md +8 -8
- package/.agents/skills/kickoff-branch/SKILL.md +1 -1
- package/.agents/skills/migrate-spec/SKILL.md +52 -6
- package/.agents/skills/plan-work/SKILL.md +17 -5
- package/.agents/skills/publish-package/SKILL.md +15 -5
- package/.agents/skills/release-branch/SKILL.md +12 -8
- package/.agents/skills/seed-conventions/SKILL.md +20 -10
- package/.agents/skills/smoke-test/SKILL.md +9 -5
- package/.agents/skills/validate-contracts/SKILL.md +15 -6
- package/.agents/skills/wire-ci/SKILL.md +12 -5
- package/.agents/skills/write-document/SKILL.md +31 -5
- package/.cline/skills/guard-git/SKILL.md +8 -8
- package/.cline/skills/kickoff-branch/SKILL.md +1 -1
- package/.cline/skills/migrate-spec/SKILL.md +52 -6
- package/.cline/skills/plan-work/SKILL.md +17 -5
- package/.cline/skills/publish-package/SKILL.md +15 -5
- package/.cline/skills/release-branch/SKILL.md +12 -8
- package/.cline/skills/seed-conventions/SKILL.md +20 -10
- package/.cline/skills/smoke-test/SKILL.md +9 -5
- package/.cline/skills/validate-contracts/SKILL.md +15 -6
- package/.cline/skills/wire-ci/SKILL.md +12 -5
- package/.cline/skills/write-document/SKILL.md +31 -5
- package/.codebuddy/skills/guard-git/SKILL.md +8 -8
- package/.codebuddy/skills/kickoff-branch/SKILL.md +1 -1
- package/.codebuddy/skills/migrate-spec/SKILL.md +52 -6
- package/.codebuddy/skills/plan-work/SKILL.md +17 -5
- package/.codebuddy/skills/publish-package/SKILL.md +15 -5
- package/.codebuddy/skills/release-branch/SKILL.md +12 -8
- package/.codebuddy/skills/seed-conventions/SKILL.md +20 -10
- package/.codebuddy/skills/smoke-test/SKILL.md +9 -5
- package/.codebuddy/skills/validate-contracts/SKILL.md +15 -6
- package/.codebuddy/skills/wire-ci/SKILL.md +12 -5
- package/.codebuddy/skills/write-document/SKILL.md +31 -5
- package/.codex/skills/guard-git/SKILL.md +8 -8
- package/.codex/skills/kickoff-branch/SKILL.md +1 -1
- package/.codex/skills/migrate-spec/SKILL.md +52 -6
- package/.codex/skills/plan-work/SKILL.md +17 -5
- package/.codex/skills/publish-package/SKILL.md +15 -5
- package/.codex/skills/release-branch/SKILL.md +12 -8
- package/.codex/skills/seed-conventions/SKILL.md +20 -10
- package/.codex/skills/smoke-test/SKILL.md +9 -5
- package/.codex/skills/validate-contracts/SKILL.md +15 -6
- package/.codex/skills/wire-ci/SKILL.md +12 -5
- package/.codex/skills/write-document/SKILL.md +31 -5
- package/.copilot/skills/guard-git/SKILL.md +8 -8
- package/.copilot/skills/kickoff-branch/SKILL.md +1 -1
- package/.copilot/skills/migrate-spec/SKILL.md +52 -6
- package/.copilot/skills/plan-work/SKILL.md +17 -5
- package/.copilot/skills/publish-package/SKILL.md +15 -5
- package/.copilot/skills/release-branch/SKILL.md +12 -8
- package/.copilot/skills/seed-conventions/SKILL.md +20 -10
- package/.copilot/skills/smoke-test/SKILL.md +9 -5
- package/.copilot/skills/validate-contracts/SKILL.md +15 -6
- package/.copilot/skills/wire-ci/SKILL.md +12 -5
- package/.copilot/skills/write-document/SKILL.md +31 -5
- package/.hermes/skills/guard-git/SKILL.md +8 -8
- package/.hermes/skills/kickoff-branch/SKILL.md +1 -1
- package/.hermes/skills/migrate-spec/SKILL.md +52 -6
- package/.hermes/skills/plan-work/SKILL.md +17 -5
- package/.hermes/skills/publish-package/SKILL.md +15 -5
- package/.hermes/skills/release-branch/SKILL.md +12 -8
- package/.hermes/skills/seed-conventions/SKILL.md +20 -10
- package/.hermes/skills/smoke-test/SKILL.md +9 -5
- package/.hermes/skills/validate-contracts/SKILL.md +15 -6
- package/.hermes/skills/wire-ci/SKILL.md +12 -5
- package/.hermes/skills/write-document/SKILL.md +31 -5
- package/.kilocode/rules/guard-git.md +8 -8
- package/.kilocode/rules/kickoff-branch.md +1 -1
- package/.kilocode/rules/migrate-spec.md +52 -6
- package/.kilocode/rules/plan-work.md +17 -5
- package/.kilocode/rules/publish-package.md +15 -5
- package/.kilocode/rules/release-branch.md +12 -8
- package/.kilocode/rules/seed-conventions.md +20 -10
- package/.kilocode/rules/smoke-test.md +9 -5
- package/.kilocode/rules/validate-contracts.md +15 -6
- package/.kilocode/rules/wire-ci.md +12 -5
- package/.kilocode/rules/write-document.md +31 -5
- package/.mimocode/skills/guard-git/SKILL.md +8 -8
- package/.mimocode/skills/kickoff-branch/SKILL.md +1 -1
- package/.mimocode/skills/migrate-spec/SKILL.md +52 -6
- package/.mimocode/skills/plan-work/SKILL.md +17 -5
- package/.mimocode/skills/publish-package/SKILL.md +15 -5
- package/.mimocode/skills/release-branch/SKILL.md +12 -8
- package/.mimocode/skills/seed-conventions/SKILL.md +20 -10
- package/.mimocode/skills/smoke-test/SKILL.md +9 -5
- package/.mimocode/skills/validate-contracts/SKILL.md +15 -6
- package/.mimocode/skills/wire-ci/SKILL.md +12 -5
- package/.mimocode/skills/write-document/SKILL.md +31 -5
- package/.opencode/skills/guard-git/SKILL.md +8 -8
- package/.opencode/skills/kickoff-branch/SKILL.md +1 -1
- package/.opencode/skills/migrate-spec/SKILL.md +52 -6
- package/.opencode/skills/plan-work/SKILL.md +17 -5
- package/.opencode/skills/publish-package/SKILL.md +15 -5
- package/.opencode/skills/release-branch/SKILL.md +12 -8
- package/.opencode/skills/seed-conventions/SKILL.md +20 -10
- package/.opencode/skills/smoke-test/SKILL.md +9 -5
- package/.opencode/skills/validate-contracts/SKILL.md +15 -6
- package/.opencode/skills/wire-ci/SKILL.md +12 -5
- package/.opencode/skills/write-document/SKILL.md +31 -5
- package/.pi/package.json +1 -1
- package/.pi/prompts/guard-git.md +8 -8
- package/.pi/prompts/kickoff-branch.md +1 -1
- package/.pi/prompts/migrate-spec.md +52 -6
- package/.pi/prompts/plan-work.md +17 -5
- package/.pi/prompts/publish-package.md +15 -5
- package/.pi/prompts/release-branch.md +12 -8
- package/.pi/prompts/seed-conventions.md +20 -10
- package/.pi/prompts/smoke-test.md +9 -5
- package/.pi/prompts/validate-contracts.md +15 -6
- package/.pi/prompts/wire-ci.md +12 -5
- package/.pi/prompts/write-document.md +31 -5
- package/.pi/skills/guard-git/SKILL.md +8 -8
- package/.pi/skills/kickoff-branch/SKILL.md +1 -1
- package/.pi/skills/migrate-spec/SKILL.md +52 -6
- package/.pi/skills/plan-work/SKILL.md +17 -5
- package/.pi/skills/publish-package/SKILL.md +15 -5
- package/.pi/skills/release-branch/SKILL.md +12 -8
- package/.pi/skills/seed-conventions/SKILL.md +20 -10
- package/.pi/skills/smoke-test/SKILL.md +9 -5
- package/.pi/skills/validate-contracts/SKILL.md +15 -6
- package/.pi/skills/wire-ci/SKILL.md +12 -5
- package/.pi/skills/write-document/SKILL.md +31 -5
- package/.qwen/skills/guard-git/SKILL.md +8 -8
- package/.qwen/skills/kickoff-branch/SKILL.md +1 -1
- package/.qwen/skills/migrate-spec/SKILL.md +52 -6
- package/.qwen/skills/plan-work/SKILL.md +17 -5
- package/.qwen/skills/publish-package/SKILL.md +15 -5
- package/.qwen/skills/release-branch/SKILL.md +12 -8
- package/.qwen/skills/seed-conventions/SKILL.md +20 -10
- package/.qwen/skills/smoke-test/SKILL.md +9 -5
- package/.qwen/skills/validate-contracts/SKILL.md +15 -6
- package/.qwen/skills/wire-ci/SKILL.md +12 -5
- package/.qwen/skills/write-document/SKILL.md +31 -5
- package/.trae/skills/guard-git/SKILL.md +8 -8
- package/.trae/skills/kickoff-branch/SKILL.md +1 -1
- package/.trae/skills/migrate-spec/SKILL.md +52 -6
- package/.trae/skills/plan-work/SKILL.md +17 -5
- package/.trae/skills/publish-package/SKILL.md +15 -5
- package/.trae/skills/release-branch/SKILL.md +12 -8
- package/.trae/skills/seed-conventions/SKILL.md +20 -10
- package/.trae/skills/smoke-test/SKILL.md +9 -5
- package/.trae/skills/validate-contracts/SKILL.md +15 -6
- package/.trae/skills/wire-ci/SKILL.md +12 -5
- package/.trae/skills/write-document/SKILL.md +31 -5
- package/.windsurf/rules/guard-git.md +8 -8
- package/.windsurf/rules/kickoff-branch.md +1 -1
- package/.windsurf/rules/migrate-spec.md +52 -6
- package/.windsurf/rules/plan-work.md +17 -5
- package/.windsurf/rules/publish-package.md +15 -5
- package/.windsurf/rules/release-branch.md +12 -8
- package/.windsurf/rules/seed-conventions.md +20 -10
- package/.windsurf/rules/smoke-test.md +9 -5
- package/.windsurf/rules/validate-contracts.md +15 -6
- package/.windsurf/rules/wire-ci.md +12 -5
- package/.windsurf/rules/write-document.md +31 -5
- package/.zcode/skills/guard-git/SKILL.md +8 -8
- package/.zcode/skills/kickoff-branch/SKILL.md +1 -1
- package/.zcode/skills/migrate-spec/SKILL.md +52 -6
- package/.zcode/skills/plan-work/SKILL.md +17 -5
- package/.zcode/skills/publish-package/SKILL.md +15 -5
- package/.zcode/skills/release-branch/SKILL.md +12 -8
- package/.zcode/skills/seed-conventions/SKILL.md +20 -10
- package/.zcode/skills/smoke-test/SKILL.md +9 -5
- package/.zcode/skills/validate-contracts/SKILL.md +15 -6
- package/.zcode/skills/wire-ci/SKILL.md +12 -5
- package/.zcode/skills/write-document/SKILL.md +31 -5
- package/CHANGELOG.md +15 -0
- package/CONVENTIONS.md +2 -0
- package/package.json +1 -1
- package/scripts/check-skill-links.py +2 -1
- package/scripts/generate-context-bundle.sh +6 -0
- package/scripts/generate-reference-nav.sh +89 -0
- package/scripts/generate-viz-graph.sh +4 -0
- package/scripts/golden-g13-script-orphans.sh +167 -0
- package/scripts/golden-g15-compliance-runner-selftest.sh +126 -0
- package/scripts/golden-g16-spec-version-gap.sh +72 -0
- 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/audit-compliance-report.sh +32 -7
- package/scripts/lib/audit-compliance-runner.sh +14 -1
- package/scripts/lib/golden-suite-gates.sh +23 -7
- package/scripts/lib/test-assertions.sh +4 -0
- package/scripts/snapshot-catalog-baseline.sh +4 -0
- package/scripts/test-adapter-render.sh +19 -21
- package/scripts/test-completeness-critic-scope.sh +18 -19
- package/scripts/test-generate-epics-wiki-zero-stories.sh +12 -13
- package/scripts/test-golden-g11-worktree-venv.sh +16 -18
- package/scripts/test-install-distribute-only.sh +27 -26
- package/scripts/test-install-hub.sh +25 -23
- package/scripts/test-setup-no-pyyaml.sh +16 -17
- package/scripts/test-target-contracts.sh +15 -13
- package/scripts/test-tombstone-mechanism.sh +31 -33
- package/skills/guard-git/REFERENCE.md +8 -8
- package/skills/kickoff-branch/SKILL.md +1 -1
- package/skills/migrate-spec/REFERENCE.md +52 -6
- package/skills/plan-work/REFERENCE.md +17 -5
- package/skills/publish-package/REFERENCE.md +15 -5
- package/skills/release-branch/REFERENCE.md +12 -8
- package/skills/seed-conventions/REFERENCE.md +20 -10
- package/skills/smoke-test/REFERENCE.md +9 -5
- package/skills/validate-contracts/REFERENCE.md +15 -6
- package/skills/wire-ci/REFERENCE.md +12 -5
- package/skills/write-document/REFERENCE.md +30 -4
- package/skills/write-document/SKILL.md +1 -1
- package/skills-lock.json +2 -2
- package/scripts/add-model-frontmatter.sh +0 -32
- package/scripts/golden-g13-test-orphans.sh +0 -70
- package/scripts/install-cursor-skills-local.sh +0 -15
- package/scripts/install-cursor-skills.sh +0 -24
- package/scripts/project-survey.sh +0 -63
|
@@ -19,10 +19,12 @@ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
|
19
19
|
resolve_repo_root
|
|
20
20
|
cd "$REPO_ROOT"
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
TA_PASS=0
|
|
23
|
+
TA_FAIL=0
|
|
24
|
+
TA_TMPDIR=""
|
|
25
|
+
|
|
26
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/test-assertions.sh"
|
|
27
|
+
trap ta_cleanup EXIT
|
|
26
28
|
|
|
27
29
|
INSTALL_SH="scripts/install.sh"
|
|
28
30
|
HELPERS_JS="scripts/lib/install-helpers.js"
|
|
@@ -82,7 +84,7 @@ alias_target_for() {
|
|
|
82
84
|
echo "=== test-install-hub.sh ==="
|
|
83
85
|
|
|
84
86
|
TARGETS=$(discover_targets)
|
|
85
|
-
[[ -n "$TARGETS" ]] || {
|
|
87
|
+
[[ -n "$TARGETS" ]] || { ta_fail "no install_<id>() functions discovered"; echo "test-install-hub: $TA_PASS passed, $TA_FAIL failed"; exit 1; }
|
|
86
88
|
echo "Discovered $(wc -w <<<"$TARGETS" | tr -d ' ') install targets"
|
|
87
89
|
|
|
88
90
|
DRY_OUT="$(bash "$INSTALL_SH" --dry-run 2>&1 || true)"
|
|
@@ -92,41 +94,41 @@ SETUP_IDS="$(sed -n '/SUPPORTED_IDS = new Set/,/);/p' "$SETUP_JS")"
|
|
|
92
94
|
for id in $TARGETS; do
|
|
93
95
|
# shellcheck disable=SC2086
|
|
94
96
|
grep -qE "^uninstall_${id}\(\)" $INSTALL_SRC \
|
|
95
|
-
&&
|
|
96
|
-
||
|
|
97
|
+
&& ta_pass "$id: uninstall_${id}() defined" \
|
|
98
|
+
|| ta_fail "$id: uninstall_${id}() missing"
|
|
97
99
|
|
|
98
100
|
# Some targets are pure aliases (install_antigravity just calls install_agy).
|
|
99
101
|
# They own no label; the delegate's label is asserted on its own pass.
|
|
100
102
|
alias_of="$(alias_target_for "$id")"
|
|
101
103
|
label="$(label_for "$id")"
|
|
102
104
|
if [[ -z "$label" && -n "$alias_of" ]]; then
|
|
103
|
-
|
|
105
|
+
ta_pass "$id: alias of $alias_of (label asserted there)"
|
|
104
106
|
elif [[ -z "$label" ]]; then
|
|
105
|
-
|
|
107
|
+
ta_fail "$id: no 'Label →' line found inside install_${id}()"
|
|
106
108
|
else
|
|
107
109
|
grep -qF "$label →" <<<"$DRY_OUT" \
|
|
108
|
-
&&
|
|
109
|
-
||
|
|
110
|
+
&& ta_pass "$id: dry-run shows '$label'" \
|
|
111
|
+
|| ta_fail "$id: dry-run missing '$label' section"
|
|
110
112
|
grep -qF "$label →" <<<"$DRY_UNINSTALL" \
|
|
111
|
-
&&
|
|
112
|
-
||
|
|
113
|
+
&& ta_pass "$id: dry-run --uninstall shows '$label'" \
|
|
114
|
+
|| ta_fail "$id: dry-run --uninstall missing '$label' section"
|
|
113
115
|
fi
|
|
114
116
|
|
|
115
117
|
grep -q "case '${id}'" "$HELPERS_JS" \
|
|
116
|
-
&&
|
|
117
|
-
||
|
|
118
|
+
&& ta_pass "$id: install-helpers case" \
|
|
119
|
+
|| ta_fail "$id: install-helpers missing case '${id}'"
|
|
118
120
|
|
|
119
121
|
sid="$(setup_id_for "$id")"
|
|
120
122
|
grep -q "'${sid}'" <<<"$SETUP_IDS" \
|
|
121
|
-
&&
|
|
122
|
-
||
|
|
123
|
+
&& ta_pass "$id: setup.js SUPPORTED_IDS carries '${sid}'" \
|
|
124
|
+
|| ta_fail "$id: setup.js SUPPORTED_IDS missing '${sid}'"
|
|
123
125
|
done
|
|
124
126
|
|
|
125
127
|
# Global syntax gates — previously repeated in all 14 scripts.
|
|
126
|
-
bash -n "$INSTALL_SH" &&
|
|
127
|
-
node --check "$HELPERS_JS" >/dev/null 2>&1 &&
|
|
128
|
-
node --check "$SETUP_JS" >/dev/null 2>&1 &&
|
|
129
|
-
grep -q "SUPPORTED_IDS = new Set" "$SETUP_JS" &&
|
|
128
|
+
bash -n "$INSTALL_SH" && ta_pass "bash -n install.sh" || ta_fail "bash -n install.sh"
|
|
129
|
+
node --check "$HELPERS_JS" >/dev/null 2>&1 && ta_pass "node --check install-helpers.js" || ta_fail "node --check install-helpers.js"
|
|
130
|
+
node --check "$SETUP_JS" >/dev/null 2>&1 && ta_pass "node --check setup.js" || ta_fail "node --check setup.js"
|
|
131
|
+
grep -q "SUPPORTED_IDS = new Set" "$SETUP_JS" && ta_pass "setup.js defines SUPPORTED_IDS" || ta_fail "setup.js missing SUPPORTED_IDS"
|
|
130
132
|
|
|
131
133
|
# Registry coverage is reported, not enforced: copilot, opencode, claude and
|
|
132
134
|
# antigravity ship install functions but have no targets.yaml row today.
|
|
@@ -135,5 +137,5 @@ for id in $TARGETS; do
|
|
|
135
137
|
grep -q "id: ${id}$" "$TARGETS_YAML" || echo " note: $id installs but has no targets.yaml row"
|
|
136
138
|
done
|
|
137
139
|
|
|
138
|
-
echo "test-install-hub: $
|
|
139
|
-
[[ "$
|
|
140
|
+
echo "test-install-hub: $TA_PASS passed, $TA_FAIL failed"
|
|
141
|
+
[[ "$TA_FAIL" -eq 0 ]] || exit 1
|
|
@@ -16,15 +16,17 @@ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
|
16
16
|
resolve_repo_root
|
|
17
17
|
cd "$REPO_ROOT"
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
TA_PASS=0
|
|
20
|
+
TA_FAIL=0
|
|
21
|
+
TA_TMPDIR=""
|
|
22
|
+
|
|
23
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/test-assertions.sh"
|
|
24
|
+
trap ta_cleanup EXIT
|
|
23
25
|
|
|
24
26
|
# Build a throwaway PyYAML-free interpreter — a fresh venv has no PyYAML,
|
|
25
27
|
# reproducing a stock macOS python3 without touching the caller's environment.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
TA_TMPDIR="$(mktemp -d)"
|
|
29
|
+
NOYAML_DIR="$TA_TMPDIR"
|
|
28
30
|
if ! python3 -m venv "$NOYAML_DIR/venv" >/dev/null 2>&1; then
|
|
29
31
|
echo "test-setup-no-pyyaml: SKIP — cannot create venv"; exit 0
|
|
30
32
|
fi
|
|
@@ -35,18 +37,18 @@ fi
|
|
|
35
37
|
|
|
36
38
|
# 1. srp-engine.py must parse a skill's frontmatter without crashing.
|
|
37
39
|
if "$NOPY" scripts/lib/srp-engine.py skills/fix-bug/SKILL.md >/dev/null 2>&1; then
|
|
38
|
-
|
|
40
|
+
ta_pass "srp-engine.py parses frontmatter without PyYAML"
|
|
39
41
|
else
|
|
40
|
-
|
|
42
|
+
ta_fail "srp-engine.py crashed without PyYAML"
|
|
41
43
|
fi
|
|
42
44
|
|
|
43
45
|
# 2. validate-skill-yaml.py must not bail with exit 2 (the old PyYAML-required path).
|
|
44
46
|
rc=0
|
|
45
47
|
"$NOPY" scripts/validate-skill-yaml.py >/dev/null 2>&1 || rc=$?
|
|
46
48
|
if [[ "$rc" -ne 2 ]]; then
|
|
47
|
-
|
|
49
|
+
ta_pass "validate-skill-yaml.py runs without PyYAML (exit $rc)"
|
|
48
50
|
else
|
|
49
|
-
|
|
51
|
+
ta_fail "validate-skill-yaml.py bailed with exit 2 (PyYAML required)"
|
|
50
52
|
fi
|
|
51
53
|
|
|
52
54
|
# 3. Fallback fidelity: simple_yaml must equal PyYAML for every skill's
|
|
@@ -71,13 +73,10 @@ if bad:
|
|
|
71
73
|
print("mismatch: " + ", ".join(bad)); sys.exit(1)
|
|
72
74
|
sys.exit(0)
|
|
73
75
|
PY
|
|
74
|
-
|
|
76
|
+
ta_pass "simple_yaml matches PyYAML for all skill frontmatter"
|
|
75
77
|
else
|
|
76
|
-
|
|
78
|
+
ta_fail "simple_yaml diverged from PyYAML for some skill frontmatter"
|
|
77
79
|
fi
|
|
78
80
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
exit 1
|
|
82
|
-
fi
|
|
83
|
-
echo "test-setup-no-pyyaml: PASS"
|
|
81
|
+
echo "test-setup-no-pyyaml: $TA_PASS passed, $TA_FAIL failed"
|
|
82
|
+
[[ "$TA_FAIL" -eq 0 ]] || exit 1
|
|
@@ -15,10 +15,12 @@ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
|
|
|
15
15
|
resolve_repo_root
|
|
16
16
|
cd "$REPO_ROOT"
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
TA_PASS=0
|
|
19
|
+
TA_FAIL=0
|
|
20
|
+
TA_TMPDIR=""
|
|
21
|
+
|
|
22
|
+
source "$REPO_ROOT/scripts/lib/test-assertions.sh"
|
|
23
|
+
trap ta_cleanup EXIT
|
|
22
24
|
|
|
23
25
|
echo "=== test-target-contracts.sh ==="
|
|
24
26
|
|
|
@@ -31,9 +33,9 @@ out=$(run_contract "faketarget" "definitely_not_a_real_contract" 2>&1)
|
|
|
31
33
|
rc=$?
|
|
32
34
|
set -e
|
|
33
35
|
if [[ $rc -ne 0 ]]; then
|
|
34
|
-
|
|
36
|
+
ta_pass "unknown contract fails (exit $rc)"
|
|
35
37
|
else
|
|
36
|
-
|
|
38
|
+
ta_fail "unknown contract returned 0 — run_contract is fail-open again: $out"
|
|
37
39
|
fi
|
|
38
40
|
|
|
39
41
|
# 2. Every contract declared in targets.yaml must resolve to an assertion.
|
|
@@ -41,16 +43,16 @@ fi
|
|
|
41
43
|
# a FAIL line, while a missing implementation hits the default branch and
|
|
42
44
|
# reports "unknown contract".
|
|
43
45
|
declared=$(grep -E "^ - [a-z0-9_]+$" scripts/targets.yaml | sed 's/^ - //' | sort -u)
|
|
44
|
-
[[ -n "$declared" ]] ||
|
|
46
|
+
[[ -n "$declared" ]] || ta_fail "no contracts parsed from targets.yaml"
|
|
45
47
|
|
|
46
48
|
for c in $declared; do
|
|
47
49
|
set +e
|
|
48
50
|
out=$(run_contract "__probe__" "$c" 2>&1)
|
|
49
51
|
set -e
|
|
50
52
|
if grep -q "unknown contract" <<<"$out"; then
|
|
51
|
-
|
|
53
|
+
ta_fail "$c declared in targets.yaml but no assertion implements it"
|
|
52
54
|
else
|
|
53
|
-
|
|
55
|
+
ta_pass "$c has an implementation"
|
|
54
56
|
fi
|
|
55
57
|
done
|
|
56
58
|
|
|
@@ -61,13 +63,13 @@ for c in $declared; do
|
|
|
61
63
|
*_hooks_manifest)
|
|
62
64
|
t="${c%_hooks_manifest}"
|
|
63
65
|
if [[ -f "scripts/hooks/${t}/hooks-manifest.json" ]]; then
|
|
64
|
-
|
|
66
|
+
ta_pass "$t ships hooks-manifest.json"
|
|
65
67
|
else
|
|
66
|
-
|
|
68
|
+
ta_fail "$t declares $c but scripts/hooks/${t}/hooks-manifest.json is missing"
|
|
67
69
|
fi
|
|
68
70
|
;;
|
|
69
71
|
esac
|
|
70
72
|
done
|
|
71
73
|
|
|
72
|
-
echo "test-target-contracts: $
|
|
73
|
-
[[ "$
|
|
74
|
+
echo "test-target-contracts: $TA_PASS passed, $TA_FAIL failed"
|
|
75
|
+
[[ "$TA_FAIL" -eq 0 ]] || exit 1
|
|
@@ -14,10 +14,12 @@ RED='\033[0;31m'
|
|
|
14
14
|
GREEN='\033[0;32m'
|
|
15
15
|
NC='\033[0m'
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
TA_PASS=0
|
|
18
|
+
TA_FAIL=0
|
|
19
|
+
TA_TMPDIR=""
|
|
20
|
+
source "$(dirname "${BASH_SOURCE[0]}")/lib/test-assertions.sh"
|
|
21
|
+
# NOT `trap ta_cleanup EXIT` — this script's cleanup restores a backed-up
|
|
22
|
+
# specs/tombstones.yaml and removes named fixture dirs, not a TA_TMPDIR.
|
|
21
23
|
|
|
22
24
|
FIXTURE_OLD="test-tombstone-fixture"
|
|
23
25
|
FIXTURE_NEW="test-tombstone-target"
|
|
@@ -25,7 +27,7 @@ FIXTURE_DIR="skills/${FIXTURE_OLD}"
|
|
|
25
27
|
TOMBSTONES_FILE="specs/tombstones.yaml"
|
|
26
28
|
TOMBSTONES_BACKUP=""
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
tombstone_test_cleanup() {
|
|
29
31
|
rm -rf "$FIXTURE_DIR" "skills/${FIXTURE_NEW}"
|
|
30
32
|
if [[ -n "$TOMBSTONES_BACKUP" ]]; then
|
|
31
33
|
mv "$TOMBSTONES_BACKUP" "$TOMBSTONES_FILE"
|
|
@@ -33,7 +35,7 @@ cleanup() {
|
|
|
33
35
|
rm -f "$TOMBSTONES_FILE"
|
|
34
36
|
fi
|
|
35
37
|
}
|
|
36
|
-
trap
|
|
38
|
+
trap tombstone_test_cleanup EXIT
|
|
37
39
|
|
|
38
40
|
if [[ -f "$TOMBSTONES_FILE" ]]; then
|
|
39
41
|
TOMBSTONES_BACKUP=$(mktemp)
|
|
@@ -43,9 +45,9 @@ fi
|
|
|
43
45
|
|
|
44
46
|
# --- Scenario: zero tombstones registered (6a) ---
|
|
45
47
|
if bash scripts/validate-tombstones.sh 2>&1 | grep -qi "no tombstones"; then
|
|
46
|
-
|
|
48
|
+
ta_pass "validate-tombstones.sh reports clean when zero tombstones registered"
|
|
47
49
|
else
|
|
48
|
-
|
|
50
|
+
ta_fail "validate-tombstones.sh did not report 'no tombstones' with an empty ledger"
|
|
49
51
|
fi
|
|
50
52
|
|
|
51
53
|
# --- Scenario: tombstone-skill.sh generates a stub ---
|
|
@@ -62,28 +64,28 @@ FIXTUREEOF
|
|
|
62
64
|
bash scripts/tombstone-skill.sh "$FIXTURE_OLD" "$FIXTURE_NEW"
|
|
63
65
|
|
|
64
66
|
if grep -q "TOMBSTONE" "${FIXTURE_DIR}/SKILL.md"; then
|
|
65
|
-
|
|
67
|
+
ta_pass "tombstone-skill.sh replaced SKILL.md with a stub"
|
|
66
68
|
else
|
|
67
|
-
|
|
69
|
+
ta_fail "SKILL.md was not replaced with a tombstone stub"
|
|
68
70
|
fi
|
|
69
71
|
|
|
70
72
|
if grep -q "story: e00s00" "${FIXTURE_DIR}/SKILL.md"; then
|
|
71
|
-
|
|
73
|
+
ta_pass "tombstone-skill.sh preserved the old story tag"
|
|
72
74
|
else
|
|
73
|
-
|
|
75
|
+
ta_fail "story tag was not preserved in the stub"
|
|
74
76
|
fi
|
|
75
77
|
|
|
76
78
|
if [[ -f "$TOMBSTONES_FILE" ]] && grep -q "$FIXTURE_OLD" "$TOMBSTONES_FILE"; then
|
|
77
|
-
|
|
79
|
+
ta_pass "tombstone-skill.sh registered the mapping in ${TOMBSTONES_FILE}"
|
|
78
80
|
else
|
|
79
|
-
|
|
81
|
+
ta_fail "mapping not registered in ${TOMBSTONES_FILE}"
|
|
80
82
|
fi
|
|
81
83
|
|
|
82
84
|
# --- Scenario: fresh tombstone resolves cleanly ---
|
|
83
|
-
if bash scripts/validate-tombstones.sh 2>&1 |
|
|
84
|
-
|
|
85
|
+
if bash scripts/validate-tombstones.sh 2>&1 | ta_strip_ansi | grep -q "OK: ${FIXTURE_OLD}"; then
|
|
86
|
+
ta_pass "validate-tombstones.sh confirms the fresh stub resolves"
|
|
85
87
|
else
|
|
86
|
-
|
|
88
|
+
ta_fail "validate-tombstones.sh did not confirm the fresh stub"
|
|
87
89
|
fi
|
|
88
90
|
|
|
89
91
|
# --- Scenario: expired tombstone flagged (6b) ---
|
|
@@ -96,10 +98,10 @@ for t in d['tombstones']:
|
|
|
96
98
|
yaml.dump(d, open('$TOMBSTONES_FILE', 'w'), default_flow_style=False)
|
|
97
99
|
"
|
|
98
100
|
|
|
99
|
-
if bash scripts/validate-tombstones.sh 2>&1 |
|
|
100
|
-
|
|
101
|
+
if bash scripts/validate-tombstones.sh 2>&1 | ta_strip_ansi | grep -qi "EXPIRED: ${FIXTURE_OLD}"; then
|
|
102
|
+
ta_pass "validate-tombstones.sh flags a tombstone whose expiry window has passed"
|
|
101
103
|
else
|
|
102
|
-
|
|
104
|
+
ta_fail "expired tombstone was not flagged"
|
|
103
105
|
fi
|
|
104
106
|
|
|
105
107
|
# --- Scenario: rejects path-traversal / invalid skill names (threat model CWE-22) ---
|
|
@@ -108,16 +110,16 @@ fi
|
|
|
108
110
|
# status doesn't mask the grep check below.
|
|
109
111
|
output=$(bash scripts/tombstone-skill.sh "../../etc/passwd" "target" 2>&1 || true)
|
|
110
112
|
if echo "$output" | grep -qi "not a valid skill name"; then
|
|
111
|
-
|
|
113
|
+
ta_pass "tombstone-skill.sh rejects a path-traversal old-name"
|
|
112
114
|
else
|
|
113
|
-
|
|
115
|
+
ta_fail "tombstone-skill.sh did not reject a path-traversal old-name"
|
|
114
116
|
fi
|
|
115
117
|
|
|
116
118
|
output=$(bash scripts/tombstone-skill.sh "$FIXTURE_OLD" "../../etc/passwd" 2>&1 || true)
|
|
117
119
|
if echo "$output" | grep -qi "not a valid skill name"; then
|
|
118
|
-
|
|
120
|
+
ta_pass "tombstone-skill.sh rejects a path-traversal new-name"
|
|
119
121
|
else
|
|
120
|
-
|
|
122
|
+
ta_fail "tombstone-skill.sh did not reject a path-traversal new-name"
|
|
121
123
|
fi
|
|
122
124
|
|
|
123
125
|
# --- Scenario: validate-tombstones.sh rejects an invalid name read back from the ledger ---
|
|
@@ -131,11 +133,11 @@ d.setdefault('tombstones', []).append({
|
|
|
131
133
|
})
|
|
132
134
|
yaml.dump(d, open('$TOMBSTONES_FILE', 'w'), default_flow_style=False)
|
|
133
135
|
"
|
|
134
|
-
output=$(bash scripts/validate-tombstones.sh 2>&1 |
|
|
136
|
+
output=$(bash scripts/validate-tombstones.sh 2>&1 | ta_strip_ansi || true)
|
|
135
137
|
if echo "$output" | grep -qi "FAIL.*not a valid skill name"; then
|
|
136
|
-
|
|
138
|
+
ta_pass "validate-tombstones.sh rejects a path-traversal name read from the ledger"
|
|
137
139
|
else
|
|
138
|
-
|
|
140
|
+
ta_fail "validate-tombstones.sh did not reject a path-traversal name read from the ledger"
|
|
139
141
|
fi
|
|
140
142
|
python3 -c "
|
|
141
143
|
import yaml
|
|
@@ -145,9 +147,5 @@ yaml.dump(d, open('$TOMBSTONES_FILE', 'w'), default_flow_style=False)
|
|
|
145
147
|
"
|
|
146
148
|
|
|
147
149
|
echo "---"
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
else
|
|
151
|
-
echo -e "${RED}test-tombstone-mechanism: $FAILURES failure(s)${NC}"
|
|
152
|
-
fi
|
|
153
|
-
exit "$FAILURES"
|
|
150
|
+
echo "test-tombstone-mechanism: $TA_PASS passed, $TA_FAIL failed"
|
|
151
|
+
exit "$TA_FAIL"
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
7
|
| 1 | Title |
|
|
8
|
-
| 3–
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
8
|
+
| 3–16 | Navigation |
|
|
9
|
+
| 17–28 | Secret patterns (audit + pre-commit) |
|
|
10
|
+
| 29–46 | Copy layout |
|
|
11
|
+
| 47–72 | Claude Code |
|
|
12
|
+
| 73–94 | Cursor and Cursor CLI |
|
|
13
|
+
| 95–122 | Gemini CLI |
|
|
14
|
+
| 123–137 | Google Antigravity |
|
|
15
|
+
| 138–180 | Verify (local tests) |
|
|
16
16
|
|
|
17
17
|
## Secret patterns (audit + pre-commit)
|
|
18
18
|
|
|
@@ -82,7 +82,7 @@ git worktree list | grep "<task-slug>"
|
|
|
82
82
|
**Handling Conflicts:**
|
|
83
83
|
- **Directory exists:** If `../<task-slug>` already exists, ask the user if they want to use it or delete it.
|
|
84
84
|
- **Branch exists:** If the branch exists but no worktree is attached, ask to use the existing branch (`git worktree add ../<task-slug> <task-slug>`) or delete it.
|
|
85
|
-
- **Ghost worktree:** If `git worktree list` shows the path but the directory is missing, run `git worktree prune` to clear the stale metadata.
|
|
85
|
+
- **Ghost worktree:** If `git worktree list` shows the path but the directory is missing, run `git worktree prune` to clear the stale metadata. `bash scripts/cleanup-worktrees.sh` does this plus reports any worktree whose branch is already merged or deleted — advisory only, it prints the `git worktree remove`/`git branch -d` commands rather than running them, so review before acting.
|
|
86
86
|
|
|
87
87
|
### 4. Create worktree + branch
|
|
88
88
|
|
|
@@ -5,12 +5,58 @@
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
7
|
| 1 | Title |
|
|
8
|
-
| 3–
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
8
|
+
| 3–68 | Navigation |
|
|
9
|
+
| 69–70 | spec-kit → bigpowers Mapping |
|
|
10
|
+
| 71–84 | Artifact Locations |
|
|
11
|
+
| 85–94 | `spec.md` → `specs/product/SCOPE_LATEST.yaml` + `specs/tech-architecture/TECH_STACK_LATEST.md` |
|
|
12
|
+
| 95–105 | `plan.md` → `specs/tech-architecture/TECH_STACK_LATEST.md` + `specs/release-plan.yaml` + `specs/epics/` |
|
|
13
|
+
| 106–114 | `tasks.md` → `specs/epics/` (via slice-tasks) |
|
|
14
|
+
| 115–120 | `.specify/` state |
|
|
15
|
+
| 121–122 | BMAD → bigpowers Mapping |
|
|
16
|
+
| 123–141 | Artifact Locations |
|
|
17
|
+
| 142–148 | `product-brief.md` / `prfaq-{project}.md` → `specs/product/VISION_LATEST.yaml` |
|
|
18
|
+
| 149–160 | `prd.md` → `specs/product/SCOPE_LATEST.yaml` + `GLOSSARY_LATEST.yaml` |
|
|
19
|
+
| 161–167 | `addendum.md` + `decision-log.md` → `specs/adr/` + `specs/DECISION-LOG_LATEST.md` |
|
|
20
|
+
| 168–174 | `architecture.md` → `specs/tech-architecture/TECH_STACK_LATEST.md` + `specs/adr/` |
|
|
21
|
+
| 175–178 | `epic-*.md` → `specs/release-plan.yaml` + `specs/epics/eNN-*.yaml` |
|
|
22
|
+
| 179–182 | `story-*.md` → `specs/epics/` stories |
|
|
23
|
+
| 183–188 | `project-context.md` → `CLAUDE.md` |
|
|
24
|
+
| 189–192 | Learnings to Adopt |
|
|
25
|
+
| 193–198 | From GSD |
|
|
26
|
+
| 199–204 | From spec-kit |
|
|
27
|
+
| 205–212 | From BMAD |
|
|
28
|
+
| 213–214 | Output Formats |
|
|
29
|
+
| 215–224 | ADR format (bigpowers) |
|
|
30
|
+
| 225–227 | Context |
|
|
31
|
+
| 228–230 | Decision |
|
|
32
|
+
| 231–234 | Consequences |
|
|
33
|
+
| 235–246 | DECISION-LOG.md format |
|
|
34
|
+
| 247–257 | MIGRATION-AUDIT.md format |
|
|
35
|
+
| 258–264 | Summary |
|
|
36
|
+
| 265–274 | High Priority Findings |
|
|
37
|
+
| 275–278 | Information |
|
|
38
|
+
| 279–285 | Next Steps |
|
|
39
|
+
| 286–306 | in_scope format with ID tracking |
|
|
40
|
+
| 307–341 | REQUIREMENTS_TRACE.yaml format |
|
|
41
|
+
| 342–397 | `specs/state.yaml` template format |
|
|
42
|
+
| 398–416 | Reference block 1 |
|
|
43
|
+
| 417–432 | Reference block 2 |
|
|
44
|
+
| 433–451 | Reference block 3 |
|
|
45
|
+
| 452–474 | Reference block 4 |
|
|
46
|
+
| 475–482 | Reference block 5 |
|
|
47
|
+
| 483–484 | Findings |
|
|
48
|
+
| 485–489 | High Priority |
|
|
49
|
+
| 490–495 | Information |
|
|
50
|
+
| 496–509 | Reference block 6 |
|
|
51
|
+
| 510–542 | Step 7 — Post-migration: Optional two-pass spec writing gate |
|
|
52
|
+
| 543–574 | Step 8 — Post-migration: Optional methodology doc template |
|
|
53
|
+
| 575–600 | Artifact Mapping Summary |
|
|
54
|
+
| 601–610 | Rules |
|
|
55
|
+
| 611–621 | Step 5 — Surface learnings (optional) |
|
|
56
|
+
| 622–644 | Step 6 — Adversarial review (optional) |
|
|
57
|
+
| 645–646 | Findings |
|
|
58
|
+
| 647–651 | High Priority |
|
|
59
|
+
| 652–660 | Information |
|
|
14
60
|
|
|
15
61
|
# migrate-spec Reference — spec-kit, BMAD, Learnings
|
|
16
62
|
|
|
@@ -5,11 +5,23 @@
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
7
|
| 1 | Title |
|
|
8
|
-
| 3–
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
8
|
+
| 3–25 | Navigation |
|
|
9
|
+
| 26–27 | Output file formats |
|
|
10
|
+
| 28–31 | Story spec: `specs/epics/<capsule>/eNNsYY-<slug>.md` |
|
|
11
|
+
| 32–61 | Task checklist: `specs/epics/<capsule>/eNNsYY-tasks.yaml` |
|
|
12
|
+
| 62–64 | Plan template |
|
|
13
|
+
| 65–71 | Story [X.Y]: [title] — Implementation Steps |
|
|
14
|
+
| 72–77 | Steps |
|
|
15
|
+
| 78–85 | Verification Script (Step-by-Step) |
|
|
16
|
+
| 86–89 | Out of scope |
|
|
17
|
+
| 90–94 | Risks |
|
|
18
|
+
| 95–114 | Verify step format rules |
|
|
19
|
+
| 115–116 | Sub-operations |
|
|
20
|
+
| 117–127 | Risk Assignment Heuristics |
|
|
21
|
+
| 128–143 | Requirement delta tags (e45s29) |
|
|
22
|
+
| 144–152 | Define Success |
|
|
23
|
+
| 153–161 | Zoom-Out Check |
|
|
24
|
+
| 162–169 | Slopcheck |
|
|
13
25
|
|
|
14
26
|
## Output file formats
|
|
15
27
|
|
|
@@ -5,11 +5,21 @@
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
7
|
| 1 | Title |
|
|
8
|
-
| 3–
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
8
|
+
| 3–23 | Navigation |
|
|
9
|
+
| 24–35 | Options |
|
|
10
|
+
| 36–37 | Examples |
|
|
11
|
+
| 38–51 | Publish an npm package |
|
|
12
|
+
| 52–59 | Publish a Rust crate |
|
|
13
|
+
| 60–69 | Missing token scenario |
|
|
14
|
+
| 70–80 | Integration with release-branch |
|
|
15
|
+
| 81–121 | Reference block 1 |
|
|
16
|
+
| 122–143 | Reference block 2 |
|
|
17
|
+
| 144–162 | Reference block 3 |
|
|
18
|
+
| 163–180 | Reference block 4 |
|
|
19
|
+
| 181–195 | Reference block 5 |
|
|
20
|
+
| 196–230 | Reference block 6 |
|
|
21
|
+
| 231–248 | Reference block 7 |
|
|
22
|
+
| 249–260 | Reference block 8 |
|
|
13
23
|
|
|
14
24
|
## Options
|
|
15
25
|
|
|
@@ -4,15 +4,19 @@
|
|
|
4
4
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
|
-
| 1
|
|
8
|
-
|
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
7
|
+
| 1 | Title |
|
|
8
|
+
| 3–22 | Navigation |
|
|
9
|
+
| 23–31 | PR body template (team-pr mode) |
|
|
10
|
+
| 32–35 | Summary |
|
|
11
|
+
| 36–41 | Verify |
|
|
12
|
+
| 42–47 | specs/ artifacts |
|
|
13
|
+
| 48–58 | Worktree cleanup details |
|
|
14
|
+
| 59–81 | Cycle-time recording |
|
|
15
|
+
| 82–100 | Why not story_start minus story_end? |
|
|
16
|
+
| 101–121 | CI verification |
|
|
17
|
+
| 122–127 | Solo-local fallback detail |
|
|
14
18
|
| 128–134 | Handoff |
|
|
15
|
-
|
|
|
19
|
+
| 135–159 | Reference block 1 |
|
|
16
20
|
|
|
17
21
|
# Release Branch — Reference
|
|
18
22
|
|
|
@@ -6,16 +6,26 @@
|
|
|
6
6
|
|
|
7
7
|
| Lines | Section |
|
|
8
8
|
|-------|---------|
|
|
9
|
-
| 1
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
9
|
+
| 1 | Title |
|
|
10
|
+
| 5–29 | Navigation |
|
|
11
|
+
| 30–53 | Fenced markers (e45s21) |
|
|
12
|
+
| 54–65 | AGENTS.md spine (Reach Template — e37s01) |
|
|
13
|
+
| 66–77 | Agent config template (legacy — prefer AGENTS.md spine) |
|
|
14
|
+
| 78–81 | Project |
|
|
15
|
+
| 82–91 | Commands |
|
|
16
|
+
| 92–94 | Architecture |
|
|
17
|
+
| 95–98 | Conventions |
|
|
18
|
+
| 99–104 | Never |
|
|
19
|
+
| 105–114 | Agent Rules |
|
|
20
|
+
| 115–123 | opencode.json template |
|
|
21
|
+
| 124–133 | Aider — `.aider.conf.yml` bridge (e37s03) |
|
|
22
|
+
| 134–146 | Codex CLI — project-local `.codex/config.toml` + AGENTS.md (e37s14) |
|
|
23
|
+
| 147–156 | CONVENTIONS.md |
|
|
24
|
+
| 157–160 | Stack profile fragments |
|
|
25
|
+
| 161–164 | Local tool wiring (optional interview step 8) |
|
|
26
|
+
| 165–173 | Cursor — project-local `.cursor/rules` symlink |
|
|
27
|
+
| 174–187 | OpenCode — project-local `opencode.json` + `AGENTS.md` |
|
|
28
|
+
| 188–190 | When to offer |
|
|
19
29
|
|
|
20
30
|
## Fenced markers (e45s21)
|
|
21
31
|
|
|
@@ -5,11 +5,15 @@
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
7
|
| 1 | Title |
|
|
8
|
-
| 3–
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
8
|
+
| 3–17 | Navigation |
|
|
9
|
+
| 18–34 | Runner script |
|
|
10
|
+
| 35–46 | Configuration reference |
|
|
11
|
+
| 47–55 | Verification |
|
|
12
|
+
| 56–89 | Reference block 1 |
|
|
13
|
+
| 90–107 | Reference block 2 |
|
|
14
|
+
| 108–122 | Reference block 3 |
|
|
15
|
+
| 123–159 | Reference block 4 |
|
|
16
|
+
| 160–177 | Reference block 5 |
|
|
13
17
|
|
|
14
18
|
## Runner script
|
|
15
19
|
|
|
@@ -5,12 +5,21 @@
|
|
|
5
5
|
| Lines | Section |
|
|
6
6
|
|-------|---------|
|
|
7
7
|
| 1 | Title |
|
|
8
|
-
| 3–
|
|
9
|
-
|
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
8
|
+
| 3–23 | Navigation |
|
|
9
|
+
| 24–32 | Integration |
|
|
10
|
+
| 33–44 | Configuration |
|
|
11
|
+
| 45–54 | Verification |
|
|
12
|
+
| 55–71 | Reference block 1 |
|
|
13
|
+
| 72–92 | Reference block 2 |
|
|
14
|
+
| 93–104 | Example 1 |
|
|
15
|
+
| 105–121 | Example 2 |
|
|
16
|
+
| 122–133 | Example 3 |
|
|
17
|
+
| 134–144 | Example 4 |
|
|
18
|
+
| 145–165 | Example 5 |
|
|
19
|
+
| 166–176 | Example 6 |
|
|
20
|
+
| 177–185 | Integration |
|
|
21
|
+
| 186–197 | Configuration |
|
|
22
|
+
| 198–204 | Verification |
|
|
14
23
|
|
|
15
24
|
## Integration
|
|
16
25
|
|