Repository navigation
fix: correct the facts that the ASD-STE100 rewrite left open - #37
Conversation
#35 listed facts in the documents that were wrong before the rewrite. This change corrects them against the code: - the count of harnesses, and Grok Build as a harness; - the exit code 4 of a launch with no handoff; - the gateway on wslc, which runs in the session VM; - the time and the tokens with the record, with the figures; - the replay flags, and what quarantine drop does; - where the PAT goes, and the default --auth; - the harnesses in the image, and the binary name amem (amem.exe on Windows, /opt/memory/memory inside the sandbox); - the planned crates of the reference stack against the crates today; - dependabot.yml, which #12 added; - what .gitignore ignores under .claude/; - act 11 of the demo, which reads README.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The pass found these errors in the first commit, and this commit fixes them: - Other scripts read the Markdown outside crates/ and taps/: seed-corpus.py seeds the demo record from docs/ and examples/decisions/, and the golden suite and the eval score against that text. - On wslc, --auth gateway always uses the LiteLLM in the session VM, and it replaces LLMAO_URL and LLMAO_KEY. --server-auth gateway also uses the gateway. - amem replay sends to the gateway by default. With --auth key, --provider must name the recorded destination. - A note from before compaction also prevents exit 4. - Under Seatbelt, the binary is at its host path. - Messages, help text and comments named a "memory" command. The command is amem. - The sandbox crate said eight harnesses. It knows ten. - Wording: the timing figures, which table, which plan, and the spike file that is still there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The second pass found these errors, and this commit fixes them: - The replay bullet said that calls go to the same destination. With --auth gateway, they go to the gateway. - seed-corpus.py ran a "memory" command by default. It now runs amem. - AGENTS.md said to run the script that reads a changed document. The demo seeds its record only once, so the text now says to seed a new record and run the golden suite and act 6. - On wslc, --server-auth gateway also starts the gateway in the VM. The text and two messages now say so. - Doc comments and the headers of generated config files named a "memory" command. The command is amem. - Wording: the verdict of a held write, the Muse flag, the web sessions, the Muse pin, the documents of the golden suite, and the key of the gateway on wslc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The third pass found these errors, and this commit fixes them: - The act 6 and act 11 commands in AGENTS.md failed without HARNESS. They now give it, and say that act 6 needs the gateway key. - The section on the gateway in the VM, the error message and the doctor text named only --auth gateway, and local/.env as the only source of the key. amem reads the key from the environment or credentials.env. - Four more doc comments named a "memory" command. - docs/terms.md says to write "outbox note" for what a hook leaves. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The fourth pass found these errors, and this commit fixes them: - The error for a tap with no component said to run a "memory" command. The command is amem. - Three more places in local/README.md said "note" for an outbox note. - Act 6 needs a key for llm.apache.org, not for any gateway. - The text and the error now say that the key file is the root's credentials.env. - Comments in the Seatbelt backend, its profile text and the otel crate's description called the binary "memory". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The fifth pass found these, and this commit fixes them: - Two more places in local/README.md said "note" for an outbox note. - Comments in the sandbox crate called the binary "memory". - Act 6 says "skipped" only when there is no key. A key for another gateway makes it fail instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The sixth adversarial pass found that act 6 runs with a key in LLMAO_KEY too, not only with a key in local/.virtual-key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Copilot review overview
4 open issues
The step name says “amem binary” but the artifact is copied toimages/harness/memory, which reads… · New The user-facing prefix is stillmemory:while the suggested command isamem ..., which is… · New This comment acknowledges that changes underdocs/andexamples/decisions/affect seeded… · New This comment still says “the memory binary” while the rest of the PR standardizes onamem(with… · New
What changed in this PR
Corrects factual and naming inconsistencies introduced by the ASD-STE100 rewrite across docs, scripts, and in-code help/messages—primarily around the amem binary name, harness counts, and gateway/WSLC behavior.
Changes:
- Aligns documentation, comments, and help text from
memory/memory.exetoamem/amem.exe, while clarifying the inside-sandbox path/opt/memory/memory. - Fixes documented operational facts (harness counts, Grok/xAI terminology, exit codes/handoff rules, gateway routing on
wslc, replay/quarantine details). - Updates demo/supporting scripts and reference docs to reflect current behavior and repo structure.
| File | Description |
|---|---|
| scripts/seed-corpus.py | Defaults seeding command to amem and updates usage text accordingly |
| scripts/fetch-wslcsdk.test.sh | Updates safety comment to refer to amem.exe |
| scripts/fetch-wslcsdk.sh | Updates usage/docs to refer to amem.exe and destination directory |
| scripts/docs-only.sh | Clarifies what Markdown is read by crates vs. scripts (demo/golden inputs) |
| local/README.md | Corrects multiple launcher/harness/gateway/quarantine/replay factual statements |
| images/harness/README.md | Updates harness-image contents description (harness count, Python, /opt/memory/memory) |
| images/harness/Dockerfile | Updates top-of-file description to reflect amem launch and current image intent |
| golden/docs.toml | Updates run instruction to amem golden |
| docs/reference-stack.md | Clarifies planned deployment status and updates crate table vs. “Today” reality |
| docs/harness-containers.md | Updates Dependabot statement to reflect #12 and rewords historical note |
| crates/wslc-api/src/dll.rs | Updates DLL load error hint to mention amem.exe |
| crates/web/tests/reader_browser.rs | Updates doc comment to amem web |
| crates/web/src/lib.rs | Updates doc comments to reflect amem launch/work and amem models |
| crates/sandbox/src/seatbelt.rs | Updates comments/strings from “memory binary” to “amem binary” |
| crates/sandbox/src/linux.rs | Updates relay-related docs from memory relay to amem relay |
| crates/sandbox/src/lib.rs | Updates core sandbox docs/table to “ten harnesses” and amem naming |
| crates/policy/src/lib.rs | Updates doc comment to amem init |
| crates/otel/Cargo.toml | Updates crate description to “amem binary” |
| crates/memory/tests/launch.rs | Updates test docs referring to amem inside / amem hook |
| crates/memory/src/wslc_api.rs | Updates docs and one user message to amem; leaves one memory: prefix |
| crates/memory/src/wslc.rs | Updates docs/error text for amem inside and gateway credential sourcing |
| crates/memory/src/taps.rs | Updates tap docs and install hint to amem |
| crates/memory/src/savings.rs | Updates recall hint to amem recall |
| crates/memory/src/main.rs | Updates help/errors/docs to amem for image unpack, usage, models, inside args |
| crates/memory/src/credentials.rs | Updates known credential description for gateway auth modes |
| crates/egress/src/lib.rs | Updates usage reference from memory usage to amem usage |
| crates/client/src/lib.rs | Updates doc comment from memory serve to amem serve |
| README.md | Clarifies PAT placement, gateway flags, and wslc gateway behavior vs LLMAO_* |
| Makefile | Updates wslcsdk comment to refer to amem.exe |
| CONTRIBUTING.md | Updates make run description to amem |
| AGENTS.md | Updates docs-only guidance to reflect demos/golden inputs and .claude/ commit policy |
| .github/workflows/image.yml | Renames workflow step text to “amem binary” |
Review effort: Lite
The Dockerfile comment names the amem binary and its path in the image. The image workflow says why it stages the binary as `memory`. The demo narrative says that act 10 writes a new public note. The count of 309 is 304 live entries, the new note, and four superseded entries. The eval task asf-pressures names a part that exists, and expects six. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The adversarial pass found that the paper and the case study had changed under the golden suite and the evals. - golden/docs.toml: 6 of 14 questions named a heading that does not exist, and 2 matched the wrong document. All 14 now name the current heading. - evals/demo.toml: committers-gate expected "committer", but the case study now names other people as the gate. asf-pressures accepted a "6" from a section reference. The seed instruction now uses make demo-ready. - Act 10 says on screen that it writes a new note. - docs/reference-stack.md no longer says that the launcher runs two harnesses. - local/README.md says that its eval results are for the old tasks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The second adversarial pass found that committers-gate accepted "the PMC", which a model guesses with no record. It also found that asf-pressures accepted a section number and refused "**six** pressures". The patterns now reject the guesses and accept the answers that the record gives. - The seed instruction says RESET=1, because an existing record keeps its old text. - The trust-tiers golden question also names the part that defines the tiers. - The demo narrative and PLAN.md say that their counts are for the old tasks and the old suite. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The third adversarial pass found that the patterns refused right answers, such as "It lists six." and "A named person authorised by domain policy". - asf-pressures accepts six or 6, except as the two section numbers that the record cites. - committers-gate accepts the singular and Markdown emphasis. It requires "domain policy", so a guess about another policy does not pass. - The trust-tiers golden question is now two questions, one for each answer. - The seed command is on a line of its own. - The demo narrative names the date of its run, 12 October. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
There was a problem hiding this comment.
Warning
Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.
Copilot review overview
6 open issues
The user-facing prefix still says"memory:"even though the command/reference is nowamemin… · New This comment acknowledges that changes underdocs/andexamples/decisions/affect seeded… The user-facing prefix is stillmemory:while the suggested command isamem ..., which is… The step name says “amem binary” but the artifact is copied toimages/harness/memory, which reads… This diagnostic became less specific than before. Sincewants_gateway(l)is true for both `--auth… · New This comment still says “the memory binary” while the rest of the PR standardizes onamem(with…
Review effort: Lite
The 6.1 caveat moves to the end of its paragraph. The committers-gate pattern accepts "policy" without "domain" and a curly apostrophe. The PLAN caveat says that the corpus is now nine files. The gateway diagnostic in wslc.rs names --auth gateway and --server-auth gateway. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
The committers-gate pattern requires the domain's policy, or a policy that authorises the people. It accepts "human", "humans", "approver" and "approvers". The asf-pressures pattern rejects a 6 in a link anchor, at the end of a range, or in a list of parts. The trust-tiers question accepts the two entries that define the tiers. The init example in CONTRIBUTING.md uses --root. AGENTS.md says what to read in the output of golden and act 6, because neither fails on a miss. Act 8.1 and the M11 row in PLAN.md say that their questions changed since they ran. The golden row in PLAN.md says fifteen questions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
There was a problem hiding this comment.
🟡 Changes recommended
The accepted pattern in evals/demo.toml incorrectly passes release-policy authorisation answers despite the domain-policy requirement, so it needs tightening and verification against both correct and incorrect answers.
4 open issues
Reject release-policy answers in authorization checks · New The user-facing prefix still says"memory:"even though the command/reference is nowamemin… This comment acknowledges that changes underdocs/andexamples/decisions/affect seeded… The user-facing prefix is stillmemory:while the suggested command isamem ..., which is…
Review effort: Balanced
The first alternative accepted "named people authorised by the release policy". Now the policy must be the domain's policy, or a policy with no other name. I ran the pattern against 10 right and 7 wrong answers. The pattern before this change accepted 2 of the wrong answers. This pattern accepts none of them, and accepts all 10 right answers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bhj4Ck4y5iwZUsjpgQx8A2
There was a problem hiding this comment.
🔵 Needs a closer look
Human assessment is needed because unpublished findings show that the grader patterns can accept incorrect answers and inflate pass rates.
No open issues 🎉
4 resolved since last review
Reject release-policy answers in authorization checks The user-facing prefix still says"memory:"even though the command/reference is nowamemin… This comment acknowledges that changes underdocs/andexamples/decisions/affect seeded… The user-facing prefix is stillmemory:while the suggested command isamem ..., which is…
Review effort: Balanced
Brings in what landed since the last merge (#37, #38, #41, #42, #39, #48 to #52, #54 to #56). Two conflicts: - Makefile .PHONY: keep corpus-check from main, and drop reader, which this branch removes. - crates/web/static/reader/dm_reader_bg.wasm: #49 built it again on main. This branch deletes it, because crates/web/build.rs builds it from the sources, the change of #49 included. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D5DyJNQBUKom7QzrdkqRHn
Brings in what landed since the last merge (#37, #38, #41, #42, #39, #48 to #52, #54 to #56). One conflict, in crates/server/src/lib.rs: #52 adds `last_stamp`, so that a write of this service is not dated before the one before it. This branch adds `Memory::for_request()`, a view that writes for the same session. The view now shares `last_stamp` with its session, as it shares the other state that is kept per session. New test: a_request_view_dates_its_writes_after_its_session_s_last_one. With a view that starts its own `last_stamp`, the write is dated at the clock, 30 s before the last stamp of the session, and the test fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D5DyJNQBUKom7QzrdkqRHn


Summary
#35 listed facts in the documents that were wrong before the rewrite. This change corrects them. I checked each one against the code first. Some of the same errors were also in messages, help text and comments, so this change corrects those too. The first version of this description listed three facts as open. This version also corrects the first two. The third is a fault in the code, and #41 corrects it.
local/README.mdcommand;Harnessincrates/sandbox/src/lib.rslocal/README.mdHarness::Groklocal/README.mdcrates/memory/src/work.rs:194,STOPPED = 4local/README.md--auth gatewayand--server-auth gatewayrun a gateway in the VM, which replacesLLMAO_URLandLLMAO_KEYwants_gateway,gateway_up,egress_envincrates/memory/src/wslc.rslocal/README.mdlocal/README.mdamem replay; no text foramem quarantine drop--model; the gateway by default;--providerwith--auth key. Drop deletes the held write and its verdictreplay::retarget;release_quarantined(id, false)README.md--auth gatewayLLMAO_KEY; the default is--auth subscription;--server-auth gateway; the key of the gateway on wslccrates/memory/src/main.rs:315,crates/memory/src/credentials.rsimages/harness/README.md, Dockerfile,image.ymlmemorybinary"amembinary at/opt/memory/memory; no Antigravity. The workflow stages the file asmemory, and a comment says whypackage.json(seven), pi and Muse Code in the Dockerfile;COPY memory /opt/memory/memorymemorycommand,memory.exe, "the memory binary"amem,amem.exe. Inside the sandbox and the image, the file is/opt/memory/memoryname = "amem";INSIDE_MEMORYcrates/memory/src/wslc.rs--auth gateway--auth gatewayand--server-auth gatewaywants_gatewayscripts/seed-corpus.pymemorycommand by default, which does not existamemby defaultcrates/sandbox/src/lib.rssetup_muse,setup_pidocs/reference-stack.mddocs/reference-stack.mdcrates/today, and a list of the crates that the table does not namecrates/docs/harness-containers.mddependabot.ymlin.github/.github/dependabot.ymldocs/demo-narrative.md, act 10evals/demo.toml,asf-pressuresdocs/seeding-a-foundation.mdhas six rowsevals/demo.toml,committers-gatedocs/seeding-a-foundation.mdgolden/docs.tomlamem golden: keywords 15 of 15, question 15 of 15, stripped 14 of 15docs/demo-narrative.md6.1 and 8.1,PLAN.md,local/README.mdCONTRIBUTING.mdARGS='init /tmp/m --domain dom-me', which failsARGS='init --root /tmp/m --domain dom-me'amem inittakes no path.claude/stays ignored".gitignoreignores two paths; commit nothing else from.claude/unless it belongs to the repository.gitignorescripts/docs-only.shcrates/andtaps/docs/andexamples/decisions/, the golden suite and the eval score against that text, and act 11 readsREADME.md. The text says what to run after such a change, and what to read in the output, because these commands do not fail on a missscripts/seed-corpus.py,scripts/demo/11-limits.shOpen
review_byis written as a list of year and day, not as a date (crates/core/src/lib.rs:191). The demo record shows it:review_by: [2027, 29]. This change does not touch it.amem log materializeruns. Act 10 runs it first, so the text of the act is correct.dependenciesjob fails on the wasmtime advisories RUSTSEC-2026-0422, 0423 and 0424. This change does not changeCargo.lock.Checks
make checkpasses: 737 tests run, 737 passed.README.md.Adversarial pass
Eleven fresh agents attacked the branch, one after each push.
LLMAO_URL, so the README text was wrong on Windows;amem replaysends to the gateway by default;memorycommand.scripts/seed-corpus.pyfailed when run by hand, that the new AGENTS.md text said to run a script that does not seed again, and more places that namedmemory.HARNESS, and that the key of the gateway on wslc also comes from the root'scredentials.env.memory, and the term "outbox note" missing in three places.local/.virtual-keyas the place for the key of act 6. The act also takesLLMAO_KEY.committers-gatetask expected the old answer, that the pattern for six was weak, and that the act 10 text did not match the script.committers-gate, thatasf-pressuresaccepted a section number, that the seed instruction neededRESET=1, and that results from old runs had no caveat.wslc.rs.committers-gateaccepted any policy, thatasf-pressuresaccepted a 6 in a link or a range, that the trust-tiers question rejected two right entries, theinitexample, and two caveats that were missing.Each commit after the first answers the pass before it.
After the eleventh pass, Copilot found that
committers-gatestill accepted "named people authorised by the release policy". 50d97d2 corrects it. No pass ran after that commit.Posted by Claude on behalf of @sstriker