@@ -1292,3 +1292,72 @@ gap is VM value-representation / intrinsic-dispatch cost (the next big lever).
12921292 RS0013.
12931293- ** Next slice:** ` expr_type_root ` + the error-type map are ready for RS0210
12941294 (operator), RS0207 (argument), RS0208 (return).
1295+
1296+ ### Milestone 2n — call-signature cluster slice: RS0201 UNNAMED_ARGUMENT GATED (28 codes); RS0202 blocked (constructor-inline sub-case)
1297+
1298+ - ** Goal:** add the call-resolution/param-signature cluster — RS0201 (unnamed
1299+ argument) and RS0202 (missing data effect). Both need callee param signatures
1300+ and light receiver-type inference.
1301+ - ** Measure-first (one run, both codes in target, rss emitting neither):** the
1302+ whole-corpus oracle set is small and bounded — ** 5 RS0201 files, 9 RS0202
1303+ files** :
1304+ * RS0201: ` fail/ast-call-unnamed-nested.rss ` (` String.concat("prefix", ..) ` ),
1305+ ` fail/call-unnamed-and-missing-argument.rss ` (` combine(read "a", ..) ` , a
1306+ ` pub fn ` ), ` fail/features-and-call-style.rss ` (` Image.save(read image, ..) ` ),
1307+ ` fail/malformed-empty-call-argument.rss ` + ` samples/ast/mal_empty_call_arg.rss `
1308+ (` Log.write(, message: ..) ` empty slot).
1309+ * RS0202 (4 distinct oracle sub-cases): argument-effect (` File.write ` /
1310+ ` Image.resize ` /` ResourcePool.borrow ` /` Log.write ` /same-file ` Cache.put ` ),
1311+ receiver-call self-effect (` read cache.put(..) ` vs ` self: mut ` ), constructor
1312+ inline managed field (` Boxed(image: read image) ` ), and match-scrutinee effect
1313+ (` match xs { [a,b] => .. } ` with no ` read ` /` mut ` /` take ` ).
1314+ - ** RS0201 built (committed):**
1315+ * ` collect_call_fn_sigs ` — ` pubFns ` (public unqualified fn names) + ` dottedFns `
1316+ (dotted method fn names, e.g. ` Cache.put ` ), the same-file call-resolution
1317+ table.
1318+ * ` call_requires_named ` / ` is_core_named_namespace ` — call-kind classifier
1319+ mirroring the parser's ` is_qualified_namespace_receiver ` (uppercase dotted
1320+ head ⇒ qualified). Fires only for public same-file unqualified fns and a
1321+ ** measure-first-curated** core namespace allowlist ` {String, Image, Log} ` ;
1322+ receiver calls, private helpers, variant/type constructors, same-file methods,
1323+ and unknown/imported namespaces are skipped (FP-safe).
1324+ * ` args_have_unnamed ` / ` seg_is_unnamed ` — arg splitter respecting ` ()[]<>{} `
1325+ nesting ** and closure param pipes ` |a, b| ` ** , with the malformed empty-slot
1326+ and lone-trailing-comma rules.
1327+ - ** FP discipline:** first run at a broad rule surfaced 14 false positives — all
1328+ from (a) closure multi-param commas ` |acc, val| ` splitting a named arg, and
1329+ (b) qualified calls to user/imported sum-variant or unknown namespaces
1330+ (` ChatMessage.system(..) ` , which the oracle leaves UNKNOWN_CALLEE with no naming
1331+ diagnostic). Fixed by pipe-toggling the splitter and by curating the qualified
1332+ fire-set to ` {String, Image, Log} ` (the only namespaces the oracle actually
1333+ flags). A ` ) ` -guard that mis-read a previous statement's close-paren as a
1334+ complex receiver was removed (it FN'd ` Image.save ` ).
1335+ - ** RS0202 — NOT landed (blocked):** it is a file-level OR flag over FOUR oracle
1336+ sub-cases; greening requires all nine oracle files AND zero FP over 619
1337+ constructor/call-heavy files. The ** constructor-inline-managed-field** sub-case
1338+ (` fail/constructor-inline-managed-field.rss ` ) is the blocker: the oracle rule
1339+ (` checks/body/fresh.rs::constructor_arg_uses_managed_inline_value ` ) fires only
1340+ when the field is a non-Copy, non-` handle ` INLINE struct/class field AND the
1341+ value is a * managed* binding (` let ` -bound, or crossing a handle, or a
1342+ non-` fresh ` managed-returning call) — a classification needing per-field
1343+ ` handle ` /` weak ` parsing, Copy/type-kind resolution, and ` let ` -vs-` local ` -vs-
1344+ param-vs-` fresh ` binding tracking. No token-level approximation is FP-safe
1345+ across the many legitimate ` T(field: read x) ` constructor calls in the corpus,
1346+ and missing this one file leaves RS0202 red. Deferred; the arg-effect stdlib
1347+ map (` File.write ` →file: mut , ` Image.resize ` →image: mut , ` ResourcePool.borrow ` →
1348+ pool: mut , ` Log.write ` →message: read ) + same-file receiver-method self/param
1349+ effects + the match-scrutinee scan (the other 8 files) are straightforward once
1350+ a safe constructor-inline rule exists.
1351+ - ** Gate:** ` checker_parity_corpus ` ** 619/619 ok, 0 mismatches, 0 run-failures**
1352+ at ** 28 codes** (RS0201 added). Green.
1353+ - ** Env note:** the Docker dev stack was factory-reset mid-slice (0 images/
1354+ containers/volumes); verified on the host toolchain (` cargo 1.95.0 ` ,
1355+ ` aarch64-apple-darwin ` ) instead — same ` checker_parity_corpus ` test, 1730s.
1356+ - ** CHECKER_TARGET_CODES (28):** RS0002, RS0003, RS0004, RS0005, RS0006, RS0007,
1357+ RS0008, RS0009, RS0010, RS0011, RS0012, RS0016, RS0017, RS0021, RS0024, RS0028,
1358+ RS0033, RS0029, RS0023, RS0035, RS0027, RS0014, RS0018, RS0019, RS0022, RS0101,
1359+ RS0013, RS0201.
1360+ - ** Next slice:** RS0202 once a FP-safe constructor-inline-managed-field rule is
1361+ found (parse field ` handle ` /` weak ` + Copy/type-kind + ` let ` /` local ` binding);
1362+ the arg-effect + receiver-self + match-scrutinee sub-cases reuse
1363+ ` collect_call_fn_sigs ` and the arg splitter directly.
0 commit comments