stack-detect (Phase 1 — detect)
Classifies the project into one or more { paradigm, engine, orm, platform, source_of_truth, confidence, files } stacks. This is the deterministic front door of every audit: it picks the paradigm profile the scorer re-normalizes over (scripts/score.mjs → PROFILES) and the module set each auditor runs.
What to do
Resolve the target directory (
$ARGUMENTSpath, else the project root / cwd).Run the detector and read its JSON stdout:
node scripts/detect-stack.mjs --dir "<dir>"It returns
{ stacks: [...], files_scanned }. Never edit or re-implement it — it is tested foundation.Empty
stacks→ there is nothing to audit offline. Do not guess an engine. Route the user to/claude-db:start(the guided wizard) or invite a plain-language description of the intended database. Surface the detector'shintverbatim.
Source-of-truth precedence (see references/detection-signals.md)
When several sources describe one database, authority is, in order:
- Live Tier-1 introspection (via the
introspectskill) — beats any file. - Declarative / generated artifact —
schema.prisma, Drizzle*_snapshot.json,structure.sql,schema.rb, generated migration SQL →confidence: established. - Migration SQL over ORM program source.
- ORM program source (
schema.ts,models.py, Mongoose/CDK) →confidence: directional.
directional stacks parsed from program source never raise a severity-5 cap — they nudge toward a generated artifact or Tier-1. When a declarative artifact and ORM source disagree, that is schema drift, owned by db-migration-safety (M22).
Routing emitted per stack
For each detected stack, emit the routing the orchestrator needs:
- paradigm → selects the
score.mjsprofile and--paradigmflag (relational | document | key-value | wide-column | vector | time-series | graph). - module set → M0 engine-selection (recommendation, unscored) + M1..M22 filtered to the paradigm's profile modules. Categories whose modules emit no scored finding go inactive — e.g. a document store is never penalised for missing foreign keys.
- source_of_truth + confidence → the parse reliability ceiling carried into every finding (Tier 0(a) reliable vs 0(b) best-effort).
Multi-store
Return all stacks (e.g. Postgres primary + Redis cache). The orchestrator audits each, scores each with its own --paradigm, and rolls up worst-of-across-stores per axis (see references/scoring-model.md → Multi-store rollup), naming the flooring store.
Output
Emit the raw stacks array, the per-stack routing (paradigm profile + module set), and the source_of_truth precedence note. Keep narration tight. Respond in the user's language (EN/ES).