// A BARE generic struct head (`Box(i64)`) and a BARE generic alias
// (`ABox :: Box(i64)`) must instantiate the template authored by the single
// bare-VISIBLE author — this file's own author or a DIRECT (1-hop) flat import —
// NOT the global last-wins `struct_template_map`, which a NON-visible 2-flat-hop
// same-name template can win.
//
// `b.sx` declares a one-field `Box($T)` (size 8) and itself flat-imports `c.sx`,
// which declares a two-field `Box($T)` (size 16). This file flat-imports ONLY
// `b.sx`, so `b.Box` is one flat hop away (visible) and `c.Box` is two hops away
// (NOT bare-visible, mirrors 0764/0706). The bare head `Box(i64)` and the bare
// alias `ABox :: Box(i64)` must both select `b.Box` (size 8).
//
// Regression (Phase E4 finding #1): before the bare head/alias consulted the
// source-keyed visible author, both fell through the `.unregistered` gate arm to
// the global last-wins template and instantiated the non-visible `c.Box`
// (size 16). Fail-before printed `size=16 alias=16`.

#import "modules/std.sx";
#import "0774-modules-bare-generic-head-visible-author/b.sx";

ABox :: Box(i64);

main :: () -> i32 {
    x : Box(i64) = .{ x = 1 };
    a : ABox = .{ x = 2 };
    print("size={} alias={} x={} a={}\n", size_of(Box(i64)), size_of(ABox), x.x, a.x);
    0
}
