Checking the markers for the first time found five disagreements in areas that are implemented. Four were the marker's fault: - own/badarg pinned "self", but the rule being broken is that a returned reference must derive from a parameter -- `self` has nothing to do with it. - own/badbrmov pinned line 9, which is the closing brace; the second destroy is on line 8. - own/badloop pinned line 8, the destroy after the loop. The diagnostic is on line 6, inside it, and line 6 is right: the second iteration moves the same value again, so the loop body is where it is caught. Whoever wrote the marker expected the error after the loop. - optional/badcatch pinned line 14, the body of the catch block. The catch expression on line 13 is what cannot fall through. The fifth was the compiler's. own/badweak assigns a `&mut i32` to a `&i32` and got "initializer type mismatch", which says nothing about why. Weakening an exclusive borrow to a shared one is a specific rule and now says so, for references and slices alike. own/ is fully green: 50/50. Overall 133 -> 138 of 188. The six remaining marker disagreements are all under units/ and generic/, where nothing is implemented yet, so there is no diagnostic to compare against and no way to tell whether the marker is right.
M6 fixtures
These fixtures pin the M6 ownership/borrow rules before implementation.
ok*.femust compile with--target=bits32 --emit-c.bad*.femust fail compilation; the first line follows the// ERROR:<line>:<substring>convention from SPEC §12.- They are registered in
src/ferrolang_vm/registry.py, which is what decides whether a milestone runs. - When M6 starts, wire this directory into the DOS/QEMU gate without changing the expected result of any fixture.
- M6 also owns the general-global borrow restriction from R10 because AGENTS.md explicitly groups that change with the
own.cstate-machine work.
Coverage: R4 storage restrictions, R5 scope, R6 shared/exclusive liveness, root-local field/index conflicts, call-only &mut -> & reborrows, branch/loop MaybeMoved and initialization-state merging, R7 invalidation, R8 derived-return provenance joins, defer lifetime extension, and global borrow restrictions.