Some checks are pending
Intrepid/Prometeu/Studio/pipeline/pr-master Build started...
JaCoCo Coverage #### Project Overview
No changes detected, that affect the code coverage.
* Line Coverage: 61.95% (17766/28676)
* Branch Coverage: 52.69% (6860/13019)
* Lines of Code: 28676
* Cyclomatic Complexity: 11490
#### Quality Gates Summary
Output truncated.
Test / Build skipped: 15, passed: 648
Publish the console ABI authority map: runtime catalogs win, PBS stdlib is delivery. Recut specs 18, 8, and 6.2 and lock them with ConsoleAbiAuthoritySpecTest. Housekeep DSC-0061 with LSN-0064.
122 lines
5.1 KiB
Markdown
122 lines
5.1 KiB
Markdown
---
|
|
id: LSN-0064
|
|
ticket: multi-frontend-sdk-canonical-definition
|
|
title: Runtime owns console ABI; PBS is delivery
|
|
created: 2026-09-19
|
|
tags: [compiler, compiler-general, sdk, stdlib, hostcalls, intrinsics, multi-frontend]
|
|
---
|
|
|
|
# Runtime owns console ABI; PBS is delivery
|
|
|
|
## Original Problem
|
|
|
|
"SDK" mixed three layers: platform ABI, PBS stdlib shells, and docs. The PBS
|
|
compiler reads `[Host]` and `[IntrinsicCall]` from `.pbs` files. It does not
|
|
read the runtime registry. Intrinsics already had a CSV in the runtime
|
|
repository, a handwritten Java enum, and a disabled parity test. Spec 8
|
|
documented `audio` and `@core:math`. Disk had `game/stdlib/1` with `color`,
|
|
`asset`, `composer`, `gfx`, `input`, and `log`. Spec 18 preferred `@sdk:*` for
|
|
host APIs while `@sdk:input` was a builtin.
|
|
|
|
There is no second language in this phase. The risk was not a missing generic
|
|
SDK. The risk was treating PBS shells, or a stale spec, as console ABI.
|
|
DEC-0047 had already classified canonical host identity as platform-owned and
|
|
left `PbsHostAdmissionValidator` in the PBS package until a shared source
|
|
existed.
|
|
|
|
## Consolidated Decision
|
|
|
|
This discussion was an audit. It published an authority map. It did not create
|
|
a canonical schema, generate bindings, enable intrinsic parity, or move the
|
|
host-admission validator.
|
|
|
|
The console has two distinct axes:
|
|
|
|
- VM-owned intrinsics, identity `canonical_name@version` plus `final_id`;
|
|
- host-backed calls, identity `(module, name, version)` plus capability.
|
|
|
|
Do not unify those axes into one catalog while PBS is the only frontend.
|
|
|
|
Conflict resolution:
|
|
|
|
- Intrinsic conflict: `runtime/docs/vm-arch/INTRINSICS.csv` wins. Studio
|
|
`docs/vm-arch/INTRINSICS.csv` is a mirror. `IRVMIntrinsicDefinition` is
|
|
derived. PBS `[BuiltinType]` / `[IntrinsicCall]` shells are delivery.
|
|
- Host conflict: runtime spec 16 and `SyscallMeta` win. PBS `[Host]` attributes
|
|
must not define ABI. They declare the shell the PBS compiler reads today.
|
|
|
|
`@sdk:*` / `@core:*` paths must not imply ownership. `@sdk:input` is a
|
|
registered builtin exception. It was not moved to `@core`.
|
|
|
|
PBS conformance means PBS shells and docs match runtime ABI, not the reverse.
|
|
`PbsHostAdmissionValidator` may stay in the PBS package. `E_HOST_*` is not
|
|
eternal PBS semantics.
|
|
|
|
## Final Implementation
|
|
|
|
The work was editorial and test-facing.
|
|
|
|
Spec 18 now states that PBS stdlib is delivery and must not define syscall IDs,
|
|
intrinsic `final_id` values, or `SyscallMeta`. Runtime catalogs outrank it.
|
|
`@sdk:input` is recorded as the current builtin exception.
|
|
|
|
Spec 8 now documents `<target>/stdlib/<N>/...` with current line `1` at
|
|
`game/stdlib/1`: `core/color` and `sdk/{asset,composer,gfx,input,log}`. It no
|
|
longer ships `audio` or `@core:math` as current modules.
|
|
|
|
Spec 6.2 now requires PBS host shells to repeat the runtime registry and forbids
|
|
inventing `(module, name, version)`. The authority example is
|
|
`("gfx2d", "clear", 1)`.
|
|
|
|
`ConsoleAbiAuthoritySpecTest` locks those sentences. No production compiler
|
|
code, stdlib `.pbs`, or validator package moved. The intrinsic parity test
|
|
stays disabled.
|
|
|
|
## Examples
|
|
|
|
Runtime wins:
|
|
|
|
- `color.rgb@1` / `final_id` `0x1101` come from `INTRINSICS.csv`;
|
|
- `("gfx2d", "clear", 1)` and `("asset", "load", 1)` come from `SyscallMeta`.
|
|
|
|
PBS delivers, and does not own, those identities:
|
|
|
|
- `@core:color` with `[BuiltinType(name = "color", version = 1)]`;
|
|
- `@sdk:gfx` `LowGfx.clear` with `[Host(module = "gfx2d", name = "clear", version = 1)]`;
|
|
- `@sdk:input` with `[BuiltinType]` / `[IntrinsicCall]` under `@sdk`.
|
|
|
|
Stale docs that the recut removed as current line-1 inventory:
|
|
|
|
- `stdlib/1/sdk/audio`;
|
|
- `@core:math` as a packaged module.
|
|
|
|
## Pitfalls
|
|
|
|
- Do not treat PBS stdlib as the ABI catalog because the compiler already reads
|
|
it. That is convenience, not authority.
|
|
- Do not create `HOSTCALLS.csv` or generate the Java enum because the map now
|
|
exists. A catalog waits on a second consumer.
|
|
- Do not move `PbsHostAdmissionValidator` on the strength of this map. DEC-0047
|
|
classified identity as platform; this discussion published who wins; the
|
|
validator still has no shared catalog to consume.
|
|
- Do not read `@sdk` as host and `@core` as VM. Path is packaging. `@sdk:input`
|
|
is builtin.
|
|
- Do not enable `IRVMIntrinsicRegistryParityTest` as a side effect of a doc
|
|
recut. That is compiler/runtime sync, not PBS packaging conformance.
|
|
- Do not put the authority map only in a decision. Housekeep deletes workflow
|
|
artifacts. Specs and this lesson keep the map.
|
|
|
|
## References
|
|
|
|
- Decision: `DEC-0048`
|
|
- Plan: `PLN-0127`
|
|
- Related lesson: `LSN-0063` - Language vs platform validation ownership
|
|
- Related lesson: `LSN-0061` - PBX is the language-neutral runtime boundary
|
|
- `docs/specs/compiler/18. Standard Library Surface Specification.md`
|
|
- `docs/specs/compiler-languages/pbs/8. Stdlib Environment Packaging and Loading Specification.md`
|
|
- `docs/specs/compiler-languages/pbs/6.2. Host ABI Binding and Loader Resolution Specification.md`
|
|
- `docs/vm-arch/README.md`
|
|
- `../runtime/docs/vm-arch/INTRINSICS.csv`
|
|
- `../runtime/docs/specs/runtime/16-host-abi-and-syscalls.md`
|
|
- `prometeu-compiler/prometeu-build-pipeline/src/test/java/p/studio/compiler/specs/ConsoleAbiAuthoritySpecTest.java`
|