Repository navigation
VeriModel 1.0.0: IFC QA gate, QTO, BCF export, desktop app, CLI and local assistant - #1
Conversation
- 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
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
|
CI status: the Rust tests (core, reader, end-to-end) job is red only at the 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
|
CI update: rustfmt is now clean. The remaining red is Generated by Claude Code |
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.yamlschema 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.yamlconverter) 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 / infrastructureproject.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.fmt,clippy -D warnings, tests, CLI smoke run, bundles) and a tag-triggered release workflow producing Windows.msi/.exe, macOS.dmg, Linux.AppImage/.deband CLI binaries.Test plan
cargo test --workspacegreen (core 60, reader 8, e2e 10, CLI 15, desktop 19, assistant)cargo clippy --workspace --all-targets -- -D warningscleanbcf-clientand validated against BCF-XML 2.1 and 3.0 XSDscargo tauri build -b debproducesVeriModel_1.0.0_amd64.debv1.0.0Generated by Claude Code