@@ -117,19 +117,32 @@ truthing discipline, because a mechanized proof cannot lie.
117117
118118==== Design decisions (2026-06-02)
119119
120- . *Echo is effect-only (value type later)* — a static dimension alongside
121- `Purity`, not a value type (spec §12). A first-class `Echo<T>` value type is
122- deferred; the AST/`Type` are to be designed so it can be added *without
123- rework*.
120+ Echo's semantic object is *retained-loss lineage* — proof-relevant provenance of
121+ collapsed/weakened/sampled/projected/degraded information. It is **not** a
122+ generic wrapper, a generic Σ-type, or a decorative effect.
123+
124+ . *Echo is effect-only (value type later)* — for grammar v2, Echo is an effect
125+ *classification dimension* alongside `Purity`, not a first-class runtime
126+ residue type. The AST/grammar shape is reserved so a value-level `Echo<T>`
127+ (carrying the residue) can be added later *without redesign*.
124128. *Safe-only reversal* — reverse blocks accept only `EchoSafe`; `Neutral` and
125- `Breaking` are rejected (see §9 implementation note).
126- . *Echo source = inference only (no annotation)* — echo is inferred from
127- operation shape; there is no `@echo` annotation. *Lossy numeric widening*
128- (e.g. `Float→Int`) carries `EchoNeutral`, which revises spec §12's "widening
129- independent of echo" (the value type is still unaffected — echo is a separate
130- dimension). [Phase-2 implementation: wire echo through `infer_data_expr`.]
131- . *Agda↔Lean proof bridge: independent* — `JtvEcho.lean` re-mechanizes the
132- model; `echo-types` remains the sibling Agda source of truth, cited not linked.
129+ `Breaking` are rejected (see §9 implementation note). This is stricter than the
130+ earlier spec but matches current interpreter reality. Later, `EchoNeutral` may
131+ be admitted *only* with an explicit carried Bennett residue / residue inversion.
132+ . *Echo source = infer + `@echo` annotations* — inferred from operation shape by
133+ default, with `@echo(safe|neutral|breaking)` accepted as *checked*
134+ declarations/overrides. Not infer-only (boundaries, foreign calls, and audited
135+ APIs need declarations) and not annotation-everywhere. [Phase-2: wire echo
136+ through `infer_data_expr` + parse `@echo`.]
137+ . *Numeric conversions carry echo* (revises spec §12 "independent of echo"):
138+ exact/injective representation-preserving ⇒ `EchoSafe`; lossy but
139+ residue-retained ⇒ `EchoNeutral`; lossy without usable residue ⇒ `EchoBreaking`.
140+ `Float→Int` is `Neutral` or `Breaking` per residue retention. The *value* type
141+ is still unaffected — echo is a separate dimension.
142+ . *Formal layer: independent Lean for Phase 2* — `JtvEcho.lean` is authoritative
143+ for JtV implementation semantics now; `echo-types` Agda remains the conceptual
144+ source/reference. The Agda↔Lean bridge is deferred to Phase 4; grammar v2 is
145+ *not* blocked on a cross-prover bridge.
133146
134147=== Phase 2 — Echo Types in the checker (commenced here)
135148
0 commit comments