This file decomposes the remaining work required to turn rvt-rs
from a strong research-grade Revit reader into a first-class,
open-source utility that non-technical BIM/AEC users can trust.
The project already has a serious foundation: safe Rust core, bounded
reads/inflate, schema extraction, Python bindings, CLIs, IFC writer
infrastructure, a WASM viewer, and a growing corpus. The main gap is
not polish. The main gap is reliable real-project model extraction:
typed elements, placement, geometry, units, materials, parameters, and
validated exports from actual .rvt project files.
Every task below should become a GitHub issue or a tracked checklist item inside a parent issue. Follow these rules:
- One issue = one independently reviewable change.
- Every issue must include: problem, scope, acceptance criteria, test plan, affected subsystem, and links to source evidence.
- Every PR must link an issue with
Closes #NNNorRefs #NNN. - No PR may claim a capability in docs unless tests or reproducible probes demonstrate it.
- Use draft PRs for reverse-engineering work until a reproducible probe and dated report are included.
- Prefer small vertical slices over broad scaffolding.
- Keep user-facing docs audit-honest: shipped, partial, experimental, and unsupported states must be clearly separated.
- Do not commit proprietary Autodesk implementation code, decompiled internals, NDA material, private project files, or PII.
- Any new corpus fixture must include license/provenance metadata and must pass the corpus validation gate before it is referenced in docs.
- CI must be green before merge unless the PR is explicitly marked
ci-quarantineand only changes CI diagnostics.
Recommended labels:
priority:P0,priority:P1,priority:P2,priority:P3type:bug,type:feature,type:docs,type:test,type:research,type:security,type:releasearea:reader,area:partitions,area:walker,area:elements,area:geometry,area:ifc,area:viewer,area:python,area:cli,area:docs,area:ci,area:corpusstatus:blocked,status:needs-corpus,status:needs-repro,status:ready-for-review
Definition of Done for any implementation PR:
cargo fmt --all -- --checkpasses.cargo clippy --workspace --all-targets --all-features -- -D warningspasses on the supported toolchain.cargo test --workspace --all-targetspasses.- If viewer code changed:
npm run typecheckandnpm run buildpass inviewer/. - If IFC changed: committed synthetic IFC fixtures either remain byte-stable or the fixture diff is documented and independently validated by IfcOpenShell.
- If parsing changed: fuzz regression tests or corpus regression tests cover the new case.
- If docs changed: README, ROADMAP, compatibility docs, Python docs, and release notes agree with source behavior.
Use these gates to decide whether the project is ready for the next public positioning level.
- Local and CI health are clean.
- Docs do not overclaim real-project model extraction.
- Metadata, schema, Python, CLI, and viewer basics work from source.
- Real-project IFC export is described as partial/scaffolded unless the specific element classes are validated.
- At least two licensed real
.rvtproject files produce non-empty typed element output for Levels, Walls, Floors, Doors/Windows, Rooms, Materials, and core parameters. - At least one Revit 2023 and one Revit 2024 project have known element count fixtures and regression tests.
- IFC output from those projects opens in IfcOpenShell and contains typed elements with placements and geometry.
- Viewer shows those projects with correct category filtering, element selection, and export status.
- Non-technical user can open a hosted viewer, drop a supported Revit file, inspect a meaningful 3D/2D model, export IFC/glTF/SVG, and understand any limitations without reading source code.
- The CLI and Python API expose the same model data as the viewer.
- Installation is documented and tested for
cargo install,pip install, and browser usage. - Corpus coverage includes architectural, structural, and MEP projects across multiple Revit versions.
- All unsupported cases fail with clear diagnostics, not silent empty exports.
Labels: priority:P0, type:bug, area:ci
- Run
cargo fmt --all -- --check. - Format the current arc-wall/probe worktree without changing behavior.
- Keep unrelated files untouched.
Acceptance criteria:
cargo fmt --all -- --checkexits 0.git diffshows formatting-only changes for files touched by fmt, unless paired with a separate behavior PR.
Labels: priority:P0, type:bug, area:ci
- Fix the current
clippy::unnecessary_get_then_checkfailure insrc/formats.rs. - Audit for other Rust 1.95 clippy warnings.
- Decide whether CI should pin the MSRV/stable combo or allow newest stable warnings to block merges.
Acceptance criteria:
cargo clippy --workspace --all-targets --all-features -- -D warningsexits 0.- CI toolchain policy is documented in
README.mdorCONTRIBUTING.md.
Labels: priority:P0, type:research, area:partitions
- Review current dirty files:
src/arc_wall_record.rsexamples/probe_arcwall_2024.rsexamples/probe_arcwall_trailer.rsreports/element-framing/RE-13-synthesis.md
- Decide whether they form one PR or should be split.
- Ensure the PR title states exact scope, for example:
research: scope ArcWall decoder to Revit 2023.
Acceptance criteria:
- No untracked research files remain outside an intentional PR.
- If merged, the PR includes a reproducible probe, report, and tests.
- If parked, the files are moved to a branch or issue attachment rather than lingering in the working tree.
Labels: priority:P1, type:feature, area:ci
- Add
tools/check-local.shthat runs the standard local gates: fmt, clippy, tests, docs, and optional viewer checks. - Include flags for expensive checks:
--viewer--corpus--ifcopenshell--deny--audit
- Do not require network by default.
Acceptance criteria:
tools/check-local.shexits non-zero on any failed required gate.CONTRIBUTING.mdpoints contributors to the script.- Script works from repo root and fails clearly when optional tools are missing.
Labels: priority:P1, type:ci, type:security, area:ci
- Decide whether
cargo-auditis required locally or CI-only. - Add installation notes for maintainers.
- Ensure CI still runs the RustSec advisory check.
Acceptance criteria:
CONTRIBUTING.mddocuments how to run advisory checks locally.- CI has a passing advisory job.
- Local absence of
cargo auditis not confused with source failure.
Labels: priority:P0, type:docs, area:docs
- Align claims across:
README.mdROADMAP.mddocs/compatibility.mddocs/python.mddocs/viewer-privacy-posture.mddocs/viewer-build-pipeline.mddocs/demos.mdCHANGELOG.md
- Resolve contradictions around:
- viewer URL/path and shipped status
- 72 vs 80 decoder count
- "walker dispatch table" vs registry not reached on real project data
- corpus hunt "not executed" vs documented 222/223 real-file pass rate
- real IFC export scope
- Python build layout and module name
Acceptance criteria:
- Each public doc uses the same capability table.
- "What works" and "What does not work yet" agree with source and tests.
- Docs explicitly say generic real-project typed model extraction is not solved yet.
Labels: priority:P0, type:docs, area:docs
- Create
docs/status.mdas the authoritative status table. - Include rows for:
- container open
- stream reads
- gzip decode
- schema parse
ElemTableADocument- partition record decode
- per-class decoders
- geometry extraction
- IFC export
- glTF export
- SVG plan export
- browser viewer
- Python API
- write path
- Columns:
- status: shipped, partial, experimental, unsupported
- validated on synthetic data
- validated on family corpus
- validated on project corpus
- user-visible caveat
- primary tests
Acceptance criteria:
- README links to
docs/status.md. - ROADMAP links to
docs/status.mdinstead of restating detailed claims. - Compatibility docs reference it for high-level status.
Labels: priority:P1, type:docs, area:docs
- Replace jargon-heavy first-screen text with concrete user outcomes.
- Clearly separate:
- "Inspect file metadata and schema"
- "Export partial IFC scaffold"
- "Experimental real-wall extraction for limited Revit 2023 cases"
- "Full RVT to BIM model conversion not ready yet"
- Add screenshots or terminal snippets that show both successful and partial outputs.
Acceptance criteria:
- A non-technical reader can tell whether their use case is supported within 60 seconds.
- No phrase implies full Revit replacement unless supported by corpus tests.
Labels: priority:P1, type:docs, area:reader
- Document strict vs lossy APIs.
- Explain "empty model", "scaffold", "proxy", "typed element", "geometry-free element", and "unsupported record layout".
- Include examples of warnings users should see for partial exports.
Acceptance criteria:
- CLI docs and Python docs explain when empty output is success vs partial failure.
- Viewer copy reuses the same terms.
Labels: priority:P0, type:test, area:corpus
- Select a minimal public corpus for CI:
- at least one architectural project
- at least one structural project
- at least one MEP-heavy project
- at least one Revit 2023 project
- at least one Revit 2024+ project
- For each file, add a metadata sidecar:
- source URL
- license
- commit SHA or release archive
- SHA256
- file size
- Revit version
- redistribution notes
Acceptance criteria:
- Corpus can be fetched by a documented script.
- CI can run a smoke subset without proprietary files.
- No committed sample lacks license/provenance metadata.
Labels: priority:P0, type:test, area:corpus, area:elements
- For each curated project, create a known-count manifest:
- levels
- walls
- floors
- roofs
- doors
- windows
- rooms/spaces
- columns/beams where present
- MEP categories where present
- materials
- units
- Source counts from authoritative exports where possible:
- Revit schedules supplied by file owner
- IFC exported by Revit
- manually reviewed schedule screenshots
- contributor-signed manifest
Acceptance criteria:
tests/fixtures/project-counts/*.jsoncontains count manifests.- Tests compare decoded output against counts with documented tolerances.
- Any unknown count is explicit, not silently skipped.
Labels: priority:P1, type:ci, area:corpus
- Tier 1: lightweight open/schema/summary test.
- Tier 2: project model decode count tests.
- Tier 3: IFC/glTF/SVG export validation.
- Tier 4: full slow corpus and benchmark run.
Acceptance criteria:
- PR CI runs Tier 1 and synthetic tests.
- Nightly CI runs all tiers.
- Failures identify file, stage, and subsystem.
Labels: priority:P1, type:feature, area:corpus
- Add
rvt-corpus doctoror extendrvt-corpusto classify failures:- not CFB
- missing Revit streams
- corrupt gzip
- schema parse failure
- unsupported version
- partial walker decode
- empty IFC export
- Emit JSON for issue creation.
Acceptance criteria:
- Maintainer can run one command over a corpus and get actionable buckets.
- Output includes suggested labels for GitHub issues.
Labels: priority:P0, type:bug, area:partitions, area:ifc
- Ensure the current raw
ArcWallRecorddecoder is only invoked for versions/layouts it supports. - Current evidence says Revit 2023 tag
0x0191and variant0x07fashould not be assumed for 2024. - Add explicit version/layout guard before scanning partitions.
Acceptance criteria:
- 2023 Einhoven still yields ArcWall records.
- 2024 Core Interior does not silently run the 2023 decoder.
- Unsupported versions produce diagnostics, not false positives.
Labels: priority:P0, type:research, area:partitions, area:elements
- Use
examples/probe_arcwall_2024.rsor successor probe. - Identify:
- 2024 class tag
- record envelope
- variant markers
- coordinate fields
- element id fields
- type/material/level references if present
- Document findings in
reports/element-framing/.
Acceptance criteria:
- Probe reproduces findings from a known Revit 2024 project.
- New decoder has unit tests and corpus tests.
- False-positive rate is measured against at least one non-wall partition.
Labels: priority:P0, type:feature, area:partitions
- Replace class-specific ad hoc scanning with a versioned scanner.
- Output a neutral
PartitionRecordCandidate:- stream name
- chunk index
- offset
- candidate class tag
- variant/envelope fields
- confidence score
- consumed byte range
- raw excerpt hash
- Keep raw bytes accessible for downstream decoders.
Acceptance criteria:
- Existing ArcWall path can be expressed through the scanner.
- Scanner has a documented confidence model.
- Scanner emits JSON through a CLI/probe for issue attachments.
Labels: priority:P0, type:research, area:partitions, area:walker
- Determine how
Global/ElemTableids map to partition records. - Investigate:
- direct id storage
- chunk-local handles
- content document ids
- cross-stream indexes
- sort order correlations
- Build
ElementId -> PartitionRecordRef.
Acceptance criteria:
- At least one project shows >80% coverage for declared wall ids or a documented reason why not.
- Tests fail if coverage regresses on known corpus files.
- CLI can print declared-but-unlocated ids.
Labels: priority:P0, type:feature, area:elements, area:partitions
MVP class order:
- Level
- Wall / ArcWall
- WallType
- Floor
- FloorType
- Door
- Window
- Room
- Material
- Category
- FamilyInstance
- Symbol
- ParameterElement / AProperty*
Acceptance criteria:
- Each decoder includes:
- wrong-schema rejection
- empty/short input behavior
- synthetic happy-path test
- real corpus test
- mapping from raw record to typed struct
- Decoders produce enough fields to support IFC placement, geometry, material, parameters, and viewer labels.
Labels: priority:P0, type:bug, area:walker
- Current
iter_elementson real projects can produce permissive parent-class hits likeHostObjAttr. - Rework it so production APIs return only validated records by default.
- Keep broad scanning available under an explicit diagnostic/probe API.
Acceptance criteria:
- Production
iter_elementsdoes not return low-confidence parent-only false positives. - Diagnostic scanner can still report candidates for research.
- IFC exporter no longer emits misleading
HostObjAttr-*proxies as user-visible model elements.
Labels: priority:P1, type:feature, area:elements
- Extend decoded elements with:
- source stream
- source offset
- record kind
- decoder name/version
- confidence
- missing required fields
- warnings
Acceptance criteria:
- CLI, Python, and viewer can show why an element exists.
- Low-confidence elements can be hidden by default in viewer/export.
Labels: priority:P0, type:feature, area:reader, area:ifc
- Extract
autodesk.unit.*identifiers from relevant streams. - Map to IFC units:
- length
- area
- volume
- angle
- mass where present
- Preserve unknown unit ids as diagnostics.
Acceptance criteria:
- IFC no longer defaults blindly to millimeters for real files.
- Unit tests cover metric and imperial inputs.
- Real corpus files report their unit assignment.
Labels: priority:P0, type:feature, area:geometry, area:ifc
- Decode wall location curve, base level, top constraint/height, thickness, flip/orientation, and curve type.
- Support initially:
- straight wall
- arc wall
- rectangular extrusion
- Defer complex BRep with explicit diagnostics.
Acceptance criteria:
- Known corpus walls export as
IfcWallwithIfcShapeRepresentation. - Viewer shows walls in correct rough positions.
- Revit 2023 and 2024 wall count tests pass.
Labels: priority:P0, type:feature, area:geometry, area:ifc
- Decode floor boundary loops, thickness, level, and type.
- Export
IfcSlabwith polygon profile extrusion.
Acceptance criteria:
- Known corpus floors export as typed slabs with shape.
- Degenerate or unsupported boundaries are reported, not silently dropped.
Labels: priority:P0, type:feature, area:geometry, area:ifc
- Decode family instance placement, host wall id, width, height, sill height, hand/facing flips.
- Emit:
IfcDoorIfcWindowIfcOpeningElementIfcRelVoidsElementIfcRelFillsElement
Acceptance criteria:
- Known corpus host walls contain openings for doors/windows.
- Door/window counts match manifest.
- Viewer selection shows host relationship.
Labels: priority:P0, type:feature, area:elements, area:ifc
- Decode Level names/elevations from real project files.
- Assign elements to storeys via level references.
- Remove fallback-only
Level 1behavior for files with real levels.
Acceptance criteria:
- IFC storeys match project levels.
- Elements are grouped under correct storey.
- Viewer scene tree groups by actual levels.
Labels: priority:P1, type:feature, area:elements, area:ifc
- Decode Material records.
- Decode wall/floor/roof layer stacks.
- Emit:
IfcMaterialIfcMaterialLayerSetIfcMaterialLayerSetUsage
- Include colors/transparency where available.
Acceptance criteria:
- Material counts match known fixtures where available.
- IFC material associations validate with IfcOpenShell.
- Viewer applies material names/colors.
Labels: priority:P1, type:feature, area:elements, area:python
- Decode instance/type parameter values:
- text
- integer
- double
- length
- area
- volume
- yes/no
- URL
- material
- element id references
- Resolve type-vs-instance override precedence.
Acceptance criteria:
- CLI and Python expose parameters consistently.
- IFC property sets include common parameters.
- Viewer info panel displays them in readable form.
Labels: priority:P1, type:feature, area:geometry, area:viewer
- For unsupported geometry, emit explicit warnings:
- unsupported curve
- unsupported profile
- unresolved host
- missing level
- missing dimensions
- Surface warnings through Rust, Python, CLI, and viewer.
Acceptance criteria:
- Empty geometry is never indistinguishable from successful geometry.
- Exports include a machine-readable diagnostic report.
Labels: priority:P0, type:feature, area:ifc, area:cli
- Add explicit export modes:
scaffoldtyped-no-geometrygeometrystrict
- Default user-facing CLI/viewer mode should warn when output is scaffold-only.
Acceptance criteria:
rvt-ifc --mode strictfails if required real model data is missing.- Viewer labels export quality before download.
- Python exposes the same mode option.
Labels: priority:P0, type:bug, area:ifc
- Do not emit
IFCBUILDINGELEMENTPROXYfor low-confidence scan hits by default. - Allow diagnostic exports to include them with provenance.
Acceptance criteria:
- Einhoven 2023 no longer emits
HostObjAttr-*as normal model elements. - Diagnostic mode can still show them.
Labels: priority:P0, type:test, area:ifc, area:corpus
- For curated real projects, run:
rvt-ifc- IfcOpenShell open
- entity count checks
- spatial hierarchy checks
- geometry presence checks
- material/property checks where supported
Acceptance criteria:
- CI validates at least one real-project IFC fixture in addition to synthetic fixtures.
- Failures show which IFC entity class regressed.
Labels: priority:P1, type:feature, area:ifc, area:cli
- Add
--diagnostics out.jsonto export commands. - Include:
- input metadata
- decoded element counts
- exported element counts
- skipped elements
- unsupported features
- warnings
- confidence summary
Acceptance criteria:
- CLI and viewer can generate/share diagnostics for bug reports.
- Diagnostics schema is documented.
Labels: priority:P2, type:feature, area:ifc, area:corpus
- Build
rvt-ifc-compareor addrvt-ifc --compare. - Compare rvt-rs output against a reference IFC:
- entity counts
- storeys
- bounding boxes
- object names/types
- material counts
- property keys
Acceptance criteria:
- Tool emits JSON and human summary.
- Known divergences are documented and linked to issues.
Labels: priority:P0, type:feature, area:viewer
- Add a status panel that clearly says:
- file opened
- schema parsed
- elements decoded
- geometry decoded
- IFC export quality
- warnings/errors
- Use plain user language.
Acceptance criteria:
- Empty/scaffold-only output is clearly labelled before export.
- Users can open diagnostics for details.
Labels: priority:P1, type:feature, area:viewer
- Add a compact support matrix in the UI:
- supported Revit versions
- supported element classes
- experimental versions/classes
- unsupported cases
- Do not bury this behind docs only.
Acceptance criteria:
- User sees limitations without leaving the app.
- Matrix content is generated from or linked to
docs/status.md.
Labels: priority:P1, type:feature, area:viewer, area:corpus
- Implement demo loading from
docs/viewer-demos.jsonor successor. - Only include redistributable files.
- Add thumbnails, expected decoded counts, and export quality labels.
Acceptance criteria:
- Viewer can load at least one demo without local file selection.
- Demo metadata includes license/provenance.
- Network behavior still complies with privacy posture.
Labels: priority:P1, type:test, area:viewer
- Use Playwright to test:
- viewer loads
- dropzone visible
- demo/sample load path
- canvas nonblank after model load
- category toggles work
- element info panel opens
- export buttons enable/disable correctly
- diagnostics show partial-export status
Acceptance criteria:
- Tests run in CI for viewer PRs.
- Screenshots are captured on failure.
Labels: priority:P2, type:feature, area:viewer
- Keyboard support for file picker, panels, tree navigation, and export buttons.
- Mobile/tablet layout for inspection.
- Color contrast checks.
- Avoid text overflow in panels.
Acceptance criteria:
- Lighthouse or equivalent accessibility checks pass reasonable thresholds.
- Manual keyboard-only smoke test passes.
Labels: priority:P3, type:research, area:viewer
- Evaluate whether a Tauri/Electron wrapper is worth maintaining for non-technical users.
- Compare:
- install complexity
- file size
- privacy
- auto-update
- code-signing burden
Acceptance criteria:
- Decision record under
docs/decisions/. - No desktop wrapper is started until maintenance cost is accepted.
Labels: priority:P1, type:feature, area:cli
- Add or refine a command that gives a non-technical summary:
- file health
- supported/unsupported version
- decoded counts
- export readiness
- warnings
- Consider
rvt inspect file.rvtas a future unified CLI.
Acceptance criteria:
- Output is useful without knowing Revit internals.
--jsonhas stable schema.
Labels: priority:P1, type:feature, area:python, area:elements
- Add Python methods for:
decoded_elements()element_counts()export_diagnostics()write_ifc(mode="strict" | "geometry" | "scaffold")
- Return typed dictionaries or dataclasses with type stubs.
Acceptance criteria:
- Python can reproduce viewer/CLI element counts.
__init__.pyiand runtime API match.- Tests cover every public Python method.
Labels: priority:P1, type:feature, area:cli, area:python
- Define JSON schemas for:
- summary
- schema diagnostics
- element records
- export diagnostics
- corpus report
- Commit schemas under
docs/schemas/.
Acceptance criteria:
- CLI JSON output validates against schemas.
- Python docs link to schemas.
Labels: priority:P1, type:release, area:python, area:cli
- Verify and document:
cargo install rvtpip install rvt- source build with
maturin - viewer static deployment
- Add smoke tests for published artifacts where feasible.
Acceptance criteria:
- Fresh-machine install instructions are tested.
- Release checklist includes post-publish verification commands.
Labels: priority:P0, type:security, area:reader
- Audit all public parsing entry points for panics on adversarial input.
- Expand fuzz regression tests for any path with indexing/slicing.
- Add
RUST_BACKTRACE=1repro notes for security reports.
Acceptance criteria:
- Fuzz regression suite covers all public byte parsers.
- Any panic found gets a minimized regression input.
Labels: priority:P1, type:security, area:walker
- Ensure brute-force scans have configurable limits:
- max scan bytes
- max candidates
- max trial offsets
- max per-record decode bytes
- Apply limits in CLI, Python, and WASM.
Acceptance criteria:
- Crafted large files cannot trigger unbounded candidate scanning.
- Limit hits return diagnostics.
Labels: priority:P1, type:test, area:ci
- Define budget targets for:
- open
- summarize
- schema parse
- element decode
- IFC export
- viewer parse/render
- Track against small, medium, and large corpus files.
Acceptance criteria:
- Benchmarks emit machine-readable results.
- CI or nightly flags regressions above threshold.
Labels: priority:P1, type:security, area:ci
- Keep
cargo deny checkgreen. - Keep RustSec advisory checks green.
- Review JS viewer dependencies separately with npm audit or a documented alternative.
- Pin or justify GitHub Actions versions.
Acceptance criteria:
- CI covers Rust and viewer dependency checks.
- Any ignored advisory has an issue, rationale, and expiry.
Labels: priority:P1, type:security, area:viewer
- Keep WASM import audit.
- Add browser network test:
- load viewer
- open sample/demo
- assert no network calls after initial static assets
- Document any allowed requests.
Acceptance criteria:
- Privacy posture is tested, not just documented.
- Network failures include request URL and initiator.
Labels: priority:P1, type:test, area:writer
- Expand stream patch tests for:
- grow
- shrink
- multi-stream
- missing stream
- corrupt gzip
- unchanged identity patch
- Confirm GUID/history preservation behavior.
Acceptance criteria:
- Tests cover real family and project fixtures.
- Docs distinguish byte-preserving copy, stream patching, and semantic editing.
Labels: priority:P2, type:research, area:writer
- Draft design for field-level edits:
- supported field types
- transaction model
- validation
- backup/atomic write
- Revit-openability checks
- Do not implement user-facing semantic writes until reader coverage is strong enough to avoid corrupting files.
Acceptance criteria:
- ADR documents risks and proposed API.
- Any prototype is behind an explicit experimental feature.
Labels: priority:P3, type:research, area:writer
- Define how to validate modified files without requiring every contributor to have Revit.
- Explore:
- community validation volunteers
- self-hosted Windows runner with licensed Revit, if legally allowed
- checksum/structural invariants as partial substitute
Acceptance criteria:
- Documented decision on whether Revit-in-the-loop validation is in scope.
Labels: priority:P0, type:project-management
- Create milestones:
0.2.0: audit-clean alpha0.3.0: real-project wall/floor MVP0.4.0: IFC geometry beta0.5.0: viewer beta1.0.0: first-class utility
- Link issues from this TODO to milestones.
Acceptance criteria:
- Every P0/P1 task has a GitHub issue.
- Milestones have due criteria, not arbitrary dates.
Labels: priority:P1, type:docs, area:github
- Add
.github/ISSUE_TEMPLATE/element_decoder.yml. - Fields:
- Revit class
- target Revit versions
- corpus file
- source stream/offset evidence
- expected IFC mapping
- test plan
- clean-room source declaration
Acceptance criteria:
- New decoder requests arrive with reproducible evidence.
- Template links to
docs/extending-layer-5b.md.
Labels: priority:P1, type:docs, area:github, area:corpus
- Ensure corpus issue form requires:
- file license
- redistributability
- Revit version
- file size
- SHA256
- expected contents
- whether PII has been reviewed
Acceptance criteria:
- Corpus submissions are legally triageable without back-and-forth.
Labels: priority:P2, type:docs, area:docs
- Add
docs/contribution-map.md. - Separate tasks for:
- new contributors
- Rust parser contributors
- BIM/IFC experts
- reverse-engineering contributors
- documentation contributors
- UI contributors
Acceptance criteria:
- Contributors can find a suitable task without reading the entire roadmap.
Labels: priority:P1, type:release, area:ci
- For each release, verify:
- crate installs
- Python wheel installs/imports on Linux/macOS/Windows
- CLIs run on a sample
- viewer build artifact loads
- docs.rs builds
- Record output in release notes.
Acceptance criteria:
- Release checklist has exact commands.
- Failed verification blocks release publication or triggers hotfix.
The smallest release that creates meaningful value for real industry users should target this vertical slice.
Labels: priority:P0, type:feature, area:product
- Define a narrow support statement:
- Revit versions: choose exact versions based on corpus, likely 2023 and 2024 first.
- File types:
.rvtproject files first;.rfafamily support remains metadata/schema unless elements are validated. - Disciplines: architectural core first.
- Classes: levels, walls, floors, doors, windows, rooms, materials.
Acceptance criteria:
- Support statement is in README and viewer.
- Unsupported files produce clear diagnostics.
Labels: priority:P0, type:feature, area:product
Workflow:
- User opens viewer.
- User drops a supported
.rvt. - Viewer parses locally.
- Viewer shows levels and model elements.
- User can click wall/door/window/room and inspect fields.
- User can export IFC.
- IFC opens in IfcOpenShell/BlenderBIM with typed geometry-bearing elements.
- User can export diagnostics for bug reports.
Acceptance criteria:
- Playwright test covers the workflow with a demo fixture.
- CLI and Python can reproduce the same decoded counts.
- README has a short "supported MVP workflow" section.
Labels: priority:P0, type:feature, area:product
- For unsupported inputs, show one of:
- unsupported Revit version
- supported file but unsupported model layout
- corrupt file
- partial decode
- scaffold-only export
- parser bug, please report
- Include a diagnostics download button.
Acceptance criteria:
- No user gets an apparently successful empty export without a warning.
- CLI exits non-zero in strict mode for unsupported real-model export.
Labels: priority:P1, type:docs, area:docs
- Add
docs/user-guide.md. - Include:
- what the tool does
- what stays private
- how to open a file
- how to export IFC
- how to understand warnings
- what file types/versions are supported
- how to report a bad file
Acceptance criteria:
- User guide is linked from viewer, README, and release page.
- It avoids implementation jargon unless a term is explained.
These should not block the MVP unless a real user need moves them up.
- Revit link resolution across host and linked models.
- IFC2X3 and IFC4.3 output modes.
- Type instancing through
IfcRepresentationMapfor all repeated families. - Detailed MEP route geometry.
- Annotation/sheet graphics.
- Worksharing/cloud model semantics.
- Semantic
.rvtwrite-back. - Desktop wrapper.
- buildingSMART certification tool integration.
Last local audit basis: 2026-04-25.
Observed local checks:
cargo test --workspace --all-targetspassed.cargo check --lib --features wasm --no-default-featurespassed.npm run typecheckinviewer/passed.npm run buildinviewer/passed with a bundle-size warning.cargo deny checkpassed with allowlist warnings.cargo fmt --all -- --checkfailed due formatting drift in the current worktree.cargo clippy --workspace --all-targets --all-features -- -D warningsfailed on current Rust due one lint insrc/formats.rs.cargo auditwas not installed locally.
Observed model extraction state:
Revit_IFC5_Einhoven.rvtgeneric walker: 9HostObjAttrcandidates.Revit_IFC5_Einhoven.rvtArcWall path: Revit-2023-specific wall records emitIFCWALLentries, currently geometry-free.2024_Core_Interior.rvt: IFC scaffold only; no typed elements.
Do not use this snapshot as a substitute for current CI. Re-run checks before closing any issue.