Skip to main content
AItreides
CALLSIGN / AITREIDES-ALPHA
ACCELERATING READINESSAT MACHINE SPEED
[0:00]THE PROBLEM / INBOUND BRIEFING
BEARING127°ALT34,500 FTNODES5 READY2026-10-07 14:17:26 UTC

The
Cognitive
Ceiling.

Traditional military wargaming has hit a ceiling - held back by human fatigue, bias, and an inability to scale. Still, handing the reins to unchecked "black box" AI introduces dangerous automation bias, threatening readiness, lethality, and advanced strategic planning.
[0:15]THE SOLUTION / PAYLOAD DEPLOYED
FRAME15-30MODELAITREIDES-α

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
BRIEFING / MONITOR-02REC · 00:15
CH01SIGNALSTRONGSRCAITREIDES-ORCH
[0:30]THE ARCHITECTURE / SYSTEM SCHEMATIC

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)BUILTUPLOAD → S3 → EXTRACT → CHUNKTEXT PDF · WORD · POWERPOINTBUILTOCR · TRANSCRIPTIONIN CODE · NOT YET EXERCISED ON A DEPLOYED ENVIRONMENTIN CODE◉INGESTORDocuments in, citations outBUILT◎MENTATThe analysis seatBUILTDESIGN◈MODERATORThe referee's seatBUILTGATEDDESIGN◇DEVELOPERScenario design and framingBUILTDESIGN◆ADVERSARYThe red seatBUILTDESIGNONE TYPED CONTRACT · INGESTOR REQUESTS · ALL FIVE RENDERAIRequest { scenario_id · node · beat_id · persona_id · question_text · question_hash }AIResponse { text · reasoning[] · retrieved[] · confidence · alternatives[] · provenance }GLASS BOXRETRIEVED · REASONINGCONFIDENCE · ALTERNATIVESPROVENANCEINPUTS WHEN SUPPLIEDRETRIEVALBM25, scenario-scoped, cited · authored and uploaded indexes ranked separately · quality measured on every pull requestBUILTAI SERVINGHand-authored catalogue firstBedrock-hosted live track with pre-inference token budget, circuit breaker, fenced promptsfallback shown in provenanceBUILTNOT YET ACTIVATEDRECORDSAuditLog · LiveAIInvocation · IngestedChunkDocumentRevision — structured rows; AuditLog and LiveAIInvocation readable by admin and auditor onlyBUILTNOT YET ACTIVATEDDESIGNLEDGER · ADJUDICATION · DISCLOSURE CONTROL · AAR — decided, not builtAIT-207 · AIT-210 · AIT-209 · AIT-214FLAGS: every behaviour change default-OFF per environmentENVIRONMENTS: staging and production in separate AWS accounts
  • 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.

