IDS import (staging) and a false-absence fix in the IFC adapter - #14
Closed
GeneralPawz wants to merge 3 commits into
Closed
GeneralPawz wants to merge 3 commits into
GeneralPawz wants to merge 3 commits into
Conversation
ifc-properties resolves IfcPropertySet members only and skips every other IfcPropertySetDefinition, but the property service turned its "absent" into complete absence evidence. A rule requiring quantity `Foo` in IfcElementQuantity `Foo_Bar` reported a wall as missing it. A per-session index now records the names of skipped definitions and of their members (quantities, nested quantities, predefined-set attributes). An absence one of them could hold is refused as incomplete. The index is model-wide, so it only ever turns an absence into not evaluated. Found by running translated buildingSMART IDS test cases through the adapter. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019MNzJbWbSLjhFXQKs3LhUm
axioval-ids reads IDS 1.0 through the openbim-ids reader and writes a definition package and a ruleset. A facet becomes a rule only when an existing capability decides it as IDS does; everything else is a Gap naming the part and the reason. An untranslatable applicability facet leaves its specification without rules, since dropping it would widen the checked population; untranslatable requirements are dropped one by one. Today that is entity applicability (literal or enumeration, subclasses excluded) with value-less, untyped property presence. On the buildingSMART examples 0 of 38 specifications translate completely; the ranked gaps are dataType checks, attribute facets, IFC4X3 and existence. The corpus harness runs the translation through the IFC adapter against the 334 buildingSMART cases: no translated rule fails a pass case, and every unflagged fail case is explained by a gap. A probe without dataType checks found the quantity-absence defect fixed in the previous commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019MNzJbWbSLjhFXQKs3LhUm
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019MNzJbWbSLjhFXQKs3LhUm
This was referenced Sep 26, 2026
Contributor
Author
|
Superseded by #16, which carries these commits rebased onto current main plus the dataType work. |
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.
Two commits:
fix(ifc): do not prove absence over quantity and predefined setsifc-properties::exact_propertyreadsIfcPropertySetmembers only. The adapter turned its "absent" into complete absence evidence, so a rule requiring quantityFooinIfcElementQuantityFoo_Barreported a wall as missing it. The adapter now builds a per-session index of the definitions upstream skips (quantity sets, predefined property sets) and their member names. It refuses an absence that one of them could hold as incomplete. The index is model-wide, so it can only turn an absence into not evaluated. Tests:crates/sources/semantic/ifc/tests/unread_definitions.rs(IFC4 and IFC2X3); all four failed before the fix.feat(staging):axioval-idsTranslates IDS 1.0 (via the
openbim-idsreader, openbimrs/ids#5, taken from itsfeat/ids-readerbranch) into aDefinitionPackage+RuleSetPackage. A facet becomes a rule only when an existing capability decides it exactly as IDS does. Anything else is aGapwith a part and a reason. An untranslatable applicability facet skips the whole specification.IDS_TEST_CASES=… cargo test -- --ignored corpus): 0 contradictions over the 334 buildingSMART cases.Coverage on the 12 buildingSMART example files
38 specifications: 0 complete, 24 skipped, 3 rules. Ranked gaps:
dataTypeon property facetsExactProperty.value_typeinto IR evidence (upstream already exposes it)minOccurs ≥ 1)Also found, not changed here
37 of 334 corpus models are refused by
import_ifc_session. Their files contain noIfcObject, e.g. onlyIfcTaskTime, or onlyIFCPROJECT, which in IFC4 is anIfcContextrather than anIfcObject. The refusal says "snapshot source is not present in the project", which is misleading. Whether a source may be empty, and whetherIfcContextshould be an object, are contract decisions.