Core-1 previewimplementation reference

Owned Dynamic benchmark transport, typed matching and explicit lookup authority.

Owned Dynamic benchmark values

The closed zerglang.benchmark-exec/4 request invokes checked Core-1 interpreted Algorithm messages with complete Dynamic parameter and result signatures. It uses the existing public owned runtime, not a host-side oracle or source rewriting. Only the interpreter and reflect effect/capability subset are admitted. Other signatures/tiers remain explicit gaps; stable activation is unchanged.

Required request fields are schema, operation: "dynamic", source_path, edition: "core-1", the cumulative preview, a fully qualified public root selector, executor: "algorithm-interpreter", arguments, and authority. arguments contains 0–32 lowercase-hex canonical ZLD2 frames; the checked signature must have exactly that arity. Each frame/result, including its header, is limited to 16,384 bytes. Existing total request and process-output bounds remain 65,536 bytes. Results never silently truncate.

authority is exactly none or reflect. The host issues a live reflect capability only for an explicit reflect request. A source effect never creates authority. Missing authority for an actual lookup remains a language failure. Arguments remain host-owned; the runtime clones them and returns an owned result. Arguments, results, frames and capabilities are released on all exit paths.

Optional source_files uses the complete package-closure rules, including path/module correspondence, exact root selection, all-source checking, confinement and aggregate limits. Imported calls execute the checked root artifact and preserve transitive effects and ownership. Revisions 1–3 retain valid request behavior, including revision 1’s fixed record-lookup seam and bare-name aliases. Revision 4 requires an exact fully qualified selector, not a bare alias.

Linked private late-lookup intrinsics retain their behavior after the package linker wraps their names. The evaluator unwraps complete length-prefixed module/type/selector records before matching the reserved intrinsic; it does not treat a name suffix as authority. Lookup still checks the caller’s declared effect and the separately supplied live capability. Compiled internal callees may receive and return opaque Dynamic values. The public root remains interpreted; this transfer support does not imply Dynamic native/JIT support and does not change earlier source or artifact encodings. The dynamic-linkage mutation gate and generated one-to-four-hop package calls cover lookup, missing authority and argument selection.

The separately versioned explicit source matching extension adds closed-tag matching in compiled/interpreted callees, including scoped Bool and Int64 bindings, through ZLM2 2.21 / ZLA2 1.13. Request revision 4 is unchanged. Matching runs through the checked owned runtime, preserves authority boundaries, and shares an instruction budget across calls. It does not enable native tiers.

The result envelope remains zerglang.benchmark-result/1. A successful result has exactly kind: "dynamic-zld2" and hex. Wrong request identity/authority is ZL-BENCH-REQUEST; wrong arity is ZL-BENCH-ARGUMENTS; malformed/oversized frames are ZL-BENCH-DYNAMIC-VALUE. Invalid JSON remains ZL-BENCH-JSON. Checked source diagnostics are preserved. Runtime failures without a source diagnostic use ZL-BENCH-DYNAMIC and retain the numeric Dynamic error in the message.

Typed runner mapping

New case inputs contain exactly two record fields: arguments, a record whose names exactly match execution.input_order, and authority, text none or reflect. Transmission follows that explicit argument order. The legacy record_key/record_value/lookup_key shape still selects revision 1.

Benchmark value Dynamic tag
Empty variant with case null null
Bool bool
Integer in Int64 range i64
Float with exact binary64 bits f64
Text text
Sequence list
Record record

Unit, Bytes, other variants, binary32 and out-of-range integers do not implicitly convert. Null is not Unit. Text permits valid UTF-8 and embedded NUL; record names must be NUL-free, unique and sorted by UTF-8 bytes in transport. Binary64 bits, including negative zero and NaN payloads, are preserved without floating- point arithmetic. Recursive depth is at most 128, matching native ZLD2.

The independent Python codec checks the existing ZLD2 2.0 header, exact payload length, SHA-256 digest, closed tags, boolean bits, scalar widths, UTF-8, child counts, record order, nesting and absence of trailing bytes. No Dynamic wire revision is introduced. Scoring compares canonical typed values: text "7" cannot equal integer 7, including inside aggregates. Malformed output is an infrastructure error; valid wrong values or extra result fields fail behavior. Property oracles retain the existing isolated complete-response boundary.

Acceptance uses benchmark.dynamic_arguments, benchmark.dynamic_codec, and tests/properties/test_dynamic_transport.py: independent wire vectors, real owned calls, imported roots, public/held-out inputs, tag-sensitive scoring, capability/profile failures, bounds and recursive cross-runtime/permutation properties. This does not promote any fixture or alter ZL256/ZL512 allocation, publication policy. Matching grammar and its new checked-artifact minor are covered separately by benchmark.dynamic_match and its property/mutation gates.

Projected fromdocs/benchmark-dynamic-values.md