{
  "schema_version": 1,
  "milestones": [
    {
      "version": "0.1",
      "title": "Working Alpha",
      "items": [
        {
          "title": "Portable Rust core",
          "status": "verified",
          "acceptance": "Run the core tests without default features and compile the library for bare-metal ARM.",
          "evidence": "docs/OVERNIGHT_REPORT_V1.md records 16 core tests passing without default features on Windows GNU and Linux under WSL2, plus a thumbv7em-none-eabi compile check.",
          "id": "portable-rust-core",
          "description": "Run the storage engine with a Rust allocator on targets that have no host filesystem or network stack.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "docs/OVERNIGHT_REPORT_V1.md records 16 core tests passing without default features on Windows GNU and Linux under WSL2, plus a thumbv7em-none-eabi compile check.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "JSON shinies, warrens and dens",
          "status": "verified",
          "acceptance": "Reopen a database with independent namespaces and empty dens. Preserve legacy documents and reject removal of a populated namespace.",
          "evidence": "crates/ratdb-document/src/lib.rs: catalog_reopen_and_guarded_deletion and isolation_legacy_and_reopen. Both passed in the 0.1.0 release checks.",
          "id": "json-shinies-warrens-and-dens",
          "description": "Organize documents under separate databases and collections, including persistent empty namespaces.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "crates/ratdb-document/src/lib.rs: catalog_reopen_and_guarded_deletion and isolation_legacy_and_reopen. Both passed in the 0.1.0 release checks.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Document reads, writes and cursor pages",
          "status": "verified",
          "acceptance": "Insert, read, update and delete by ID. Resume an ordered page after deleting its cursor record.",
          "evidence": "crates/ratdb-server/tests/server.rs: persistent_crud_restart_and_ownership and application_commands_over_persistent_connections exercise authenticated CRUD, concurrent field updates and filtered pages.",
          "id": "document-reads-writes-and-cursor-pages",
          "description": "Store JSON objects by ID, update selected fields and traverse a collection in key order.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "crates/ratdb-server/tests/server.rs: persistent_crud_restart_and_ownership and application_commands_over_persistent_connections exercise authenticated CRUD, concurrent field updates and filtered pages.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Local authentication and shell sessions",
          "status": "verified",
          "acceptance": "Reject bad credentials, reuse one authenticated connection, and reconnect the shell after restarting the server.",
          "evidence": "crates/ratdb-server/tests/server.rs: authentication_and_versions. crates/ratdb-cli/tests/workflows.rs: crm_batch_restart_and_reconnect. Windows GNU and Linux under WSL2 passed.",
          "id": "local-authentication-and-shell-sessions",
          "description": "Connect to the local database using one password exchange per session.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "crates/ratdb-server/tests/server.rs: authentication_and_versions. crates/ratdb-cli/tests/workflows.rs: crm_batch_restart_and_reconnect. Windows GNU and Linux under WSL2 passed.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Rust and Python clients",
          "status": "verified",
          "acceptance": "Exercise both clients against the live protocol and retrieve application data after a restart.",
          "evidence": "crates/ratdb-server/tests/support/client_facade.rs: typed_session_crud_and_pagination. scripts/python_client_test.py: test_workloads_and_restart.",
          "id": "rust-and-python-clients",
          "description": "Access the server protocol from native Rust or Python applications.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "crates/ratdb-server/tests/support/client_facade.rs: typed_session_crud_and_pagination. scripts/python_client_test.py: test_workloads_and_restart.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Offline backup and restore",
          "status": "verified",
          "acceptance": "Verify a locked snapshot, restore it to a fresh destination, and refuse an invalid source or an existing destination.",
          "evidence": "scripts/backup_test.py: test_roundtrip_no_overwrite and test_reject_invalid_input. crates/ratdb-cli/tests/workflows.rs: check_and_backup_reject_semantic_damage.",
          "id": "offline-backup-and-restore",
          "description": "Make a consistent copy while holding the database lock and restore into a new file.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "scripts/backup_test.py: test_roundtrip_no_overwrite and test_reject_invalid_input. crates/ratdb-cli/tests/workflows.rs: check_and_backup_reject_semantic_damage.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Recovery after process termination",
          "status": "verified",
          "acceptance": "Kill a writer during a commit and after acknowledgement. Reopen, check integrity and compare the recovered value with the allowed outcomes.",
          "evidence": "scripts/crash_test.py passed 20 process-kill scenarios per OS on Windows GNU and Linux under WSL2. docs/RECOVERY_AUDIT.md explains the separate hardware power-loss gate.",
          "id": "recovery-after-process-termination",
          "description": "Determine which writes survive when the process stops during publication.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "scripts/crash_test.py passed 20 process-kill scenarios per OS on Windows GNU and Linux under WSL2. docs/RECOVERY_AUDIT.md explains the separate hardware power-loss gate.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        }
      ]
    },
    {
      "version": "0.2",
      "title": "Scalable Storage",
      "items": [
        {
          "title": "Bounded sparse lookups",
          "status": "verified",
          "acceptance": "Find ordered keys with restricted index memory and measure reads across 100 to 100,000 records.",
          "evidence": "crates/ratdb-core/src/tests.rs: tiny_index_limits_preserve_seeks_and_updates. docs/STORAGE_SCALING_V1.md reports the memory-adapter baseline for v1's sampled offsets.",
          "id": "bounded-sparse-lookups",
          "description": "Seek within an ordered snapshot using a fixed budget for sampled offsets.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "crates/ratdb-core/src/tests.rs: tiny_index_limits_preserve_seeks_and_updates. docs/STORAGE_SCALING_V1.md reports the memory-adapter baseline for v1's sampled offsets.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Page index and incremental writes",
          "status": "verified",
          "acceptance": "Prototype a separately versioned page index. Measure bytes written per update against v1 at 100,000 keys and verify recovery at every root publication boundary.",
          "evidence": "docs/PAGE_INDEX_EXPERIMENT_V1.md and crates/ratdb-page-lab/src/tests.rs verify the separate prototype, full model reopen and root publication faults. At 100,000 keys the 16 replacements wrote 69,696 adapter bytes versus 4,800,128 in v1.",
          "id": "page-index-and-incremental-writes",
          "description": "Reduce the bytes written for small changes to large databases.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/STORAGE_SCALING_V1.md records 4,800,128 adapter bytes for a batch of 16 replacements at 100,000 records in v1.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "cdcbd6957a24a7a789ece00652d028627701366c",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/PAGE_INDEX_EXPERIMENT_V1.md and crates/ratdb-page-lab/src/tests.rs verify the separate prototype, full model reopen and root publication faults. At 100,000 keys the 16 replacements wrote 69,696 adapter bytes versus 4,800,128 in v1.",
              "note": "The fixed-key prototype met the stated acceptance criteria. Production still uses v1. Arbitrary keys, migration and physical power-cut qualification remain open."
            }
          ]
        },
        {
          "title": "Capacity growth and page reclamation",
          "status": "planned",
          "acceptance": "Grow within an explicit capacity limit, reuse released space under repeated updates, and reopen correctly after interrupted allocation or reclamation.",
          "evidence": "docs/ROADMAP.md identifies bounded reclamation as a requirement for a future page format. V1 uses two fixed-size banks.",
          "id": "capacity-growth-and-page-reclamation",
          "description": "Extend a database safely and reclaim unused space within an explicit storage budget.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/ROADMAP.md identifies bounded reclamation as a requirement for a future page format. V1 uses two fixed-size banks.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Ambiguous commit-header recovery",
          "status": "hardening",
          "acceptance": "Detect or safely report loss of a complete published header, including after interrupted metadata writes.",
          "evidence": "crates/ratdb-core/src/tests.rs covers torn_commit_header_all_prefixes and all_invalidation_prefixes_preserve_active_data. docs/RECOVERY_AUDIT.md identifies complete header erasure as ambiguous in v1.",
          "id": "ambiguous-commit-header-recovery",
          "description": "Distinguish an interrupted publication from damage to previously acknowledged data.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "hardening",
              "completed_on": null,
              "evidence": "crates/ratdb-core/src/tests.rs covers torn_commit_header_all_prefixes and all_invalidation_prefixes_preserve_active_data. docs/RECOVERY_AUDIT.md identifies complete header erasure as ambiguous in v1.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Migration from v1 storage",
          "status": "planned",
          "acceptance": "Migrate legacy, W1 and C1 records into a candidate format. Interrupt each stage and verify the source remains recoverable and document counts and contents agree.",
          "evidence": "docs/STORAGE_FORMAT.md describes the source encodings. docs/ROADMAP.md calls for interrupted migration tests.",
          "id": "migration-from-v1-storage",
          "description": "Move existing database contents into a future storage format without losing the recovery path.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/STORAGE_FORMAT.md describes the source encodings. docs/ROADMAP.md calls for interrupted migration tests.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        }
      ]
    },
    {
      "version": "0.3",
      "title": "Application Ready",
      "items": [
        {
          "title": "Server transactions and conditional writes",
          "status": "verified",
          "acceptance": "Commit related writes over one network request, reject a stale precondition atomically, and reconcile the result if the reply is lost.",
          "evidence": "docs/SERVER_TRANSACTIONS.md and crates/ratdb-server/tests/support/transactions.rs cover racing clients, stale preconditions, rollback, lost replies and restart.",
          "id": "server-transactions-and-conditional-writes",
          "description": "Commit related documents together through the server and detect concurrent changes.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/EMBEDDED_DOCUMENTS.md documents atomic embedded batches. docs/PROTOCOL.md documents individual network command commits.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "2432bf376baa8fa8308d226f6c3133aa2bc9bd5d",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/SERVER_TRANSACTIONS.md and crates/ratdb-server/tests/support/transactions.rs cover racing clients, stale preconditions, rollback, lost replies and restart.",
              "note": "One authenticated request atomically applies up to 128 explicit changes under an instance-wide generation check."
            }
          ]
        },
        {
          "title": "Secondary indexes and unique fields",
          "status": "verified",
          "acceptance": "Evaluate index cost and semantics with a username constraint. Demonstrate that concurrent inserts, edits and recovery preserve uniqueness before adopting a design.",
          "evidence": "docs/INDEX_ENGINEERING_REPORT.md and docs/SECONDARY_INDEXES.md document v3 lookup cost, migration and constraints. crates/ratdb-document/tests/secondary.rs and scripts/secondary_index_test.py verify concurrent inserts and edits, atomic swaps, interrupted mutations, restart and restored uniqueness.",
          "id": "secondary-indexes-and-unique-fields",
          "description": "Look up documents by a field other than ID and enforce uniqueness where an application requires it.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "research",
              "completed_on": null,
              "evidence": "docs/OVERNIGHT_REPORT_V1.md lists ID uniqueness as the current application guarantee.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "fec60ea66d3790672486cf5c13096986a69600c2",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/INDEX_ENGINEERING_REPORT.md and docs/SECONDARY_INDEXES.md document v3 lookup cost, migration and constraints. crates/ratdb-document/tests/secondary.rs and scripts/secondary_index_test.py verify concurrent inserts and edits, atomic swaps, interrupted mutations, restart and restored uniqueness.",
              "note": "The v3 development checkout passed the acceptance criteria on Windows and Linux under WSL. File and memory costs were measured. The frozen alpha uses v1."
            }
          ]
        },
        {
          "title": "Online backup",
          "status": "verified",
          "acceptance": "Capture one committed generation while clients write. Restore the backup and compare it with that generation, including namespace metadata.",
          "evidence": "docs/ONLINE_BACKUP.md and scripts/online_backup_test.py cover concurrent mutation, exact generation and catalog restore, and overwrite refusal.",
          "id": "online-backup",
          "description": "Back up a committed generation while the service continues handling mutations.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/BACKUP_RESTORE.md documents the current offline procedure and exclusive file ownership.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "acb3a3aa32948d158ba10cec513bb4780992a1a3",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/ONLINE_BACKUP.md and scripts/online_backup_test.py cover concurrent mutation, exact generation and catalog restore, and overwrite refusal.",
              "note": "Authenticated live backup passed on a disposable instance. Writers pause while the committed bank is copied."
            }
          ]
        },
        {
          "title": "JavaScript client",
          "status": "verified",
          "acceptance": "Authenticate once, operate on a selected den, page results, and test malformed frames and disconnects against the real server.",
          "evidence": "docs/JAVASCRIPT_CLIENT.md and scripts/js_client_test.mjs verify persistent authentication, den isolation, pagination, restart, malformed frames and socket loss in the Node client.",
          "id": "javascript-client",
          "description": "Read and write RatDB documents from a JavaScript application.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/PROTOCOL.md defines the v1 framing and operation responses for a future client.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "c27ff5d9df9c52f3f1c92044f16749a4b41e351b",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/JAVASCRIPT_CLIENT.md and scripts/js_client_test.mjs verify persistent authentication, den isolation, pagination, restart, malformed frames and socket loss in the Node client.",
              "note": "The dependency-free Node client passed 13 integration and wire tests. It connects through a local TCP endpoint."
            }
          ]
        },
        {
          "title": "Operational limits under application load",
          "status": "hardening",
          "acceptance": "Measure latency and resource use under concurrent requests, near-full writes and slow clients on native Windows and Linux.",
          "evidence": "crates/ratdb-server/tests/server.rs: configured_limits_reject_oversize_before_commit_and_frame_allocation. docs/RESOURCE_PROFILE_V1.md measures a 1,000-document local server workload.",
          "id": "operational-limits-under-application-load",
          "description": "Characterize the service as data size and client demand approach configured limits.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "hardening",
              "completed_on": null,
              "evidence": "crates/ratdb-server/tests/server.rs: configured_limits_reject_oversize_before_commit_and_frame_allocation. docs/RESOURCE_PROFILE_V1.md measures a 1,000-document local server workload.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Consistent reads across pages",
          "status": "verified",
          "acceptance": "Compare ways to retain a read view across cursor requests. Bound snapshot lifetime and storage costs while concurrent writers insert and delete records.",
          "evidence": "docs/CONSISTENT_READ_REPORT.md and docs/CONSISTENT_READS.md document limits, API and comparative benchmarks through 100,000 documents. crates/ratdb-document/tests/snapshots.rs and scripts/snapshot_test.py verify historical indexes, concurrent commits, quotas, session cleanup, interrupted compaction and restart.",
          "id": "consistent-reads-across-pages",
          "description": "Let an application traverse one coherent view while other sessions modify its data.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "research",
              "completed_on": null,
              "evidence": "docs/API.md documents current keyset pages: each request sees its own committed state.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "91c9d2ab1b8277c31f1fa534cf766d6c62816ef2",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/CONSISTENT_READ_REPORT.md and docs/CONSISTENT_READS.md document limits, API and comparative benchmarks through 100,000 documents. crates/ratdb-document/tests/snapshots.rs and scripts/snapshot_test.py verify historical indexes, concurrent commits, quotas, session cleanup, interrupted compaction and restart.",
              "note": "Verified bounded v3 snapshots across cursor requests with concurrent writers, historical indexed results and session-scoped cleanup on Windows and Linux."
            }
          ]
        }
      ]
    },
    {
      "version": "0.4",
      "title": "Portable Systems",
      "items": [
        {
          "title": "Custom block and filesystem adapters",
          "status": "verified",
          "acceptance": "Run representative adapters through reopen, partial-sector write, failed-barrier and stalled-I/O cases.",
          "evidence": "crates/ratdb-core/examples/asterhold.rs contains four passing mock-adapter tests, including reopen_each_adapter and stalled_filesystem_io_is_an_error.",
          "id": "custom-block-and-filesystem-adapters",
          "description": "Translate the core storage contract to sector devices and positioned filesystem I/O.",
          "completed_on": "2026-11-06",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "verified",
              "completed_on": "2026-11-06",
              "evidence": "crates/ratdb-core/examples/asterhold.rs contains four passing mock-adapter tests, including reopen_each_adapter and stalled_filesystem_io_is_an_error.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Asterhold storage service",
          "status": "planned",
          "acceptance": "Run the adapter contract on Asterhold's own filesystem or volume service. Verify exclusive ownership, durable length changes, flush ordering and restart.",
          "evidence": "docs/ASTERHOLD_INTEGRATION_V1.md specifies the required OS facilities and the current mock backends.",
          "id": "asterhold-storage-service",
          "description": "Use the Asterhold operating system's storage and recovery services.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/ASTERHOLD_INTEGRATION_V1.md specifies the required OS facilities and the current mock backends.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Native IPC",
          "status": "planned",
          "acceptance": "Start a resident service after storage initialization. Send bounded requests over native IPC and verify restart and client error handling without a TCP stack.",
          "evidence": "docs/ASTERHOLD_INTEGRATION_V1.md describes the proposed service startup order and ownership model.",
          "id": "native-ipc",
          "description": "Share an instance between OS services using native interprocess messages.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/ASTERHOLD_INTEGRATION_V1.md describes the proposed service startup order and ownership model.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Physical ARM and constrained-device trials",
          "status": "planned",
          "acceptance": "Boot the core on a named ARM board, measure heap and stack at the configured limits, and recover from resets using the board's actual storage.",
          "evidence": "docs/OVERNIGHT_REPORT_V1.md records a bare-metal ARM compile check. Hardware execution remains open.",
          "id": "physical-arm-and-constrained-device-trials",
          "description": "Measure memory, timing and recovery behavior on the actual embedded target.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/OVERNIGHT_REPORT_V1.md records a bare-metal ARM compile check. Hardware execution remains open.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Flash endurance and device replacement",
          "status": "research",
          "acceptance": "Measure controller writes and erase cycles on candidate media, then rehearse replacement and cold restore using an independently retained copy.",
          "evidence": "docs/FRONTIER_DESIGN.md outlines proposed wear measurements and replacement exercises.",
          "id": "flash-endurance-and-device-replacement",
          "description": "Determine whether candidate storage has sufficient endurance and a workable replacement procedure.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "research",
              "completed_on": null,
              "evidence": "docs/FRONTIER_DESIGN.md outlines proposed wear measurements and replacement exercises.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        }
      ]
    },
    {
      "version": "1.0",
      "title": "Production Release",
      "items": [
        {
          "title": "Hardware power-loss qualification",
          "status": "planned",
          "acceptance": "Cut power on named filesystem and device combinations. Match an external acknowledgement log against recovered records and publish unsupported configurations.",
          "evidence": "docs/RECOVERY_AUDIT.md defines the fault model and distinguishes simulated failures and process kills from physical cuts.",
          "id": "hardware-power-loss-qualification",
          "description": "Establish which device and filesystem combinations preserve acknowledged writes through a power cut.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/RECOVERY_AUDIT.md defines the fault model and distinguishes simulated failures and process kills from physical cuts.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Upgrade and restore validation",
          "status": "verified",
          "acceptance": "Restore archived fixtures from supported releases, test interrupted upgrades, and verify data, catalog entries and documented rollback procedures.",
          "evidence": "docs/UPGRADE_REHEARSAL.md and scripts/upgrade_test.py verify archived v1 data, empty catalog metadata and three interrupted upgrade boundaries with old-binary rollback.",
          "id": "upgrade-and-restore-validation",
          "description": "Exercise backward compatibility, upgrades and restored service startup across supported releases.",
          "completed_on": "2026-11-07",
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/STORAGE_FORMAT.md describes current version and downgrade boundaries.",
              "note": "Imported from the original public alpha roadmap."
            },
            {
              "date": "2026-11-07",
              "commit": "7513d840789de558c7e9dba5a51b145ecab531aa",
              "status": "verified",
              "completed_on": "2026-11-07",
              "evidence": "docs/UPGRADE_REHEARSAL.md and scripts/upgrade_test.py verify archived v1 data, empty catalog metadata and three interrupted upgrade boundaries with old-binary rollback.",
              "note": "Validated the frozen alpha to current v1 development build. Future format migrations need their own rehearsal."
            }
          ]
        },
        {
          "title": "Sustained application workloads",
          "status": "planned",
          "acceptance": "Run a near-capacity mixed website or CRM workload on native Windows and Linux. Publish tail latencies, peak memory, write volume and restart outcomes.",
          "evidence": "docs/MEASUREMENTS_V1.md and docs/RESOURCE_PROFILE_V1.md provide the alpha baselines.",
          "id": "sustained-application-workloads",
          "description": "Quantify long-running behavior under representative application traffic.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "planned",
              "completed_on": null,
              "evidence": "docs/MEASUREMENTS_V1.md and docs/RESOURCE_PROFILE_V1.md provide the alpha baselines.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Operator recovery procedures",
          "status": "hardening",
          "acceptance": "Have operators follow the runbooks on clean hosts, restore onto replacement storage and recover a service without overwriting its source.",
          "evidence": "docs/BACKUP_RESTORE.md contains the offline procedure. scripts/backup_test.py verifies no-overwrite publication, rejection of invalid input and refusal of a busy source.",
          "id": "operator-recovery-procedures",
          "description": "Provide procedures that an operator can follow to recover an unavailable instance.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "hardening",
              "completed_on": null,
              "evidence": "docs/BACKUP_RESTORE.md contains the offline procedure. scripts/backup_test.py verifies no-overwrite publication, rejection of invalid input and refusal of a busy source.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        },
        {
          "title": "Release packaging and platform gates",
          "status": "hardening",
          "acceptance": "Install the packaged release on clean supported systems, exercise actual binaries, and publish the supported OS and library versions with the test matrix.",
          "evidence": "docs/OVERNIGHT_REPORT_V1.md records 50 passing all-target tests on Windows GNU and Linux under WSL2, release binary sizes and remaining native-platform qualification gaps.",
          "id": "release-packaging-and-platform-gates",
          "description": "Distribute reproducible, tested artifacts with checksums and a supported-platform matrix.",
          "completed_on": null,
          "history": [
            {
              "date": "2026-11-07",
              "commit": "d5b5e5669f1476b6abd7071f128e0ec6cf635273",
              "status": "hardening",
              "completed_on": null,
              "evidence": "docs/OVERNIGHT_REPORT_V1.md records 50 passing all-target tests on Windows GNU and Linux under WSL2, release binary sizes and remaining native-platform qualification gaps.",
              "note": "Imported from the original public alpha roadmap."
            }
          ]
        }
      ]
    }
  ]
}
