From 982ce9db41460daf1c6db53843dc946d3314fae0 Mon Sep 17 00:00:00 2001 From: Griffin Long <151978260+DrunkOnJava@users.noreply.github.com> Date: Wed, 28 Oct 2026 04:28:38 -0400 Subject: [PATCH] docs: record the table and unp decoder landings, and name the types still skipped CHANGELOG gains the table objects (#313, #316, #317, #319), the nineteen classes derived from AutoCAD's output (#326 to #341), the DIMENSION scorer (#387), the BLOCK fixtures (#407), the maintainer tools (#406, #383) and the merge train's stack handling (#421 to #423). README said every skipped type had a decoder in review; only SHAPE (#310) and the VIEWPORT entity header (#311) do, and the rest are twelve custom classes in the BookViewerApp3 drawings with no DXF export yet, now named. STATUS's pending section says its counts are the 2026-08-30 snapshot. --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ README.md | 21 +++++++++++++++------ STATUS.md | 4 +++- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 045c3fd7..d9d2ee89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,40 @@ once the public API stabilizes at 0.1.0. ## [Unreleased] +### Added — the table objects decode: TABLESTYLE from R2010, CELLSTYLEMAP, TABLEGEOMETRY, TABLECONTENT and ACAD_TABLE (2026-10-27 and 28, #313, #316, #317, #319, #151) + +TABLESTYLE (§20.4.101.2) and CELLSTYLEMAP (§20.4.102) share one cell-style reader (§20.4.101.3 and §20.4.101.4). TABLEGEOMETRY (§20.4.103), TABLECONTENT (§20.4.97) and the ACAD_TABLE entity (§20.4.96) follow, each paired with AutoCAD's DXF export by its probe. 103 skipped records of the pinned corpus now decode. An ACAD_TABLE's insertion rotation is compared in degrees against group 50; no pinned table is rotated, so that comparison is not yet measured on a nonzero angle. + +### Added — nineteen classes the spec does not print decode from AutoCAD's own DWG and DXF output (2026-10-28, #326 to #341, #152) + +Derived under the `CLEANROOM.md` method of 2026-10-26, on every release from R14 to R2018: +- WIPEOUTVARIABLES, ACDB_DYNAMICBLOCKPURGEPREVENTER_VERSION, ACDB_BLOCKREPRESENTATION_DATA, PDFDEFINITION and DBCOLOR (#326). +- The dynamic-block evaluation objects BLOCKGRIPLOCATIONCOMPONENT, BLOCKLINEARGRIP, BLOCKVISIBILITYGRIP, BLOCKLINEARPARAMETER, BLOCKVISIBILITYPARAMETER and BLOCKSCALEACTION (#328). +- DIMASSOC (#329). +- ACSH_HISTORY_CLASS and ACSH_BOX_CLASS (#330), and ACSH_EXTRUSION_CLASS (#341). +- SUN (#332). +- DATATABLE (#335). Its column and cell lists start at no more than 1,024 entries and grow as entries decode, so a malformed count cannot reserve memory (#185). +- ACDB_TEXTOBJECTCONTEXTDATA_CLASS (#337). +- ACAD_EVALUATION_GRAPH (#339). + +PDFUNDERLAY now decodes on every release and is checked against AutoCAD's DXF (#331). With the table objects above, the corpus job's skipped records fell from 379 to 44, with none errored. + +### Added — the value oracle scores the DIMENSION family (2026-10-28, #387) + +§20.4.22 to §20.4.29, each dimension type's groups scored against AutoCAD's DXF export by handle. + +### Added — the canonical fixtures carry BLOCK_HEADER and BLOCK pairs (2026-10-28, #407, closes #78) + +`build_fixtures` writes a block header and its block for each synthetic drawing, so the block-name gate runs in CI on every release the writer covers. + +### Added — maintainer tools: a Jev review of stale prose and issues, and the AutoCAD trial session (2026-10-28, #406, #383) + +`tools/maintainer/jev_review.py` ranks the README, STATUS and ROADMAP statements, and the open issues, that a merged pull request may have overtaken (housekeeping item 10 in `docs/maintaining.md`). `tools/autocad/` writes the scripts, staged inputs and manifest for an AutoCAD session that re-saves the pinned R13 drawings and builds controlled drawings, and checks what the session produced. + +### Changed — the merge train lands stacked pull requests on its own (2026-10-28, #421, #422, #423) + +A PR stacked on one that has landed merges main against the newest commit of that PR it holds. Sections main renumbered are followed in its own lines. A PR that holds commits of an older open PR waits until that PR lands. A Codex thread that asks to commit the measured baseline is settled once the Corpus job passes. + ### Changed — the merge train builds and tests nothing locally (2026-10-27, #408) Every build, test and corpus measurement is a GitHub Actions run on the pull request. The train merges main in and pushes, then commits the corpus and oracle baselines and README coverage that the PR's own CI run measured, refusing anything worse than main. A PR stacked on another waits until GitHub retargets it to main. diff --git a/README.md b/README.md index 238d91ca..4a696db5 100644 --- a/README.md +++ b/README.md @@ -79,11 +79,17 @@ object-data size on R2000 to R2007, the size inside the common entity data on R13/R14), or it returns an error instead of plausible-looking geometry. An *errored* record is a field list that does not add up; there are none left on the pinned corpus. A *skipped* record is a type with no decoder on `main` -yet. Every skipped type has a decoder in review: the open pull requests -labelled `type:feature` under the "every object prescription" epic (#138), which the -merge train lands one at a time, each landing moving the tables above. The -Corpus job's `corpus-measurement` artifact lists the skipped records of each -drawing by type (`corpus-logs/`). +yet. Two of the skipped types have a decoder in review, SHAPE (#310) and the +VIEWPORT entity header (#311). The rest are custom classes in the four +drawings pinned from kurema/BookViewerApp3: the render settings +(RAPIDRTRENDERENVIRONMENT, RAPIDRTRENDERSETTINGS, MENTALRAYRENDERSETTINGS and +RENDERGLOBAL), five associative-network classes (ACDBASSOCNETWORK, +ACDBASSOCACTION, ACDBASSOCDEPENDENCY, ACDBASSOCVERTEXACTIONPARAM and +ACDBASSOCARRAYACTIONBODY), ACSH_CYLINDER_CLASS, ACSH_REVOLVE_CLASS, and LIGHT +declared as a custom class. Those drawings have no DXF +export to derive or score them against yet (#152). The Corpus job's +`corpus-measurement` artifact lists the skipped records of each drawing by +type (`corpus-logs/`). Most of the classes in that list are not printed in the spec at all; their field lists are learned from AutoCAD's own DWG and DXF output under the @@ -129,7 +135,7 @@ passed. | Handle map and class map | Shipped | | | Header variables | Shipped | Table-driven by release range (#126) | | Object-stream walker | Shipped | Every release from R14 to R2018; every handle-map entry resolves to a record | -| Entity and object decoders | Alpha | 0 errored records on the pinned corpus; every skipped type has a decoder in review (above) | +| Entity and object decoders | Alpha | 0 errored records on the pinned corpus; the skipped types are listed above, two with a decoder in review | | Symbol tables | Alpha | Every table record in the pinned corpus decodes, on every release; values scored by the DXF oracle | | Entity graph (owners, reactors, blocks, layers) | Partial | Resolver APIs exist; reference closure is measured per drawing in CI | | Streaming reader | Alpha | Byte-demand state machines up to the object records; see below | @@ -205,6 +211,9 @@ every later disclosure. short outside the ten proven pages still decodes as lossy UTF-8 (#375). - Decode password-protected R2007 files: a section whose descriptor declares encryption is refused, not decoded. +- Decode the render-settings classes, five associative-network classes and + ACSH_CYLINDER_CLASS and ACSH_REVOLVE_CLASS (listed above); the pinned corpus + holds a few such records and no DXF export of them yet (#152). - Write R13, R14 or R2007 files; the writer covers the R2004 family only. - Byte-identical DWG round trips, or output checked by any CAD application. - Python bindings, a non-technical end-user application, an installer or a diff --git a/STATUS.md b/STATUS.md index 8b1607b3..945b8b64 100644 --- a/STATUS.md +++ b/STATUS.md @@ -278,7 +278,9 @@ the current capability matrix. ## Pending — non-trivial work remaining -These have genuine open scope requiring focused work, not stubs. +These have genuine open scope requiring focused work, not stubs. Their counts +are the 2026-08-30 snapshot of the 19-file subset; the corpus table at the top +of this page is current, and README.md lists the types still skipped. - **Current real-file decode baseline:** the 2026-08-30 `examples/coverage_report.rs ../../samples` run reports 2273 decoded,