The audit stops reporting gaps that are not gaps, and the oracle's skeleton reducer becomes a public module.
The audit reports only real gaps
Five findings, each one a construct the audit called unsupported that orgo handles exactly as org does. On cleberg.net's 180-file corpus the report goes from 99.9% coverage with 8 out-of-scope uses and one ??? to 100.0% coverage, 0 out-of-scope, and no ???.
- Entities are supported (#30).
\alpha renders as α in orgo exactly as in Emacs, from a table generated out of org's own org-entities. Every use was counted out-of-scope anyway, and the org-support guide contradicted itself about it.
- Only entity names org knows count (#26). A Windows path (
C:\Users\me) and a namespaced identifier (Tumblr\API\Client) are not entity references.
#+TBLFM: is in scope (#27). Org's HTML exporter does not recalculate formulas either, so both emit the cells as written.
- Special blocks are supported (#28). A block name with no dedicated handling renders as a div carrying that name and holding parsed org, which is what org's exporter emits.
VERSE and COMMENT were also mislabelled and now have their own names.
- A construct named inside verbatim is not a use of it (#1). The entity check skipped
=verbatim= and ~code~ spans; the other inline checks did not, so a page documenting org syntax reported constructs it does not use.
??? no longer marks working keywords
??? claimed "a name the implementation does not recognize at all" and marked LEDE, which the shipped docs template reads as page.keywords.lede (#2). Reaching templates as page.keywords.<name> is the designed behaviour, so no keyword name is a blind spot. The distinction between dedicated handling and pass-through is still reported, with an honest marker:
KEYWORDS
DESCRIPTION 14 14 guide/01-cli.org:2
— LEDE 14 14 guide/01-cli.org:3
TITLE 14 14 guide/01-cli.org:1
??? is now reserved for drawer and link-scheme names, where an unlisted name has no such fallback.
Public skeleton module
The HTML→semantic-skeleton reducer moves out of tests/oracle.rs into src/skeleton.rs, exposing skeleton() and decode_entities(). An examples/skeleton binary renders a fixture to HTML or skeleton — the reference output the org-conformance corpus is built from. tests/conformance.rs verifies orgo still matches the corpus goldens (opt-in via ORG_CONFORMANCE_DIR), so the generated corpus cannot drift from the renderer unnoticed.
Breaking
Audit::is_known(kind, name) -> bool is replaced by Audit::marker(kind, name) -> &'static str, which returns the report's marker directly.
- The audit report's census marker column is a consistent four columns wide.
??? used to be one wider than the blank it replaced, so flagged rows sat a character right of the rest.
Docs
Ten source comments cited a README section that no longer exists; they now point at docs/guide/05-org-support.org (#29). Two stale claims in parser.rs's header went with them.
cargo install orgo