Files
scriptc/tests/library-mode/fences-attest/profile.json
Chris Tate 165ca1f125 Project the attestation's ambient ground into the surface manifest so full fences imply deterministic
- The determinism attestation demoted on Date/perf_hooks/process libCalls that had no manifest entry, so the ask-5 §4 invariant (compiles under full fences => deterministic) could not be stated and the spec's own worked-example prefix stdlib.date. refused as unknown; AMBIENT_SURFACE_FNS now projects those families as permanent manifest ids (stdlib.date.*, node-builtin.perf_hooks.performance.now, node-builtin.process.*) with reach-witnessing detectors.
- BUILTIN_MODULE_FN_ALIASES folds the special-cased alternate spellings into their member detectors: the fs Buffer/fd/options/withFileTypes/watch-listener variants, the JS-ladder mkdtempSyncChk and lchmodSyncChk, crypto's composed randomBytesToString, and os.userInfo's userHomedir/userShell scalars.
- A parity test holds the two scans together over the exhaustive IrLibFn registry: every spelling LIB_NONDETERMINISTIC_PREFIXES demotes on must be deniable through a manifest-id fence, with the library-mode-refused and validate-then-fence residue pinned by name with reasons.
- The §4 invariant fixture and K14's worked fences now cover every attestation-known family, and a new K14 case pins the teeth: Date.now / process.env reads under the full-fence profile refuse SC4008 naming the entry instead of attesting deterministic: false post hoc.
- Sampling probes cover the new static entries (Date.now, process.pid, performance.now); surface-manifest.json regenerated (18 new entries, 336 total).
2026-07-24 11:25:42 -05:00

41 lines
1.7 KiB
JSON

{
"profile_format": 1,
"name": "conformance-fences-attest",
"entry": "lib.ts",
"emission": "llvm",
"abi": {
"prefix": "kf_",
"init_symbol": "kf_init",
"sink_register_symbol": "kf_set_panic_sink",
"collect_symbol": null,
"result_reset_symbol": null
},
"exports": [
{ "export": "boot", "symbol": "kf_boot", "params": ["f64"], "returns": "f64" }
],
"sidecar": {
"wire_version": 1,
"abi_version": 1,
"snapshot_format": 1,
"build_id_symbol": "kf_build_id",
"abi_version_symbol": "kf_abi_version",
"model": "Model",
"msg": "Msg"
},
"determinism": {
"teachings": {
"SC4005": "async is unavailable in this compilation mode; the host executes effects — declare a command instead."
},
"fences": [
{ "id": "stdlib.math.random", "teaching": "randomness is an effect: request it from the host and receive it as a Msg." },
{ "prefix": "node-builtin.fs.", "teaching": "files are effects: declare reads and writes as commands the host executes." },
{ "prefix": "node-builtin.net.", "teaching": "network is an effect: declare requests as commands; responses arrive as Msgs." },
{ "prefix": "node-builtin.os.", "teaching": "machine identity is an effect: ask the host." },
{ "prefix": "node-builtin.crypto.", "teaching": "randomness and digests come from the host." },
{ "prefix": "stdlib.date.", "teaching": "time is an effect: the host passes the clock in as a Msg." },
{ "prefix": "node-builtin.process.", "teaching": "process ambient state and authority belong to the host." },
{ "prefix": "node-builtin.perf_hooks.", "teaching": "the monotonic clock is the host's." }
]
}
}