-
-
Notifications
You must be signed in to change notification settings - Fork 0
fix(ci): green the #121 follow-ups — arbiter stdin EPIPE race, Elixir toolchain, audits, dogfood #123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(ci): green the #121 follow-ups — arbiter stdin EPIPE race, Elixir toolchain, audits, dogfood #123
Changes from all commits
e28a966
afa3fb3
fa290e9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| # SPDX-License-Identifier: MPL-2.0 | ||
| # cargo-audit exceptions. | ||
| # | ||
| # All four advisories are inside the OPTIONAL `nickel` feature's dependency | ||
| # closure (nickel-lang-core -> im/imbl stack). None are reachable from the | ||
| # default (non-feature) build of this workspace: the `nickel` backend runs a | ||
| # pure Nickel evaluator over trusted policy files with no adversarial | ||
| # Drop/panic payloads. Fixes require upstream nickel-lang-core to move to a | ||
| # newer im/imbl stack. Revisit with the nickel-lang-core 0.19.x upgrade | ||
| # (tracked in docs/UPSTREAM-DELIVERY.adoc). | ||
| [advisories] | ||
| ignore = [ | ||
| # imbl-sized-chunks 0.1.3 (pinned by imbl 5.x via nickel-lang-core): | ||
| # double-free requires a panicking Drop inside Chunk removal methods; | ||
| # the 0.2.x fix is incompatible with imbl's 0.1 requirement. | ||
| "RUSTSEC-2026-0292", | ||
| # bitmaps 3.2.1 unmaintained (im/imbl transitive). | ||
| "RUSTSEC-2026-0247", | ||
| # bitmaps 3.2.1 unsound `Bitmap::try_from(&[u8])` — that constructor is | ||
| # not exercised by the Nickel evaluator path. | ||
| "RUSTSEC-2025-0167", | ||
| # paste 1.0.15 unmaintained (nickel-lang-core macro expansion); no | ||
| # maintained replacement exists. | ||
| "RUSTSEC-2024-0436", | ||
| ] | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -74,6 +74,11 @@ jobs: | |
| fi | ||
| - name: Validate K9 contracts | ||
| if: steps.detect.outputs.k9_count > 0 | ||
| env: | ||
| # The vendored Bunsenite tree ships upstream k9 contractiles that | ||
| # are curated in that repo, not here; vendored code is validated | ||
| # upstream (see vendor/bunsenite/VENDOR.adoc). | ||
| INPUT_PATHS_IGNORE: "/vendor/bunsenite/" | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: set -eu
printf '%s\n' '--- workflow ---'
cat -n .github/workflows/dogfood-gate.yml | sed -n '1,140p'
printf '%s\n' '--- validator locations ---'
rg -n --glob '!node_modules' 'validate-k9\.sh|k9_count|K9_COUNT|INPUT_PATHS_IGNORE' .
printf '%s\n' '--- matching files ---'
git ls-files | rg '(^|/)(validate-k9\.sh|.*k9.*|dogfood-gate\.yml)$'Repository: hyperpolymath/conative-gating Length of output: 9313 🏁 Script executed: set -eu
printf '%s\n' '--- validate-k9.sh ---'
cat -n .github/hooks/validate-k9.sh
printf '%s\n' '--- vendor guidance ---'
cat -n vendor/bunsenite/VENDOR.adoc | sed -n '55,90p'
printf '%s\n' '--- validator references ---'
rg -n -C 3 'INPUT_PATHS_IGNORE|find|k9|contract|empty|No .*file|paths' .github/hooks/validate-k9.sh .github/workflows vendor/bunsenite/VENDOR.adocRepository: hyperpolymath/conative-gating Length of output: 44253 Filter vendored K9 files during discovery.
Suggested fix- COUNT=$(find . \( -name '*.k9' -o -name '*.k9.ncl' \) -not -path './.git/*' | wc -l)
+ COUNT=$(find . \( -name '*.k9' -o -name '*.k9.ncl' \) -not -path './.git/*' -not -path './vendor/bunsenite/*' | wc -l)When all K9 files are excluded, 🤖 Prompt for AI Agents |
||
| run: bash .github/hooks/validate-k9.sh | ||
| - name: Write summary | ||
| run: | | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -45,17 +45,22 @@ State of the feature set delivered by the | |
| . **Create the `slm-remote-production` GitHub Environment** with required | ||
| reviewers and secrets `CONATIVE_SLM_ENDPOINT`, `CONATIVE_SLM_MODEL_NAME`, | ||
| `SLM_API_KEY`. The remote smoke job is inert until then (by design). | ||
| . **Commit `src/arbiter/mix.lock`** — it cannot be generated without an | ||
| OTP toolchain; run `mix deps.get` once in `src/arbiter/` on any OTP-27 | ||
| machine and commit the lockfile. | ||
| . ~~Commit `src/arbiter/mix.lock`~~ — **done**: an OTP-27/Elixir-1.18 | ||
| toolchain was installed in the sandbox; `mix.lock` is committed, | ||
| `mix format` passes, 28/28 ExUnit tests pass locally, and the escript | ||
| protocol smokes were verified by hand. | ||
|
Comment on lines
+48
to
+51
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 🔎 Supported by static analysis🏁 Script executed: sed -n '25,70p' docs/UPSTREAM-DELIVERY.adoc
rg -n -C 3 'OTP|Elixir|toolchain|mix.lock|28/28|local' docs/UPSTREAM-DELIVERY.adocRepository: hyperpolymath/conative-gating Length of output: 5032 Keep the validation record consistent. Line 34 presents the lack of a local OTP toolchain as current. Lines 48–51 record that OTP-27/Elixir-1.18 was installed and that the ExUnit tests passed locally. Mark the earlier statement as historical. Suggested fix- tests for the arbiter (CI-verified; no local OTP toolchain existed).
+ tests for the arbiter (CI-verified; no local OTP toolchain existed at that time).🤖 Prompt for AI Agents |
||
| . Audit-sink hardening for production multi-instance use: decide file | ||
| permissions/ownership (`umask`), add cross-process append locking if | ||
| more than one arbiter writes one file, wire log shipping/backup, and | ||
| consider hash-chained records for tamper evidence. The tested floor | ||
| (single instance, flush-before-ack, rotation) is documented in | ||
| `docs/ARBITER_PROTOCOL.adoc`. | ||
| . Watch the first `nickel-native` CI run — it is the authoritative | ||
| verification vehicle for the feature build. | ||
| . ~~Watch the first `nickel-native` CI run~~ — **done: green** on | ||
| 2026-09-22 (PR #121). The `slm-real-inference` local jobs are also | ||
| green there. | ||
| . Review the `.cargo/audit.toml` advisory exceptions (four advisories in | ||
| the optional `nickel` closure — im/imbl/bitmaps/paste — none reachable | ||
| from the default build; fixes need upstream nickel-lang-core dep moves). | ||
|
|
||
| == Known limitations / deliberate deferrals | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| # SPDX-License-Identifier: MPL-2.0 | ||
| # Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> | ||
|
|
||
| [ | ||
| inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] | ||
| ] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| %{ | ||
| "jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"}, | ||
| "rustler": {:hex, :rustler, "0.38.0", "7a8906998ff0d28e3021c0a73264abcda719bda344b2e58307c6805b0f87c9b4", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "704c03c1bf66be12b031c5a389347b91c81c5cb819a24b068b0de36fe4a5652a"}, | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🛡️ Detected with Advanced Tier | 🔵 Trivial | 💤 Low value
🧩 Analysis chain
🏁 Script executed:
Repository: hyperpolymath/conative-gating
Length of output: 9112
🏁 Script executed:
Repository: hyperpolymath/conative-gating
Length of output: 17414
Security Misconfiguration
Reachability: Internal
Exploitability: Theoretical
CWE: CWE-693
Add a feature-aware guard for the global advisory ignores. The current lockfile places all four advisories only in the optional
policy-oracle -> bunsenite -> nickel-lang-coredependency closure. No ignored advisory is currently reachable from the default, non-Nickel dependency graph, so the global ignore does not create a demonstrated current validation failure. It remains a future hardening gap because a later non-Nickel dependency could inherit these global suppressions. Fail CI when an ignored advisory is reachable outside thenickelfeature closure.🤖 Prompt for AI Agents