v7.13.0
Engine identity moves to engine-service-v0.1.84 (paired release, deploy-first:
the engine was deployed and cloud-gated BEFORE this cut — zero refusal window,
zero inert window). Local-mode installs converge to that engine on every path.
Schema note: v0.1.84's renames are forward-only — a v0.1.83 image cannot write
against the walked schema.
Changed
- RDR-194 FK-census arc (engine + client halves). Eleven schema changesets
walk on first boot:topicsgains a tenant-scoped UNIQUE and its four
referencing FKs are repointed as tenant-scoped composites (cross-tenant topic
references are now schema-illegal; guarded by fail-loud corruption checks —
the live-store walk found zero, matching the pre-measured counts);
memory.ttl/plans.ttlbecomettl_dayswithCHECK (NULL or > 0)and the
ttl=0trap value is retired on every path (counted deletes: 2 plan rows,
0 memory rows on the managed store);frecency's0 = permanentsentinel is
retired forNULL; deadmigration_jobsis dropped (zero producers or
consumers since 2026-07-24); every deliberately-loose census edge carries its
reason as aCOMMENT ON COLUMN. memory_putttl contract (client half, breaking forttl=0callers):
the MCP tool signature isttl: int | None = 30; omit or pass null for
permanent.ttl=0is rejected with a 400 naming the fix — the silent
client-side coercion shim is deleted (a contract enforced by one client is
not enforced). Import batches skip legacyttl=0rows with a counted
warning instead of aborting.- T3
ttl_dayswrite contract (client half):nx store put/
T3Database.put/HttpVectorClient.putandnx memory promotereject an
explicitttl_days <= 0with a typed error before any wire call; the expiry
pre-filter becomes$gt: 0(NULL = never expires; the$ne: nullform is
vacuous server-side and was deliberately not used).
Fixed
nx memory promoteof a permanent T2 entry coercedNoneto the retired
0sentinel en route to T3 — found by the ttl call-site census; promoting
permanent entries would have broken under the new validation.- Latent NPE in the engine's frecency read path on NULL-ttl rows
(TelemetryRepository.getFrecencyMap.of). - SessionStart guidance payload reduced 12,817 → ~4,428 bytes
(imperative-first inversion, nexus-h33x8.5) and a per-session capability
census now appends tocapability_census.jsonlat SessionEnd
(nexus-h33x8.3); both JSONL logs (capability census, routing log) gained
size-gated rotation by atomic rename, serialized by an advisory lock. - nx_answer:
budget_secondspartial-results contract, verbatim-repeat
plan-match, stream-json timeout capture (nexus-h33x8.6 a4/a2 follow-ons to
7.12.0's a3/a1).