Initial phase-1 baseline of the karpathy/autoresearch-style loop. The formatter module is the inner-loop artifact; parser and linter are infra. The linter carries a LINTER_VERSION hash (v0.2.0) that will force a re-baseline on any rule change. Components: - harness/diff.py: case-sensitive field-level substring diff - harness/score.py: three-axis scoring (field, linter, canary exact) - src/cmos/linter.py: 9 CMOS 18 structural rules, each Purdue/CMOS cited - src/cmos/parser.py: locate ## Bibliography section, split entries - src/cmos/formatter.py: prompt + OpenAI call with caller injection - src/cmos/cli.py: cmos format path/to/draft.md - scripts/run_loop.py: loop runner with --fake mode for no-API runs - exemplars/: 3 canary seed exemplars (book, journal w/DOI, web), sourced from chicagomanualofstyle.org quick guide Tests: 48 passing. Fake-mode baseline scalar = 0.000 on the 3 seed exemplars (identity caller fails the linter on every rule). This is the floor the real GPT-5 formatter needs to improve from.
30 lines
1.1 KiB
Markdown
30 lines
1.1 KiB
Markdown
# cmos — Chicago Manual of Style 18 bibliography reformatter
|
|
|
|
A Python tool that reformats the bibliography section of an English-language
|
|
markdown draft to **CMOS 18th edition, notes-and-bibliography form**.
|
|
|
|
Accuracy-first, iterative, built with a karpathy/autoresearch-style dev loop.
|
|
|
|
See `program.md` for the goal specification and
|
|
`/home/claudecode1/.claude/plans/pure-mixing-yao.md` for the implementation plan.
|
|
|
|
## Quick start
|
|
|
|
```bash
|
|
uv sync
|
|
uv run pytest
|
|
uv run cmos format path/to/draft.md > out.md
|
|
```
|
|
|
|
## Layout
|
|
|
|
- `src/cmos/formatter.py` — the iterable artifact (edited every loop iteration).
|
|
- `src/cmos/parser.py` — extracts the bibliography section from a draft.
|
|
- `src/cmos/linter.py` — deterministic CMOS 18 rule checks (versioned).
|
|
- `src/cmos/cli.py` — `cmos format` entry point.
|
|
- `harness/score.py`, `harness/diff.py` — frozen scoring.
|
|
- `exemplars/` — TOML test corpus.
|
|
- `tests/` — pytest suite (linter, parser, formatter, cli).
|
|
- `rough_drafts/` — user-supplied messy drafts for ad-hoc iteration.
|
|
- `logs/` — per-run scores, model ids, linter version hashes.
|