Read a short subject's only number as its reading

A two-character Chinese subject — 温度, 室温, 设定, 预算 — is the common
way to state a reading, and the rename rule was swallowing its number:
「温度 22 度」 became a thing called 温度22 with nothing left to report, so
the lane recorded no conflict at all and no later memory could disagree
with it. A bare number written onto the subject is a name only while the
memory still has another number waiting behind it; with nothing after it,
it is the reading. Measured across 33 pairs: 6 change — five missed
conflicts now recorded, plus one new disclosed boundary (「Room 3 is big」
and 「Room 4 is big」 read as one quantity that moved, because a label
cannot tell an identifier from a reading). Everything else is byte-equal.

Also corrected: a memory that is only a number does have a subject — the
number itself — so 「22 度」 and 「24 度」 record nothing because they name
two different things, not because the store found nothing to compare.

The smoke script now refuses an answer from a server that predates the
memory tiers: it requires recall_count in the remember response, a field
the pre-p2-3 Go build never emits.
This commit is contained in:
ZacharyZhang-NY committed 2026-10-09 11:44:29 -04:00
1 parent 8bed319848
commit 11e31eb7e3
4 files changed
+73 -14

No files matched your search

+5
View File
@@ -172,6 +172,11 @@ for required in ("remember", "supersede_memory", "forget_memory", "mounted_cartr
statement = "keys are in the hall drawer"
remembered = tool("remember", {"text": statement, "scenario": "home"})["atom"]
if "recall_count" not in remembered:
raise SystemExit(
"FAIL: the API answered with no recall_count; a server left over from before the memory tiers "
"took the port after our guard passed — stop it and re-run"
)
if not remembered["holder_id"]:
raise SystemExit(f"FAIL: the server stamped no holder: {remembered}")
atom_id = remembered["atom_id"]