Skip to content

docs: plan the csv, json, markdown, rtf, xml and iwork modules - #674

Merged
andiwand merged 2 commits into
mainfrom
docs/module-plans
Aug 9, 2026
Merged

docs: plan the csv, json, markdown, rtf, xml and iwork modules#674
andiwand merged 2 commits into
mainfrom
docs/module-plans

Conversation

@andiwand

@andiwand andiwand commented Aug 9, 2026

Copy link
Copy Markdown
Member

🤖 Generated with Claude Code

One PLAN.md per module, docs only — no code, no build changes.

Each is written before its stage 1 and follows the same shape: what the repo
does today, the target, the decisions taken up front and why, the
stages in order, and what is deferred by decision.

Plan Module exists? Gist
csv/PLAN.md yes encoding, the dialect probe, options, the sheet document, value types, large files
json/PLAN.md yes parse decoded text, bounded detection, the tree view
markdown/PLAN.md no blocks, inlines, GFM, images and frontmatter, the two model gaps
rtf/PLAN.md no tokenizer shaped like pdf::ObjectParser, character formatting, paragraphs, tables, images
xml/PLAN.md no why not leave it to the browser, folding, size, the archive seam
iwork/PLAN.md no Pages/Numbers/Keynote — the iWork 13+ IWA container, then text, styles, drawables, tables

Two things worth calling out for review:

  • rtf and iwork both argue explicitly for leniency against the root
    AGENTS.md fail-fast rule, on the grounds that the rule says throw where the
    spec dictates what to expect
    — RTF's spec dictates the opposite for unknown
    control words, and iWork has no spec at all. Each enumerates what does still
    throw.
  • iwork commits to no new conan dependencies: a hand-rolled Snappy block
    decoder and a protobuf wire reader, because Apple's .iwa framing is not
    stock Snappy framing and there are no .proto schemas to generate from. Its
    byte-layout claims are verified against test/data/input/odr-public/pages/empty.pages,
    which has been in the data repo since July 2025 without anything exercising it.

One PLAN.md per module, each written before its stage 1: what the repo does
today, what the target shape is, the decisions taken up front and why, the
stages in order, and what is deferred by decision.

csv and json describe modules that already exist; markdown, rtf, xml and iwork
describe ones that do not. Keep them honest as stages land.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ipdjdyMJ6LMVsfAnShvbm

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 59f7652211

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment thread src/odr/internal/rtf/PLAN.md Outdated
Comment thread src/odr/internal/rtf/PLAN.md Outdated
Two errors the review caught, both of which would have been written into the
tokenizer as specified:

- the space terminating a control word's numeric parameter is a delimiter and
  is consumed, so `\fs24 Text` starts at `T` and `\bin4 `'s payload starts
  after the space. The plan said no terminator was consumed, which injects a
  space into ordinary formatted text and shifts every binary read by one byte.
- `\uN` is a UTF-16 code unit, not a code point. Anything above the BMP arrives
  as a surrogate pair of two `\uN`; appending each half turns an emoji into two
  replacement characters.

Test list extended to cover both.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ipdjdyMJ6LMVsfAnShvbm
@andiwand
andiwand merged commit 1819b65 into main Aug 9, 2026
36 checks passed
@andiwand
andiwand deleted the docs/module-plans branch August 9, 2026 11:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant