All notable changes to Relativist are recorded here. The narrative is
condensed per release — for the full bundle-level history, see the
frozen docs/_archive/progress.md. For future work, see
docs/reference/next-steps.md.
The format is loosely inspired by Keep a Changelog. Historical
entries below refer to the D-NNN bundles of the original Spec-Driven
Development process (now retired in favour of the lighter RPI
workflow — see CONTRIBUTING.md). Versioning follows
Semantic Versioning from v0.20.0-pre.1 onward; earlier v0.x
releases predate the formal version policy.
Future work tracked in docs/reference/next-steps.md.
- Relicensed from MIT to Apache-2.0 (
LICENSE,NOTICE). The author is the sole copyright holder, so the relicense is clean. Apache-2.0 adds an explicit patent grant and termination clause while remaining OSI-permissive. - Workflow change: retired the Spec-Driven Development pipeline in favour of
RPI (Research → Plan → Implement). New
.claude/agents/(researcher, planner, implementer), newCODING_STANDARDS.md, rewrittenCONTRIBUTING.md. The 12 SDD agents and all per-bundle SDD artifacts are frozen, read-only, underdocs/_archive/. - Reproducibility consolidated: frozen benchmark evidence and the scripts that
produced it moved to a reserved
reproduce_article/folder with its own README, claim→evidence map, and reproducibility table. - Governance added:
CODE_OF_CONDUCT.md(Contributor Covenant 2.1),GOVERNANCE.md,SECURITY.md;docs/MAINTAINER-GITHUB-SETUP.mdfor the GitHub-side configuration. - Hygiene: hardened
.gitignore/.gitattributes(LF-pinned scripts), removed build/log junk, rewrotedocs/INDEX.mdfor the lean layout. No source-code or test changes — the test floor is unaffected.
- D-014 stress-curve campaign infrastructure:
MemoryProbe(TASK-0700),StopRule(TASK-0701),StressCurveDescriptor(TASK-0702), 4-column CSV schema extension (TASK-0703), bash orchestratorscripts/stress_curve.sh(TASK-0704), Python plot generatorscripts/plot_stress_curve.py(TASK-0705), methodology pagedocs/benchmarks/campaigns/stress-curve.md(TASK-0706), 6 dedicated integration tests (TASK-0707). - The campaign dataset itself (locked directory under
results/locked/v2_stress_curve_<DATE>/) lands when TASK-0708 is executed by the operator (overnight, ~7-8h; sentinel atresults/locked/v2_stress_curve_TEMPLATE/SENTINEL.md).
v0.20.0-pre.1 — 2026-05-05 — first v2 pre-release for LAN testing
The first pre-release of the v2 series. v2 is the rewrite that introduces a transport abstraction, a new wire format with optional zero-copy serialisation, an explicit delta protocol for cross-partition state, streaming partition generation for huge nets, and a free-list arena for memory reuse. This pre-release exists so the project can collect Phase 3 LAN data on real-network hardware before the v0.20.0 stable cut.
- Transport abstraction (SPEC-17). Coordinator and worker no longer
bind to TCP directly — they speak through a
Transporttrait, with TCP, Unix-socket, and in-memoryChannelTransportimplementations. Tests now exercise wire-level behaviour without binding ports; switching protocols on a real LAN is a flag, not a rewrite. - Wire format v2 + optional zero-copy (SPEC-18). The default wire
is bincode + framing + CRC32. With
--features zero-copyand the--use-zero-copyruntime flag, payloads ship asrkyvarchives, trading bincode's encode/decode CPU cost for byte-aligned reads on high-bandwidth links. Wire format is gated byPROTOCOL_VERSION; current value is 5. - Delta protocol (SPEC-19). Between rounds, workers ship only the border state that actually changed since the last commutation. v2 on TCP-localhost sends ~42 % fewer bytes per round than v1 did on the same workload. The full state still ships at round 0 (cold start) and on-demand reconstruction; only the steady-state rounds use deltas.
- Streaming partition generation (SPEC-21). The coordinator no
longer materialises the full input net before partitioning — it
partitions in chunks of
--chunk-sizeagents, with--max-pending- lifetimecontrolling how long a deferred chunk may live in the pending queue before forced dispatch. This unblocks reduction on inputs that exceed coordinator RAM. Twodocker composeprofiles exercise both paths in CI:bench-tcpfor streaming,bench-tcp- eagerfor the v1-equivalent eager path. Thestreaming-no-recyclecargo feature ships an alternative build that disables free-list recycling under streaming mode for diagnostic comparison. - Arena management (SPEC-22 v2.4).
Net.free_listis a LIFO of reusable agent slots populated byremove_agentand consumed bycreate_agent. ASparseNetrepresentation backed byHashMapserves as a fallback when dense allocation would overflow the effective arena threshold (max_live_id + 1 > 4 × live_agent_count, the metric corrected by D-011 — see below). The--recycle-policyflag controls when recycling activates;--representationforces a particular layout for benchmarking. - Elastic grid (SPEC-20). Workers can join and leave during a
reduction. The coordinator tracks a hybrid in-process + remote
worker set, accepts join requests within a windowed admission
protocol (
--join-window-min-ms/--join-window-max-ms), and retains finished partitions for late-joining workers (--retain-partitions). Mid-session catastrophic departure recovery is currently exercised by tests but not by locked benchmarks; flagged experimental outsidelocalmode in guide 08. - Spec-Driven Development pipeline. Every change goes through six
stages: SPLITTING (task-splitter) → TESTS (test-generator) → DEV
(developer, TDD RED→GREEN→REFACTOR) → REVIEW (reviewer) → QA
(adversarial) → REFACTOR. The
sdd-pipelineagent orchestrates stage transitions and pinning. Seedocs/WORKFLOWS.md.
This section sketches what each bundle delivered. Numbering follows
the order they ran on develop; for full per-bundle narratives
see docs/progress.md.
- D-005 — Worker-side
CommutationBatch.local_wiring(SPEC-19 §3.4 Shape A). Mint-then-wire ordering,MalformedLocalWiringerror variant,PROTOCOL_VERSION 2 → 3. 11 of 12 G1 parity gate cases passed at Stage 3; the remaining asymmetric CON-DUP strict=false case was closed in Stages 4-6. - D-006 — Hybrid coordinator + elastic grid skeleton (SPEC-20
§3.1-3.3, Option A). The 12 LLM-authored Stage 3 commits required a
full audit (14 CRITICAL + 23 HIGH bugs); REFACTOR shipped per-phase
on top. The reclaim path was deliberately removed and
GridConfig.elastic_departuredefaults tofalse; full elastic reconstruct deferred to v2.1. - D-009 — SPEC-22 Arena Management.
Net.free_list, SparseNet, R22/R30 sparse threshold, R27 debug-assertion families, integration regression suite. 5 CRITICALs found by adversarial QA were resolved in Stage 6 (CompactSubnet wire format issue deferred to TASK-0595). - D-010 — SPEC-21 Streaming Generation. Pull-dispatch FSM,
RequestWork/NoMoreWorkwire variants (PROTOCOL_VERSION 5→6), R10b Strategy A streaming gate,BorderCleanprecision recycling,streaming-no-recyclecargo feature. 4 CRITICAL + 5 HIGH QA findings resolved. - D-011 — Partition perf regression BLOCKER + final v2 baseline.
Empirical bisect identified
partition::helpers::build_subnet_with_ configthreshold metric as wrong:id_range > 4 × live_countmeasured the planning range, not the actual arena memory. Result: every healthy partition was mis-routed to SPARSE, causing +83 % wall onep_con 5M w=2. SPEC-22 amended to v2.4 (R22 metric →effective_arena_size = max_live_id + 1, R30 reworded). Two latent dense-path bugs surfaced during the fix and were closed: Bug 1 (freeport_redirectsnot propagated; SC-001 second surface) and Bug 2 (next_id = 0causing cross-partition AgentId collision; I1 violation post-merge). Defensive guards AF-2 (Net::create_agentfresh-allocation) and AF-3 (merge::core::mergecollision check) added. Bench verified perf restored within noise (~1.11× v1 on ep_con 5M w=2 local). Final TCP/Docker baseline locked atresults/locked/v2_d011_final_baseline_2026-05-04/. - D-012 — Instrumentation Restore. Three CSV columns surfaced as
red flags in the D-011 cold post-mortem (
network_time_secs,compute_time_secs,mips_mean) were structurally zero across all v2 datasets — not regressions of D-011, but pre-existing v2 refactor losses. TASK-0615 wiredInstant::now()around recv/send sites inprotocol/coordinator.rs. TASK-0616 had workers report per-round duration inWorkerRoundStats.reduce_duration_secsand the coordinator aggregates with MAX across workers (BSP critical- path; QA-D012-001 found that SUM producescompute_time > wall_clockfor parallel workers). TASK-0618 traced themips_meanliteral zero toscripts/bench_docker_v2.sh:283Python-in-bash hardcode; patched to recompute from per-reptotal_interactions. TASK-0617 also unblockedcargo test --release(was broken pre-D-011 by debug-only test imports + a non-exhaustive match forWorkerIdMismatch). The canonical post-D-012 baseline is nowresults/locked/v2_post_d012_baseline_2026-05-05/; sample headline decomposition:ep_500k w=1round 0 → wall 0.460 s = compute 0.10- network 0.39 + merge 0.04 + ~0.03 framing.
| Profile | v0.10.1 | v0.20.0-pre.1 | Δ |
|---|---|---|---|
cargo test (default debug) |
690 | 1798 | +1108 |
cargo test --features zero-copy |
n/a | 1842 | NEW |
cargo test --features streaming-no-recycle |
n/a | 1789 | NEW |
cargo test --release |
broken | 1740 | NEW (was uncompilable) |
v1 inviolable floor (frozen on v1-feature-complete) |
690 | 690 | invariant |
- Sequential
mips_meanstill 0.000.total_interactionsis wired in the worker→coordinator path only; sequentialreduce_alldoes not increment the counter. Tracked asD-012-FU-SEQ-MIPS. Cosmetic — does not affect distributed analysis. condup_expansionfloor effect. AtN=1000 w=1v2 reports ~54 ms while v1 reported ~2 ms. Setup-time asymmetry between sequential (which times generation) and distributed (which does not) is the dominant cause. Tracked asD-011-FU-CONDUP.- Bench subcommand has no real TCP path.
relativist benchhardcodesMode::Local; the docker-composebench-tcp/bench-tcp-eagerprofiles are the canonical TCP path for the benchmark harness. Tracked asTASK-0620. cfg(debug_assertions)audit incomplete.TASK-0617fixed four instances of debug-only symbols leaking into#[cfg(test)]-but- non-debug_assertionscode; broader manifestations may still exist. Tracked asTASK-0621.- Hardening backlog. D-013 inherits the SPEC-21/22 hardening
follow-ups originally numbered D-011 before the BLOCKER 2026-05-04
redirect consumed that slot. Inventory in
docs/next-steps.md.
| Spec | Status |
|---|---|
| SPEC-17 transport abstraction | new |
| SPEC-18 wire format v2 (optional zero-copy) | new; PROTOCOL_VERSION up to 5 |
| SPEC-19 delta protocol | new; CompactSubnet free_list deferred to TASK-0595 |
| SPEC-20 elastic grid | new (Reviewed v2; §3.1-3.3 shipped, full §3.4-3.6 reclaim deferred) |
| SPEC-21 streaming generation | new (Reviewed v2) |
| SPEC-22 arena management | new (Reviewed v2.4 after D-011 amendment) |
| SPEC-23..27 | drafted; not yet shipping |
| SPEC-01 invariants | amended (I3 → I3' Uniqueness via D-009 §3.8 A1) |
| SPEC-02 net representation | amended (Net::union via SPEC-20 §3.8 A7) |
| SPEC-04 partition | amended (R10a/R22 via SPEC-22 §3.8 A4) |
| SPEC-13 system architecture | amended (FSM via SPEC-20 §3.8 A5) |
| SPEC-18 wire format | amended (R28 + PROTOCOL_VERSION via SPEC-22 §3.8 A6) |
| SPEC-19 delta protocol | amended (R12a slot-id stability via SPEC-22 §3.8 A8) |
This pre-release is intended for Phase 3 LAN testing on real networked hardware. It is not the v0.20.0 stable cut.
git checkout v0.20.0-pre.1and followdocs/benchmarks/phase-3-lan.mdfor the dual-axis (bincode-only / zero-copy) protocol.- All
--releasebuilds work;cargo build --release --features zero-copybuilds the Axis 2 binary. - File any LAN-specific issues in the GitHub tracker; they will be triaged for v0.20.0-pre.2 or v0.20.0.
v0.10.1 — 2026-04-11 — v1 frozen baseline (last v1 release)
This is the formal v1 freeze. The branch v1-feature-complete and
the tag v0.10.0-bench capture the same commit; v0.10.1 is a
trivial follow-up with the v1 phase 2 baseline data. Test floor: 690.
Frozen baseline lives at results/locked/v1_local_baseline/.
For the v0.2..v0.10 progression (initial reduction implementation,
file format work, deployment skeleton, security primitives, observability,
benchmarks suite, Church arithmetic), consult git log v0.2.0..v0.10.1
and the corresponding tag annotations on the GitHub release page. The
v1 line is now in maintenance mode; new work happens on develop.