Rule 11.16
Chapter 11, Targets and the oracle Test
A capability that only WebGL2 has must enter the surface only as a row of §9.3 (an author-facing name) or as a capability of §10 (a host feature a module declares or derives); it must not become a language construct, a built-in value or a type by another route. Where neither is justified, its row is n/a with the reason, and the reason is a rule.
The rule text and the parts under it are the compiler's own English, as the design document writes them.
Rationale
Rule 1.2 makes GLSL ES 3.00 a target and not the definition of a construct, and Rule 2.1 gives an author-facing name three sources, none of which is WebGL2; a WebGL2-only capability therefore needs the one door the rules leave open, and a row that says n/a without a rule is the “TypeShade cannot” this proposal exists to end.
Derives from
How it is verified
Checked by a test. A test, a gate script or a CI workflow names this rule, and the traceability check fails when a file listed below stops naming it.
Where the rule says the compiler enforces it:
capability-coverage.test.ts, which fails on a WebGL2-flagged row whose WebGL2 status is typed with no §9.3 row and no §10 capability behind it, and on one whose status is n/a with no rule number in its reason.
The files that verify it at commit 91c2fe31, each at the first line that names the rule:
-
src/core/spec-conformance/capability-coverage.test.ts:47(checked by the compiler's own test)
See also
Source
The rule at commit 91c2fe31:
docs/language-design.md:1375(the design document)reqs/rules/RULE-1116.md(its traceability item)