Two tracks:
- Public synthetic —
eval/public/questions/againstexamples/corpus/. Safe to ship. - Private canonical — a local question directory against a local private corpus. Never shipped.
The public suite proves the harness, validator, and doc workflow without exposing a real corpus. The private suite catches the failures that actually matter.
public/questions/— public synthetic questions; no private corpus dependencies- Private question directories — canonical questions grounded in a real corpus; keep out of public releases unless fully scrubbed
runs/— generated eval outputcategories.md— one-line description of each category../examples/corpus/— synthetic markdown corpus used by the public validator
The runner preserves these fields from each YAML:
idquestionexpected_sourcesexpected_keywordstypefreshness_sensitivetask_groundeddifficultynotes
Output lands in a timestamped run directory:
results.jsonsummary.md
Runner coverage lives in:
tests/integration/cli/test_eval_runner.pytests/integration/acceptance/test_phase2_shared_memory.py
One public question:
uv run dory --corpus-root examples/corpus --index-root /tmp/dory-public-index reindex
uv run dory --corpus-root examples/corpus --index-root /tmp/dory-public-index \
eval run q01 --questions-root eval/public/questionsFull public set:
uv run dory --corpus-root examples/corpus --index-root /tmp/dory-public-index reindex
uv run dory --corpus-root examples/corpus --index-root /tmp/dory-public-index \
eval run --questions-root eval/public/questionsOverride input or output paths:
uv run dory --corpus-root examples/corpus --index-root /tmp/dory-public-index \
eval run q01 --questions-root eval/public/questions --runs-root eval/runsValidate the public suite:
python3 eval/validate.pyValidate a private suite:
python3 eval/validate.py --questions-root /path/to/private/questions --corpus-root /path/to/private/corpusPublic docs and release notes should quote private evals only as aggregate pass/partial/fail counts with top-k and run date. Never publish private prompts, expected paths, snippets, or run traces.
The public synthetic suite currently has 15 questions. It covers:
decision-recall— find the right decision file for "why did we do X"entity-recall— pull facts about a specific person/project/toolfreshness— return the current version, not a stale one; q05 guards current Beacon state over a superseded archive notetemporal— time-bounded queriesnegation— handle "never" / "not" / absence cleanly; q06 uses source-grounded negation so public runs do not require a live judgetask-grounded— memory has to shape a concrete action (config values, paths, env); q11/q13/q14/q15 cover recovery, source-hit, profile-scope, and proposal-safety actionscross-agent— answer requires content written by multiple agents or sessions; q07 and q09 use synthetic handoff/session-style digest fixtureshot-block— answer should be in the frozen wake block (no retrieval needed); q08 guardscore/active.mdwake coveragemeta— questions about the memory system itself; q10/q12 cover storage model and observability warnings
When a recall failure appears in a private corpus, add the exact question to the private suite with:
- the file that should have answered it
- the keywords that matter
- a note on why it failed
Questions are append-only. Don't delete — mark status: retired in frontmatter when they stop mattering.