Skip to content

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

Closed

Description

@argszero

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 at emrg/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

  1. Both documents, in step. Every change lands in README.md and README.cn.md with 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.
  2. 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 the Subagents cell
    against whether the tool is registered.
  3. 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.
  4. 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
    and Subagents cell 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

  1. argszero commented on Oct 22, 2026

    @argszero
    OwnerAuthor

    Handled by #2462

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions