backend: an uninhabited type argument builds (WEB F2) #102

Closed
opened 2026-10-05 21:07:20 +00:00 by orion · 8 comments
Collaborator

Goal

WEB.md F2 ("an uninhabited type argument builds": List<Never> and every function over it, Html<Never> for static pages) is already implemented: commit c11ca51a (fix(lower): lower generics instantiated with Never, whose slots no value ever reaches) lets the verifier accept a slot of Never and lowers the unreachable reads, and tests/conformance/never-list.trb, never-shown.trb and never-type-argument.trb hold it (the conformance suite runs natively and in the VM). std/html (#93) builds Html<Never> on it. Only the design record still says "does not build".

This issue is reduced to the remaining step: bring docs/design/WEB.md in line with the code, so that no later reader plans work for a closed gap.

Scope (one PR, one commit: docs(web): mark F2 done)

In docs/design/WEB.md:

  • Probe table row 3 (type Markup<Message = Never>): drop "Does not build: ..." and state that it builds after F2, with the commit/issue reference.
  • Section 7 problem 2 ("List<Never> does not build"): mark Closed like problem 1 (reference c11ca51a and the three conformance tests).
  • Section 6 note "(after F2)" (static page cannot carry a handler): drop the condition, it holds now.
  • Section 8 table F2: "(done, ...)" in the style of F3 and F5, naming the chosen form (a slot of Never is allowed in the IR and every read of it is unreachable; no unit monomorphization).
  • Section 9 slice 1 "Needed by" cell: remove the F2 dependency / the Nothing stand-in remark.
  • Regenerate skills/ if the docs gate asks for it (CLAUDE.md "docs changes regenerate skills/").

Acceptance criteria

  • Verified on main by quick checks only: tests/conformance/never-list.trb exists with its .expected, and std/html tests use Html<Never> (no compiler run needed; CI gates cover them).
  • The five places above no longer claim that List<Never> / Html<Never> does not build, and each F2 mention points at the landed commit or conformance tests.
  • torb format --check clean on touched files; tools/check-commits.sh clean (Conventional Commits, one commit).
  • Forge CI tier A green (docs only).
  • No other file changes. If a back-end case turns up that still fails (say Option<Never> in a native feature not covered by the three tests), it is a new issue with a reproducer, not part of this one.

Design record points

Implements the record update for WEB.md section 8 F2 and section 7 problem 2. The design decision itself (accept the slot, mark reads unreachable) is already taken in code and needs no owner input.

Seed impact

None: documentation only, no syntax change, no native, no driver flag, no std name looked up by string.

Size

One PR, one commit.

## Goal WEB.md F2 ("an uninhabited type argument builds": `List<Never>` and every function over it, `Html<Never>` for static pages) is **already implemented**: commit `c11ca51a` (`fix(lower): lower generics instantiated with Never, whose slots no value ever reaches`) lets the verifier accept a slot of `Never` and lowers the unreachable reads, and `tests/conformance/never-list.trb`, `never-shown.trb` and `never-type-argument.trb` hold it (the conformance suite runs natively and in the VM). `std/html` (#93) builds `Html<Never>` on it. Only the design record still says "does not build". This issue is reduced to the remaining step: bring `docs/design/WEB.md` in line with the code, so that no later reader plans work for a closed gap. ## Scope (one PR, one commit: `docs(web): mark F2 done`) In `docs/design/WEB.md`: - Probe table row 3 (`type Markup<Message = Never>`): drop "**Does not build**: ..." and state that it builds after F2, with the commit/issue reference. - Section 7 problem 2 ("`List<Never>` does not build"): mark **Closed** like problem 1 (reference `c11ca51a` and the three conformance tests). - Section 6 note "(after F2)" (static page cannot carry a handler): drop the condition, it holds now. - Section 8 table F2: "(done, ...)" in the style of F3 and F5, naming the chosen form (a slot of `Never` is allowed in the IR and every read of it is unreachable; no unit monomorphization). - Section 9 slice 1 "Needed by" cell: remove the F2 dependency / the `Nothing` stand-in remark. - Regenerate `skills/` if the docs gate asks for it (CLAUDE.md "docs changes regenerate `skills/`"). ## Acceptance criteria - [ ] Verified on `main` by quick checks only: `tests/conformance/never-list.trb` exists with its `.expected`, and `std/html` tests use `Html<Never>` (no compiler run needed; CI gates cover them). - [ ] The five places above no longer claim that `List<Never>` / `Html<Never>` does not build, and each F2 mention points at the landed commit or conformance tests. - [ ] `torb format --check` clean on touched files; `tools/check-commits.sh` clean (Conventional Commits, one commit). - [ ] Forge CI tier A green (docs only). - [ ] No other file changes. If a back-end case turns up that still fails (say `Option<Never>` in a native feature not covered by the three tests), it is a new issue with a reproducer, not part of this one. ## Design record points Implements the record update for WEB.md section 8 F2 and section 7 problem 2. The design decision itself (accept the slot, mark reads unreachable) is already taken in code and needs no owner input. ## Seed impact None: documentation only, no syntax change, no native, no driver flag, no std name looked up by string. ## Size One PR, one commit.
Author
Collaborator

[loop:torbscript] intake: in scope (author orion, label loop). Implements WEB.md F2 (backend builds an uninhabited type argument); no dependencies, no collision with a design record. Touches compiler/src (backend), so it is an opus/high implementer item. next: refine.

[loop:torbscript] intake: in scope (author orion, label loop). Implements WEB.md F2 (backend builds an uninhabited type argument); no dependencies, no collision with a design record. Touches `compiler/src` (backend), so it is an opus/high implementer item. next: refine.
Author
Collaborator

[loop:torbscript] refine: still queued behind the intake order. next: waiting (ready buffer full: #4, #163, #164, #223 are ready) until 2026-10-10T04:00:00Z

[loop:torbscript] refine: still queued behind the intake order. next: waiting (ready buffer full: #4, #163, #164, #223 are ready) until 2026-10-10T04:00:00Z
Author
Collaborator

[loop:torbscript] claim refine by session:loop-torbscript-20261026 until 2026-10-26T01:00:00Z

[loop:torbscript] claim refine by session:loop-torbscript-20261026 until 2026-10-26T01:00:00Z
Author
Collaborator

[loop:torbscript] decided by the loop: F2 is already implemented on main (commit c11ca51a, 2026-09-25; verifier accepts a slot of Never, reads of it lower to Unreachable; conformance tests never-list, never-shown, never-type-argument run natively and in the VM; std/html builds Html<Never>). Rather than close, the issue is cut down to the one remaining step: update the stale "does not build" statements in docs/design/WEB.md (probe 3, problem 2, section 6 "after F2", F2 row, slice 1 dependency). Why: the code work is done and measured by existing tests; a docs-only PR is one commit, no owner question, no seed impact. Body rewritten accordingly (and the implementer is sonnet/medium, docs only, not opus/high as the intake guessed).

[loop:torbscript] refine: verified the code against main, found no duplicate among open issues (keyword search Never, uninhabited), rewrote the body with goal, testable acceptance criteria, design record points and seed impact (none), size one PR / one commit. next: ready. (~45k tokens)

[loop:torbscript] decided by the loop: F2 is already implemented on `main` (commit `c11ca51a`, 2026-09-25; verifier accepts a slot of `Never`, reads of it lower to `Unreachable`; conformance tests `never-list`, `never-shown`, `never-type-argument` run natively and in the VM; `std/html` builds `Html<Never>`). Rather than close, the issue is cut down to the one remaining step: update the stale "does not build" statements in `docs/design/WEB.md` (probe 3, problem 2, section 6 "after F2", F2 row, slice 1 dependency). Why: the code work is done and measured by existing tests; a docs-only PR is one commit, no owner question, no seed impact. Body rewritten accordingly (and the implementer is sonnet/medium, docs only, not opus/high as the intake guessed). [loop:torbscript] refine: verified the code against `main`, found no duplicate among open issues (keyword search `Never`, `uninhabited`), rewrote the body with goal, testable acceptance criteria, design record points and seed impact (none), size one PR / one commit. next: ready. (~45k tokens)
Author
Collaborator

[loop:torbscript] claim implement by session:loop-torbscript-20261026 until 2026-10-26T05:00:00Z

[loop:torbscript] claim implement by session:loop-torbscript-20261026 until 2026-10-26T05:00:00Z
Author
Collaborator

[loop:torbscript] implement: docs-only PR #485 opened (one commit docs(design): mark WEB.md F2 done, an uninhabited type argument builds; probe 3, problem 2 closed, section 6 note, F2 row, slice 1 dependency updated; verified on main that never-list/never-shown/never-type-argument conformance tests and Html<Never> in std/html exist; docs/design is not part of skills/, nothing to regenerate; commit check and pdisc green, tier A green, gates/archives/seed jobs still pending in the queue at hand-off). Argus review requested. next: review (~60k tokens)

[loop:torbscript] implement: docs-only PR https://git.torb.dev/torbscript/language/pulls/485 opened (one commit `docs(design): mark WEB.md F2 done, an uninhabited type argument builds`; probe 3, problem 2 closed, section 6 note, F2 row, slice 1 dependency updated; verified on main that never-list/never-shown/never-type-argument conformance tests and `Html<Never>` in std/html exist; docs/design is not part of `skills/`, nothing to regenerate; commit check and pdisc green, tier A green, gates/archives/seed jobs still pending in the queue at hand-off). Argus review requested. next: review (~60k tokens)
argus closed this issue 2026-10-25 23:47:06 +00:00
Author
Collaborator

[loop:torbscript] claim implement by session:loop-torbscript-20261026 until 2026-10-26T09:00:00Z

[loop:torbscript] claim implement by session:loop-torbscript-20261026 until 2026-10-26T09:00:00Z
Author
Collaborator

[loop:torbscript] implement: nothing left to do. PR #485 (docs(design): mark WEB.md F2 done, an uninhabited type argument builds, Closes #102) was already approved and landed on main by argus as c72cabec (2026-10-25T23:47Z), its CI was green, and main WEB.md no longer carries the stale "does not build" statements for F2. The duplicate claim of 2026-10-26T05:02Z created no branch, worktree or second PR. next: done (issue already closed)

[loop:torbscript] implement: nothing left to do. PR #485 (docs(design): mark WEB.md F2 done, an uninhabited type argument builds, Closes #102) was already approved and landed on main by argus as c72cabec (2026-10-25T23:47Z), its CI was green, and main WEB.md no longer carries the stale "does not build" statements for F2. The duplicate claim of 2026-10-26T05:02Z created no branch, worktree or second PR. next: done (issue already closed)
Sign in to join this conversation.
No labels
loop
ready
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
torbscript/language#102
No description provided.