23 lines
4.8 KiB
Markdown
23 lines
4.8 KiB
Markdown
# 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 with `model.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 at `docs/language.rst:465`; it must not be confused with a universal parser-required `legacy` field, 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.
|