; Fieldtest — canonical-type-names, axis 1: BareCrossModuleTypeRef.
;
; A consumer of std_maybe deliberately writes a BARE `Maybe` in its
; fn signature WITHOUT (import std_maybe). prep.1 migration
; (kernel-extension-mechanics): pre-prep.1 this fixture rejected
; bare `Maybe` even when the import WAS present (the canonical form
; required cross-module type refs to be qualified at all times).
; Post-prep.1 bare-in-scope is canonical; the rejection path narrows
; to "bare-not-in-scope". To preserve the fixture's NEGATIVE role
; the `(import std_maybe)` declaration is dropped; bare `Maybe` is
; now genuinely out of scope and fires `BareCrossModuleTypeRef`
; with the narrowed "not in scope" message. The candidates list
; comes from the consumer's explicit imports + implicit imports;
; here both are empty, so candidates is empty too.
;
; Expected: workspace-load error `BareCrossModuleTypeRef` naming
; the type with the narrowed wording.

(module ct_2_bare_cross_module

  (fn classify
    (doc "Identity over Maybe<Int>; signature uses bare `Maybe` with no import.")
    (type
      (fn-type
        (params (own (con Maybe (con Int))))
        (ret (own (con Maybe (con Int))))))
    (params m)
    (body m))

  (fn main
    (type (fn-type (params) (ret (own (con Unit))) (effects IO)))
    (params)
    (body
      (app classify (term-ctor Maybe Just 7)))))
