Skip to content

Commit ffc1e0e

Browse files
Pin the Julia supply chain and model the real trust boundaries (#35)
- Commit Manifest.toml (generated under Julia 1.10, same minor as e2e CI) and stop ignoring it in .gitignore: the Julia layer computes every number the product returns, so its transitive dependency graph is now pinned by tree hash. CI's Pkg.instantiate/Pkg.test resolve from the committed manifest by default — no workflow change needed. - dependabot.yml: remove cargo/mix/npm/pip/nix entries — none of those ecosystems exist in this Julia/Zig/Agda repo. Dependabot has no Julia ecosystem; the committed Manifest + CI instantiate is the compensating control. github-actions coverage kept. - docs/THREAT-MODEL.md: add an Application-Specific Boundaries section modelling the neural->symbolic boundary (LLM numeric fabrication, prompt injection via user data, tool mis-routing, silent-null sub-types) and the Zig FFI/C-ABI boundary (unvalidated inputs, memory safety, ABI drift). Fix false claims: the Cargo.lock/deno.lock/gleam.toml asset row, the nonexistent scorecard-enforcer.yml, and the "lockfiles committed" mitigation (now true only for Manifest.toml). PR 5 of 8 in the severity-ordered chain (fix/supply-chain-pinning). <!-- SPDX-License-Identifier: CC-BY-SA-4.0 Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> --> ## Summary <!-- Briefly describe what this PR does and why. Link to related issues with "Closes #N". --> ## Changes <!-- List the key changes introduced by this PR. --> - ## RSR Quality Checklist <!-- Check all that apply. PRs that fail required checks will not be merged. --> ### Required - [ ] Tests pass (`just test` or equivalent) - [ ] Code is formatted (`just fmt` or equivalent) - [ ] Linter is clean (no new warnings or errors) - [ ] No banned language patterns (no TypeScript, no npm/bun, no Go/Python) - [ ] No `unsafe` blocks without `// SAFETY:` comments - [ ] No banned functions (`believe_me`, `unsafeCoerce`, `Obj.magic`, `Admitted`, `sorry`) - [ ] SPDX license headers present on all new/modified source files - [ ] No secrets, credentials, or `.env` files included ### As Applicable - [ ] `.machine_readable/STATE.a2ml` updated (if project state changed) - [ ] `.machine_readable/ECOSYSTEM.a2ml` updated (if integrations changed) - [ ] `.machine_readable/META.a2ml` updated (if architectural decisions changed) - [ ] Documentation updated for user-facing changes - [ ] `TOPOLOGY.md` updated (if architecture changed) - [ ] `CHANGELOG` or release notes updated - [ ] New dependencies reviewed for license compatibility (MPL-2.0 / MPL-2.0) - [ ] ABI/FFI changes validated (`src/abi/` and `ffi/zig/` consistent) ## Testing <!-- Describe how you tested these changes. --> ## Screenshots <!-- If applicable, add screenshots or terminal output demonstrating the change. --> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 1549cfa commit ffc1e0e

4 files changed

Lines changed: 697 additions & 44 deletions

File tree

.github/dependabot.yml

Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# SPDX-License-Identifier: MPL-2.0
2-
# Dependabot configuration for RSR-compliant repositories
3-
# Covers common ecosystems - remove unused ones for your project
2+
# Dependabot configuration for Statistikles.
3+
#
4+
# Only ecosystems that actually exist in this repo are listed. Dependabot has
5+
# NO Julia ecosystem, so the Julia dependencies (the compute half) are covered
6+
# by a committed Manifest.toml + CI `Pkg.instantiate`/`Pkg.test`, which resolve
7+
# from the pinned manifest, instead. See docs/THREAT-MODEL.md.
48

59
version: 2
610
updates:
@@ -13,39 +17,3 @@ updates:
1317
actions:
1418
patterns:
1519
- "*"
16-
17-
# Rust/Cargo
18-
- package-ecosystem: "cargo"
19-
directory: "/"
20-
schedule:
21-
interval: "weekly"
22-
# `open-pull-requests-limit: 0` suppresses routine version-update PRs
23-
# while leaving Dependabot SECURITY PRs flowing. The previous
24-
# `ignore: "*" patch` rule also silenced security PRs under GitHub\'s
25-
# current Dependabot behaviour. See rsr-template-repo commit 78b050e
26-
# and 007-lang/audits/audit-dependabot-automation-gap-2026-04-17.md.
27-
open-pull-requests-limit: 0
28-
29-
# Elixir/Mix
30-
- package-ecosystem: "mix"
31-
directory: "/"
32-
schedule:
33-
interval: "weekly"
34-
35-
# Node.js/npm
36-
- package-ecosystem: "npm"
37-
directory: "/"
38-
schedule:
39-
interval: "weekly"
40-
41-
# Python/pip
42-
- package-ecosystem: "pip"
43-
directory: "/"
44-
schedule:
45-
interval: "weekly"
46-
47-
# Nix flakes
48-
- package-ecosystem: "nix"
49-
directory: "/"
50-
schedule:
51-
interval: "weekly"

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ erl_crash.dump
3636
# Julia
3737
*.jl.cov
3838
*.jl.mem
39-
/Manifest.toml
39+
# Manifest.toml is COMMITTED here (supply-chain pinning of the compute half;
40+
# Dependabot has no Julia ecosystem, so the committed manifest + CI
41+
# Pkg.instantiate is the compensating control). Do not re-ignore it.
4042

4143
# ReScript
4244
/lib/bs/

0 commit comments

Comments
 (0)