Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
b2972f7
feat: harden local 0.37 control and recovery
dukedanya Jul 13, 2026
deefecb
feat: add agent session control plane for 0.38
dukedanya Jul 13, 2026
e570e2c
feat: integrate DukeAgent session lifecycle for 0.39
dukedanya Jul 14, 2026
c9e729c
feat: add leased agent orchestration
dukedanya Jul 14, 2026
702d796
feat: complete dukememory 0.41 local signals
dukedanya Jul 14, 2026
164b8f9
feat: consolidate dukememory 0.42 control plane
dukedanya Jul 14, 2026
370af05
Strengthen RAG source packing and autonomous status compatibility
dukedanya Jul 14, 2026
0f1034e
Add RAG eval v2 and memory impact control signals
dukedanya Jul 14, 2026
fe58ca0
Add RAG eval matrix and retrieval tuning signals
dukedanya Jul 14, 2026
f14d0ab
Strengthen RAG memory evaluation controls
dukedanya Jul 14, 2026
258f125
feat: integrate RAG evaluation across control surfaces
dukedanya Jul 14, 2026
582d342
refactor: enforce typed application and graph boundaries
dukedanya Jul 14, 2026
308cb1c
chore: harden CI and document system boundaries
dukedanya Jul 14, 2026
32b0bd9
perf: add vector search regression thresholds
dukedanya Jul 14, 2026
8f8428b
test: gate migrations backups and interface contracts
dukedanya Jul 14, 2026
e374fca
refactor: split ranking HTTP and migration concerns
dukedanya Jul 14, 2026
f846f47
feat: publish unified cross-surface operation catalog
dukedanya Jul 14, 2026
747e15e
security: pin build inputs and publish SBOM policy
dukedanya Jul 14, 2026
b6b1d81
release: prepare 0.43.0
dukedanya Jul 14, 2026
fcfe3ed
Stabilize memory quality and RAG eval gates
dukedanya Jul 15, 2026
2394145
Treat ambiguous memory duplicates as advisory
dukedanya Jul 15, 2026
c8ac9b3
Refine memory effectiveness and dashboard readiness
dukedanya Jul 15, 2026
e8ac9b6
feat: stabilize 0.43 release surfaces
dukedanya Jul 15, 2026
2cee6ec
feat: harden evidence and deployment readiness
dukedanya Jul 15, 2026
7fdc357
Stabilize 0.43 security and release readiness
dukedanya Jul 16, 2026
cc68ae9
Fix CodeQL and fuzz CI compatibility
dukedanya Jul 16, 2026
cc18b9e
Make contract tests portable on Windows
dukedanya Jul 16, 2026
7c59ff1
ci: enforce reproducible release evidence gate
dukedanya Jul 16, 2026
febc2a3
security: bound and cancel model generation
dukedanya Jul 16, 2026
e4a2b65
security: enforce RAG provenance and output guards
dukedanya Jul 16, 2026
fff51aa
eval: separate retrieval extraction and generation layers
dukedanya Jul 16, 2026
473a1e9
security: enforce operation-specific OAuth scopes
dukedanya Jul 16, 2026
4d1e62d
refactor: split RAG observability and cap dependencies
dukedanya Jul 16, 2026
16ab264
ci: require security workflow sentinels
dukedanya Jul 16, 2026
dfa9ae0
observability: export OTLP traces and metrics
dukedanya Jul 16, 2026
0802cd0
fix: retain top literals in tight RAG summaries
dukedanya Jul 16, 2026
702d102
fix: address readiness review findings
dukedanya Jul 16, 2026
2249f6a
fix: close cancellation and secret file races
dukedanya Jul 16, 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
14 changes: 14 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Default ownership
* @danilkryachko