AUTHORED CORPUS71 CHUNKS · 15 DOCUMENTS · 3 SCENARIOSCONTRACTONE TYPED SCHEMAVALIDATIONSTRICT SCHEMAS · BUILD + HTTPRETRIEVALBM25 · SCENARIO-SCOPEDRETRIEVAL QUALITYMEASURED · CI-GATEDINGEST ROUTES2 VERIFIED · 2 BUILTINGEST · ONE MEASUREMENTTEN-LINE SYNTHETIC TEXT PDF ≈1 S · STAGING · 2026-08-13PROVENANCEON EVERY RESPONSEMODELSCLAUDE ON AWS BEDROCKTRAININGNONELIVE TRACKBUILT · NOT ACTIVATEDRECORDSBUILT · NOT ACTIVATEDFLAGSDEFAULT-OFFENVIRONMENTS2 AWS ACCOUNTS
  • Ingestor

    RESPONSIBILITY

    Turns documents into retrievable, attributable passages, and answers questions against them with the citation attached.

    CONSUMES

    Uploaded 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.

    PRODUCES

    Content-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.

    STATUS
    BUILTAIT-203/uploaded-document-becomes-a-citationText PDF · Word · PowerPoint

    Text-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

    RESPONSIBILITY

    The analysis seat — where adjudication outcomes and measures of effectiveness will be computed and traced.

    CONSUMES

    Authored commander personas (YAML) and the scenario's decision forks.

    PRODUCES

    Persona 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.

    STATUS
    BUILTAIT-317/mentat-renders-authored-personaPersona sheets · illustrative distribution

    Persona 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 · assurance

    Adjudication engine with rule trace, analysis measures, and verification and validation evidence.

  • Moderator

    RESPONSIBILITY

    The 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.

    CONSUMES

    The scenario's beats, injects and rule library, authored in YAML and validated against the scenario schema at build time.

    PRODUCES

    A 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.

    STATUS
    BUILTAIT-317/moderator-renders-rule-traceRule library · beat timeline · inject pairing

    Rule 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 rulings

    Every 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 serial

    A 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 log

    A single commit path from a validated move to an append-only ledger, and a game log rendered from it.

  • Developer

    RESPONSIBILITY

    Scenario design and analytic framing — objectives, measures, rules of engagement, order of battle, injects.

    CONSUMES

    Authored YAML and Markdown under version control.

    PRODUCES

    Typed scenario fixtures generated at build time; the same files drive the platform and the documentation site. Invalid content fails the build.

    STATUS
    BUILTAIT-317/developer-renders-authored-scenarioAuthored scenarios · content pipeline

    The 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 · export

    Design record with objectives and measures, variant and sequel generation from a baseline, design-record export.

  • Adversary

    RESPONSIBILITY

    The red seat — adversary behaviour grounded in cited doctrine rather than a referee's mood.

    CONSUMES

    Authored threat-actor profiles (YAML) with their bibliographies.

    PRODUCES

    A 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.

    STATUS
    BUILTAIT-317/adversary-renders-authored-profileAuthored profiles · grounded reasoning display

    Authored profiles and the grounded reasoning display.

    DESIGNAIT-217Cell emulation · free play

    Cell 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.
[EVAL-01]THE INTERFACES / DATA BOUNDARIES

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-citation

    A 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 FAILURE
  • Authored scenario inputs

    BUILTAIT-317/developer-renders-authored-scenario

    Scenarios, 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-TIME
  • Document lineage and review

    GATEDingestor.document-revisions

    An 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-322

    The 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

POST /api/ai/respond · request body
{
  "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"
}
200 · response body
{
  "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.

GATEDai.live-track.enabled

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-citations

    Every 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 · OPEN
  • Structured records, not prose

    BUILTAIT-369/staging-a-settings-save-writes-exactly-one-audit-row

    Audit 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 ENVIRONMENTS
  • Export surfaces

    DESIGNAIT-235 · AIT-291 · AIT-261 · AIT-207

    A 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

DESIGNAIT-324 · AIT-230

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).

Three-lane diagram of the AItreides data boundaries: inbound sources, the platform's five nodes and three buses, and the outbound surfaces, each marked built, gated or design.INBOUNDBROWSERUPLOADBUILTEXTERNALFEEDDESIGN · AIT-322AUTHOREDYAML/MDBUILTyaml strictmd chunkedS3 OBJECT CONTRACTingestor-uploads/<id>/<scenario>/<kind>/[<doc>/]<file>TYPEDFIXTURESingest-extractPDF-TEXTDOCX / PPTXOCR (200 PP)AUDIOBUILTGATEDDESIGNBUILT · NOT YET RUN ON A DEPLOYED SITEPLATFORMINGESTEDCHUNK · DOCUMENTREVISION · FIXTURESBUILTDocumentRevision behind ingestor.document-revisionson in stagingINGESTORMENTATMODERATORDEVELOPERADVERSARYAIREQUEST → AIRESPONSEBUILTREQUESTscenario_idnodebeat_idpersona_idquestion_textquestion_hashRESPONSEtextreasoningretrievedconfidencealternativesprovenanceRECORDS: AUDITLOG · LIVEAIINVOCATIONBUILTwritten in both environmentslive-track rows offai.live-track.enabledOUTBOUNDANSWER RECORD(JSON)BUILTDOWNSTREAM ANALYSIS TOOLE.G. GEMSTONEDESIGN · AIT-323state in · outcomes outLEDGER TRANSACTIONFORMATon in staging and production · ledger.serial-ledgerBUILTFEDERATION ADAPTERHLA / DISDESIGN · AIT-324EXTERNALSIMULATIONDESIGN · AIT-324EXPORTSEALED SERIALon in staging and production · ledger.exportBUILT
  • 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
  1. 01BUILTAIT-203/uploaded-document-becomes-a-citation

    Object contract · text PDF and Office routes

    verified on staging 2026-08-13 · 08-17 · 08-28

  2. 02BUILTAIT-54/query-reaches-server-action-with-citations

    Answer record shape

    served from the catalog on staging

  3. 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

  4. 04DESIGNAIT-230 · AIT-324

    Ledger transaction format → federation adapter

    format built and on (AIT-230) · adapter design only (ADR-0031)

