Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 3 additions & 2 deletions .github/workflows/image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# image to a registry, and `packages: none` below says so in this file (with other
# permissions named, GitHub gives none for packages anyway). Pins are bumped by a daily
# check that opens a pull request, and a pull request that touches them has its lockfile
# checked against package.json. Never on a run: `memory launch` uses the tag it is given.
# checked against package.json. Never on a run: `amem launch` uses the tag it is given.
name: image

on:
Expand Down Expand Up @@ -83,7 +83,8 @@ jobs:
with:
toolchain: stable
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
- name: Build the memory binary
- name: Build the amem binary
# staged as `memory`: the Dockerfile copies that file to /opt/memory/memory
run: cargo build --release --locked -p amem && cp target/release/amem images/harness/memory
- name: Build the image
run: docker build --pull -t harness:${{ github.sha }} images/harness
28 changes: 22 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,24 @@ before you override the instruction.
installs `make check` as the pre-commit hook. Some changes touch only Markdown files
outside `crates/` and `taps/`. For this rule, an `AGENTS.md` in `crates/` or `taps/`
counts as Markdown. The hook and CI do not run `make check` for such a change, because
nothing builds from those files or reads them. `scripts/docs-only.sh` decides which
changes are of this type. Its test holds the premise that nothing builds from those
files or reads them.
nothing builds from those files. `scripts/docs-only.sh` decides which changes are of
this type. Its test holds the premise that no crate or tap embeds those files or reads
them. Some scripts read them, and no check runs these scripts:

- `scripts/seed-corpus.py` seeds the demo record from `docs/` and
`examples/decisions/` (`make demo`). `golden/docs.toml` and `evals/demo.toml` score
answers against that text.
- Act 11 of the demo (`scripts/demo/11-limits.sh`) prints the two lists at the top of
`README.md`.

The demo seeds its record only once. So, after you change a file in `docs/` or
`examples/decisions/`, seed a new record with `make demo-ready RESET=1`. Then run
`make golden` and act 6 (`make demo-all HARNESS=codex ACTS=6`). Act 6 needs a key
for llm.apache.org, in `local/.virtual-key` or `LLMAO_KEY`. Without a key, the act
says "skipped" and checks nothing. Neither command fails on a miss. Read what they
print: golden's "Answers naming no entry in this record" and "Missed" lists, and the
`passed` column of act 6's `memory` row. After you change those two lists, run act 11
(`make demo-all HARNESS=codex ACTS=11`).
- **Show that a new assertion fails before you trust it.** Run it against the code as it
was before your change. Put what it reported in the pull request. If a test only ever
passed, nobody has shown that it tests anything. Assert the rule, not a bound on the
Expand Down Expand Up @@ -113,9 +128,10 @@ of the Claude Code harness that belongs to the repository is committed under `.c
| `.claude/commands/reader-test.md` | the prompts for a docs-only branch, instead of that pass: a reader that has only the changed files and their diff, and a fact check against the code |

If the guard refuses something that this repository asks for, the guard has a bug. Add
the case to the test and fix the guard. Do not work around the bug. All other files in
`.claude/` stay ignored. An agent that is not Claude Code gets none of this. The same
rules apply to that agent, and it learns them when it reads them.
the case to the test and fix the guard. Do not work around the bug. `.gitignore` ignores
`.claude/settings.local.json` and `.claude/worktrees/`. Do not commit other files in
`.claude/` unless they belong to the repository. An agent that is not Claude Code gets
none of this. The same rules apply to that agent, and it learns them when it reads them.

## Project shape

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ make check # format, clippy, tests, guard, docs-only and conformance tests
| `make conformance` | `scripts/conformance.py`: the seven M0 steps over MCP, against a new record that this build serves. `URL=<mcp endpoint>` points it at a different server. `OPERATOR=<command>` gives it the export, import and reindex of that server, for the last two steps |
| `make test` | only `cargo test` |
| `make fmt` | `cargo fmt`, which changes the files in place |
| `make run ARGS='...'` | the `memory` binary, for example `ARGS='init /tmp/m --domain dom-me'` |
| `make run ARGS='...'` | the `amem` binary, for example `ARGS='init --root /tmp/m --domain dom-me'` |
| `make verify` | `check`, and also `cargo deny`, `cargo machete`, coverage against `COVERAGE_MIN`, and the browser builds of `dm-core`, `dm-policy` and `dm-reader`. CI runs this target |
| `make msrv-check` | `cargo check` of the workspace and of the browser builds, with the Rust release that `rust-version` in `Cargo.toml` names. It needs that toolchain: `rustup toolchain install <rust-version> --profile minimal --target wasm32-unknown-unknown`. It is not part of `check` or `verify`. CI runs it as a separate job |
| `make e2e` | the browser tests in `e2e/`. Chromium in the Playwright image drives the pages. The tests put screenshots in `e2e/screenshots/`. It needs Podman or Docker, not Node. It is not part of `check` or `verify`. Run it for a change to the pages. See [e2e/README.md](e2e/README.md) |
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ windows-target:
@rustup target list --installed 2>/dev/null | grep -q '^x86_64-pc-windows-gnu$$' || \
{ echo "the C API binding is linted for Windows; run: rustup target add x86_64-pc-windows-gnu" >&2; exit 1; }

# wslcsdk.dll, the WSL containers C API, beside the Windows memory.exe: pinned and checked.
# wslcsdk.dll, the WSL containers C API, beside the Windows amem.exe: pinned and checked.
wslcsdk:
sh scripts/fetch-wslcsdk.sh "$(or $(DEST),target/release)"

Expand Down
Loading
Loading