Conversation
…ated end-to-end on osx-arm64 Phase 0 PoC of the substrate-discovery direction the maintainer 2026-05-03 named (*"we should use zeta in native assmly mode for our custom index i think"*). Per docs/research/2026-05-03-substrate- discovery-zeta-native-aot-scoping.md, Phase 0's primary deliverable is the empirical answer to the load-bearing distribution-feasibility question: does a single AOT binary publish cleanly across linux-x64, osx-arm64, win-x64 for zero-install external-agent consumption? This PR validates osx-arm64 end-to-end: - `dotnet build -c Release tools/substrate-discovery/...fsproj` → 0 warnings, 0 errors - `dotnet publish -c Release -p:PublishAot=true` → clean AOT compile, no link errors - Binary size: **3.8 MB** (single self-contained AOT executable) - `--version` cold-start: ~219 ms total (mostly OS process spawn) - `--smoke` (Zeta.Core IVM circuit build + step): ~14 ms - Full `dotnet build Zeta.sln` continues to pass with the new project registered The 3.8 MB binary is much smaller than the "30-50MB est." I had in the scoping doc — Zeta.Core AOT-compiles cleanly without dragging unnecessary surface. Strong positive signal that the zero-install external-agent delivery use case is feasible. Linux-x64 + win-x64 cross-platform validation still pending (needs CI runner). Phase 0 will be complete when those land. Composes with: - samples/Demo/Demo.fsproj (precedent for AOT-clean F# Exe with Zeta.Core reference; same TrimmerSingleWarn + SuppressTrimAnalysisWarnings + NoWarn IL pattern) - src/Bayesian/Bayesian.fsproj (precedent for AOT-core-plus-JIT- plugins; future substrate-discovery extensions like DuckDB cross-check oracle ship as separate JIT plugins) - tools/Z3Verify/Z3Verify.fsproj (precedent for F# Exe under tools/) - The DST cluster (Otto-272/273/281) that Phase 1 must integrate Phase 1 scope (future PRs): index memory/**.md as Z-set delta- stream; re-implement audit-memory-references.ts + audit-memory-index-duplicates.ts as Zeta queries; parallel-run diff CI; retire .ts versions when parity holds for 5 merges.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a4f3a8c679
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
Adds a Phase 0 “substrate-discovery” proof-of-concept CLI under tools/ to validate that Zeta.Core can be published as a small NativeAOT executable across target runtimes, and wires it into the solution so CI builds it.
Changes:
- Introduces a new
tools/substrate-discoveryF# executable project with NativeAOT/trim warning suppression aligned to existing AOT-ready samples. - Implements a minimal CLI (
--help,--version,--smoke) intended to validate Zeta.Core circuit build/step under AOT. - Registers the new project in
Zeta.slnfor CI/build coverage.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| tools/substrate-discovery/Zeta.SubstrateDiscovery.fsproj | New AOT-ready tool project referencing src/Core/Core.fsproj. |
| tools/substrate-discovery/Program.fs | CLI entrypoint with a smoke path intended to exercise Circuit runtime. |
| tools/substrate-discovery/README.md | Phase 0 scope and build/publish commands plus Phase 1+ roadmap. |
| Zeta.sln | Adds solution folders + the new tool project to the solution build graph. |
…ld + feed + step + observe) #1392 reviewer caught: original smoke called only `circuit.Build()` without `StepAsync()`, so it validated the build path but missed any AOT/runtime incompatibility in the tick exe surface. Updated smoke: - Builds a trivial circuit with ZSetInput<int> + Output - Feeds [1; 2; 3] as Z-set deltas - Calls StepAsync (the actual tick path the reviewer flagged) - Observes the output ZSet, prints entry count - Reports tick-before / tick-after to prove the increment Local verification: - dotnet build -c Release: 0 warnings, 0 errors - AOT publish (osx-arm64): clean compile - Binary size: 4.0 MB (+200KB vs prior smoke for ZSetInput + Output + IndexedZSet surface; still small) - Smoke output: "circuit built + stepped (tick 0 -> 1)" + "observed 3 entries in output ZSet" + "smoke: ok" The full IVM tick path now composes through a PublishAot=true binary, validating the AOT toolchain end-to-end at the Phase 0 level.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…6-05-03 EOD progress (#1402) Reflects substantive progress this session across the math-proofs honest assessment matrix. Key state changes: **P0 items — 3 of 3 closed:** - Lean lake-build CI job ✓ (#1394) - A4 registry rows ✓ (#1393) - Peer-review email draft ✓ (#1387) - Stryker B3 → partial (config-fix #1395; CI wire deferred to follow-up substantial-design) **P1 items — significant progress:** - Alloy B2 → A ✓ (#1396 — silent-no-op was the failure mode; spec-path fixed) - Semgrep B4 → A ✓ (verify-then-claim correction; was already in CI) - B1 4 deferred specs → 2 of 4 done: - DbspSpec ✓ #1397 (1M states / 11s) - CircuitRegistration ✓ #1401 (B-0180 closed; 3538 states / <1s) - SpineAsyncProtocol B-0179 still open (counterexample inv.) - SpineMergeInvariants B-0181 still open (counterexample inv.) **Sibling work tracked:** - Phase 0 substrate-discovery PoC ✓ (#1392 — 4.0 MB AOT binary on osx-arm64; cross-platform CI matrix) - 3 broken-spec backlog rows filed (#1398 → B-0179 + B-0180 + B-0181); B-0180 closed (#1401) - `.ts/.sh` parity bug in `tools/backlog/generate-index.ts` closed ✓ (#1400 — both generators byte-identical) This update is bounded substrate work documenting the actual state of the matrix; doesn't add new work, just captures completion. Future matrix re-grades happen as work-items land (per the assessment doc's audit-trail discipline). Composes with #1383 (the original assessment) + every PR referenced above. §33 archive-header lint passes.
…ster + cache-clobber discipline encoded (#1408) Substantial multi-tick session shard. 18 PRs touched (#1383 + #1387 + #1392-#1407 inclusive); 14 merged + 4 in-flight as of shard time. **Math-proofs assessment progress** (#1383 outstanding-work matrix): - A1+A2 → A-with-CI ✓ (#1394 Lean lake-build workflow) - A4 registry rows ✓ (#1393) - B1 → 2 of 4 deferred specs in CI ✓ (#1397 DbspSpec + #1401 CircuitRegistration B-0180 closed) - B2 Alloy → A ✓ (#1396 silent-no-op spec-path fix) - B4 Semgrep → A ✓ (correction) - Peer-review email template ✓ (#1387) - Phase 0 substrate-discovery PoC ✓ (#1392) - Stryker config-fix ✓ (#1395; CI wire deferred) - 3 broken-spec backlog rows filed ✓ (#1398) **Cache-clobber silent-bug class discovered + fully encoded:** B-0180 fix passing locally + failing CI → verify-then-claim identified gate.yml + low-memory.yml caching whole tools/tla and tools/alloy directories. Fix cluster: #1403 (gate.yml) + #1404 (low-memory.yml + audit-ci-cache-paths.ts) + #1406 (CI lint gate) + #1407 (memory file + bug-locus disambiguation per Aaron's 'real github bug?' question — answer: usage-bug, not tool-bug). **Other substrate work:** #1399 BACKLOG.md regen, #1400 .ts/.sh parity bug, #1402 assessment matrix doc update, #1405 B-0182 backlog row (Linux-only formal verification — orthogonal-axes split per Aaron 2026-05-03). **Discipline lessons captured:** chat-is-assertion-channel, substrate-corrections-cluster, search-first-before-architectural- expansion, verify-then-claim CI fidelity, documentation-is- current-state-not-history. Carved sentence: 'When a lucky catch surfaces a class of bug, build the structural fix that eliminates the luck — audit + lint gate + carved-sentence rule + memory file.'
Summary
Phase 0 PoC of substrate-discovery per the scoping doc. The load-bearing distribution-feasibility question: does a single AOT binary publish cleanly across linux-x64, osx-arm64, win-x64 for zero-install external-agent consumption?
Empirical evidence (osx-arm64)
dotnet build -c Releasedotnet publish -p:PublishAot=true--versioncold start--smoke(Zeta.Core IVM circuit build + step)dotnet build Zeta.slnThe 3.8 MB binary is much smaller than the "30-50MB est." I had in the scoping doc — Zeta.Core AOT-compiles cleanly without dragging unnecessary surface. Strong positive signal that the zero-install external-agent delivery use case is feasible.
Files
tools/substrate-discovery/Zeta.SubstrateDiscovery.fsproj— minimal Exe with PublishAot-ready settings (mirrorssamples/Demo/Demo.fsprojpattern)tools/substrate-discovery/Program.fs— three commands:--version,--smoke,--helptools/substrate-discovery/README.md— Phase 0 scope + build commands + Phase 1+ roadmapZeta.sln— registers the new project so CI catches breakageWhat's NOT here (Phase 1+)
Test plan
dotnet build -c Release tools/substrate-discovery/Zeta.SubstrateDiscovery.fsprojcleandotnet publish -p:PublishAot=trueclean--version+--smokeexit 0)dotnet build Zeta.slnstill passes🤖 Generated with Claude Code