Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
abfa5b9
Expand contract and facade test coverage
senamakel Aug 21, 2026
03e26d3
Expand core data pipeline test coverage
senamakel Aug 21, 2026
4e9a5cf
Make global seam tests deterministic
senamakel Aug 21, 2026
453cf83
Isolate global health state tests
senamakel Aug 21, 2026
680c31e
Expand adapter and testing UI coverage
senamakel Aug 21, 2026
e3edc5e
Address adapter coverage review findings
senamakel Aug 21, 2026
88ecca4
Harden UI and OpenStore integration tests
senamakel Aug 21, 2026
a4db5dd
Use async serialization in host seam tests
senamakel Aug 21, 2026
146a6c9
Add deterministic provider and store coverage
senamakel Aug 21, 2026
13d5d21
Strengthen production coverage threshold
senamakel Aug 21, 2026
23e53de
Exercise module service lifecycles
senamakel Aug 21, 2026
49b7137
Enforce production coverage floors
senamakel Aug 21, 2026
58dc126
Externalize inline tests for honest coverage
senamakel Aug 21, 2026
9bef733
Audit production coverage source filtering
senamakel Aug 21, 2026
535987a
Expand deterministic adapter coverage
senamakel Aug 21, 2026
22357bc
Expand deterministic core coverage
senamakel Aug 21, 2026
fc88157
Expand core store and retrieval coverage
senamakel Aug 21, 2026
8b77f93
Cover adapter security and lifecycle boundaries
senamakel Aug 21, 2026
5e1f687
Cover finite core runtime paths
senamakel Aug 21, 2026
9a9aa23
Exercise UI defaults and registry admission
senamakel Aug 21, 2026
d0d542b
Expand deterministic provider coverage
senamakel Aug 21, 2026
cec988b
Cover graph and ClickUp adapters
senamakel Aug 21, 2026
0d9cab9
Expand adapter fallback coverage
senamakel Aug 21, 2026
ea3a741
Cover scoring adapter construction
senamakel Aug 21, 2026
d5b21d8
Cover namespace relation planning
senamakel Aug 21, 2026
e6e4070
Cover namespace retrieval planning
senamakel Aug 21, 2026
8c19d75
Externalize adapter test instrumentation
senamakel Aug 21, 2026
d671456
Externalize test-only runtime seams
senamakel Aug 21, 2026
8a9d435
Keep GitHub transport coverage stable
senamakel Aug 21, 2026
5ec43d5
Keep GitHub coverage line maps stable
senamakel Aug 21, 2026
18c504b
Align GitHub transport coverage regions
senamakel Aug 21, 2026
848c3fa
Stabilize core test support module graphs
senamakel Aug 21, 2026
4c6a41e
Place test support modules after production code
senamakel Aug 21, 2026
f9192e5
Fold private helpers into existing test modules
senamakel Aug 21, 2026
f3cf945
Preserve production coverage source coordinates
senamakel Aug 21, 2026
b6a1e4f
Exercise the shipped UI binary
senamakel Aug 21, 2026
3e7f05b
Cover deterministic core persistence and persona paths
senamakel Aug 21, 2026
d1e7f6a
Cover global workspace client reuse
senamakel Aug 21, 2026
4da8a80
Cover empty product ingestion funnels
senamakel Aug 21, 2026
9fed7e8
test: extract private key fixture helper in safety tests
senamakel Aug 21, 2026
43017ba
test(safety): reformat multiline private key test input
senamakel Aug 21, 2026
0daf323
fix(test): suppress clippy unused_async warnings by adding await points
senamakel Aug 21, 2026
007b83e
fix(test): suppress clippy unused_async warnings by adding ready await
senamakel Aug 21, 2026
b0cc986
fix(test): move ready future await before usage imports
senamakel Aug 21, 2026
2475060
chore(ci): replace ripgrep with grep for inline test detection
senamakel Aug 21, 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
91 changes: 80 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,58 @@ jobs:
- name: Feature powerset compiles
run: cargo hack --feature-powerset --depth 2 --workspace check --all-targets

