Skip to content

Commit 183e10a

Browse files
olwangclaude
andcommitted
docs(selfhost-ledger): record checker milestone 2g (16 codes) + 2h RS0021 in progress
The semantic tier RS0007/RS0008/RS0009/RS0024 landed (checker byte-exact 619/619, 16 codes). RS0024's known-type set required extracting the 56 stdlib .rssi interface types into is_stdlib_type. RS0021 (exhaustiveness) in progress. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 8955931 commit 183e10a

1 file changed

Lines changed: 30 additions & 8 deletions

File tree

docs/ledgers/rss-selfhost-ledger.md

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)