Skip to content

feat(elements): conduits, conduit fittings and gutters from their element records (#1261) (RE-319) - #1306

Merged
DrunkOnJava merged 15 commits into
mainfrom
feat/conduits-gutters-re319
Nov 4, 2026
Merged

DrunkOnJava merged 15 commits into
mainfrom
feat/conduits-gutters-re319

Conversation

@DrunkOnJava

Copy link
Copy Markdown
Owner

Summary

Conduits, conduit fittings and gutters are exported from their element records, on every release the exporter reads (RE-319). On the one file with a Revit export that holds any of them, BIM-Speed Vitoria ALD26 Before (Revit 2018, IFC2X3), all 178 instances the RE-21 rule selects are elements of Revit's export by Tag, none outside it: 1,136 to 1,314 of its 1,321 elements written. Cable trays and cable tray fittings are not recovered (no file with a Revit export holds one), and neither are the conduit centerline categories Revit's export leaves out.

Motivation

#1261: RE-315 left 178 conduits, conduit fittings and gutters of ALD26 Before as "the next category census". This is that census, on every development file and every release the exporter reads, and the categories it shows Revit's export holds.

Changes

  • partition_element_records.rs: OST_CONDUITS (-2008132), OST_CONDUIT_FITTING (-2008128) and OST_GUTTER (-2001391), Autodesk's published BuiltInCategory values, in PRODUCT_RECORD_CATEGORIES (42) and RECOVERED_CATEGORIES (49).
  • category_map.rs: conduits as IfcCableCarrierSegment, conduit fittings as IfcCableCarrierFitting, gutters as IfcPipeSegment, the entities Revit's own type objects name in that export (102 of 102, 74 of 74, 2 of 2); PredefinedType unset.
  • partition_schema_mvp/fields.rs: Gutter placed by elevation (ELEVATION_PLACED_CLASSES).
  • export_content.rs: no Constraints Level parameter for the three classes (no export measures its name).
  • rvt_ifc.rs, viewer/src/main.ts: display names.
  • probes/examples/probe_re319_category_census.rs, tools/re/category_census_vs_ifc.py: the census and its scorer.
  • reports/element-framing/RE-319-conduits-conduit-fittings-gutters.md, changelog.d/added/1261-conduits-gutters.md, docs/status.md, docs/support-matrix.json, docs/supported-profile.md, docs/evidence.md, docs/reference-models.md, docs/release-1.0-criteria.md.

Testing

Unit tests are banned in this repository: none added. No local build (the Mac does not compute here); everything ran on GitHub's hosted runners through Measure.

  • tools/check-local.sh passes: not run locally (no builds on this Mac); CI runs it on this PR
  • Verified end to end on real Revit files, with the probe and the scorers that reproduce it (below)
  • If this touches the IFC exporter: Core Interior, RE1 and every other model but the 15 below are byte for byte main's, so the witness verdicts are unchanged
  • Performance change: N/A

Measure run 41741114199 (-f base=main -f holdout=true -f samples=true -f nordic=true -f r2025=true -f bimcollab=true, every scorer; main's side 4ad28023, head 46da221f; later commits change documents only): 112 models exported on both sides, 97 byte for byte main's IFC, 15 moved:

ALD26 Before (Revit 2018, spent) main head Revit's export
elements paired by Tag 1,136 1,314 1,321
written that Revit's export lacks 0 0
in Revit's class or IFC4's for its IFC2X3 one 1,127 1,305
elements on Revit's storey 1,073 1,251
validation, EXPRESS rules, property sets 0 findings 0 findings
psets: different, values Revit does not write 0, 20 0, 20

The 7 still missing are 4 curtain-panel walls and 3 assemblies. The 15 models that moved: ALD26 Before, the held-out ALD26 Project (counts only: 1,336 to 1,514 of Revit's 1,520 elements and spaces, IfcFlowSegment and IfcFlowFitting absent 104 and 74 to 0, no element Revit lacks, values Revit does not write 18 to 18), Autodesk rme_advanced and rme_basic of 2015, 2019 and 2024 to 2027 (19 or 20 conduits and 14 fittings each), and Snowdon Towers Electrical (530 and 322). The samples have no Revit export: counted, not scored. Every other model is byte for byte main's, among them Core Interior, RE1, the BIM4LCA files, the 24 R2025 models, BIMcollab and the 17 other held-out pairs.

Census (run 41726416015, probe probe_re319_category_census): the only file with a Revit export that holds any of the five categories is ALD26 Before; RE1 Electrical, Mechanical and Plumbing, Core Interior, the four BIM4LCA files, the 24 R2025 models and Einhoven hold none, and every element of those exports is among the instances the probe selects.

Reproduce:

gh workflow run measure.yml --ref main -f ref=3a81189c6dde0783004c41d3d2e4daf27930e1e8 -f base=none -f holdout=true -f samples=true -f nordic=true -f r2025=true -f bimcollab=true -f models="spent-* core-interior einhoven re1-* nordic-office-* r2025-* bimcollab-*" -f scorers=none -f probe=probe_re319_category_census -f probe_scorer=category_census_vs_ifc
gh workflow run measure.yml --ref main -f ref=46da221fc89f259d7dd535e06e8f49a7ac0286a3 -f base=main -f holdout=true -f samples=true -f nordic=true -f r2025=true -f bimcollab=true

Audit-honesty checklist

  • README / docs reflect the current state after this PR: no claim beyond what is measured (one Revit 2018 file with an export; the samples counted, not scored; cable trays not exported)
  • A user-visible change has its fragment changelog.d/added/1261-conduits-gutters.md
  • If a limitation was resolved, the docs say so: RE-315's 185 missing is now 7
  • New limitations are in the PR body, the report (§9) and the support matrix: cable trays and cable tray fittings are not recovered; conduit and gutter names and Reference are not read on Revit 2018 (Name differs, as for pipes); no Constraints Level parameter for the three classes; no PredefinedType (Revit's gutter type objects carry GUTTER, 2 of 2; left unset, a decision); bodies are boxes; no conduit fitting ports
  • Commit messages describe what changed and why
  • No emojis in code, docs or commit messages
  • No private paths, personal email addresses or internal jargon in committed files
  • Reverse-engineering finding: a reproducible probe under probes/examples/ (probe_re319_category_census.rs) and the dated report RE-319 are included

Legal and contribution hygiene

  • I agree this work is licensable under Apache-2.0
  • This PR contains no Autodesk proprietary source, decompiled internals, or NDA'd SDK content
  • No new test fixtures

Clean-room declaration (CLEANROOM.md): the changes in this PR are based on public byte observations of Revit files (BIM-Speed's CC BY 4.0 Vitoria pair, MIT-licensed RE1 models, Autodesk's published sample projects) and of Revit's own IFC exports of them (accepted source 1), Autodesk's published BuiltInCategory constants (source 2, the public API enumeration), the buildingSMART IFC4 specification (source 4), and Autodesk's open-source exporter revit-ifc, read for what Revit's export writes and cited by file and class (IFCCompatibilityType.cs, ElementFilteringUtil.cs, FamilyInstanceExporter.cs, IFC4Enums.cs; source 5). I have not used Autodesk SDK source, ODA SDK source, leaked internal documentation, NDA material, or decompiled internal Revit implementation code beyond public symbol exports, and I have not copied or translated code from revit-ifc.

Breaking changes

None. PRODUCT_RECORD_CATEGORIES and RECOVERED_CATEGORIES are unstable-research constants whose array lengths change (39 to 42, 46 to 49).

Screenshots or output samples

IFC output changed: a conduit is IFCCABLECARRIERSEGMENT('...',#5,'Conduit-745533',$,$,#...,#...,'745533',$), a fitting IFCCABLECARRIERFITTING('...',#5,'M_Codo de tubo - Aluminio:Est\X2\00E1\X0\ndar:745566',$,'M_Codo de tubo - Aluminio:Est\X2\00E1\X0\ndar',#...,#...,'745566',$), a gutter an IFCPIPESEGMENT with $ for its PredefinedType.

Related issues

Refs #1261. Follows #1286 (RE-315).

…n every release, scored against Revit's Tags (#1261) (RE-319)
…status for conduits, conduit fittings and gutters (#1261) (RE-319)
… and what the census's written column is (#1261) (RE-319)
… records the held-out Project's counts (#1261) (RE-319)
…conduits, and RE-319 corrects its missing-value arithmetic and states the type objects, bodies, Snowdon and systems it leaves unmeasured (#1261) (RE-319)
@DrunkOnJava
DrunkOnJava marked this pull request as ready for review November 4, 2026 00:54
@DrunkOnJava
DrunkOnJava enabled auto-merge (squash) November 4, 2026 00:54
@DrunkOnJava
DrunkOnJava merged commit 5023f8b into main Nov 4, 2026
28 checks passed
@DrunkOnJava
DrunkOnJava deleted the feat/conduits-gutters-re319 branch November 4, 2026 01:02
@DrunkOnJava

Copy link
Copy Markdown
Owner Author

Automated Claude Code review (the maintainer's review agent; it read the code and the Measure runs): one blocking item, fixed in c223c47. The support matrix's two older Vitoria entries still said 1,136 of 1,321, with the 185 missing being conduits, conduit fittings and gutters. They now give 1,314 / 1,305 / 1,251, with the 7 left being 4 panel walls and 3 assemblies, and cite RE-319. In the same commit, RE-319 also: corrects its missing-value arithmetic (176 + 104 + 2); says Revit types all 178 instances where rvt-rs writes no type object; notes that the bodies on 2024 and later include turned boxes; and says that Snowdon's MEP model and the system memberships are not measured. Verified from the artifacts: ALD26 Before goes 1,136 to 1,314 by Tag with no extras, and the held-out Project 1,336 to 1,514 with no extras.

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