Architecture Review · v2 · Engineering / CTO / CISO Briefing

Tropo L1 — Architecture Review

System version: Tropo-OS v1.84.1
Date: 2026-07-10
Prepared by: Argus (Chief Architect agent, gen A129), with Mike Maziarz
Scope: The L1 (local, file-based) tier, as proven in the Argo development Studio

1. What Tropo L1 is — and the design theses behind it

One Studio = one folder. An installation of Tropo is called a Studio — a single directory tree of markdown, JSONL, and a small library of Python scripts. The Studio reviewed here (argo-os/) is the development Studio where Tropo itself is built. Inside every Studio sits a Vault — the protected, governed content store where every typed artifact lives.

Five theses drive every design decision:

Thesis 1 — Markdown is the protocol. Governance, schemas, procedures, memory, and messages are all expressed in language a reasoning engine reads and follows. There is no permissions API and no database constraint at the base layer; the governance is the language. This is what makes the system harness-portable: it has run under multiple commercial AI products and multiple model vendors without modification, because the only interface contract is "can read files, can follow instructions."

Thesis 2 — Agent-first, human-also. Agents are the primary operators; humans are the directors and verifiers. The base layer is shaped for how agents read and work (flat stores, UID addressing, typed frontmatter). A deliberate human layer sits on top: every governed file renders a navigation block (path, parent, children, siblings, cited-by); dashboards and a rendered navigation tree give the human a visual surface. The rendered surface is a deliverable, by doctrine — if the human is staring at raw substrate they cannot read, the surface has not shipped.

