/audit-orchestrator — Intelligent Audit Selection + Power Levels
You are the audit conductor. Given a user request and a project, pick the
RIGHT audits at the RIGHT power level, dispatch them, and synthesize results.
How to invoke
/audit-orchestrator # interactive: ask user what to audit
/audit-orchestrator full # run all 23 audits in parallel
/audit-orchestrator quick # compatibility alias: focused top 5, full phases
/audit-orchestrator standard # smart selection at Standard level (default)
/audit-orchestrator forensic # deep Gestalt-Popper on selected audits
/audit-orchestrator security # secaudit + apiaudit + dataaudit
/audit-orchestrator performance # perfaudit + seoaudit
/audit-orchestrator design # uiuxaudit + motionaudit + a11yaudit + copyaudit
The 23 audits in the Quality Arsenal
| Audit |
Domain |
When to pick |
/codeaudit |
Code architecture |
New codebase, refactor, technical debt |
/secaudit |
Security (OWASP) |
Pre-prod, payment handling, auth surfaces |
/uiuxaudit |
Design quality |
Visual consistency, design system audit |
/refontaudit |
Dashboard refonte |
Senior-level redesign (comme Linear/Vercel) |
/flowaudit |
User journeys |
Onboarding, conversion drops, dead-ends |
/debugaudit |
Runtime bugs |
Console errors, broken features, smoke test |
/featureaudit |
Completeness |
PRD validation, ship-readiness, "what's missing" |
/perfaudit |
Core Web Vitals |
Slow site, lighthouse improvement |
/a11yaudit |
WCAG 2.1 AA |
Accessibility, screen readers, contrast |
/seoaudit |
Discoverability |
Search ranking, GEO/AEO, schema markup |
/dataaudit |
Schema integrity |
Orphaned records, migrations, RGPD |
/apiaudit |
API contracts |
Endpoint quality, auth matrix, rate limits |
/copyaudit |
Messaging |
Claims vs reality, CTA, tone |
/dxaudit |
Dev experience |
README quality, onboarding new devs |
/motionaudit |
Animation design |
Transitions, easing, motion brand DNA |
/automationaudit |
Cron/scripts |
Daemon health, scheduled tasks reliability |
/logicaudit |
Architecture |
Algorithm efficiency, redundant logic |
/i18naudit |
Internationalization |
Locale coverage, RTL, hardcoded copy |
/retentionaudit |
Product/CPO |
Feature opportunities, RICE roadmap (READ-ONLY) |
/depaudit |
Supply chain |
Dependencies, licenses, lockfiles, SBOM |
/privacyaudit |
Privacy |
PII, consent, retention, GDPR/CCPA |
/releaseaudit |
Release safety |
CI/CD, rollback, migrations, provenance |
/observabilityaudit |
Observability |
Signals, alerts, traces, incident diagnosis |
The 3 Power Levels
⚡ Level 1 — Focused
- Select the top 5 highest-impact audits, but execute every required phase
- Narrow scope with
--focus; never weaken Plan, Fix, Re-audit, or scoring
- Output: complete
audits/.<audit-id>/verdict.json + reports
- The legacy
quick invocation is a compatibility alias for this mode
🎯 Level 2 — Standard (30-60 min, DEFAULT)
- Full phases: Audit → Plan → Fix → Re-audit
- Score normalized /100
- Output: complete
audits/.<audit-id>/verdict.json + reports
- Use case: regular quality cycle, pre-PR validation
🔬 Level 3 — Forensic (1-4h per audit)
- Full Gestalt-Popper protocol, all phases extended
- Auto-fix every finding P0/P1/P2
- Re-audit cycles until 100/100 (or 3 cycle cap)
- Output: forensic-grade with falsification proofs + telemetry
- Use case: pre-launch, security/compliance gate, "make it bulletproof"
Smart Selection Algorithm
When user says ambiguous request like "audit my project":
1. DETECT PROJECT TYPE
- Check package.json: React/Next.js/Vue → UI audits relevant
- Check requirements.txt/pyproject.toml: Python → no motion/uiux
- Check .convex/ or prisma/: dataaudit relevant
- Check api/ or routes/: apiaudit relevant
- Check .github/workflows/: dxaudit + automationaudit
- No src/ but docs/: feature/copy/seo only (docs project)
2. PARSE INTENT KEYWORDS (English + French)
- "speed/fast/lent/lenteur" → perfaudit (+ seoaudit if web)
- "security/sec/vuln/secure/sécurité" → secaudit + apiaudit
- "design/visual/UI/UX/style" → uiuxaudit + motionaudit
- "content/copy/messaging/text" → copyaudit
- "accessibility/a11y/WCAG/handicap" → a11yaudit
- "API/endpoint/contract" → apiaudit + dataaudit
- "complete/missing/done/ship-ready" → featureaudit
- "code/quality/refactor" → codeaudit + logicaudit
- "retention/features/CPO/sticky" → retentionaudit
- "data/schema/migration" → dataaudit
- "automation/cron/scripts" → automationaudit
- "bug/error/broken/runtime" → debugaudit
- "redesign/refonte/dashboard" → refontaudit
- "full/all/everything/complet" → ALL 23 audits
3. PICK POWER LEVEL
- Default: Standard (Level 2)
- User mentions "quick/fast/rapide" → Focused (Level 1, full phase depth)
- User mentions "deep/forensic/production/launch/100" → Forensic (Level 3)
4. CHECK PROJECT MATURITY
- Empty src/ or fresh scaffold → skip code-focused audits, run featureaudit+copyaudit
- Mature codebase → all relevant
- Pre-launch → add secaudit + a11yaudit + perfaudit (the "go-live trio")
Execution Plan Output
Before dispatching, OUTPUT a plan like:
🎯 AUDIT PLAN — {project_name}
Detected:
Stack: Next.js + Tailwind + Convex
Maturity: Production (12 months)
Intent: "make sure it's secure before launch"
Recommended (Power Level: Forensic):
1. /secaudit (OWASP + payment surfaces — primary)
2. /apiaudit (auth matrix + rate limits — secondary)
3. /dataaudit (RGPD + orphan records — context for /apiaudit)
4. /a11yaudit (legal compliance — go-live blocker)
5. /perfaudit (CWV — go-live blocker)
Estimated duration: 4-6h (parallel waves)
Estimated tokens: ~800K
Plan confirmation — session-scoped (Law L3 autonomy)
The confirmation step depends on WHO is running this:
Interactive session (Home / a human is watching the terminal): print
Approve? [y/n/customize] and WAIT for the answer before dispatching.
Dispatched session (spawned by an oracle / worker / AISB — any tmux name
matching oracle-*, *-linear, *-fix-*, *-dev-*, AISB-*, or started via
dispatch-to-session.sh): do NOT ask. Pausing for [y/n] strands the run
because nobody is watching (Law L3). Instead, LOG the decision and proceed
at the default power level:
Plan confirmation auto-approved (dispatched session — L3 autonomy).
Power level: {detected default — Standard unless a forensic/go-live keyword was given}.
Proceeding to dispatch.
If the detected scope is genuinely ambiguous with no safe default, write the
block-file (~/.omega/state/worker-blocked-<session>.json) with the candidate
plan as the fallback and execute that fallback — never idle at a prompt.
Full Audit Mode
When user says "full audit" / "audit complet" / "tous les audits":
- Dispatch ALL 23 audits in 3 parallel waves (file-safety partitioned):
- Wave 1 (independent inventory, can parallel): codeaudit, logicaudit, dataaudit, apiaudit, seoaudit, featureaudit, retentionaudit, copyaudit, dxaudit, i18naudit, depaudit, privacyaudit
- Wave 2 (consumes Wave 1 evidence): secaudit, perfaudit, debugaudit, automationaudit, releaseaudit, observabilityaudit
- Wave 3 (experience bundle, after Wave 1): uiuxaudit, refontaudit, motionaudit, a11yaudit, flowaudit
- After all done, generate
audits/SYNTHESIS.md aggregating scores
- Score the project: average /100 across all audits + flag any < 80
- Telegram report with verdict + button to view each detailed report
State Tracking
Read audits/SYNTHESIS.md at start to know what's already done:
last_full_audit: 2026-05-13T12:00:00Z
scores:
codeaudit: 92/A
secaudit: 88/A
uiuxaudit: 91/S
...
status:
fresh: [codeaudit, secaudit] # < 7 days old
stale: [perfaudit] # 7-30 days old
expired: [a11yaudit] # > 30 days, recommend re-run
Output Convention
ALL audits MUST write to audits/.<audit-id>/, where <audit-id> is the exact
identifier from skills/audits/registry.toml. Never write a machine audit root
at the project root. The audit-orchestrator
- audit-tracker skills assume this canonical path.
Anti-patterns
- ❌ Running
/codeaudit when project has no source code (use /dxaudit instead)
- ❌ Running
/motionaudit on CLI/library project (it ABORTS automatically)
- ❌ Forensic level on every audit (token waste; use Standard unless go-live)
- ❌ Skipping the plan output (always print the plan). In an INTERACTIVE session also wait for
[y/n/customize]; in a DISPATCHED session log auto-approval and proceed at default power (Law L3) — never idle at a [y/n] prompt nobody is watching
- ❌ Running audits in serial when waves allow parallelism
- ❌ Treating retentionaudit as fix-mode (it's READ-ONLY by design)
Workflow
User: "/audit-orchestrator security"
↓
You: parse "security" → secaudit + apiaudit + dataaudit
You: detect project at Standard level (no "deep/forensic" keyword)
You: emit plan markdown
→ interactive session: ask `[y/n/customize]` and wait
→ dispatched session: log auto-approval, proceed at default power (Law L3)
↓
User: "y" (interactive only; dispatched skips straight to dispatch)
↓
You: dispatch 3 audits in parallel via tmux work sessions
You: monitor verdict.json files appearing under audits/.<audit-id>/
You: when all 3 done, write audits/SYNTHESIS.md
You: send Telegram report with aggregate score + per-audit links
When to invoke alternative skills
- For a SINGLE specific audit → user types
/codeaudit directly (not via orchestrator)
- For audit setup / .gitignore / progress dashboard → use
/audit-tracker
- For oracle dispatch of audit chain → use
/aisb full
Dynamic-Workflow Orchestration (v2)
This section UPGRADES how the orchestrator runs — it does NOT change WHAT it
selects, the 3 power levels, the wave partitioning, the audits/SYNTHESIS.md
contract, or the aggregate /100 verdict. Same identity, same Gestalt-Popper
doctrine (hinge-first selection, Popper falsification, runtime > code >
comments). It just turns this conductor from a linear "decide → dispatch →
wait → synthesize" loop into a fan-out → adversarially-verify → synthesize →
loop-until-dry workflow. The orchestrator owns no scoring matrix of its own;
its "verdict" is the aggregate it writes to SYNTHESIS.md, and that is
untouched here.
When this orchestrator runs (any invocation — interactive, full, a level, or a
keyword bundle), execute the steps below via the Workflow tool instead of
grinding them in series.
1. Decompose into INDEPENDENT parallel tracks (fan-out)
The orchestrator's pre-dispatch work splits into file-disjoint, side-effect-free
tracks that have no data dependency on each other. Run them concurrently in a
single Workflow fan-out, not one after another:
- Track A — Stack/signal detection (§"Smart Selection Algorithm" step 1 +
preamble §16): read
package.json, lockfiles, .convex/, prisma/, api/,
.github/workflows/, tailwind.config.*, env signals → emit
project_signals_detected.
- Track B — Intent parsing (step 2): map the user's EN+FR keywords to the
candidate audit set + chosen power level.
- Track C — Maturity probe (step 4): empty-scaffold vs mature vs pre-launch
("go-live trio") classification from git age + src density.
- Track D — Prior-state read: load existing
audits/SYNTHESIS.md +
audits/.<audit-id>/verdict.json freshness (fresh / stale / expired) so
already-fresh audits are skipped, not re-run.
These tracks are read-only and touch different inputs → safe to parallelize
(R-SCOPE: no shared writer). Join their outputs to compute the recommended audit
list + level. The dispatch waves themselves stay exactly as defined in
"Full Audit Mode" (Wave 1 read-only fan-out → Wave 2 consumers like secaudit that
read apiaudit's verdict → Wave 3 UI bundle); each wave is itself a fan-out, and
wave ordering is preserved because Wave 2/3 have real data dependencies on Wave 1
verdicts. Parallelize within a wave; serialize across waves.
2. ADVERSARIALLY VERIFY each finding before it reaches SYNTHESIS (>=2-of-3)
The orchestrator does not run forensic phases itself — its "findings" are the
cross-audit signals it aggregates: each child audit's top findings, every
cross_audit_confirmations elevation, and every score it is about to average
into SYNTHESIS.md. Before ANY of these is accepted into the synthesis, subject
it to three independent lenses and require >=2 to agree:
- Lens 1 — Reproduce: re-read the child audit's own
verdict.json evidence
chain (file:line → evidence → blast radius). Does the cited artifact actually
exist and say what the finding claims? (Runtime > code > comments.)
- Lens 2 — Refute (Popper): actively try to kill it. Is the score an ABORT
misread as a pass (a 401/403/empty-surface scored as green = ABORT, never a
PASS — Law L5)? Did the audit hit its 5-iteration cap and leave
needs_review? Is the "finding" an opinion with no falsifiable test?
- Lens 3 — Cross-check: does an independent audit corroborate it? A
finding confirmed on the same file:line by a second audit is the existing
elevation-to-CRITICAL mechanism (preamble §6); a contradiction between two
audits is itself a finding to surface, not silently averaged away.
A signal that survives <2 lenses is killed — dropped from SYNTHESIS.md and
recorded under a rejected_signals note (with the failing lens) so the kill is
auditable (R-CITE). A delegate audit's own "done" is an input, never the verdict
(R-VERIFY). Synthesis is the orchestrator's own job — never paste a child audit's
summary verbatim as the aggregate truth (R-ORCH).
3. Synthesize survivors into the EXISTING aggregate (unchanged)
Fold only the surviving signals back into the orchestrator's existing outputs —
the audits/SYNTHESIS.md aggregate, the average /100 across all audits + flag any < 80 scoring, and the plan/Telegram report described above. The synthesis
format, the averaging rule, the grade bands, and the per-audit links are
unchanged. This section adds a verification stage in front of synthesis; it
does not alter the synthesis itself.
4. Loop-until-dry for unknown-size discovery
Audit selection is open-ended: a signal detected in Track A can pull in audits
the keyword bundle never named (e.g. discovering stripe →
/flowaudit --focus=payment; discovering prisma/ → /dataaudit + /apiaudit;
discovering framer-motion → /motionaudit). Run selection as a convergence
loop:
candidates = fan-out(Track A..D) # initial set + level
do:
run the next eligible wave (fan-out within the wave)
read the new verdicts → adversarially verify (step 2)
rescan project_signals_detected from fresh discovery artifacts
add any newly-relevant audits to the pending waves
until: no new audit surfaces AND no wave has eligible un-run audits # dry
then: synthesize (step 3)
Bound the loop the same way the family already bounds work: honor the 4h
concurrency lock per audit, the 5-iteration fix cap inside each child audit, and
the mission token budget (R-BUDGET — escalate near the cap, never silently
overrun). "Dry" = a full pass adds zero new audits and leaves zero eligible
un-run audits; only then is the aggregate verdict final.
Net effect
Same audits, same levels, same waves, same SYNTHESIS.md verdict — but selected
by parallel discovery, hardened by >=2-of-3 adversarial verification so a single
hallucinated child finding can't poison the aggregate, and exhaustive by
loop-until-dry so a late-discovered stack signal never leaves a relevant audit
unrun.
Sources
1---2name: audit-orchestrator3description: Intelligent audit orchestrator — detects project type + user intent, recommends optimal audits with three bounded modes (Focused/Standard/Forensic). Use when user says "/audit", "what should I audit", "full audit", "audit my project", "audit fast", "audit deep", "find issues", "improve quality", "production ready check", "ship-ready audit". Auto-detects project stack and intent keywords (speed, security, design, content, accessibility, full) to pick best 1-N audits. Dispatches in parallel waves. Reads results from audits/.<audit-id>/verdict.json after each run.4---56# /audit-orchestrator — Intelligent Audit Selection + Power Levels78You are the **audit conductor**. Given a user request and a project, pick the9RIGHT audits at the RIGHT power level, dispatch them, and synthesize results.1011## How to invoke1213```bash14/audit-orchestrator # interactive: ask user what to audit15/audit-orchestrator full # run all 23 audits in parallel16/audit-orchestrator quick # compatibility alias: focused top 5, full phases17/audit-orchestrator standard # smart selection at Standard level (default)18/audit-orchestrator forensic # deep Gestalt-Popper on selected audits19/audit-orchestrator security # secaudit + apiaudit + dataaudit20/audit-orchestrator performance # perfaudit + seoaudit21/audit-orchestrator design # uiuxaudit + motionaudit + a11yaudit + copyaudit22```2324## The 23 audits in the Quality Arsenal2526| Audit | Domain | When to pick |27|---|---|---|28| `/codeaudit` | Code architecture | New codebase, refactor, technical debt |29| `/secaudit` | Security (OWASP) | Pre-prod, payment handling, auth surfaces |30| `/uiuxaudit` | Design quality | Visual consistency, design system audit |31| `/refontaudit` | Dashboard refonte | Senior-level redesign (comme Linear/Vercel) |32| `/flowaudit` | User journeys | Onboarding, conversion drops, dead-ends |33| `/debugaudit` | Runtime bugs | Console errors, broken features, smoke test |34| `/featureaudit` | Completeness | PRD validation, ship-readiness, "what's missing" |35| `/perfaudit` | Core Web Vitals | Slow site, lighthouse improvement |36| `/a11yaudit` | WCAG 2.1 AA | Accessibility, screen readers, contrast |37| `/seoaudit` | Discoverability | Search ranking, GEO/AEO, schema markup |38| `/dataaudit` | Schema integrity | Orphaned records, migrations, RGPD |39| `/apiaudit` | API contracts | Endpoint quality, auth matrix, rate limits |40| `/copyaudit` | Messaging | Claims vs reality, CTA, tone |41| `/dxaudit` | Dev experience | README quality, onboarding new devs |42| `/motionaudit` | Animation design | Transitions, easing, motion brand DNA |43| `/automationaudit` | Cron/scripts | Daemon health, scheduled tasks reliability |44| `/logicaudit` | Architecture | Algorithm efficiency, redundant logic |45| `/i18naudit` | Internationalization | Locale coverage, RTL, hardcoded copy |46| `/retentionaudit` | Product/CPO | Feature opportunities, RICE roadmap (READ-ONLY) |47| `/depaudit` | Supply chain | Dependencies, licenses, lockfiles, SBOM |48| `/privacyaudit` | Privacy | PII, consent, retention, GDPR/CCPA |49| `/releaseaudit` | Release safety | CI/CD, rollback, migrations, provenance |50| `/observabilityaudit` | Observability | Signals, alerts, traces, incident diagnosis |5152## The 3 Power Levels5354### ⚡ Level 1 — Focused55- Select the top 5 highest-impact audits, but execute every required phase56- Narrow scope with `--focus`; never weaken Plan, Fix, Re-audit, or scoring57- Output: complete `audits/.<audit-id>/verdict.json` + reports58- The legacy `quick` invocation is a compatibility alias for this mode5960### 🎯 Level 2 — Standard (30-60 min, DEFAULT)61- Full phases: Audit → Plan → Fix → Re-audit62- Score normalized /10063- Output: complete `audits/.<audit-id>/verdict.json` + reports64- Use case: regular quality cycle, pre-PR validation6566### 🔬 Level 3 — Forensic (1-4h per audit)67- Full Gestalt-Popper protocol, all phases extended68- Auto-fix every finding P0/P1/P269- Re-audit cycles until 100/100 (or 3 cycle cap)70- Output: forensic-grade with falsification proofs + telemetry71- Use case: pre-launch, security/compliance gate, "make it bulletproof"7273## Smart Selection Algorithm7475When user says ambiguous request like "audit my project":7677```781. DETECT PROJECT TYPE79 - Check package.json: React/Next.js/Vue → UI audits relevant80 - Check requirements.txt/pyproject.toml: Python → no motion/uiux81 - Check .convex/ or prisma/: dataaudit relevant82 - Check api/ or routes/: apiaudit relevant83 - Check .github/workflows/: dxaudit + automationaudit84 - No src/ but docs/: feature/copy/seo only (docs project)85862. PARSE INTENT KEYWORDS (English + French)87 - "speed/fast/lent/lenteur" → perfaudit (+ seoaudit if web)88 - "security/sec/vuln/secure/sécurité" → secaudit + apiaudit89 - "design/visual/UI/UX/style" → uiuxaudit + motionaudit90 - "content/copy/messaging/text" → copyaudit91 - "accessibility/a11y/WCAG/handicap" → a11yaudit92 - "API/endpoint/contract" → apiaudit + dataaudit93 - "complete/missing/done/ship-ready" → featureaudit94 - "code/quality/refactor" → codeaudit + logicaudit95 - "retention/features/CPO/sticky" → retentionaudit96 - "data/schema/migration" → dataaudit97 - "automation/cron/scripts" → automationaudit98 - "bug/error/broken/runtime" → debugaudit99 - "redesign/refonte/dashboard" → refontaudit100 - "full/all/everything/complet" → ALL 23 audits1011023. PICK POWER LEVEL103 - Default: Standard (Level 2)104 - User mentions "quick/fast/rapide" → Focused (Level 1, full phase depth)105 - User mentions "deep/forensic/production/launch/100" → Forensic (Level 3)1061074. CHECK PROJECT MATURITY108 - Empty src/ or fresh scaffold → skip code-focused audits, run featureaudit+copyaudit109 - Mature codebase → all relevant110 - Pre-launch → add secaudit + a11yaudit + perfaudit (the "go-live trio")111```112113## Execution Plan Output114115Before dispatching, OUTPUT a plan like:116117```118🎯 AUDIT PLAN — {project_name}119120Detected:121 Stack: Next.js + Tailwind + Convex122 Maturity: Production (12 months)123 Intent: "make sure it's secure before launch"124125Recommended (Power Level: Forensic):126 1. /secaudit (OWASP + payment surfaces — primary)127 2. /apiaudit (auth matrix + rate limits — secondary)128 3. /dataaudit (RGPD + orphan records — context for /apiaudit)129 4. /a11yaudit (legal compliance — go-live blocker)130 5. /perfaudit (CWV — go-live blocker)131132Estimated duration: 4-6h (parallel waves)133Estimated tokens: ~800K134```135136### Plan confirmation — session-scoped (Law L3 autonomy)137138The confirmation step depends on WHO is running this:139140- **Interactive session** (Home / a human is watching the terminal): print141 `Approve? [y/n/customize]` and WAIT for the answer before dispatching.142- **Dispatched session** (spawned by an oracle / worker / AISB — any tmux name143 matching `oracle-*`, `*-linear`, `*-fix-*`, `*-dev-*`, `AISB-*`, or started via144 `dispatch-to-session.sh`): do NOT ask. Pausing for `[y/n]` strands the run145 because nobody is watching (Law L3). Instead, **LOG the decision and proceed146 at the default power level**:147148 ```149 Plan confirmation auto-approved (dispatched session — L3 autonomy).150 Power level: {detected default — Standard unless a forensic/go-live keyword was given}.151 Proceeding to dispatch.152 ```153154 If the detected scope is genuinely ambiguous with no safe default, write the155 block-file (`~/.omega/state/worker-blocked-<session>.json`) with the candidate156 plan as the fallback and execute that fallback — never idle at a prompt.157158## Full Audit Mode159160When user says "full audit" / "audit complet" / "tous les audits":1611621. Dispatch ALL 23 audits in 3 parallel waves (file-safety partitioned):163 - **Wave 1** (independent inventory, can parallel): codeaudit, logicaudit, dataaudit, apiaudit, seoaudit, featureaudit, retentionaudit, copyaudit, dxaudit, i18naudit, depaudit, privacyaudit164 - **Wave 2** (consumes Wave 1 evidence): secaudit, perfaudit, debugaudit, automationaudit, releaseaudit, observabilityaudit165 - **Wave 3** (experience bundle, after Wave 1): uiuxaudit, refontaudit, motionaudit, a11yaudit, flowaudit1662. After all done, generate `audits/SYNTHESIS.md` aggregating scores1673. Score the project: average /100 across all audits + flag any < 801684. Telegram report with verdict + button to view each detailed report169170## State Tracking171172Read `audits/SYNTHESIS.md` at start to know what's already done:173174```yaml175last_full_audit: 2026-05-13T12:00:00Z176scores:177 codeaudit: 92/A178 secaudit: 88/A179 uiuxaudit: 91/S180 ...181status:182 fresh: [codeaudit, secaudit] # < 7 days old183 stale: [perfaudit] # 7-30 days old184 expired: [a11yaudit] # > 30 days, recommend re-run185```186187## Output Convention188189ALL audits MUST write to `audits/.<audit-id>/`, where `<audit-id>` is the exact190identifier from `skills/audits/registry.toml`. Never write a machine audit root191at the project root. The audit-orchestrator192+ audit-tracker skills assume this canonical path.193194## Anti-patterns195196- ❌ Running `/codeaudit` when project has no source code (use /dxaudit instead)197- ❌ Running `/motionaudit` on CLI/library project (it ABORTS automatically)198- ❌ Forensic level on every audit (token waste; use Standard unless go-live)199- ❌ Skipping the plan output (always print the plan). In an INTERACTIVE session also wait for `[y/n/customize]`; in a DISPATCHED session log auto-approval and proceed at default power (Law L3) — never idle at a `[y/n]` prompt nobody is watching200- ❌ Running audits in serial when waves allow parallelism201- ❌ Treating retentionaudit as fix-mode (it's READ-ONLY by design)202203## Workflow204205```206User: "/audit-orchestrator security"207 ↓208You: parse "security" → secaudit + apiaudit + dataaudit209You: detect project at Standard level (no "deep/forensic" keyword)210You: emit plan markdown211 → interactive session: ask `[y/n/customize]` and wait212 → dispatched session: log auto-approval, proceed at default power (Law L3)213 ↓214User: "y" (interactive only; dispatched skips straight to dispatch)215 ↓216You: dispatch 3 audits in parallel via tmux work sessions217You: monitor verdict.json files appearing under audits/.<audit-id>/218You: when all 3 done, write audits/SYNTHESIS.md219You: send Telegram report with aggregate score + per-audit links220```221222## When to invoke alternative skills223224- For a SINGLE specific audit → user types `/codeaudit` directly (not via orchestrator)225- For audit setup / .gitignore / progress dashboard → use `/audit-tracker`226- For oracle dispatch of audit chain → use `/aisb full`227228## Dynamic-Workflow Orchestration (v2)229230> This section UPGRADES *how* the orchestrator runs — it does NOT change WHAT it231> selects, the 3 power levels, the wave partitioning, the `audits/SYNTHESIS.md`232> contract, or the aggregate `/100` verdict. Same identity, same Gestalt-Popper233> doctrine (hinge-first selection, Popper falsification, runtime > code >234> comments). It just turns this conductor from a linear "decide → dispatch →235> wait → synthesize" loop into a **fan-out → adversarially-verify → synthesize →236> loop-until-dry** workflow. The orchestrator owns no scoring matrix of its own;237> its "verdict" is the aggregate it writes to `SYNTHESIS.md`, and that is238> untouched here.239240When this orchestrator runs (any invocation — interactive, `full`, a level, or a241keyword bundle), execute the steps below via the **Workflow tool** instead of242grinding them in series.243244### 1. Decompose into INDEPENDENT parallel tracks (fan-out)245246The orchestrator's pre-dispatch work splits into file-disjoint, side-effect-free247tracks that have no data dependency on each other. Run them **concurrently** in a248single Workflow fan-out, not one after another:249250- **Track A — Stack/signal detection** (§"Smart Selection Algorithm" step 1 +251 preamble §16): read `package.json`, lockfiles, `.convex/`, `prisma/`, `api/`,252 `.github/workflows/`, `tailwind.config.*`, env signals → emit253 `project_signals_detected`.254- **Track B — Intent parsing** (step 2): map the user's EN+FR keywords to the255 candidate audit set + chosen power level.256- **Track C — Maturity probe** (step 4): empty-scaffold vs mature vs pre-launch257 ("go-live trio") classification from git age + src density.258- **Track D — Prior-state read**: load existing `audits/SYNTHESIS.md` +259 `audits/.<audit-id>/verdict.json` freshness (fresh / stale / expired) so260 already-fresh audits are skipped, not re-run.261262These tracks are read-only and touch different inputs → safe to parallelize263(R-SCOPE: no shared writer). Join their outputs to compute the recommended audit264list + level. The **dispatch waves themselves stay exactly as defined** in265"Full Audit Mode" (Wave 1 read-only fan-out → Wave 2 consumers like secaudit that266read apiaudit's verdict → Wave 3 UI bundle); each wave is itself a fan-out, and267wave ordering is preserved because Wave 2/3 have real data dependencies on Wave 1268verdicts. Parallelize within a wave; serialize across waves.269270### 2. ADVERSARIALLY VERIFY each finding before it reaches SYNTHESIS (>=2-of-3)271272The orchestrator does not run forensic phases itself — its "findings" are the273**cross-audit signals it aggregates**: each child audit's top findings, every274`cross_audit_confirmations` elevation, and every score it is about to average275into `SYNTHESIS.md`. Before ANY of these is accepted into the synthesis, subject276it to **three independent lenses and require >=2 to agree**:277278- **Lens 1 — Reproduce**: re-read the child audit's own `verdict.json` evidence279 chain (file:line → evidence → blast radius). Does the cited artifact actually280 exist and say what the finding claims? (Runtime > code > comments.)281- **Lens 2 — Refute (Popper)**: actively try to kill it. Is the score an ABORT282 misread as a pass (a 401/403/empty-surface scored as green = ABORT, never a283 PASS — Law L5)? Did the audit hit its 5-iteration cap and leave284 `needs_review`? Is the "finding" an opinion with no falsifiable test?285- **Lens 3 — Cross-check**: does an *independent* audit corroborate it? A286 finding confirmed on the same file:line by a second audit is the existing287 elevation-to-CRITICAL mechanism (preamble §6); a contradiction between two288 audits is itself a finding to surface, not silently averaged away.289290A signal that survives <2 lenses is **killed** — dropped from `SYNTHESIS.md` and291recorded under a `rejected_signals` note (with the failing lens) so the kill is292auditable (R-CITE). A delegate audit's own "done" is an input, never the verdict293(R-VERIFY). Synthesis is the orchestrator's own job — never paste a child audit's294summary verbatim as the aggregate truth (R-ORCH).295296### 3. Synthesize survivors into the EXISTING aggregate (unchanged)297298Fold only the surviving signals back into the orchestrator's existing outputs —299the `audits/SYNTHESIS.md` aggregate, the `average /100 across all audits + flag300any < 80` scoring, and the plan/Telegram report described above. **The synthesis301format, the averaging rule, the grade bands, and the per-audit links are302unchanged.** This section adds a verification stage in front of synthesis; it303does not alter the synthesis itself.304305### 4. Loop-until-dry for unknown-size discovery306307Audit selection is open-ended: a signal detected in Track A can pull in audits308the keyword bundle never named (e.g. discovering `stripe` →309`/flowaudit --focus=payment`; discovering `prisma/` → `/dataaudit` + `/apiaudit`;310discovering `framer-motion` → `/motionaudit`). Run selection as a **convergence311loop**:312313```314candidates = fan-out(Track A..D) # initial set + level315do:316 run the next eligible wave (fan-out within the wave)317 read the new verdicts → adversarially verify (step 2)318 rescan project_signals_detected from fresh discovery artifacts319 add any newly-relevant audits to the pending waves320until: no new audit surfaces AND no wave has eligible un-run audits # dry321then: synthesize (step 3)322```323324Bound the loop the same way the family already bounds work: honor the 4h325concurrency lock per audit, the 5-iteration fix cap inside each child audit, and326the mission token budget (R-BUDGET — escalate near the cap, never silently327overrun). "Dry" = a full pass adds zero new audits and leaves zero eligible328un-run audits; only then is the aggregate verdict final.329330### Net effect331332Same audits, same levels, same waves, same `SYNTHESIS.md` verdict — but selected333by parallel discovery, hardened by >=2-of-3 adversarial verification so a single334hallucinated child finding can't poison the aggregate, and exhaustive by335loop-until-dry so a late-discovered stack signal never leaves a relevant audit336unrun.337338## Sources339340- 23 Quality Arsenal audits declared by `skills/audits/registry.toml`341- Helper docs: `ARSENAL-ORCHESTRATION-PLAYBOOK.md`, `ARSENAL-INTERCONNECTIONS.md`342- Public mirror: https://github.com/agentik-os/quality-arsenal