diff --git a/campaign/board.md b/campaign/board.md index 278e018..802485a 100644 --- a/campaign/board.md +++ b/campaign/board.md @@ -375,3 +375,8 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`). | CORRECTION WITH TEETH: spies2 is not the spy list | objects | verified | high | 100% | 2026-09-08 | **`spies2` is 0 in all 28 systems of a save that DOES have a spy.** The natural reading of lane W's "count 0 in all 11 saves" was "no save ever had one" - **that reading is dead**. Either `spies2` is not the spy list, or it fills only for a DEPLOYED spy. A rule-6 hypothesis that survived because nothing exercised it, now exercised and found wrong | | a config that would have reported a CONFIDENT ZERO | meta | verified | high | 100% | 2026-09-08 | Lane L3 found and fixed a real defect in the watchpoint module: **`hooks=off watch=on` printed `watch=on` and armed NOTHING**. A lane using that combination as its rule-19 control would have logged zero traps and concluded the container never grew - the exact failure family as the stale binary, the shared build dir and the double-counted draw: **no error, no warning, a plausible number**. Its own instrument was byte-neutral: the armed run reproduced the determinism oracle exactly, which doubled as VM144's adoption check | | four new saves: the first populated trdmgr and spymgr | verify | verified | high | 100% | 2026-09-08 | All --strict clean, 0 errors/warnings: `human-turn5-traderoutes`, `human-turn8-traderoutes`, `human-turn11-spytechs`, and **`human-turn15-spyprogram`** - 21 routes, 6 sectors, `spymgr{nspy 1, spy{sid 1, sown 16, atto 3728, tdep -1}}`, **the first populated trdmgr and spymgr in the corpus**. These are the saves that broke the coverage ratchet (rule 27) by carrying ``, `TacReports`, `Lay`, `` and `fwarn` that no schema names | +| RATCHET DEBT PAID IN FULL - 99.50% -> 99.9949% | engine | verified | high | 100% | 2026-09-08 | Lane WS, and **the bar did not move** (rule 27 honoured). Per save: turn5-traderoutes 99.0003 -> **99.9951** (409 opaque -> 2), turn8 98.6349 -> **99.9955** (613 -> 2), turn11-spytechs 97.6382 -> **99.9959** (1166 -> 2), turn15-spyprogram 96.9412 -> **99.9964** (1706 -> 2); corpus **99.5021 -> 99.9949**, 3926 opaque -> **40**. **All 20 saves return above the ratchet, and the only opaque items left on ANY save are the RNG blob's two** - nothing a save exercises is carried any more. 14 new bindings, every one a full match: **100 shapes, 966 items, 0 MISMATCH**. No header regeneration and no new addresses - it all came from the already-generated streams.json plus the records the new saves finally carry | +| TacReports: why TWO lanes could not close it | objects | verified | high | 100% | 2026-09-08 | **The reason was real, not a miss.** `TRnc` plus three trailing scalars is **IDENTICAL in a flattened linear recovery** whether it is three separate runs or one loop body of three - and `TRnc` was 0 in every save, two levels under a count that was also 0. Nothing could distinguish them. **The trade saves show the wire directly: TRships TRsats TRshipsL INTERLEAVED, three times, under TRnc == 3.** One loop body. Binds 20/20. A textbook case of a workload settling what static reading structurally could not | +| two type corrections, and the coverage figures were OPTIMISTIC too | verify | verified | high | 100% | 2026-09-08 | (1) `Game::CombatReport`: `auto`/`cdst` are **bools** and `dur`/`cdt`/`cdi` are **floats** - all five had been ints. Four are 0/1 everywhere so the bytes never moved, but **`cdt` was being read as 1070805848 for what is 1.598**. (2) `Game::CombatWeaponReport`'s damage quartet is flat with float dami/damt; the old shape reached them through an `obj_flex` nested `dams` frame **the binary never writes** - which made CoverageArchive charge **one phantom typed item per weapon report**. The four affected saves have 8/13/21/32 weapon reports and their totals moved by exactly 8/13/21/32, **so the pre-fix coverage figures were slightly OPTIMISTIC as well as too low** | +| FTPnts stays carried, and names its own workload | verify | backlog | — | 0% | 2026-09-08 | The one item the recovery itself marks `unresolved`, count 0 in every `Lay`. **It names the element class from the DECORATED HELPER NAME - exactly the SysMem/mts/nalat trap: the framing belongs to the helper, not the class.** Carried, with `Game::FieldTemplate::Point` deliberately left unbound. **The workload that settles it: a save with a stored fleet tactical formation** - set a fleet's combat layout in the tactical setup screen, then save. Everything else still carried is a never-filled container costing zero items on every save | +| LAB: CT111 direct SSH is publickey-denied | meta | verified | high | 100% | 2026-09-08 | Multiple lanes have now hit this and worked around it differently. **Direct `ssh 192.168.10.138` is denied; the working route is `ssh spicy` then `pct exec 111`.** Lane WS could not reach it at all and **installed g++-mingw-w64-i686 locally, cross-building against GCC 10-posix rather than CT111's toolchain** - so its "shim clean" was against a different compiler and the integrator re-ran the real one. Two facts it surfaced that are worth keeping: `TRmin` wanted a member named `min`, **which windows.h defines as a macro** (it is `mine` for that reason), and **the win32-threads variant of that compiler cannot build zip_archive.cpp at all** (`std::mutex` absent) - the posix variant is required. ReVa also stayed down (`CONNECTION_CLOSED`) the whole session; the server is `active` and CT111 is healthy at load ~15 from our own builds |