Repository navigation
PASS_WITH_CONDITIONS
Baseline. This re-reviews bef69e74 against the CONDITIONS on 5cf31bab (this PR), on the same arch 7a86ec7b. I checked that since.diff equals git diff 5cf31bab bef69e74 and that pr.diff equals git diff fd6679a7 bef69e74
3E4B
. fd6679a7 (#3026) is the base and the merge base. The compare is one branch commit (fix(minimal): refuse an invalid minimal.toml in min init with exit 3) that touches only crates/minimal/src/cmd/project.rs.
Governs: architecture.md Exit codes line 364 (3 is invalid configuration, minimal.toml included). Top-level commands line 448 (min init scaffolds or appends one entry, and the noun flags are exclusive with exit 2). minimal.toml layout line 1167 (upward discovery of minimal.toml or .minimal/minimal.toml), and lines 1173 and 1176 ([defaults.<type>] and [boxes.<name>] with type).
Ruling. find_init_mfile now maps every mfile::Error other than IO, NotFound and ConflictingLayouts to an InitRefusal with code 3. These are Format, LinkConfig, MissingParamDefault, MultipleTaskActions, HarnessTable, InvalidEntryName and InvalidSpecKey (crates/mfile/src/error.rs), and each is invalid configuration under line 364. IO keeps exit 1. The refusal reaches main.rs failure_exit_code through the InitRefusal route that the earlier rounds accepted. The new located_init_mfile copies the search in mfile::File::from_dir and from_dir_recursive (crates/mfile/src/lib.rs lines 1041-1061 and 1136-1171). I compared the two: root before .minimal, and the walk stops when the parent is $HOME. They agree. It only names the file in the message, so the copy does not decide behaviour, and its placement in the client is not a deviation from line 1167. init_invalid_mfile_exit3_appends_nothing checks code 3, the file path, the parse text and an unchanged file, from the root and from a subdirectory. That is the rule under test, not a relaxed gate. Everything outside the compare keeps its status from the f2efb84 and 5cf31ba rulings. The only item left open is the BCLI-017 interim (INIT_ENTRY_SHAPE = false until #2418). It is filed, and C1 carries its flip.
Departure from precedent. None. The ledger truncates the 5cf31ba ruling, so I rebuilt its open point from the compare and the commit message: before this head, an invalid file in the append path ended with exit 1.
Not checked. I did not build or run the tests. The PR's verify run shows one failure in minimal::otel_cli exec_run_attach_and_task_run_share_the_commands_trace, which this change does not touch. CI is the gate for it.
Conditions
- C1: When #2418 (BOX T21) merges,
crates/minimal/src/cmd/project.rsINIT_ENTRY_SHAPEbecomestrueand then goes away: remove theentry_shapeparameter ofrun_init_flow, makecmd_initandoffer_mfile_scaffoldwrite[defaults.session],[defaults.task]and[boxes.dev]withtype = "session", and replaceinit_no_flags_writes_legacy_shapewithinit_scaffolds_entry_shapeon the default path. This condition stays open as the residual on #2418.
Ruled at bef69e7 against gominimal/arch@7a86ec7bb3c0 by claude-opus-5-5; arch_rulings 1032, job ae1c1ba3-d54c-4335-b5b2-f07333ac6d05.