From d4e9b58d4d7bb1f5ab0ab48a4d01c7f1f325a1f3 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 9 Sep 2026 10:12:19 -0400 Subject: [PATCH] =?UTF-8?q?plan:=20ruling=20on=20event=20text=20=E2=80=94?= =?UTF-8?q?=20game=20data=20via=20the=20VFS,=20not=20a=20caveat;=20CR=20ve?= =?UTF-8?q?rdict=20on=201a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- campaign/backlog.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/campaign/backlog.md b/campaign/backlog.md index 49f3dac..fc384a9 100644 --- a/campaign/backlog.md +++ b/campaign/backlog.md @@ -154,11 +154,22 @@ mode and the **same hashes**, with a count from the hook proving the path execut | # | module | today | evidence for the attempt | target | |---|---|---|---|---| -| 1a | `TechTree::ProcessResearch` + unlock cascade | compared | 35 calls / 3 workloads / 0 div; advance prediction held on a changed workload | **replaced** — lane CR running | +| 1a | `TechTree::ProcessResearch` + unlock cascade | compared | 35 calls / 3 workloads / 0 div; advance prediction held on a changed workload | **stays `compared`** (lane CR, 2026-09-09): our code displaced all 13 tech-tree leaves live, oracle missed by **16**, every one written by `OnTechResearched` — a different function. Next: the write-back | | 1b | `ServerSystem::ComputeTotalOutput` + `GroupOutput` | compared | 24,357 calls, 0 undeclared writes — but **13 distinct states** (rule 23) | replaced, after widening the state set | | 1c | `ServerSystem::ProcessTurn` (colony) | compared | 36 calls 0 div; 3 owned systems, gates all zero | replaced, on a save with gate traffic | | 1d | `game/nav`, `game/design`, `game/combat` retreat, `mars/vfs` | modelled, **never hooked** | host-tested only | compared — one lane each | +**Ruling (2026-09-09, on lane CR's policy question).** Reaching `replaced` on research needs two +event *records* whose text comes from the game's string table. That text is **game data**, not +engine code: the engine already reads every catalogue, tech name and design from the user's own +install through `$SOTS_DATA_DIR` / the VFS, and a string table is no different. So the answer is +**not** "call the game's `PostEvent` and take a QUALIFIED caveat" — it is **load the string table +through the same VFS path everything else uses** and construct the record clean. We ship no +strings; the user's copy supplies them. That is the same clean-room posture as every other data +dependency, and it turns the last research residual into ordinary engine work rather than a +policy exception. Track 1a, next lane: `OnTechResearched` write-back (~90 tech-effect fields) + +`ObservedTech` element + the two event records via the VFS string table. + ### Track 2 — Rung B worklist, ranked against a real rich turn (lane CV, residual 0) | leaves | subsystem | note |