-
Notifications
You must be signed in to change notification settings - Fork 2
Delete the conversion layer now that both sides name one type (#18 §A1) #30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
YellowSnnowmann
wants to merge
12
commits into
tinyhumansai:main
from
YellowSnnowmann:feat/18-a1-delete-the-conversion-layer
Closed
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
9c9a61e
Add workspace-level integration tests against the public API
YellowSnnowmann 26629c6
Lift the optional capability families into the TinyCortex adapter
YellowSnnowmann 4ab4d55
Let configuration select the memory engine, gated by the registry
YellowSnnowmann f1a3c13
Run the adapter's feature-gated configuration in CI
YellowSnnowmann ae495d4
Enforce the contract crate's dependency rule, and the minimal build
YellowSnnowmann 21e0a5e
Cover the hosted adapters' failure paths
YellowSnnowmann 7128412
Restore the bundled example, and make a refusal an Error
YellowSnnowmann 868bd95
Measure the build: feature powerset, dependency budget, coverage
YellowSnnowmann 3c083a8
Extend the module E2E to the declared surface and to durability
YellowSnnowmann 7dedb76
Delete the conversion layer now that both sides name one type
YellowSnnowmann 474904e
Patch the contract's git dependency in the module crate too
YellowSnnowmann a16ef9c
Re-point the tinycortex gitlink at the merged commit
YellowSnnowmann File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -49,6 +49,120 @@ jobs: | |
| - name: Test default features | ||
| run: cargo test | ||
|
|
||
| # The adapter's `memory-git` feature gates the diff family, and the test | ||
| # that the family is *withheld* without it is `#[cfg(not(feature = | ||
| # "memory-git"))]`. Both the `--all-features` and default runs above | ||
| # compile that test out, so without this step it would be checked by | ||
| # nothing — a feature-gated test whose default fate is to be built by one | ||
| # job and executed by none. | ||
| # | ||
| # This is also the configuration that keeps the promise the feature | ||
| # exists for: no `git2` / `libgit2-sys` in the graph. | ||
| # `api/Cargo.toml` spells out this exact command in a comment and asks | ||
| # that the contract crate never link a storage engine, a native library, | ||
| # an HTTP client, or an async runtime. It was left as a comment, so | ||
| # nothing checked it — and a forbidden dependency arrives transitively, | ||
| # through a feature someone enabled two crates away, which is precisely | ||
| # the way nobody notices. | ||
| # | ||
| # The FORWARD form is required. `cargo tree -i <crate> -p tinymemory-api` | ||
| # discards the `-p` scope, prints the whole-workspace inverse tree, and | ||
| # exits 0 looking clean even when this crate is the one at fault. The | ||
| # manifest says so; this runs what it says. | ||
| # `cargo build --all-targets` only *compiles* an example. `AGENTS.md` | ||
| # promises `cargo run --example basic` works, and a compiled example can | ||
| # still panic on its first line — which is the state the repository was in | ||
| # before issue #18 §E7, when the command was documented and there was no | ||
| # `examples/` directory at all. | ||
| # §D5. Prints the dependency count of every build configuration and fails | ||
| # when the minimal one grows past its ceiling. The property this protects | ||
| # — that asking for no features gets you the contract and nothing that | ||
| # links a storage engine or an HTTP stack — is invisible in a diff, | ||
| # because the dependency arrives transitively through a feature enabled | ||
| # two crates away. | ||
| - name: Dependency budget | ||
| run: ./scripts/ci/dependency-budget.sh | ||
|
|
||
| - name: Run the bundled example | ||
| run: cargo run --example basic | ||
|
|
||
| - name: Assert the contract crate stays free of heavy dependencies | ||
| run: | | ||
| forbidden="$(cargo tree -p tinymemory-api -e normal,build --prefix none \ | ||
| | grep -Ei 'rusqlite|libsqlite|git2|reqwest|regex|tokio' || true)" | ||
| if [ -n "$forbidden" ]; then | ||
| echo "tinymemory-api pulled in a dependency its manifest forbids:" >&2 | ||
| echo "$forbidden" >&2 | ||
| echo >&2 | ||
| echo "The contract is what hosts compile against. It must stay free of" >&2 | ||
| echo "storage engines, native libraries, HTTP clients and async runtimes." >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| # The minimal build has to stay genuinely usable, not merely compile: | ||
| # a host that wants the ports wired and nothing retained must be able to | ||
| # bind the null driver without pulling an engine in behind it. | ||
| - name: Build and bind the minimal configuration | ||
| run: | | ||
| cargo build -p tinymemory --no-default-features | ||
| cargo test -p tinymemory --no-default-features --test null_provider | ||
|
|
||
| - name: Lint and test the adapter without its optional engine features | ||
| run: | | ||
| cargo clippy -p tinymemory-tinycortex --all-targets --no-default-features -- -D warnings | ||
| cargo test -p tinymemory-tinycortex --no-default-features | ||
|
|
||
| - name: Assert the default adapter build links no native git | ||
| run: | | ||
| linked="$(cargo tree -p tinymemory-tinycortex --no-default-features \ | ||
| -e normal --prefix none | grep -cE '^(git2|libgit2-sys)' || true)" | ||
| if [ "$linked" -ne 0 ]; then | ||
| echo "the default adapter build linked $linked native-git crate(s);" >&2 | ||
| echo "the memory-git feature exists to keep them out" >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| # Feature-unification and coverage. Their own job: both are slower than the | ||
| # main lane and independent of it, so a failure in one should not mask the | ||
| # other, and neither should delay the fast feedback the main job gives. | ||
| feature-matrix: | ||
| name: Feature powerset and coverage | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| submodules: recursive | ||
| persist-credentials: false | ||
|
|
||
| - uses: dtolnay/rust-toolchain@stable | ||
| with: | ||
| components: llvm-tools-preview | ||
|
|
||
| - uses: Swatinem/rust-cache@v2 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
||
| - uses: taiki-e/install-action@v2 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
| with: | ||
| tool: cargo-hack,cargo-llvm-cov | ||
|
|
||
| # §E2's second half. Cargo features are additive: enabling one for crate A | ||
| # enables it for every consumer in the graph, so a pair that nobody builds | ||
| # deliberately can still be built by someone else's dependency. `--depth 2` | ||
| # covers every pair without the combinatorial blow-up of the full set. | ||
| # | ||
| # Check-only: this is about whether the combinations *compile*, and the | ||
| # behaviour of each is the main job's business. | ||
| - 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 | ||
| run: | | ||
| cargo llvm-cov --all-features --workspace --summary-only \ | ||
| | tee "$GITHUB_STEP_SUMMARY" | ||
|
|
||
| # The module crate is its own workspace root (see the `exclude` note in the | ||
| # root Cargo.toml), so NONE of the steps above touch it: `--all-targets`, | ||
| # `--all-features` and `--workspace` all stop at the workspace boundary and | ||
|
|
||
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dtolnay/rust-toolchainis pinned tostable, which is mutableA tag or branch can be repointed by whoever owns
dtolnay, and the new code runs with this workflow's secrets. Pin to a full commit SHA and let Dependabot bump it.[RULE] unpinned-action ·