3 Commits
Author SHA1 Message Date
Mark Eaton 21fb9969c4 update .gitignore 2026-04-12 00:35:18 -04:00
Mark Eaton 2a8c72ae22 gitignore: protect rough_drafts/*.txt from accidental commits
The user's drafts in rough_drafts/ are real in-progress academic
work. Project discipline (per memory) is to keep them untracked,
but a single accidental `git add -A` could leak unpublished
scholarship into git history. Adding the pattern to .gitignore
makes the protection structural rather than discipline-based.

Scoped to .txt only (the docx->txt converted form the project
actually consumes); does not affect sample.md, .gitkeep, or any
other extensions that might land in rough_drafts/ later.
2026-04-11 17:46:00 -04:00
cmos dev 4cad38ef30 Scaffold CMOS 18 reformatter: harness, linter, parser, formatter, CLI
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.
2026-04-10 20:48:33 -04:00