ROUTES4 · HEALTH · HEALTH SEED · SEARCH · AI RESPONDLAMBDA URLS4 · IAM AUTHERROR ENVELOPEDEFINED · ADOPTION OPENEXTRACTION ROUTES2 VERIFIED · 2 BUILTTEXT PDF EXTRACT~1 S · TEN-LINE TEXT PDF · STAGING · 2026-08-13IDEMPOTENCYCONTENT HASHRECORD TYPES28AUTHORED INPUTYAML STRICT · MD CHUNKEDAI RESPONDGATED · OFFTRAININGNONE · ADR-0001EXPORT ENDPOINTDESIGNFEDERATION ADAPTERDESIGN

The intake path marked BUILT is verified on our staging site by an acceptance run. Each DESIGN item names its ticket where one exists.

[EVAL-02]AUDITABLE REASONING / LOGIC TRACE

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.
STEP 01BUILTAIT-54/query-reaches-server-action-with-citations

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
STEP 02GATEDai.live-track.enabled

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
STEP 03BUILTAIT-54/query-reaches-server-action-with-citations

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.enabled

The 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

BUILTAIT-54/query-reaches-server-action-with-citations

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

BUILTAIT-369/staging-a-settings-save-writes-exactly-one-audit-row

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

DESIGNAIT-270 · AIT-207

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.

INPUTSscenario_idnodebeat_idpersona_idquestion_textSOURCES & BOUNDSretrieved[] · ref · relevance · excerptprompt_version · live pathtoken budget · live pathcircuit breaker · live pathfences · live pathOUTPUTStextconfidencealternatives[] · text · reason_not_chosenprovenance · source · model · generated_atprovenance · human_reviewed · fallback_reason↳ CITATIONS REPLACED WITH WHAT WAS RETRIEVED · LIVE PATHRECORDEDLiveAIInvocationSCHEMA · BUILTWRITE · ON · MENTATAuditLogSCHEMA · BUILTWRITE · ONActivityEventSCHEMA · BUILTWRITE · NONEDESIGNEDADJUDICATION RECORDstate @ sealed position · rules revisioninputs + seed · result · method · rationaleLEDGERappend-only · turn sealreplayDESIGNED · ROADMAP · AIT-270 · AIT-207SOLID · BUILTDASHED · DESIGNED
  • 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
Illustrative entry. One real catalog answer, two schema examples. Nothing captured from a customer session.
A · Glass Box trace, one real entry from the response catalog, rendered from the same source the platform serves
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)
B · LiveAIInvocation, SCHEMA EXAMPLE. The row a live answer to the question above would write; placeholder values, not a captured row.
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.

C · AuditLog, SCHEMA EXAMPLE. The shape of the row an organization save writes; placeholder values, not a captured row.
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.

What this gives an evaluator
  • 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 gap listVERIFIED2026-09-24
  1. 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
  2. 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
  3. 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
  4. 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
