Correct three false harness claims, and record ten more - #15
Conversation
The harness table's failure mode is not omission but false confidence. Three entries told users a thing was impossible when it was not, and nobody re-checks a documented impossibility. Antigravity was "protocol buffers ... there is no line-oriented transcript to read". It writes a plain JSONL transcript at brain/<uuid>/.system_generated/ logs/transcript.jsonl, 54 of them on this machine. The count reads as 0 under `fd` because .system_generated is a dot-directory and -H was not passed, which is presumably how the original claim survived. Copilot CLI was "a SQLite database with an undocumented schema". Its turns table is turns(session_id, turn_index, user_message, assistant_response, timestamp) with UNIQUE(session_id, turn_index), joined to sessions(cwd, repository, branch) — a flat, pre-paired transcript, and about the easiest reader on the list. Kimi was "a hash with no published mapping back to a working directory". The mapping is recoverable three ways: session_index.jsonl maps session to workDir, each session's state.json carries workDir, and the legacy hash is the MD5 of the absolute path — verified against two directories here. All three become NotImplemented rather than Unsupported, which is the distinction that was being got wrong: NotImplemented means readable with no reader written, Unsupported means no line-oriented transcript exists at all. Ten more installed harnesses are recorded rather than left absent, because an absent entry is indistinguishable from an unexamined one. Each states only what was probed. Sizes turned out to be no evidence at all: kilo, mimocode and warp looked like large session stores and are almost entirely binary, with no conversation store in their config roots. Grok's cwd mapping is percent-encoded and therefore reversible, unlike Claude Code's. Deepcode's layout resembles Claude Code's but its records carry none of the keys the reader dispatches on. ZCode is an opencode fork, so one reader would serve both. Grok keeps its no-command-surface entry, for the reason it already had: it scans ~/.claude/commands itself, so a second copy would be shadowed. Having a table entry is not the same as writing to it. Finally, export_command. A harness engram cannot read is not a dead end when it exports its own conversation and `engram import` reads the file — but only if the user is told which command to run at the moment they hit the wall. The readerless hint now names it. The test that asserted the notes-path wording had to widen: it would otherwise have forbidden the better hint. Gates: fmt, clippy -D warnings, 278 tests, REUSE 3.3, makeinfo clean. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016i16R4GhdSffsboRYq97Fs
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ecbaf0753b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| command_surface: CommandSurface::Skill { | ||
| dir: ".kimi-code/skills", | ||
| }, | ||
| export_command: Some("kimi export [session] -o out.zip"), |
There was a problem hiding this comment.
Avoid advertising a ZIP as directly importable
When a Kimi user follows the new ingest --harness kimi fallback, this command writes out.zip, but import::read_file reads the supplied path with std::fs::read_to_string and only parses Texinfo, Opencode Markdown, or Claude scrollback. Consequently, engram import out.zip skips the archive instead of importing the conversation. Either add ZIP handling, identify the supported file to extract from the archive, or do not present this as a directly importable export.
AGENTS.md reference: AGENTS.md:L282-L282
Useful? React with 👍 / 👎.
| name: "poe-code", | ||
| probe: &[".poe-code"], | ||
| sessions_dir: None, | ||
| transcript: TranscriptSupport::NotImplemented { |
There was a problem hiding this comment.
Do not classify unprobed transcripts as readable
For engram ingest --harness poe-code, this entry labels the harness NotImplemented even though its detail says Poe Code wraps another agent and has no conversation store of its own. The same unsupported assertion is made for several following entries where no store was found, despite NotImplemented being reserved for a transcript verified as readable. Add an unknown/unsurveyed state or use Unsupported where the absence was actually verified, rather than making future consumers treat these harnesses as reader-ready.
AGENTS.md reference: AGENTS.md:L280-L280
Useful? React with 👍 / 👎.
|
|
||
| So: a `TranscriptSupport` detail states only what was *probed*, and `NotImplemented` means "readable, reader not written" while `Unsupported` means "no line-oriented transcript exists at all". Getting that distinction wrong is what produced the table above. Sizes are not evidence either — `kilo` (174 MB), `mimocode` (135 MB) and `warp` (235 MB) look like large session stores and are almost entirely *binary*. | ||
|
|
||
| - **`export_command` is the answer to a missing reader, not trivia.** When `ingest` refuses a readerless harness, the hint now names that harness's own export command and points at `engram import`, instead of sending the user to re-run the work through `remember`. Goose (`goose session export --format markdown -o FILE`), Opencode, Kimi and Copilot CLI have one; Codex, Qwen, Cursor and ZCode have none. |
There was a problem hiding this comment.
Reconcile the obsolete no-reader guidance
This new export fallback leaves the earlier transcript guidance self-contradictory: it still classifies Antigravity and Copilot CLI as Unsupported and says every readerless harness receives the remember/save-chat hint, while this commit reclassifies both and substitutes export/import hints for several harnesses. Agents load this file as project policy, so the stale paragraph can cause them to rely on the old behavior; update or remove it alongside this new contract.
AGENTS.md reference: AGENTS.md:L266-L266
Useful? React with 👍 / 👎.
The harness table's failure mode is not omission but false confidence. Three entries told users a thing was impossible when it was not — and nobody re-checks a documented impossibility.
brain/<uuid>/.system_generated/logs/transcript.jsonl— 54 of them hereturns(session_id, turn_index, user_message, assistant_response, timestamp)+UNIQUE(session_id, turn_index), joined tosessions(cwd, repository, branch)All three become
NotImplemented, notUnsupported— which is exactly the distinction that was being got wrong.NotImplemented= readable, reader not written.Unsupported= no line-oriented transcript exists at all.How the Antigravity claim survived
.system_generatedis a dot-directory, andfdhides those by default. One missing flag turned "54 readable transcripts" into "impossible".Kimi, verified
Ten more harnesses, recorded not built
An absent entry is indistinguishable from an unexamined one. Each new entry states only what was probed.
Sizes turned out to be no evidence whatsoever —
kilo(174 MB),mimocode(135 MB) andwarp(235 MB) look like large session stores and are almost entirely binary, with no conversation store in their config roots at all.Three findings worth having:
.grok/sessions/%2Fspacecraft-software%2Fbravaisis the percent-encoded absolute path, so a reader would not need the cwd supplied. (Unlike Claude Code's mangling, which is forward-only by construction.)deepcodewritesprojects/<mangled-cwd>/<uuid>.jsonl, but its records carry none of the keys (type,uuid,cwd) the reader dispatches on. The resemblance is the directory naming only.session/message/partschema — so one reader would serve both, exactly asclaude_codealready serves OpenClaude.Grok keeps its no-command-surface entry for the reason established in #11: it scans
~/.claude/commandsitself, so a second copy would be shadowed. Having a table entry is not the same as writing to it.export_command— the answer to a missing readerA harness engram cannot read is not a dead end when it exports its own conversation and
engram importreads the file. But that only helps if the user is told at the moment they hit the wall:The existing test asserted the notes-path wording, so it had to widen — it would otherwise have forbidden the better hint.
Gates
fmt·clippy -D warnings· 278 tests · REUSE 3.3 ·makeinfoclean🤖 Generated with Claude Code
https://claude.ai/code/session_016i16R4GhdSffsboRYq97Fs