dev-base: ship the .NET SDK (+ ICU) so C# mods compile in-container (sibling of #327 uv fix) #329
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/agentic-os#329
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
dev-base ships no .NET SDK, so any repo with C# to compile cannot build in-container. The eco-app#8 engineer run hit this: to compile the Eco mods (
mods/*,dotnet build) it had to hand-install the .NET 10 SDK mid-run, and because the base image also lacks ICU, it neededDOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1to get a green build.This is the same class as #327 (dev-base couldn't install the Python a repo required): a toolchain a consumer needs is absent from the image, so each run reinvents the install, and CI never catches C# breakage because CI is not the dev-base container.
Ask
Add the .NET SDK to
docker/dev-base/Dockerfile(pin a version - .NET 10 is what eco-app's mods build against), so C# compiles in-container with no per-run install. Handle globalization deliberately, one of:libicu) so globalization works normally (preferred - no surprising invariant-mode behavior), orDOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1in the image env and document why.Prefer installing ICU unless image size argues otherwise.
Why it matters fleet-wide
Once dev-base carries dotnet, eco-app's mod-compile CI stage (sibling eco-app issue) drops its self-install, and CI-in-dev-base parity (#328) covers C# mod compilation for free - a mod that does not build fails CI, not deploy. Any future C# consumer gets a working toolchain out of the box.
Acceptance
dotnet buildof an Eco mod.csprojsucceeds with no hand-install and no globalization error.Origin
Found by the eco-app#8 engineer, 2026-07-05 (hand-installed .NET 10 + invariant-globalization to avoid shipping a C# mod blind). Sibling: eco-app CI mod-compile stage. Precedent: #327 (uv/Python). Umbrella: #328 (CI-in-dev-base parity).
🔒 Reserved by
ward agent --driver claude— containerengineer-claude-agentic-os-329on hostKAI-DESKTOP-TOWERis carrying this issue (reserved 2026-07-05T03:46:47Z). Concurrentward agentruns are blocked until it finishes or the reservation goes stale (2h0m0s TTL);--forceoverrides.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 agentWARD-OUTCOME: done - dev-base now bakes the .NET 10 SDK (10.0.301) + libicu74, C# mods compile in-container with full ICU globalization, landed on main (
a4d6126).This one was a clean sibling of #327 and mostly went to plan. The install path is Microsoft's
dotnet-install.shpinned to an exact SDK, world-readable under/usr/local/dotnetlike every other tool, plus aDOTNET_ARCHrow in the arch map and a conservative auto-bump resolver that stays on the .NET 10 channel (the NODE_VERSION major-pin rationale).What fought back:
docs/dev-base-image.mdwas already sitting at 3965/4000 against the hard doc-size cap, so a single new bullet blew it over. There's no per-file cap override for a generic doc (only AGENTS/README/trifecta get one), so I had to tighten several existing bullets to buy room - routine upkeep for a growing inventory doc, but more fiddly than the actual feature.Confidence is high. I couldn't build the real multi-arch image here (no daemon), but I validated the exact Dockerfile commands locally: 10.0.301 installs and compiles a
net10.0mod-shaped classlib with 0 errors, and a no-ICU box reproduces the precise crashlibicu74fixes - so the ICU-over-invariant choice is proven, not assumed. Real proof arrives when the publish-image job rebuilds:lateston this push.Rough edges / follow-ups: (1)
libicu74is spelled for Ubuntu 24.04's ICU major; a base-image bump needs it re-pinned to that release'slibicuNN(noted in the Dockerfile comment). (2) The sibling eco-app CI mod-compile stage can now drop its self-install. (3) Unrelated:tests/test_check_commit_closes_issue.pyhas 6 pre-existing failures on clean HEAD (stale test for the retired closes-issue hook) - worth a cleanup issue, untouched here.