4.8 KiB
Independent nested-admission review
Reviewer /root/default_omission_review, 2026-09-13. Bounded review of default_omission_admission.rs, the closed admission-1 evidence, and proposed nested-spec-clarification.rst against relevant current source/specification. No blocking test-contract or semantic-clarification finding. No tests, production files, source8 work, or authoritative documentation were changed; no Cargo/Gitea operation was run.
Evidence and test contract
admission-1/result.json identifies HEAD 595cad479045898a5ba521b0cb0e80132726873a, Windows gnullvm Rust/Cargo 1.98.1, 606 captured inputs unchanged, and exit 0. Raw stdout reports 10 passed, 0 failed/ignored; stderr contains only successful build/run progress. Current test SHA-256 11ea431453c34f57e3d45b2c446a773821f0875a19d1d17ae5a6362d5f4c2c82 matches the input manifest; independently recomputed stdout/stderr hashes match the result record.
All ten tests loop over OA and SA. Counting executed helper calls gives 44 accepted authored-source evaluations and 14 refusals (22 and 7 per layer). The refusals comprise 12 missing-field checks and two unknown-Record-field checks. The Integer source with minimum -3 and omitted maximum is admitted twice per layer across different tests; these counts are evaluations, not 44 distinct source strings.
Accepted cases compare the complete compiled Project against literal expected fields and fixed identities, then compare the entire compiled bundle with the original source (default_omission_admission.rs:35–53). shared_in selects a layer wrapper; no model factory supplies expected defaults. Pairwise omitted/explicit equality supplements, rather than replaces, independent literal-model checks. The explicit zero bound also must differ from absence.
Refusals require exactly one diagnostic, invalid_source, and a missing-field message naming the intended field (91–103); Record's unknown fields case checks its specific unknown-field message (233–254). These distinguish parser/constructor admission failures from unrelated model-rule rejection. They do not assert exact diagnostic wording, location, or span, and should not be reported as diagnostic-location coverage.
Proposed clarification
- The proposed table correctly separates nullable omission defaults from selected-constructor required fields. It resolves the misleading existing “Required fields” heading at
docs/language.rst:935–947. Typed Option slots agree withmodel.rs:324–343; required String minimum_length and Enumeration literals remain required. The admitted empty Enumeration list is consistent with requiring its list field and requiring each present literal to be nonempty; “a list of unique nonempty strings” would make the retained table wording clearer. - Whole-definition omission and selected String are correctly distinguished. The whole declaration default is String(minimum_length=0, maximum_length=None), supplied at
model.rs:780–786; declaration merging replaces supplied fields shallowly (language.rs:1995–2005). Selected String therefore does not inherit minimum_length. The new tests execute both missing-minimum refusals and explicit minimum=0 admission, but do not themselves execute a declaration with the entire definition absent. That part of the clarification is supported by existing source/specification (docs/language.rst:109–111), not by this new gate alone. - The Legacy paragraph is correct: interface omission is allowed inside a supplied record, direction remains required (
model.rs:374–377), and selecting Legacy requires a legacy record. The latter is a model validation requirement (ports.rs:737–745,port_legacy_missing), also stated atdocs/language.rst:465; it must not be confused with a universal parser-requiredlegacyfield, whose declaration default remains None. New tests cover missing contract and missing direction, not Legacy with no legacy record. They execute Out, not the proposed illustrative InOut spelling. Those distinctions do not invalidate the text but bound the gate's evidence. - Unknown/duplicate rejection agrees with closed serde constructors and
language.rs:1321–1333. Only the unknown Record field is exercised here; duplicate refusal, Boolean admission, nonempty literal validation, finite/range boundaries, non-None references, warning content, older versions, and source8 are not established by these ten tests.
Small record correction: the proposal title/status still says “pending admission tests.” The gate is now closed, so record the scoped admission evidence and keep the proposal pending peer integration/normative adoption. Its source-7 wording and prohibition on generalizing nullable omission are appropriate. Do not turn this gate into a claim of compact canonical generation, lossless-update repair, complete omission coverage, or issue 11 acceptance.