Phase 3 Consortium Training Roadmap¶
Phase 3 is the historical operational consortium-training program for Lensemble. It extended the Phase 2 path into a Tapestry-style multi-party run: separate participant trust domains, governed membership, networked participant agents, aggregation/DP mechanism reporting with explicit effectiveness status, longer federated training, downstream evaluation, and a public audit bundle. Its checked-in runs predate key correctness fixes; current acceptance status is recorded below rather than inferred from the closed historical tracker.
Tracker: #220
Boundary¶
Phase 3 deliberately excludes the provenance ledger and cryptographic proof layer.
Out of scope:
- provenance-ledger implementation;
- ZK/STARK proof implementation;
- TEE honest-computation proof implementation;
- any claim that participant computation is cryptographically proven;
- paper-scale robotics performance claims without matching evaluation evidence.
In scope:
- ordinary consortium governance metadata;
- participant dataset declarations and dataset cards;
- public-probe versioning and hash pinning;
- run manifests, config hashes, checkpoint hashes, and signatures where already supported;
- aggregation and DP mechanism plumbing with honest reports of whether the optimizer consumed a secure sum and whether the noise/accounting path is effective;
- residency checks and redaction gates;
- generated reports and conservative model-card language.
This keeps the operational consortium release independent from RFC-0006. Future cryptographic contribution work should consume Phase 3 artifacts, not block this phase.
Baseline From Phase 2¶
Phase 2 closed the empirical evidence track in #200. The merged repo and published artifacts show that Lensemble can:
- split and publish two SO-100 participant silos;
- run GPU-backed multi-round federated LeWorldModel-style training;
- publish checkpoint and report artifacts;
- run a compact downstream eval;
- publish a matched naive-FedAvg control;
- generate a final evidence bundle and model card.
Phase 3 raises the bar from a controlled HF Jobs path to a consortium run where participants are independent operational actors.
Workstreams¶
| Issue | Workstream | Exit gate |
|---|---|---|
| #221 | Roadmap/spec and acceptance matrix | Public docs define the Phase 3 contract, issue graph, and non-claims. |
| #222 | Consortium membership and run agreement | Coordinator and participants validate the same machine-readable run contract. |
| #223 | Sovereign participant agent | A participant process joins, preflights, trains locally, and releases only allowed updates. |
| #224 | Networked coordinator and dropout lifecycle | A coordinator service admits participants, assigns rounds, handles dropout, and closes/aborts deterministically. |
| #225 | Multi-participant dataset and public-probe registry | At least four participant declarations validate without raw-data leakage or probe mismatch. |
| #226 | Secure aggregation and DP runtime controls | A consortium smoke run proves optimizer-path secure aggregation and effective cumulative DP, or records explicit blockers. The current report records both blockers. |
| #227 | Long-run consortium orchestration | A reproducible run launches coordinator plus at least four participants and publishes training artifacts. |
| #228 | Downstream eval and matched controls | Evaluation moves beyond the Phase 2 toy boundary where feasible and records blocked controls honestly. |
| #229 | Metrics, failure, and dropout report | Residency-safe observability explains participant lifecycle, timing, communication, and failure outcomes. |
| #230 | Final evidence bundle and model card | A generated bundle verifies all referenced artifacts and preserves the non-cryptographic claim boundary. |
Consortium Contract¶
Phase 3 introduces a consortium manifest consumed by both the coordinator and participant agents. The manifest should capture:
- consortium id and run id;
- coordinator endpoint and accepted protocol version;
- participant ids, roles, owners, and contact metadata;
- participant runtime capabilities;
- accepted WMCP/action/observation contracts;
- public-probe id, version, and content hash;
- model and objective configuration;
- secure-aggregation mode, DP policy, dropout threshold, and retry budget;
- artifact publication targets;
- evaluation budget and model-card claim boundary.
The manifest is a governance and admission contract. It is not a cryptographic identity proof and does not prove honest computation.
The schema and shared validators live in lensemble.config.consortium. Generate
the checked-in four-participant example with:
uv run --extra dev python scripts/phase3_consortium_manifest.py \
--output docs/evidence/phase3_consortium_manifest.example.json
Validate any candidate manifest with:
uv run --extra dev python scripts/phase3_consortium_manifest.py \
--validate docs/evidence/phase3_consortium_manifest.example.json
The example uses simulated trust-domain data refs so it is a contract fixture, not Phase 3 training evidence.
Participant-Agent Contract¶
Each participant agent must run outside the coordinator trust boundary. Before joining a run it must validate:
- its participant id is unique in the manifest;
- local data refs pass the selected adapter smoke checks;
- action and observation shapes match the manifest;
- the public-probe hash matches the consortium version;
- the model config is compatible with the accepted run config;
- residency rules prevent raw observations, raw actions, latents, embeddings, and private action-head weights from crossing the boundary.
During training the agent executes assigned local rounds, emits residency-safe metrics, applies configured privacy controls, and releases only allowed update artifacts.
The #223 participant-agent runtime lives in lensemble.federation.agent and is
exported as lensemble.federation.Phase3ParticipantAgent. It wraps the existing
claim-mode Participant.local_round implementation rather than changing model
internals. The agent writes local resume state under the participant's private
state directory:
delta.safetensors: the released pseudo-gradient delta only;round_state.json: hashes, counts, DP/release flags, and round metadata only;lensemble.log.jsonlandmetrics.jsonl: residency-safe observability.
The CLI preflight surface is:
uv run lensemble federate participant-agent \
--manifest path/to/phase3_consortium_manifest.json \
--registry path/to/phase3_dataset_registry.json \
--participant-id phase3-so100-a \
--coordinator https://coordinator.example.invalid \
--data-source lerobot-h5://path/to/private-silo.h5 \
--state-dir runs/phase3/phase3-so100-a \
data.format=lerobot-h5 \
data.probe_path=path/to/public-probe.safetensors \
objective.target_stop_gradient=false \
objective.lambda_anc=0.01 \
federation.transport=network \
federation.aggregation_backend=masking
This command validates the local participant boundary before any coordinator
message. Assigned-round execution from the CLI is intentionally left to the
network coordinator service in #224; integration tests exercise the runtime over
the in-process test transport. The checked-in example manifest remains a
contract fixture; runtime preflight requires a manifest whose model agreement
matches the participant LensembleConfig.
Coordinator Contract¶
The coordinator service owns round orchestration, not participant data. It must:
- validate the consortium manifest and participant join messages;
- assign rounds and collect heartbeats;
- reject duplicate or late updates;
- apply the configured dropout policy;
- close or abort rounds deterministically;
- publish checkpoint/report artifacts with config and model hashes;
- emit a residency-safe lifecycle trace.
The coordinator must not require access to raw participant trajectories or participant-local action heads.
The #224 coordinator-service runtime lives in
lensemble.federation.service and is exported as
lensemble.federation.Phase3CoordinatorService. It wraps the existing
deterministic Coordinator.try_round() engine with the Phase 3 control plane:
- governed admission against the consortium manifest;
- heartbeat, assignment, update submission, explicit abort, and close-round flows;
- late-join and duplicate-update rejection;
- explicit dropout policy derived from manifest/config quorum, collect timeout, and retry budget;
- residency-safe JSONL trace events for participants and rounds.
The CLI startup surface is:
uv run lensemble federate coordinator-service \
--manifest path/to/phase3_consortium_manifest.json \
--registry path/to/phase3_dataset_registry.json \
--listen https://coordinator.example.invalid \
--run-dir runs/phase3/coordinator \
objective.target_stop_gradient=false \
federation.transport=network \
federation.aggregation_backend=masking
The command validates and starts the service control plane, writes the startup trace, and emits a machine-readable service report. The transport layer owns long-running socket serving; integration tests exercise the service lifecycle over the in-process transport, including a three-participant smoke with one induced dropout.
Data And Public-Probe Registry¶
Phase 3 replaces ad hoc CLI data refs with a registry that declares:
- participant id;
- dataset ref or documented private/mounted location class;
- adapter format;
- windowing and held-out split policy;
- action spec and observation shape;
- dataset smoke report URI/hash;
- public-probe version and hash.
The #225 registry schema lives in lensemble.data.phase3. It validates the
same participant ids, accepted action/observation contracts, public-probe hash,
data refs, adapter formats, windowing, held-out policies, smoke-report hashes,
and license metadata as the consortium manifest. The participant agent and
coordinator service both accept the same optional registry artifact and fail
preflight if it disagrees with the manifest.
Generate the checked-in four-participant example with:
uv run --extra dev python scripts/phase3_dataset_registry.py \
--output docs/evidence/phase3_dataset_registry.example.json
Validate a candidate registry, including the manifest agreement, with:
uv run --extra dev python scripts/phase3_dataset_registry.py \
--validate docs/evidence/phase3_dataset_registry.example.json \
--against-manifest docs/evidence/phase3_consortium_manifest.example.json
The registry must support at least four participant declarations for the public Phase 3 example. Public HF refs are preferred. Private or unpublished participants are acceptable only if the registry records the exact publication blocker and the final model card states the evidence boundary. Public-example mode rejects raw/private dataset paths unless they are explicit placeholders with blockers; private-consortium mode requires an explicit raw-path allowance.
Public-probe governance rules:
- the probe hash is immutable for one
run_id; - any probe change requires a new version and content hash;
- registry, manifest, participant preflight, and coordinator preflight must all be regenerated/validated together;
- model cards must cite the exact probe hash and state whether participant data refs are public, private, or blocked placeholders.
This registry is not a provenance ledger.
Privacy And Aggregation¶
Phase 3 was intended to exercise secure aggregation and DP accounting as operational privacy controls. The current runtime does not meet that privacy boundary:
- secure-aggregation mode and fallback policy are explicit in config;
- the coordinator receives individually visible released pseudo-gradients and commits from them;
- simulated/TEE sums are post-commit fixed-point equivalence checks
(
secure_sum_consumed=false), while masking records an explicit fallback; - per-participant clipping and deterministic replay noise are applied before release, but the shared seed is reconstructible;
- each report creates a fresh one-round accountant after commit
(
effective_dp=false,status=deterministic_replay_only), so the reported epsilon is neither cumulative spend nor a budget-enforcement result; - dropout threshold behavior is tested;
- visible individual updates and replayable noise are reported as privacy blockers.
The #226 runtime report lives in lensemble.federation.phase3_privacy and is
attached to Phase3CoordinatorService after a successful round close. It
records:
- selected secure-aggregation backend and threshold;
- whether an in-process secure sum was consumed (currently false);
- explicit fallback reason when the selected backend cannot run in the local smoke transport;
- aggregate-only hashes/counts, not individual participant ids or update values;
- DP accountant backend, clip/noise policy, sample rate, effective-DP status, and the independent one-round epsilon snapshot for the successful round.
The local Phase 3 smoke uses the simulated backend to cross-check, after commit, that its fixed-point sum matches the coordinator's plaintext reduction. That value is not optimizer input and does not hide individual updates. The masking backend remains the preferred production backend, but local/HF runtimes without pairwise key routing and dropout-recovery shares report an explicit fallback rather than claiming a masked secure-sum reveal.
No Phase 3 artifact should imply that aggregation correctness or participant computation is cryptographically proven.
Training Run Shape¶
Historical evidence notice. Every checked-in Phase 3 training and gauge result in this section predates the correction of the outer-update direction and the
public-probe-v2target-binding contract. The artifacts remain useful for protocol archaeology and failure analysis, but they do not validate the corrected runtime. Issue #335 owns the clean rerun.
The target run should be large enough to demonstrate consortium operation while remaining affordable and debuggable:
- at least four participants or simulated trust domains;
- at least ten closed federated rounds, unless a blocker records the maximum completed evidence;
- claim-mode LeWorldModel objective with
objective.target_stop_gradient=false; - public-probe frame anchoring enabled;
- aggregation and DP mechanisms configured where supported, with effectiveness status reported;
- published checkpoint, report, run manifest, and per-round metric artifacts.
Scaling model size should follow the dry-run evidence. A smaller model that finishes with strong evidence is preferable to a larger run that cannot publish complete artifacts.
The #227 reproducible local lifecycle smoke runs the coordinator service
and four Phase3ParticipantAgent simulated trust domains in one deterministic
no-GPU command:
uv run --extra dev python scripts/phase3_consortium_smoke.py \
--rounds 10 \
--run-dir runs/phase3-long-run-smoke \
--output docs/evidence/phase3_long_run_smoke_report.json
Validate the checked-in report with:
uv run --extra dev python scripts/phase3_consortium_smoke.py \
--validate docs/evidence/phase3_long_run_smoke_report.json
The report records the declared run shape before launch: four participants, ten target rounds, inner horizon, tiny model size, root seed, DP policy, secure-aggregation backend and threshold, eval budget reservation, and artifact repo targets. Its dry-run section validates the manifest, dataset/probe registry agreement, pinned public-probe hash, participant-agent preflight, participant update release, local mount boundary, secure-aggregation threshold, DP policy, and report publication path before the run closes rounds.
The archived local no-GPU smoke records the Phase 3 orchestration path,
checkpoint/ledger/trace/report publication, and aggregation/privacy mechanism
reporting for a tiny synthetic LeWorldModel-flavour run. A separate historical
run executed a related path on real HF Jobs GPU compute. Neither run is current
correctness evidence after the outer-update and probe-contract fixes. The
#243 headline run
ran on an h200 HF Job from pinned commit 056f7407 and closed ten federated
rounds with four participants, all 0-dropped, at latent_dim=256 and
num_tokens=196. Each historical schema-v1 round recorded a secure_sum label and a one-round RDP
epsilon near 5.30 at (δ=1e-5, noise_multiplier=1.0, clip_norm=0.5). Current readers conservatively
classify those fields as a post-commit equivalence cross-check and deterministic-replay-only accounting,
not optimizer-path confidentiality, composed ten-round epsilon, or budget enforcement. The
run produced final global hash
bb31c0922de639cb9220c4cc5fc35d79aec719eb6fcedb09159bdff8cfb8fd43, config hash
27f2c77c9d47a7d053c01ab65f8d43aad79463b27d882f2d85ec28bc062cb2b2, and
run-manifest SHA-256
21819c9b936468ffc38f943b4ce13ec2ac150d328410f503fa73d9014e040c9d.
Per-round effective_rank was ≈36–47 of 256, but that scale-invariant
diagnostic cannot validate a trajectory produced by the pre-fix optimizer. It
is neither a current training result nor a DP guarantee. The
checkpoint, manifests, ledger,
report, and pinned public probe (f1053ffd…) were published to
abdelstark/lensemble-phase3-consortium-checkpoint
at immutable revision 828e210cba4870b2be4ab573a5f0dd4ee30bae29
(publication.status: hf_jobs_release in the historical artifact).
The training silos are published as the four participant trust domains plus a
held-out split in
abdelstark/lensemble-phase3-so100-silos
at revision 15f71911432b300dfdf41c998e27492e8c986be4: phase3-so100-silo{0..3}.h5
(1284/1339/1261/1259 windows at window_steps=4, distinct Merkle roots) and the
held-out phase3-so100-silo4.h5 (1216 windows). The long-run dataset registry at
docs/evidence/phase3_long_run_dataset_registry.json
is placeholder-free, with all four silos published.
Evaluation And Controls¶
The controls below are hash-bound historical measurements. The eval producer
now records the lifecycle smoke under consortium-runtime-smoke—never
anchored-federation—and emits the anchored row only when the immutable
anchored report and run manifest are supplied. These rows do not validate the
corrected optimizer.
Phase 3 must not stop at training scalars. The eval plan should declare:
- task/environment ids;
- held-out policy;
- planner budget;
- seeds;
- metrics;
- expected and falsifying outcomes;
- matched controls.
Controls to attempt:
- local-only;
- naive FedAvg;
- anchored federation;
- Fork A or frozen-encoder fallback;
- centralized/pooled only where licensing and governance allow it.
Missing controls must be explicit blocked rows in the final report.
The #228 eval report is generated from the #227 long-run evidence:
uv run --extra dev python scripts/phase3_eval_report.py \
--long-run-report docs/evidence/phase3_long_run_smoke_report.json \
--output docs/evidence/phase3_eval_report.json
Validate the checked-in report with:
uv run --extra dev python scripts/phase3_eval_report.py \
--validate docs/evidence/phase3_eval_report.json
The eval report at
docs/evidence/phase3_eval_report.json
now records four completed matched controls and zero blocked controls. The
controls were run as separate a10g-large HF Jobs with configured noise off, six rounds, and
latent_dim=256, each published as its own probe checkpoint:
- anchored-probe
abdelstark/lensemble-phase3-consortium-anchored-probe@567755d2— round-0 inter-participantframe_drift48.97°; - naive-fedavg
…-naive-fedavg@1aace225—frame_drift180°; - fork-a-frozen-encoder
…-fork-a@148e4217—frame_drift0° witheffective_rankconstant at 2.39 (the safe-degrade path); - local-only
…-local-only@a696da17— per-participanteffective_rank≈120 with inter-participantframe_drift180°.
The historical gauge observation: on real SO-100 data the old frame-anchor run reduced
inter-participant latent frame-drift at aggregation (anchored round-0 48.97°
versus naive 180°), which is the RFC-0002 signal. Fork-A frozen-encoder is
the 0° safe-degrade, and local-only silos train healthily (effective_rank
≈120) but diverge maximally (180°) without a shared frame. This is the gauge
contrast from superseded runs, not a current benchmark or robotics
task-performance result.
Observability And Dropout¶
Phase 3 consortium runs must be inspectable without widening the participant data boundary. The #229 observability report is generated from the #227 long-run report, the #228 eval report, and a deterministic induced-dropout smoke:
uv run --extra dev python scripts/phase3_observability_report.py \
--long-run-report docs/evidence/phase3_long_run_smoke_report.json \
--eval-report docs/evidence/phase3_eval_report.json \
--run-dir runs/phase3-observability-smoke \
--output docs/evidence/phase3_observability_report.json
Validate the checked-in report with:
uv run --extra dev python scripts/phase3_observability_report.py \
--validate docs/evidence/phase3_observability_report.json
The report records participant lifecycle events, closed-round state summaries, dropout decisions, retry budget and retry consumption, event-index timing, released pseudo-gradient communication volume, aggregation/privacy mode, artifact publication status, and metric cross-references back to run ids, participant ids, config hashes, checkpoint hashes, and source report hashes.
The observability report at
docs/evidence/phase3_observability_report.json
is regenerated from the real headline run: 11 round summaries and one induced
dropout. The induced dropout drops one of four participant agents after
assignment; the remaining three satisfy the effective quorum
(effective_quorum=3 of 4), so the round closes with historical secure_sum and DP-accounting labels
while the report records that no retry was consumed and the
redaction contract stays enforced. Under the current schema these labels mean a post-commit sum
cross-check and an independent one-round replay snapshot, not live secure aggregation or effective DP.
This is operational failure-mode evidence,
not a performance comparison.
The redaction contract is fail-closed: reports may contain hashes, counts,
participant ids, artifact URIs, and finite scalar metrics, but not raw data,
raw observations, raw actions, latents, embeddings, private action-head
weights, model tokens, secrets, or sensitive host-local paths. The #230 final
bundle must consume docs/evidence/phase3_observability_report.json; because
the report includes an induced dropout, no no-failure exception is needed.
Evidence Bundle¶
The final generated bundle should aggregate:
- consortium manifest;
- dataset/probe registry;
- training report;
- privacy/aggregation report;
- observability/dropout report;
- evaluation and control report;
- checkpoint refs and hashes;
- model-card text.
Bundle generation must verify referenced artifacts exist before emitting an artifact-integrity-valid bundle. The checked-in and published bundle must be residency-safe; artifact integrity does not imply optimizer correctness.
The #230 final bundle generator materializes the run-specific consortium manifest and dataset/probe registry from the #227 long-run evidence, then aggregates all Phase 3 reports and the local final checkpoint header/weights:
uv run --extra dev python scripts/phase3_bundle.py \
--output docs/evidence/phase3_evidence_bundle.json \
--model-card-output docs/evidence/phase3_model_card.md \
--manifest-output docs/evidence/phase3_long_run_smoke_manifest.json \
--registry-output docs/evidence/phase3_long_run_smoke_dataset_registry.json
Validate the checked-in bundle/model-card pair with:
uv run --extra dev python scripts/phase3_bundle.py \
--validate docs/evidence/phase3_evidence_bundle.json \
--model-card docs/evidence/phase3_model_card.md
The generated bundle verifies the local manifest, dataset/probe registry, long-run report, eval/control report, observability/dropout report, privacy/aggregation rows embedded in the training report, run manifest, and final checkpoint header/weights before writing an audit bundle. Validation also binds the run-manifest and final checkpoint artifact-check SHA-256 values to the hashes recorded in the training summary, so the checked-in report cannot drift from the referenced release artifacts. Absolute local artifact paths are rendered as residency-safe artifact URIs rather than host-local paths. The generated model card distinguishes the synthetic lifecycle smoke, separately hash-bound SO-100 controls, privacy mechanism plumbing, and explicit non-claims.
The checked-in Phase 3 bundle at
docs/evidence/phase3_evidence_bundle.json
and the model card at
docs/evidence/phase3_model_card.md bind one
coherent historical smoke identity: run phase3-long-run-smoke-v1, probe
ddc8349f…, its exact checkpoint, and four separately sourced control runs.
The bundle records publication.status: historical, nine local artifact
checks, zero optimizer-consumed secure-sum rounds, and zero effective-DP
rounds. The associated SO-100 dataset revision is explicitly not bound to the
synthetic smoke.
The historical downstream eval report at
docs/evidence/phase3_downstream_eval_report.json
(also published to the checkpoint repo) records pre-fix held-out SO-100 latent
metrics. It is a non-usefulness audit: effective_rank ≈35.8/256 is
scale-invariant and blind to the approximately 7.5e-6 latent variance
recorded in the generated report. The associated central-ceiling audit did not
establish downstream usefulness. Neither observation validates the corrected
optimizer; #335 owns the
rerun. Closed-loop physical task-success stays blocked with two specific
blockers: stable-worldmodel is unvendored
(#96, maintainer-gated), and
the checkpoint is not downstream-useful despite its proxy val_pred/effective_rank
scalars (#244).
The immutable revision 828e210cba4870b2be4ab573a5f0dd4ee30bae29 remains an
audit snapshot. It contains pre-correction artifacts and must not be presented
as the corrected runtime release. A replacement publication is blocked on
335.¶
Acceptance Matrix¶
The matrix distinguishes live software contracts from superseded empirical results. “Historical” means the artifact is retained and validated as data, not accepted as evidence for the corrected training loop.
| Gate | Current status |
|---|---|
| Membership and data declarations | Implemented and tested. The published SO-100 silo revision exists, but it is not bound to the bundled synthetic smoke. |
| Runtime lifecycle | Implemented and tested for participant admission, round closure/abort, dropout, and artifact emission. A new multi-operator run is still pending. |
| Residency and redaction | Implemented and tested on generated reports. |
| Optimizer-path secure aggregation | Blocked. The coordinator consumes plaintext released updates; simulated/TEE sums are post-commit cross-checks. |
| Effective cumulative DP | Blocked. Historical noise is deterministically replayable and accounting is recreated per round. |
| Corrected multi-round training | Blocked on #335. All checked-in Phase 3 metrics predate the outer-update and probe-contract fixes. |
| Matched controls | Historical and hash-bound. They are representation-gauge rows, not current benchmark or robotics results. |
| Closed-loop SO-100 usefulness | Blocked on #96 and a non-collapsing corrected checkpoint. |
| Replacement release | Blocked on the corrected rerun. Revision 828e210c… remains an immutable audit snapshot. |
Final Claim Boundary¶
The repository currently supports this statement:
Lensemble implements and tests a federated JEPA research runtime with participant-local training, typed update contracts, deterministic round lifecycle, gauge diagnostics/alignment, artifact binding, and explicit privacy-effectiveness reporting. Its preserved Phase 3 runs are historical failure-analysis artifacts pending a clean rerun of the corrected loop.
It does not claim:
- that the historical Phase 3 metrics validate the corrected optimizer;
- optimizer-path secure aggregation or effective cumulative DP;
- cryptographic proof of participant computation;
- provenance-ledger-backed contribution accounting;
- closed-loop physical SO-100 success;
- broad robotics generalization;
- paper-scale LeWorldModel performance.