Skip to content

docs(spec-coverage): move the rows the 2026-10-27 main run proves, and say what measured them (#140, #147, #148, #133, #127) - #398

Merged
DrunkOnJava merged 2 commits into
mainfrom
docs/spec-coverage-refresh
Oct 28, 2026
Merged

DrunkOnJava merged 2 commits into
mainfrom
docs/spec-coverage-refresh

Conversation

@DrunkOnJava

@DrunkOnJava DrunkOnJava commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Summary

Brings the stale rows of docs/data/spec-coverage.tsv (and the page generated from it) up to what main measures: seven rows leave partial for closes, §22 AcDb:Template leaves missing for partial, §9 keeps closes with its evidence and a live tracker, and the "Last measured" line moves to the current main run.

Spec reference

ODA v5.4.1 sections §9, §22, §20.4.3, §20.4.4, §20.4.5, §20.4.46, §20.4.60, §20.4.68 and §20.4.75. Refs #127, #133, #140, #147, #148 (all stay open: no row here becomes complete).

Evidence for every state that moves is CI run 40532346172, the newest green ci.yml run on main (e7c53e1), artifact corpus-measurement; all its jobs passed, Corpus (public DWG) included.

Test plan

  • python3 tools/ci/spec_coverage.py --write, then --check: spec-coverage: 139 rows, 135 required sections, 0 problems.
  • python3 tools/oracle/spec_notes.py <oracle.log of the run> docs/data/spec-coverage.tsv run on a copy of the TSV changes nothing: every oracle note already matches the run's oracle.log (52 sections annotated, no cell differs).
  • python3 tools/maintainer/train/arch.py check: clean.
  • Shown on real files, no new unit tests. What the run says, from corpus-results.json: 52 drawings, 15,541 decoded, 533 skipped, 0 errored, and the per-kind errors map is empty on every drawing. None of TEXT, ATTRIB, ATTDEF, MTEXT, VIEW, DIMSTYLE or HATCH appears among the 28 skipped kinds. Every file of corpus-logs/coverage-*.txt reports err 0.

State changes (closes here means what the page defines: the decoder ends on its exact boundary on every corpus record of the type; no row is complete because R13 has no AutoCAD-written drawing, #345):

Section Was Now What the row said, and what proves the move
§20.4.3 TEXT, §20.4.4 ATTRIB, §20.4.5 ATTDEF partial closes The note quoted 29 TEXT records each on ACadSharp's R14, R2000 and R2004 saves and 4 on export_sample.dwg (R2018) as erroring (#226). #258 read the TEXT, ATTRIB and ATTDEF branches as §20.4.3 to §20.4.5 print them (118 erroring records close); the run has errored 0.
§20.4.46 MTEXT partial closes The note quoted 36 records each on the R14 and R2004 saves as erroring. #261 reads the R2000+ line spacing and the R2004+ background block; the 72 records close (the CHANGELOG records the same); the run has errored 0.
§20.4.60 VIEW partial closes The pre-R2007 records on ACadSharp's R14, R2000 and R2004 saves errored. #263 reads the section's pre-R2007 record and #284 the view mode (group 71); the run has errored 0 and the oracle's 6 records have 120 values equal, 0 different (unchanged).
§20.4.68 DIMSTYLE partial closes The note quoted 3 records each on the R2007 and R2010 saves as erroring. #293 reads the BL reactor count of the R2007+ entry prefix and they close; #297 had decoded the 20 R14 records; the run has errored 0.
§20.4.75 HATCH partial closes The note said the 8 R14 records are never routed. #264 routes the R14 class name (all 8 close, equal to the R2000 saves); HATCH is absent from the run's skip histogram and errors. The oracle does not score HATCH yet (48 paired records unscored); the row says so.
§22 AcDb:Template missing partial dxf_header::measurement reads $MEASUREMENT from it and dwg-to-dxf writes it (#320). Measured departure recorded in the source: from R2007 the description length counts UTF-16 units where §22 counts bytes. probe_dxf_header over the 42 drawings with an export: 9,583 variables written, 9,410 agree, 173 hold a stated relation, 0 disagree, 0 extra (dxf-header-probe.log). Not exposed: the description text and the other fields. Not measured: R14 and R2000, whose template is §3.2.4's and is not read.

Not moved, on purpose:

Page text: the "Last measured" line now reads 2026-10-27, main e7c53e1, with the run linked, and says the oracle notes match the run's oracle.log while a note's other numbers cite the PR or run that measured them. The paragraph that said closes came from a local 19-file corpus re-measured later "by the 0.2.0 measurement work" now says it comes from the Corpus CI job on the 52 public drawings (#225).

Not changed, though also behind: docs/release-1.0-criteria.md (its R3 row quotes 67 closes and 31 partial, and R8 quotes 308 erroring records; its "Last measured" line is 2026-10-21). A status there changes only in the PR that links the new evidence, so that is a separate change.

Source-provenance declaration

By submitting this PR I certify that my contribution does not incorporate executable code from any source whose license is incompatible with Apache-2.0. Specifically:

  • No Autodesk DWG SDK source (RealDWG, ObjectARX, ObjectDBX) or NDA-protected Autodesk documentation was consulted or imported.
  • No Open Design Alliance Teigha / Drawings SDK source was consulted or imported. The ODA's public Open Design Specification for .dwg files PDF is explicitly allowed (see CLEANROOM.md).
  • No GPL-licensed DWG implementation source (LibreDWG, etc.) was consulted or imported. This matters because dwg-rs is Apache-2.0 and must remain compatible.

My contribution is based on:

  • The ODA's freely-redistributable Open Design Specification for .dwg files (v5.4.1);
  • Public reverse-engineering notes, research papers, or blog posts cited inline;
  • Reading algorithm-description comments (not executable code) in permissively-licensed projects (MIT / Apache / BSD) to resolve spec ambiguities — disclose any such reading in this PR body so it can be recorded in CLEANROOM.md.

See CLEANROOM.md for the full allowed/forbidden source list and the honest scope of what "clean-room" means for this project.

Developer Certificate of Origin

By submitting this PR, I certify that the contribution complies with the
Developer Certificate of Origin 1.1.
Specifically, I affirm that the contribution is my own work (or rightfully
licensed to me) and that it can be distributed under the project's Apache-2.0
license.

I will sign off commits with git commit -s when asked, which adds a
Signed-off-by trailer to the commit message asserting the DCO.

…d say what measured them (#140, #147, #148, #133, #127)

Seven rows leave partial for closes because no record of any kind errors on the
52 drawings of run 40532346172 and the errors their notes still quote were
fixed: TEXT, ATTRIB, ATTDEF (#258), MTEXT (#261), VIEW (#263, #284), DIMSTYLE
(#293) and HATCH (#264, the R14 records routed). §22 AcDb:Template goes from
missing to partial: dxf_header reads $MEASUREMENT from it (#320). §9 stays
closes, now tracked by #127 (R13) and carrying the per-release evidence behind
closing #128, #129 and #130. The page's Last measured line and the paragraph
that said closes came from a local 19-file corpus are updated.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-28T16:38:27.586575Z 974d24d New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

DrunkOnJava added a commit that referenced this pull request Oct 27, 2026
…t the rows it moves (#195)

This branch contains #398's commit f540e7e and must land after #398.
DrunkOnJava added a commit that referenced this pull request Oct 27, 2026
…6 decoder, 28 missing (#195)

The counts are those of docs/data/spec-coverage.tsv with #398, whose moves run
40532346172 proves.
# Conflicts:
#	docs/data/spec-coverage.tsv
#	docs/spec-coverage.md
@DrunkOnJava
DrunkOnJava enabled auto-merge (squash) October 28, 2026 16:43
@DrunkOnJava
DrunkOnJava merged commit 44031ad into main Oct 28, 2026
24 checks passed
@DrunkOnJava
DrunkOnJava deleted the docs/spec-coverage-refresh branch October 28, 2026 16:51
DrunkOnJava added a commit that referenced this pull request Oct 28, 2026
…ain run (#195) (#401)

* docs(spec-coverage): move the rows the 2026-10-27 main run proves, and say what measured them (#140, #147, #148, #133, #127)

Seven rows leave partial for closes because no record of any kind errors on the
52 drawings of run 40532346172 and the errors their notes still quote were
fixed: TEXT, ATTRIB, ATTDEF (#258), MTEXT (#261), VIEW (#263, #284), DIMSTYLE
(#293) and HATCH (#264, the R14 records routed). §22 AcDb:Template goes from
missing to partial: dxf_header reads $MEASUREMENT from it (#320). §9 stays
closes, now tracked by #127 (R13) and carrying the per-release evidence behind
closing #128, #129 and #130. The page's Last measured line and the paragraph
that said closes came from a local 19-file corpus are updated.

* docs(criteria): re-measure the 1.0 requirements from the 2026-10-27 main run (#195)

Header, R2, R3, R4, R8, X1 and S3 now carry what run 40542129639 (main 61255e9)
and docs/data/spec-coverage.tsv say: 52 drawings with 0 errored records and 533
skipped, 53 sections scored by the DXF oracle with 22 values disagreeing, 90
closes, 13 partial, 6 decoder and 29 missing rows, a wasm32 compile of the
library in the Clippy job. X1 (DXF) moves from not measured to failed: the HEADER,
TABLES, ENTITIES and BLOCKS probes pair the written records with AutoCAD's export
and find 0 groups disagreeing, and 342 entity records of 18 kinds and the OBJECTS
section are not written. No other status changes.

* docs(criteria): R3 counts the rows #398 moves: 97 closes, 7 partial, 6 decoder, 28 missing (#195)

The counts are those of docs/data/spec-coverage.tsv with #398, whose moves run
40532346172 proves.
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.

Header variables, R2000 A table-driven header decoder with release ranges

1 participant