Skip to content

VeriModel 1.0.0: IFC QA gate, QTO, BCF export, desktop app, CLI and local assistant - #1

Merged
Grohle merged 19 commits into
mainfrom
ccr-af9252c1-pjbxsw
Oct 17, 2026
Merged

Grohle merged 19 commits into
mainfrom
ccr-af9252c1-pjbxsw

Conversation

@Grohle

@Grohle Grohle commented Oct 17, 2026

Copy link
Copy Markdown
Owner

Summary

Complete implementation of VeriModel: a local-first IFC quality gate + quantity takeoff + BCF export, as a Rust engine with a static HTML interface (Tauri v2) and a CLI sharing the same core.

  • crates/core (pure Rust, no IFC dependency): data model, project.yaml schema with validation + JSON schema, YAML rule packs with 20 check kinds and $config.* parameters, config-generated rules, documented score/verdict, IDS evaluation (requirement quoted), QTO aggregation with unit-rate costing and hand-check samples, BCF 2.1/3.0 writer validated against the official buildingSMART XSDs, report writers (report.html/json, failures.csv, qto.csv/xlsx/json), run ledger with SHA-256 hashes, append-only audit log. Deterministic outputs (enforced by tests).
  • crates/ifc_reader: the only crate that touches IFC. An embedded IfcOpenShell extractor streams NDJSON facts (header, units converted to SI, spatial tree, elements, psets, quantities, classification, materials, geometry metrics, IDS results) to Rust. IFC2x3 / IFC4 / IFC4.3 verified.
  • crates/assistant: optional read-only copilot (small GGUF model via Candle, downloaded on demand), BM25 retrieval over built-in docs, imported documentation (docs → knowledge.yaml converter) and the current report; answers are validated against the report before the UI can apply them. Never part of a verdict.
  • src-tauri + frontend/: 3-step Load → Review → Export UI, EN/ES, dark/light, metric/imperial, filters, pagination, element detail, run history with diffs, assistant panel, demo model that loads in one click.
  • crates/cli: check, qto, clash (explicit "not implemented"), validate-config, inspect, doctor, ask, docs-to-yaml.
  • examples/: residential / office / infrastructure project.yaml, custom rule pack, IDS 1.0 sample, rates.csv, generated demo pavilion.
  • tests/: end-to-end on real IFC fixtures (golden expectations on a deliberately broken model, QTO reconciliation, genericity with two configs, determinism, IDS, three schemas) plus unit tests in every crate.
  • CI (fmt, clippy -D warnings, tests, CLI smoke run, bundles) and a tag-triggered release workflow producing Windows .msi/.exe, macOS .dmg, Linux .AppImage/.deb and CLI binaries.
  • Licence: PolyForm Noncommercial 1.0.0.

Test plan

  • cargo test --workspace green (core 60, reader 8, e2e 10, CLI 15, desktop 19, assistant)
  • cargo clippy --workspace --all-targets -- -D warnings clean
  • CLI runs on all fixtures; broken fixture exits 1 (FAIL) with the expected findings
  • BCF opened with bcf-client and validated against BCF-XML 2.1 and 3.0 XSDs
  • Frontend walkthrough in headless Chromium with zero console errors
  • cargo tauri build -b deb produces VeriModel_1.0.0_amd64.deb
  • Release workflow run on tag v1.0.0

Generated by Claude Code

claude added 15 commits October 17, 2026 16:22
- Cargo workspace with core / ifc_reader / cli / src-tauri members
- core::model: Element, Finding, RuleResult, RunReport, RunLedger (facts vs verdicts)
- core::config: project.yaml schema with defaults, validation and JSON schema
- core::rules: YAML rule packs, 20 check kinds, $config.<path> parameters, config-generated rules
- core::score: documented verdict and score formula
- Built-in generic rule pack and discipline table as data files
- Report string tables (EN/ES), audit log, SHA-256 helpers, run orchestration
- buildingSMART sample IFC fixtures (CC BY 4.0) for IFC2x3 / IFC4 / IFC4.3

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…ON facts to Rust

- Python extractor: schema/units/header, spatial tree, elements with psets,
  SI-converted quantities, classification, materials, geometry (bbox/volume/area),
  IDS audit via IfcTester, plain-language error lines
- Rust client: Python discovery, protocol parsing, geometry merge, disciplines,
  storeys; inspect() fast path; integration tests on IFC2x3/IFC4/IFC4.3 fixtures

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…rs and end-to-end tests

- bcf.rs: deterministic topics (uuid v5), viewpoints with camera, validated against
  official BCF-XML XSDs and bcf-client; issues.csv
- ids.rs: IDS results become rules/findings quoting the requirement; .ids metadata
- qto.rs: grouping by type/storey/classification/material, base quantities first with
  geometry fallback, unit-rate cost estimate, hand-check samples, method text
- report.rs: report.html (self-contained), report.json, failures.csv, qto.csv/xlsx/json
- tests/: workspace package with golden, genericity, determinism, IDS and schema tests
  on real fixtures; deliberately broken IFC4 fixture generated by make_broken.py
- reader: merge geometry by STEP id so duplicated GlobalIds keep their shapes

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…id; add CI workflow

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…date check toggles; honour classification.applies_to

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…to behaviour

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
… metric/imperial, mock fallback

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
- src-tauri: commands inspect_file / run_check / get_element / list_runs /
  validate_config_yaml / list_examples / open_path / read_text_file / save_text_file,
  file logger, capabilities, icons, bundle config (msi/nsis/dmg/appimage/deb)
- crates/cli: check / qto / clash / validate-config / inspect / doctor with exit codes
- examples/demo: generated two-storey pavilion with psets, base quantities,
  Uniclass codes and five documented defects; end-to-end test

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…owledge base, task and converter contracts; logo assets

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…, add release workflow and notes

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1

Grohle commented Oct 17, 2026

Copy link
Copy Markdown
Owner Author

CI status: the Rust tests (core, reader, end-to-end) job is red only at the cargo fmt --all -- --check step. The unformatted files are src-tauri/src/{ops,lib,error,logging}.rs and crates/cli/src/{main,render,error}.rs; all tests and clippy pass locally. The rustfmt fix rides the next push, which also brings the assistant panel and the header/logo work currently in progress on those same files.


Generated by Claude Code

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…assistant Tauri commands and CLI subcommands

- frontend: industrial V/check logo, sticky product header with stepper and toggles,
  Assistant drawer (model download/status, quick actions, filter/explain/config-help
  answers with validation notes, documentation import), 'Load the demo' action
- src-tauri: assistant_* commands with managed knowledge (built-in + imported + report),
  app_info, bundle identifier io.verimodel.desktop, icons regenerated from the logo
- cli: ask, assistant status/download, docs-to-yaml
- rustfmt applied to cli and desktop crates

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
…am with assistant crate

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9A82wxTmgsp2fMa8M4Vw1

Grohle commented Oct 17, 2026

Copy link
Copy Markdown
Owner Author

CI update: rustfmt is now clean. The remaining red is cargo clippy -D warnings on two spots in crates/assistant (manual_range_contains in knowledge.rs, large_enum_variant on Task in tasks.rs); CI's clippy (1.99) is stricter than the local one (1.97). Both fixes are in the assistant backend change that lands with the next push.


Generated by Claude Code

@Grohle
Grohle merged commit 0505846 into main Oct 17, 2026
1 of 2 checks passed
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.

2 participants