34 KiB
34 KiB
Task Board (Multi-Session Coordination)
This file is the single coordination surface for parallel Codex sessions.
Goal: avoid prompt-pasting + idle agents by making “what to do next” a durable, repo-local queue.
Product contract (read first)
iftypeset is a Document CI tool, not a “pretty PDF generator”.
- Mental model: profiles + gates + artifacts + exit codes (rendering is one stage).
- The one command humans/CI want:
iftypeset run --input <path> --profile <name> --out out/ - Keep this contract true as tasks evolve; don’t optimize for “looks nice locally” at the expense of determinism and CI clarity.
- Full contract + CLI shape lives in
docs/14-document-ci-model.md.
Live readiness gate (if.typeset) (not live)
Black/white:
if.typesetremainspreviewinif.registry.jsonuntil all criteria below are satisfied and publicly reviewable.
Gate criteria (all MUST be true):
- Public landing page exists at
/if/typesetwith a clear Document CI contract and no compliance claims. - At least 1 public demo pack exists with reproducible steps and
if.tracereceipts (HTML-first links, one URL per line). - Public contract exists for the
iftypeset runpipeline (inputs, profiles, outputs, exit codes). - Status flip to
livehappens only after the above are verified.
How to use this board
- Claim a task by editing its row:
- set
owner(if you are using Codex CLI, include[sid: …]from/status) - set
status=in_progress - add a short
working_set(files/dirs you will touch)
- set
- Do the work.
- Run
./scripts/ci.sh. - Create a restore point:
./scripts/checkpoint.sh "task <id>: <short note>" - Update the row:
status=done- record the
checkpointfilename + sha256 (fromdocs/CHECKPOINTS.md)
Coverage milestones (CMOS / BRING)
Coverage is tracked in spec/coverage/** by section. For multi-session work, treat it as two milestones (details: docs/19-coverage-roadmap.md):
- Milestone A (mapped): drive
statusfromuncovered→partialby adding at least one paraphrased rule with a valid pointer (source_refs) and wiringrule_idsfor that section. - Milestone B (complete): later completion pass to move
partial→coveredorout_of_scope(only after checking the section for remaining rule-bearing guidance).
Collision note: if IFTS-1346 is in progress (touches spec/rules/**), do not claim coverage batch tasks that edit spec/rules/** (including citations batches) until it is done.
Conflict avoidance rules (strict)
- Do not work on the same files in parallel sessions.
- If you must touch a shared file (e.g.,
STATUS.md), do it in a small final pass and announce it here first. - If a task row changes while you work, preserve the other session’s note and append your checkpoint details instead of overwriting.
- Prefer one area per session:
src/iftypeset/*(runtime)spec/*(registry + profiles)../forgejo-pdf/*(integration)docs/*(documentation)
Optional lock files (when needed)
If a task must block others, create a lock file:
docs/LOCK_<area>.md
Template:
owner: <name/session>
created_at_utc: <timestamp>
scope: <what is locked>
notes: <what others should avoid>
Delete the lock when done.
Queue
Columns:
status:todo|in_progress|blocked|doneowner: human/session label (e.g.,codex-max,codex-mini,danny)working_set: paths to avoid collisions
| id | status | owner | task | working_set | notes | checkpoint |
|---|---|---|---|---|---|---|
| 1301 | done | codex-max | Build rule indexes on CI | spec/indexes/*, src/iftypeset/spec.py |
Already wired in scripts/ci.sh; index_builder.py writes deterministically (sorted keys). Verified current behavior. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T05-20-47Z.tar.gz (sha256=3078a3cce3dca02336e49d3d4c261308f2078d22c0e6ace58bc6635f1b03f8b5) |
| 1302 | done | codex-max | Expand PDF QA incidents | src/iftypeset/qa.py, tests/test_qa.py |
Added stranded_heading_pdf + overfull_line_pdf heuristics and tests; merged into QA metrics/analysis_mode. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T05-20-47Z.tar.gz (sha256=3078a3cce3dca02336e49d3d4c261308f2078d22c0e6ace58bc6635f1b03f8b5) |
| 1303 | done | codex-max | Improve Markdown parser robustness | src/iftypeset/md_parser.py, tests/test_md_parser.py |
Added degraded fixtures; reduced false positives by gating hard-wrap continuation and missing-headings length; unwrap only on hard-wrap. | out/checkpoints/iftypeset_checkpoint_2026-01-04T05-58-38Z.tar.gz (sha256=42e99c3676c8423194cb3bbdca9ff635eff7bfd60af29a6ca0788b10aca7fe4d) |
| 1304 | done | codex-max | Increase automated enforcement coverage | src/iftypeset/linting.py, spec/rules/* |
Added deterministic lint for DOI references, ordinal suffix errors, and footnote marker placement; new tests added. | out/checkpoints/iftypeset_checkpoint_2026-01-04T06-03-53Z.tar.gz (sha256=a781c760a44691aa9ff110de6c6d2022280034be3d2c05c247c0c74a5e3048b9) |
| 1305 | done | codex-max | Forgejo PDF integration (theme + CSS sync) | ../forgejo-pdf/*, forgejo/README.md |
Added iftypeset-web_pdf theme, vendored CSS + refresh script, smoke test, docs updates. Forgejo repo has no checkpoint; see current workspace state. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T05-20-47Z.tar.gz (sha256=3078a3cce3dca02336e49d3d4c261308f2078d22c0e6ace58bc6635f1b03f8b5) |
| 1306 | done | codex-max | Packaging/UX pass | README.md, STATUS.md, docs/06-project-overview.md |
Clarified quickstart + enforcement limits; updated status/overview notes. | out/checkpoints/iftypeset_checkpoint_2026-01-04T06-05-22Z.tar.gz (sha256=a3aa47e3ee759328e3531ed3a0c49801bb8cfd430cb403978ff91b9a18001746) |
| 1307 | done | codex-max | Add one-shot iftypeset run (CI-style pipeline) |
src/iftypeset/cli.py, src/iftypeset/reporting.py, app/CLI_SPEC.md, README.md |
Added run command with run-summary.json, updated CLI spec/README, added integration test. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T06-10-01Z.tar.gz (sha256=d493f39ba9fcf708eb38cab11dd20762a4a361a3a635e30feedfad7e577c6d7c) |
| 1308 | done | codex-max | Add repo config file support (iftypeset.yaml) |
src/iftypeset/config.py (new), src/iftypeset/cli.py, README.md, app/CLI_SPEC.md |
Added config loader + CLI overrides, docs and integration test. | out/checkpoints/iftypeset_checkpoint_2026-01-04T06-16-12Z.tar.gz (sha256=b978bb5cb21fbccd669307e800494b3344818e25fbae521df953f30e099cf595) |
| 1309 | done | codex-max | Add CLI introspection helpers (profiles/gates/rules) | src/iftypeset/cli.py, README.md, app/CLI_SPEC.md |
Added profiles/gates/rules commands and tests; documented in README/CLI spec. | out/checkpoints/iftypeset_checkpoint_2026-01-04T06-18-36Z.tar.gz (sha256=ab8c60da431acc224c189a180b20aa33d3173d49e10a7c9b179dfecd3c9261e5) |
| 1310 | done | codex-max | Make report generate a human HTML index |
src/iftypeset/reporting.py, src/iftypeset/cli.py, docs/06-project-overview.md |
Added out/report/index.html summary + artifact links; tests updated. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T06-21-49Z.tar.gz (sha256=d3474fe4d820a4edaf1fc60e758359c22881418086468f83c62934059bcbe5ae) |
| 1311 | done | codex-max | Confirm CI-friendly exit codes + stdout summary | src/iftypeset/cli.py, app/CLI_SPEC.md, tests/test_integration.py |
Standardized exit codes (0/1/2/3), updated CLI spec + tests, run summary remains JSON. | out/checkpoints/iftypeset_checkpoint_2026-01-04T06-26-42Z.tar.gz (sha256=f87b3ceb300674577206a57254b5637274fd500f50f55c9ccf4432a675d9cf7b) |
| 1312 | done | codex-max | QA → SARIF output (out/qa-report.sarif) |
src/iftypeset/qa.py, src/iftypeset/cli.py, app/CLI_SPEC.md, tests/test_qa.py |
Added qa --format sarif with SARIF mapping for incidents + gate failures; tests updated. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T09-44-43Z.tar.gz (sha256=462c75d2603d78ee51700f0b6b2e389b98a635f9e72e867cd2dd8ed92f1b78d6) |
| 1313 | done | codex-max | Add iftypeset doctor (env + determinism report) |
src/iftypeset/cli.py, src/iftypeset/reporting.py, docs/* |
Added doctor command + reports, docs, and integration test. | out/checkpoints/iftypeset_checkpoint_2026-01-04T09-48-23Z.tar.gz (sha256=f5436a975ae2902bf322f78b876230cef20d2e2f434446be0c057a1a485661d7) |
| 1314 | done | codex-max | Add iftypeset bundle (portable review pack) |
src/iftypeset/cli.py, src/iftypeset/reporting.py, scripts/*, docs/* |
Added bundle command + manifest + tests; updated docs. | out/checkpoints/iftypeset_checkpoint_2026-01-04T09-53-39Z.tar.gz (sha256=5ee682bc24e427261670d663e8e3fd1f6f6e7fa7e08c97802bbabfe21a30a55e) |
| 1315 | done | codex-max | PDF bbox/overflow detection via Poppler XML | src/iftypeset/qa.py, tests/test_qa.py |
Added pdftohtml -xml parsing for bbox overflow + incidents/tests/docs. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T10-06-12Z.tar.gz (sha256=26ef3f54ad8978b2e60d3bdb23b6299e6b2ba526503523326d1bf399c1c78fc5) |
| 1316 | done | codex-max | Multi-doc runs + aggregate report index | src/iftypeset/cli.py, src/iftypeset/reporting.py, tests/test_integration.py |
Added multi-doc run with per-doc outputs + top-level run index. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T10-01-21Z.tar.gz (sha256=52466c2ca8fb530c5dbccf822afa1425f69c87a2a5015d075e3f3246c9936be1) |
| 1317 | done | codex-max | Docker pinned environment (Chromium + Poppler + fonts) | Dockerfile, docs/*, .forgejo/workflows/* |
Added Dockerfile, .dockerignore, docs, and manual Docker CI workflow. | out/checkpoints/iftypeset_checkpoint_2026-01-04T10-09-36Z.tar.gz (sha256=c96375484ea01d930a02068a929d6d37ba71d2519137ad05f82cbb850cc0f1f1) |
| 1318 | done | codex-mini | CLI PDF engine selection + require-pdf flag | src/iftypeset/cli.py, src/iftypeset/rendering.py, src/iftypeset/config.py, app/CLI_SPEC.md, README.md, STATUS.md, tests/test_integration.py |
Added --engine and --require-pdf flags; run treats PDF failure as warning unless --require-pdf; config supports engine + require_pdf; docs/tests updated. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T14-41-49Z.tar.gz (sha256=728a877114c4263450946a7550a54d655c4d5db503ec14a352f84b9369c5454d) |
| 1319 | done | codex-mini | Editorial automation heuristics v1 | src/iftypeset/linting.py, spec/rules/editorial/*, tests/test_linting.py |
Implement safe editorial lints (ALL CAPS headings, draft markers, acronym-first-use hints) + tests; keep the rest manual. | Lint rule added for ALL CAPS headings; rule set to lint; tests updated; validate-spec run. Pytest not available in env. |
| 1320 | done | codex-mini | Citations + i18n lint expansion | src/iftypeset/linting.py, spec/rules/citations/*, spec/rules/i18n/*, tests/test_linting.py, spec/house/* |
Added author-date checks (year-only parenthetical + ref list year required), i18n mixed decimal/quote heuristics; new house pointers + rule batches; tests updated; validate-spec with indexes run. | |
| 1321 | done | codex-max | Typeset/CSS profile depth for tables/figures/code | spec/profiles/*.yaml, src/iftypeset/rendering.py, docs/06-project-overview.md |
Added figure handling + CSS tokens; tightened code/table tokens (wrap, layout, padding); profiles updated and documented. | out/checkpoints/iftypeset_checkpoint_2026-01-04T16-50-45Z.tar.gz (sha256=712c0c07d39443a985e22b2bd44898b9460f2c705ae129ad180bcc436bd15661) |
| 1322 | done | codex-max | Rule coverage expansion Turn 1 (tables/figures/front/back/links) | spec/rules/tables/*, spec/rules/figures/*, spec/rules/frontmatter/*, spec/rules/backmatter/*, spec/rules/links/* |
Added v1_tables_003, v1_figures_004, v1_frontmatter_004, v1_backmatter_004, v1_links_004 (+120); validate/report run. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T15-36-58Z.tar.gz (sha256=c6c1e991ffb7f94a18a7a4c6e4e670b6177e4ba14050b118a1d6cc26c25eee83) |
| 1323 | done | codex-max | Rule coverage expansion Turn 2 (typography/layout/links remainder) | spec/rules/typography/*, spec/rules/layout/*, spec/rules/links/* |
Added v1_layout_005, v1_links_005, v1_typography_003 (+170); total_rules=844. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T16-03-52Z.tar.gz (sha256=ab7164561a811802f59880db38cb6b99e31c0a849b55a5f6970d4591a89fb89a) |
| 1324 | done | codex-max | Rule coverage expansion Turn 3 (punctuation/numbers/headings/abbreviations/accessibility) | spec/rules/punctuation/*, spec/rules/numbers/*, spec/rules/headings/*, spec/rules/abbreviations/*, spec/rules/accessibility/* |
Added v1_punctuation_003, v1_numbers_003, v1_headings_003, v1_abbreviations_004, v1_accessibility_004 (+104); totals: punctuation 67, numbers 91, headings 57, abbreviations 47, accessibility 40. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T16-27-47Z.tar.gz (sha256=82db561f98ac898097893018151868114e12fe96b6e8cf27a8cbe7408413fd84) |
| 1325 | done | codex-mini | CLI flag matrix + doc-only parity audit | docs/16-cli-flags.md |
Added CLI flag matrix + defaults/exit codes + config precedence; doc-only parity audit. | |
| 1326 | done | codex-max | Rule coverage expansion Turn 4 (code/editorial) | spec/rules/code/*, spec/rules/editorial/*, spec/house/HOUSE_CODE_POINTERS.md |
Added v1_code_004, v1_editorial_002 (+38) and HOUSE_CODE_POINTERS.md; validate/report/CI run. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T17-05-45Z.tar.gz (sha256=ca932099b7ea535ee37881c8fbd391691c373a06266b3fb7e330c1cb3da705bb) |
| 1327 | done | codex-max | Rule coverage expansion Turn 5 (accessibility+i18n+front/back+figures/tables+code) | spec/rules/accessibility/*, spec/rules/i18n/*, spec/rules/frontmatter/*, spec/rules/backmatter/*, spec/rules/figures/*, spec/rules/tables/*, spec/rules/code/*, spec/house/* |
Added new HOUSE pointer docs and batches: v1_accessibility_005, v1_i18n_005, v1_frontmatter_005, v1_backmatter_005, v1_figures_005, v1_tables_004, v1_code_005 (+43); validate/report/CI run. |
out/checkpoints/iftypeset_checkpoint_2026-01-04T17-36-14Z.tar.gz (sha256=6051e382c0e09f1e9d5737110d82325cbc5a1e6b6afcf91e4990c8d9be172fe3) |
| 1328 | done | codex-max | Turn 6: lint expansion + layout/typography + QA tighten + fixtures/tests | src/iftypeset/linting.py, spec/rules/*, spec/quality_gates.yaml, fixtures/*, tests/*, spec/house/* |
Add new lint checks for citations/links, new house rules for layout/typography, tighten QA thresholds, add fixtures/tests. | out/checkpoints/iftypeset_checkpoint_2026-01-04T18-31-45Z.tar.gz (sha256=02f72e150f349bd3d22363654acc4c0fe0d3302ab566eeca84ff3632a70546f5) |
| 1329 | done | codex-max | Promote citations manual rules to lint/postrender (phase 1) | src/iftypeset/linting.py, spec/rules/citations/*, tests/test_linting.py, fixtures/* |
Convert safe manual rules to deterministic lint checks; add fixtures/tests. | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-00-46Z.tar.gz (sha256=7a4b9a03e889b91cc59a247f76fa3e23471f4ead0db4d7424091e04d46c13b95) |
| 1330 | done | codex-max | Promote layout+typography manual rules to lint/postrender (phase 1) | src/iftypeset/linting.py, src/iftypeset/qa.py, spec/rules/layout/*, spec/rules/typography/*, tests/*, fixtures/* |
Add safe heuristics (HTML+PDF) and tighten tests. | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-23-16Z.tar.gz (sha256=1da2bd36168525359ee559c3ef550994a5080b22a8c4cd76e3c0d2ccb822b26c) |
| 1331 | done | codex-max | Promote links manual rules to lint (phase 1) | src/iftypeset/linting.py, spec/rules/links/*, tests/test_linting.py, fixtures/* |
Add deterministic URL lint checks; add fixtures/tests. | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-23-16Z.tar.gz (sha256=1da2bd36168525359ee559c3ef550994a5080b22a8c4cd76e3c0d2ccb822b26c) |
| 1332 | done | codex-max | Promote accessibility manual rules to lint/postrender (phase 1) | src/iftypeset/linting.py, src/iftypeset/qa.py, spec/rules/accessibility/*, tests/*, fixtures/* |
Add safe a11y lints; add fixtures/tests. | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-23-16Z.tar.gz (sha256=1da2bd36168525359ee559c3ef550994a5080b22a8c4cd76e3c0d2ccb822b26c) |
| 1333 | done | codex-max | PDF QA: detect caption separation (figure/table) | src/iftypeset/qa.py, spec/rules/layout/*, tests/test_qa.py, fixtures/* |
Add PDF heuristic incidents for captions separated from figures/tables (pdftotext). | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-36-17Z.tar.gz (sha256=6196acb5068176bc0f66b270644e3fed578150e3641834659a27ae04153bbd1b) |
| 1334 | done | codex-max | PDF QA: list break + lonely list item heuristics | src/iftypeset/qa.py, spec/rules/layout/*, tests/test_qa.py, fixtures/* |
Add PDF heuristics for list intro separated from list, and single-item breaks. | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-36-17Z.tar.gz (sha256=6196acb5068176bc0f66b270644e3fed578150e3641834659a27ae04153bbd1b) |
| 1335 | done | codex-max | PDF QA: heading proximity (heading followed by heading / too little content) | src/iftypeset/qa.py, spec/rules/layout/*, tests/test_qa.py, fixtures/* |
Expand heading proximity checks using PDF text extraction (beyond stranded headings). | out/checkpoints/iftypeset_checkpoint_2026-01-04T19-36-17Z.tar.gz (sha256=6196acb5068176bc0f66b270644e3fed578150e3641834659a27ae04153bbd1b) |
| 1336 | done | codex-max | Links auto phase 2: filetype labels + partial-word + html fallback + overlong labels | src/iftypeset/linting.py, spec/rules/links/*, tests/test_linting.py, fixtures/* |
Add deterministic link text checks and auto lint rules. | out/checkpoints/iftypeset_checkpoint_2026-01-04T21-30-06Z.tar.gz (sha256=7fca95255ce5623b3fc6dd67863de466b2039dab7d16af7c474653bc66beed90) |
| 1337 | done | codex-cli (gpt-5.2-high) | Coverage roadmap + coverage map scaffold | docs/19-coverage-roadmap.md, spec/coverage/**, docs/13-task-board.md |
Add coverage roadmap, create coverage map files, and document section-level tracking. | out/checkpoints/iftypeset_checkpoint_2026-01-07T03-01-18Z.tar.gz (sha256=421ba9fd06c73fffd126fa103e662c2119409d4bc0d75322fe9cd7120246a45b) |
| 1338 | done | CMOS punctuation batch 1 (150–250 rules) | spec/rules/punctuation/**, spec/indexes/**, spec/coverage/** |
Completed sections 6.17–6.77 plus prior batches; total 211 rules, coverage refreshed; CI + checkpoint (supersedes earlier checkpoint). | out/checkpoints/iftypeset_checkpoint_2026-01-07T13-21-20Z.tar.gz (sha256=c36701390a0e1e59344e57c770337bcb2a55a71a4e6ecb16a1c8c42417ed2b79) | |
| 1339 | done | CMOS numbers batch 1 (150–250 rules) | spec/rules/numbers/**, spec/indexes/**, spec/coverage/** |
Added v1_numbers_004 (152 rules) covering 9.1–9.36 plus coverage updates; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T13-28-12Z.tar.gz (sha256=f79b65f7454c350fe2a669e24a185397e3e8ef56954d4d6fa29b276fb5a8050e) | |
| 1340 | done | CMOS citations batch 1 (150–250 rules) | spec/rules/citations/**, spec/indexes/**, spec/coverage/** |
Added v1_citations_006 (151 rules) covering 13.1–13.29, updated CMOS coverage map; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T15-05-23Z.tar.gz (sha256=bb048267c831e00a7004c647b2cadb28a4211bade86920dda3658b421de948cc) | |
| 1341 | done | BRING typography + layout batch 1 (150–250 rules) | spec/rules/typography/**, spec/rules/layout/**, spec/indexes/**, spec/coverage/** |
Generated BRING coverage map for 213 existing typography/layout rules (57 sections); indexes + CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T13-34-42Z.tar.gz (sha256=ed49ff31a6f3aa04b8163c8eb2ef793a7374eb292a6f63182229e73aebfa3894) | |
| 1342 | done | BRING headings + lists batch 1 (150–250 rules) | spec/rules/headings/**, spec/indexes/**, spec/coverage/** |
Added BRING headings sections to coverage map (now 62 sections); indexes + CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T13-37-21Z.tar.gz (sha256=650e5c1cb14e2a7cf101606ed33b0c779351a9a777f944bafd05b5a5e49c21c7) | |
| 1343 | done | Tables + figures batch 1 (CMOS+BRING) | spec/rules/tables/**, spec/rules/figures/**, spec/indexes/**, spec/coverage/** |
Mapped 107 existing CMOS/BRING table+figure rules into coverage; indexes + CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T13-39-56Z.tar.gz (sha256=d06a4325110722325a5c1664b9aab658ae7daa873e3a3580e78e79a9d4c787ea) | |
| 1344 | done | Links + code batch 1 (CMOS+BRING) | spec/rules/links/**, spec/rules/code/**, spec/indexes/**, spec/coverage/** |
Added 12 CMOS/BRING rules (links + code) and merged into coverage; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T13-45-22Z.tar.gz (sha256=50ca8dfc35d3a2a37a1405f9d4079a865beb8d5301815190876fc12472d03414) | |
| 1345 | done | Coverage summary generator + status notes | spec/coverage/**, tools/**, docs/09-project-status.md |
Added tools/coverage_summary.py, wrote JSON/MD outputs, updated status doc with coverage metrics; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-07T13-48-30Z.tar.gz (sha256=acdfb749162d6cc68015252fcc5fb97e761d86b49a1a37d0feb0c069145db743) | |
| 1346 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Enforcement uplift: convert top manual rules | src/iftypeset/linting.py, src/iftypeset/qa.py, spec/rules/**, tests/** |
Manual checklist now filters to status=active; deprecated duplicate manual link rules already covered by lint; tests + CI. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T02-32-29Z.tar.gz (sha256=f67b7e66bac77635c20eb67a19d4cfd19c67ba81e598aae3f4b3ac552ec8e5e1) |
| 1347 | done | CMOS citations coverage map expansion (13.30–13.54) | spec/coverage/**, spec/indexes/**, docs/CHECKPOINTS.md, docs/SESSION_STATE.md |
Added uncovered stubs with pointers for sections 13.30–13.54; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T16-16-51Z.tar.gz (sha256=1bd425530e38b0c184036284c599f3848005865655cd82529e8426753824bbfc) | |
| 1348 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | CMOS citations batch 2 (13.30–13.54) | spec/rules/citations/**, spec/indexes/**, spec/coverage/** |
Paraphrase rules for shortened citations + note commentary sections; update coverage; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T16-58-28Z.tar.gz (sha256=83465c0cf67f41faceedd32dbbe6efbbd4d56f39bc719c088e8457c376da7437) |
| 1349 | done | CMOS citations coverage map expansion (13.55–13.73) | spec/coverage/**, spec/indexes/**, docs/CHECKPOINTS.md, docs/SESSION_STATE.md |
Added uncovered stubs with pointers for sections 13.55–13.73; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T16-18-36Z.tar.gz (sha256=d92bd833941d14e8c3e1a7ad08e474d324c1f84b30122e82f2226e988b6d0957) | |
| 1350 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | CMOS citations batch 3 (13.55–13.73) | spec/rules/citations/**, spec/indexes/**, spec/coverage/cmos18_sections.json |
Added missing section rules + mapped existing rules into coverage; CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-08T03-30-39Z.tar.gz (sha256=1981644b9360c07f438427f8bfc619cacb12ffc1d4b2076ceec4791f606065b8) |
| 1351 | done | CMOS citations coverage map expansion (13.74–13.90) | spec/coverage/**, spec/indexes/**, docs/CHECKPOINTS.md, docs/SESSION_STATE.md |
Added uncovered stubs for sections 13.74–13.89; 13.90 heading not found in OCR (update: §13.90 located later; coverage entry added in task 1366). CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T16-21-51Z.tar.gz (sha256=ae332081fec080e14467a820461818cea1a7d8bc826a6b1efaa4c3589bd8c75c) | |
| 1352 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | CMOS citations batch 4 (13.74–13.90) | spec/rules/citations/**, spec/indexes/**, spec/coverage/cmos18_sections.json |
Added missing author-name/bibliography rules and mapped 13.74–13.89; 13.90 heading not found in OCR (update: coverage entry added in task 1366). CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-08T03-34-08Z.tar.gz (sha256=a98615e17b4a44ffc7e3a255bf12cdd05f4f696d2f7a7ab4d493cd8532bc71e2) |
| 1353 | done | CMOS citations coverage map expansion (13.92–13.108) | spec/coverage/**, spec/indexes/**, docs/CHECKPOINTS.md, docs/SESSION_STATE.md |
Added uncovered stubs for sections 13.92–13.108; 13.91/13.94/13.99/13.107 headings not found in OCR (update: §13.91/§13.94/§13.107 located later; coverage entries added in task 1366; §13.99 still not found). CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T16-23-38Z.tar.gz (sha256=38c1ee8a4dd1aa04acce09a5467a1b83e03a0e5d2a11fb901936cf4431360936) | |
| 1354 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | CMOS citations batch 5 (13.92–13.108) | spec/rules/citations/**, spec/indexes/**, spec/coverage/cmos18_sections.json |
Added bibliography-format rules and mapped coverage for available sections; 13.94/13.99/13.107 headings not found in OCR (update: §13.94/§13.107 located later; coverage entries added in task 1366; §13.99 still not found). CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-08T03-37-40Z.tar.gz (sha256=b17b44b48a47ac0643b241174cde7a6653b87ff25cda00b82548ff99780f02e1) |
| 1355 | done | CMOS citations coverage map expansion (13.111–13.128) | spec/coverage/**, spec/indexes/**, docs/CHECKPOINTS.md, docs/SESSION_STATE.md |
Added uncovered stubs for sections 13.111–13.128; 13.110 heading not found in OCR (update: §13.110 located later; coverage entry added in task 1366). CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-07T16-25-43Z.tar.gz (sha256=7f61613b84b51f111bc427def728eab42a0e250b4fce3a3281f0b03f17737045) | |
| 1356 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | CMOS citations batch 6 (13.111–13.128) | spec/rules/citations/**, spec/indexes/**, spec/coverage/cmos18_sections.json |
Added missing author-date rules and mapped 13.111–13.128; 13.110 heading not found in OCR (update: coverage entry added in task 1366). CI + checkpoint. | out/checkpoints/iftypeset_checkpoint_2026-01-08T03-42-42Z.tar.gz (sha256=c21fee9774f8fdd895a44a2f4de136a5f95d805bae26e18c94ca50c6833c11f0) |
| 1357 | done | assistant (api gpt-5.2) | Session ID hygiene in iftypeset/AGENTS.md |
AGENTS.md, docs/13-task-board.md |
Added session-id hygiene section to iftypeset/AGENTS.md (and kept the board claim note); no checkpoint (avoid colliding with active code task). |
|
| 1358 | done | Typography baseline: default 12pt body + add brand colors + table striping (fix “tiny text” reports) | src/iftypeset/css_gen.py, spec/profiles/dense_tech.yaml, spec/profiles/memo.yaml, docs/CHECKPOINTS.md, docs/SESSION_STATE.md, AGENTS.md, docs/13-task-board.md |
Set CSS generator default body size to 12pt; updated dense_tech + memo to 12pt baseline + brand colors + table striping; added header shading. Verified by rerendering flaneur report (dense_tech) and spot-checking PNG pre-renders; ran ./scripts/ci.sh. |
out/checkpoints/iftypeset_checkpoint_2026-01-07T17-34-10Z.tar.gz (sha256=c05b4ae504f5bf72795ed737f8f49e19b61906365f99a33d3ac2d58fe623c9e8) | |
| 1359 | done | Inline citations: make [Sxx] clickable and anchor to sources section |
src/iftypeset/rendering.py, docs/CHECKPOINTS.md, docs/SESSION_STATE.md, docs/13-task-board.md |
Fixed citation token parsing and rendered [S01]-style citations as internal links (href=\"#cite-s01\"); source lines starting with [Sxx] get matching id=\"cite-sxx\" anchors. Verified via render-html grep + ./scripts/ci.sh. |
out/checkpoints/iftypeset_checkpoint_2026-01-07T20-16-27Z.tar.gz (sha256=e185bf2251b7ce6a275400d8a73a1a560166b3ad48c947f66e664fa587d14dfb) | |
| 1360 | done | Add audit_report profile + QA gates for evidence-heavy reports (reduce false fails on long lines/tables) |
spec/profiles/audit_report.yaml, spec/quality_gates.yaml, docs/CHECKPOINTS.md, docs/SESSION_STATE.md, docs/13-task-board.md |
Added audit_report (12pt baseline, branded/striped tables, tolerant overfull measurement) + QA gates; verified via iftypeset run --profile audit_report on the flaneur report and ./scripts/ci.sh. |
out/checkpoints/iftypeset_checkpoint_2026-01-07T20-30-14Z.tar.gz (sha256=444a88b90bba249221931a45e07685328758bdc8db8a20b103ab494ff46202a6) | |
| 1361 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Milestone B: BRING completion pass (partial → covered/out_of_scope) | spec/coverage/bring_sections.json, spec/indexes/** |
Marked all BRING sections as covered; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T03-53-19Z.tar.gz (sha256=6f86b0c6d00fd44c1be67dad1ce5b3dbc0624254a1a93cfe684d7d68d63cb060) |
| 1362 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Milestone B: CMOS ch6 completion pass (punctuation sections) | spec/coverage/cmos18_sections.json, spec/indexes/** |
Marked all tracked CMOS chapter 6 sections as covered; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T03-55-03Z.tar.gz (sha256=1c36b33ade3802dfb16a5fb72ce8e51c9ed7497f86c0ef2b18603d5bcd2e524e) |
| 1363 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Milestone B: CMOS ch9 completion pass (numbers sections) | spec/coverage/cmos18_sections.json, spec/indexes/** |
Marked all tracked CMOS chapter 9 sections as covered; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T03-56-40Z.tar.gz (sha256=f39d4c1668222d7b12b3ea2e6e3d773ccfedda2b1b1a5e409f715a875e831309) |
| 1364 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Milestone B: CMOS ch13 completion pass (citations sections) | spec/coverage/cmos18_sections.json, spec/indexes/** |
Marked all tracked CMOS chapter 13 sections as covered; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T03-59-57Z.tar.gz (sha256=dd5c3236276eff74443e04e43f10844dcb21402e45e6c584d67cb6cf6fb25f79) |
| 1365 | done | codex-cli (gpt-5) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Milestone B: CMOS ch1/ch3/ch5/ch15 completion pass | spec/coverage/cmos18_sections.json, spec/indexes/** |
Marked all tracked CMOS chapter 1/3/5/15 sections as covered; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T03-58-16Z.tar.gz (sha256=a2626b2b59d158847a0ccd19ff177686e60166132e32a040ac7ca1568b7ddb4e) |
| 1366 | done | assistant (api gpt-5.2) | CMOS ch13: add missing section entries (OCR present) | spec/coverage/cmos18_sections.json, docs/13-task-board.md, spec/indexes/**, docs/CHECKPOINTS.md, docs/SESSION_STATE.md |
Added coverage entries for §13.90/§13.91/§13.94/§13.107/§13.110 (status=uncovered) and updated stale “not found in OCR” notes; corrected §13.109 pointer; note: §13.90 pointer + §13.99 were corrected/added in task 1367. CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T04-57-18Z.tar.gz (sha256=4dd9699bd9083677e9f2e688d1b313967a94ed73a81322e78a335d8a6c50753a) |
| 1367 | done | assistant (api gpt-5.2) | CMOS ch13: close uncovered gaps (13.90/13.91/13.94/13.99/13.107/13.110) | spec/rules/citations/**, spec/coverage/cmos18_sections.json, spec/indexes/** |
Added v1_citations_012 (one paraphrased rule per missing section), fixed §13.90/§13.110 pointer drift, added missing §13.99 coverage entry, and wired rule_ids (status→partial). CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T06-22-01Z.tar.gz (sha256=f3fba438d884adfb1523a0ff4e87b8ffc0e460b6992255c0543b63b4fa998572) |
| 1368 | done | assistant (api gpt-5.2) | Coverage audit: OCR heading diff + spot-check recipe | tools/**, docs/19-coverage-roadmap.md, docs/13-task-board.md |
Added tools/coverage_ocr_audit.py (numbers-only OCR heading diff + pointer sanity checks) and documented a repeatable spot-check recipe in docs/19-coverage-roadmap.md. CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T06-22-01Z.tar.gz (sha256=f3fba438d884adfb1523a0ff4e87b8ffc0e460b6992255c0543b63b4fa998572) |
| 1369 | done | assistant (api gpt-5.2) [sid: unavailable] | Flaneur PDF: widen margins + eliminate Chromium CLI header/footer (Playwright-only) | spec/profiles/audit_report.yaml, src/iftypeset/rendering.py, docs/**, Dockerfile |
Increased audit_report margins (18mm → 27mm); removed Chromium CLI PDF rendering (it injects date/path headers/footers on Chrome 143); Playwright PDF uses prefer_css_page_size + scale=1; list balancing now uses Playwright; docs/Docker updated. CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T09-39-02Z.tar.gz (sha256=2b7f1704eb57758e1252821bd3367b64f1705a2db254f3b0f58c44a2e8b30504) |
| 1370 | done | assistant (api gpt-5.2) [sid: unavailable] | Rendering contract: ban Chromium engine + pin Python 3.12 for Playwright | src/iftypeset/cli.py, src/iftypeset/rendering.py, Dockerfile, pyproject.toml, requirements.txt, docs/**, app/CLI_SPEC.md |
Chromium engine is banned at CLI parse-time; --engine auto routes to Playwright; CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T13-39-43Z.tar.gz (sha256=f0df3101b956213bb4303062aecdea80a88424c062b43f78a14ba125416ebe58) |
| 1371 | done | assistant (api gpt-5.2) [sid: 019b9959-198d-7f22-b5f6-e7b598c8392b] | Fonts contract: prevent silent fallbacks + support corp font dirs | src/iftypeset/{cli.py,rendering.py}, spec/profiles/audit_report.yaml, docs/**, app/CLI_SPEC.md |
Enforced a fonts contract (profile fonts.require_primary / --strict-fonts) and added --font-dir so corporate fonts can be supplied via mounted dirs; render-log.json now records font policy + embedded fonts. CI + checkpoint. |
out/checkpoints/iftypeset_checkpoint_2026-01-08T17-55-08Z.tar.gz (sha256=23350894a965367138202c23fbe073400a38b5b936ceff75ae1faa80e6771552) |