
The
Cognitive
Ceiling.
Meet AItreides.
AItreides by MPF Federal is an AI-enhanced tabletop wargaming ecosystem that operates as a companion to any in-person tabletop gameplay or strategic planning session - at machine speed - empowering defense planners to shift from reactive hindsight to prescriptive foresight.
- NODES
- 5
- THEATRES
- 3+
- SCENARIOS
- LIVE
- PROVENANCE
- GLASS BOX
Five nodes.
One typed contract.
AItreides is five purpose-built nodes and one typed, schema-validated request and response contract: the Ingestor answers through it, and every node renders into its response shape. Content enters as plain files — YAML and Markdown for authored scenarios; PDF, Word, PowerPoint, scanned pages and audio for uploads — and is validated at the boundary it crosses; every answer leaves with the passages it rests on, the reasoning behind it, its confidence, the alternatives it rejected and where it came from. What is built is marked built. What is designed is marked design, with the decision that shaped it.
- BUILTacceptance check or dated observation
- Built and verified against the deployed staging environment by an acceptance run.
- GATEDflag name
- Built, behind a default-OFF runtime flag. Not on in any deployed environment unless the copy says which.
- DESIGNticket key
- Decided and recorded, not built. Nothing executes.
- AUTHORED YAML / MDX → CODEGEN (ZOD) — BUILT (AIT-317/developer-renders-authored-scenario)
- UPLOAD → S3 → EXTRACT → CHUNK TEXT PDF · WORD · POWERPOINT — BUILT (AIT-203/uploaded-document-becomes-a-citation)
- OCR · TRANSCRIPTION IN CODE · NOT YET EXERCISED ON A DEPLOYED ENVIRONMENT — IN CODE
- Ingestor: Documents in, citations out — built (Text PDF · Word · PowerPoint: AIT-203/uploaded-document-becomes-a-citation)
- Mentat: The analysis seat — built (Persona sheets · illustrative distribution: AIT-317/mentat-renders-authored-persona); design (Adjudication · analysis · assurance: AIT-210 · AIT-211 · AIT-212)
- Moderator: The referee's seat — built (Rule library · beat timeline · inject pairing: AIT-317/moderator-renders-rule-trace); gated (Semi-rigid adjudication · stored rulings: moderator.rule-adjudication); gated (Proposed moves · authority from the serial: moderator.proposed-moves); design (Moves committed to the ledger · game log: AIT-262 · AIT-267)
- Developer: Scenario design and framing — built (Authored scenarios · content pipeline: AIT-317/developer-renders-authored-scenario); design (Design record · variants · export: AIT-257 · AIT-297 · AIT-261)
- Adversary: The red seat — built (Authored profiles · grounded reasoning display: AIT-317/adversary-renders-authored-profile); design (Cell emulation · free play: AIT-217)
- ONE TYPED CONTRACT · INGESTOR REQUESTS · ALL FIVE RENDER: AIRequest { scenario_id · node · beat_id · persona_id · question_text · question_hash } → AIResponse { text · reasoning[] · retrieved[] · confidence · alternatives[] · provenance }
- GLASS BOX: RETRIEVED · REASONING · CONFIDENCE · ALTERNATIVES · PROVENANCE · INPUTS WHEN SUPPLIED
- RETRIEVAL: BM25, scenario-scoped, cited · authored and uploaded indexes ranked separately · quality measured on every pull request — BUILT (AIT-54/query-reaches-server-action-with-citations): Retrieval is verified against the deployed staging site by the acceptance run.
- AI SERVING: Hand-authored catalogue first · Bedrock-hosted live track with pre-inference token budget, circuit breaker, fenced prompts · fallback shown in provenance — BUILT (AIT-54/query-reaches-server-action-with-citations): The catalogue path serves today; the live track is wired and real. NOT YET ACTIVATED (ai.live-track.enabled): The live track has never served a deployed request; off in both environments by ADR-0007.
- RECORDS: AuditLog · LiveAIInvocation · IngestedChunk · DocumentRevision — structured rows; AuditLog and LiveAIInvocation readable by admin and auditor only — BUILT (AIT-228/a-citation-names-its-revision-on-the-deployed-site): IngestedChunk and DocumentRevision are written by the pipeline today. AuditLog is written by two privileged actions and LiveAIInvocation by the Futurology Mentat's model calls, in both environments. NOT YET ACTIVATED (ai.live-track.enabled): Not yet activated: a live Glass Box answer's LiveAIInvocation row waits on the live track's ai.live-track.enabled, on in neither environment. A writer that records every backend mutation is AIT-65. The on-screen activity feed is not recorded.
- DESIGN: LEDGER · ADJUDICATION · DISCLOSURE CONTROL · AAR — decided, not built (AIT-207, AIT-210, AIT-209, AIT-214)
- FLAGS: every behaviour change default-OFF per environment
- ENVIRONMENTS: staging and production in separate AWS accounts
Nodes do not call each other. The Ingestor answers through one typed contract over shared retrieval, serving and record layers; the other four nodes render authored content into the same response shape and open it in the same Glass Box panel.
- ◉
Ingestor
RESPONSIBILITYTurns documents into retrievable, attributable passages, and answers questions against them with the citation attached.
CONSUMESUploaded PDF, Word and PowerPoint (including speaker notes), with scanned-PDF and audio routes in the code — landing in a scenario-scoped, identity-scoped storage prefix; plus the authored knowledge files for each scenario.
PRODUCESContent-hashed chunks carrying a citation ref, scenario, source key, document type and extraction route; ranked, scenario-scoped citations (lexical BM25, measured on every pull request). With document revisions on, a citation from an amended document carries the revision in force at retrieval time.
STATUSBUILTAIT-203/uploaded-document-becomes-a-citationText PDF · Word · PowerPointText-PDF and Word/PowerPoint routes verified end to end on the deployed staging environment; the extract function processed a ten-line synthetic text PDF — extract, chunk, hash, write — in about one second on staging, 2026-08-13. Re-uploading identical content adds nothing. Scanned-PDF OCR (200-page cap) and audio transcription routes are built and tested in isolation; neither has yet been exercised against a deployed environment.
- ◎
Mentat
RESPONSIBILITYThe analysis seat — where adjudication outcomes and measures of effectiveness will be computed and traced.
CONSUMESAuthored commander personas (YAML) and the scenario's decision forks.
PRODUCESPersona decision sheets rendered into the Glass Box response shape from authored data — reasoning, confidence and alternatives as written by the scenario author. No retrieval and no model call on this node today.
STATUSBUILTAIT-317/mentat-renders-authored-personaPersona sheets · illustrative distributionPersona sheets and a seeded decision distribution that is labelled on screen as an illustration of the mechanism, not a validated model.
DESIGNAIT-210 · AIT-211 · AIT-212Adjudication · analysis · assuranceAdjudication engine with rule trace, analysis measures, and verification and validation evidence.
- ◈
Moderator
RESPONSIBILITYThe referee's seat — the authored rules in force and the beats they apply to, presented today; sequence of play and the record of what was ruled are design, below.
CONSUMESThe scenario's beats, injects and rule library, authored in YAML and validated against the scenario schema at build time.
PRODUCESA presentation-time pairing of an inject with a plausible authored rule — hand-seeded for one scenario, category-heuristic for the others — with the rule's precondition and effect beside it. The pairing is not adjudication and the trace lives only in the open browser tab; nothing is recorded.
STATUSBUILTAIT-317/moderator-renders-rule-traceRule library · beat timeline · inject pairingRule library, beat timeline and the inject-to-rule pairing, for presentation only; nothing is adjudicated and nothing is recorded.
GATEDmoderator.rule-adjudicationSemi-rigid adjudication · stored rulingsEvery rule evaluated against the scenario state at an inject, shown in its own words with the evidence and, where the engine cannot decide, why; the Moderator rules each one and the ruling is stored with the rule revision and who decided. No probability is produced (ADR-0027).
GATEDmoderator.proposed-movesProposed moves · authority from the serialA proposed move evaluated against every rule of engagement: a rule that needs an authority reads whether it was granted in this serial, and the move is refused, held for a ruling, or stands as the rule's author chose. A refused move is recorded, never discarded (ADR-0028).
DESIGNAIT-262 · AIT-267Moves committed to the ledger · game logA single commit path from a validated move to an append-only ledger, and a game log rendered from it.
- ◇
Developer
RESPONSIBILITYScenario design and analytic framing — objectives, measures, rules of engagement, order of battle, injects.
CONSUMESAuthored YAML and Markdown under version control.
PRODUCESTyped scenario fixtures generated at build time; the same files drive the platform and the documentation site. Invalid content fails the build.
STATUSBUILTAIT-317/developer-renders-authored-scenarioAuthored scenarios · content pipelineThe authored scenarios and the content pipeline that types them. The Generate Scenario control in the demo is a scripted illustration.
DESIGNAIT-257 · AIT-297 · AIT-261Design record · variants · exportDesign record with objectives and measures, variant and sequel generation from a baseline, design-record export.
- ◆
Adversary
RESPONSIBILITYThe red seat — adversary behaviour grounded in cited doctrine rather than a referee's mood.
CONSUMESAuthored threat-actor profiles (YAML) with their bibliographies.
PRODUCESA hand-authored chain of thought rendered into the Glass Box response shape; each citation names an authored corpus document and chunk. The citations are authored, not retrieved.
STATUSBUILTAIT-317/adversary-renders-authored-profileAuthored profiles · grounded reasoning displayAuthored profiles and the grounded reasoning display.
DESIGNAIT-217Cell emulation · free playCell emulation and free play against an adjudication path, and non-player cell fill.
The seams
- AUTHORED CONTENT → TYPED FIXTURES
YAML and Markdown are parsed against strict schemas at build; unknown fields fail loudly instead of being dropped.
- UPLOAD → EXTRACT → CHUNK → STORE
A file placed in storage triggers extraction (text, Office, OCR or transcription), chunking, and a content-hashed row; the route is chosen from the validated storage key, never from client-supplied headers. The text-PDF and Office routes are the two proven on staging.
- QUESTION → CONTRACT → ANSWER
One request shape, validated as a strict object at the HTTP boundary (POST /api/ai/respond, dark until the live track is activated). The Ingestor's server action validates the question text, bounds its length, refuses control characters, and composes the request server-side.
- ANSWER → GLASS BOX
The response renders as five blocks — Retrieved, Reasoning, Confidence, Alternatives, Provenance — plus Inputs when the caller supplies them, with no summarisation between the contract and the screen.
- ACTION → RECORD
Privileged actions and live model attempts each have a structured record (AuditLog, LiveAIInvocation), readable only by admin and auditor. Both are written in both environments: an audit row when an organization is saved or a contact request triaged, an invocation row for each of the Futurology Mentat's model calls. A live Glass Box answer would write an invocation row too; that track is off. The on-screen activity feed stays in the browser and is not recorded. Ingested chunks and document revisions are written by the pipeline today and are readable by any signed-in user.
Built today
- BUILTAIT-317/developer-renders-authored-scenarioContent pipeline
Authored YAML and Markdown typed at build; invalid content fails the build.
- BUILTAIT-203/uploaded-document-becomes-a-citationUpload-to-retrieval pipeline
Text PDF and Word/PowerPoint verified on staging. Scanned-PDF OCR and audio transcription are in the code and not yet exercised on a deployed environment.
- BUILTAIT-54/query-reaches-server-action-with-citationsLexical retrieval, measured
BM25, scenario-scoped, cited. Quality is measured on every pull request and the gate fails on a drop; reports in docs/measurements/.
- GATEDingestor.document-revisionsDocument revision history
Append-only revisions with the one in force at any instant. On in staging and verified against the deployed pipeline. Not yet in production: the next promotion ships it there dark, and switching it on is a separate, recorded step.
- BUILTAIT-54/query-reaches-server-action-with-citationsCache-first AI service
Answers from a hand-authored, human-reviewed catalogue (demo-scale today); a failed live call falls back to it, with the reason carried in the response's provenance block and shown in the Glass Box.
- GATEDai.live-track.enabledLive Bedrock track
Pre-inference token budget, circuit breaker and fenced prompts. Built, never served a deployed request, off everywhere until the activation gate in ADR-0007 clears.
- BUILTAIT-54/query-reaches-server-action-with-citationsGlass Box provenance on every answer
Cached or live, model, who generated it and when, and the fallback reason if any.
- BUILTAIT-369/staging-a-settings-save-writes-exactly-one-audit-rowStructured audit and invocation records
On in both environments since 2026-09-24: saving an organization or triaging a contact request writes an AuditLog row, kept 365 days by an enforced TTL. The Futurology Mentat's model calls write LiveAIInvocation rows, kept 90 days; the live track's ai.live-track.enabled, which would add a row per Glass Box answer, is off. The audit trail is self-attributed; a writer that records every backend mutation is AIT-65. The on-screen activity feed is not recorded.
- BUILTAIT-222/deployed-app-reads-a-flagDefault-OFF runtime flags per environment
Every behaviour change ships dark and is switched on per environment without a redeploy.
- BUILT2026-08-11Separate staging and production accounts
Two backends in two AWS accounts; a staging flip cannot reach production.
Designed next
- DESIGNAIT-207Game-state ledger and replay
An append-only transaction log with turn sealing and branch replay.
- DESIGNAIT-210Adjudication engine and rule trace
Resolution against declared rules, with the trace recorded rather than shown.
- DESIGNAIT-256 · AIT-258 · AIT-294 · AIT-296One-format authoring-to-enforcement contracts
What the Developer authors — ROE, MSEL, order of battle, classification policy — consumed directly by the node that enforces it, with no translation layer (decided, ADR-0009).
- DESIGNAIT-209Disclosure control
Per-cell views, retained perceived state, classification enforcement.
- DESIGNAIT-214Hot wash and after-action product
Decision timeline, three-way decision view, AAR export.
- DESIGNAIT-215 · AIT-297Scenario variant generation
Variants and sequels from a baseline; the demo control today is a scripted illustration.
- DESIGNAIT-165Semantic retrieval
Deferred by ADR-0002; its measured-shortfall trigger fired on 2026-08-17 and the question is open on AIT-165, where the measurement work is in progress — a semantic store is neither approved nor scheduled.
Nothing in this section describes a capability an evaluator cannot verify against the code, which is available to evaluators on request.
- MODELS
- Anthropic Claude on AWS Bedrock, pinned inference profiles.
- TRAINING
- None — no customer content is used to train or fine-tune anything.
- BOUNDARIES
- Every behaviour change ships behind a default-OFF flag; staging and production are separate AWS accounts.
Transparent interfaces. Nothing hidden behind the box.
Every boundary a document or an answer crosses is a typed contract, available to evaluators on request: what a document must look like to enter, what an answer looks like when it leaves, and what is recorded in between. Each interface below is marked BUILT (verified on our staging site), GATED (built, behind a default-off switch, with the switch named), or DESIGN (decided, not yet executing) — so an evaluator can tell what to test today from what to hold us to next.
- BUILTacceptance check or dated observation
- Built and verified against the deployed staging environment by an acceptance run.
- GATEDflag name
- Built, behind a default-OFF runtime flag. Not on in any deployed environment unless the copy says which.
- DESIGNticket key
- Decided and recorded, not built. Nothing executes.
INBOUND
Document intake
BUILTAIT-203/uploaded-document-becomes-a-citationA document enters as an object written to a scoped path: identity, scenario, content kind, optional lineage, filename. When a file is uploaded from the platform, every path segment is set server-side; an object that does not match the contract is logged and left unprocessed. Two extraction routes are verified on our staging site — text-layer PDF, and Word and PowerPoint with speaker notes included — and both feed one chunker. Two more are built in code and have not yet run in a deployed environment: OCR through Textract — for scanned PDFs, capped at 200 pages before a job starts, and for single images — and audio transcription through Transcribe. Timing on record: the extract function processed a ten-line synthetic text PDF — extract, chunk, hash, write — in about one second on staging, 2026-08-13. Re-submitting unchanged content adds nothing: the chunk's identity is a hash of its text, and "already ingested" is a write that fails on purpose. Text and Office extraction carry no per-page service charge.
OCR CAP200 PAGESPARTIAL OCRTREATED AS FAILUREAuthored scenario inputs
BUILTAIT-317/developer-renders-authored-scenarioScenarios, commander personas and adversary profiles are plain YAML, validated in strict mode against the platform's Zod schemas at build time and compiled to typed fixtures; a malformed file fails the build and never reaches a session. Knowledge documents are Markdown, chunked at authored headings into a generated corpus.
FORMATYAML · MDVALIDATIONSTRICT · BUILD-TIMEDocument lineage and review
GATEDingestor.document-revisionsAn operator ingest can declare which document it amends. Revisions are append-only and windowed, so "which text was in force at this moment" has exactly one answer, and a superseded revision keeps its wording. A revision out for review is retrievable but its citation says pending; confirmation is a separate operator command, not a side effect of ingesting. Declaring an amendment from the upload tab is not built. The switch is on in staging today and off in production.
System-to-system intake
DESIGNAIT-322The object contract above is the machine interface: a principal permitted to write to a customer-scoped prefix would feed the same pipeline the browser does. Today the only writers are signed-in users through the platform and an operator script under an administrator profile. A credentialed machine identity for external feeds, and a record of what it wrote, is the next slice — it is not offered today. It is ticketed as AIT-322.
REQUEST → RESPONSE · derived from the platform's response catalog at build time · values are the demo seed, not a customer's
{
"scenario_id": "demo-default",
"node": "ingestor",
"beat_id": null,
"persona_id": null,
"question_text": "What is the PLA Eastern Theater Command readiness posture?",
"question_hash": "demo-seed:surge-capacity"
}{
"text": "Eastern Theater Command is assessed at an elevated state of readiness consistent with Strait Thunder-series exercise tempo as of T-72h. Two Type 055 destroyers have been assigned to the command since early 2026 and are co-located with the Shandong and Liaoning carrier strike groups - two CSGs at sea simultaneously is a meaningful departure from the 2022-2024 norm of one forward. PLA Rocket Force elements from the 61st and 62nd Bases have deployed road-mobile DF-17 and DF-26 launchers to field sites inside 1,500 km of the Strait, at a count consistent with an exercise footprint. Maritime militia movement supports the same reading: 47 PAFMM hulls tracked west of the median line at T-48h, matching pre-mobilization signalling seen in 2022 and 2024.",
"reasoning": [
{
"step": "retrieve",
"rationale": "Ranked the ETC readiness brief above the Guam imagery package for this query; both are in the Pacific Surge corpus."
},
{
"step": "corroborate",
"rationale": "Took the naval, missile and militia indicators from three separate chunks of the same brief rather than one summary line."
},
{
"step": "summarize",
"rationale": "Reported the departure from baseline, which is the analytic judgement, and left launcher ambiguity stated rather than resolved."
}
],
"retrieved": [
{
"ref": "doc:intel-brief-etc-surge#chunk-01",
"relevance": 0.94,
"excerpt": "ETC surface forces include two commissioned Type 055 destroyers assigned to the command since early 2026, co-located with two carrier strike groups (Shandong and Liaoning)."
},
{
"ref": "doc:intel-brief-etc-surge#chunk-02",
"relevance": 0.88,
"excerpt": "PLA Rocket Force elements associated with 61st and 62nd Bases have deployed road-mobile DF-17 HGV launchers and DF-26 ASBM transporter-erector-launchers to field sites inside 1,500 km of the Taiwan Strait."
},
{
"ref": "doc:intel-brief-etc-surge#chunk-04",
"relevance": 0.81,
"excerpt": "Observed count T-48h: 47 hulls. Pattern is consistent with prior pre-mobilization signalling phases in 2022 and 2024."
}
],
"confidence": 0.94,
"alternatives": [],
"provenance": {
"source": "cached",
"generated_by": "manual-demo-seed",
"generated_at": "2026-09-10T00:00:00Z",
"human_reviewed": true
}
}The AI endpoint's errors use a fixed envelope — { error, message, issues? } — with a stable machine code. Adopting it across the Lambda URLs is AIT-84, open.
This endpoint is GATED: ai.live-track.enabled is off in both deployed environments, and the live track has never served a deployed request. It carries no caller authentication yet (AIT-117, open). The shape is the contract; the switch is ours.
OUTBOUND
The answer record
BUILTAIT-54/query-reaches-server-action-with-citationsEvery answer — cached or live — is the same record: the text, the reasoning steps, the passages it rests on with their reference, relevance and excerpt, a confidence figure, the alternatives rejected and why, and a provenance block naming the source, the model, who generated it, when, and whether a human reviewed it. This is what the Glass Box panel displays, served from the reviewed catalog today; it is also the shape a downstream analysis tool such as Gemstone would consume. It is a JSON document with a typed schema in the codebase; a versioned public schema is ticketed (AIT-98), not shipped. For uploaded documents the platform's chunk table additionally records source key, filename, document type, extraction route, word count and uploader, readable by signed-in users.
SCHEMATYPED · IN CODEPUBLIC SCHEMAAIT-98 · OPENStructured records, not prose
BUILTAIT-369/staging-a-settings-save-writes-exactly-one-audit-rowAudit entries (actor, action, target, the state after the change, outcome), retrievable chunks with their source, document revisions, and one row per live model call (tenant, scenario, node, question hash, model, prompt version, token counts, latency, outcome, actor) are typed tables. Audit rows are written in both environments when an organization is saved or a contact request triaged, and kept 365 days by an enforced TTL; the trail is self-attributed, and a stream-fed writer that records every backend mutation is ticketed (AIT-65). The on-screen activity feed is not recorded at all. The live-call table holds rows from the Futurology Mentat's briefs and assessments, kept 90 days; the row does not carry the retrieved passages or the reasoning — only the screen shows those. What is recorded is designed to be queried, exported and compared, not read once and lost.
RETRIEVED REFS IN INVOCATION ROWNOT YETWRITESON · BOTH ENVIRONMENTSExport surfaces
DESIGNAIT-235 · AIT-291 · AIT-261 · AIT-207A serial's record exports today as one self-contained file: every transaction, its seals, a header that documents every field and rule, and an integrity value. It is written to storage the customer controls, and a verifier with no dependency on our software checks it and reconstructs the same force state the platform shows (AIT-235). Open turns are exported and marked as open. Two exports are specified and not built: the after-action product with its evidence attached (AIT-291), and the game design record as a standalone document a partner can review before a serial (AIT-261). Each is a named ticket with acceptance criteria. A read endpoint for the answer records that exist today is ticketed as AIT-323.
External simulation federations
AItreides does not join an HLA or DIS federation today, and this page will not say otherwise. The design position is an adapter at the ledger boundary: an external simulation's state updates would arrive as ledger transactions in the platform's own format, and adjudicated outcomes would leave the same way, so the Mentat and Moderator would see federated state through the same ledger they read human moves from. The ledger's transaction format (AIT-230) now reserves a place for a federation's own source, clock and object identity, so an adapter will not need a schema change; the adapter itself is not built. Its design, the standards it would map to (HLA 4, IEEE 1516-2025; DIS, IEEE 1278.1-2012) and what it would cost are recorded in ADR-0031 (AIT-324).
- Inbound lane: a browser upload (built) and an external feed (design, AIT-322) both write to the S3 object contract ingestor-uploads/<id>/<scenario>/<kind>/[<doc>/]<file>; ingest-extract fans into four routes — text PDF and Word/PowerPoint, verified on staging; OCR with a 200-page cap and audio, built and not yet exercised on a deployed site. Authored YAML (built) compiles through strict codegen into typed fixtures; authored Markdown is chunked at its headings into a generated corpus.
- Platform lane: the five nodes — Ingestor, Mentat, Moderator, Developer, Adversary — sit between a data bus (IngestedChunk and fixtures built; DocumentRevision behind ingestor.document-revisions, on in staging), the AIRequest to AIResponse contract bus (built, with the request and response keys listed), and a records bus (AuditLog, written by two privileged actions, and LiveAIInvocation, written by the Futurology Mentat's model calls, both in both environments; a live Glass Box answer's row waits on ai.live-track.enabled, which is off).
- Outbound lane: the answer record as JSON (built) would feed a downstream analysis tool such as Gemstone (design, AIT-323); export of a sealed serial, AAR and design record (design, AIT-235, AIT-291, AIT-261); a ledger transaction format (built, on in staging and production — AIT-230) exchanging state in and outcomes out with a federation adapter for HLA or DIS and an external simulation (design, AIT-324).
- BROWSER UPLOAD: built (AIT-200/upload-transfers)
- AUTHORED · YAML/MD: built (AIT-317/developer-renders-authored-scenario)
- EXTERNAL FEED: design (AIT-322)
- INGESTEDCHUNK · DOCUMENTREVISION · FIXTURES: built (AIT-228/a-citation-names-its-revision-on-the-deployed-site)
- AIREQUEST → AIRESPONSE: built (AIT-54/query-reaches-server-action-with-citations)
- RECORDS: AUDITLOG · LIVEAIINVOCATION: built (AIT-369/staging-a-settings-save-writes-exactly-one-audit-row)
- ANSWER RECORD (JSON): built (AIT-54/query-reaches-server-action-with-citations)
- DOWNSTREAM ANALYSIS TOOL · E.G. GEMSTONE: design (AIT-323)
- EXPORT · SEALED SERIAL: built (AIT-235/staging-an-export-verifies-without-aitreides-and-repeats-identically)
- LEDGER TRANSACTION FORMAT: built (AIT-230/staging-a-manual-move-is-numbered-by-the-store-and-survives-a-reload)
- FEDERATION ADAPTER · HLA / DIS: design (AIT-324)
- EXTERNAL SIMULATION: design (AIT-324)
- PDF-TEXT: verified (AIT-203/uploaded-document-becomes-a-citation)
- DOCX / PPTX: verified (AIT-245/a-citation-names-its-revision-on-the-deployed-site)
- OCR (200 PP): unexercised
- AUDIO: unexercised
- 01BUILTAIT-203/uploaded-document-becomes-a-citation
Object contract · text PDF and Office routes
verified on staging 2026-08-13 · 08-17 · 08-28
- 02BUILTAIT-54/query-reaches-server-action-with-citations
Answer record shape
served from the catalog on staging
- 03DESIGNAIT-322 · AIT-325 · AIT-323
Machine identity for external feeds · invocation record carries its evidence · read endpoint
ticketed · AIT-322 · AIT-325 · AIT-323
- 04DESIGNAIT-230 · AIT-324
Ledger transaction format → federation adapter
format built and on (AIT-230) · adapter design only (ADR-0031)
The intake path marked BUILT is verified on our staging site by an acceptance run. Each DESIGN item names its ticket where one exists.
Every answer shows its trace. This page says which records are written.
AItreides is built so an evaluator can inspect a decision without trusting it: the request a node received, the passages it cites, its stated confidence and alternatives, and where the answer came from are laid out beside every answer. The structured records behind them have a defined schema we hand you, on request, before you sign anything. Where a record is not yet written, this page says so. The gap list is dated and traceable to a ticket where one exists.
- BUILTacceptance check or dated observation
- Built and verified against the deployed staging environment by an acceptance run.
- GATEDflag name
- Built, behind a default-OFF runtime flag. Not on in any deployed environment unless the copy says which.
- DESIGNticket key
- Decided and recorded, not built. Nothing executes.
Inputs
Which scenario, which node, which turn, which persona, and the exact question asked: five of the request's six fields, shown as the trace's first block. What the block does not show is the cache key that selects a catalog answer and, on the live path, the system prompt and the fences the proxy wraps around the question; those are named here so nobody has to discover them.
- scenario_id
- node
- beat_id
- persona_id
- question_text
Sources & bounds
The passages the answer cites, each named to its document and chunk. On the live path (built, behind ai.live-track.enabled, never served a deployed request) the prompt is versioned content, the question and the passages are fenced as data with the instruction restated after each fence, and a token budget and a circuit breaker bound the call before it is made.
- retrieved[] · ref · relevance · excerpt
- prompt_version · live path
- token budget · live path
- circuit breaker · live path
- fences · live path
Outputs
The answer, its confidence, the alternatives considered and why each was set aside, and a provenance block stating whether it came from the human-reviewed catalog or a live model, which model, and when it was generated.
- text
- confidence
- alternatives[] · text · reason_not_chosen
- provenance · source · model · generated_at
- provenance · human_reviewed · fallback_reason
The citation rule
GATEDai.rag.grounding.enabledThe model does not choose what is cited. On the live path its citation list is discarded and replaced with the passages the retriever actually returned; if nothing supports the answer, the trace says none rather than improvising. That path is built and has never served a deployed request. On the deployed Ingestor path today, computed passages are appended to the author's reviewed citations and marked as computed, never swapped in for them. Retrieval is lexical and scenario-scoped, and its quality is measured on every pull request, with the reports in docs/measurements/, not asserted.
Shown
The six-part Glass Box trace (Inputs, Retrieved Knowledge, Reasoning Steps, Confidence, Alternatives Considered, Provenance) renders beside every AI answer on the four nodes that produce one: Ingestor, Mentat, Developer and Adversary. The Moderator's rule trace is a separate panel of the same shape and carries no AI answer. Today every deployed answer is served from the human-reviewed catalog; its authored reasoning steps are reviewed, not generated; the one step the retriever appends on the deployed Ingestor path is marked as computed, as are the passages it adds. The live model path for these answers is built and has not yet served a customer request.
Recorded
Three structured records with defined fields. An audit row each time one of two administrative actions reaches the database, saving the organization on the settings page or triaging a contact request, whether it succeeded or failed: actor, action, target, the state after the change redacted of secrets, and 365 days of retention enforced by the table's TTL. Audit writes are on in both environments since 2026-09-24, and the admin and auditor roles read the rows at /platform/admin/audit. The trail is append-only and self-attributed: the API accepts a row only under the caller's own identity, no one can change or delete a row through it, and only the admin and auditor roles can read one, but any signed-in user can add rows attributed to themselves. A writer that records every backend mutation from the table streams is not built (AIT-65). One row per live model call, with model, prompt version, token counts, latency, outcome, actor and tenant, kept 90 days by an enforced TTL: the Futurology Mentat's briefs and assessments write these rows in both environments today. A live answer on the four Glass Box nodes would write one without token counts or actor; that path is off. A per-session activity table exists in the schema, but nothing writes to it: the on-screen activity feed stays in the browser and is not recorded.
Designed
The adjudication record: a ruling pinned to the rules revision in force when it was made, referencing sealed game state rather than copying it, carrying its inputs including any random seed, its result, how it was produced (table, rule, or umpire judgment, all in one shape) and a rationale a participant can read. Written to an append-only ledger and replayable. This is design, with acceptance criteria on the record, not a shipped capability.
- Inputs: scenario_id, node, beat_id, persona_id, question_text
- Sources & bounds: retrieved[] · ref · relevance · excerpt, prompt_version · live path, token budget · live path, circuit breaker · live path, fences · live path
- Outputs: text, confidence, alternatives[] · text · reason_not_chosen, provenance · source · model · generated_at, provenance · human_reviewed · fallback_reason
- CITATIONS REPLACED WITH WHAT WAS RETRIEVED · LIVE PATH
- RECORDED: LiveAIInvocation, SCHEMA BUILT, WRITE ON · MENTAT
- RECORDED: AuditLog, SCHEMA BUILT, WRITE ON
- RECORDED: ActivityEvent, SCHEMA BUILT, WRITE NONE
- DESIGNED (ROADMAP · AIT-270 · AIT-207): ADJUDICATION RECORD, state @ sealed position, rules revision, inputs + seed, result · method · rationale
- DESIGNED (ROADMAP · AIT-270 · AIT-207): LEDGER, append-only, turn seal, replay
- SOLID · BUILT; DASHED · DESIGNED
- INPUTS
- scenario_id
- demo-default
- node
- ingestor
- beat_id
- null
- persona_id
- null
- question_text
- What is the PLA Eastern Theater Command readiness posture?
- cache key · not shown in the panel
- demo-seed:surge-capacity
- RETRIEVED
- [1]
- doc:intel-brief-etc-surge#chunk-01 · relevance 0.94 · ETC surface forces include two commissioned Type 055 destroyers assigned to the command since early 2026, co-located with two carrier strike groups (Shandong and Liaoning).
- [2]
- doc:intel-brief-etc-surge#chunk-02 · relevance 0.88 · PLA Rocket Force elements associated with 61st and 62nd Bases have deployed road-mobile DF-17 HGV launchers and DF-26 ASBM transporter-erector-launchers to field sites inside 1,500 km of the Taiwan Strait.
- [3]
- doc:intel-brief-etc-surge#chunk-04 · relevance 0.81 · Observed count T-48h: 47 hulls. Pattern is consistent with prior pre-mobilization signalling phases in 2022 and 2024.
- REASONING
- 1 retrieve
- Ranked the ETC readiness brief above the Guam imagery package for this query; both are in the Pacific Surge corpus.
- 2 corroborate
- Took the naval, missile and militia indicators from three separate chunks of the same brief rather than one summary line.
- 3 summarize
- Reported the departure from baseline, which is the analytic judgement, and left launcher ambiguity stated rather than resolved.
- CONFIDENCE
- 0.94
- ALTERNATIVES
- none
- PROVENANCE
- source
- cached
- generated_by
- manual-demo-seed
- generated_at
- 2026-09-10T00:00:00Z
- human_reviewed
- true
- model
- none (served from the catalog)
- id
- [redacted]
- tenant_id
- [tenant]
- scenario_id
- demo-default
- node
- ingestor
- beat_id
- null
- persona_id
- null
- question_hash
- demo-seed:surge-capacity
- model
- [pinned inference profile]
- prompt_version
- [id@version]
- input_tokens
- null *
- output_tokens
- null *
- latency_ms
- [milliseconds]
- outcome
- success
- actor_sub
- null *
- correlation_id
- null *
- created_at
- [timestamp]
- expires_at
- [epoch seconds, 90 days on]
* declared in the schema, passed as null on this path. A live answer on the Glass Box nodes records scenario, node, turn, persona, question hash, model, prompt version, outcome and latency; token counts, actor and correlation id are passed as null (AIT-226), and that path is off in both environments. The rows written today come from the Futurology Mentat's briefs and assessments, which also record input and output token counts and the acting user; no path writes a correlation id. Every row expires 90 days after it is written, enforced by the table's TTL. The passages shown and the reasoning steps are rendered on screen and not stored. See the gap list.
- id
- [redacted]
- actor_sub
- [redacted]
- actor_email
- [redacted]
- action
- user-profile.update-organization
- target_type
- UserProfile
- target_id
- [redacted]
- before
- null
- after
- { org: [organisation], roleTitle: [role] }
- correlation_id
- null *
- success
- true
- reason
- null
- ip
- null *
- user_agent
- null *
- created_at
- [timestamp]
- tenant_id
- [tenant]
- expires_at
- [epoch seconds, 365 days on]
* declared in the schema, passed as null by both actions today. Neither action records the state before the change yet; the state after it is redacted of secrets before it is written. A failed attempt is written too, with success false and the reason. Every row expires 365 days after it is written, enforced by the table's TTL.
- The record schemas and the dated gap list are source files we hand to evaluators on request, not a slide.
- You can see what an answer cites and where it came from, so a wrong answer is diagnosable to its source or its provenance. On a live model call the prompt version is recorded with the call.
- You can distinguish a reviewed answer from a generated one from the provenance block alone, and when a live call was attempted and fell back, the block says why. The grounding state (grounded, none, unsupported) is carried on the response and is not yet shown in the panel.
- You can read the list of what is not built, with the date it was last verified. Being wrong about a gap is the failure mode this page is designed to prevent.
- The live model path for Glass Box answers has not served a deployed request; activation is gated on proven cost, resilience and audit controls (ADR-0007).TICKETAIT-132
- On a live Glass Box answer the per-call record would carry no token counts, actor or correlation id (AIT-226); the Mentat's rows carry token counts and actor, and no path writes a correlation id. The passages shown and the reasoning are not written either; that is AIT-325.TICKETAIT-226TICKETAIT-325
- Audit rows are written for two administrative actions and are self-attributed; a streams-fed writer that records every backend mutation is not built, and nothing writes the activity table.TICKETAIT-65
- Adjudication rules on scenario rules and, behind a flag, on proposed moves, recording a refused move as well as one that stands; there is no ledger join and no evidence package.TICKETAIT-271TICKETAIT-270TICKETAIT-207TICKETAIT-281
Transparent interfaces, not a black box: the trace is on the screen, the schema is on request, and the gap list is dated.
Setup as a pipeline, not a project.
Exercise material arrives as PDFs, Word guides, slide decks with speaker notes, scans and recordings. On the staging environment, AItreides turns a text PDF or a Word or PowerPoint file into content-hashed, scenario-scoped, citable passages with a revision history, automatically, on upload; the scan and recording routes are built and have not yet been exercised there. Production carries the upload, extract and retrieval path today; revision history and review-status markers reach production with the next promotion. Below is the setup pipeline with the state of every step drawn as it is: what is built and verified on our staging site, what is built and not yet exercised in a deployed environment, and what is still design.
- BUILTacceptance check or dated observation
- Built and verified against the deployed staging environment by an acceptance run.
- GATEDflag name
- Built, behind a default-OFF runtime flag. Not on in any deployed environment unless the copy says which.
- DESIGNticket key
- Decided and recorded, not built. Nothing executes.
- BUILT · VERIFIED ON STAGING; GATED, NOT YET EXERCISED, OR OPERATOR-ONLY; DESIGN.
- 01 Ingest: TEXT PDF · OFFICE — VERIFIED ON STAGING — OCR · AUDIO — BUILT, NOT YET EXERCISED — built (AIT-203/uploaded-document-becomes-a-citation). Inputs: TEXT PDF (verified on staging), DOCX · PPTX (verified on staging), SCAN · IMAGE (built, not yet exercised), AUDIO (built, not yet exercised).
- 02 Validate: CHECKS BUILT — CONFIRM IS A CLI — gated (ingestor.document-revisions).
- 03 Compose: DESIGN — AIT-253 · AIT-293–298 — design ().
- 04 Run: GATED · ingestor.session-scenario — ANY AUTHORED SCENARIO THE SESSION CHOOSES — gated (ingestor.session-scenario).
- S3 KEY → LAMBDA → DYNAMODB ROW: ingestor-uploads/<identity>/<scenario>/<kind>/<file>
- CONVENTIONAL: COLLECT BY HAND → READ & RE-KEY → RULES AS PROSE → ANSWER FROM MEMORY → NOTHING CITABLE.
- AITREIDES TODAY: DROP THE FILE — built (AIT-200/upload-transfers) → EXTRACT · CHUNK · HASH — built (AIT-203/uploaded-document-becomes-a-citation) [~1 S · TEN-LINE TEXT PDF · STAGING] → REVISION · REVIEW STATUS (STAGING) — gated (ingestor.document-revisions) → CITED ANSWER IN THE ROOM — built (AIT-54/query-reaches-server-action-with-citations) → COMPOSE THE SCENARIO (DESIGN · AIT-253 · AIT-293–298) — design.
- MOVED FROM A PERSON TO THE PIPELINE. BLOCK WIDTH IS NOT TIME. THE ONLY TIMED STEP IS MARKED.
The steps that moved from a person to the pipeline are 2, 3 and 4. Step 5 is what the Developer node is for and is not built. Setup time: not yet measured. We publish a turnaround figure only after a scenario has been built against a requirement we had not seen and timed end to end, together with what that build produced and what it simplified away.
Ingest
BUILTAIT-203/uploaded-document-becomes-a-citationA file dropped in the browser: a text PDF, a Word or PowerPoint file (speaker notes included), a scanned page or image, or an audio recording.
Short passages, each SHA-256 content-hashed and tagged with its scenario, source file, uploader, extraction route and ingest time, written to the table the query path reads. Re-uploading the same content adds nothing — the hash is the key.
On staging, the extract function processed a ten-line synthetic text PDF — extract, chunk, hash, write — in about one second (2026-08-13). No real document and no other route has been timed yet.
Text PDF and Word/PowerPoint: built, verified on our staging site. Scanned pages (Textract) and audio (Transcribe): built, bounded, not yet exercised in a deployed environment. Text PDFs and Office files are extracted in-process with no per-page service charge; scans and recordings are pay-per-use — OCR per page, capped per document; transcription per minute — with no idle floor. Audio is transcribed asynchronously and re-enters the same pipeline as text.
Validate
GATEDingestor.document-revisionsThe uploaded object and its storage key.
A routed extraction or a refusal, and — on staging — a revision record for the document.
On staging, a passage cited from a pending-review document carries the marker while the confirmed one beside it does not, verified against the deployed site on 2026-08-31.
The content type is an allowlist. The storage key is composed by the server and is what decides the extraction route, so a key the system did not write is rejected rather than guessed at; a half-completed OCR job is treated as a failure, not a shorter document. On staging every document gets a revision record: ordered, append-only, one revision in force at any instant, superseded wording kept. A document is confirmed or pending review, and a passage cited from a pending-review document says so in the answer. Confirming is a deliberate operator command that can carry a note. It does not record the operator's identity and writes no audit row; there is no review screen yet. Both are open work (AIT-327).
Compose
DESIGNAIT-253 · AIT-293 · AIT-294 · AIT-295 · AIT-296 · AIT-297 · AIT-298Today: a structured YAML file written by hand — situation, forces, beats, injects with their citations, rules, victory conditions.
Today: the typed fixtures the platform runs, validated against a strict schema when the platform is built. A malformed file fails the build naming the file and the field.
Nothing to run yet. The design is recorded on the tickets named on this card, under the Developer node.
What is designed and not built: a scenario definition that ingested material feeds directly, an order of battle that instantiates as opening game state without re-keying, an inject list, and variants generated from a baseline. Setup time: not yet measured; the timeline above says what we publish and when.
Run
GATEDingestor.session-scenarioAn authored scenario and its corpus — the authored passages plus everything ingested under it.
A room where a question typed at the Ingestor returns the passages that answer it, ranked, each naming its source document. On staging, a passage from an amended or unconfirmed document also names its revision and says pending review; a single confirmed revision is cited plainly — silence means canon, on purpose.
Retrieval quality over both corpora is measured on every pull request and a regression blocks the merge. Reports live in docs/measurements/ and are available to evaluators on request.
Uploaded material is ranked separately from vetted material, so an upload cannot change how a vetted document scores, and passages from uploads are marked as ingested. Every AI answer surface carries the Glass Box panel: inputs, retrieved passages, reasoning, confidence, alternatives, provenance. The platform runs one scenario at a time — the one the session chose on the demo library, behind a flag — and every upload is filed under it.
Two documents making up the Futurology rules material — How to Play and How to be a Great Moderator, both Word files, declared final by their authors on 8 September 2026 — are the two declared lineages in force, one lineage per source document, and became the passages counted beside this heading. That figure is derived from the committed corpus snapshot, not typed. Four further lineages — a delivery deck and player directions as PowerPoint files, a facilitator's guide, and an earlier AI-focused mod — were uploaded on 31 August and retired when the finals were declared; their text stays readable in the revision history and is no longer served.
Each final document is the second revision of its lineage. The one rule that changed between the drafts and the finals is the deal — five to seven cards, where the drafts said seven — and asking how many cards to deal returns the final rule and not the superseded passage, because retrieval serves only revisions in force. The measurement that records that is available to evaluators on request (docs/measurements/retrieval-2026-09-09.md), and it is why we report answer coverage — the share of questions where every documented answer reaches the reader — rather than recall. It is measured on every pull request.
Both final documents cite as confirmed, and every citation names its revision. A retired or superseded passage is never cited; the history is read back with a command, not served as an answer.
What this does not do yet
- ·Compose a scenario from ingested documents (AIT-253, AIT-293–298).
- ·Confirm a revision from a screen — it is an operator command, and it writes no audit row (AIT-327).
- ·Answer an Ingestor question with a live model — that track has never served a deployed request and stays off until its cost, resilience and injection controls are proven against the deployed service (ADR-0007). What is live on the Ingestor is retrieval returning cited passages plus the catalogued answer path; the one live-model path in use is the Futurology Mentat's brief and assessments for a Moderator.
- ·Keep the citations and reasoning of an answer as a durable record — the Glass Box shows them at answer time. The invocation record stores the model, prompt version, latency and outcome, not the passages or the reasoning (AIT-325).
- ·Time the ingest of a real document, or of any route other than text PDF (AIT-329).
- ·Prove a setup time — it is not yet measured (AIT-326).
Every step above is either verifiable on our staging site or marked as design or not yet exercised. Ask us to run the ingest in front of you — a text PDF or a Word file, the two routes we have proven.
Plan for the unforeseen future.
Prepare for the next conflict, not the last one.
By seamlessly synthesizing tabletop gameplay data with agentic AI, AItreides accelerates readiness and creates countless iterations to advance human cognition leveraging machine psychology.