TRACE6 FIELDSRECORDS3 SCHEMASPROMPTSVERSIONED CONTENTCITATIONSRETRIEVER-OWNED · LIVE PATHRETRIEVALBM25 · MEASUREDREVISIONSPINNED IN STAGINGLEDGERROADMAPGAPSDATED 2026-09-24

Transparent interfaces, not a black box: the trace is on the screen, the schema is on request, and the gap list is dated.

[EVAL-03]SCENARIO SETUP / COMPOSITION PIPELINE

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 STAGINGGATED, NOT YET EXERCISED, OR OPERATOR-ONLYDESIGNTEXT PDFDOCX · PPTXSCAN · IMAGEAUDIO01IngestTEXT PDF · OFFICE — VERIFIED ON STAGINGOCR · AUDIO — BUILT, NOT YET EXERCISED02ValidateCHECKS BUILTCONFIRM IS A CLI03ComposeDESIGNAIT-253 · AIT-293–29804RunGATED · ingestor.session-scenarioANY AUTHORED SCENARIO THE SESSION CHOOSESS3 KEY → LAMBDA → DYNAMODB ROWingestor-uploads/<identity>/<scenario>/<kind>/<file>CONVENTIONALAITREIDES TODAYCOLLECT BY HANDREAD & RE-KEYRULES AS PROSEANSWER FROM MEMORYNOTHING CITABLEMOVED FROM A PERSON TO THE PIPELINEDROP THE FILEEXTRACT · CHUNK · HASH~1 S · TEN-LINE TEXT PDF · STAGINGREVISION · REVIEW STATUSSTAGINGCITED ANSWER IN THE ROOMCOMPOSE THE SCENARIODESIGN · AIT-253 · AIT-293–298BLOCK WIDTH IS NOT TIME. THE ONLY TIMED STEP IS MARKED.
  • 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.

01

Ingest

BUILTAIT-203/uploaded-document-becomes-a-citation
CONSUMES

A 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.

PRODUCES

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.

CHECK

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.

02

Validate

GATEDingestor.document-revisions
CONSUMES

The uploaded object and its storage key.

PRODUCES

A routed extraction or a refusal, and — on staging — a revision record for the document.

CHECK

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).

03

Compose

DESIGNAIT-253 · AIT-293 · AIT-294 · AIT-295 · AIT-296 · AIT-297 · AIT-298
CONSUMES

Today: a structured YAML file written by hand — situation, forces, beats, injects with their citations, rules, victory conditions.

PRODUCES

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.

CHECK

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.

04

Run

GATEDingestor.session-scenario
CONSUMES

An authored scenario and its corpus — the authored passages plus everything ingested under it.

PRODUCES

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.

CHECK

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.

ONE REAL RUN · STAGING · 2026-09-09PASSAGES40 · SNAPSHOT 2026-09-09LINEAGES2 · 2 CONFIRMED · 0 PENDING REVIEW

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).
AUTHORED71 CHUNKS · 15 DOCS · 3 SCENARIOSINGESTED40 CHUNKS · 2 DOCS · STAGING SNAPSHOT 2026-09-09OCR PAGE CAP200 PAGES PER DOCUMENTINGEST~1 S · TEN-LINE TEXT PDF · EXTRACT FUNCTION · STAGING 2026-08-13ROUTESPDF · DOCX · PPTX — VERIFIED / OCR · AUDIO — NOT YET EXERCISEDCHUNK IDSHA-256 CONTENT HASHREVISIONSAPPEND-ONLY · ONE IN FORCE AT ANY INSTANT · STAGINGREVIEWCONFIRMED OR PENDING · PENDING IS MARKED IN THE ANSWER · STAGINGCOMPOSEDESIGN · AIT-253 · AIT-293–298SETUP TIMENOT YET MEASUREDLIVE MODELOFF EVERYWHERE · ADR-0007

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.

[1:10]OUTRO / EXECUTE DIRECTIVE

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.