Publish the language-versus-platform validation matrix in compiler-general specs, retitle spec 19, and recut PBS diagnostics so common structural failures are not PBS coverage. Housekeep DSC-0060 with LSN-0063.
5.3 KiB
| id | ticket | title | created | tags | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| LSN-0063 | multi-frontend-validation-boundaries | Language vs platform validation ownership | 2026-09-19 |
|
Language vs platform validation ownership
Original Problem
PBS mixed two kinds of rejection. Some failures only make sense with the
language: syntax, types, markers, barrel files, imports. Others belong to any
executable frontend: malformed IRBackend, invalid lifecycle declarations,
missing assembled wrappers, host-capability identity, bytecode/preload.
Without an ownership rule, the next frontend would copy PBS validators, or the
common layer would start knowing [Init], barrel, and E_SEM_*. Spec 19 was
still titled as PBS verification, and the PBS diagnostics catalog listed
wrapper and boot-guard failures as PBS coverage.
Lifecycle assembly had already moved (LSN-0062). That proved the pattern. It
did not inventory the rest.
Consolidated Decision
A validation lives at the lowest layer that understands the failure without knowing the source language.
- Language: needs AST, tokens, a language marker, a barrel, or another source rule.
- Platform: can be checked on
IRBackend,IRLifecycleDeclaration, IRVM, PBX, host/capability tables, or ids.
The discussion published that matrix. It did not extract a generic validator-core and did not move validators whose common contract is not closed.
Host admission is split. PBS owns the source shape of [Host] and
[Capability]. Platform owns canonical (module, name, version) identity and
capability consistency once those facts exist on IRReservedMetadata. The
current validator may stay in the PBS package until a later plan. E_HOST_*
is not eternal PBS semantics.
The same fact may exist on both sides with distinct identities. PBS can report
E_SEM_MISSING_PROJECT_FRAME; the common layer still rejects an executable
declaration with no frame root.
Platform codes are COMMON_*, LOWER_IRVM_*, or MARSHAL_*. PBS keeps
E_PARSE_*, E_SEM_*, E_LINK_*, and E_HOST_*. Copy origin/span when
present; a missing origin is a structural error, not a reason to invent a span.
Linking and barrel stay language-owned. Addressable is platform-owned and was
classified only. SDK canonical source and the broad architectural harness stay
on adjacent discussions.
Final Implementation
The work was editorial and test-facing.
Spec 19 is now Compiler Verification and Safety Checks Specification. Gates
S-U and S-I are unchanged. Section 11 states the classification rule, the
English ownership matrix, diagnostic identity, dual reporting, and the
host-admission split. It explicitly refuses validator-core extraction and
package moves.
PBS diagnostics spec 12 keeps marker, syntax, semantics, linking, and host-attribute coverage. Common structural failures now point at spec 19 section 11 and spec 20 instead of appearing as PBS required coverage.
Spec 20 cross-references that same compiler-general ownership. The conformance
matrix added G19-11.1 through G19-11.6 and PBS12-11.
CommonBackendArchitectureTest now guards backend/, lifecycle/, and all
common pipeline stages. ValidationOwnershipSpecTest locks the title, matrix,
and PBS recut.
PbsHostAdmissionValidator remains under p.studio.compiler.pbs. No linking
or asset production code moved.
Examples
Language-owned:
- parse errors;
[Init]/[Frame]signature and colocation;- barrel and import failures;
host call not allowed during init.
Platform-owned and already implemented:
- invalid
IRLifecycleDeclaration; - assembled wrapper, boot guard, and synthetic origin preconditions;
- IRVM and marshal rejection families.
Classified as platform, not moved:
- canonical host-binding identity on
IRReservedMetadata; Addressable/ asset path.
Dual reporting:
- missing
[Frame]in PBS source isE_SEM_MISSING_PROJECT_FRAME; - an executable declaration without frame root is a common structural error.
Pitfalls
- Do not treat “classified as platform” as “move the class now.” Host admission still waits on the SDK source discussion.
- Do not merge language and platform failures into one hybrid code. Two identities are cheaper than a lost message.
- Do not put PBS governance or PBS diagnostics in charge of compiler-general safety gates.
- Do not scan PBS frontend sources with the platform architecture guard. The guard is for common validators, not for the language package that must remain.
- Do not invent a validator-core because several common checks exist. They already live on their stages.
References
- Decision:
DEC-0047 - Plan:
PLN-0126 - Related lesson:
LSN-0062- Common lifecycle assembly after frontend declaration - Related lesson:
LSN-0059- Common IRBackend handoff and backend guardrails docs/specs/compiler/19. Verification and Safety Checks Specification.mddocs/specs/compiler-languages/pbs/12. Diagnostics Specification.mddocs/specs/compiler/20. IRBackend to IRVM Lowering Specification.mddocs/specs/compiler/22. Backend Spec-to-Test Conformance Matrix.mdprometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/specs/ValidationOwnershipSpecTest.javaprometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/specs/CommonBackendArchitectureTest.java