From 6e4b9e7eb422e0fd12e1e5d52ffa30acf5e8bd4d Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 17 Sep 2026 01:23:44 +0200 Subject: [PATCH] Rule numbers onto decimal strings Floats are fragile, and every value in this vocabulary is already a string, so decimal strings keep the wire to one value encoding rather than adding a second. The recommendation this reverses had that backwards. What it costs is a comparison rule, and that is where the danger sits: compared as text, ten is less than nine. The cut owes a canonical decimal form and a numeric comparison, both pinned, and it no longer owes anyone a sentence about where exactness runs out. Co-Authored-By: Claude Fable 5.1 --- docs/cultnet-selection-cut.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/cultnet-selection-cut.md b/docs/cultnet-selection-cut.md index 1b8a9469..a488e69d 100644 --- a/docs/cultnet-selection-cut.md +++ b/docs/cultnet-selection-cut.md @@ -1152,7 +1152,22 @@ they govern. cannot know a consumer's enums; the organ keeps the typed refusal at its door). Depends: everything in sections 2-10. - **Q-E.** Withdrawn: the seam question is answered by the placement ruling. -- **Q-J. Number encoding on the wire.** **A, IEEE float64, with the 2^53 +- **Q-J. Number encoding on the wire. RULED B, decimal strings, + 2026-09-17.** The operator: floats are fragile, and strings are the most + reliable way to store a number. **Self's recommendation of A was argued + backwards and the map said so wrongly.** B was framed as "a second value + encoding beside `any_of`'s strings"; it is the opposite. Every value in this + vocabulary is already a string, so decimal strings keep the wire to **one** + value encoding, and it is float64 that would add a second. What B really + costs is a comparison rule, and that is where the danger sits: a decimal + string compared lexicographically answers that ten is less than nine. So + the cut must specify a canonical decimal form and a numeric comparison, + and pin both with mutants — a lexicographic comparison must die, and a + non-canonical spelling of an equal value must not change an answer. Name + the edge cases the canonical form settles: leading and trailing zeros, an + explicit plus, exponent notation, and negative zero. No exactness limit + needs stating, because there is no longer one. + - *Superseded, kept as history:* **A, IEEE float64, with the 2^53 limit stated in the schema and in this map** (recommended: one encoding, no parse rule per runtime, and no catalog in hand declares an integer member wide enough to lose). **B**, decimal strings — exact, but a second