Repository navigation
Three usability passes on the same question — what stops an author between
start_report and a document they can hand in — consolidated into one change,
then checked by writing three new reports end to end on the result: a
quantitative research memo (Chinese), an engineering lab report (Chinese) and a
business report (English). On 4.41.0, on the head of the first two passes and
on the head of the third, none of the three publishes from the same authored
files; here all three publish on the first pass with no refusal. Nothing here
adds a gate, a profile or a public option, and the adversarial benchmark's
verdicts are unchanged. Run record:
benchmarks/evidence/usability_consolidated_2026-10-21/.
Fixed — what stopped a report
- A numeric column named
unitsmarked a file mixed-unit and dropped every
numeric summary. 「每個擺長重複 5 次」 read as the rate 5 次/個, 「每月底依過去
6 個月」 as 6 個月/月, and7x24lost its 24; English function words ("and")
were read as units. Folding7x24now keeps every character offset, so
check-draftfinds the same figures it did before. - FE misread a backtest's and a lab sheet's own vocabulary. 「樣本內」/「樣本外」
read as dataset scope; 「12 個月」 againstlookback_monthsas a different
unit; 「回看 12 個月」 as not naming 回看月數, so the 12 had to come from the
Sharpe column; 「負重 50 g」 as not naming 砝碼質量_g; 「前四組」 as a count of
4; "resolved within 24 hours" as a 24 the row does not state, although the
column isresolved_within_24h_pct; a claim reporting the research question
as answered by nothing. Each still blocks its false twin: 年化報酬 10.8%
against a volatility of 10.8, 平均伸長 9.9 cm against the second trial's
9.9 cm, 48 hours, 24%, 實驗分三組. - 「每月…20%」 against evidence that itself says 每月 read as 20%/月, and a
paraphrase of a statistic whose figures all checked failed on vocabulary. - A failure routed back to an earlier stage kept the old baseline, so work
already written became ascope_violation; publish re-stamping_contract
was taken for the author editing a file. The repair scope spans the rewound
stages, editing an accepted artifact re-opens its stage, and the harness
hashes artifacts without the stamp. lint_artifactspassed claim matrices that submission and FA refuse, and
the claim stage now refuses them too; revise_existing's pre-check refused
the documentedretitle/remove_section, and FA ignored revision-plan
claim links.- The structured-drafts brief lists the sections to write without
cover,
and SECTION_DRAFT and lint refused the draft for a missingcover. - academic_paper: the thesis is checked at the outline stage, missing author
metadata is named at start and can be supplied inoutline.json, the
abstract labels the brief shows pass, keywords never come from another
project, a sentence may open with a spelled-out number. - A derivation that failed to register stayed in
derived_evidence.jsonand
later stopped publish; a band printed7.50–9refused the author's7.5-9;
ratio and formula can read the cross tables intake built; a claim citing an
unregisteredE_D_id is told so. remap_agent_artifactsfinds an earlier run in another workspace and copies
the files the current stage may write.check_environment'srequired_preflight_decisionslists only what needs
an answer; optional tools left out are skipped instead of refusing the start.
Fixed — what made the document worse than its sources
- Every sentence restating the author's own files ended 「(本研究整理,計算附件
C4)」/"(compiled in this study, …)", pointing at a file the reader was not
sent and, after an image, costing the figure its caption. Only computed
figures carry a label now. - Placed tables printed raw headers (「年化報酬_pct 平均」,
review_count);
chart titles did too. Both use the reader's words; the evidence keeps the
column names, so no id moves. A formula label naming its unit printed it
twice (「拉力 (N) (N)」). - An empty cover section after the front matter printed a 「封面」 chapter.
- Starter figures: unplaced ones are neither demanded nor built; a computed
table's counts, shares and total row are not stacked; a chart with no values
is stopped; two or three crossed label columns (lookback × sample ×
portfolio) are a grid with one series per value, not an axis reading 6, 6, 6,
6, 12, …; a lab sheet plots measured against theory, or the mean of its
trials against the setting; Chinese renders on Linux. - Intake statistics that restated rows are gone: quartiles of two values,
one-row-per-group tables the outline then had to waive, the mean of a row
counter or of a design setting — including a setting crossed with two label
columns, which took the Sharpe ratio's slot in both memo tables — and a
"joinable" pair meeting on one median. An empty open band above the last
bucket edge is not a row. - Briefs carry their own profile's guidance only (a business report's
drafting brief 29 → 20 KB);paper_spine/lab_spineare no longer asked
for (apaper_spine.contributionalready written still counts as the
thesis), andresults_modeis shown only where it is read.
The questions a task asks start after the request's colon and lose a leading
"and". Heading numbers count the sections the document has. - Run directories use hyphens and no commas, so unquoted paths work.
examples/source_to_report.py, the README's first run, works again and CI
runs it.
Fixed — check-draft names the unit when only the unit is wrong
A figure that is not found names the nearest figure printed beside the
sentence's words. When the page prints the same number in another unit, that is
now the one it names: "3.3GB" gets p. 2 states 3.3TB there, where it used to
get the 2.45 in the next column. On the planted drafts in
benchmarks/check_draft/, the hint names the original figure for 19 of the 34
planted figures, up from 12; all seven wrong units are among them. Verdicts do
not change (scripts/run_draft_benchmark.py --check passes).
Docs — what you need to install, said once and correctly
- README: it says up front that it runs inside an AI agent; install uv first;
then two lines in Claude Code, onecodex mcp addline in Codex, and the
sameuvxcommand for Cursor or any other MCP client (JSON in
docs/mcp.md). The first start downloads about 1 GB, longer than an agent
waits for a new server, so the README anddocs/mcp.mdhave you download it
once in a terminal first. docs/mcp.md: the server runs the whole pipeline, not only the gates; all
fifteen tools listed in the order a run calls them; register commands for
Claude Code, Codex and Cursor.SKILL.mdandreference/setup-and-preflight.md: through the plugin or the
MCP server there is nothing else to install; from a clone, Python 3.11+ and
pip install -e ".[render]". The quickstart notebook's last cell installs the
plugin instead of copying a folder that no longer exists.- README figures checked against their archives: 46 attempts to sneak a false
claim through and 27 true claims (not 69 attempts), the three blind judges
are one model in three fresh contexts, and a 0–0 axis reads "tied, not won".
Not taken from the three passes
pearson_randlinear_fit(#2): a new computation, not a repair; AGENTS.md
"Scope" puts that to the owner.- #3's preflight change: #1 had already made optional installs need no answer,
and moved them tooptional_preflight_decisions. - The recorded runs under
benchmarks/evidence/usability_*(about a hundred
logs and documents, several printing the recording machine's paths); the
pull requests keep their findings.