Skip to content

Epic: provider SDK extraction (Phase 1) #40

Description

@CameronBrooks11

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)

  • anolis-provider-sim#59 — CallResponse.results (T0.6) + min_timestamp (T0.7)
  • anolis-provider-bread#51 — T0.6 + default signal set (T0.2) + provider_name (T0.5) + min_timestamp (T0.7)
  • anolis-provider-ezo#53 — curated default signal set (T0.2)
  • anolis-protocol#41 — harness assertions for §7.2 default-set + §8 results (the one remaining Wave-1 item)

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.

  • anolis-provider-ezo#55 — per-family read modules + shared devices/common/ + thin dispatch; control stays shared (reads-only adapters). Sequenced after ezo#52.
  • anolis-provider-sim#61 — closed SimDeviceType enum + single dispatch site per op; engine/transport axis kept separate; promote sim's richer device_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):

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions