@@ -1008,14 +1008,36 @@ gap is VM value-representation / intrinsic-dispatch cost (the next big lever).
10081008 by-digit; float/hex literals excluded since their text isn't all digits).
10091009 ` CHECKER_TARGET_CODES ` = ** 12 codes** (RS0002/3/4/5/6/10/11/12/16/17/28/33);
10101010 ` checker_parity_corpus ` byte-exact ** 619 files, 0 mismatches, 0 run-failures** .
1011- - ** STILL DEFERRED (need semantic infrastructure):** ** RS0007** (retains-param) has
1012- a semantic ` type_ref_is_copy ` sub-condition (retained Copy param → RS0007) not
1013- token-decidable; ** RS0008** (missing-effect) needs a Copy/sum-type table +
1014- noescape/owned/surface-ref classification; ** RS0009** (invalid-pure, 7 files)
1015- needs body analysis (manage/native-call/with-resource) + type analysis. Next
1016- genuinely semantic tier: ** RS0021** exhaustiveness / ** RS0024** unknown-type (need
1017- a ` Map<String,Def> ` symbol-table pass — the first self-hosted check that isn't
1018- decidable from local token structure).
1011+ - ** Diagnostics (step 2, milestone 2g — DONE, 2026-07-02):** the semantic tier —
1012+ added ** RS0007** (retains a non-param OR a Copy scalar param: ` type_ref_is_copy ` =
1013+ 17 scalar names, not fresh/noescape, no args/fn), ** RS0024** (UNKNOWN_TYPE — a
1014+ type ref to an undeclared type; recursive TypeRef validation over field/param/
1015+ return types with generic-param scope), ** RS0008** (MISSING_PARAMETER_EFFECT — an
1016+ effect-less param unless share/noescape/owned/bare-Closure/surface-` & ` /contains-Fd/
1017+ Copy-scalar/payloadless-sum), ** RS0009** (INVALID_PURE_EFFECT — a ` pure ` fn with a
1018+ resource return / mut|take param / retains item / body ` with ` |` manage ` |non-pure
1019+ call). LOAD-BEARING FINDING (RS0024): the oracle's known-type set is NOT just the
1020+ ~ 45 hardcoded builtins — it also includes every struct/resource preloaded from the
1021+ CORE + STANDARD package ` .rssi ` interfaces (via ` hir.type_info ` ); those 56 names
1022+ (JsonValue, SortedSet, Deque, ResourcePool, Response, StringBuilder, …) are
1023+ extracted into ` is_stdlib_type ` (58 false positives without them). RS0009's
1024+ non-pure-call resolution is token-based (qualified calls to known-type namespaces
1025+ + constructors + enum-variants + declared-pure fns are allowed; declared non-pure
1026+ fns flag; unresolved ignored) — verified against the clean pure files
1027+ (pure-string-read-call/pure-helper-call/pure-read-function) and pure-native-call.
1028+ Implemented via a sub-agent against a precise ported spec. ` CHECKER_TARGET_CODES `
1029+ = ** 16 codes** (RS0002/3/4/5/6/7/8/9/10/11/12/16/17/24/28/33); `checker_parity_
1030+ corpus` byte-exact ** 619 files, 0 mismatches, 0 run-failures** . Commits 6dbc59f9
1031+ (RS0007) / fd688f09 (RS0024) / e559c1f2 (RS0008) / 89559315 (RS0009). MAINTENANCE
1032+ NOTE: the RS0024 stdlib-type list is derived from the ` .rssi ` interfaces at
1033+ authoring time — regenerate if those interfaces change.
1034+ - ** Diagnostics (step 2, milestone 2h — IN PROGRESS):** ** RS0021** NON_EXHAUSTIVE_
1035+ MATCH — the last diagnostic. Needs scrutinee type inference (the analyzer reads
1036+ ` hir_expr_type_name ` ), but the corpus is tractable: only ` _ ` short-circuits (a
1037+ top-level bare ident is a Variant, not a catch-all); user-sum/Bool scrutinees are
1038+ params or ` let x = ctor ` /local-call (locally inferable → all-variant coverage); and
1039+ Option/Result-returning stdlib-call scrutinees fall through to the Some+None/Ok+Err
1040+ fallback (which matches the analyzer). Ported spec + sub-agent in flight.
10191041- ** Lexer spans (step 3):** added a ` len ` field to the shared ` Tok `
10201042 (= consumed source span ` j-i ` , matching the Rust lexer's ` index-start ` ) and made
10211043 ` lexer.rss ` emit the real ` <line>:<col>:<len> ` prefix. ` lexer_parity_corpus ` is
0 commit comments