Skip to main content

memex-verify

Run the local pre-commit gate for the memex repo before staging a commit: format check, clippy with warnings denied, and the workspace unit-test suite, mirroring memex's own CI. Use right before `commit-changes` on a memex working tree, after editing any Rust crate under `crates/`, or when reproducing a red CI run locally. Optionally runs the Postgres-gated integration suite when the `memex-pg` container is up and `.env` is sourced. This is a verification gate, NOT a replacement for memex CI — CI remains the authority; this catches failures earlier.

来源信息

仓库
pjt222/agent-almanac
最近来源活动
2026年9月2日 08:44
检测到的 SKILL.md 语言
英语
星标
34
分支
4

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
memex-verify
description
Run the local pre-commit gate for the memex repo before staging a commit: format check, clippy with warnings denied, and the workspace unit-test suite, mirroring memex's own CI. Use right before `commit-changes` on a memex working tree, after editing any Rust crate under `crates/`, or when reproducing a red CI run locally. Optionally runs the Postgres-gated integration suite when the `memex-pg` container is up and `.env` is sourced. This is a verification gate, NOT a replacement for memex CI — CI remains the authority; this catches failures earlier.
license
MIT
allowed-tools
Bash
metadata
{"author":"Philipp Thoss","version":"1.0","domain":"memex","complexity":"basic","language":"Rust","tags":"memex, ci, rust, clippy, testing, pre-commit","locale":"de","source_locale":"en","source_commit":"7d31fa1f","fence_basis_commit":"7d31fa1f","translator":"(untranslated stub)","translation_date":"2026-06-17"}
# Verify the Memex Repo Before Committing Run memex's three CI gates locally — `cargo fmt --check`, `cargo clippy` with warnings denied, and the workspace test suite — so a red CI is caught on your machine before you push. Optionally extend the run with the Postgres-gated integration suite. This complements, and does not replace, memex's own CI (`.github/workflows/ci.yml`); CI stays the authority. ## When to Use - Immediately before invoking `commit-changes` on a memex working tree. - After editing any Rust source under `crates/` (cli, sync, db, mcp, extract), `Cargo.toml`, or `rust-toolchain.toml`. - When a memex CI run went red and you want to reproduce the failing gate locally with the same toolchain. - Before opening a pull request against `pjt222/memex`. ## Inputs - **Required**: A checkout of the memex repo (a clone of `github.com/pjt222/memex`) with `cwd` set to the repo root. The gates read `rust-toolchain.toml` (pinned `1.96.0` + rustfmt/clippy components), so run from the root, not a subcrate. - **Required**: A Rust toolchain on `PATH` (`rustup` provisions the pinned channel via `rustup show`). Confirm with `command -v cargo`. - **Optional (integration gate only)**: A running Postgres+pgvector on `:5433` (the `memex-pg` container) and a sourced `.env` supplying `MEMEX_TEST_PG_URL` (and `VOYAGE_API_KEY` for embedding-backed tests). ## Procedure ### Step 1: Confirm the toolchain and working directory The gates must run from the repo root so `rust-toolchain.toml` selects the pinned `1.96.0` toolchain — local and CI rustfmt/clippy then match. ```bash # From the memex repo root test -f rust-toolchain.toml || { echo "not at memex repo root"; exit 1; } rustup show # provisions/reports the pinned 1.96.0 toolchain command -v cargo # toolchain must be on PATH ``` **Expected:** `rust-toolchain.toml` exists, `rustup show` reports the active toolchain as `1.96.0`, and `cargo` resolves to a path. **On failure:** If you are not at the repo root, `cd` there first. If `cargo` is missing, add it to `PATH` (e.g. `export PATH="$HOME/.cargo/bin:$PATH"`) and re-run. ### Step 2: Gate 1 — format check Mirrors the CI `rustfmt` job (`cargo fmt --all --check`). Read-only: it reports formatting drift without rewriting files. ```bash cargo fmt --all --check ``` **Expected:** Exit 0 and no diff output — the tree is already formatted. **On failure:** Non-zero exit prints the unformatted hunks. Apply the fix with `cargo fmt --all`, re-stage, and re-run this gate. Mark the overall verify FAIL until this gate is clean. ### Step 3: Gate 2 — clippy with warnings denied Mirrors the CI clippy step (`cargo clippy --workspace --all-targets -- -D warnings`). `--all-targets` lints tests and examples too; `-D warnings` makes any lint a hard error, matching CI exactly. ```bash cargo clippy --workspace --all-targets -- -D warnings ``` **Expected:** Exit 0 with no warnings emitted. **On failure:** Each warning is promoted to an error and listed with its lint name and source span. Fix the code (or, only when justified, add a scoped `#[allow(...)]`), then re-run. Mark the overall verify FAIL until clean. ### Step 4: Gate 3 — workspace unit tests Mirrors the CI unit-tests step (`cargo test --workspace`). This runs the non-ignored suite across every crate. ```bash cargo test --workspace ``` **Expected:** Exit 0 and a `test result: ok.` line for each crate's test binary. The unit count is **~49 at v0.4.0** and **grows per milestone** (M5 adds watcher tests). Treat the count as informational only — assert on exit 0 / `test result: ok`, never on a specific number. **On failure:** A non-zero exit and `test result: FAILED.` name the failing tests. Reproduce a single one with `cargo test --workspace <test_name> -- --nocapture`, fix, and re-run. Mark the overall verify FAIL. ### Step 5: Gate 4 (optional) — Postgres-gated integration suite The `#[ignore]`-gated integration suite is omitted from CI today (it needs a Postgres+pgvector service and a `VOYAGE_API_KEY` secret — see `docs/CONTINUE_HERE.md` §5). Run it locally only when the database and `.env` are available; skip this gate otherwise without failing verify. ```bash # Only when the memex-pg container is up and .env is sourced: docker start memex-pg # idempotent if already running set -a && . ./.env && set +a # exports MEMEX_TEST_PG_URL, VOYAGE_API_KEY, ... MEMEX_TEST_PG_URL="$MEMEX_TEST_PG_URL" cargo test --workspace -- --include-ignored ``` **Expected:** Exit 0 with `test result: ok.` including the integration binaries. The total is **~60 at v0.4.0** (unit + ~11 integration) and also grows per milestone — informational only. **On failure:** If the suite fails because Postgres is unreachable or `MEMEX_TEST_PG_URL` is unset, that is an environment gap — note it as "integration gate skipped" rather than a code FAIL. If it fails with actual `test result: FAILED.`, treat it as a real FAIL and fix. ### Step 6: Report per-gate results and the overall verdict Summarize each gate (PASS/SKIP/FAIL) and the rolled-up verdict. ```bash # Conceptual rollup: overall is non-zero if ANY required gate failed. echo "fmt: <PASS|FAIL> clippy: <PASS|FAIL> unit-tests: <PASS|FAIL> integration: <PASS|SKIP|FAIL>" ``` **Expected:** Gates 1–3 (required) all PASS. The integration gate is PASS or SKIP. Overall verdict PASS. **On failure:** Exit non-zero overall if ANY required gate (1–3) or a non-skipped integration run failed. Do not proceed to `commit-changes` until the verdict is PASS. ## Validation - [ ] Run from the memex repo root (`rust-toolchain.toml` present; `rustup show` reports `1.96.0`) - [ ] `cargo fmt --all --check` exits 0 with no diff - [ ] `cargo clippy --workspace --all-targets -- -D warnings` exits 0 - [ ] `cargo test --workspace` exits 0 with `test result: ok.` per crate - [ ] Test counts reported as informational (`~49` unit / `~60` total at v0.4.0), never asserted as a pass/fail threshold - [ ] Integration gate either run (Postgres up + `.env` sourced) and green, or explicitly recorded as SKIPPED - [ ] Overall verdict is non-zero if any required gate failed ## Common Pitfalls - **Asserting a fixed test count.** Counts grow each milestone; a literal `assert 49` turns a healthy run red. Assert exit 0 / `test result: ok` and report the count as `~N at v0.4.0`. - **Running from a subcrate.** Outside the repo root, `rust-toolchain.toml` is not picked up, so local fmt/clippy can drift from CI's `1.96.0` and give false greens or reds. Always run from the root. - **Treating a skipped integration gate as a failure.** No Postgres / no `.env` means SKIP, not FAIL. Only `test result: FAILED.` on a run that actually executed is a real failure. - **Dropping `--all-targets` from clippy.** Without it, lints in test and example code are missed, so local clippy passes while CI fails. Match CI's `--workspace --all-targets -- -D warnings` exactly. - **Treating this as a CI replacement.** This is a local early-warning gate. The authority remains `.github/workflows/ci.yml`; a green local run does not exempt a PR from CI. - **Forgetting to source `.env` before the integration gate.** A `.env`-loading gotcha is documented in `docs/OBSERVATIONS.md`; export the file (`set -a && . ./.env && set +a`) so `MEMEX_TEST_PG_URL` reaches the test process. ## Related Skills - `memex` — the umbrella skill for agent-native shared memory; this gate guards commits made within its workflow. - `memex-wrap` — session-close ritual; run memex-verify as its pre-commit gate before the wrap commits. - `memex-init` — session-start ritual that pairs with this close-side gate. - `commit-changes` — the next step once all required gates pass.
在 GitHub 查看