Skip to content

feat(gating): native Nickel policies, real SLM providers, audited OTP arbiter - #121

Merged
hyperpolymath merged 1 commit into
mainfrom
agent/native-nickel-slm-arbiter
Sep 22, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
agent/native-nickel-slm-arbiter

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

Rebuilds the previously unpushed feature set as a single review unit:

  • Native Nickel policy backend — vendored Bunsenite @ f788de39 (default-features-off nickel-lang-core 0.18.0) behind a nickel feature; .ncl policies evaluated natively; multi-file import rejected fail-closed (decision recorded in docs/NICKEL-POLICY.adoc); dedicated nickel-native CI job with the exact constrained command (the parser cannot compile under ~2 GB — reproduced; CI on a full-size runner is the verification vehicle).
  • Real SLM providersLlamaCppProvider (pinned llama.cpp CLI, --single-turn termination hardening, banner-safe last-valid-object extraction, timeout kill) and HttpSlmProvider behind --features http (OpenAI-compatible, rustls, https-or-loopback, SLM_API_KEY env-only). Verdict contract {spirit_score, confidence, reasoning, should_block} with range validation and end-to-end request-correlation preservation.
  • Contract integrationContractRunner::evaluate_with_provider: oracle Block is terminal (provider never invoked), Warn adds +0.2 no-go, threshold matrix enforced, should_block blocks, low llm_confidence escalates, any provider failure fails closed to a non-overridable Sys902 Escalate.
  • OTP consensus arbiter — Elixir escript speaking protocol v1 over stdio, with a durable JSONL audit sink (flush-before-ack, rotation, fail-closed, bounded in-memory history, no proposal content persisted) and a Rust client that requires audit_recorded: true.
  • Real-model smokes — env-gated real_inference tests; pinned + SHA-256-verified artifacts (llama.cpp b11100, Qwen2.5-0.5B-Instruct Q4_K_M — chosen empirically over SmolLM2-135M, see docs/SLM_PROVIDERS.adoc), never committed.

Test results

  • Local: 187 Rust assertions green (cargo test --workspace 165 + slm-evaluator --features http 22), fmt/clippy -D warnings clean on all CI commands.
  • Real smokes: llama-cli + Qwen2.5-0.5B Q4_K_M round-trip 14.1 s (2 vCPU sandbox), llama-server HTTP round-trip 3.6 s warm — both green 2026-09-22.
  • Elixir: 28 ExUnit tests written (verified by new arbiter-ci workflow — no local OTP toolchain existed).

New CI

  • nickel-native job in ci.yml (exact pinned command, --locked).
  • arbiter-ci.yml — mix fmt/deps/test/escript + protocol smoke.
  • slm-real-inference.yml — local-GGUF + HTTP-adapter jobs on every PR (no secrets); remote-provider job on workflow_dispatch/protected-main only, inside a new slm-remote-production GitHub Environment (needs creation: required reviewers + CONATIVE_SLM_ENDPOINT, CONATIVE_SLM_MODEL_NAME, SLM_API_KEY secrets). Fork PRs never receive these.

Ops notes (docs/UPSTREAM-DELIVERY.adoc)

  • PAT used for this push should be rotated.
  • src/arbiter/mix.lock to be committed by a maintainer with an OTP toolchain.
  • Audit-sink hardening (permissions, multi-instance locking, shipping, tamper evidence) documented as ops backlog; tested floor documented in docs/ARBITER_PROTOCOL.adoc.

Review points

  • nickel-lang-core pinned 0.18.0 per spec (0.19.0 available).
  • Async vendor-fork diff: exactly one line (default-features = false) — see vendor/bunsenite/VENDOR.adoc.

… arbiter

Native Nickel policy backend:
- vendor Bunsenite @ f788de39 (default-features-off nickel-lang-core
  0.18.0) behind a `nickel` feature; vendored tree excluded from
  workspace membership and un-ignored in .gitignore