Thesis 3 — Local-first, minimal infrastructure. No server, no database, no runtime service. Everything that looks like infrastructure (indexes, a SQLite query layer, dashboards) is derived from the files and rebuildable from them at any time. The deployment story is "a folder," and the disaster-recovery story is "the folder, plus one rebuild command." (v1 of this review claimed "no network calls made by the substrate itself." That is no longer strictly true — release upload, update discovery, federation transport, and an optional API-cost metering gateway all touch the network. §14 enumerates every network-touching component; the substrate's day-to-day operation remains fully offline.)

Thesis 4 — Gradual structure on a language base (ADR-044). Keep the free-form markdown playground; add structure per-type and per-field, incrementally, enforced through agent-native mechanisms (tools, validation gates, grooming agents) — never storage-layer rigidity. Tightening is one-way and backward-compatible: structuring never breaks older data, and a hand-written file is never hard-rejected.

Thesis 5 — Verification is the moat. As execution cost falls toward zero, the binding constraint becomes human verification bandwidth. Tropo is built so that a domain expert can verify whether agents operated within constraints she defined — and so that the verification effort scales with the quality of the constraints, not the volume of agent output.

The posture around the theses (new since v1): the OS is a public artifact. Every release is built by a positive-filter extraction (only extraction_scope: ship entries leave the Studio — 495 of 4,239 records today), so the public repository carries the operating system and none of the Studio's private working content. "Build as if a stranger reads it today" is now literal.

Tropo L1 — Studio System Map Tropo-OS v1.84.1 · 2026-07-10 One Studio = one folder of markdown. No server, no database; day-to-day operation fully offline. The Argo Studio (argo-os/) shown. LAYER 1 — KERNEL · .tropo/ (bootstrap floor since ADR-045 — the cold-read set an agent needs before the index exists) Boot Configuration boot-config.md — Tier-1 boot floor Studio Tier-2 boot extension activation playbook pointer Thin pointers, read cold. Self-Healing + Concierge SELF-HEALING.md — P0, signed concierge/activate.md — the greet-first session entry point No index required to boot. Generated Catalogs Toolbelt — ~15 core boot tools 3 capability catalogs (tools / skills / session agents), all regenerated from the index Orientation Surfaces orientation.md — harness map HUMAN-NAVIGATION.md Rendered views for humans; rebuilt, never hand-authored Moved to vault/ (ADR-045) capsules (64) · playbooks · skills · tools/scripts now live at vault/<type>/ — indexed and governed (One Home, v1.76–77) LAYER 2 — PRIMITIVES · the structural vocabulary every Studio uses The Vault (graph knowledge base) vault/files/<uid>.md flat store + per-type One-Home dirs (capsules, tools, skills…) 4,239 indexed records · 3,740 core files 18,168 typed edges across 4,122 nodes Derived: JSONL index, graph index, SQLite + FTS5 — rebuilt, never authoritative Event Log (coordination substrate) vault/events/00-events.jsonl — append-only, CloudEvents v1.0, tool-mediated writes only 6,103 events as of 2026-07-10 Delivery contract: delivered → read → answered, per-reader receipt ledgers Human views = rendered projections Callable Surfaces (5 classes) Tools — 61 Python CLIs (56 registered) Skills — 25 shipped + 2 Studio-local Session agents — 16 ephemeral classes Actions — 10 · Loops — 6 (with brakes: spend caps, kills, consent gates) Discovery: Toolbelt + 3 catalogs Memory v3 + Continuity agent-memory.md — one curated boot read agent-memories.jsonl — append-only episodic log, never cleared Bounded folds: ≤15 pins / 32KB (ERROR) Studio-tier shared memory + doctrine OP-14: no harness-private memory writes LAYER 3 — APPS · what the crew builds and operates on top Tropo Work Tasks · projects · decisions (53 ADRs) · design briefs · releases · notes · collections. Boards + meta_status rollups (To Do / In Progress / Done) — computed. Pipelines + Loops Declarative DAGs + typed pipeline-runs; dev → doc → test coupled at the gate. 98 OS release records, 96 versions since 2026-04. 6 loops: autonomy with brakes. The Crew (agents/) 8 active agents + human principal. Identity = soul + memory + vault + crew + model sleeve. Architect at gen A129; boots measured at 1.4–4.5 minutes. Human Surfaces Rendered navigation tree · boards · nav-blocks in every governed file · crew brief — all projections of the log. Import/export: .docx/.md/.pptx + receipts THE 9 SUBSYSTEMS — each owns canonical state for its domain; every governed primitive declares its owning hub in frontmatter 1 · GovernanceADRs, validators, operating agreement 2 · Renderingbuild pipeline, extraction, render scripts 3 · Work (killer app)task/project/decision/release primitives 4 · Agentscrew, souls, sa.*, identity 5 · Playbooksgoverned procedures 6 · Librarymanifesto, handbook, content packs 7 · DocumentationKB articles, L1 entry, release notes 8 · Linkscheduling, persistent-agent substrate 9 · Test Harnessvalidator + ship-test-plan + cold-boot walk + agentic test composition Since ADR-045 the kernel is a bootstrap floor; everything governed lives in the vault. Layer 2 is the vocabulary, Layer 3 is the work — the whole system is plain files: readable, diffable, auditable.
01-system-map.svg — standalone copy in svg/ for slides.

2. The system map — three layers, nine subsystems

The Studio decomposes into three layers:

Cutting across the layers, work is organized into nine subsystems — unchanged in name and count since v1: Governance, Rendering, Work, Agents, Playbooks, Library, Documentation, Link (scheduling/persistence), and Test Harness. Each has a hub — a typed project entry that owns the canonical state for its domain — and every governed primitive declares its owning hub in frontmatter, which makes "what does the governance subsystem currently contain?" a query rather than an archaeology project. A per-release touch-record registry (new since v1) additionally logs which subsystems each release touched.

Diagram: svg/01-system-map.svg (shown in an earlier section).

3. The typed substrate — capsules, the Vault, and the graph

3.1 Capsules: schema as governed markdown

Every artifact Tropo tracks is a typed file. Each type has a definition at vault/capsules/tropo-<name>.capsule.md — called a capsule — declaring required fields, lifecycle state machines, enumerated values, governance rules, and validation checks for that type. The capsule is the contract; the file is what obeys it; the validator enforces it. 64 capsule definitions are on disk today (v1: ~60), with 16 history companions preserving amendment lineage.

All types descend from a root core type (uid, type, status, state, owner). The foundational set — task, decision, project, document, collection, note, playbook, pipeline, pipeline-run, board — is extended by domain capsules that each earned their abstraction: release and release-plan, design-brief and dev/doc/test-spec, activation (agent lineage), events (the message envelope contract), memory, agent and session-agent, tool, subsystem-hub, the import/export family — and, new in this window, loop and loop-run (governed autonomy, §8), vault and vault-entity (federation, §13). One honest correction to v1: it reported the how-to type retired for zero instances. That type is today the live schema for the skills library (27 instances, §9) — retired honestly when unused, revived when the abstraction was finally earned.

Three contract features matter for a technical audience:

Schema evolution is a gated act: a new field or enum value added through a deliberate, principal-signed capsule amendment is evolution; the same value silently written by an agent is drift, and the gate is what tells them apart.

The Capsule Type System — Schema as Governed Markdown The capsule is the contract; the file obeys it; the validator enforces it. 64 capsule definitions at vault/capsules/tropo-<name>.capsule.md (One Home, ADR-045). Type inheritance — every type descends from core core.capsule uid · type · status · state · owner task work + lifecycle decision ADRs, binding project container + board document specs, guides pipeline DAG template release what shipped design-brief informs, never locks activation agent lineage row events envelope contract memory bounded folds NEW SINCE v1 — governed autonomy (v1.71) · federation (ADR-051) · one honest revival loop recurring autonomy loop-run one loop execution vault node manifest vault-entity vault as principal how-to skills schema (27) …plus note, collection, playbook, pipeline-run, board, charter, agent, session-agent, tool, subsystem-hub, release-plan, dev/doc/test-spec, entity, registry — every type extends core directly (flat); 16 history companions preserve amendment lineage. What a capsule declares (the contract) # tropo-task.capsule.md (excerpt, illustrative) required_fields: [uid, title, owner, status] enforced_enums: status: {canon: [backlog, active, review, done], aliases: {complete: done}} governance_rules: approver != executor on approval_required tasks (Rule 14) validation_checks: enforced at every rebuild Closed canon + open aliases (SKOS-style) Agents write naturally ("complete"); the substrate normalizes to one truth ("done"). Machine-enforced fleet-wide since v1.72 "One Vocabulary"; drift = ERROR. Per-type strictness dial task, decision, release, activation, capsule enforce hard; the free-form long tail stays loose. Two-tier naming (ADR-048) tropo-<name> = shipped OS namespace, readable at a glance. UID = immutable address; renames never break refs. Schema evolution is a gated act Principal-signed capsule amendment = evolution. The same value silently written by an agent = drift. The gate is the line. Contract → instance → enforcement Capsule (the contract) vault/capsules/tropo-task.capsule.md Locked; amendments are governed events Instance (the file that obeys it) vault/files/a3f2b918.md (type: task) Flat store; one row in the whole-Studio index Validator (the gate) 94 check functions, ~90 per run (v1: ~58) Reads enums straight from capsules; WARN→ERROR ratchet with named grandfather exemptions Gradual structure on a language base: add structure per type, per field, tighten-only — 64 contracts, each abstraction earned one at a time, retired honestly, revived when used (how-to).
02-capsule-type-system.svg — standalone copy in svg/ for slides.

3.2 The Vault: flat files, graph semantics, derived surfaces

Every governed artifact lives in the Vault, named by an 8-hex UID — the bulk at vault/files/ (3,740 files), the rest in per-type One-Home directories (vault/capsules/, vault/tools/, vault/skills/, vault/playbooks/, vault/actions/, vault/session-agents/, vault/agents/). The index holds the whole Studio: 4,239 governed records as of 2026-07-10 (v1: 3,400+). There is no folder hierarchy to rot, and references cite UIDs rather than paths.

Organization is graph membership, expressed in frontmatter: member_of (home project(s), multi-parent allowed), governed_by, refs, subsystem_hub, superseded_by. The graph now carries 18,168 directed typed edges across 4,122 connected nodes (v1: ~8,500 across ~2,800 — the graph more than doubled in 26 days, driven partly by a new mentions edge class extracted from bodies: 6,561 edges). Distribution: member_of 3,981 · refs 2,969 · governed_by 1,677 · subsystem_hub 1,522 · mentions 6,561 · others ~1,450.

Everything else is derived and rebuildable: the authoritative JSONL index (one row per artifact), per-type index shards, an O(1) graph-traversal index, a SQLite query runtime (entries + edges + FTS5 full-text over 4,239 rows), the rendered human navigation tree, dashboards, and the crew brief. A rebuild pass regenerates all of it from the files; rebuild --only <uid> freshens a single entry. Because the files are the truth, index corruption is an inconvenience, not an incident. New since v1, the derived layer also carries decay signals (v1.82 "The Gardener"): a flag-only grooming pass stamps staleness/health markers on the index — adversarially proven unable to modify source files (two independent red-team agents with full-tree SHA256 baselines could not construct a write path).

Two structural truth rules landed in this window:

The write path, end to end (the engineer's view): an agent writes a typed markdown file → the index rebuild derives every surface from frontmatter → the validator gates the result (WARN→ERROR ratchets) → grooming agents normalize what is provably mechanical and flag what needs judgment → the rendered human surfaces regenerate. Hand-editing a file always works and is caught downstream — tools are the paved road, never a mandatory gate.

The Vault — Flat Files, Graph Semantics, Derived Surfaces 4,239 governed records · 18,168 typed edges across 4,122 connected nodes (2026-07-10). Files are authoritative; every index and view is derived and rebuildable. Authoritative store — flat by design vault/files/ — 3,740 UID-named files bfcd1a5b.md type: decision (ADR-044) d409c333.md type: activation (Argus A106) eca73d77.md type: document (L1 entry) …one UID-named file per governed record… One-Home directories — one per type: capsules/ 64 tools/ 61 skills/ 25 playbooks/ 24 actions/ 10 session-agents/ · agents/ No nested folders to rot; renames can never break references — everything cites by UID, not path. The whole-studio index carries 4,239 governed records. Graph semantics in frontmatter member_of: [6dff0111] # home project(s) governed_by: 8dd772a0 # governance edge refs: [476fef2e, …] # citations subsystem_hub: [8dd772a0] # owning hub superseded_by: … # honest history 18,168 directed edges · 4,122 nodes mentions 6,561 member_of 3,981 refs 2,969 governed_by 1,677 subsystem_hub 1,522 other classes ~1,300 superseded_by 157 mentions is body-extracted (new since v1); the others are declared in frontmatter. Derived surfaces — rebuilt, never truth 00-index.jsonl + per-type shards one JSONL row per record; sharded by type SQLite query runtime entries · edges · FTS5 full-text over 4,239 rows 00-graph-index.json O(1) edge traversal by UID nav tree + boards + crew brief rendered human navigation and dashboards decay signals — Gardener (v1.82) flag-only grooming; proven unable to write sources tropo-rebuild-vault.py regenerates everything; rebuild --only <uid> freshens one entry. Indexes are self-healing — corruption is recoverable from the files. The read/write cycle — files first, derived views second AGENTS + HUMANS write typed markdown (tool-mediated for structured ops) VAULT FILES vault/files/<uid>.md + One-Home dirs the single source of truth REBUILD PASS index · shards · graph · SQLite · nav boards · decay signals · validator VIEWS query + navigate humans and agents read derived views; truth round-trips through the files Lifecycle honesty — nothing vanishes silently Forward pointers (ADR-047) Every archived or superseded record carries a forward-pointer to its successor — enforced as a validator ERROR, not advisory. Soft delete only tropo-recycle.py moves entries to a dated recycle folder with a logged reason; the disposition tool refuses referenced nodes. Takeaway: flat UID-named files are the only truth; 18,168 typed edges organize them; every index is a disposable projection — and retired records must point forward.
03-vault-graph.svg — standalone copy in svg/ for slides.
The Write Path — Life of a Governed Artifact Five stages from an agent's write to a rendered human surface. The file is the only truth; everything downstream is derived, gated, or flagged — never authored. 1 · AGENT WRITES a typed markdown file uid: 8f3a2c1d type: task status: active member_of: [f4a7d2ce] governed_by: 8dd772a0 The capsule is the contract: vault/capsules/*.capsule.md required fields, enum values, lifecycle states, checks. 64 capsule types; a per-type strictness dial spends structure where it pays. 2 · INDEX DERIVES one rebuild, every surface 00-index.jsonl · row/artifact per-type index shards graph edges · 18,168 typed SQLite runtime (+ FTS5) rebuild --only <uid> freshens one entry; a full pass regenerates every surface. Files are the only truth — index corruption is an inconvenience, not an incident. 3 · VALIDATOR GATES 94 checks · WARN→ERROR New checks land at WARN and ratchet to ERROR once the substrate is clean. UID collisions fail loud — ADR-050 routes all IDs through one collision-checked minter. red gate blocks the ship History degrades to WARN; live records stay ERROR — gates bind live work; history is a lint. 4 · GROOMERS NORMALIZE fix the provable, flag the rest Fix only the provable: mechanical fixes applied in place, judgment calls flagged as tracked work. Nothing is flagged-and-forgotten. The Gardener (v1.82) stamps decay flags on the derived index — flag-only. Two red-team agents with SHA256 baselines could not construct a write path to source files. 5 · HUMAN SURFACES rendered projections nav-block on every entry 00-tropo-nav/ tree boards + dashboards crew brief Filesystem affordances on the graph: path, parent, children, siblings, cited-by. Projections, never authored — regenerated on every rebuild, never trusted as truth. hand-edited files enter the same path — caught downstream, never blocked upstream The escape valves — the path is paved, not gated Hand-edit always works The cold-boot invariant is sacrosanct: the gate may WARN on a hand-written file but never hard-rejects it. A stranger with a zip of the Studio can always boot it. Drift is caught downstream, not blocked upstream. Deletion is always soft The canonical gesture moves entries to a dated recycle folder with a logged reason; raw rm of governed substrate is forbidden by signed doctrine. Disposition refuses to recycle nodes with inbound references. Every archive points forward (ADR-047) Archived or superseded items must carry a resolvable forward-pointer to their current truth — validator- enforced at ERROR since v1.75. Motivation: 38% of the index archived, ~157 entries carried lying flags. Tools are the paved road, never a mandatory gate — a hand-edited file rides the same derive → gate → groom → render path and is caught downstream.
10-write-path.svg — standalone copy in svg/ for slides.

4. Agent lifecycle — boot, session, retirement, succession

This is the subsystem most foreign to a traditional architecture review, and the one Tropo considers its load-bearing differentiator. The premise: an agent is not the model. An agent is a composite — a soul document (character and behavioral rules), accumulated memory, the Vault, the crew context, and whatever model "sleeve" is running it today. Sessions end; the composite persists in files.

4.1 Boot: three tiers, six gated groups — now with a governed cost budget

Activation runs through a three-tier configuration chain (OS floor → Studio extension → agent extension) and six groups in strict order — boot configuration, identity verification, context loading, operational grounding, self-diagnostic, startup signal — each writing a milestone event to a per-run log before the next may begin. The gates are structural: a group whose predecessor milestone is absent from disk stops.

Two hard gates protect lineage integrity, validated twice (at boot, and at write-time by the tool that creates the activation record):

New since v1 — boot cost became a governed budget, not a cultural norm. The trigger was measured: one boot ran 30 minutes and 172K tokens against a 7–8 minute bar. The v1.79 Boot Contract responded structurally:

A deliberate cultural gate rides the boot as well: the self-diagnostic. Every agent, at every boot, is required to critique the system it just loaded — is anything outdated, counterproductive, or missing? — and to verify its predecessor's handoff claims against current substrate before trusting them. The inherited system is treated as "the best the predecessor had time to build," never as correct by default.

4.2 Retirement and succession

Retirement is a governed fold, not an exit: the retiring generation writes a forward-looking living transfer at peak context, a backward-looking honest reflection, has its memory folded (with a structural bound — see §5), flips its status surface, and closes its activation registry entry. The successor boots through the same gates and verifies the transfer's carry-forward claims against live substrate, because handoffs are snapshots and snapshots drift.

Worked proof at scale: the Chief Architect role is at generation A129 (this author); the Chief of Staff at V64; the engineering lead at T28; the whole crew turns over continuously and open work survives every handoff — including, in this window, a release that was mid-flight across three generations of two different agents and shipped correctly.

Agent Lifecycle — Boot, Session, Retirement, Succession An agent is the stack, not the model: soul + memory + vault + crew + model sleeve. Boot is gated and budgeted; generations die, the agent persists in files. Three-tier boot configuration (ADR-032) Tier 1 — OS floor .tropo/boot-config.md — universal gates + groups Tier 2 — Studio extension .tropo-studio/ — Studio-wide reads, event drain Tier 3 — Agent extension per-agent: soul path, board filter, skip declarations Activation playbook — six gated groups each group writes a milestone event to a per-run log; a group whose predecessor milestone is absent from disk stops 0 Boot config resolve root, read 3 tiers, plan 1 Identity HARD GATES ADR-016 / ADR-028 2 Context soul FIRST, then memory + transfer 3 Grounding crew brief, status card, scanners 4 Diagnostic critique the boot, verify transfer fresh 5 Signal startup signal to the principal; begin ADR-016: predecessor still ACTIVE → HALT. Two live generations of one agent is a governance violation. ADR-028: generation ≠ predecessor + 1 → HALT. Lineage integrity requires human resolution. Enforced twice: at boot, and again at write-time by the tool that creates the activation record. Identity files resolve by UID from the activation thin-pointer; the activation registry is the lineage of record. Boot cost — a governed budget, not a cultural norm (v1.79 Boot Contract) new since v1 Fast-path (~3–4K tokens) replaces the ~15K canonical activation-playbook read for established agents Doctrine digest replaces ~16K of verbatim doctrine re-reads; adversarially gauntleted — v1 verdict GAPS-FOUND, 10 rules restored before cutover Drift gate — fails closed both artifacts declare SHA-256 of every source + themselves; check_boot_derivation_fresh recomputes all of them on every run Boot-budget tally boot events carry ISO-8601 timestamps; over 10 min or never completed → WARN measured boots: 1.4–4.5 min Trigger incident: one boot ran 30 minutes / 172K tokens against a 7–8 minute bar — the v1.79 Boot Contract made cost structural. A compacted read can never silently drift. Boot duties ride activation — 5.1.6 update discovery: first agent of day fetches the manifest (offline-safe) · 5.1.7 maintenance-loop dispatch: owner consent, metered cost The generational loop — institutional knowledge survives through files, not model memory BOOT (A·N) reads soul letter, curated memory, predecessor's transfer — arrives already itself SESSION governed work in the vault; events emitted; memories appended to episodic log; principal directs at the gates RETIRE living transfer (FINAL), reflection, memory fold by curator, status → RETIRED, activation entry closed SUCCESSOR (A·N+1) boots through the same gates; verifies transfer claims against current substrate before trusting continuity artifacts: soul letter (stable) · curated memory + append-only episodic log · living transfer · reflection · activation registry row Worked proof at scale: Chief Architect A129 · Chief of Staff V64 · engineering lead T28 · strategist G88 — the crew turns over continuously; open work survives every handoff. This window: a release mid-flight across three generations of two agents shipped correctly. Sleeve changes are recorded; the agent is the composite, the model a component. Boot is gated, budgeted, and self-diagnosing — compacted reads cannot silently drift from source. Retirement is a governed fold, not an exit; the handoff is the product.
04-agent-lifecycle.svg — standalone copy in svg/ for slides.

5. Memory architecture (v3.0)

Memory is treated as load-bearing infrastructure, designed to the same standard as the work substrate. Version 3.0 is now fully deployed across the crew (v1 said "currently cascading" — the cascade closed 2026-06-10). The shape:

New since v1 — the memory bound became structural. The measured failure: eight consecutive retirements did in-line folds bypassing the curator, and one agent's Top-of-Mind grew to 33 blocks (~48K tokens) — one of the two measured root causes of the 30-minute boot (the other: redundant reads the fast-path itself carried, cut in the same cycle). The fix is a validator gate (ERROR above 15 Top-of-Mind entries or 32KB surface size) plus a retirement rule making curator dispatch mandatory on over-bound folds. It has already fired in production twice, correctly, folding 60→15 and 26→14 entries. The design lesson generalizes: don't trust the discipline; let the substrate catch the lapse.

Memory sovereignty (Operating Principle 14, new). Agents running inside commercial harnesses have access to harness-private memory stores. A real incident (an agent wrote six substrate-class pins to a harness store — invisible to successors, non-portable) produced a binding principle: durable memory writes go to Tropo memory paths, never harness-private storage. Portability of the whole agent composite is the promise; memory in a vendor silo breaks it.

A Studio-tier shared memory carries crew-wide doctrine pins with the same shape; every agent inherits it at boot.

Memory Architecture v3.0 — Single Surface + Append-Only Episodic Log Cascade complete crew-wide 2026-06-10. One curated read at boot; one append-only write during work; governed, bounded folds between. Nothing deleted. Per-agent memory capsule · agents/<name>/.tropo-capsule/memory/ agent-memory.md — THE boot read § Top-of-Mind priority-ordered pins · bound ≤15 entries § Living Transfer from Predecessor the handoff, aging policy applied § History (pointer) frozen per-generation snapshots § Memories (pointer) points at the episodic log — never inlined agent-memories.jsonl — episodic log append-only — NEVER cleared. Mid-session pins, lessons, decisions — one JSON line each. Folds advance a boundary marker; entries behind it stay on disk, never removed. Full arc reconstructable for reconsolidation. history/ — frozen pre-fold snapshots every pre-fold surface frozen with a SHA-256-verified snapshot — rollback + audit Boot reads ONE file. Sessions write ONE log. The curated surface routes and surfaces; it never restates substance — canonical artifacts hold the content. Studio-tier shared memory mirrors this shape for crew-wide doctrine pins; every agent inherits it at boot. sa.memory-curator — the governed fold Ephemeral specialist agent dispatched with a trigger: trigger: retire (steady state) folds the session's episodic entries into the surface; advances boundary; snapshots history trigger: boot / catch_up (insurance) staleness gate: ≥3 generations OR ≥50 unfolded entries since last fold → catch-up fold at boot trigger: migrate (one-time) non-destructive v2→v3 conversion; old files kept as rollback — verified crew-wide 2026-06-10 The booting agent ratifies every curator recommendation (ACCEPT / REJECT / DEFER) before it applies. Since v1.79, an over-bound retirement fold REQUIRES curator dispatch — no in-line folds. BOUND GATE (v1.79) — the memory bound is structural, not disciplinary Measured failure: 8 consecutive in-line folds bypassed the curator; one Top-of-Mind grew to 33 blocks (~48K tokens) → the 30-minute boot. Validator ERROR §Top-of-Mind >15 entries OR surface >32KB Mandatory curator dispatch over-bound retirement folds cannot fold in-line Fired twice in production — correctly folded 60→15 and 26→14 entries OP-14 — Memory Sovereignty (new operating principle) Substrate-class pins → Tropo memory paths agents/<slug>/.tropo-capsule/memory/ · .tropo-studio/memory/ · vault/files/ NEVER harness-private stores — portability of the whole composite incident: 6 substrate pins in a harness store — invisible to successors, non-portable The memory loop across a generation BOOT read agent-memory.md — bound-checked: ≤15 / ≤32KB WORK append pins to the jsonl — Tropo paths only (OP-14) RETIRE → FOLD curator folds; boundary advances; SHA-256 snapshot SUCCESSOR BOOTS one clean read; full arc still on disk repeat 129 generations on one lineage Takeaway: don't trust the discipline — let the substrate catch the lapse. The log is never cleared, folds are bounded and snapshotted, and memory never leaves Tropo-owned paths.
05-memory-architecture.svg — standalone copy in svg/ for slides.

6. The event system — coordination as an append-only audit trail

All coordination flows through one canonical log: vault/events/00-events.jsonl — append-only, tool-mediated writes only, one CloudEvents v1.0 envelope per event, correlation IDs for reply chains. 6,103 events as of the morning of 2026-07-10 (v1: 3,900+; the log grows by hundreds per week under real workload).

Four properties matter:

1. Projections, not authored surfaces. Twenty-two hand-authored channel files were retired outright in the messaging-substrate consolidation; agents read the log directly, and surviving human-facing surfaces are rendered projections of it. One source of truth, many views.

2. Identity-guarded writes. Every actor — human or agent — has a registered UID; each agent carries two on two axes (a party UID for messaging, an agent-root UID for lineage). The emission tool rejects wrong-axis traffic in both directions, and superseded identities persist as resolvable tombstones but are rejected as signers.

3. A three-state delivery contract (new since v1): delivered → read → answered. Delivery is the event in the log; read is recorded in a per-reader receipt ledger (vault/events/receipts/<party>.jsonl) written by the drain tool; answered requires a reply whose correlation ID matches the original event. A reply_required flag creates a visible obligation, and the answered-state is computed from correlations — not from anyone's claim. The operating bar, set by the principal after lived failure: a message addressed to an agent cannot be missed, and a completion cannot be invisible — by construction.

4. Tool telemetry in the same record. Every substrate-writing tool (rebuilds, recycles, activation writes, pipeline operations, validator runs, releases) auto-emits into the same log, so "what happened, in order" is one query over one file.

The Event System — One Log, Guarded Writes, a Three-State Delivery Contract All coordination — agent↔agent, agent↔human, tool telemetry — flows through one CloudEvents-enveloped JSONL log. Delivered → read → answered; views are projections. Producers Agents + humans directed messages, replies, acks, crew broadcasts Substrate-write tools (auto-emit) rebuilds, recycles, activation writes, pipeline ops, validator runs, releases Lifecycle events cycle opened/closed, ship-gate progress, fleet-ops dispatches Every actor has a registered UID — including the human principal. emit-event (the gate) GUARD: source must be a registered party UID GUARD: directed messages must be ADDRESSED to a party UID (agent-root / lineage UIDs rejected on both axes — wrong-axis messaging is structurally impossible to send) Strict mode default; schema-validated envelope The canonical log vault/events/00-events.jsonl append-only · tool-mediated writes only CloudEvents v1.0 envelope per event correlation IDs for reply chains reply_required flags surface obligations 6,103 events as of 2026-07-10 (v1: 3,900+) — who said what, when, in reply to what; grows hundreds/week under load + derived SQLite view for query Consumers query-events per-party cursors; boot drains; drain writes read-receipts Rendered projections user-facing channels, crew brief, status surfaces Wakeup triggers reply_required drives the continuous-listen cadence Recovery primitive rebuilds the SQLite view from the log anytime. The three-state delivery contract (new since v1) — every state is derived from the log, none is claimed 1 · DELIVERED the event exists in the canonical log vault/events/00-events.jsonl appended = delivered — no separate flag 2 · READ receipt in the per-reader ledger vault/events/receipts/<party>.jsonl written by the drain tool on read 3 · ANSWERED a reply whose correlation ID matches the original event exists in the log computed from correlations — never claimed A reply_required flag creates a visible obligation that stays open until a correlated answer lands — the answered-state is derived by query, never asserted by an agent. The operating bar, set by the principal after lived failure: a message addressed to an agent cannot be missed, and a completion cannot be invisible — by construction. Identity-guarded writes (hardened iteratively, incident-driven) • Two UIDs per agent, two axes: party UID (messaging) vs agent-root (lineage). • Wrong-axis traffic rejected at emission — on both send and address axes. • Superseded identities persist as resolvable tombstones; rejected as signers. • Known limitation: no cryptographic log integrity yet — event signing / hash-chaining is the named next frontier (tracked on the roadmap). Projections, not authored surfaces • Sixteen hand-authored coordination channels retired over a six-release arc. • Agents read the log directly; surviving human surfaces are rendered views. • Tool telemetry lands in the same log — "what happened, in order" is one query over one file. • One source of truth, many views — the same doctrine as the vault index. One append-only CloudEvents log — 6,103 events — with identity-guarded emission and a delivery contract (delivered → read → answered) whose every state is derived from the log, never claimed.
06-event-system.svg — standalone copy in svg/ for slides.

7. Tropo Work — the work-management application

Work is the killer-app subsystem: agentic teams executing real work with audit trails, verification, and cross-generational continuity.

The primitives are the ones a Jira-literate team expects, expressed as typed files: tasks, projects, decisions (57 decision records; 53 numbered ADRs through ADR-052 — each a binding architectural commitment), design briefs, release plans and releases, notes, and collections. Boards and dashboards are derived views over (membership × status × target); surfaces never become containers.

Design points worth an engineer's attention:

The import → work → export loop for real-world documents matured into a hardened boundary (v1.81 "Work Crosses the Boundary"): a .docx (now also .md / .pptx) imports to a governed vault entry with a markdown working copy; agents edit in markdown while the source binary stays untouched; export rebuilds the deliverable with a locally-auditable round-trip receipt disclosing every content drop. The receipt itself was the hard part: the first build's receipt hashed the working copy against itself — a "receipt that cannot lie" failure caught by an 18-agent adversarial battery and fixed before ship. Export is verified to run with the network fully cut. On source deletion, the vault retains the node and re-links on resurface (ADR-046) — graph memory survives filesystem churn.

8. Pipelines, playbooks — and loops: orchestration with structural gates

Pipelines are declarative workflow templates — a DAG of nodes (pipeline → stage → step), authored once and versioned. Each execution is a typed pipeline-run that pins the template version, roots its own project, and keeps its own event log. Playbooks are governed procedures in natural language; gated playbooks write milestone events, and later groups structurally cannot begin until the prior milestone exists on disk.

Loops are the third orchestration class (new, v1.71): governed recurring autonomy. A type: loop entry declares goal, trigger, cadence, runner, verifier — and brakes: spend caps, wall-clock kills, iteration hard-stops, and a consent mode (ask by default; auto only by owner ruling). Six loops exist today (daily vault health, weekly integrity audit, update discovery, git backstop, gardener decay pass, one draft dispatcher). Loop cost is stamped null-honest from real metering: an optional gateway on live API traffic records actual per-run spend from provider usage data — never estimated, and never fabricated when unmeasured. This is the "self-maintaining Studio" (v1.79): maintenance as governed, costed, consent-gated substrate rather than cron folklore.

The proof-of-pattern is the dev-pipeline — the scaffold through which Tropo ships Tropo: design brief → locked dev-spec (adversarially reviewed before lock) → build → verification → ship gates → cut. A dev cycle triggers a doc-pipeline and a test-pipeline run and cannot close until both legs reach a terminal state (the doc leg auto-passes only when no doc obligation was declared — and that branch-awareness itself was a bug fixed in this window). Each pipeline takes a typed commitment at activation — dev-spec, doc-spec, test-spec — with acceptance criteria paired to behaviors; the engine refuses to lock a spec where they mismatch.

The honest engineering story of this window: driving the v1.84.1 close-out was the first time the engine's close ceremony was exercised end-to-end — and it surfaced six real, pre-existing bugs in the pipeline runtime (a step-declaration path that silently dropped verification commands; a re-trigger gate that refused forever because it checked existence instead of status; a context-key bug that silently degenerated a test step to a no-op pass; a stale-spec resolution bug; a recompute crash; two step definitions pointing at nonexistent scripts). All six were found by checking raw run events against claims — not labels — and all six are fixed, with a regression-test hardening track open. The structural cure for the class is ADR-052: locking a dev-spec now atomically registers its pipeline activation, so the audit chain dev-spec ↔ activation ↔ build ↔ release is complete by construction rather than by discipline. §10 gives the full release-engineering picture this belongs to.

Pipelines, Playbooks + Loops — Three Orchestration Classes, One Gate Discipline Pipelines: DAG templates with typed runs · Playbooks: gated language procedures · Loops (v1.71): recurring autonomy with brakes. The dev-pipeline ships Tropo itself. 1 Pipelines — declarative DAGs pipeline (template) DAG of WorkflowNodes: pipeline → stage → step; authored once · versioned · governed pipeline-run (typed instance) pins the template version at start; roots its own project; own run folder + run.jsonl event log A run is a governed record, not a console log. 2 Playbooks — gated procedures Governed natural-language workflows an agent reads and executes: activation, retirement, cold-boot testing, apply- update, fleet-ops, onboarding. Milestone gating Gated playbooks write milestone events to the run's run.jsonl. A later group cannot begin until the prior milestone event exists on disk. The playbook is both the spec and the audit trail of its own execution. 3 Loops — recurring autonomy NEW v1.71 type: loop declares goal · trigger · cadence · runner · verifier BRAKES — every loop carries them spend caps · wall-clock kills · iteration hard-stops · consent_mode: ask (default) / auto by owner ruling only 6 live loops daily vault health · weekly integrity audit · update discovery · git backstop · gardener decay pass · draft dispatcher Cost stamped null-honest from real API metering — never estimated or fabricated. The dev-pipeline — how Tropo ships Tropo (98 OS release records · 96 distinct versions since April 2026) DESIGN BRIEF pair-design walk, captured + accepted DEV-SPEC · LOCKED adversarial review gauntlet before lock BUILD substrate authored; criteria explicit VERIFY raw run events checked vs. claims SHIP GATES docs · tests · sign-offs · cascade closed CUT version flips; cycle root archived ADR-052 — lock-time coupling Locking a dev-spec atomically registers its pipeline activation — the chain dev-spec ↔ activation ↔ build ↔ release is complete by construction, not discipline. one cycle activation triggers both cascade legs doc-pipeline run docs current with the release; auto-pass only when no doc obligation declared test-pipeline run verification evidence with every release; stub specs are a detected defect class release cannot close until both legs reach a terminal state Field report — the first end-to-end close-ceremony drive (v1.84.1) surfaced six real, pre-existing runtime bugs Dropped verification commands · a re-trigger gate that refused forever (checked existence, not status) · a test step silently degenerated to a no-op pass · stale-spec resolution · a recompute crash · step definitions pointing at nonexistent scripts. All six found by checking raw run events against claims, not labels — all six fixed; regression-test hardening track open. Three orchestration classes, one discipline: a step that did not run cannot be recorded as run — and when the bookkeeping machinery itself broke, the record names it.
07-pipelines-and-loops.svg — standalone copy in svg/ for slides.

9. Callable surfaces — five classes, one discovery layer

Five classes of callable capability, all first-class governed substrate (v1 listed three; two were missing):

The discovery layer (shipped in v1.70 itself but absent from v1 of this review): a Toolbelt — the ~15 core tools every agent loads at boot, mirroring the harness-native pattern — plus three capability catalogs (tools / skills / session agents) regenerated from the index. The doctrinal rule binding all five classes: if a capability exists, use it. Agents do not improvise operations the harness already knows how to do correctly.

A deliberate boundary unchanged from v1: tools are the paved road, never a mandatory gate. Hand-editing a file always works and is caught downstream by the validation gate and the groomers. This preserves the cold-boot floor (§11).

10. Release engineering — the authorization stack, and what broke (new section)

v1 described the pipelines; it did not describe how a release is authorized. That stack was built, stress-broken, and hardened in this window — and the honest arc is exactly what a room of engineers should inspect.

The stack as designed:

  1. Pipeline Activation Key (v1.71): the release builder and the public upload refuse to run without a runtime-minted fingerprint proving a real pipeline run occurred. Public ship additionally requires human signoff.
  2. Stranger-Walk Gate (v1.74): an always-asked cold-boot walk at cut — a fresh agent (conducted by Po, the release-test conductor role created for this) walks the release artifact as a stranger; a FAIL verdict blocks the upload. Its first live run blocked its own release until the PASS landed.
  3. Ship-gate refusals: the validator must be clean in strict mode before a build; the status flip to shipped requires the sign-off fields.

What broke, and what was done:

Cadence and scale: 14 OS releases in the 26 days since v1.70 (v1.71 → v1.84.1; v1.83 is deliberately reserved for a pending capstone). 98 Tropo-OS release records spanning 96 distinct versions since the first public release in April 2026, plus six non-OS product releases through the same pipeline. Not every release produces a standalone customer artifact — several landed as in-Studio substrate, each disclosing exactly that.

11. Governance and enforcement — the four loci

Governance is three-tier: OS-level invariants, Studio-level configuration, and per-folder contracts. On top sits the enforcement architecture made binding by ADR-044:

  1. Write-time — tools that enforce and normalize on write (messaging guards, the activation writer's hard gates, the mint chokepoint — ADR-050 routed all identifier generation through one collision-checked minter with typed kinds).
  2. Validate-time — the gate: 94 check functions (~90 executed per run) at every rebuild and as build pre-flight (v1: ~58). Checks read schemas from the capsules (never hardcode), land at WARN, and ratchet to ERROR once the substrate is clean. The ratchet pattern matured in this window: named grandfather exemptions with constant cutoffs (historical records exempt by name, going-forward violations fail) — honesty about the past without weakening the future. A red gate blocks the ship.
  3. Continuous — grooming agents: the first production groomer (the Gardener, v1.82) stamps decay signals flag-only, adversarially proven unable to write source files. (The fuller groomer fleet remains undeployed — §14.)
  4. Review — humans and agents under the signed Self-Healing primitive: every read carries a structural-defect pass; trivial defects are fixed in place, substantive ones filed as tracked work. Nothing is flagged-and-forgotten.

Judgment calls are part of the enforcement design. New rules meet old data; the system's pattern for that collision is now explicit: when the just-shipped federation grounding check fired on eight closed, archived tasks from April–May, the principal-approved resolution was a terminal-state carve-out — history degrades to WARN, live records stay ERROR, and an anti-rot regression test locks the boundary so the carve-out can never silently widen. Gates bind live work; history is a lint.

Two invariants a reviewer should test us against, unchanged:

Enforcement + Verification — Defense in Depth on a Language Base Four enforcement loci, a matured WARN→ERROR ratchet, and a verification model where "done" means independently proven. Verified at v1.84.1 (ADR-044). The four enforcement loci (each catches what the others miss) 1 · WRITE-TIME — TOOLS Structured mutations route through tools that enforce + normalize on write: emit- event guards, activation hard gates, and the mint chokepoint — ADR-050 routes ALL identifier generation through one collision-checked minter (typed kinds). The paved road — never a mandatory gate. 2 · VALIDATE-TIME — GATE 94 check functions (~90 executed per run) at every rebuild + as build pre-flight (v1: ~58). Schemas read from capsules, never hardcoded. New checks land WARN, ratchet to ERROR with named grandfathers: history exempt by name, go-forward fails. A red gate blocks the ship. 3 · CONTINUOUS — GROOMERS First production groomer: the Gardener (v1.82) stamps decay signals on the derived index — flag-only, adversarially proven write-less (two red-team agents with full-tree SHA256 baselines found no write path). Cardinal rule: never become a drift source. Fuller fleet not yet deployed. 4 · REVIEW — HUMANS + AGENTS Self-Healing primitive: every read carries a structural-defect pass — trivial defects fixed in place, substantive ones filed as tracked work; nothing flagged-and- forgotten. The principal verifies at gates — verification capacity, not agent capability, is what scales. The ratchet, matured — new rules meet old data without rewriting history Named grandfathers — the WARN→ERROR pattern New checks land WARN; the ratchet to ERROR carries named grandfather exemptions at constant cutoffs — historical records exempt by name, any going-forward violation fails. Three ratchet releases in this window. Honesty about the past without weakening the future. Dial settings inspectable at any time. Terminal-state carve-out — a worked example The just-shipped federation grounding check fired on eight closed, archived tasks from April. Ruling: history degrades to WARN, live records stay ERROR, and an anti-rot regression test locks the boundary against silent widening. Gates bind live work; history is a lint. The verification model — "done" is a verified state, not a declared one Three-instrument verification 1. Build — the author's own check 2. Independent review — adversarial skeptic in a separate context 3. Cold-boot stranger test — fresh context, artifact only Each instrument catches what the others structurally cannot. Two-sided convergence On the v1.84.1 cut, the release author independently re-ran all 69 tests (69/69) rather than transcribing the verifier's counts; the verifier had read raw run logs, not labels. Convergence of independent measurements — the strongest signal. Adversarial fleets, scaled to risk Covenant-class work gets a HEAVY fleet: a six-agent red team attacked the sovereignty publish path and found 5 real HIGH leak paths — fixed, pinned with regression plants; the re-verify fleet ran 6/6 fail-closed. Routine slices get a single independent check. Approver ≠ executor, fail-closed A verification-class step reaches "verified" only on a real verification receipt — executor attestation alone cannot promote it. Identity resolution on approval- required work fails CLOSED: a guard that can silently no-op is no guard. The cold-boot invariant (sacrosanct) The validate gate may WARN on a hand-written file but must never hard-reject it. Structure tightens without ever breaking the plain-markdown floor — a stranger with a zip of the Studio can always boot it. Locks are law Locked files are immutable without explicit principal approval; lock-breaks are logged governance events. Four loci each catch what the others miss; the ratchet advances with named grandfathers and terminal-state carve-outs; and "done" is an independently re-measured state, never a self-declared one.
08-enforcement-verification.svg — standalone copy in svg/ for slides.

12. Verification and quality — "done" means independently proven

The quality discipline, in one sentence: completion is a verified state, not a declared one.

13. Federation — the segmented vault and the sovereignty covenant (new section)

Shipped v1.84.0 (foundation) + v1.84.1 (complete, 2026-07-10). This is the largest architectural addition since the review's v1, and it went from first signed decision to shipped-and-adversarially-proven in five days (graph-model gate signed 2026-07-05 → covenant shipped 2026-07-10) — through two co-signed architect "joint gates" with the principal ruling escalated forks.

The model:

The sovereignty covenant — "no private byte crosses the wire, in either direction." The publish path is built on a git-plumbing truth: a push carries a ref and its whole history, not a file list — so naive filter-then-push leaks. The publisher instead builds a fresh commit tree of exactly the passing files (first publish is an orphan root; later publishes parent only on the prior public-only tip, so public history accumulates without ever anchoring to private history), pushes only that single ref, and re-validates the committed tree (walking every reachable commit, not just the tip) to close time-of-check/time-of-use. It enumerates the filesystem rather than git's tracked list, refuses symlinks/hardlinks/path escapes, submodules, LFS pointers, merge commits, and multi-worktree states. The pull side trusts nothing: it refuses shallow clones and re-runs every boundary check itself — the publisher's receipt is informational, not the guarantee. Enforcement is entirely client-side; a server hook is never trusted.

The proof record: red-teamed twice at spec stage (~10 HIGH leak paths folded before build; the red team also caught one over-restriction that would have destroyed shared team history). Post-build, a heavy six-attacker fleet — scanning the remote's bytes themselves — forced private bytes across on 4 of 6 angles of the first build: manifest fail-open, ancestry poisoning via a buried non-tip commit, a TOCTOU window, a tautological segment gate. All five HIGH leaks (plus six MEDIUM) were fixed; the fresh fleet re-ran 6/6 fail-closed. The proof suite is 23 tests including 8 regression plants pinning each closed leak; the full federation surface is 69 tests, independently re-run green by two agents on cut day.

Honest ceilings, disclosed in the locked spec itself: (1) revocation is forward-only — the covenant holds at push time; a file later reclassified private is already out; (2) on a platform-hosted remote (GitHub-class), that a publish occurred and ref metadata are platform-visible even though content and history hold; a self-hosted remote removes even that; (3) segment derivation is structural, not cryptographic — an attacker who can forge both content and a matching manifest defeats the second factor (tracked follow-up; the unconditional scope gate remains the load-bearing control). And the plainest one: zero live mounts exist today. The two-machine proof ran on a simulated two-machine harness (two clones + a bare remote); the first real two-box run is the named acceptance walk. The covenant is proven; production federation use has not begun.

Federation — Segmented Vaults + the Sovereignty Covenant (v1.84) Two Studios share a team vault over a plain git remote. Shipped v1.84.0 → v1.84.1 (2026-07-10). Enforcement is entirely client-side; a server hook is never trusted. TWO STUDIOS, ONE TEAM VAULT · segments derive per record; the team remote is a plain bare git repo STUDIO A — full private studio private segment unmarked → private os segment scope ∈ {ship, external} 4,239 records; 15% public-eligible segments recompute on every rebuild TEAM VAULT — plain git remote bare repo; no server logic; hooks never trusted; public-only accumulating history audience: team; kind immutable STUDIO B — teammate's studio private segment unmarked → private os segment scope ∈ {ship, external} same derivation, same gates — runs on the teammate's machine publish (covenant) pull — re-checks all publish (covenant) pull — re-checks all Segments DERIVE — never authored Computed from extraction_scope (home) or the vault manifest; hand-edits overridden on rebuild. Default-deny: the allowlist is a frozen code constant {ship, external}. D7 — grounding is per-vault Every work item traces membership to ITS OWN vault's anchor entity — the ownership chain resolves identically on every team member's machine, whoever computes it. member_of lattice (cross-vault refs) Up-lattice (equal-or-wider audience) legal ✓ Down-lattice / incomparable = illegal-but- present: excluded from adjacency + authority, surfaced as lint — never silently dropped. THE MOUNT GATE + SHARD INDEX · composition is validated, consented, commit-pinned — and fails closed MOUNT GATE — five checks before a foreign vault attaches 1 · Manifest validation — vault kind is immutable after activation 2 · compose.lock — every mount pinned to a resolved commit; same lockfile ⇒ same composition, reproducibly 3 · Executable-consent as a governed write 4 · Vault-qualified capability names — the dependency-confusion defense (Unicode homograph bypass caught + fixed pre-ship) 5 · Re-consent on contract narrowing SHARD INDEX — incremental, fails closed Each mounted vault's index rows cache as a shard keyed on the lockfile's commit pin — the mount pin IS the dirty-check key. Stale shard ⇒ a "cannot-compose" validator finding — never a silently-partial index. THE PUBLISH COVENANT · "no private byte crosses the wire, in either direction" Fresh tree, not a filter A git push carries a ref + its whole history — never a file list, so naive filter-then-push leaks. The publisher builds a fresh commit tree of exactly the passing files, then pushes that single ref only. Public-only history First publish = orphan-root commit (no parent). Later publishes parent only on the prior public-only tip — public history accumulates without ever anchoring to private history. Committed-tree re-validation Re-validates the committed tree, walking every reachable commit — not just the tip (closes TOCTOU). Walks the filesystem, not git's tracked list; refuses symlinks, submodules, LFS, merge commits, multi-worktree. Pull side trusts nothing Refuses shallow clones; re-runs every boundary check itself. The publisher's receipt is informational — never the guarantee. Enforcement is entirely client-side; a server hook is never trusted. PROOF RECORD — adversarial, not self-graded Red-teamed 2× at spec stage ~10 HIGH leak paths folded before build 1st build leaked — 4 of 6 angles heavy 6-attacker fleet forced private bytes 5 HIGH + 6 MEDIUM fixed re-verify fleet: 6/6 FAIL-CLOSED 23-test proof suite · 8 regression plants 69/69 federation tests, re-run green by 2 agents HONEST CEILINGS — disclosed in the locked spec itself Revocation is forward-only a file reclassified private is already out Platform remote sees metadata publish-occurred + refs visible on GitHub-class Segment gate structural, not crypto forged content + manifest defeats 2nd factor Zero live mounts today proof ran on a simulated 2-machine harness The covenant is enforced client-side, proven fail-closed by a red team tasked with making it leak, and honestly ceilinged — production federation use has not yet begun.
09-federation-sovereignty.svg — standalone copy in svg/ for slides.

14. Security and assurance posture — the CISO view (fully refreshed)

14.1 What the architecture gives you

14.2 Network-touching components (enumerated)

  1. Release upload — the build tool uploads release artifacts to a hosted bucket (credentialed via environment; ship-time only).
  2. Update discovery — first boot of the day fetches a static update manifest; offline-safe silent-skip; applying an update is human-gated with a dry-run diff and a sealed dual-hash receipt (the Update Covenant, ADR-049: user substrate is inviolable under OS update — proven by a seeded-studio walk that honestly failed round 1 and passed round 2 after same-day fixes).
  3. Federation transport — git push/pull to explicitly configured remotes, under the §13 covenant.
  4. Optional metering gateway — a local proxy on the operator's own API traffic for real cost accounting of autonomous loops. Optional, local, and off by default.
  5. The AI harness itself — as in v1, agents act with the privileges of the harness they run in; harness selection and configuration are part of the security boundary and should be reviewed jointly.

14.3 Honest limitations (current, tracked — each lives as a governed work item)

  1. No cryptographic integrity on logs or authorization yet. Logs are append-only by convention and tooling, not cryptography. Sharper than v1 stated it: the human-signoff check on public releases was adversarially proven forgeable by an executing agent even after its first fix, and the principal accepted that as a documented L1 ceiling — today's guarantee rests on the operational reality that a single registered human runs and signs every cut. The designed fix (a signing primitive for un-forgeable human authentication) exists as a design brief and is not built; a stated intention to build it before federation was not met — federation shipped first, with zero live mounts as the mitigating fact. This is the top of the security backlog.
  2. Access control is conventions plus harness permissions, not OS-level ACLs. Anyone with filesystem access can edit any file. Tropo's layer is integrity detection and audit (validator, groomers, forward-pointers, event trail), not access prevention. Disk/repo permissions and the harness perimeter are the access-control story.
  3. The validator is not green today — and the review says so. Current full run: 87 passed, 3 failed (two lifecycle-rollup leaks; one schema violation on two of the new maintenance-loop entries — the self-maintenance registry itself carrying a schema defect is a finding the system caught about itself). v1's "holding green as a ship precondition" was true at strict-gate ship time but is not a standing steady-state guarantee; red findings are tracked work, and the strict gate still blocks builds.
  4. Release-gate history is disclosed, not hidden. Six releases shipped with byte-identical authorization fingerprints before the defect was caught (fixed v1.80); several releases shipped off-pipeline and were retroactively papered with explicit disclosure; three release masters closed by documented attestation when the close ceremony was found defective (§10). The pattern to evaluate is not "gates never failed" — it is that every failure is named in the record, was fixed or ceiling-documented, and produced a structural cure (ADR-052, salting, regression tracks).
  5. Enforcement coverage is intentionally gradual (ADR-044). High-value types enforce hard; the long tail is looser by design; WARN→ERROR ratchets advance with named grandfathers. The dial settings are inspectable at any time.
  6. Two v1-roadmap items remain undelivered: the groomer fleet (one flag-only groomer is live) and event-log cryptographic integrity (see item 1). Scored honestly in §15.

None of this is news to the system; all of it is tracked inside it — which is itself the point: the security backlog lives in the same governed, auditable substrate as everything else.

15. Maturity, scale, and trajectory

Operating evidence as of 2026-07-10:

Scoring v1's stated trajectory, honestly: memory v3.0 cascade — done. WARN→ERROR ratchets — major progress (three ratchet releases). Write-time work-management tool family — partial (disposition shipped; the fuller family pending). Groomer fleet — not deployed (one flag-only groomer live). Event-log cryptographic integrity — not landed (design-stage; §14.3 item 1).

Trajectory from here: the "v2 floor" program (One Home, clean self-update, warnings-to-zero, true stranger-walk) closed at v1.78. The "v3 program" is underway: self-maintenance (v1.79), customer-hands honesty and the security fixes (v1.80), the import/export boundary (v1.81), continuous knowledge health (v1.82), federation (v1.84.x — shipped). Reserved and pending: v1.83 "One Voice," the deliberately-last capstone that narrates the finished system, gated on a month-long stranger acceptance walk. Beyond L1: the L2 cockpit track now runs inside the federation program (parallel L1/L2 tracks; team vaults decided as git-native private repos with a merge-blocking governance validator), and the product structure is three rings — the open-source OS, a marketplace of published capabilities, and the ecosystem.

v1.0 → v1.84.1 — Four Months of Self-Hosted Releases 96 distinct OS versions · 98 release records, Apr–Jul 2026 — nearly all via the system's own dev-pipeline, plus 6 non-OS product releases through the same pipeline READING THIS DIAGRAM single-release milestone (dated) multi-release window (date span) reserved version — pending generation handoff notch v1.71 · Jun 17 Loop Primitive + release activation key v1.84.x · Jul 8–10 federation — foundation (Jul 8) → Federation Complete + sovereignty covenant, Mike-signed v1.70 · Jun 14 the v1 review baseline — 14 OS releases shipped in the 26 days since v1.73–v1.74 · Jun 19–20 public repo live — github.com/tropo-ai/tropo; Stranger-Walk gate; Po (concierge) joins the crew v1.79–v1.82 · Jul 4–5 four releases in 48 hours — v1.79 self-maintaining studio; v1.80 security: salted keys + signoff hardening; v1.81 import/ export receipts; v1.82 Gardener v1.41 · May 16 Apache 2.0 license set — the OS goes open source v1.76–1.78 · Jul 1–3 the v2 floor — One Home; path preservation; the Update Covenant v1.83 One Voice reserved · pending v1.1.0 · Apr 2026 Mar Apr May Jun 1 Jun 10 Jul 1 Jul 10 (scale expands ≈9× here) THE SAME FOUR MONTHS, SEEN FROM THE CREW — every founding seat turned over; identity, memory, and open work survived every handoff Argus — Chief Architect A107 → A129 · 22 handoffs since the v1 review — A129 wrote this v2 Vela — Chief of Staff V55 → V64 · 9 handoffs since late May Talos — Engineering Lead … → T28 · turnover continuous Metis — Strategist … → G88 · turnover continuous Po — Concierge P1 — commissioned Jun 20 (v1.74), first generation still active (role did not exist until Jun 20) today — Jul 10 · v1.84.1 ships One release in this window was mid-flight across three generations of two different agents — and shipped correctly. Handoff notches: Argus and Vela counts are from the activation registry, spacing schematic (not dated); Talos and Metis lanes show end-of-window generations only. Built by the thing it describes: 96 versions in under three months through the system's own pipeline, while crew seats kept turning over — and v1.83 stays reserved until a month-long stranger walk passes.
11-evolution-timeline.svg — standalone copy in svg/ for slides.

16. Summary for the reviewer

Tropo L1 is a small number of strong ideas, composed:

  1. Plain files as the universal substrate — auditable, portable, minimal-infrastructure, and now an open-source public artifact with a private-by-default Studio boundary.
  2. Typed contracts (capsules) with gradual, tighten-only enforcement — structure without breaking the language floor.
  3. Durable agent identity with hard lineage gates, governed succession, bounded memory, and budgeted boots — AI staffing without continuity loss.
  4. One append-only event log with a three-state delivery contract — views are projections, never independent truths.
  5. Verification as a structural property — independent receipts, verifier independence, adversarial fleets scaled to risk, and an honest escape hatch (documented attestation) for when the machinery itself is what's broken.
  6. Federation under a proven sovereignty covenant — segmented vaults, derived visibility, and a publish path that was made to fail closed by people paid to make it leak.

The system's strongest credential is reflexive: it is built, governed, versioned, and verified by itself, under real workload, with its failures recorded in its own substrate and converted into its own gates. Its second-strongest credential is this document's candor: the broken fingerprints, the forgeable signoff, the never-exercised close ceremony, the red validator — all of it is in the record, dated, owned, and either fixed or ceiling-documented. The diagrams in svg/ and every claim in this document trace to governed files a reviewer is welcome to read directly.

Appendix A — Diagram index

FileView
svg/01-system-map.svgStudio anatomy: three layers, nine subsystems, the bootstrap-floor kernel
svg/02-capsule-type-system.svgType inheritance, the capsule contract, contract→instance→enforcement
svg/03-vault-graph.svgFlat store, One-Home directories, graph semantics, derived surfaces
svg/04-agent-lifecycle.svgThree-tier boot, six gated groups, hard gates, budgeted boot, succession
svg/05-memory-architecture.svgMemory v3.0: single surface, append-only episodic log, bounded folds
svg/06-event-system.svgThe event log: guarded emission, three-state delivery, projections
svg/07-pipelines-and-loops.svgPipelines vs. runs, playbooks, loops with brakes, the coupled dev/doc/test DAG
svg/08-enforcement-verification.svgFour enforcement loci, ratchets with grandfathers, done-means-proven
svg/09-federation-sovereignty.svgSegmented vaults, the mount gate, the publish covenant, the proof record
svg/10-write-path.svgLife of a governed artifact: write → derive → validate → groom → render
svg/11-evolution-timeline.svgv1.0 → v1.84.1: releases, programs, and crew generations on one axis

Appendix B — Glossary (minimal)

Prepared inside the system it describes — researched by a multi-agent fleet, authored by Argus A129, and independently, adversarially fact-checked against the live substrate before delivery. Argo Studio, 2026-07-10.

Prepared inside the system it describes — researched by a nine-agent verification fleet, authored by Argus A129, fact-checked against the live substrate before delivery. Argo Studio, 2026-07-10.