# §E8. `AGENTS.md` asks for 80% of meaningful library behaviour and
# nothing measured it. Reported rather than enforced to begin with: a
# threshold picked before anyone has seen the number is a guess, and a
# failing gate on day one gets disabled rather than fixed.
- name: Coverage
# §E8. Enforce the repository's 80% floor over production sources only.
# Test helpers and vendored code can make the aggregate look healthy
# without exercising the libraries a release actually ships.
- name: Enforce production-source coverage
run: |
cargo llvm-cov --all-features --workspace --summary-only \
set -euo pipefail
cargo llvm-cov --all-features --workspace \
--ignore-filename-regex '(^|/)(tests|vendor)/|(^|/)(test|tests|test_helpers|test_support|test_seams)\.rs$|(_test|_tests|_test_support)\.rs$|/crates/tinymemory-core/src/(engine/parity|tree/retrieval/benchmarks)\.rs$' \
--fail-under-lines 80 --summary-only \
| tee "$GITHUB_STEP_SUMMARY"
cargo llvm-cov report \
--ignore-filename-regex '(^|/)(tests|vendor)/|(^|/)(test|tests|test_helpers|test_support|test_seams)\.rs$|(_test|_tests|_test_support)\.rs$|/crates/tinymemory-core/src/(engine/parity|tree/retrieval/benchmarks)\.rs$' \
--json --output-path target/production-coverage.json
test_decl_line="$(grep -n '#\[cfg(test)\]' \
crates/tinymemory-api/src/host/local_ai.rs | tail -1 | cut -d: -f1)"
active_line="$(grep -n 'pub fn is_active' \
crates/tinymemory-api/src/host/local_ai.rs | cut -d: -f1)"
jq -e --argjson test_decl_line "$test_decl_line" \
--argjson active_line "$active_line" '
.data as $data
| [$data[].files[]
| select(.filename | endswith("/crates/tinymemory-api/src/host/local_ai.rs"))]
as $local_ai
| ($local_ai | length == 1)
and ([$local_ai[].segments[]
| select(.[0] >= $test_decl_line and .[3] == true)] | length == 0)
and ([$local_ai[].segments[]
| select(.[0] == $active_line and .[2] > 0 and .[3] == true)] | length > 0)
and ([$data[].files[]
| select(.filename | endswith("/local_ai_tests.rs"))] | length == 0)
' target/production-coverage.json
inline_test_code="$(
grep -R -l -E '^[[:space:]]*#\[cfg\((test|any\(test,)' crates \
--include='*.rs' --exclude='test.rs' --exclude='tests.rs' \
--exclude='*_test.rs' --exclude='*_tests.rs' \
--exclude='*_test_support.rs' --exclude='test_support.rs' \
--exclude='test_helpers.rs' --exclude='test_seams.rs' \
| xargs -r awk '
/^[[:space:]]*#\[cfg\((test|any\(test,)/ { cfgline=FNR; pending=1; next }
pending && (/^[[:space:]]*$/ || /^[[:space:]]*#/ || /^[[:space:]]*\/\//) { next }
pending {
if ($0 !~ /^[[:space:]]*(pub\([^)]*\)[[:space:]]+)?(pub[[:space:]]+)?(mod|use)[[:space:]]/)
print FILENAME ":" cfgline ":" $0
pending=0
}
'
)"
if [[ -n "$inline_test_code" ]]; then
printf '%s\n' "$inline_test_code" >&2
echo 'inline test-only executable code must live in a filtered test file' >&2
exit 1
fi

# §E2's first half: build **and test** each engine configuration on its own.
#
Expand All @@ -186,10 +230,8 @@ jobs:
# `DriverRegistry` admission is a static policy table rather than a function
# of which adapters were compiled in.
#
# Two of §E2's nine configurations name features the facade does not have.
# `--features contacts` belongs to `tinymemory-core` and is covered by the
# powerset job above. `--features sync-composio` names a feature that exists
# nowhere in the workspace: the Composio sync is unconditional in
# `--features sync-composio` names a feature that exists nowhere in the
# workspace: the Composio sync is unconditional in
# `tinymemory-core`, so there is nothing to select and nothing to isolate.
# Recorded here rather than quietly dropped, because a missing row in a
# matrix reads as covered.
Expand All @@ -208,6 +250,18 @@ jobs:
features: --features tinycortex
- name: tinycortex and memory-git
features: --features tinycortex,memory-git
- name: memory-git implication
features: --no-default-features --features memory-git
- name: all engines aggregate
features: --no-default-features --features engines
- name: sources network implication
features: --no-default-features --features sources-network
- name: documents network implication
features: --no-default-features --features documents-network
- name: contacts implication
features: --no-default-features --features contacts
- name: full aggregate
features: --no-default-features --features full
- name: mem0
features: --features mem0
- name: supermemory
Expand Down Expand Up @@ -250,10 +304,14 @@ jobs:

- uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable
with:
components: rustfmt, clippy
components: rustfmt, clippy, llvm-tools-preview

- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2

- uses: taiki-e/install-action@5b4d68e2e660441203ab128a23676f1e4faf1532 # v2
with:
tool: cargo-llvm-cov

- name: Check formatting
run: cargo fmt --manifest-path crates/tinymemory-module/Cargo.toml --all -- --check

Expand All @@ -273,6 +331,17 @@ jobs:
- name: Unit tests
run: cargo test --manifest-path crates/tinymemory-module/Cargo.toml --lib

# The module is excluded from the root workspace, so the root coverage
# gate cannot see it. Hold its production code to the same floor here.
- name: Enforce module production-source coverage
run: |
set -euo pipefail
cargo llvm-cov --manifest-path crates/tinymemory-module/Cargo.toml \
--workspace --all-features \
--ignore-filename-regex '(^|/)(tests|vendor)/|(^|/)(test|tests|test_helpers|test_support|test_seams)\.rs$|(_test|_tests|_test_support)\.rs$|/crates/tinymemory-core/src/(engine/parity|tree/retrieval/benchmarks)\.rs$' \
--fail-under-lines 80 --summary-only \
| tee "$GITHUB_STEP_SUMMARY"

# The loader E2E drives a real dlopen'ed module, and tinybus binds its
# broker tasks to the runtime that created them. The module is loaded once
# per process and never unloaded, so two such tests in one process leave the
Expand Down
4 changes: 4 additions & 0 deletions Cargo.lock

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

Loading
Loading