# Security and release boundaries
/.github/ @danilkryachko
/Cargo.toml @danilkryachko
/Cargo.lock @danilkryachko
/deny.toml @danilkryachko
/src/app/http_security.rs @danilkryachko
/src/app/egress.rs @danilkryachko
/src/app/mcp_server.rs @danilkryachko
/src/app/mcp_server/ @danilkryachko
/src/rag_security.rs @danilkryachko
/SECURITY.md @danilkryachko
12 changes: 12 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 2
updates:
- package-ecosystem: cargo
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
158 changes: 140 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ name: CI

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

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

env:
Expand All @@ -17,53 +19,173 @@ env:
DUKEMEMORY_GEN_PROVIDER: mock

jobs:
msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@ad7910d95e317a4b12a9a3dfad520f4b409b3ec0 # 1.91.0
- name: Check declared minimum Rust version
run: cargo check --locked

platform:
name: Platform (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [macos-14, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
- name: Check minimal cross-platform build
run: cargo check --locked --all-targets --no-default-features
- name: Test cross-platform core
run: cargo test --locked --no-default-features --bin dukememory
- name: Check release sqlite-vec feature set
run: cargo check --locked --all-targets --features vec

quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
with:
components: rustfmt, clippy
- name: Cache Cargo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Format
run: cargo fmt --all -- --check
- name: Enforce architecture growth budgets
run: scripts/architecture-budget.sh
- name: Enforce dependency growth budgets
run: scripts/dependency-budget.sh
- name: Check minimal feature build
run: cargo check --locked --all-targets --no-default-features
- name: Check all targets
run: cargo check --all-targets
run: cargo check --locked --all-targets
- name: Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
run: cargo clippy --locked --all-targets --all-features -- -D warnings
- name: Test default features
run: >-
cargo test --
cargo test --locked --
--skip v14_6_local_memory_ui_and_http_actions
--skip v14_9_autonomous_memory_runs_and_rolls_back
- name: Run performance regression gate
run: cargo test --locked --test performance -- --ignored --nocapture
- name: Test sqlite-vec native backend
run: |
cargo test --features vec --bin dukememory
cargo test --features vec --test cli review_conflicts_links_session_and_vec_status -- --exact
cargo test --features vec --test cli sqlite_vec_backend_runs_knn_and_matches_json_fallback -- --exact
cargo test --features vec --test cli sqlite_vec_persists_rag_chunk_index -- --exact
cargo test --locked --features vec --bin dukememory
cargo test --locked --features vec --test cli review_conflicts_links_session_and_vec_status -- --exact
cargo test --locked --features vec --test cli sqlite_vec_backend_runs_knn_and_matches_json_fallback -- --exact
cargo test --locked --features vec --test cli sqlite_vec_persists_rag_chunk_index -- --exact
- name: Smoke-test installed vec-enabled binary
run: |
cargo build --features vec
cargo build --locked --features vec
scripts/release-smoke.sh target/debug/dukememory
- name: Check local generation build
run: cargo check --features local-embeddings,local-generation
run: cargo check --locked --features local-embeddings,local-generation

extended-http:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
- name: Cache Cargo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Test extended HTTP compatibility matrix
run: >-
cargo test --test cli
cargo test --locked --test cli
v14_6_local_memory_ui_and_http_actions -- --exact

mcp-conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
- name: Cache Cargo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Build minimal MCP server
run: cargo build --locked --no-default-features
- name: Run official MCP Streamable HTTP conformance scenarios
run: scripts/mcp-conformance.sh target/debug/dukememory

extended-autonomy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
- name: Cache Cargo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Test autonomous maintenance and rollback matrix
run: >-
cargo test --test cli
cargo test --locked --test cli
v14_9_autonomous_memory_runs_and_rolls_back -- --exact

release-evidence:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
- name: Cache Cargo
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: |
~/.cargo/registry/index
~/.cargo/registry/cache
~/.cargo/git/db
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Build offline release evidence binary
run: cargo build --locked --no-default-features
- name: Run reproducible deployment evidence gate
run: scripts/release-evidence-gate.sh target/debug/dukememory

ci-gate:
if: always()
needs:
- msrv
- platform
- quality
- extended-http
- mcp-conformance
- extended-autonomy
- release-evidence
runs-on: ubuntu-latest
steps:
- name: Require every CI job
env:
NEEDS_JSON: ${{ toJson(needs) }}
run: jq -e 'all(.[]; .result == "success")' <<<"${NEEDS_JSON}"
43 changes: 43 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: CodeQL

on:
push:
branches: [main]
pull_request:
merge_group:
schedule:
- cron: "23 2 * * 4"

permissions:
contents: read
security-events: write

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

jobs:
rust:
runs-on: ubuntu-latest
timeout-minutes: 45
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- name: Initialize CodeQL for Rust
uses: github/codeql-action/init@f52b05f4acaaa234e44466e66d29050e135ea9ef # v4.36.0
with:
languages: rust
build-mode: none
- name: Analyze
uses: github/codeql-action/analyze@f52b05f4acaaa234e44466e66d29050e135ea9ef # v4.36.0
with:
category: /language:rust

codeql-gate:
if: always()
needs: [rust]
runs-on: ubuntu-latest
steps:
- name: Require CodeQL analysis
env:
CODEQL_RESULT: ${{ needs.rust.result }}
run: test "${CODEQL_RESULT}" = success
50 changes: 50 additions & 0 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Coverage gate

on:
pull_request:
merge_group:
workflow_dispatch:
schedule:
- cron: "41 4 * * 3"

permissions:
contents: read

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

jobs:
coverage:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # stable
with:
components: llvm-tools-preview
- name: Install pinned cargo-llvm-cov
run: cargo install cargo-llvm-cov --version 0.8.6 --locked
- name: Enforce line coverage floor
run: >-
cargo llvm-cov --locked --features vec
--lcov --output-path lcov.info --fail-under-lines 55 --
--skip v14_6_local_memory_ui_and_http_actions
--skip v14_9_autonomous_memory_runs_and_rolls_back
- name: Enforce critical-module coverage floors
run: scripts/coverage-budget.sh lcov.info
- name: Upload coverage report
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: lcov-${{ github.sha }}
path: lcov.info

coverage-gate:
if: always()
needs: [coverage]
runs-on: ubuntu-latest
steps:
- name: Require coverage enforcement
env:
COVERAGE_RESULT: ${{ needs.coverage.result }}
run: test "${COVERAGE_RESULT}" = success
55 changes: 55 additions & 0 deletions .github/workflows/fuzz.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Fuzz smoke tests

on:
pull_request:
merge_group:
schedule:
- cron: "17 3 * * 1"
workflow_dispatch:

permissions:
contents: read

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

jobs:
fuzz:
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
target: [mcp_content_length, http_framing, rag_prompt_injection, sync_payload, egress_url]
env:
CARGO_FUZZ_VERSION: 0.13.2
FUZZ_TIME: ${{ github.event_name == 'schedule' && '300' || '30' }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: dtolnay/rust-toolchain@4be7066ada62dd38de10e7b70166bc74ed198c30 # nightly
with:
toolchain: nightly
- name: Install pinned cargo-fuzz
run: cargo install cargo-fuzz --version "${CARGO_FUZZ_VERSION}" --locked
- name: Build fuzz target
run: cargo fuzz build "${{ matrix.target }}"
- name: Run bounded fuzz smoke test
run: cargo fuzz run "${{ matrix.target }}" -- -max_total_time="${FUZZ_TIME}"
- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: fuzz-${{ matrix.target }}-${{ github.sha }}
path: fuzz/artifacts
if-no-files-found: ignore

fuzz-gate:
if: always()
needs: [fuzz]
runs-on: ubuntu-latest
steps:
- name: Require every fuzz target
env:
FUZZ_RESULT: ${{ needs.fuzz.result }}
run: test "${FUZZ_RESULT}" = success
Loading
Loading