Document the live-staleness pattern (and record the surface-derive deferral)
Surface's staleness is a pure function of now at report-build time; reactivity is diff-based (checkpointFromReport + buildTrustReport({since}) + diffFreshness + recomputeChangeRecords). src/recompute.ts records the packaging decision: a stateful watcher is exactly what would justify an optional @kontourai/surface-derive package, deferred "until a concrete consume-side need appears."
That concrete need has now appeared: Station's provenance cards must flinch when their sources stale (kontourai/station#1391), and Ephemeris (the suite's deadline-reading scheduler) will drive re-derivation. But the pattern for wiring an external scheduler to checkpoints and freshness diffs is undocumented — the next consumer would have to reverse-engineer it from src/report.ts and src/recompute.ts.
Scope
Non-goal
Building the watcher. This issue is docs + decision record only; if the doc reveals the loop is awkward in practice, that is the evidence to revisit surface-derive.
Document the live-staleness pattern (and record the surface-derive deferral)
Surface's staleness is a pure function of
nowat report-build time; reactivity is diff-based (checkpointFromReport+buildTrustReport({since})+diffFreshness+recomputeChangeRecords).src/recompute.tsrecords the packaging decision: a stateful watcher is exactly what would justify an optional@kontourai/surface-derivepackage, deferred "until a concrete consume-side need appears."That concrete need has now appeared: Station's provenance cards must flinch when their sources stale (kontourai/station#1391), and Ephemeris (the suite's deadline-reading scheduler) will drive re-derivation. But the pattern for wiring an external scheduler to checkpoints and freshness diffs is undocumented — the next consumer would have to reverse-engineer it from
src/report.tsandsrc/recompute.ts.Scope
buildTrustReport({now, since: checkpoint})→diffFreshness/recomputeChangeRecords→ notify/render. Include cost-bounding guidance (checkpoint cadence,sincesemantics)surface-deriveremains deferred until a consumer needs in-process watching or arithmetic method execution — with the trigger conditions for revisitingNon-goal
Building the watcher. This issue is docs + decision record only; if the doc reveals the loop is awkward in practice, that is the evidence to revisit
surface-derive.