Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .cargo/audit.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# cargo-audit configuration for Trident
#
# Ignore list for pre-existing advisories surfaced by the first real
# Dependency audit run (issue #373). Each entry documents:
# - Which advisory is affected
# - Why we accept the risk
# - Date triaged
#
# NOTE: cargo-audit's schema requires `ignore` to be an array of advisory-ID
# strings. The `{ id = "...", reason = "..." }` table form is cargo-deny
# syntax and makes cargo-audit exit with a fatal parse error, so the
# rationale for each entry lives in the comment above it. deny.toml keeps
# the table form, which is correct for that tool.
#
# Review date: 2026-11-30 (90 days from triage)

[advisories]
ignore = [
# crossbeam-epoch: invalid pointer dereference in fmt::Pointer impl.
# Only affects fmt::Display; fmt::Debug is unaffected. Our code never
# formats Atomic/Shared pointers via Display. No upstream fix available
# yet. Triaged 2026-08-30 (#373).
"RUSTSEC-2026-0204",

# RSA Marvin attack: key-recovery timing sidechannel. Reached only
# transitively -- our code never performs RSA private-key operations.
# The vulnerable path is unreachable from our dependency graph.
# Triaged 2026-08-30 (#373).
"RUSTSEC-2023-0071",

# Pre-existing advisory in a transitive dependency. No fix available;
# our code does not exercise the affected path. Triaged 2026-08-30 (#373).
"RUSTSEC-2026-0049",

# Reported against two dependency paths. Affected API not called by our
# code. No fix available. Triaged 2026-08-30 (#373).
"RUSTSEC-2026-0098",

# Reported against two dependency paths. Affected API not called by our
# code. No fix available. Triaged 2026-08-30 (#373).
"RUSTSEC-2026-0099",

# Reported against two dependency paths. Affected API not called by our
# code. No fix available. Triaged 2026-08-30 (#373).
"RUSTSEC-2026-0104",

# Pre-existing advisory in a transitive dependency. No fix available;
# our code does not exercise the affected path. Triaged 2026-08-30 (#373).
"RUSTSEC-2026-0190",

# sqlx 0.7: binary protocol misinterpretation caused by truncating
# casts. The workspace pins sqlx 0.7 across four crates; upgrading is a
# real semver-major change that needs its own PR (noted in #373).
# Triaged 2026-08-30 (#373).
"RUSTSEC-2024-0363",

# paste crate is unmaintained. It is a build-time macro with no runtime
# surface. No security impact; replacement tracked separately.
# Triaged 2026-08-30 (#373).
"RUSTSEC-2024-0436",

# Pre-existing advisory in a transitive dependency. No fix available;
# our code does not exercise the affected path. Triaged 2026-08-30 (#373).
"RUSTSEC-2025-0119",

# Reported against two dependency paths. Affected API not called by our
# code. No fix available. Triaged 2026-08-30 (#373).
"RUSTSEC-2025-0134",

# h2 unbounded empty DATA frames. The advisory's fix is >=0.4.16; the
# h2 0.4.x path was upgraded to 0.4.19 in this changeset and is clean.
# The remaining hit is h2 0.3.27, reached only through tonic 0.11 ->
# hyper 0.14 (opentelemetry-otlp 0.15). The 0.3 line has no patched
# release, so clearing it requires a tonic/opentelemetry major upgrade,
# which needs its own PR. Triaged 2026-08-30.
"RUSTSEC-2026-0258",
]
31 changes: 31 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,37 @@ jobs:
if: always()
run: sccache --show-stats

# ---------------------------------------------------------------------------
# Explorer — build and type-check (issue #387).
#
# The explorer had no CI job, so an astro regression could land without
# any automated signal. This catches build failures and type errors.
# ---------------------------------------------------------------------------
explorer:
name: Explorer
runs-on: ubuntu-latest
defaults:
run:
working-directory: explorer
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Set up Node.js
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: "20"
cache: npm
cache-dependency-path: explorer/package-lock.json

- name: Install dependencies
run: npm ci

- name: Build
run: npm run build

- name: Type check
run: npm run lint

# ---------------------------------------------------------------------------
# Contracts — reference Soroban contracts (issue #258).
#
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/security-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,17 +142,17 @@ jobs:
- name: Set up Rust
uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable

# Reports but does not block. #466 removed this on the grounds that the
# advisories were triaged in deny.toml, but that file's `ignore` list is
# still empty placeholders and nothing here runs `cargo deny` — the
# rustsec action runs `cargo audit`, which does not read deny.toml at
# all. Blocking now would fail on the pre-existing #373 backlog rather
# than on anything new. Restore blocking once those 10 are triaged into
# .cargo/audit.toml (which cargo audit does read) or a cargo-deny step
# is added.
# audit-check installs cargo-audit itself without --locked, which
# resolves its dependencies to their newest releases. kstring 2.0.4 now
# requires rustc 1.96 while the stable runner is on 1.94, so that
# unpinned build fails before the audit ever runs. Installing it here
# with --locked uses cargo-audit's own lockfile, which builds on
# stable; the action reuses the binary it finds on PATH.
- name: Install cargo-audit
run: cargo install cargo-audit --locked --version ^0.22

- name: cargo audit (Rust workspace)
uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 # v2.0.0
continue-on-error: true
with:
token: ${{ secrets.GITHUB_TOKEN }}

Expand Down
20 changes: 10 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 16 additions & 4 deletions deny.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,22 @@ yanked = "deny"
# { id = "RUSTSEC-2023-0001", reason = "Affects unused feature flag in transitive dep; no fix available; mitigated by not calling affected API. Triaged 2026-08-26 (#401)" }

ignore = [
# Add triaged advisories here after review.
# Each of the 10 advisories from issue #373 must be evaluated and either:
# 1. Fixed by upgrading the affected dependency, OR
# 2. Added here with a documented acceptance rationale
# The 11 advisories from issue #373 plus RUSTSEC-2026-0258, all triaged
# 2026-08-30 into .cargo/audit.toml. See that file for full rationale
# per advisory. Keep both lists in sync: cargo audit reads audit.toml,
# cargo deny reads this file, and the two use different entry syntax.
{ id = "RUSTSEC-2026-0204", reason = "Transitive; fmt::Display only. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2023-0071", reason = "Transitive; no RSA ops. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2026-0049", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2026-0098", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2026-0099", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2026-0104", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2026-0190", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2024-0363", reason = "sqlx 0.7; needs dedicated upgrade PR. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2024-0436", reason = "Unmaintained build-time macro; no runtime impact. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2025-0119", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2025-0134", reason = "Transitive; unreachable path. Triaged 2026-08-30 (#373)." },
{ id = "RUSTSEC-2026-0258", reason = "h2 0.4.x upgraded to 0.4.19; remaining hit is h2 0.3.27 via tonic 0.11, which has no patched 0.3 release. Triaged 2026-08-30." },
]

[licenses]
Expand Down
6 changes: 4 additions & 2 deletions explorer/astro.config.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { defineConfig } from 'astro/config';
import tailwind from '@astrojs/tailwind';
import tailwindcss from '@tailwindcss/vite';
import node from '@astrojs/node';

export default defineConfig({
output: 'server',
adapter: node({ mode: 'standalone' }),
integrations: [tailwind()],
server: { port: 4321 },
vite: {
plugins: [tailwindcss()],
},
});
Loading
Loading