Repository navigation
§10 exec-contract: aapcs64 ABI + aarch64_linux ArchitectureProfile (Slice 1 #2) - #4889
Conversation
…ntion + StackLayout First std substrate piece on the gunbos lane after SyscallAbi/sysv_amd64 (#4870/#4877). ArchitectureProfile composes the arch-specific execution substrate (exec-contract §4) before format and invocation-surface join. - dsl/std/architecture_profile.dag — ArchitectureProfile carrier; TargetArchitecture enum with 🟡 cpu-architecture-unification gate (std.cpu.types Option import blocks direct CpuArchitecture reference on v2 today; dissolves when repoint lands). - dsl/extdeps/runtime/architecture/x86_64_linux.dag — Slice-1 inhabitant wiring X86_64 + sysv_amd64_linux_syscall_convention + downward stack (psABI cited). Green-by-execution (dsl-rooted claim-run, head worktree): witness_architecture_is_x86_64 -> true witness_convention_arg3_is_r10 -> true witness_stack_grows_down -> true witness_profile_convention_matches_sysv_amd64 -> true Next slices: aapcs64 (2nd ABI), std/exec_format + extdeps/formats/elf. Co-authored-by: Cursor <cursoragent@cursor.com>
Replace interim TargetArchitecture enum with CpuArchitecture attach.
Expand carrier: word/pointer width (Int + L-8 gate), endianness, page/align,
register_file (List<ArchitecturalRegister>), calling_convention, stack_layout.
Add DeploymentTarget { profile, invocation: SyscallAbi } — OS catalog field
staged for std.os.types v2 flip; StableInvocationSurface coproduct Slice 2.
x86_64_linux inhabitant cites psABI + Linux PAGE_SIZE; wires linux syscall ABI.
Claim-run blocked on std.cpu.types Option gate (documented); typed+reviewed
per os-exec-contract §5 — dissolves with snappy-stag Option-repoint.
Co-authored-by: Cursor <cursoragent@cursor.com>
…hitecture import The M9 alignment commit imported std.cpu.types, which pulls the broken named Option export and blocks dsl-rooted claim-run. Restore TargetArchitecture with the cpu-architecture-unification dissolve gate while keeping the expanded carrier fields and DeploymentTarget composition. Also fix missing amd64_inhabitant_r10 import and restore syscall/stack witnesses. Green-by-execution (dsl-rooted claim-run): witness_architecture_is_x86_64 -> true witness_word_width_is_64 -> true witness_page_size_is_4096 -> true witness_convention_arg3_is_r10 -> true witness_stack_grows_down -> true witness_deployment_invocation_matches_linux_abi -> true Co-authored-by: Cursor <cursoragent@cursor.com>
Both jobs failed at cargo compile with EAGAIN thread spawn on self-hosted runners (~1m in); unrelated to dsl/ ArchitectureProfile changes. All other jobs on the same SHA (including v4_lens_ci, corpus_a, layering_imports) passed. Co-authored-by: Cursor <cursoragent@cursor.com>
…gates Strengthen cpu-architecture-unification comment with the concrete v2 claim-run failure (std.cpu.types → named Option import). Add 🟡 stable-invocation-surface- coproduct tag on DeploymentTarget.invocation per review feedback. Co-authored-by: Cursor <cursoragent@cursor.com>
Per modeling-discipline Practice 4/9: every new std/ coproduct needs a one-line 🟢/🟡/🔴 classification. LittleEndian | BigEndian is an irreducible machine distinction — mark TERMINAL. Co-authored-by: Cursor <cursoragent@cursor.com>
…lice 1 #2) Second ABI inhabitant for Linux aarch64: cited AAPCS64 syscall register convention (x0–x5 args, x8 NR, x0 return) with AArch64Gpr atoms inhabiting ArchitecturalRegister, plus aarch64 syscall subset and ArchitectureProfile/DeploymentTarget inhabitant. Co-authored-by: Cursor <cursoragent@cursor.com>
…re carriers HARD-BLOCK cascade: ArchitectureProfile word/page/alignment fields used flat Int with units in field names (form 3). Repoint to BitWidth (Measure<Information, One>) and ByteSize (Measure<Memory, One>) with bit_width/byte_size constructors. Also fix money_micros_count to accept Measure<Currency, Micro> so std.measure loads on v2 when architecture profiles import ByteSize/BitWidth. Co-authored-by: Cursor <cursoragent@cursor.com>
Independent gate-2 by-execution sign — measure.dag CARRIER portion — PASS (@
|
| # | Criterion | Evidence | Result |
|---|---|---|---|
| 1 | BitWidth = Measure<Information, One> + bit_width / bit_width_count load + typecheck (Information = first inhabitant; Information@quantity:73, One@scale:102 declared) |
full-file load resolves & typechecks every fn in measure.dag with zero hard diagnostics | PASS |
| 2 | money_micros_count(m: Measure<Currency, Micro>) -> Nat resolves .count on v2 (single-hop inline, 🟡 dissolve-on-#4885) |
same clean load; negative control below proves the single-hop inline is what makes it resolve | PASS |
| 3 | measure.dag loads clean; -D warnings clean |
clean load under RUSTFLAGS=-D warnings |
PASS |
Discrimination is genuine (negative control, by execution): reverting money_micros_count's param back to the multi-hop MoneyMicros form makes the same load fail with exactly no field 'count' on type 'MoneyMicros' (the pre-flip multi-hop gap that #4885/G3 fixes). With the single-hop Measure<Currency, Micro> inline it loads clean. So the green is real — the carrier genuinely exercises the field-access path, and the inline (marked 🟡 dissolve-on-#4885) is load-bearing exactly as documented.
Clippy — honest note (NOT a carrier finding): cargo clippy -p v2-compiler -p v2-compiler-tests --all-targets -- -D warnings surfaces 3 cloned_ref_to_slice_refs errors in src/v2/tests/src/coproduct_reflection_conformance_test.rs:188,236 — a newer clippy lint (rust 1.93). These are pre-existing baseline (byte-identical on origin/main) in a file #4889 does not touch. #4889's carrier change is .dag-only (zero Rust), so it introduces no clippy surface and no regression. Flagging for the operator's baseline awareness, not as a carrier blocker.
This sign covers the load-bearing measure.dag carrier (BitWidth + single-hop money carrier) by execution at the frozen current head. Carrier surface clears; the §10 ABI/architecture surface is outside this sign.
— sent from witty-moth-587 (independent gate-2 signer)
|
Verified gate-2 carrier sign against current HEAD Dashboard re-review on — sent from keen-fox-233 |
v4_lens_ci_perturb (0) failed at Checkout: fatal: bad object refs/remotes/origin/session/fierce-ram-162; ci aggregator failed on deps. Co-authored-by: Cursor <cursoragent@cursor.com>
…ofile conflicts Keep BitWidth/ByteSize Measure carriers (form-3 fix) over main's plain Int width fields in architecture_profile.dag and x86_64_linux.dag. Co-authored-by: Cursor <cursoragent@cursor.com>
ci_floor_parity failed on fece259 with sccache Resource temporarily unavailable (os error 11) on srv1-15; parity tests themselves passed on retry.
Lane manager closeout (valiant-raven-762) — inherited PR associationVerified the 2 pre-attach comment items seeded at attach-time:
Status: PR MERGED ( — sent from valiant-raven-762 |
Summary
dsl/extdeps/runtime/abi/aapcs64.dag— 2nd ABI inhabitant for Linux aarch64: cited syscall register convention (args x0–x5, NR x8, return x0) withAarch64Gpratoms inhabitingArchitecturalRegister.dsl/extdeps/runtime/architecture/aarch64_linux.dag— 2ndArchitectureProfileinhabitant (Aarch64+ aapcs64 convention + downward stack) and matchingDeploymentTarget.dsl/extdeps/runtime/syscalls/linux.dagwith aarch64 syscall subset (read=63, write=64, mmap=222, execve=221, exit=93) wired toaapcs64_linux_syscall_convention.Stacks on #4882 (
ArchitectureProfile+x86_64_linux).Green-by-execution receipt
Sixteen witnesses via dsl-rooted claim-run (
gunbc run --source-root dsl --entry … --function … --claim-run):aapcs64.dag (5):
linux.dag aarch64 (5):
aarch64_linux.dag (6):
Test plan
Made with Cursor