8000 Merge remote-tracking branch 'origin/main' into agent/3254-refuse-a-named-loadout-on-a-sealed-box-a-loadout · gominimal/minimal@ded1d14 · GitHub
[go: up one dir, main page]

Skip to content

Merge remote-tracking branch 'origin/main' into agent/3254-refuse-a-n…

Minimal Arch / arch-review succeeded Nov 12, 2026 in 0s

PASS

Baseline. This re-reviews ded1d148 against the CONDITIONS on 887f7cec (this PR), on the same arch 15b603e6. The checkout has no arch-map.md, so I found the sections by search. since.diff equals git diff 887f7cec ded1d148, and pr.diff equals git diff 82e3872f ded1d148. The compare holds two author fixes and a merge of main at 82e3872f. 498e164 runs the loadout gate for a task entry in min box spec. 3dab862 names a holding type in the BOX-173 refusal only when its constraint excludes open. The ledger cuts the earlier rulings at 400 characters, so I could not read their conditions. As on 887f7cec, I ruled the whole head on its own merits.

Governs (architecture.md). minimal.toml layout, line 1234: a loadout applies after the entry only where loadout_mode permits one. Type constraints are checked on the result. min box spec <entry> renders exactly what the host receives. Line 1219: the shipped default for each type. Policy layers and precedence, line 1285: selected loadouts are subject to loadout_mode. Line 1288: a constraint holds a value, and no layer can override it.

Ruling. The gate is in mfile::expand, which owns expansion, and the client calls it (rule 8). It reads only the layers up to the entry and the type chain, so a sealed box reads no loadout file. Every creation path calls it before it resolves loadouts: min box start, min task run, the dash create and min box spec. So the start and the spec agree, as line 1234 requires. The early BOX-181 check does not contradict line 1234's final constraint check. No later layer can change loadout_mode, because BOX-172 refuses a loadout that sets it and no override flag sets it. The gate fails closed. An unresolved project type refuses with exit 3, and a missing mode is sealed. The built-in fallback drops no constraint, because built-in roots carry none. The proofs test the cited rules. They do not relax the gate. All five covered requirements conform, and I found no open deviation.

Departure from precedent. The prior ruling on 887f7cec was CONDITIONS. The compare closes the two gaps that its fix commits name: the task-entry spec path and the precision of the BOX-173 remedy. I found no other deviation on this head.

Outside the design. The task plan asks that the daemon log names the box's mode at creation. The PR logs the mode only on the client (minimal::loadouts, info level). Neither architecture.md nor the BOX spec states a daemon log line for loadout_mode, so this is a plan matter and not a design deviation. The PR body declares it as a residual. I could not see an issue number for it, because the staged body is truncated and gh is not available here. The plan owner must file that residual. Error::ConstraintViolated is a stopgap for the general BOX-061 check, tracked by #3304 in the code. Line 454 lists --loadout on min task run. The CLI does not take that flag on main before this PR, so this change does not introduce the gap.

Not checked. I did not compile or run the named tests (out of bounds). The agent-verify failure in otel_cli exec_run_attach_and_task_run_share_the_commands_trace is a tracing test outside this change's files, and I did not investigate it.

Ruled at ded1d14 against gominimal/arch@15b603e6afb8 by claude-opus-5-5; arch_rulings 1185, job f5fbb20c-d2e2-4f0b-8d4a-331faacb9c71.

0