Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
d864708
fix(docs): public-readiness prep — correct repo URLs and security con…
leocelis Jun 25, 2026
0bb365d
chore: remove GitHub Actions CI — local quality gate only
leocelis Jun 25, 2026
d1c4645
release: v0.1.0-alpha.2 OSS launch polish
leocelis Jun 25, 2026
1a0e256
fix(launch): CP-5 close-out — stanzas, exit 7, doc honesty sweep
leocelis Jun 25, 2026
53554a5
docs(roadmap): update v1.0 status after alpha.3 launch sweep
leocelis Jun 25, 2026
c83a956
docs: README audit fixes for alpha.3 launch honesty
leocelis Jun 25, 2026
9c4d0ed
docs: full documentation sweep — drift, hub, spec status
leocelis Jun 25, 2026
3ff1e67
chore: post-public launch cleanup — CI badge, docs, workflow
leocelis Jun 25, 2026
62e874d
fix: fmt + clippy doc for green public CI
leocelis Jun 25, 2026
93655ec
feat(security): close #847 security gap remediation for v1.0
leocelis Jun 26, 2026
33aa5de
style: apply rustfmt after #847 merge
leocelis Jun 26, 2026
7414b28
fix: satisfy clippy -D warnings on CI
leocelis Jun 26, 2026
466a229
fix: CI green — Linux data_dir + KDF floor in cli tests
leocelis Jun 26, 2026
2686aa4
fix(test): upgrade-kdf in rollback test uses floor KDF params
leocelis Jun 26, 2026
4783281
fix(test): drop limitless/patterns paths from CI regressions
leocelis Jun 26, 2026
1db7e32
fix(test): coredump_filter assert only when procfs write succeeds
leocelis Jun 26, 2026
8211537
docs(governance): flatten maintainer docs to OSS convention + public-…
leocelis Jul 4, 2026
d7d2dd0
feat(sealed): UC-23 sealed file storage — .vltf containers for untrus…
leocelis Jul 4, 2026
3412126
rebrand: Vault → Blindkey — AI-agent credential broker positioning
leocelis Jul 18, 2026
e0aeb0c
build(deps): Bump rpassword from 7.3.1 to 7.5.4
dependabot[bot] Jul 18, 2026
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
2 changes: 1 addition & 1 deletion .envrc
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ export CARGO_HOME="$PWD/.toolchain/cargo"
if [ -d "$CARGO_HOME/bin" ]; then
PATH_add "$CARGO_HOME/bin"
else
log_status "vault: run ./scripts/setup-rust.sh to install the project-scoped toolchain"
log_status "blindkey: run ./scripts/setup-rust.sh to install the project-scoped toolchain"
fi
16 changes: 9 additions & 7 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
# Code ownership — the code owner's review is required to merge.
# Leo (@leocelis) is the code owner for security-critical paths; Juan (@jgm972) co-reviews docs/CLI.
/crates/vault-core/ @leocelis
# Scoped by path, not by person: each line below names whoever is required
# to review that path today.
/crates/blindkey-core/ @leocelis
/docs/THREAT_MODEL.md @leocelis
/SECURITY.md @leocelis
/.github/workflows/ @leocelis
/vault_intent.yaml @leocelis
/.github/CODEOWNERS @leocelis
/scripts/ @leocelis
/blindkey_intent.yaml @leocelis

# Broader surface — either maintainer may review.
/crates/vault-cli/ @leocelis @jgm972
/crates/vault-gui/ @leocelis @jgm972
/crates/vault-tui/ @leocelis @jgm972
/crates/blindkey-cli/ @leocelis @jgm972
/crates/blindkey-gui/ @leocelis @jgm972
/crates/blindkey-tui/ @leocelis @jgm972
/docs/ @leocelis @jgm972
/README.md @leocelis @jgm972
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ body:
attributes:
label: Steps to reproduce
placeholder: |
1. vault ...
1. blindkey ...
2. ...
validations:
required: true
Expand Down
12 changes: 9 additions & 3 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability (DO NOT open a public issue)
url: https://github.com/leocelis/vault/security/advisories/new
about: Report security issues privately. See SECURITY.md for our coordinated-disclosure policy.
- name: 💬 Questions & ideas (Discussions)
url: https://github.com/leocelis/blindkey/discussions
about: Ask questions, share ideas, and show what you're building — not for bugs or security.
- name: 🐛 Bug report
url: https://github.com/leocelis/blindkey/issues/new?template=bug_report.yml
about: Something broken? Use the bug template with repro steps.
- name: 🔐 Security vulnerability (DO NOT open a public issue)
url: https://github.com/leocelis/blindkey/security/advisories/new
about: Report security issues privately. See SECURITY.md.
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ body:
attributes:
label: Security considerations
description: |
How does this affect the threat model or the constraints in vault_intent.yaml?
How does this affect the threat model or the constraints in blindkey_intent.yaml?
Could it introduce a plaintext leak, a new attack surface, or weaken a guarantee?
- type: checkboxes
id: alignment
attributes:
label: Alignment
options:
- label: This is consistent with the project's non-goals (see ROADMAP.md / vault_intent.yaml)
- label: This is consistent with the project's non-goals (see ROADMAP.md / blindkey_intent.yaml)
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- Thanks for contributing to Vault! Security tool → high bar. See CONTRIBUTING.md. -->
<!-- Thanks for contributing to Blindkey! Security tool → high bar. See CONTRIBUTING.md. -->

## What does this change?

Expand All @@ -15,7 +15,7 @@
## Checklist

