Loading…
Reference in a new issue
No description provided.
Delete branch "feat/197-docs-orphaned-debt-gets-a-queue-14-and-50-ente"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
docs: orphaned debt gets a queue — #14 and #50 enter gap_selfhost as T13/T14
Along the way:
Touches 22 files:
src/cklang/compiler/Elf.ck,src/cklang/compiler/Elf.ckh,src/cklang/compiler/Emit.ck,src/cklang/compiler/Emit.ckh,src/cklang/compiler/Eval.ck,src/cklang/compiler/Eval.ckhand 16 more.Approving. I would have split
src/rust/crates/ck_driver/tests/stdlib_composes_silence.rsdifferently, but not enough to hold this up.@ -0,0 +122,4 @@/// and it must have none: this is the machine behind Types.ck's "the SELF-ROOT/// check vouches for this line".#[test]fn the_live_stdlib_checks_clean_as_its_own_root() {the_live_stdlib_checks_clean_as_its_own_rootreads, decides and writes in one function. The deciding part is the piece I would want to test on its own. Worth splitting?Split. The decision in
the_live_stdlib_checks_clean_as_its_own_rootis a pure function now, with its own tests insrc/rust/crates/ck_driver/tests/stdlib_composes_silence.rs.Probed both positions. T13's premise ("unqualified root-trait names don't resolve from mod Types") is false: the composes probe is the compilation-global trait roster — a Prelude trait binds bare from any module, an unknown name refuses (E0753), and a qualified spelling never reaches the resolver (E0013: the clause grammar takes bare identifiers only, the parser reports the `::`). What LOOKED like silence is an ATTRIBUTION boundary, not a missing pass: a dependency unit's diagnostics are dropped at the app boundary, so no app check ever vouched for a stdlib page's clause — `composes NoSuchTrait` spliced into String checks clean under a trivial app, and the same bytes refuse when the stdlib is its own root. So the lawful fix is the opposite of the queued deletion: the behaviour-trait entries (Equals/Ord/Show/Concat) stay, spelled exactly as the root spec authors them, and the machine that reads them is the SELF-ROOT check (app == stdlib), gated in ck_driver/tests/stdlib_composes_silence.rs — the silence pinned with doctored bytes and two contrast arms, and the live stdlib asserted clean as its own root. The falsified SILENT prose is deleted from both stdlib copies; Types.ck cites the pins instead. T13 leaves gap_selfhost.md paid: falsified, its truth in cells. Five new cells: an_unknown_composes_trait_name_refuses (E0753), a_qualified_composes_trait_name_is_a_grammar_gap (E0013), composes_resolves_a_prelude_trait_unqualified, composes_resolves_a_sibling_module_trait, composes_trait_args_are_not_arity_checked (the live hole: 3 args on a 1-param trait pass clean). CELL_COUNT 391 → 396. Also: Prelude.ck "#31" drops the debt label — same fix as #33 in e064bca0. Check clean · suite 146/146 · capability 396 green · stdlib self-root gate green. Corpus oracle skipped: the corpus stdlib edit is comment-only, folding untouched.Probed before building (the T13 lesson, taken literally). T14's premise ("a String may not cross a match arm") is false in every shape the Prelude formats need: a region-typed PARAM as an arm result, param vs empty-literal arms across two regions, and the exact corpus group-site shape (newtype-ctor round-trip in the true arm) all check clean and exit 42. The law was already paid by the merge-slot fix `match_string_arm_result` pins — a merge slot is a BINDING and takes the value's whole word list, the `(position, len)` descriptor for a String (docs/values.md:147) — and nothing in that law is literal-only. The queue entry was stale at queue time. The derivation, from the docs and not from emission: a match is typed to the union of its arm bodies; every value is a `(position, len)` descriptor into the fenced region (docs/values.md:147); a merge binds whichever arm's descriptor jumped in, exactly as a `let` of either value would — region identity rides in the position word, so arms need not share a region. No new region law exists to add: the binding law already covers the merge, which is why the fix is deletion, not construction. So `take_if` — the len-0-same-region detour that existed only because the merge once took a single word — retires from BOTH trees. The live src/cklang/stdlib had no callers (the show engines are excised): the fn and its header row are deleted, and the self-root gate (stdlib_composes_silence) holds. The corpus tree's five call sites in `span_text` (Types.ck) become what they always meant: a `match` on the magnitude with the String in the arms — the group when nonzero, the empty literal when zero. Same widths, same narrowing round-trips, same rendered text (`timespan_show_omits_zero_groups` still pins `2m13s`). Two new cells hold the probes: `string_param_as_match_arm_result` (the detoured shape, runs 42) and `string_param_and_empty_literal_match_arms` (two source regions merging, runs 42). CELL_COUNT 396 → 398. T14 leaves gap_selfhost.md paid: falsified, its truth in cells — the watchdog queue (T13, T14) is empty. Check clean · suite 146/146 · capability 398 green · self-root gate green · corpus oracle 45/45 (the corpus stdlib changed; the oracle run is the proof the emitted images agree).