Successor to the Phase 0 conformance epic (#25, complete: 0A–0F). The 0G readiness review (#29) concluded GO for a shared provider SDK — spine-first, device-model framework deferred, with the conformance harness as the acceptance gate.
Outcome (0G)
- The protocol spine is ~96% identical across ezo/sim/bread. ~1500–2000 LOC of duplication lifts cleanly.
- One hard correctness prerequisite: T0.6 (sim/bread declare+populate
CallResponse.results, like ezo) — done.
- One architectural prerequisite: converge the device-dispatch interface onto bread's adapter-module pattern in ezo+sim (Wave 4). The device framework (registry/threading/discovery generalization) stays deferred to Wave 5.
- Directional model holds:
provider → SDK → contract.
Status (updated 2026-06-23)
Wave 1 — ADPP correctness — ✅ (1 harness item open)
Wave 2 — hygiene — ✅ COMPLETE
Wave 4 — device-dispatch convergence (SDK prerequisite) — ✅ DONE 2026-06-23
All three providers now share the DeviceAdapter descriptor + single typed dispatch shape (bread reference; ezo + sim converged). Verified green on merged main (ezo 28/28 + conf 38/0; sim provider 5/5 + all 16/16 + conf 41/0). Template-hardened (ezo#63: device layer independent of core). Plus: ezo#63 (template hardening), sim#70 (chaos_control cleanup — deferred hygiene). This closes the architectural prerequisite for Wave 5.
Decision: thin dispatch, NO registry. Converge ezo+sim onto bread's shape = per-type free-function modules + a thin dispatch ladder + a shared devices/common/. No registry/vtable — that's the deferred framework (Wave 5). Rationale, grounded in a full device-layer audit: ezo's value-copied RuntimeState makes a registry pure overhead; sim's real fix is a closed enum class + one dispatch site per op (-Werror=switch exhaustiveness, killing ~8 duplicated string ladders); 3 local registries would diverge the providers at the convergence wave and pre-bias the Wave-5 shared design. Behavior-preserving; conformance-gated.
Coordinated Wave-3 capability-convention fixes (same code, sequenced with Wave 4; enforced once the v1.5.0 'Bucket C' harness ships):
Deferred (re-gate after the above)
- Wave 3 remainder: Bucket C harness v1.5.0 release; Hello/WaitReady standard key sets;
get_health decision.
- Wave 4 remainder: logging→sim's
Logger, config toolkit unification, ezo runtime_state shrink, error-mapping→bread 1-stage, DeviceDiscoveryStrategy.
- Wave 5 — extract
anolis-provider-sdk (spine + clean seams; migrate sim→ezo→bread, harness-gated). Needs a named owner before it starts.
Design refs (local working notes): provider-sdk-rfc.md, provider-consistency-audit.md, provider-sdk-0g-readiness-review.md, provider-sdk-wave4-device-dispatch-plan.md (the locked Wave-4 plan). Acceptance gate throughout: anolis-adpp-conformance + the 0F compatibility matrix.
Successor to the Phase 0 conformance epic (#25, complete: 0A–0F). The 0G readiness review (#29) concluded GO for a shared provider SDK — spine-first, device-model framework deferred, with the conformance harness as the acceptance gate.
Outcome (0G)
CallResponse.results, like ezo) — done.provider → SDK → contract.Status (updated 2026-06-23)
Wave 1 — ADPP correctness — ✅ (1 harness item open)
Wave 2 — hygiene — ✅ COMPLETE
just lint) .github#67 (compile-commands forjust lint), Adopt pre-commit (pinned hooks) as the org formatter/lint source of truth .github#69 (org-wide pre-commit — single pinned source of truth, supersedes the interimpipx-pinned format gate)Wave 4 — device-dispatch convergence (SDK prerequisite) — ✅ DONE 2026-06-23
All three providers now share the
DeviceAdapterdescriptor + single typed dispatch shape (bread reference; ezo + sim converged). Verified green on merged main (ezo 28/28 + conf 38/0; sim provider 5/5 + all 16/16 + conf 41/0). Template-hardened (ezo#63: device layer independent of core). Plus: ezo#63 (template hardening), sim#70 (chaos_control cleanup — deferred hygiene). This closes the architectural prerequisite for Wave 5.Decision: thin dispatch, NO registry. Converge ezo+sim onto bread's shape = per-type free-function modules + a thin dispatch ladder + a shared
devices/common/. No registry/vtable — that's the deferred framework (Wave 5). Rationale, grounded in a full device-layer audit: ezo's value-copiedRuntimeStatemakes a registry pure overhead; sim's real fix is a closedenum class+ one dispatch site per op (-Werror=switchexhaustiveness, killing ~8 duplicated string ladders); 3 local registries would diverge the providers at the convergence wave and pre-bias the Wave-5 shared design. Behavior-preserving; conformance-gated.devices/common/+ thin dispatch; control stays shared (reads-only adapters). Sequenced after ezo#52.SimDeviceTypeenum + single dispatch site per op; engine/transport axis kept separate; promote sim's richerdevice_common/CallResult/StartupPolicy. sim#58 NOT folded (cross-repo pin).Coordinated Wave-3 capability-convention fixes (same code, sequenced with Wave 4; enforced once the v1.5.0 'Bucket C' harness ships):
{1..N}(wire-safe; own PR before docs: bump README install pins to v1.6.0 + guard against drift #55)Deferred (re-gate after the above)
get_healthdecision.Logger, config toolkit unification, ezoruntime_stateshrink, error-mapping→bread 1-stage,DeviceDiscoveryStrategy.anolis-provider-sdk(spine + clean seams; migrate sim→ezo→bread, harness-gated). Needs a named owner before it starts.Design refs (local working notes):
provider-sdk-rfc.md,provider-consistency-audit.md,provider-sdk-0g-readiness-review.md,provider-sdk-wave4-device-dispatch-plan.md(the locked Wave-4 plan). Acceptance gate throughout:anolis-adpp-conformance+ the 0F compatibility matrix.