- [ ] `just check` passes (fmt, clippy `-D warnings`, tests)
- [ ] `just audit` passes (no new advisories / license violations)
- [ ] `just audit` passes (no new advisories / license violations / unvetted deps)
- [ ] New/changed behavior has a test that maps to a constraint
- [ ] No secret material can reach a log, `Debug`, default stdout, or argv
- [ ] No `unsafe` outside the reviewed crypto-FFI module; no custom crypto
Expand Down
50 changes: 8 additions & 42 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,15 @@ updates:
schedule:
interval: "weekly"
open-pull-requests-limit: 10
labels: ["dependencies", "security"]
# Pinned-dependency guard. The toolchain is now Rust 1.96 (rust-toolchain.toml), so this is no
# longer an MSRV stopgap — it keeps the **audited crypto core** on reviewed major lines (C3: an
# automated bump must not pull unstable/unreviewed crypto into the security core) and keeps the
# **GUI stack** from churning its API out from under us. Block major/minor bumps here; PATCH
# updates still flow (so security patches within the pinned major are not suppressed), and
# `cargo audit`/`cargo deny` independently catch advisories. Lift an ignore deliberately, with a
# review (see CONTRIBUTING.md / rust-toolchain.toml), not piecemeal.
ignore:
- dependency-name: "getrandom"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "hkdf"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "hmac"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "sha2"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "secrecy"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "zeroize"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "clap"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "proptest"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "rpassword"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "ratatui"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "crossterm"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
# GUI shell (vault-gui) — large, fast-moving API surfaces; bump deliberately with a smoke test.
- dependency-name: "eframe"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "egui"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
- dependency-name: "rfd"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
# Security-tool supply chain: every bump still gates on `cargo deny check` +
# `cargo vet` in CI (constraints C3/C24) before it can merge.
labels:
- "dependencies"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels: ["ci", "dependencies"]
# Actions are SHA-pinned (constraint C34 / OpenSSF Scorecard). dependabot bumps the pinned SHA
# while preserving the pin — that is desired, so no ignores here. The earlier tag-downgrade PRs
# predated SHA-pinning and will not recur once closed.
labels:
- "dependencies"
- "ci"
36 changes: 0 additions & 36 deletions .github/workflows/audit.yml

This file was deleted.

134 changes: 45 additions & 89 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,113 +1,69 @@
# CI — mirrors `just check` across every platform Vault ships a binary for, plus the
# supply-chain and reproducible-build gates that `just audit-ready` runs before a release.
name: CI

on:
push:
branches: [main]
pull_request:
workflow_dispatch:
branches: [main]

permissions:
contents: read

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"

jobs:
fmt:
name: rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install pinned toolchain (rust-toolchain.toml — C34 reproducibility)
run: rustup toolchain install
- run: cargo fmt --all -- --check

unsafe-isolation:
name: unsafe isolation (only vault-sys)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Assert `unsafe` lives only in vault-sys, and every other crate forbids it (C25)
run: ./scripts/check-unsafe-isolation.sh

clippy:
name: clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install Linux GUI build deps (eframe/egui + rfd)
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libgtk-3-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxkbcommon-dev libssl-dev
- name: Install pinned toolchain (rust-toolchain.toml — C34 reproducibility)
run: rustup toolchain install
- uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- run: cargo clippy --all-targets --all-features -- -D warnings

# Build + test the whole workspace — including the egui desktop GUI — on every desktop OS
# ("works on any desktop"). Linux needs the windowing/dialog system libraries; macOS and Windows
# use native frameworks.
test:
name: test ${{ matrix.os }}
check:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install Linux GUI build deps (eframe/egui + rfd)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libgtk-3-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxkbcommon-dev libssl-dev
- name: Install pinned toolchain (rust-toolchain.toml — C34 reproducibility)
run: rustup toolchain install
- uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- run: cargo test --all-features --workspace
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.0
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- run: cargo fmt --all -- --check
- run: cargo clippy --all-targets --all-features -- -D warnings
- run: cargo test --workspace --all-features

# Windows support in blindkey-sys is cfg(not(unix)) no-op fallbacks (mlock/RLIMIT_CORE are
# unix-only); this job tracks real Windows build/test signal without gating merges until
# platform parity is deliberately scoped and verified.
check-windows-experimental:
runs-on: windows-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.0
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
- run: cargo test --workspace --all-features

# The single statically-linked binary deliverable is the CLI (constraint C20); the GUI links
# native windowing libraries and is not a musl/static target.
static-musl:
name: static musl build (constraint C20)
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install pinned toolchain (rust-toolchain.toml — C34 reproducibility)
run: rustup toolchain install
- run: rustup target add x86_64-unknown-linux-musl
- run: cargo build --release -p vault-cli --target x86_64-unknown-linux-musl
- name: Assert the binary is statically linked
run: |
file target/x86_64-unknown-linux-musl/release/vault
ldd target/x86_64-unknown-linux-musl/release/vault 2>&1 | grep -q "not a dynamic executable"
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.0
- uses: taiki-e/install-action@v2
with:
tool: cargo-audit,cargo-deny,cargo-vet
- run: cargo audit
- run: cargo deny check
- run: cargo vet

# Build the CLI binary twice with deterministic flags and assert byte-for-byte identity, so a
# published release can be verified against source (constraints C24/C34).
reproducible:
name: reproducible build (constraints C24/C34)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install pinned toolchain (rust-toolchain.toml — C34 reproducibility)
run: rustup toolchain install
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.96.0
- uses: Swatinem/rust-cache@v2
- run: ./scripts/reproducible-build.sh

quality-gate:
name: release quality gate (C55)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install pinned toolchain (rust-toolchain.toml — C34 reproducibility)
run: rustup toolchain install
- uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
- run: ./scripts/audit-readiness.sh
42 changes: 0 additions & 42 deletions .github/workflows/fuzz.yml

This file was deleted.

Loading
Loading