Repository navigation
ci(docs): every number on the README and the supported profile names its model (#1192) - #1484
Merged
Merged
Conversation
…its model (#1192) W10 of the 1.0 criteria asks that a reader can tell, for every number on the README and the supported profile, which model it was measured on and whether they can fetch it. tools/ci/measured_numbers.py now checks it in the PII guard job: a number whose clause names no model of the new "Model index" table in docs/reference-models.md fails, so does a number on a local-only or not-shared model whose clause does not say so, and so does an index row that does not say who can fetch its model. The rule is closed rather than a pattern for measurements: every digit is a number except what its spelling marks as an identifier (an issue, a report, a hash, a date, a Revit release, a Measure run id, a tool's version), and a number that is not a measurement carries <!-- w10: reason -->, which fails without a reason or with nothing to excuse. The script has no allowlist. On the pages as they were, 51 clauses failed it (39 with no model, 12 on a local-only model that did not say so). Each now names its model; the Snowdon Towers, 255ribeiro, flowbim, pre-2015 and client-model figures say "local only" or "not shared"; Snowdon Towers' 1,030 of 1,078 walls, which traced to no committed report, is labelled as a local run of 2026-09-27 not re-run since. Eight clauses carry a marker (release versions, the wasm binding count that wasm-api.py pins, resource-limit defaults, an exit status, a value rvt-rs writes). docs/reference-models.md documents the one Measure dispatch that re-runs the numbers on the models anyone can fetch, with what it does not cover, and docs/maintaining.md says how a new number keeps to the rule. The W10 row of the criteria records the check and stays "not measured": the re-run half is documented, not verified, and the bar is the maintainer's. Refs #1192
# Conflicts: # .github/workflows/ci.yml # docs/supported-profile.md
…e page as not re-run, and name the base of the failing count (#1192) The profile labels them (local run of 2026-09-27 in #446, RE-322's quote of RE-70 to RE-74); the evidence page carried the same figures unlabelled. The changelog fragment names the commit its 51 failing clauses were counted on. Refs #1192
DrunkOnJava
marked this pull request as ready for review
November 5, 2026 21:52
… check (#1192) The second read of #1484 found figures the first pass only labelled and a check that was looser than its documentation. Figures. The saved-mesh figures from Measure run 40192112285 (October) were stale: the BIM4LCA office's 1,294 of 1,709 and RE1's 207 and 148 of 214 are now run 41850769925's at e024f03, which RE-304 and RE-331 section 4.4 agree with: the office 1,554 of 1,650 as built and 1,638 of 1,738 at permit, RE1 148 of 228 exact and 228 of 228 within 0.01 ft of Revit's box, Core Interior 138 of 138. The office's doors are all drawn from their saved meshes (265 of 269 exact, run 41850758987). Also corrected: the 8 client models' ElementIds were checked on one of them (#421, 2026-11-04); the 1,030 and 724 wall figures cite #446; the --large-model preset is the source's 2 GiB and 8 GiB; the beam and landing claim holds on 28 Revit 2025 models and the arc claim on 25; the 923 of 942 Snowdon Towers beams are on the fetched samples and not local only; the index says what the MIT house, 255ribeiro and Vitoria rows actually are; the re-run docs say that -f ifc_flags= figures, a fork dispatch and the figures' re-run are untried or uncovered. Check. Nothing inside parentheses ends a clause; headings are read; a number must have a model name within 300 characters in its own clause; "local only" must stand beside that model's name (nearer to it than to another model's, with "both" and "all" reaching back); the failure message says how to mark a number that is no measurement; the steps run last in the PII guard job. New refusals: a number far from its model, a number in a heading, a local-only word beside another model's name. 35 pure-judgement tests, 22 mutations of the script each caught. Refs #1192
… on every page (#1192) RE-345 read 28 Revit 2025 models for beams and tread landings (puzzbobb's 24 and RE1's four) and counts 25 with Revit's own 2025 exports (puzzbobb's 24 and RE1 Architecture) for the arc and shaft census. compatibility.md, evidence.md, status.md, maintaining.md and the support matrix's beam, landing and arc notes now say which, as the README and the supported profile do. Refs #1192
DrunkOnJava
enabled auto-merge (squash)
November 5, 2026 22:57
8 tasks done
DrunkOnJava
added a commit
that referenced
this pull request
Nov 6, 2026
… the 20 plates and 116 rooms were outlines before the option landed (#1492) (#1508) ## Summary RE-78 counted 158 saved-mesh bodies on Core Interior (132 doors, 6 windows, 20 shading devices); `mesh_bodies_vs_ifc` and `rvt-ifc --saved-meshes` count 138. Nothing changed on `main`: the 158 was measured on 2026-09-27, when the 20 plates and the 116 rooms were record boxes. RE-95 (#467, 6e0dfaa) closed the plates' sketch outlines and RE-101 (#473, 68a44c0) gave the rooms their stored-solid outlines on 2026-09-28, and `saved_meshes::attach` replaces only a body whose `ProfileResolved` is false, as it did at 7386177, the first commit on `main` with `--saved-meshes`. No export changes and no body that measured exact was lost. ## Motivation #1492: the pages were corrected to 138 of 138 in #1484 without saying why the 20 stopped being scored. ## Changes - `reports/element-framing/RE-78-saved-graphics-meshes.md`: the result line stops naming the shading devices, the Core Interior shading-device row says it is from before RE-95, and a dated note under the first table gives the commits and the rule. The Snowdon rows are said to be from the same earlier tree, local only and not re-run. - `tools/re/shading_bodies_vs_ifc.py`: `mesh_bodies_vs_ifc` with every `IfcShadingDevice` selected whatever its `BodySource`, and a count of the `BodySource` and `ProfileResolved` of the plates before its table. Run by name through `-f scorers=` (as `slab_bodies_vs_ifc` is); not in the standing scorer list. - `changelog.d/research/1492-shading-plates-not-saved-meshes.md`. ## Testing Unit tests are banned in this repository; none added. - [x] Commit found by reading, not inferred from dates: `git merge-base --is-ancestor 6e0dfaa 7386177` and `... 68a44c0 7386177` both hold, `git show 7386177:src/ifc/saved_meshes.rs` has the `|| profile_resolved` skip (line 75), and PR #420's own body says its Core Interior row (158) is from before its rebase onto `main`. The Measure run that body cites (36717043673) exported IFC byte-identical to `main`'s, so it did not draw the meshes and did not re-measure the 158. - [x] Measure run 41850769925 (`--saved-meshes`, `e024f03c`): `rvt-ifc` prints `138 of 138 bounding-box bodies drawn from their saved graphics`, and `mesh_bodies_vs_ifc` and `saved_meshes_vs_ifc` score 132 doors and 6 windows, no shading device. - [x] The new scorer, run on Revit's small Core Interior IFC against itself (one shading device): selects it and scores ratio 1.0000. That checks the selection, not rvt-rs. - [x] Measure run 42133202790 (filtered: `core-interior`, `-f ifc_flags=--saved-meshes`, scorers `plan_profiles_vs_ifc mesh_bodies_vs_ifc saved_meshes_vs_ifc shading_bodies_vs_ifc`; code `daf36102`, scorers from `3fb0d241`; success), read back: - The 20 plates are `BodySource` `partition_element_record_bbox` with `ProfileResolved` true (the record-box source stays on a body whose outline is resolved). - Shape against Revit's body of the same Tag (`shading_bodies_vs_ifc`): volume within 0.01% on 20 of 20, every vertex within 0.001 ft both ways on 20 of 20, Revit's vertices on rvt-rs's surface on 20 of 20; the largest distance 1.539e-06 ft (10 `Floor:Structural Slab`, 10 `Floor:Arch Topping Slab - 2"`). - Plan outline (`plan_profiles_vs_ifc`): area within 0.1%, vertices and outline within 0.01 ft, 20 of 20 (and 80 of 80 `IfcSlab`). - `mesh_bodies_vs_ifc` and `saved_meshes_vs_ifc` score 138 bodies (132 doors, 6 windows), no plate and no room; `rvt-ifc` prints `138 of 138 bounding-box bodies drawn from their saved graphics`. - Not measured: the plates' saved meshes against Revit's (the option leaves the plates alone, so no run draws them), and the rooms' shape (Revit's export holds no spaces to score them against). ## Audit-honesty checklist - [x] The docs say what was and was not measured; the plates' shape figure is labelled not yet measured on this head - [x] A fragment under `changelog.d/research/` - [x] No emojis, private paths or PII ## Legal and contribution hygiene - [x] Apache-2.0; no Autodesk source; no new fixtures ## Breaking changes None. No `src/` change, no export change. ## Related issues Closes #1492.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
W10 of the 1.0 criteria (#1192):
tools/ci/measured_numbers.py, the last steps of the PII guard job, fails a number on the README or the supported profile that has no model of a new "Model index" table indocs/reference-models.mdwithin 300 characters in its own clause, or a number on alocal onlyornot sharedmodel without those words beside that model's name, or an index row that does not say who can fetch its model. The pages are edited until they pass, and the figures the second read found stale are updated. One Measure dispatch is documented as the command that re-runs the numbers on the models anyone can fetch. The criteria's W10 row records both and stays not measured.Motivation
W10 was not measured because nothing checked that a number names its model (#1192). Several figures rest on models nobody else can fetch (Snowdon Towers' exports, the MIT house, the 255ribeiro projects, flowbim's house, the pre-2015 files, the client models), and a reader could not tell which.
Changes
tools/ci/measured_numbers.pyandtools/ci/test_measured_numbers.py; three steps at the end ofci.yml'spii-guardjob (the check,--refusals, the failure-first tests).docs/reference-models.md: the Model index (19 models, four fetchability words) and "Re-run the numbers" (the Measure dispatch, what it covers, what it does not).README.md,docs/supported-profile.md,docs/evidence.md,docs/support-matrix.json,docs/release-1.0-criteria.md: models named,local onlyandnot sharedsaid, eight clauses marked<!-- w10: reason -->, the stale saved-mesh figures replaced, and a sentence on how to read the figures.docs/maintaining.md: "Numbers on the README and the supported profile".changelog.d/changed/1192-numbers-name-their-model.md.The rule
Every numeral on the two pages, in a heading as in a cell, is a number except what its spelling marks as an identifier (an issue, a report, a hash, a date, a Revit release or other year, a Measure run id, a layout width, a tool's version, the 1.0 release). It needs a name from the index within 300 characters in its own clause (between semicolons and sentence ends, never split inside parentheses; each cell, item and heading its own unit).
local only/not sharedmust stand beside that model's name (within 60 characters and nearer to it than to another model's name; "both" and "all" reach back). A number that is not a measurement carries<!-- w10: reason -->, which fails without a reason or with nothing to excuse, and the failure message says so. No allowlist. A pattern for measurements would miss the next form someone writes; this fails any new form until it names a model.What it cannot catch (stated in
docs/maintaining.md): a number placed near the wrong model's name, a number that is not true or not current, a measured count inside a code span that is more than a number, a figure spelled out in words, and the pages other than these two.Second read, and what I changed
e024f03c, which RE-304 and RE-331 section 4.4 agree on, and which I re-totalled from that run's scorer files: the office 1,554 of 1,650 exact as built and 1,638 of 1,738 at permit (265 of 269 doors and all 269 windows exact as built, run 41850758987 for the default export, RE-331 section 4.1), RE1 148 of 228 exact (Architecture 45 of 53, Electrical 31 of 47, Mechanical 65 of 68, Plumbing 7 of 60) and 228 of 228 within 0.01 ft of Revit's box. The "221 of 269 doors keep their box" and "1,294 of the 1,352 bodies then drawn" sentences are gone. Core Interior: your note said 158 of 158 stands; run 41850769925 scores 138 saved-mesh bodies there (132 doors, 6 windows) and no shading device, and RE-331 says 138, so the pages now say 138 of 138. RE-78's 158 counted 20 shading devices; I did not find why they are no longer scored. Snowdon Towers' 3,332 of 3,736 stays, labelled as RE-78's local run not re-run since.profile8 files' ElementIds: now the one Revit-side check from Element records beyond 2024/2025: derive the marker from the schema and measure the older envelope (RE-80 follow-up) #421 (2026-11-04), with its counts; the other 7 are not checked.docs/evidence.md).--large-model: the source's presets (2 GiB per stream, 8 GiB inflate on 64-bit), marked.docs/compatibility.md,docs/evidence.mdline 15 anddocs/support-matrix.jsonlines 395, 422 and 440 still say 25 for the beam and landing claims; outside the two pages, not changed.ALD26 Beforeis spent and measured in full, the rest held out); W10 row "none was cut"; fork dispatch and-f ifc_flags=figures stated as untried and not covered; the "nobody has re-run and compared" caveat is on the README and the profile.docs/maintaining.md.Numbers that could not be traced to a run, or only weakly
docs/evidence.md; kept, labelled "not re-run since". If you want them gone it is one phrase in the Walls row.Testing
Unit tests are banned here; the one exception is a pure helper, and
test_measured_numbers.pyis that (35 cases, failure-first, no file or network I/O; the first 28 are unchanged).tools/check-local.shN/A (CI is the build)python3 tools/ci/measured_numbers.pypasses (255 of 271 numbers name a model, 8 clauses marked). On the pages as they were atf009976e, the first form of the check failed 51 clauses.python3 tools/ci/measured_numbers.py --refusalscopies the pages and the index to a scratch directory, appends or breaks one thing each time, and the check refuses it for the stated reason: a number with no model, a local-only model that does not say so, a local-only word beside another model's name, a number far from its model in a long clause, a number in a heading, a marker with no reason, a marker with nothing to excuse, an index row with no fetchability. It runs in CI. A scratch copy with ", and 4,321 more beams" added to the 3,592-character Properties clause also fails.2D, numberless clause needing a flag, message without the marker way out), each run against the tests in a scratch copy: all fail them.changelog.py check,api-doc-ids.py,readme-matrix.py --check,wasm-api.py docs,render-mcp-tools.py --check,check-workflows.py(PyYAML in a scratch venv, 0 errors) pass; the matrix is valid JSON; the script and tests also pass on Python 3.11 and 3.12.actionlint(the environment's command filter refused it) and CI itself, the first run of the new steps on a runner.Audit-honesty checklist
changelog.d/changed/Legal and contribution hygiene
Breaking changes
None for users. A pull request that adds a number to the README or the supported profile without a model fails the PII guard job (
docs/maintaining.md). Open pull requests that touch these pages pass their own CI until their next run after this merges, and #1468 (12 bindings becomes 13) will meet the marker at README line 85.Related issues
Refs #1192. Not
Closes: the third done-when item is the maintainer setting W10's bar, and the row's status records the result without moving proposed.