Skip to content
AI Architect Academy

The second free gift · a plugin fixture

What the team leaves in a repository, red gates included.

A complete worked example shipped with the AI Architect plugin: a contract question answering system, taken through every stage. 7 of 9 gates pass. 2 fail, for one reason, and the example says so in its own files.

Fixture. Worked example shipped with the AI Architect plugin. Paths, commands and observed outputs are this example's definition, not a recording from a live repository. Re-derive everything against your own repository before treating any line as evidence.

frame · 00-frame.md

The outcome, and the observation that turns it off.

Anyone in the firm can ask a question about an executed contract and get an answer that cites the exact clauses it rests on, or a refusal that names who to ask instead.

Kill criterion

If, after six weeks of use, the share of answers that the legal ops lead's weekly sample of 40 finds correct and correctly cited is below 34 of 40, measured on 2026-10-11 with node scripts/citation-audit.mjs --sample 40 --since 2026-08-30, the system is turned off. Not retuned: turned off. A contract answer that is usually right is a liability, because it teaches people to stop checking.

decide · SYSTEM.md

The decisions that are expensive to undo.

Still open: Trust boundary. An open decision is allowed, as long as it carries a dated cost of waiting.

Model call seam

MADE

services/qa/src/model.py:L21 — one module, routing by task; rg -l "import (openai|anthropic)" -tpy → 1 file.

Orchestration shape

MADE

services/qa/src/pipeline.py:L72 — fixed workflow (scope check, retrieve, rerank, answer) with the exit condition in code. ADR-0002, ADR-0003.

Trust boundary

OPEN

services/qa/src/prompt.py:L57 — retrieved clause text is concatenated into the system prompt; rg -n "untrusted_clause" services/qa/src → 0 hits. The label line is ABSENT.

Long-run home

MADE

services/ingest/src/workflow.py:L19 — the 41-minute re-index is a durable workflow; questions stay request-scoped at 34 s against a 300 s ceiling. ADR-0002.

verify · architecture.json

Every stage has a gate. The failures are written down, not smoothed over.

  1. framePASS00-frame.md § outcome — one sentence
  2. discoveryPASSrg -c '\[assumed\]' docs/architecture/01-discovery.md → 0
  3. flowPASSrg -c '^### failure branch' docs/architecture/02-user-flows.md → 3
  4. decisionsPASSThree decisions MADE with file:line evidence and an accepted ADR each; trust is OPEN with a dated deferral cost, which the gate allows
  5. economicsPASSprices.json — 11 rows, every row with source_url and retrieved_at 2026-08-22
  6. trustFAILFAIL cause: pass criterion 4 — every T3 source must be shown entering the data position and not the instruction position. Clause text is T3 and enters the instruction position.
  7. evalsFAILFAIL cause: pass criterion 7 — the injection case must fail closed. injection-002 fails open.
  8. operatePASS07-runbook.md — 8 numbered steps plus one no-dry-run procedure, every command in a fenced block, every procedure with a rollback command and an owner
  9. verifyPASSreceipts/2026-08-23-verify.md — written in a fresh context, 8 evidence pointers re-derived, 8 CONFIRMED

review.md

Find it before you read it.

The trust gate failed. Using only the decisions above, which file and which line let text a counterparty wrote reach the model as an instruction?

Show the finding and its fix

F1 — retrieved clause text has no trust boundary. Two gates are red because of it.

  1. Move clause text out of system_prompt into a user-role message, wrapped as <untrusted_clause contract="…" amendment="…">…</untrusted_clause>.
  2. Add one sentence to the operator-authored system prompt naming that wrapper and stating that its contents are quoted material to cite, never instructions to follow.
  3. Verify: rg -n "system_prompt +=" services/qa/src/prompt.py → 0 hits; node scripts/run-evals.mjs docs/architecture/06-evals/cases.jsonl → 13 pass, exit 0.

receipts/2026-08-23-verify.md

The verifier re-derives; it does not repair.

The example’s receipt records 8 evidence pointers re-derived by the verifier role: 8 confirmed, 0 failed. In a real run that role works in a fresh context and never sees the other agents’ reasoning; here the receipt is part of the fixture, like everything else on this page. Every pointer can hold while a gate is red: pointers prove a finding, a gate judges it.

What was measured here: the plugin’s own contract check on this artifact set, 79 of 79 checks pass, run 2026-09-11 against plugin v0.1.3. It checks shape, not judgement.

Read every file in this example

More fixtures from the plugin

Different systems, different gates go red.

support triage · fixture

Triage the inbound support inbox of a 40-person B2B software company: classify, route, and draft a reply that a support agent approves before anything sends.

Failed: decisions · receipt pointers 7/7 confirmed

Read the example

personal AI centre of excellence · fixture

Build a personal AI centre of excellence on one person's own machine: three scheduled loops, a local memory store, and an ad-hoc session mode, with every output read by the operator before it becomes a decision.

Failed: operate · receipt pointers 8/8 confirmed

Read the example

Run the team on your own system, then learn to read what it hands back.

Excerpts generated from frankxai/ai-architect v0.1.3 examples by scripts/sync-worked-run.mjs on 2026-09-11, Apache-2.0.