Audit the Eco.ReferenceAssemblies pin (0.13.0-beta-release-998) against the live kai-server Eco build #66

Closed
opened 2026-07-05 05:17:20 +00:00 by coilysiren · 2 comments
Owner

Problem

Every Eco mod compiles against Eco.ReferenceAssemblies NuGet 0.13.0-beta-release-998 (all four .csproj: jobs, replay, telemetry, stores). Reference assemblies are API-only, so a green build guarantees the code type-checks against that pinned version's public API - and nothing else. If the pin has drifted from the live kai-server Eco build, a mod can compile clean and still load-fail on deploy (a wrong/renamed/missing runtime member), and a bad plugin does not fail quietly - it crash-loops the server (coilyco-gaming/eco-ops#7).

This has never been checked. eco-ops signals the server is ~0.13 (eco-ops#38: "0.13 boots ready despite UserCode compile errors"), but whether it is exactly 0.13.0-beta-release-998 is unconfirmed.

Ask

Confirm the pin matches the live server build, cheaply and non-destructively:

  1. Read the live server's exact Eco version - /info (public) and/or the on-disk EcoServer/ version string on kai-server.
  2. Compare against the Eco.ReferenceAssemblies pin (0.13.0-beta-release-998) in all four mod .csproj.
  3. If drifted, bump the pin to the matching reference-assembly version and rebuild (CI mod-compile gate, eco-app#60, then re-validates). If they match, record the confirmation so future runs trust the pin.

Why now

The whole point of the no-restart discipline is to spend restart windows on things that work. A pin mismatch turns a deploy window into a crash-loop and a rollback. This is a read-plus-compare, minutes of work, high payoff.

Acceptance

  • The live Eco build version is read and recorded.
  • The Eco.ReferenceAssemblies pin is confirmed to match, or bumped to match and the mods rebuild green under eco-app#60's CI gate.

Refs

eco-app director session, 2026-07-05 (mod-testing audit). Live-version signal: coilyco-gaming/eco-ops#38. Crash-loop risk: coilyco-gaming/eco-ops#7. Sibling: the Eco-source hydration gap (ward). CI gate: eco-app#60.

## Problem Every Eco mod compiles against `Eco.ReferenceAssemblies` NuGet **`0.13.0-beta-release-998`** (all four `.csproj`: `jobs`, `replay`, `telemetry`, `stores`). Reference assemblies are API-only, so a green build guarantees the code type-checks against **that pinned version's** public API - and **nothing else**. If the pin has drifted from the **live kai-server Eco build**, a mod can compile clean and still **load-fail on deploy** (a wrong/renamed/missing runtime member), and a bad plugin does not fail quietly - it crash-loops the server (coilyco-gaming/eco-ops#7). This has never been checked. eco-ops signals the server is ~0.13 (eco-ops#38: "0.13 boots ready despite UserCode compile errors"), but whether it is exactly `0.13.0-beta-release-998` is unconfirmed. ## Ask Confirm the pin matches the live server build, cheaply and non-destructively: 1. Read the live server's exact Eco version - `/info` (public) and/or the on-disk `EcoServer/` version string on kai-server. 2. Compare against the `Eco.ReferenceAssemblies` pin (`0.13.0-beta-release-998`) in all four mod `.csproj`. 3. If drifted, **bump the pin** to the matching reference-assembly version and rebuild (CI mod-compile gate, eco-app#60, then re-validates). If they match, record the confirmation so future runs trust the pin. ## Why now The whole point of the no-restart discipline is to spend restart windows on things that work. A pin mismatch turns a deploy window into a crash-loop and a rollback. This is a read-plus-compare, minutes of work, high payoff. ## Acceptance * The live Eco build version is read and recorded. * The `Eco.ReferenceAssemblies` pin is confirmed to match, or bumped to match and the mods rebuild green under eco-app#60's CI gate. ## Refs eco-app director session, 2026-07-05 (mod-testing audit). Live-version signal: coilyco-gaming/eco-ops#38. Crash-loop risk: coilyco-gaming/eco-ops#7. Sibling: the Eco-source hydration gap (ward). CI gate: eco-app#60.
Member

🔒 Reserved by ward agent --driver claude — container engineer-claude-eco-app-66 on host KAI-DESKTOP-TOWER is carrying this issue (reserved 2026-07-05T05:33:47Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (2h0m0s TTL); --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

— Claude (she/her), via ward agent

<!-- ward-agent-reservation --> 🔒 Reserved by `ward agent --driver claude` — container `engineer-claude-eco-app-66` on host `KAI-DESKTOP-TOWER` is carrying this issue (reserved 2026-07-05T05:33:47Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (2h0m0s TTL); `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh** — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <!-- ward-agent-signature --> — Claude (she/her), via `ward agent`
Author
Owner

WARD-OUTCOME: done - pin drifted 998 -> 1024; bumped all four mods to 0.13.0.4-beta-release-1024 (exact NuGet match for live 0.13.0.4 beta release-1024), rebuilt green, pushed to main.

This one was as clean as the issue predicted: a read-plus-compare that turned into a one-line-per-file bump. The nice surprise was that NuGet ships an exact match for the live build string (0.13.0.4-beta-release-1024), so there was no judgment call about "closest" reference-assembly version - the pin now tracks the server byte-for-byte, and docs/datasets/currency.md already independently recorded the same live string, which corroborated the /info read.

What fought back a little: after merging main, ward exec build-mods started refusing with a repo-verb 'no upstream' guard, so I validated via make build-mods directly (exit 0, all four green). Confidence is high on the API-only guarantee here - reference assemblies are compile-only, so a green build against 1024 is exactly what de-risks the deploy window. The one caveat is that this proves the pin matches, not that every reflected member the mods actually call still exists at runtime; that's a runtime-load check, not a compile check, and stays out of scope.

Rough edge worth flagging: test-mod-replay has 2 pre-existing BodySerializer failures on a clean checkout (Newtonsoft-only, nothing to do with the Eco pin). Filed as #67 - includes a suggestion to wire that test into the CI mods gate so it stops failing silently.

WARD-OUTCOME: done - pin drifted 998 -> 1024; bumped all four mods to `0.13.0.4-beta-release-1024` (exact NuGet match for live `0.13.0.4 beta release-1024`), rebuilt green, pushed to main. This one was as clean as the issue predicted: a read-plus-compare that turned into a one-line-per-file bump. The nice surprise was that NuGet ships an *exact* match for the live build string (`0.13.0.4-beta-release-1024`), so there was no judgment call about "closest" reference-assembly version - the pin now tracks the server byte-for-byte, and `docs/datasets/currency.md` already independently recorded the same live string, which corroborated the `/info` read. What fought back a little: after merging main, `ward exec build-mods` started refusing with a repo-verb 'no upstream' guard, so I validated via `make build-mods` directly (exit 0, all four green). Confidence is high on the API-only guarantee here - reference assemblies are compile-only, so a green build against 1024 is exactly what de-risks the deploy window. The one caveat is that this proves the *pin* matches, not that every reflected member the mods actually call still exists at runtime; that's a runtime-load check, not a compile check, and stays out of scope. Rough edge worth flagging: `test-mod-replay` has 2 pre-existing BodySerializer failures on a clean checkout (Newtonsoft-only, nothing to do with the Eco pin). Filed as #67 - includes a suggestion to wire that test into the CI mods gate so it stops failing silently.
Sign in to join this conversation.
No description provided.