Skip to content

research(ifc): value sources for every *Source property value, and a test that fails on one with none (#1498) - #1512

Draft
DrunkOnJava wants to merge 4 commits into
mainfrom
lane/1498-value-source-gaps
Draft

DrunkOnJava wants to merge 4 commits into
mainfrom
lane/1498-value-source-gaps

Conversation

@DrunkOnJava

@DrunkOnJava DrunkOnJava commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

Summary

Draft. #1498's structural fix and the additive sources for the inputs it lists. Refs #1498 (not Closes until the test has run green on the gate and the proof run is read).

  • property_readers (src/ifc/element_provenance.rs) lists a noted source for any reader an element's own *Source property values name (BodyHeightSource, BodyBaseSource, BodyEndSource, PlacementAxesSource, ThicknessSource, SpaceOutlineSource), beside its BodySource and ProfileSource. Before, only those two keyed a listing, so a door whose body was its saved mesh never listed the transform its placement was taken from.
  • SOURCE_VALUES in tests/value_sources_offsets.rs gives every written *Source value a row (sourced, covered by another table, unread, or a declared gap with its reason) and fails on a value with none. A sourced row requires its readers on every element that carries the value. It reads the real exports of the CI gate through --element-provenance.
  • New sources, all provenance only and noted only while the table is being built (recording_value_sources()): native_wall (the wall's own native record: join lists, cut pairs, m_realJoined, the curve, the flip), native_wall_joined (the records of the walls the lists name, where every one was read), wall_top_covers and wall_base_cover (the frame of each cover the wall names, rule frame), wall_orientation (agreeing, the scan compares every copy), wall_type_face_angle (agreeing), native_opening (a door's own record: the two flips), opening_host_wall (the host wall's record).

Declared gaps: 20 values

12 bindings to a Level or a storey (LevelBindSource 9, StoreyBindSource 3), 2 family names chosen by a table (FamilyNameSource), 1 column height (BodyHeightSource partition_geometry_node_after_joins: the geometry node's offset is not noted), 5 schema-walker values no model of the 92 writes. Reasons and element counts: docs/export-diagnostics.md, "Written *Source values". Three listed inputs have no *Source property to key a row on and carry a stated reason instead: door and window cut-loop sizes, a beam's cross-section rotation, a section's dimensions (not compared with the export).

Evidence so far

  • Measure run 42136996423 (probe at 92a7e92, base=none, 92 models, scorers=none): the inventory of every *Source value and the readers behind it. It found three values that had no row (StoreyBindSource record_level_reference, LevelBindSource structural_framing_top_level, ProfileSource partition_element_record_join_cut); they have rows now. That run is the probe commit, which has no export code: it says nothing about byte identity.
  • Byte identity of the export is not yet measured on this head. The one filtered run (-f base=main -f samples=true -f sample_years="2024 2027" -f models="core-interior nordic-office-*" -f nordic=true -f scorers=none) waits for the second read.
  • CI on this head: not yet read.

MCP contract

No rvt-mcp file is touched. The value_sources description (rvt-mcp/src/schema.rs, docs/mcp-tools.json) says the copy each reader took "a value of the element's body from"; with this PR it also lists the values of the wall rules and the placement. The wording is the coordinator's to sync; the reader names are free strings in the schema.

Testing

  • cargo fmt, tools/release/changelog.py check, tools/ci/api-doc-ids.py locally.
  • tests/value_sources_offsets.rs on the gate in CI (Corpus health): not yet read at this head.

Breaking changes

None.

…roperty value, and the offsets test fails on a written value with none (#1498)

Elements list a noted source for any reader their own *Source property values name (property_readers), beside their BodySource and ProfileSource: a wall's top, base and end rules (native_wall, the wall's own record, and the frames of the covers it names), the placement of a door or window in a wall (instance_transform, native_opening, opening_host_wall), a wall's orientation and flip (wall_orientation) and a tapered wall's face angle (wall_type_face_angle). SOURCE_VALUES in tests/value_sources_offsets.rs gives every written value a row, sourced or a stated gap.
…ers, the three values the inventory found get rows, and the qualifications clippy refused go (#1498)

Measure run 42136996423 (the probe at 92a7e92, 92 models) found StoreyBindSource=record_level_reference, LevelBindSource=structural_framing_top_level and ProfileSource=partition_element_record_join_cut written with no row.
…ten *Source values and the 20 declared gaps (#1498)

native_symbol_cut is not attributed: no *Source property keys a door's cut-loop size, so the note would never be listed.

This branch has not been deployed

No deployments
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