audit-before-architecting
When to invoke
Mandatory before:
- Drafting any visual map (system architecture, data flow, dispatch diagram)
- Writing any plan amendment (
§A1,§A2, etc.) - Proposing any cross-cutting recommendation (“we should build X” / “X should route through Y”)
- Answering “how does X work?” when X spans ≥2 services
Skip when:
- Read-only Q&A about a single file
- Single-step bug fix in known code
- Conversational reply (no architectural claim)
- User explicitly says “just give me your guess”
The protocol
Step 1 — Enumerate sources (min 15)
Spread across these dimensions:
[ ] Filesystem ls / find / glob — what exists where
[ ] Configs cat / grep — what's declared
[ ] Services systemctl list-units / status — what's running
[ ] Ports ss -tlnp — what's listening
[ ] Env vars grep master.env (REDACTED) — what's parameterized
[ ] CLIs which / --help / --version — what's installed
[ ] MCP servers claude mcp list / .mcp.json — what's wired
[ ] Live admin APIs curl ... — what cloud says
[ ] Postgres REST /rest/v1/<table>?limit=1 — what schema exists
[ ] Plans ls .claude/plans/ + grep — what's in flight
[ ] Memory grep MEMORY.md / project_*.md — what's claimed
[ ] FUNNEL/PORT registries — what's approved
[ ] Logs journalctl --user -u <unit> — recent behavior
[ ] SSH-reachable hosts — Mac fleet / Tailscale
[ ] Auth files ~/.codex/auth.json / ~/.kimi/credentials (REDACTED)
If your enumeration has fewer than 15 entries: dimensions are missing.
Step 2 — Run probes in parallel batches
Bash tool calls in single message with multiple invocations. Don’t serialize unless a probe depends on a prior result.
Step 3 — Build the “Sources Probed” preamble
Required format at top of response:
## Sources Probed (transparency block)
| # | Source | Method | Result |
|---|---|---|---|
| 1 | npm-global CLIs | `ls ~/.npm-global/bin/` | <summary> |
| 2 | systemd services | `systemctl --user list-units` | <summary> |
... (≥15 rows)
### Sources NOT yet probed (gaps explicitly declared)
- <gap 1>
- <gap 2>
...If “Sources NOT yet probed” is empty AND you spent <10 min on probes: you missed dimensions. Re-enumerate.
Step 4 — Status-flag every claim
Every architectural claim in the body of the response gets a flag:
✓ working / verified live
⚠ misconfigured / partial / drift detected
✗ not built / broken / blocked
⏸ paused / dormant
? unverified / inferred from memory
A claim with no flag is a violation. The flag IS the calibration.
Step 5 — Live wins over memory
If memory said X but probe said Y:
- The architecture cites Y
- The drift is flagged in the body (“memory said X, live shows Y”)
- A memory-update todo is queued in the same response (don’t defer)
Step 6 — Self-review before submit
[ ] ≥15 probes in Sources Probed table
[ ] Each probe has Method (the actual command) and Result (live output)
[ ] Sources NOT yet probed sub-list explicit and complete
[ ] Every architectural claim has a status flag
[ ] Memory drift surfaces flagged + queued for update
[ ] No raw secrets in any tool result (G-CREDENTIAL-PIPE applies)
If any unchecked: response is not done.
Failure modes this skill prevents
From the 2026-05-01 cluster:
- “EC2 Mac ollama not installed” → was running, SSH PATH issue masked it
- “Langfuse host broken” → was working, my auth header was wrong
- “38 SQLite DBs” → was 44, memory was stale
- “7 .mcp.json servers” → was 8, missed dune (HTTP-based)
- “29 KB platforms” → was 69, substrate plan was stale
- “14 cross-ref plans” → was 25+, my count was sample-not-grep
- “Mac Ultra in fleet” → was Mac Mini for BlueBubbles, my conflation
- “8 orphan Portkey configs” → was a complete tier scheme, my reading was wrong
- “aurora MCP 21/28 tools” → was 20 (deferred-tools registry was canonical)
Every miss was caught by Henry. The skill’s job: catch them BEFORE Henry has to.
Pairs with (governance gates)
feedback_audit_before_architect.md(G-AUDIT-PROBE) — the rule this skill enforcesfeedback_live_over_memory.md(G-LIVE-VS-MEMORY) — what to do when probe contradicts memoryfeedback_completeness_map_required.md(G-COMPLETENESS-MAP) — checklist for visual mapsfeedback_credential_pipe_required.md(G-CREDENTIAL-PIPE) — redact secrets in probe outputfeedback_probe_before_execute.md(G-PROBE-BEFORE-EXECUTE) — sibling rule for execution side
Invokes / Invoked by
Invokes: skill-registry, acquisitions-lifecycle, SKILL Invoked by: _summary, _summary, SKILL