Makechain operating envelope
| Field | Current value |
|---|---|
| Status | Working draft; owner decisions and measurements remain open |
| Updated | 2026-09-22 |
| Baseline | Specification revision 14, 2026-09-22, working tree |
| Scope | Architecture phase P1: launch boundary, workloads, operating targets, and calibration inputs |
| Authority | Informative planning artifact; the specification and its companions remain authoritative |
| Evidence state | No Makechain capacity, latency, recovery, or resource result has been measured |
This document defines the conditions the architecture must be designed and qualified to support. It does not select process topology, machine profiles, storage products, command limits, prices, or deployment defaults. Numeric values from the specification are identified as protocol parameters or analytical derivations; they are not production measurements.
1. Status vocabulary
Every consequential claim in this document uses one of these classes:
| Class | Meaning |
|---|---|
| Fixed requirement | Already required by the specification or an accepted owner decision |
| Owner target | Desired operating outcome; requires explicit owner acceptance |
| Planning assumption | Temporary input used to design a test or compare architectures; must not silently become a target |
| Derived estimate | Computed from stated inputs and a formula; not an observed result |
| Measured result | Produced by a reproducible test with revision, environment, workload, method, and artifact recorded |
| Calibration item | Parameter or budget to choose only after characterization and review |
Unknown values are written as TBD, with an owner and resolution condition. A target remains
unqualified until a measured result under its stated workload meets its acceptance rule.
2. Accepted launch boundary and sequencing
The eventual launch scope is fixed by owner decision:
- Validator, exporter, store and proof service, admission, indexing/query, and settlement-relayer services.
- Rust verification library and wasm verifier.
- TypeScript SDK and CLI.
- Minimal explorer and documentation website.
- Integration with mkit and the per-project availability layers.
Rich collaboration and social applications are outside the protocol launch requirement. The owner's consuming application is maintained in a separate, unrelated project. Makechain defines and validates its integration contracts but does not implement or duplicate that application's business logic.
Initial development is protocol first: protocol definitions, deterministic execution, Commonware integration, storage and recovery, consensus and DKG, signing, proofs, and only the fixtures, harnesses, and minimal adapters needed to qualify them. Product SDK, user-facing CLI, explorer, website, and broad service implementation follow after their protocol contracts have evidence and stability. Native/wasm verifier qualification remains an early concern because it can reveal wire, encoding, signature, or proof incompatibility.
The following workflows must be represented in workload models and later end-to-end qualification:
- Prepare, sign, submit, finalize, and verify a command.
- Store an object closure, finalize each required publication, and reconcile both outcomes without treating either as proof of the other.
- Create, update, and delete refs with membership witnesses and atomic state transitions.
- Change authority: configure roots, authorize/revoke keys, manage roles, and transfer projects.
- Import settlement credits from a finalized external proof.
- Schedule and activate protocol releases and validator-set changes, including DKG and restart.
- Serve current-state, command, publication, membership, and finality evidence against authenticated headers; rebuild derived views from certified inputs.
- Restart, catch up, bootstrap, and recover history gaps without changing finalized results.
3. Owner decisions and accepted answers
| ID | Decision | Owner | Current state | Why architecture depends on it |
|---|---|---|---|---|
| O1 | Validator operator model | Protocol owner | Accepted: genesis seven are operated by the owner's team; later membership remains permissioned and admits only explicitly trusted operators; open or permissionless validator admission is not a goal | Establishes an accepted organizational/operator trust assumption; infrastructure, custody, and credential correlation still determine outage and compromise exposure |
| O2 | Primary qualification workload | Protocol owner | Accepted: heavy concurrent agent publishing from launch | Prioritizes concurrent independent projects and hot-project/ref contention, distinct and shared signing slots, bursts, retries, duplicates, witness refresh, and large background imports |
| O3 | Finalization latency direction | Protocol owner + product owner | Accepted aspiration: aim for subsecond finalization, ideally around 500 ms; measure both instrumented consensus and user-observed verified finalization. Accepted sequencing: report p50/p95/p99 first, then select the target percentile from those measurements; workload scope remains a separate reviewed input | Directs latency characterization without presenting 500 ms as a qualified target or measured result |
| O4 | Placement research and supported outage expectations | Protocol owner + platform owner | Accepted sequencing: first shared disposable devnet uses one GCP region, with regional outage halting it; production placement follows cost/latency research and has no selected zone- or region-loss guarantee. Restart, bootstrap, and recovery objectives remain TBD | Keeps topology open while research compares cost, latency, and correlated-failure consequences |
| O5 | Infrastructure budget or cost ceiling that materially constrains topology | Protocol owner | TBD / none stated | Prevents resource assumptions from silently selecting an unaffordable architecture |
| O6 | Store failure-domain definition and history-recovery objective | Protocol owner + platform owner | TBD; the specification requires two failure-isolated copies of stored history, satisfied at launch by the exoware store and the mirror bucket with retention lock | Defines what “failure-isolated” means operationally for the two copies, and how long the proof service may be unavailable. The store software ships no replication, snapshot or backup of its own, so the answer is made of operator-run disk snapshots of its volume, the mirror's retention lock, and the measured rebuild of the store from the mirror |
O1 and O2 are resolved; O3 establishes the latency aspiration and O4 establishes research-first
placement. Their detailed acceptance conditions and the remaining questions can be sharpened using early
characterization; before P1 exits, resolve them or record an explicit deferral with an owner and
revisit trigger. O3's measurement-first percentile selection is resolved sequencing, not an
unanswered owner question or a prerequisite for P2. Trusted operation does not change the
protocol's n = 7, f = 2, quorum 5 assumptions: one correlated administrative, credential, or
custody compromise affecting more than two identities exceeds the Byzantine fault bound, and loss
of three identities halts liveness. The owner accepts organizational trust in the admitted
operators; infrastructure separation remains an availability and compromise-containment concern.
For O3, the owner initially considered p95 5 seconds / p99 15 seconds under sustained heavy load as an acceptable throughput-prioritized fallback, then clarified that the design should aim for subsecond finalization, ideally around 500 ms. The clarified subsecond aspiration is the primary direction. Neither set of numbers is a production-qualified objective until the measurement boundary, percentile, workload, and acceptance rule are fixed and supported by evidence. The owner chose to select the percentile after initial measurements. Report p50, p95, and p99 for both T2a and T2b during characterization; then agree the target and evaluate it in subsequent qualification runs. No 500 ms p95 commitment has been accepted.
4. Representative workload scenarios
These scenarios describe shapes, not promised rates. The selected O2 priority determines the first qualification profile; it does not remove the other scenarios.
| ID | Scenario | Representative traffic and stress | Required observation |
|---|---|---|---|
| W1 | Routine collaboration | Mixed project/key/role commands; small PUSH batches; ordinary ref creates, sets, and deletes; proofs and current-state reads | Finalization, evidence latency, record growth, client reconciliation, and query freshness under steady load |
| W2 | Heavy agent automation (primary) | Concurrent independent projects plus hot-project/ref contention; distinct signing slots and intentionally shared slots; larger PUSH/ref batches; bursts, retries, duplicates, old-window witness refresh, and stale-CAS conflicts | Admission backpressure, deterministic block work, contention/reconciliation cost, retry amplification, proof size/latency, and burst recovery |
| W3 | Bulk import or backfill | Sustained background publication batches mixed with foreground ref updates; repeated or duplicate commitments; availability ingestion, exporter publication, indexing and compaction | Foreground latency under background load, block resource saturation, membership-window turnover, store growth, exporter publish lag, availability lag, and derived-view catch-up |
| W4 | Authority and governance | Root approvals, bulk revoke, role churn, transfers, release activation, validator scheduling and DKG | Worst-case signature/proof work, custody/restart safety, transition boundaries, and bounded command work |
| W5 | Failure and recovery | Validator restart, replacement, lagging validator, fresh bootstrap, exporter failover to the standby and recovery of an unpublished range from the standby's own durable queue, store loss and rebuild from the mirror, delayed external services | Safety, time to ready/caught-up, authenticated recovery, retained-history coverage, and degraded behavior |
| W6 | Adversarial bounded input | Maximum canonical bytes/items/proof depth, invalid signatures/proofs, collision-heavy state keys, failing late CAS | Reservation accuracy, bounded rejection work, no partial effects, memory headroom, and backpressure |
For W1-W4, define both a steady interval long enough to expose queues, compaction, and cache effects and a burst interval that tests bounded overload and recovery. Their durations and rates are calibration items until characterization provides evidence.
4.1 Proposed low, medium, and high workload bands
The owner accepted using three sizing bands as planning assumptions for review, but has not accepted the numeric values below. They are synthetic qualification inputs, not a demand forecast, capacity claim, launch commitment, or pricing basis. Keep the same generated intents and seed when comparing implementations or topology candidates.
| Input | Low | Medium | High |
|---|---|---|---|
| Concurrent publishing agents | 25 | 250 | 1,000 |
| Distinct publication intents per agent per minute | 2 | 4 | 6 |
| Derived distinct PUSH rate | 50/min (0.83/s) | 1,000/min (16.7/s) | 6,000/min (100/s) |
| Commitments/PUSH, mean / p95 / fixture maximum | 4 / 8 / 32 | 8 / 16 / 64 | 16 / 32 / 128 |
| Ref operations/PUSH, mean / p95 / fixture maximum | 1 / 2 / 4 | 2 / 4 / 8 | 4 / 8 / 16 |
| Retry and duplicate request overhead over distinct commands | 5% | 15% | 30% |
| PUSH intents aimed at a hot 1% ref cohort | 5% | 20% | 40% |
| Maximum simultaneous contenders on one hot ref | 2 | 8 | 32 |
| Proof/receipt requests per finalized PUSH | 1 | 2 | 4 |
| Derived-query reads per finalized PUSH | 5 | 10 | 20 |
| Absent-to-resident additions / resident-to-absent removals per distinct command | 0.10 / 0.02 | 0.20 / 0.08 | 0.40 / 0.20 |
Use one command-intent mix in the first comparison: 80% PUSH, 12% account/project/key/role lifecycle, 4% username, and 4% credit import. Release, validator-schedule, and DKG transitions are rare boundary scenarios under W4 rather than artificial steady traffic. Within PUSH, include both independent signing slots and shared-slot contention; measure stale-CAS and sequence failures instead of assigning them a success rate in advance.
Let A be agents, u publication intents per agent per minute, rho retry/duplicate overhead,
c_bar mean commitments/PUSH, d successful-path proof/receipt requests per finalized PUSH, q
successful-path query reads per finalized PUSH, a/x resident-key additions/removals per finalized
distinct command, s the observed fraction of distinct PUSH intents that finalize, and D_fin the
observed finalized distinct-command rate. With PUSH share 0.8 and a 3x burst:
distinct PUSH/s P = A * u / 60
distinct command intents/s D = P / 0.8
offered command requests/s O = D * (1 + rho)
burst offered requests/s O_burst = 3 * O
finalized PUSH/s P_fin = P * s
permanent membership leaves/s L = P_fin * c_bar
successful-path proof requests/s E_success = P_fin * d
successful-path query reads/s Q_success = P_fin * q
net resident-key growth/s N = (a - x) * D_fin
availability ingest bytes/s V = U * measured mean deduplicated bytes/accepted upload
U is the independently measured rate of accepted availability uploads, summed over every layer a
client writes to, because a project may be served by several. Uploads precede chain finalization and
may never lead to a finalized PUSH; measure their bytes and staging retention independently rather
than deriving ingestion from P_fin.
The table below is conditional on every distinct intent finalizing (s = 1, D_fin = D). It is a
fixture-shape calculation, not predicted receipt traffic under rejection or contention. During a run,
derive successful receipt/proof/query traffic and growth from observed finalized commands. Count
status polls, proof attempts for nonfinalized or Unknown intents, witness refreshes, and retry or
reconciliation requests separately as offered service traffic; do not infer them from P_fin.
| Conditional planning value if all distinct intents finalize | Low | Medium | High |
|---|---|---|---|
| Offered command requests/s, steady / 3x burst | 1.1 / 3.3 | 24 / 72 | 163 / 488 |
| Permanent membership leaves/s | 3.3 | 133 | 1,600 |
| Successful-path proof/receipt requests/s | 0.83 | 33 | 400 |
| Successful-path derived-query reads/s | 4.2 | 167 | 2,000 |
| Net resident-key growth/s | 0.083 | 2.5 | 25 |
These bands are not yet runnable manifests. P3 must bind each fixture to the canonical schema and vectors and record at least:
| P3 manifest input | Required distribution or count |
|---|---|
| Canonical commands and PUSHes | Encoded bytes by command kind and PUSH shape, including maxima |
| Signers and witnesses | Signer-family mix, signature counts, root and delegation witnesses, and fresh versus old-window membership proofs with encoded sizes and depths |
| Genesis and prepared state | Genesis has no credit allocations. Record family mix and resident counts after replaying valid Moderato imports and ordinary commands to prepare accounts, projects, keys, roles, refs and usernames; retain the preparation history and proof fixtures |
| State churn | Additions, removals, and same-key replacements by family, including deposit-payer changes |
| Availability closures | Encoded and deduplicated closure bytes/PUSH and duplicate-object distribution |
The high band's 100 PUSH/s is an exploratory anchor, not a capacity ceiling or owner commitment.
After short fixed-rate runs, use a bounded saturation ramp: hold command shape, prepared/history state,
and topology constant; increase concurrency or offered rate in controlled stages; and predeclare queue,
memory, and durability-backlog bounds plus rejection/defer behavior. Stop at the first sustained knee
where admitted/finalized work no longer tracks offered work, a latency boundary breaches its campaign
target, bounded queues do not drain, durability backlog persists, or a correctness fault occurs. Record
offered, sent, admitted, finalized, distinct, retry, status, and proof traffic at every stage, followed
by recovery. Do not extrapolate capacity past the last measured stable stage.
The first harness proposal is 10 minutes warm-up, 30 minutes steady, 5 minutes at 3x, and 30
minutes recovery; add a four-hour medium soak after short runs are stable. These durations are also
reviewable planning assumptions. Report actual accepted/finalized rates and recompute growth from
finalized data. Membership operations add one commit operation per finalized block to L; yearly
growth integrates the reviewed duty schedule rather than running a peak band for 365 days.
5. Workload units and derivations
The workload manifest for every measurement records at least:
| Input | Unit |
|---|---|
| Submitted, admission-accepted, included, and finalized commands | commands/s, split by command kind |
| Steady and burst offered load | commands/s over an explicitly stated interval |
| PUSH batch shape | commitments/PUSH and ref operations/PUSH, including percentiles and maxima |
| Canonical traffic | bytes/command, bytes/block, blocks/s |
| Deterministic execution | reserved work units/command and work units/block |
| State creation | gross new records/command and gross new records/block, by family |
| Membership activity | commitment leaves/block and total membership operations/block |
| Proof traffic | requests/s and encoded response bytes by proof kind |
| Query and export traffic | rows/s, bytes/s, watermark height and timestamp |
| Availability traffic | object/closure bytes admitted, stored, and served per second, per availability layer |
Also report distinct successful intents/s, finalized command and publication occurrences/s, unique
(project, commitment) pairs/s, duplicate ratio, retries/intent, and every admission/selection
outcome. Reconcile each selection cohort as selected = included + dropped + still deferred
at its observation cut; do not subtract flows across intervals without accounting for backlog.
Let r_k(t) be the command rate for kind k, m_k its traffic fraction, c commitments per PUSH,
q ref operations per PUSH, and g_f gross protocol creation events of record family f per
command (distinct from the conservative new_records reservation). Let A_f,I count keys absent at the start of interval I and
resident at its end, and X_f,I count keys resident at the start and absent at its end. A same-key
replacement is still a gross creation event but is neither A nor X. Use checked integer totals
in the harness; these formulas communicate the derivation:
total command rate R = sum_k r_k
traffic mix m_k = r_k / R; sum_k m_k = 1
commands over interval I C_I = integral_I R(t) dt
commitment leaves over I L_I = sum over finalized PUSH commands of c
ref operations over I F_I = sum over finalized PUSH commands of q
gross logical creation events G_f,I = sum over finalized commands of g_f
resident-key delta, family f delta N_f,I = A_f,I - X_f,I
permanent-record delta delta N_perm,I = A_perm,I
membership operations M_I = L_I + one commit operation per finalized block
reserved canonical byte load Q_I = sum over finalized commands of reserved block_bytes
published/transport encoded bytes Z_I = sum of encoded bodies + headers + certificates + framing
availability ingest V_I = sum of accepted object-closure bytes after service deduplication rules
membership window at peak rate H_member,plan = membership_window_operations / peak membership_operations_per_second
marshal retention at peak rate H_marshal,plan = retained_marshal_blocks / peak finalized_blocks_per_second
Annual projections use the same sums over the declared expected yearly traffic schedule, rather than multiplying a peak rate by a year. Sensitivity output must show at least the expected schedule, the accepted burst schedule, and a higher stress schedule; none is capacity until measured.
Report reserved creation upper bounds separately from actual gross creation events; optional branches
may reserve more than they create. Resource reservation follows the protocol's independent dimensions: canonical block_bytes,
reserved work_units, and gross new_records. Deletions do not offset creation reservations and
dimensions do not convert into one another. Prices, hard limits, and work weights remain calibration
items owned by the chainspec and release process.
Q_I is the validity-resource dimension; Z_I sizes stored and transferred artifacts and must not
be compared directly with max_block_bytes. The two retention equations are planning envelopes at
the declared peak rate, not guaranteed wall-clock lower bounds: a higher realized burst or rapid
catch-up after a stall can turn the windows over faster. Qualification must measure those cases,
witness-refresh bytes/work after a reference falls below the membership window, and the submitted/
admitted/finalized amplification caused by stale-CAS retries, sequence contention, rebroadcasts,
and duplicate intents.
6. Acceptance targets and exact measurement boundaries
Numeric cells are either an explicitly labeled owner aspiration with unresolved scope or TBD.
Report distributions and failure counts, not only averages. Steady and burst targets may differ,
but both use the same boundary definitions. Each result states offered load and traffic mix and
includes every attempt; it never computes latency only from requests that succeeded.
| ID | Outcome | Measurement start | Measurement end | Steady target | Burst/degraded target | Qualification evidence |
|---|---|---|---|---|---|---|
| T1 | Admission response | Client begins sending the exact canonical signed envelope | Client receives the admission result | TBD | TBD | Gateway/admission load test with result classes and offered load |
| T2a | Consensus finalization | Instrumented validator observes proposal/vote start for a command-bearing block using a monotonic clock | The validator observes the finalization decision | Aim subsecond, ideally ~500 ms; characterize p50/p95/p99, then select the target percentile; sustainable-load scope remains to review | TBD | Internal finalization span, reported separately from client latency and durability |
| T2b | User-observed verified finalization | Client begins its first valid attempt to send the exact canonical signed envelope, using its monotonic clock | Same client verifies inclusion and finality for an envelope with the same signed intent | Aim subsecond, ideally ~500 ms; characterize p50/p95/p99, then select the target percentile; sustainable-load scope remains to review | TBD | End-to-end percentile distribution plus accepted, rate-limited, dropped, timed-out, and Unknown outcomes |
| T2c | Durable finalized progress | Instrumented node observes the finalization decision using a monotonic clock | Required finalized state, journal, and publication watermarks cross their defined durability barriers | TBD | TBD | Barrier spans and crash checks for each persistent member/artifact |
| T3 | Proof/receipt availability | Independent observer first verifies finalization of the containing header, using its monotonic clock | Requested command/publication receipt can be fetched and verifies | TBD | TBD | Exporter and proof-service test by proof kind and encoded size, including the ingestion lag before the store can answer at that size |
| T4 | Query freshness | Independent observer first verifies finalization of the block, using its monotonic clock | Query tier publishes a watermark that includes that block | TBD | TBD | Watermark lag distribution during ingest, compaction, and catch-up |
| T5 | Availability finality lag | An availability layer observes a finalized publication at its persisted chain watermark | Corresponding stored closure is durably pinned as a collection root, or explicit unavailability is recorded | TBD | TBD | Watcher/reconciliation fault test; storage acknowledgement is measured separately |
| T6 | Validator ordinary restart | Process termination is detected | Same identity is safely ready to vote at the current head | TBD | TBD | Restart test with durability barriers, fencing, and no equivocation |
| T7 | Validator fresh bootstrap | Empty replacement environment starts with approved trust material | Node verifies bootstrap data, catches up, and is ready under the identity handoff policy | TBD | TBD | Bootstrap test recording bytes, source, target verification, and tail sync |
| T8 | Store and proof-service recovery | Loss or declared rebuild start | Required history coverage and proof serving are restored and verified | TBD | TBD | Recovery test from each approved independent copy: rebuild of the store from the mirror, and restore of the mirror from the store |
| T9 | Derived-view rebuild | Empty query/index environment starts from an authenticated source set | Required tables reach the declared finalized watermark and cross-check successfully | TBD | TBD | Rebuild throughput, manifest comparison, and discrepancy report |
T2b is the primary user-facing latency expectation requested by O3. With seven validators,
admission Accepted uses f + 1 = 3 effective-validator acknowledgements while finality requires
quorum 5; the two observations cannot be substituted. Wall-clock or consensus timestamps may be
recorded as context but are not subtracted to calculate latency. Accepted is
not finality; consensus finalization, later durable progress, and later receipt
availability are separate observations. A complete user push
also requires a durable storage acknowledgement from each availability layer the client uploads to,
measured independently from T2a-c and T5.
The supported outage envelope must separately state:
- which validator, region, cluster, network, credential, and operator failures may be simultaneous;
- which combinations must retain safety only and which must retain both safety and liveness;
- maximum planned/unplanned absence before restart, catch-up, or fresh bootstrap is required;
- which external-service outages may delay admission, proofs, queries, settlement, or availability without changing consensus validity.
6.1 Recovery objectives and reset policy by environment
The owner explicitly accepts destructive resets of pre-mainnet devnet and qualification testnet, provided every reset creates a new chain identity. Test history, balances, credits, and namespaces need not survive those resets. This permission does not turn deletion of a sync marker, partial database replacement, or validator-identity reuse into a supported recovery procedure.
| Environment | Accepted reset/continuity posture | Proposed evidence objective | Target or dated deferral required before |
|---|---|---|---|
| Disposable devnet | Full reset is allowed with a new genesis and chain_id; no continuity promise for test history or credits |
Prove clean bootstrap, deterministic execution, ordinary restart, explicit full reset, and receipt verification; retain artifacts needed to diagnose the run | Harness timeouts and developer feedback objective before the devnet campaign |
| Qualification testnet | Campaigns may reset to a new chain identity; preserving chain data between campaigns is optional, but a recovery campaign must preserve the exact state it claims to recover | Qualify T6-T9, single-signer fencing, crash points, rebootstrap beyond the retained window, DKG custody, exporter failover, store loss, and rebuild from authenticated copies | Restart, bootstrap and store-recovery planning targets and soak length before the relevant recovery campaign |
| Mainnet | No reset authorization or continuity waiver is accepted; ordinary recovery must not roll back finalized consensus state, and a new chain is a reset-class incident rather than an RTO mechanism | Require reviewed fencing, custody, backup/restore, independence of the two store copies, alerting, incident procedures, and measured recovery under the approved topology | Numeric recovery objectives, simultaneous outage envelope, store RPO/RTO, and owner acceptance before placement approval and mainnet readiness |
Accepted development direction (owner, 2026-09-19), incorporated in specification revision 4: use the source-supported fixed epoch-zero composition with seven genesis validators and an unchanging committee. Provision one trusted-dealer threshold output and one share per validator at genesis; retain the production-shaped threshold VRF, Random V1, Stateful/Deferred path, three database members, Makechain executor, and proof/receipt path. Omit the epoch orchestrator and continuous reshare actor. A genesis-bound profile must deterministically reject validator-set scheduling and consensus-critical releases that require a future epoch; they cannot be accepted as no-ops. The source basis is architecture evidence (external site) and its pinned Commonware contracts, plus the Constantinople fixed-epoch assembly cited in §9.1. This profile narrows early tests to deterministic execution, storage, consensus, restart, and proofs. It does not qualify DKG/reshare, epoch boundaries, membership transitions, production custody, or recovery topology, and it does not amend the mainnet specification. The owner accepted a reset to real bootstrap DKG and reshare qualification after the fixed development stage. Qualification testnet must exercise those specified paths before mainnet readiness.
Recovery objectives are staged decisions. Before each campaign, record either a proposed planning target for the T6-T9 boundary under test or a dated deferral with an owner and evidence trigger. Unknown production topology, cost, and recovery values do not block P2 module and interface design; they do block the affected recovery qualification, production placement approval, and mainnet readiness.
The sequencing boundary is deliberate. Devnet work first proves protocol correctness, canonical bytes, propose/verify/apply parity, roots, rollback, restart, and proof verification. Qualification testnet adds realistic persistence, failures, epochs, publication, and topology experiments. Mainnet is gated on security hardening: durable and erasable SecretStore custody, least-privilege credentials, audited signer fencing, environment isolation, monitored recovery sources, and practiced runbooks. Passing a disposable correctness test does not satisfy a mainnet hardening gate.
7. Resource and retention calibration matrix
| Surface | Sizing driver and unit | Fixed constraint or current derivation | Measurement needed before commitment | Calibration output |
|---|---|---|---|---|
| Validator resident state | Live physically undeleted records by family; bytes/live record | Growth is priced and gross-creation-rate-limited, never capped; expired or invalidated records remain until explicit deletion | Family mix, allocated index bytes, bitmap/tree cost, caches; peak-minus-steady memory by pending fork depth, touched keys, delayed finality, and cancellation | Memory profile, speculative/rebuild headroom, upgrade threshold, max_new_records feasibility |
| Validator membership window | Membership operations and operations/s | Current specification window is 2^26 operations; analysis estimates about 42 wire bytes and 106 persisted bytes/operation, about 2.8 GB wire and 7 GB disk per full window |
Measure retained bytes, prune/retry behavior, file descriptors, and turnover at representative rates | Window and storage/headroom recommendation |
| Validator block/certificate history | Finalized blocks/s and encoded bytes/block | Retention is bounded by retained_marshal_blocks; dividing it by peak block turnover gives a planning horizon, not a guaranteed time floor |
Restart/sync needs, publication outage coverage, rapid catch-up and burst turnover, evidence demand, disk and I/O under block mix | Planning horizon tied to recovery objective and measured burst/catch-up sensitivity |
| Validator recovery journals/metadata | Members, batches, speculative heads, recovery horizon | Durability and reconciliation are owned by the storage/glue assembly | Crash points, bytes and I/O, cancellation, target reconciliation | Recovery horizon and durability budget |
| Store membership history | Cumulative membership operations | Specification analysis estimates about 106 bytes/operation and about 106 GB at 10^9 operations; derivation, not measurement |
Actual bytes/op, persisted Merkle-node overhead on the store's backend, proof latency as history grows | Annual growth and operational sharding/profile |
| Store block-history accumulator | Finalized block count | Specification analysis estimates about 212 bytes/block in the store; derivation, not measurement | Actual batch/node overhead and proof-serving cost | Annual growth and proof profile |
| Store bodies/certificates/DKG evidence | Blocks/s, encoded bytes/block, epoch/DKG frequency | The store and the mirror each retain the complete required history | Compression, indexes, certificate/dealer-log sizes, read amplification, mirror object-count overhead | Annual storage and second-copy budget |
| Certified object publication | Finalized encoded blocks, certificates, operation-log slices, height index, watermark, replicas | Published objects are content-addressed by block_hash and verified against certified headers; replication beyond the two copies is an open decision |
Encoded size, object overhead, write lag, repair/retrieval throughput | Retention, replication, and egress budget |
| Store history-table growth (exoware-sql query tier) | Rows/command/event/membership plus object metadata | Rebuildable from authenticated sources; freshness is not consensus | RocksDB bytes/row, compaction overhead, keyset-query and SubscribeFinalized throughput |
Schema-prefix/rebuild policy and freshness capacity |
| External availability layers | Unique object-closure bytes, replication, staging and collection roots, summed over the layers serving a project | Object availability is separate from chain validity; finalized publications remain collection roots, and a project may have several layers with different disclosure policies (availability profile) | Deduplication ratio, closure expansion, reconciliation lag, repair and serving load, and the per-layer fan-out of a single upload | Retention/replication budget under each layer's obligations |
For resident state, report both logical and allocated memory:
resident bytes ~= sum_f(live_records_f * measured_allocated_index_bytes_per_record_f)
+ activity_bitmap + grafted_tree + bounded_caches
+ speculative_headroom + rebuild_headroom
For yearly retained growth, sum measured encoded sizes by artifact and apply only reviewed replication factors. Keep logical bytes, allocated bytes, transfer bytes, and replicated billed bytes as separate columns. Do not extrapolate store or availability cost from validator retention.
8. Topology and failure-domain questionnaire
Complete O4 and O6, and make the consequences of accepted O1 explicit, before selecting deployments:
| Question | Owner answer |
|---|---|
| Who operates each launch validator, and can one administrator act on multiple voting identities? | Accepted: the owner's team operates all seven genesis identities in one organizational/admin trust domain; later operators are explicitly trusted and permissioned |
| Which operators, cloud accounts/projects, clusters, regions/zones, networks, credentials, and deployment pipelines are shared? | TBD |
| Which failures are considered independent, and what evidence supports that claim? | TBD |
| How is a voting identity fenced during restart, pod replacement, restore, and operator handoff? | TBD |
| Who holds DKG material and transport/signing keys; what survives an operator or region loss? | TBD |
| What maintenance concurrency is allowed without losing the required quorum/liveness? | TBD |
| How many complete copies of stored history exist, who operates them, and which failure domains do they share with validators? | Two failure-isolated copies are required and selected: the exoware store and the mirror bucket with retention lock. Operators and the exact failure-domain definition are TBD |
| On what network does the store run, and who may reach it? | The store authenticates no caller of its own, so it runs on a private network reachable only by the exporter, the standby, the proof service, the indexer and the gateway, behind an authenticating proxy that admits writes only from the two exporter identities; the exact network boundary is TBD |
| What independent authenticated sources can rebuild validator history, the store, the mirror, and derived views? | TBD |
| What history must remain retrievable if the initial team, a cloud account, or one storage backend is unavailable? | TBD |
| Which services may share administration without being described as independent? | TBD |
Seven validator processes are intentionally not seven independent operators. They remain seven logical identities under one accepted trusted-operator model. If the outage objective requires liveness through loss of any one infrastructure domain, no such domain may contain more than two of the seven identities; a 3/2/2 placement would halt on loss of the three-identity domain. This is a constraint to evaluate after O4, not a selection of regions, clusters, or products. A validator identity has exactly one active signer; ambiguous failover halts rather than risking two signers.
| Environment | Required topology posture |
|---|---|
| Devnet | May use one cluster/admin domain and accept a correlated halt; keeps seven logical identities for protocol tests but produces no production-topology qualification evidence |
| Qualification testnet | Mirrors the production infrastructure-domain constraint selected by O4; exercises loss of one, two, and three identities plus exporter, store and mirror outages |
| Production | Owner-team and explicitly trusted permissioned operators only; infrastructure distribution must meet O4, and no survivable failure domain may hold more identities than that objective permits |
P1 decides the outage objective, simultaneous fault/maintenance allowance, the failure-domain meaning for the two store copies, and restart and publication-outage objectives. P4 later selects exact regions, projects, clusters, storage, fencing, SecretStore custody/erasure, and recovery procedures.
8.1 Cost/latency topology comparison before placement
The owner selected one GCP region for the first disposable seven-validator devnet on 2026-09-19. Seven distinct identities/shares and fenced durable validator stores remain mandatory; a region outage stops that devnet. Exact region, zone placement, and production topology remain open. For production qualification, no topology candidate or zone/region-loss guarantee is selected. Compare each candidate with the same seven-validator workload, machine class, storage profile, history age, and test seed. Record fifth-fastest vote/certificate path latency, T2a/T2b percentiles, inter-domain bytes, required clusters/projects, storage replicas, recovery traffic, and operator complexity; obtain current prices only when turning measured resource use into a budget.
| Candidate shape | Healthy-path hypothesis to test | Correlated-failure consequence to state |
|---|---|---|
| One cluster in one low-latency locality | Smallest network and operational path; shared control plane may simplify iteration | Cluster, credential, or locality loss may halt all seven |
| Multiple clusters in one low-latency locality | Similar network path with control-plane and deployment separation | Locality and owner-admin failures remain correlated |
| Validators split across regions | Cross-region delay may enter proposal, fifth vote, certificate, body, and recovery paths; rotating leader location affects the tail | Survivability depends on the unselected distribution and outage objective, not on the label “multi-region” |
| Quorum-local five plus two remote | A local five may keep the common quorum path short; remote-led rounds, catch-up, and loss of the five-member locality can dominate tails or halt | It is not region-loss tolerant and concentrates quorum custody/infrastructure |
The comparison reports cost drivers rather than prices: validator and cluster count, inter-region egress, replicated persistent bytes, store and mirror duplication, load-balancer and observability surfaces, operator time, and recovery transfer. A topology advances only if it meets the eventual latency and recovery objectives with headroom under medium and high bands; a fast empty-block result or a low average RTT is insufficient.
9. Measurement-first qualification method
Before promising numeric capacity or latency:
- Instantiate accepted O2 as a workload manifest with expected, burst, and stress profiles; resolve O3/O4/O6 before treating those profiles as acceptance targets.
- Characterize one dimension at a time to locate byte, work, creation, storage, proof, and queue limits; then run mixed scenarios that expose contention between them.
- Record revision and protocol parameters, topology, machine/storage/network profile, dataset and history age, workload seed, warm/cold state, duration, offered and completed load, and artifacts.
- Measure resource use and latency distributions at the boundaries in section 6. Include errors, timeouts, queue depths, lag, recovery after the burst, and correctness checks.
- Repeat failure/restart tests at controlled crash points. Verify roots, replay marks, deposits, watermarks, proof results, and identity fencing rather than accepting process readiness alone.
- Convert a measured knee or limit into a proposed operating point with stated headroom. Owner review turns it into a target or calibrated parameter; the evidence remains environment-specific.
Source inspection and analytical sizing may validate formulas or library behavior, but they cannot establish assembled throughput, tail latency, recovery time, or production capacity. No benchmark output or source-inspection note by itself marks an architecture qualification item as passed.
Pinned source inspection used for this draft (not qualification evidence):
| Source | Supports | Limitation |
|---|---|---|
spec/SPECIFICATION.md §§9.3, 9.6, 10, 12.7, 17.5; spec/state-machine.md; docs/operations.md §8 |
Gross resources versus resident keys, membership operations, retention, admission/finality/recovery boundaries | Specification and derivations; no assembled measurement |
Commonware v2026.9.0 (d476a2361ce6840d2b9d0aa6fb30a924429046d4), glue/src/stateful/{mod.rs,db/mod.rs} |
Pending merkleized tips, one-time state sync, and finalization handles whose durability barrier must be awaited | Library behavior only; Makechain assembly untested |
Same pin, storage/src/qmdb/current/batch.rs and glue/src/stateful/actor/{core/mod.rs,processor/mod.rs} |
Copy-on-write dirty bitmap chunks and configured pruning beyond the pending-ack base | No source-backed memory/capacity number |
Same pin, storage/src/journal/contiguous/blobs.rs and storage/src/qmdb/benches/scale.rs |
Existing blobs reopen at initialization; scale harness separates generation, reopen, cache, and concurrency | Harness organization is not a Makechain benchmark result |
Same pin, docs/blogs/pipelining-simplex.md and consensus/src/simplex/config.rs |
Published Simplex result used header-only blocks; timeouts are controls to sweep | Neither predicts transaction throughput or latency |
9.1 Sub-second finalization: source evidence and comparison to qualify
Owner direction is subsecond finalization, ideally around 500 ms. This is an architecture goal, not a demonstrated result. The earlier 5s p95 / 15s p99 choice is a throughput-oriented fallback, not permission to optimize only for multi-second latency. The accepted sequence is to characterize p50/p95/p99 first and select the target percentile from those measurements. Workload scope remains a separate reviewed input. This is not pending owner input before characterization or P2. Characterize both internal consensus and client submission-to-verified-finality boundaries; the owner has not accepted a 500 ms p95 commitment or a consensus-only promise. Revisit the acceptance rule when the measured distributions and workload are available.
All Commonware citations below refer to v2026.9.0 at the commit listed above, read using
git show v2026.9.0:<path>, rather than the newer working checkout.
| Evidence | Architectural consequence |
|---|---|
consensus/src/simplex/mod.rs:1-77 describes two network hops to notarization and three to finalization, with application certification before finalize voting |
Subsecond finality is a reasonable hypothesis to test against actual quorum geography and application work; failure timeouts are not target block intervals |
consensus/src/marshal/standard/deferred.rs:15-22,489-501,826-876 overlaps application verification and proposal persistence with voting; certification waits for the required results |
The specification already selects this latency-hiding adapter. Preserve its verification and persistence gates; measure execution, Merkle work, body transfer, persistence, and quorum waits separately |
consensus/src/simplex/elector.rs:65-168,198-206,232-312 exposes stable terms/lookahead through RoundRobin::with_term; Random cannot use term lengths greater than one |
Stable leader pipelining is a candidate consensus configuration, not a tuning switch on the specification's current Random V1/rotating configuration |
consensus/src/simplex/actors/voter/state.rs:447-490,594-605 enforces stall deadlines and jumps to the next term on nullification; consensus/src/types.rs:386-425 defines coverage |
The specification's consensus rationale (§13.8) corrects the earlier claim: a quorum nullification skips the remaining term. Timeout, quorum formation, censorship, and speculative-memory tradeoffs still matter |
glue/src/stateful/mod.rs:74-98 supports pending speculative state and is compatible with Deferred and coding Marshaled, but not Inline; glue/src/stateful/actor/core/processing.rs:409-466 separates applied/readable state from the database durability barrier |
Keep the Stateful/Deferred integration and test speculative ancestry, cancellation, restart, and acknowledgement barriers. Switching to Inline to remove checks is not a compatible optimization |
docs/blogs/pipelining-simplex.md:121-131 reports 200 blocks/s and 300 ms browser-delivered finality using header-only blocks without transactions or execution |
Useful consensus evidence, not Makechain qualification. Pipelining reduces proposal waiting/cadence; it does not itself shorten proposal-to-finalization latency |
Constantinople 42d0b3abfd89a3f6f31b1ee44f5f9f516a25bdc0, Cargo.toml:52-66, crates/engine/src/engine.rs:481-563, bin/validator/src/run.rs:891-904 |
Its Commonware 2026.7.0, coding Marshaled, fixed-epoch RoundRobin assembly differs from Makechain's. Its seconds-long failure timers do not impose seconds-long healthy finality |
Same Constantinople revision, crates/mempool/src/webserver/http.rs:126-174, dashboard.json:2768-2788 |
Submission can wait for a node's finalization status; ingest acknowledges earlier. Internal latency instrumentation and node-reported status are not a client-verified Makechain receipt measurement; no captured latency result was found in this pass |
The reference codebase's README subsecond-finality and approximately 200 ms block statements were
also checked. They are not equivalent to a reproducible 500 ms client-finality result. Its
checked-in bench/baselines/pre-testnet-baseline.md:38-48 reports a different, small local-Docker
experiment; docs/design/makechain-protocol-redesign-validated.md:525-533 reports block cadence and
application work, not the same end-to-end boundary. These are historical context only, never architecture
or performance baselines for the new chain.
Recommended qualification comparison, not permission to change the specification or run experiments:
- Use the specified Random/rotating + Stateful/Deferred configuration as the baseline with real Makechain PUSH execution, three database members, signatures, proofs, and durable acknowledgements.
- Compare a candidate RoundRobin stable-term configuration with bounded optimistic lookahead. Changing elector or term length requires an explicit protocol decision; after launch it follows the consensus-critical release procedure. Keep the same workloads and topologies for comparison.
- Sweep proposal batching delay/size, pending-work bounds, storage/network profiles, and verification concurrency without changing serial application semantics. Measure sustained useful throughput and foreground latency during bulk imports, not only small empty blocks or saturated block cadence.
- Record admission/queue time, proposal construction, body dissemination, execution/Merkle and persistence gates, notarization, certification, finalization, readable state, database durability, proof delivery, and client verification. Overlapped stages are not added as if they were serial. Low finalization latency cannot be inferred from a high blocks-per-second count.
- Exercise failed and selectively censoring leaders, term skips, delayed finalization, epoch/DKG boundaries, restart, abandoned speculative state, and publication backpressure. Include memory and bandwidth costs of lookahead and high block cadence in the same comparison.
- Compare candidate network-latency matrices and costs before placement. Both the quorum path and rotating leader location matter; faster five-of-seven quorum formation may coexist with slow outliers whose queues or recovery costs make the topology unsustainable. No region/zone survival promise follows from a fast healthy-path result.
Review the incorporated §13.8 rationale correction and baseline-versus-candidate qualification results separately. The factual correction does not, by itself, select stable terms or establish 500 ms feasibility. P1 owns the goal and comparison requirements; P2/P6 own integration design and executable qualification. No benchmarks have been run in this planning pass.
10. P1 exit checklist
- [x] Eventual launch services/clients and the external consuming-application boundary are recorded.
- [x] Protocol-first development sequencing and required protocol workflows are recorded.
- [x] O1 trusted, permissioned validator-operator model is accepted; infrastructure/custody correlation and outage objectives remain open under O4/O6.
- [x] O2 heavy concurrent agent publishing is selected as the primary qualification workload.
- [x] O3 subsecond/~500 ms latency aspiration is recorded for T2a/T2b; measurement-first percentile selection is accepted sequencing; workload scope and the final acceptance rule remain to review.
- [x] O4 placement follows cost/latency research; no zone/region guarantee is implied and recovery objectives remain open.
- [ ] Expected, burst, and stress manifests have reviewed numeric values.
- [ ] Command rates, traffic mix, PUSH/ref batch distributions, and proof/query traffic are stated.
- [ ] Account, project, resident-record, membership-operation, availability, and yearly store-growth projections are derived from stated inputs.
- [ ] T1-T9 planning targets needed for the next campaign are accepted or have dated deferrals; mainnet objectives remain a readiness gate.
- [ ] Restart, bootstrap, store recovery, and history-source obligations have a next-campaign target or dated deferral and a mainnet gate.
- [ ] Every consequential target links to a future measurement and an architectural constraint or owner.
- [x] All analytical estimates remain labeled; no unmeasured number is presented as demonstrated capacity.
- [ ] Protocol owner and architecture lead review the envelope and record remaining deferrals with an owner, consequence, and revisit trigger.
P1 exits only after this checklist is reviewed. It does not require production measurements or production-cost inputs to exist, but it requires targets, assumptions, formulas, planned evidence, and owned dated deferrals to be distinguishable. Those deferrals may authorize P2 module and boundary work; they still block the affected qualification campaign, placement approval, or mainnet readiness.
11. Design-review disposition and owned deferrals
Architecture review date: 2026-09-19. The protocol-first scope, trusted operator policy, fixed devnet, real Tempo funding, one-region first placement, and the exoware store with a GCS mirror are selected. The synthetic bands and formulas above are suitable inputs for implementation and harness planning; they are not owner workload commitments, accepted production capacity, or calibrated chain limits. The following deferrals close the design phase's ownership questions without inventing measurements.
| Deferred input | Accountable owner | Revisit trigger | What it blocks |
|---|---|---|---|
| Concrete generated workload manifests and beneficiary funding fixtures | Validation lead + settlement owner | Before the first funded Q1/W2 campaign | Running that campaign; never replaced with genesis credit |
| Numeric prices, work weights, consensus limits and service queue/time budgets | Protocol + component owners | Before freezing the campaign's explicit chainspec and service manifest | Maximum-size vectors and executable qualification under that profile |
| Exact GCP region, machine/disk shapes and cluster/zone placement | Platform owner | Before shared devnet provisioning, after initial cost/latency comparison | Deployment, not the node/module contract |
| Finality percentile and sustainable-load acceptance threshold | Protocol owner + validation lead | After the first measured low/medium/high distributions | A performance PASS claim, not correctness experiments |
| T1/T3, exporter publish lag and store ingestion lag targets | Gateway/exporter owners | Before proof/transport performance qualification | Relevant service acceptance claim |
| T4/T5/T9 and published-content availability assumptions | Query and availability-layer owners | Before those integration campaigns and launch | Product/service launch; external application implementation stays separate |
| T6–T8 RTO/RPO, custody protection and independent recovery sources | Platform/security + protocol owners | Before each recovery campaign; production values before placement approval | Recovery performance claims and mainnet readiness |
| Production regions, validator and store fault domains, GCS replication and budget | Platform + protocol owners | Cost/latency/recovery research after disposable devnet characterization | Production placement and mainnet approval |
Every deferral carries this review date. No deferred value may be supplied by an implementation fallback or ambient cloud configuration. Qualification reports record the actual manifest and its owner, and re-open an architecture boundary if the measured results require it.