Skip to content

Gate min_timestamp semantics + add conformance test before SDK extraction (G4) #47

Description

@CameronBrooks11

Part of the Pre-Wave-5 consistency reconciliation pass (Tier-0 gate G4). Surfaced by the six-subagent pre-extraction consistency audit (2026-06-24).

Problem

min_timestamp (§7.3) freshness handling diverges across the three providers, and no conformance test covers it — so all three pass today and the divergence is invisible:

  • ezo — strict: if it can't meet freshness it returns CODE_DEADLINE_EXCEEDED (src/core/handlers.cpp:471-473).
  • sim / bread — lenient: return CODE_OK with QUALITY_STALE (apply_min_timestamp, byte-identical between sim handlers.cpp:119-133 and bread :68-82).

Under a shared SDK handler this must converge to one behavior. Whichever is chosen silently changes the other side's observable contract — and because the harness doesn't exercise min_timestamp (grep min_timestamp conformance/ = empty), the regression would be undetectable by the acceptance gate. This is the only silent-regression item in the whole reconciliation pass.

Decision (recommended)

Adopt the lenient behavior — return best-available data with QUALITY_STALE — matching §7.3's SHOULD wording ("return best available… indicate staleness via quality") and 2 of 3 providers. This flips ezo from an error to OK+STALE (a deliberate, documented behavior change).

Acceptance

  • Decide + record the canonical min_timestamp semantics in the Wave-5 design addendum.
  • Add a conformance assertion in anolis-protocol/conformance/ (e.g. test_adpp_core.py) exercising a read with min_timestamp set beyond available freshness, asserting the chosen contract (OK + QUALITY_STALE, non-empty values).
  • Land the test before any provider migrates onto a shared handler, so convergence is gated, not silent.
  • ezo behavior change tracked in its pre-extraction PR (DEADLINE_EXCEEDED → OK+STALE).

Blocks: the spine/handler lift in Wave-5 (#45). Evidence: audit note working/provider-sdk-wave5-prereconciliation-audit.md (G4).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions