feat(v-onboard): add Operations/Deployment coverage dimension to /v:onboard - #4
feat(v-onboard): add Operations/Deployment coverage dimension to /v:onboard#4khymerao wants to merge 8 commits into
Conversation
Review: the gap is real, and one change would make the fix honestVerified the premise against the code before judging it, and it holds:
So the material arrives and evaporates between stages. Your framing — "becoming confident partial truth downstream" — is the accurate one, and it's the part that matters: an agent reading our KB gets a document that looks like a complete description of the system and contains no production domain and no deployment path. The implementation follows the existing precedent ( The one change I'd ask for
That is the same bug this PR fixes, moved down one floor. Today the KB is silently missing the ops layer; after this it would silently assert there isn't one — and a stated absence reads more confidently than a gap. Ask: don't let the detector conclude "no ops" — let it report "no signals found", and surface that at the gate as a question rather than a verdict: "no explicit ops files detected — if this project does deploy, point me at it." Then the hardcoded list works as an accelerator for the common case instead of a verdict on the uncommon one, and the human stays the backstop exactly where the heuristic is blind. This is the same rule we applied elsewhere this week: an incomplete scan must never read as a clean one. (Fair disclosure: the same critique applies to the MinorThe body says 69/69 selftest checks; VerdictTake it. Five files, no overlap with the in-flight v2.18 branch or with #5–#8, real gap, house pattern. This is the cleanest merge in the queue. Please add the "no signals found" framing and rebase, and I'll merge. |
…s + rule dispatch)
…s' verdict
Per review: a fixed signal list is an accelerator for the common case, not a
verdict on the uncommon one. A project deploying via a bespoke ship.sh matched
nothing and the pipeline would silently assert 'no ops layer' — a stated absence
reads more confidently than a gap.
- detect_ops: rename present -> signals_found; falsity documented as 'no signals
found', not 'no ops'. Empty result carries empty lists, no verdict.
- CLI: print 'no-signals' (an open question), not 'no-ops' (a false absence).
- onboarding.md §1/§3/§6/operations.md: empty scan is never a silent skip; the
GATE surfaces an open question ('point me at your deployer, e.g. ship.sh').
Autonomous run records 'no signals found (not confirmed absent)'.
- specs updated; selftest asserts empty lists on bare (no false verdict).
5188dd1 to
47234a4
Compare
|
Addressed both, thanks for the sharp read. "no signals found", not "no ops" —
The hardcoded list now works as the common-case accelerator you described, with the human as backstop where it's blind. Rebase — rebased onto Follow-up (config-driven signal lists for both |
What
Adds an explicit Operations / Deployment coverage dimension to the
/v:onboardpipeline. When a repo has CI/CD, container, or deploy files, onboarding now produces a citeddocs/superpowers/architecture/operations.mdinstead of silently dropping that layer from the generated knowledge base.Additive & gated —
operations.mdis only generated when ops files are present and the maintainer confirms it at the existing HUMAN GATE; an unattended/auto-approve run includes it with no new code path.Why
packalready includesdocker/**,.github/workflows/*, Terraform, and deploy scripts, so the raw material reached EXTRACT — but DETECT never inventoried it, EXTRACT had no claim type for it, and the arch doc set was fixed atarchitecture.md/business-logic.md/tech-context.md. Net effect: Docker topology, CI/CD, production domain, and runbooks were silently skipped — becoming confident partial truth downstream. This closes that blind spot.How it works
detect-opssubcommand (mirrorsdetect-ui) inventories three categories — CI/CD (.github/workflows/*,.gitlab-ci.yml,.circleci/config.yml,Jenkinsfile, …), containers/infra (Dockerfile*,docker-compose*/compose.*,*.tf/*.tfvars, k8s heuristics), and deploy/PaaS (Procfile,fly.toml,vercel.json,deploy*.sh, …). Returns{signals_found, ci_cd[], containers[], deploy[]}; CLI printsops/no-signalsor--json. Empty scan = open question at the gate, never ano-opsverdict.type(operations) targetingoperations.md; load-bearing rules still bite (deploy-secret path, prod/branch gate, fail-closed CI check).typeis free-form toverify-citations, so no schema change.operations.mdas its own explicit per-artifact confirm; declining drops it. k8s detection is an honest filename/dir heuristic, flagged as such.Contents
scripts/compound-v-onboard.py—detect_ops()+_ops_category()+detect-opsCLI + selftest (walks the filesystem excludingVENDOR_DIRS, so the non-git--selftesttrees detect too)skills/compound-v/onboarding.md— DETECT bullet, EXTRACT type,operations.mddoc section, §6 gate confirm, §7 write surface, refresh notedocs/superpowers/specs/2026-06-30-v-onboard-design.md— artifacts-table row + conditional-fourth prosedocs/superpowers/{specs,plans}/2026-07-17-*Conventions / gates (verified locally)
main;python3 scripts/compound-v-onboard.py --selftest— 77/77 checks passdetect-ops --jsonverified on this repo (detects its own.github/workflows/*);no-signalson a bare treeverify-citations/ claims-schema change; no new runtime deps, hooks, or scriptsscripts/lint-frontmatter.pynot run — nopyyamlin the local env; N/A regardless (diff touches no frontmatter)