Repository navigation
emrg: the READMEs describe an older EMRG than the tree — two commands, a capability, the cadence, the tools, the task types and the phase names have all drifted #2461
Description
What was observed
README.md and README.cn.md describe an older EMRG than the one on this tree. Six facts
drift, measured on master c94fd019. Line numbers are from that revision and will move;
each item names the code that decides the truth.
1. The command table is two rows short. Both READMEs list 15 commands in their
## Commands / ## 命令一览 table. emrg/client/widgets.py::_COMMAND_HELP — the dictionary
the TUI's autocomplete and /help are built from — holds 17. The two absent:
/sandbox— set this session's sandbox tier, or its extra writable roots
(/sandbox | /sandbox <mode> | /sandbox add|remove|list <path>), handled at
emrg/client/app.py:3633./task-session— open a scheduled task's own session, handled atemrg/client/app.py:3689.
A reader of the README therefore cannot discover the two commands that control the sandbox
tier and a task's own session.
2. The comparison table marks an EMRG capability as absent. The Subagents row
(README.md:177, README.cn.md:175) puts ❌ in EMRG's own column, while emrg/server/daemon.py
registers SubagentTool(self._run_subagent_tool) at start-up. It is the only cell in that table
where EMRG scores itself ❌ on a capability two competitors score ✅ — so a reader comparing the
columns is told the opposite of what the binary does.
3. The evolution cadence is three times the one a fresh install runs. README.md:67 says
Evolution Cycle (every 30 min); README.cn.md:65 says the same. The task the daemon seeds when
~/.emrg/tasks.yml does not exist is DEFAULT_TASK_RECORD in emrg/server/scheduler.py, whose
"interval" is 600 seconds — ten minutes. DEFAULT_INTERVAL = 1800 in the same module is a
different subject: it is the fallback for a hand-written record that omits the field, not the
cadence an installation gets. A fix has to name the seeded number, not the fallback.
4. The tool list names six of the eight names the registry holds. README.md:171 /
README.cn.md:169 write Tool-calling (bash, read, write, edit, glob, grep). The daemon
registers submit_rant and subagent as well, and on Windows pwsh replaces bash
(build_shell_tool in emrg/server/daemon.py). The row understates the agent's own tool surface
in a table whose subject is exactly that.
5. Built-in task types are not disclosed at all. README.md:50 / README.cn.md:50 say
Built-in + custom task types. TASK_TEMPLATES in emrg/server/scheduler.py holds eight:
evolution, paper, open-source, promote, journal, competition, ios-app, feishu.
Two of them were added in the week before this reading, so the newest capabilities are the ones
no reader can find.
6. The phase list names steps the prompt does not have. README.md:68 writes
(Prepare -> Review -> Discover -> Improve -> Commit -> Record). The headings of
emrg/server/evolution_prompt.md — the template an evolution task actually renders — are
0. Preparation, 1. Look, 2. Think, 3. Act, 4. Record. Three of the six names in the
README appear nowhere in the template, and the two that carry the cycle's judgement (Think) and
its change (Act) are missing. Agent.md's Terminology section carries the same stale list, so
the fix reaches both files, not only the README.
What the fix must satisfy
- Both documents, in step. Every change lands in
README.mdandREADME.cn.mdwith the
same section structure and the same table rows, one-to-one. A change to one alone leaves the
pair disagreeing, which is worse than the drift it fixes. - Every derived fact is mechanised. A value a reader can obtain from the code must not be
hand-written into prose where nothing can measure it. Each of the six items above gets a guard
that reads the code and the document and fails when they disagree — six subjects, six readings:
the command table against_COMMAND_HELP; the tool row against the registered tool names; the
cadence against the seeded record's interval; the task-type sentence against
TASK_TEMPLATES; the phase list against the template's headings; and theSubagentscell
against whether the tool is registered. - Each guard carries a control arm. A guard that prints the healthy answer whatever it is
given has measured nothing. For each one, a mutation of the document — a deleted table row, a
changed number, a flipped ✅, a renamed phase — must make that guard fail, and the arm must be
part of the suite rather than a manual experiment. - The guard compares in both directions. A row the table carries and the code does not
offer is as much a drift as the opposite, and it is the direction a one-way check never reports.
Acceptance
- Both documents' command tables, tool rows, cadence sentence, task-type sentence, phase list
andSubagentscell read against the code, item by item, with the counts stated per document. - The guards' mutation runs shown: each mutated document region turns exactly the corresponding
guard red, with the passing reading beside it.
Activity
argszero commentedon Oct 22, 2026
Handled by #2462