@@ -55,17 +55,21 @@ Inventory the ground truth, write nothing:
5555- ** Existing instruction files** (treat per the cardinal rule above), stack, git remote origin.
5656- ** UI presence** via ` python3 scripts/compound-v-onboard.py detect-ui --repo . ` → ` ui ` / ` no-ui ` .
5757 This is the only thing that decides whether the DESIGN.md branch runs (step 9 / §DESIGN below).
58- - ** Operations / Deployment presence ** via `python3 scripts/compound-v-onboard.py detect-ops
59- --repo . --json` → ` {present , ci_cd[ ] , containers[ ] , deploy[ ] }`. Inventories CI/CD
58+ - ** Operations / Deployment signals ** via `python3 scripts/compound-v-onboard.py detect-ops
59+ --repo . --json` → ` {signals_found , ci_cd[ ] , containers[ ] , deploy[ ] }`. Inventories CI/CD
6060 (` .github/workflows/* ` , ` .gitlab-ci.yml ` , ` .circleci/config.yml ` , ` Jenkinsfile ` ,
6161 ` azure-pipelines.yml ` , ` .travis.yml ` , ` bitbucket-pipelines.yml ` ), container/infra
6262 (` Dockerfile* ` , ` docker-compose* ` /` compose.* ` , ` *.tf ` /` *.tfvars ` , and k8s heuristics —
6363 ` k8s/ ` , ` kustomization.yaml ` , Helm ` Chart.yaml ` ), and deploy/PaaS (` Procfile ` , ` fly.toml ` ,
6464 ` vercel.json ` , ` netlify.toml ` , ` render.yaml ` , ` serverless.yml ` , ` app.yaml ` , ` deploy*.sh ` ).
6565 Silent inventory like ` detect-ui ` — the * include-it?* ask lives at the GATE (§6), not here.
66- ` present: true ` is what gates the operations.md branch (§operations.md below). k8s detection
67- is a filename/dir heuristic (it cannot see manifest content) — stated as such here and in the
68- operations.md doc section.
66+ The fixed signal list is a ** common-case accelerator, not a verdict** :
67+ ` signals_found: true ` proposes the operations.md branch with the found files; `signals_found:
68+ false` means ** "no signals found," NOT "this project has no ops layer"** — a bespoke deployer
69+ (e.g. a hand-rolled ` ship.sh ` ) matches nothing yet still exists. So the empty case is ** never a
70+ silent skip** ; it becomes an ** open question at the GATE** (§6). An incomplete scan must never
71+ read as a clean one. k8s detection is a filename/dir heuristic (it cannot see manifest content) —
72+ stated as such here and in the operations.md doc section.
6973- ** Style configs** : eslint / prettier / ruff / editorconfig / tsconfig / lockfiles — the
7074 deterministic evidence ` CONVENTIONS.md ` is later derived from.
7175- ** Cross-tool signal** for the bridge decision: presence of ` .cursor* ` , ` .windsurf* ` , ` GEMINI.md ` ,
@@ -101,7 +105,9 @@ A claim is **load-bearing** when it concerns **security, fail-closed behavior, o
101105the claims where being confidently wrong is dangerous.
102106
103107` operations ` claims (CI/CD, container topology, deploy target, runbook pointers) target
104- ` operations.md ` and are emitted ** only when DETECT's ` detect-ops ` reported ` present: true ` ** . The
108+ ` operations.md ` and are emitted when DETECT found ops signals (` signals_found: true ` ) ** or** when
109+ the maintainer answered the GATE's open question by pointing at a bespoke deployer the signal list
110+ missed (§6). The
105111load-bearing rule still bites: a deploy-secret path, a production/branch deploy gate, or a
106112fail-closed CI check is ** load-bearing** (` security ` / ` fail-closed ` ) and blocks on unsupported
107113per the two-tier gate (§4) like any other load-bearing claim. ` type ` is free-form to
@@ -154,13 +160,25 @@ Also flag drift from `python3 scripts/compound-v-onboard.py staleness --repo .`
154160Present, for approval, a ** per-artifact AND per-section diff** , alongside confidence/staleness and
155161the diagnosis. ** Nothing is written before explicit approval** — no auto-apply, ever.
156162
157- When ` detect-ops ` reported ` present: true ` , present ` operations.md ` as its ** own explicit
158- per-artifact confirm** , framed with the detected inventory: * "DevOps/deployment tooling detected —
159- ` <ci_cd / containers / deploy counts + paths> ` — include ` operations.md ` ?"* Declining drops the doc
160- and writes nothing for it; this is the * "ask the user whether to take DevOps into account"* decision.
163+ ** Operations coverage — surface it in BOTH branches; the detector is an accelerator, never a verdict:**
164+
165+ - ** ` signals_found: true ` ** — present ` operations.md ` as its ** own explicit per-artifact confirm** ,
166+ framed with the detected inventory: * "DevOps/deployment tooling detected —
167+ ` <ci_cd / containers / deploy counts + paths> ` — include ` operations.md ` ?"* Declining drops the doc
168+ and writes nothing for it; this is the * "ask the user whether to take DevOps into account"* decision.
169+ - ** ` signals_found: false ` ** — do ** not** conclude "no ops layer" and skip silently. The fixed signal
170+ list is blind to bespoke deployers, so surface the gap as an ** open question** , not a verdict:
171+ * "No explicit ops files detected. If this project does deploy, point me at it (e.g. a hand-rolled
172+ ` ship.sh ` , a Makefile target, an internal runbook) and I'll document it in ` operations.md ` ."* If the
173+ maintainer names something, EXTRACT reads-then-cites it into ` operations.md ` ; if they confirm there
174+ is genuinely nothing, it is skipped — but the ** human** , not the heuristic, made that call.
175+
161176A fully autonomous / unattended run (auto-approve / ` --permission-mode dontAsk ` — today the headless
162- marathon, or any future autonomous onboarding cycle) approves it like every other artifact, so ops
163- is taken into account ** without asking** — no separate code path is needed.
177+ marathon, or any future autonomous onboarding cycle) auto-approves the ` signals_found: true ` doc like
178+ every other artifact (ops taken into account ** without asking** — no separate code path). With
179+ ` signals_found: false ` and no human to answer, it records ** "ops coverage: no signals found (not
180+ confirmed absent)"** rather than asserting there is no ops layer — the open question survives to the
181+ next interactive pass instead of being silently resolved as "none".
164182
165183Critically, the diff ** expands every ` @import ` target** (to the 4-hop limit). ` @import ` is ** not a
166184token optimization** — an imported file loads in ** full** at launch; only path-scoped rules and
@@ -273,15 +291,18 @@ explore → ask → propose → write.
273291 green). Therefore the gate states ** "token pairs pass WCAG AA structurally"** — ** never
274292 "accessible."** Document the linter's blindness in the gate output, and flag multi-theme / arbitrary
275293 Tailwind class colors as "partial capture" rather than implying full coverage.
276- - ** ` operations.md ` ** (` docs/superpowers/architecture/ ` , ops repos) is generated ** only when
277- ` detect-ops ` reported ` present: true ` .** On a repo with no CI/CD, container, or deploy files it
278- is ** skipped** (verify this negative path on a non-ops dogfood, mirroring the DESIGN.md negative
279- path). Read-then-cite from the real workflow / Docker / compose / Terraform / deploy files
280- DETECT inventoried — never from the model's prior. Cover: container topology (services, ports,
281- volumes), CI/CD stages (build → test → deploy triggers and branch/environment gates), the deploy
282- target + production domain, and runbook pointers. ** No credential is ever extracted into the
283- doc** — the blocking ` scan-output ` gate (§7) refuses a generated file that contains one, and a
284- deploy-secret reference is documented by * path* , not value.
294+ - ** ` operations.md ` ** (` docs/superpowers/architecture/ ` , ops repos) is generated when ` detect-ops `
295+ found signals (` signals_found: true ` ) ** or** when the maintainer answered the GATE's open question
296+ (§6) by naming a bespoke deployer the signal list missed. It is skipped ** only** when
297+ ` signals_found: false ` ** and** the human confirmed there is genuinely nothing — never silently on an
298+ empty scan alone (that "no signals found ≠ no ops layer" distinction is the whole point; verify both
299+ the found path and the open-question path on dogfoods). Read-then-cite from the real workflow /
300+ Docker / compose / Terraform / deploy files DETECT inventoried (or the file the maintainer pointed
301+ at) — never from the model's prior. Cover: container topology (services, ports, volumes), CI/CD
302+ stages (build → test → deploy triggers and branch/environment gates), the deploy target +
303+ production domain, and runbook pointers. ** No credential is ever extracted into the doc** — the
304+ blocking ` scan-output ` gate (§7) refuses a generated file that contains one, and a deploy-secret
305+ reference is documented by * path* , not value.
285306
286307---
287308
0 commit comments