// E6b-R — route-all: the NEW use surfaces a same-name type reaches now funnel
// through the source-aware engine, so an ambiguous bare name poisons LOUDLY at
// each of them instead of silently picking a global `findByName` last-wins author.
// `main` flat-imports two same-name `Box` struct authors and authors none itself,
// so every bare `Box` below is a genuine collision. `Box` is the kind-agnostic
// canary (the bare-leaf forms — annotations / size_of / match / `!Named` — are
// already locked per kind by 0755/0795/0797/0811); these cells exercise the
// surfaces E6b-R added:
//
//   - wrapper-alias element            `BoxPtr :: *Box`         (engine wrapper aliasing)
//   - union body-builder child          `WrapU :: union { b: Box }` (C1, registerUnionDecl)
//   - enum body-builder child           `WrapE :: enum { V: Box }`  (C1, registerEnumDecl)
//   - tuple-literal element             `size_of((Box, i32))`       (O1/K5)
//   - inline-anonymous body child       `x : union { b: Box }`      (inline-anon engine arm)
//
// Fail-before (pre-E6b-R): each of these resolved `Box` through the stateless
// `type_bridge.resolveAstType` global last-wins, silently binding one arbitrary
// author with NO diagnostic. Pass-after: every surface emits the LOUD
// "type 'Box' is ambiguous" and the build exits 1.

#import "modules/std.sx";
#import "0815-route-all-new-surfaces-ambiguous/a.sx";
#import "0815-route-all-new-surfaces-ambiguous/b.sx";

BoxPtr :: *Box;

WrapU :: union { b: Box; n: i32; }

WrapE :: enum { V: Box; }

main :: () -> i32 {
    sz := size_of((Box, i32));
    x : union { b: Box; n: i32 } = ---;
    0
}