- Policy::from_policy_file/.ncl dispatch, fail-closed import rejection
  (decision documented in docs/NICKEL-POLICY.adoc), dedicated
  nickel-native CI job with the pinned constrained command (parser cannot
  build under ~2 GB)

SLM provider layer:
- SlmProvider trait with verdict contract + correlation preservation
- LlamaCppProvider: pinned llama-cli invocation (-m/-p/-n/--temp 0
  --no-display-prompt --single-turn), last-valid-object extraction for
  banner-safe parsing, timeout kill, from_env config
- HttpSlmProvider behind `http` feature: OpenAI-compatible, rustls,
  https-or-loopback guard, SLM_API_KEY env-only
- real-inference smokes (ignored, env-gated) for local GGUF and loopback
  llama-server; pinned + SHA-256-verified CI artifacts
  (.ci-artifact-pins.txt)

Gating contract integration:
- ContractRunner::evaluate_with_provider: oracle Block terminal (provider
  never called), Warn +0.2 no-go addend, threshold matrix, should_block
  override, low llm_confidence escalate, provider failure -> non-
  overridable Sys902 Escalate
- Rust OTP-arbiter client (protocol v1) requiring audit_recorded: true

OTP consensus arbiter (Elixir escript):
- protocol v1 decode/validate/encode, asymmetric decision matrix
  (SLM weight 1.5, +0.2 soft-concern addend, 0.9/0.4 thresholds,
  llm.confidence <= 0.8 escalate)
- durable JSONL audit sink: flush-before-ack, rotation at
  CONATIVE_AUDIT_MAX_BYTES, fail-closed, bounded history, no content
- 28 ExUnit tests (CI: arbiter-ci workflow; no local OTP toolchain)

Tests: 187 Rust assertions green locally (incl. 11 generative/proptest:
terminality, thresholds at 0/1, fail-closed provider errors, determinism,
request-ID preservation, concurrent correlation no-mixing) plus real
Qwen2.5-0.5B GGUF (14.1s) and llama-server HTTP (3.6s) round-trips.

CI: nickel-native job, arbiter-ci workflow, slm-real-inference workflow
with approval-gated remote-provider job (secrets never reach PRs).
Docs: NICKEL-POLICY, SLM_PROVIDERS, ARBITER_PROTOCOL, UPSTREAM-DELIVERY;
CHANGELOG/ROADMAP/TEST-NEEDS/README updates; MAAF bunsenite path fix.
@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 266 files, which is 166 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: ad7ecd0f-46b3-495f-bdba-7cf9108edab6

📥 Commits

Reviewing files that changed from the base of the PR and between 095ed8c and 9a958a7.

⛔ Files ignored due to path filters (5)
  • Cargo.lock is excluded by !**/*.lock
  • vendor/bunsenite/.github/workflows/actions.lock is excluded by !**/*.lock
  • vendor/bunsenite/Cargo.lock is excluded by !**/*.lock
  • vendor/bunsenite/papers/arxiv/bunsenite.out is excluded by !**/*.out
  • vendor/bunsenite/papers/arxiv/bunsenite.pdf is excluded by !**/*.pdf
📒 Files selected for processing (266)
  • .ci-artifact-pins.txt
  • .clusterfuzzlite/build.sh
  • .github/hooks/validate-a2ml.sh
  • .github/hooks/validate-k9.sh
  • .github/workflows/arbiter-ci.yml
  • .github/workflows/ci.yml
  • .github/workflows/pages.yml
  • .github/workflows/slm-real-inference.yml
  • .gitignore
  • CHANGELOG.adoc
  • Cargo.toml
  • README.adoc
  • ROADMAP.adoc
  • TEST-NEEDS.adoc
  • docs/ARBITER_PROTOCOL.adoc
  • docs/MAAF_INTEGRATION.adoc
  • docs/NICKEL-POLICY.adoc
  • docs/SLM_PROVIDERS.adoc
  • docs/UPSTREAM-DELIVERY.adoc
  • hooks/validate-codeql.sh
  • hooks/validate-permissions.sh
  • hooks/validate-sha-pins.sh
  • hooks/validate-spdx.sh
  • scripts/apply-common-files.sh
  • scripts/apply-justfiles.sh
  • scripts/bulk-standardize.sh
  • scripts/mass-apply-templates.sh
  • scripts/reconcile-wharf-repos.sh
  • setup.sh
  • src/arbiter/config/runtime.exs
  • src/arbiter/lib/conative_gating/application.ex
  • src/arbiter/lib/conative_gating/arbiter_protocol.ex
  • src/arbiter/lib/conative_gating/audit_log.ex
  • src/arbiter/lib/conative_gating/cli.ex
  • src/arbiter/lib/conative_gating/protocol_server.ex
  • src/arbiter/mix.exs
  • src/arbiter/test/arbiter_protocol_test.exs
  • src/arbiter/test/audit_log_test.exs
  • src/arbiter/test/consensus_arbiter_test.exs
  • src/arbiter/test/protocol_server_test.exs
  • src/arbiter/test/test_helper.exs
  • src/contract/src/arbiter.rs
  • src/contract/src/lib.rs
  • src/main.rs
  • src/oracle/Cargo.toml
  • src/oracle/src/lib.rs
  • src/oracle/src/nickel.rs
  • src/slm/Cargo.toml
  • src/slm/src/http.rs
  • src/slm/src/lib.rs
  • src/slm/src/provider.rs
  • src/slm/tests/real_inference.rs
  • tests/generative_test.rs
  • vendor/bunsenite/.claude/CLAUDE.md
  • vendor/bunsenite/.clusterfuzzlite/Containerfile
  • vendor/bunsenite/.clusterfuzzlite/build.sh
  • vendor/bunsenite/.clusterfuzzlite/project.yaml
  • vendor/bunsenite/.editorconfig
  • vendor/bunsenite/.gitattributes
  • vendor/bunsenite/.github/CODEOWNERS
  • vendor/bunsenite/.github/CONTRIBUTING.md
  • vendor/bunsenite/.github/FUNDING.yml
  • vendor/bunsenite/.github/copilot/coding-agent.yml
  • vendor/bunsenite/.github/dependabot.yml
  • vendor/bunsenite/.github/funding.yml
  • vendor/bunsenite/.github/label-classifier.json
  • vendor/bunsenite/.github/labels.json
  • vendor/bunsenite/.github/scripts/classify-issue.jq
  • vendor/bunsenite/.github/workflows/boj-build.yml
  • vendor/bunsenite/.github/workflows/cargo-audit.yml
  • vendor/bunsenite/.github/workflows/casket-pages.yml
  • vendor/bunsenite/.github/workflows/cflite_batch.yml
  • vendor/bunsenite/.github/workflows/cflite_pr.yml
  • vendor/bunsenite/.github/workflows/codeql.yml
  • vendor/bunsenite/.github/workflows/dependabot-automerge.yml
  • vendor/bunsenite/.github/workflows/dogfood-gate.yml
  • vendor/bunsenite/.github/workflows/generator-generic-ossf-slsa3-publish.yml
  • vendor/bunsenite/.github/workflows/ghcr-publish.yml
  • vendor/bunsenite/.github/workflows/governance.yml
  • vendor/bunsenite/.github/workflows/hypatia-scan.yml
  • vendor/bunsenite/.github/workflows/instant-sync.yml
  • vendor/bunsenite/.github/workflows/label-triage.yml
  • vendor/bunsenite/.github/workflows/labels.yml
  • vendor/bunsenite/.github/workflows/mirror.yml
  • vendor/bunsenite/.github/workflows/pages.yml
  • vendor/bunsenite/.github/workflows/publish-aur.yml
  • vendor/bunsenite/.github/workflows/publish-chocolatey.yml
  • vendor/bunsenite/.github/workflows/publish-container.yml
  • vendor/bunsenite/.github/workflows/publish-copr.yml
  • vendor/bunsenite/.github/workflows/publish-debian-ppa.yml
  • vendor/bunsenite/.github/workflows/publish-flatpak.yml
  • vendor/bunsenite/.github/workflows/publish-homebrew.yml
  • vendor/bunsenite/.github/workflows/publish-macports.yml
  • vendor/bunsenite/.github/workflows/publish-nixpkgs.yml
  • vendor/bunsenite/.github/workflows/publish-obs.yml
  • vendor/bunsenite/.github/workflows/publish-packages.yml
  • vendor/bunsenite/.github/workflows/publish-scoop.yml
  • vendor/bunsenite/.github/workflows/publish-winget.yml
  • vendor/bunsenite/.github/workflows/push-email-notify.yml
  • vendor/bunsenite/.github/workflows/release.yml
  • vendor/bunsenite/.github/workflows/rust-ci.yml
  • vendor/bunsenite/.github/workflows/scorecard.yml
  • vendor/bunsenite/.github/workflows/secret-scanner.yml
  • vendor/bunsenite/.github/workflows/stress-test.yml
  • vendor/bunsenite/.github/workflows/workflow-linter.yml
  • vendor/bunsenite/.github/workflows/zig-ffi.yml
  • vendor/bunsenite/.gitignore
  • vendor/bunsenite/.gitlab-ci.yml
  • vendor/bunsenite/.guix-channel
  • vendor/bunsenite/.hypatia-ignore
  • vendor/bunsenite/.hypatia/activity.jsonl
  • vendor/bunsenite/.hypatia/last-visit.json
  • vendor/bunsenite/.machine_readable/6a2/0-AI-MANIFEST.a2ml
  • vendor/bunsenite/.machine_readable/6a2/AGENTIC.a2ml
  • vendor/bunsenite/.machine_readable/6a2/ECOSYSTEM.a2ml
  • vendor/bunsenite/.machine_readable/6a2/META.a2ml
  • vendor/bunsenite/.machine_readable/6a2/NEUROSYM.a2ml
  • vendor/bunsenite/.machine_readable/6a2/PLAYBOOK.a2ml
  • vendor/bunsenite/.machine_readable/6a2/README.adoc
  • vendor/bunsenite/.machine_readable/6a2/STATE.a2ml
  • vendor/bunsenite/.machine_readable/6a2/anchor/0-AI-MANIFEST.a2ml
  • vendor/bunsenite/.machine_readable/6a2/anchor/ANCHOR.a2ml
  • vendor/bunsenite/.machine_readable/6a2/anchor/README.adoc
  • vendor/bunsenite/.machine_readable/ADJUST.contractile
  • vendor/bunsenite/.machine_readable/CLADE.a2ml
  • vendor/bunsenite/.machine_readable/INTENT.contractile
  • vendor/bunsenite/.machine_readable/MUST.contractile
  • vendor/bunsenite/.machine_readable/TRUST.contractile
  • vendor/bunsenite/.machine_readable/bot_directives/README.adoc
  • vendor/bunsenite/.machine_readable/bot_directives/coverage.a2ml
  • vendor/bunsenite/.machine_readable/bot_directives/debt.a2ml
  • vendor/bunsenite/.machine_readable/bot_directives/methodology.a2ml
  • vendor/bunsenite/.machine_readable/contractiles/bust/Bustfile.a2ml
  • vendor/bunsenite/.machine_readable/contractiles/bust/bust.ncl
  • vendor/bunsenite/.machine_readable/contractiles/dust/Dustfile.a2ml
  • vendor/bunsenite/.machine_readable/contractiles/trust/Trustfile.a2ml
  • vendor/bunsenite/.machine_readable/integrations/feedback-o-tron.a2ml
  • vendor/bunsenite/.machine_readable/integrations/proven.a2ml
  • vendor/bunsenite/.machine_readable/integrations/verisimdb.a2ml
  • vendor/bunsenite/.machine_readable/integrations/vexometer.a2ml
  • vendor/bunsenite/.machine_readable/root-allow.txt
  • vendor/bunsenite/.mise.toml
  • vendor/bunsenite/.nojekyll
  • vendor/bunsenite/0-AI-MANIFEST.a2ml
  • vendor/bunsenite/ABI-FFI-README.adoc
  • vendor/bunsenite/ARCHITECTURE.adoc
  • vendor/bunsenite/CHANGELOG.adoc
  • vendor/bunsenite/CITATION.cff
  • vendor/bunsenite/CLAUDE.md
  • vendor/bunsenite/CODE_OF_CONDUCT.adoc
  • vendor/bunsenite/Cargo.toml
  • vendor/bunsenite/Containerfile
  • vendor/bunsenite/EXPLAINME.adoc
  • vendor/bunsenite/GEMINI.md
  • vendor/bunsenite/GOVERNANCE.adoc
  • vendor/bunsenite/Justfile
  • vendor/bunsenite/LICENSE
  • vendor/bunsenite/LICENSES/AGPL-3.0-or-later.txt
  • vendor/bunsenite/LICENSES/CC-BY-SA-4.0.txt
  • vendor/bunsenite/LICENSES/MPL-2.0.txt
  • vendor/bunsenite/MAINTAINERS
  • vendor/bunsenite/MAINTAINERS.adoc
  • vendor/bunsenite/Mustfile
  • vendor/bunsenite/NOTICE
  • vendor/bunsenite/PACKAGING.adoc
  • vendor/bunsenite/PALIMPSEST.adoc
  • vendor/bunsenite/PROOF-NEEDS.adoc
  • vendor/bunsenite/PROVEN-INTEGRATION.adoc
  • vendor/bunsenite/PUBLISHING.adoc
  • vendor/bunsenite/QUICKSTART-DEV.adoc
  • vendor/bunsenite/QUICKSTART-MAINTAINER.adoc
  • vendor/bunsenite/QUICKSTART-USER.adoc
  • vendor/bunsenite/README.adoc
  • vendor/bunsenite/ROADMAP.adoc
  • vendor/bunsenite/RSR_COMPLIANCE.adoc
  • vendor/bunsenite/RSR_OUTLINE.adoc
  • vendor/bunsenite/SECURITY.adoc
  • vendor/bunsenite/TEST-NEEDS.adoc
  • vendor/bunsenite/TOPOLOGY.adoc
  • vendor/bunsenite/UPSTREAM-REVISION
  • vendor/bunsenite/VENDOR.adoc
  • vendor/bunsenite/benches/bunsenite_bench.rs
  • vendor/bunsenite/benches/parser.rs
  • vendor/bunsenite/bindings/deno/README.adoc
  • vendor/bunsenite/bindings/deno/bunsenite.affine
  • vendor/bunsenite/bindings/deno/example.affine
  • vendor/bunsenite/bindings/rescript/Bunsenite.affine
  • vendor/bunsenite/bindings/rescript/Bunsenite_test.affine
  • vendor/bunsenite/bindings/rescript/Example.affine
  • vendor/bunsenite/bindings/rescript/README.adoc
  • vendor/bunsenite/bindings/rescript/bunsenite.d.affine
  • vendor/bunsenite/bindings/rescript/package.json
  • vendor/bunsenite/codemeta.json
  • vendor/bunsenite/config/README.adoc
  • vendor/bunsenite/config/build.k9.ncl
  • vendor/bunsenite/config/rust-fmt.k9.ncl
  • vendor/bunsenite/contractile.just
  • vendor/bunsenite/contractiles/README.adoc
  • vendor/bunsenite/contractiles/dust/Dustfile
  • vendor/bunsenite/contractiles/intend/Intentfile.a2ml
  • vendor/bunsenite/contractiles/must/Mustfile
  • vendor/bunsenite/contractiles/self-validating/README.adoc
  • vendor/bunsenite/contractiles/self-validating/examples/ci-config.k9.ncl
  • vendor/bunsenite/contractiles/self-validating/examples/project-metadata.k9.ncl
  • vendor/bunsenite/contractiles/self-validating/examples/setup-repo.k9.ncl
  • vendor/bunsenite/contractiles/self-validating/template-hunt.k9.ncl
  • vendor/bunsenite/contractiles/self-validating/template-kennel.k9.ncl
  • vendor/bunsenite/contractiles/self-validating/template-yard.k9.ncl
  • vendor/bunsenite/contractiles/trust/Trustfile.a2ml
  • vendor/bunsenite/docs/CITATIONS.adoc
  • vendor/bunsenite/docs/tech-debt-2026-05-26.adoc
  • vendor/bunsenite/docs/wiki-home.adoc
  • vendor/bunsenite/eclexiaiser.toml
  • vendor/bunsenite/examples/config.ncl
  • vendor/bunsenite/examples/simple.ncl
  • vendor/bunsenite/examples/web-project-deno.json
  • vendor/bunsenite/ffi/zig/build.zig
  • vendor/bunsenite/ffi/zig/src/main.zig
  • vendor/bunsenite/ffi/zig/test/integration_test.zig
  • vendor/bunsenite/fuzz/Cargo.toml
  • vendor/bunsenite/fuzz/fuzz_targets/fuzz_parser.rs
  • vendor/bunsenite/hooks/validate-codeql.sh
  • vendor/bunsenite/hooks/validate-permissions.sh
  • vendor/bunsenite/hooks/validate-sha-pins.sh
  • vendor/bunsenite/hooks/validate-spdx.sh
  • vendor/bunsenite/llm-warmup-dev.adoc
  • vendor/bunsenite/llm-warmup-user.adoc
  • vendor/bunsenite/mise.toml
  • vendor/bunsenite/packaging/arch/PKGBUILD
  • vendor/bunsenite/packaging/arch/PKGBUILD-bin
  • vendor/bunsenite/packaging/aur-ready/.SRCINFO
  • vendor/bunsenite/packaging/aur-ready/PKGBUILD
  • vendor/bunsenite/packaging/chocolatey/bunsenite.nuspec
  • vendor/bunsenite/packaging/debian/control
  • vendor/bunsenite/packaging/debian/rules
  • vendor/bunsenite/packaging/flatpak/com.campaignforcoolercoding.bunsenite.yml
  • vendor/bunsenite/packaging/homebrew/bunsenite.rb
  • vendor/bunsenite/packaging/macports/Portfile
  • vendor/bunsenite/packaging/rpm/bunsenite.spec
  • vendor/bunsenite/packaging/scoop/bunsenite.json
  • vendor/bunsenite/packaging/winget/bunsenite.yaml
  • vendor/bunsenite/papers/arxiv/bunsenite.aux
  • vendor/bunsenite/papers/arxiv/bunsenite.tex
  • vendor/bunsenite/selur-compose.toml
  • vendor/bunsenite/setup-dev-env.k9.ncl
  • vendor/bunsenite/setup.sh
  • vendor/bunsenite/src/error.rs
  • vendor/bunsenite/src/ffi.rs
  • vendor/bunsenite/src/lib.rs
  • vendor/bunsenite/src/loader.rs
  • vendor/bunsenite/src/main.rs
  • vendor/bunsenite/src/schema.rs
  • vendor/bunsenite/src/wasm.rs
  • vendor/bunsenite/stapeln.toml
  • vendor/bunsenite/tests/aspect_test.rs
  • vendor/bunsenite/tests/e2e_test.rs
  • vendor/bunsenite/tests/integration_test.rs
  • vendor/bunsenite/tests/property_test.rs
  • vendor/bunsenite/validate-nickel-configs.k9.ncl
  • vendor/bunsenite/www/.well-known/ai.txt
  • vendor/bunsenite/www/.well-known/dc.xml
  • vendor/bunsenite/www/.well-known/humans.txt
  • vendor/bunsenite/www/.well-known/security.txt
  • vendor/bunsenite/zig/README.adoc
  • vendor/bunsenite/zig/build.zig
  • vendor/bunsenite/zig/bunsenite.zig

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@@ -0,0 +1,51 @@
# Example Bunsenite Configuration
@@ -0,0 +1,237 @@
// SPDX-License-Identifier: MPL-2.0
key: slm-remote-provider
- name: Remote provider round-trip (creds from Environment secrets)
env:
CONATIVE_SLM_ENDPOINT: ${{ secrets.CONATIVE_SLM_ENDPOINT }}
@@ -0,0 +1,501 @@
// SPDX-License-Identifier: MPL-2.0
Comment thread src/oracle/src/nickel.rs
@@ -0,0 +1,111 @@
// SPDX-License-Identifier: MPL-2.0
Comment thread src/slm/src/provider.rs
@@ -0,0 +1,593 @@
// SPDX-License-Identifier: MPL-2.0
@@ -0,0 +1,6 @@
mcp_servers:
boj-server:
command: npx
stage: build
image: rust:latest
before_script:
- curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
@@ -0,0 +1,237 @@
// SPDX-License-Identifier: MPL-2.0
@hyperpolymath
hyperpolymath merged commit b133e41 into main Sep 22, 2026
36 of 47 checks passed
@hyperpolymath
hyperpolymath deleted the agent/native-nickel-slm-arbiter branch September 22, 2026 12:59
hyperpolymath added a commit that referenced this pull request Sep 22, 2026
… toolchain, audits, dogfood (#123)

Follow-up to #121 (merged while these fixes were in flight locally).

- **contract/arbiter.rs**: BrokenPipe on the arbiter stdin write is now
classified by the read path (fast/exiting arbiters close the read end
before the write lands) instead of hard-failing `Transport`. Previously
raced on loaded CI runners → `Test` job failures
(`closed_output_fails_closed`, `garbage_output_fails_closed`).
Assertions now print the actual error variant.
- **OTP arbiter locally verified** (installed OTP-27 / Elixir-1.18 in
the validation sandbox): adds `.formatter.exs`, **commits `mix.lock`**,
fixes a map keyword-ordering syntax error and a `config/runtime.exs`
compile error, prefixes unused vars, mirrors audit history to the
persisted wire shape (string keys), and corrects the rotation test's
byte arithmetic. `mix format --check-formatted` clean, **28/28 ExUnit
green**, `mix escript.build` + both protocol smokes verified by hand.
Built escript artifact added to `.gitignore`.
- **dogfood-gate**: vendored upstream k9 contractiles excluded via the
validator's sanctioned `INPUT_PATHS_IGNORE` (rationale in
`vendor/bunsenite/VENDOR.adoc`).
- **`.cargo/audit.toml`**: exceptions for 4 advisories confined to the
optional `nickel` feature closure (RUSTSEC-2026-0292 imbl-sized-chunks,
-2026-0247/-2025-0167 bitmaps, -2024-0436 paste) — none reachable from
the default build; fixes require upstream nickel-lang-core dep moves
(revisit with the 0.19.x upgrade, tracked in
`docs/UPSTREAM-DELIVERY.adoc`).
- docs: `UPSTREAM-DELIVERY.adoc` marks mix.lock / nickel-native /
real-inference verification as done.

Local: fmt + `clippy -D warnings` clean; 165 workspace assertions + 22
http-feature assertions + 28 ExUnit green.

---------

Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
Co-authored-by: arena-agent <arena-agent@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants