Open functions and tasks

State 24.10.2026. Open functions, known gaps and tasks, one section per sub-project; the order within a section is the order of work.

Pointcloud2Revit168 functions 7 gaps 1 taskIFC2Revit127 functions 4 gaps 1 taskPlans2Revit149 functions 5 gapsShared: core, Revit side, agent team2520 functions 5 tasks

Kind: Function a new capability, Gap a known weakness of an existing one, Task testing, decisions and upkeep. Value 1 to 5 (5 = most useful). Effort with an estimate of the active working time (the lead and the agents together) and the new tokens (input, cache writes, output): S about 1 h and 0.5 M tokens, M about 2.5 h and 1.5 M, L about 6 h and 4 M. Calibrated on the measured requests of 15.-25.10.2026 (features page, tools/effort.py); Revit runs count only while someone works on them, the user's own review time is not in it.

Pointcloud2Revit

Scans (E57, PLY, LAS) to levels, walls, openings, floors, stairs and rooms. Code scan2revit/pointcloud/.

KindItemValueEffortNext step
GapApartment scan with floor plan (test 25.10.2026, public sample of a scanner vendor, one storey, 8.9 M points): the outline and the large room fit (58.75 m2 against 60.5 m2 of the vendor's floor plan), but most interior walls are missed although the scan shows them: 2814 wall-face pairs rejected for floor or ceiling points between the faces; the floor spreads 7.8 cm (tilt or scans not aligned), the floor and ceiling bands reach into the walls. In Revit 22 of 25 checks: the rooms are placed but not enclosed5M (~2.5 h, ~1.5 M tokens)partly done (25.10.2026): the rule 'no floor between the faces' now compares with the floor beside the pair for pairs up to 25 cm (noise at a thin wall's foot); apartment 27 -> 43 walls; a real storey against its IFC: wall length found 24.1 % -> 28.5 %, walls without counterpart 13 % -> 15 %, axis median 50 -> 56 mm. Open: rooms still from the free space; floor bands following a tilt showed no effect and were left out
GapCar parks and halls (test 25.10.2026 on a public car park scan, one scan position, 28 M points, 125 x 130 m): the slice route finds wall fragments only (46 pieces, 39 under 1 m), no columns, the room follows the scanner's line of sight; the floor falls 35 cm and comes out as five levels; outer walls 30-40 m from the scanner are thin in points4L (~6 h, ~4 M tokens)columns from scans (with F8), a sloping floor as one level (F12), walls from sparse far points, rooms from the wall and column outline instead of the free space
FunctionLAS / LAZ scans: laspy[lazrs] installed, a chunked reader with the 2 cm voxel thinning (as for E57), input report and slice route on LAS; first test file the Kladno station (6.5 GB, CC BY, test-data-sources.md)3S (~1 h, ~0.5 M tokens)postponed by the user (25.10.2026): LAS ignored for the moment
TaskTwo more test scans (a house, one scan station; an office floor, two stations) are Trimble RealWorks projects (.rwp, scans .rwcx, a closed format): no reader here; needs an E57 export from Trimble RealWorks (Create tzf Scan, then Export E57 structured)3S (~1 h, ~0.5 M tokens)postponed by the user (25.10.2026)
FunctionA4 Scan coverage per storey: share of every wall and of the outline seen, coverage image4M (~2.5 h, ~1.5 M tokens)done (24.10.2026, pointcloud/coverage.py) real project data (details private); open: external scans not counted, arc walls not checked, write the share back into plan.json
FunctionF1 Wall detection on densely partitioned real floors: real project data (details private)5L (~6 h, ~4 M tokens)build on the slice route real project data (details private)
FunctionF16 External parts of the point cloud (pointcloud/facade.py): exterior walls measured, slab outline from the facade ring (closed stepwise), edge on the walls' outer face, courtyards as voids5M (~2.5 h, ~1.5 M tokens)done (24.10.2026), in Revit with the stacked storeys; open: rings where no facade is seen, storeys under the roof and below ground
FunctionF3 Room separation lines where the slice route's rooms have no wall4M (~2.5 h, ~1.5 M tokens)done (25.10.2026): free-space rooms closed by separation lines along their shared edges and the floor outline (shapely coverage_simplify); in Revit an apartment 11 of 11 rooms enclosed (was 0), a real storey 63 of 64 (was about 1); room areas as Revit bounds them. Open: where a face holds two rooms the line between them is missing; areas take in scan shadows (median error against the IFC 27 -> 34 %)
FunctionF13 Stairs and ramps in the voids of the slab regions (steps in thin horizontal slices)4M (~2.5 h, ~1.5 M tokens)–
FunctionF12 Sloped elements: sloped roofs and ceilings, knee walls from the scan; slice route: measured opening heights, one wall from its upper and lower face4M (~2.5 h, ~1.5 M tokens)a third slice or the top of each gap; sloped surfaces from the vertical sections
FunctionF14 Slab outlines with straight, square edges instead of the 10 cm raster (fewer Revit warnings)3S (~1 h, ~0.5 M tokens)done with F16 where an external scan closes the ring; without one still the 10 cm raster
GapGalleries: missed at 3 m section spacing, not built as their own Revit level yet3M (~2.5 h, ~1.5 M tokens)–
GapDoors and windows: few found on real floors3M (~2.5 h, ~1.5 M tokens)after F1
GapStairs: straight runs only; curved walls: circular arcs only2L (~6 h, ~4 M tokens)stairs with landings: F5
GapMemory: large real storeys still take much memory on the full route real project data (details private)2M (~2.5 h, ~1.5 M tokens)slice route by default
GapSlab voids under 5 m2 are not cut2S (~1 h, ~0.5 M tokens)–

IFC2Revit

IFC storeys to native Revit elements, all storeys in one model. Code scan2revit/ifc/ and core/merge.py.

KindItemValueEffortNext step
GapIFC wall pieces assigned to a storey they do not stand in (base offsets of a whole storey up or down): built at their true height they no longer bound that level's rooms4S (~1 h, ~0.5 M tokens)move such pieces to the level they stand on before the build (merge)
FunctionA3 IFC pre-check: what Revit will refuse (degenerate arcs, short pieces, duplicates), fixed where safe, reported4S (~1 h, ~0.5 M tokens)done (24.10.2026, ifc/precheck.py, in the storey route; pieces stacked by base offset, which the Revit side now applies) real project data (details private); open: a few doors Revit refuses with very narrow jambs, partitions under 40 mm reported only
TaskRevit test of the whole real IFC building through pyRevit (0.7)5S (~1 h, ~0.5 M tokens)done (24.10.2026) real project data (details private) ; 25.10.2026 with pre-check, base offsets, slab holes: real project data (details private)
GapIFC: a few walls and their openings Revit refuses ("Wand kann nicht erstellt werden"), doors in curved walls3M (~2.5 h, ~1.5 M tokens)real project data (details private); doors in curved walls placed since 25.10.2026
GapDoors on locked (fire-rated) families keep their size real project data (details private)4S (~1 h, ~0.5 M tokens)F2 (a door family with free size)
FunctionF5 Stairs with landings (IFC flights; also for scans)3L (~6 h, ~4 M tokens)–
FunctionF6 Wall types by the IFC type name3M (~2.5 h, ~1.5 M tokens)–
FunctionF7 Slab holes and openings from the IFC3M (~2.5 h, ~1.5 M tokens)done (24.10.2026): IfcOpeningElement in slabs and inner loops of slab outlines real project data (details private); in Revit: next run of the whole building
FunctionF8 Columns and beams3M (~2.5 h, ~1.5 M tokens)–
FunctionF9 Curtain walls with their doors and windows3L (~6 h, ~4 M tokens)–
GapRooms without IfcSpace: areas off where walls overlap2M (~2.5 h, ~1.5 M tokens)–
FunctionF10 Door swing from the IFC: single-swing doors from the placement (opens towards local +Y) and the operation type (hinge side)2S (~1 h, ~0.5 M tokens)done (24.10.2026) real project data (details private); double doors without swing

Plans2Revit

2D plans to Revit: DXF and vector PDF, raster plans through plan-extract results. Code scan2revit/plans/.

KindItemValueEffortNext step
GapKnee walls under a sloping roof built as wide as the drawn band (thickness and height flagged assumed)3S (~1 h, ~0.5 M tokens)decision D-18
FunctionPlan sheets with several storeys (plans/sheet.py): drawings split, storey labels, ordered bottom first, aligned5M (~2.5 h, ~1.5 M tokens)done on one real CAD sheet (four storeys); a test needs example sheets from the user
FunctionOrientation and scale from the sheet: scale from the title block ("1 : 100") done; turning a sheet whose text is not upright not built yet5S (~1 h, ~0.5 M tokens)a turned sheet as example
FunctionRooms with the data of their stamps: name, unit (Revit "Abteilung"), number storey.unit.nn; a room at every stamp5M (~2.5 h, ~1.5 M tokens)done; in Revit on a real sheet, every check passes (23.10.2026)
FunctionClutter filter: built-in units, sanitary, text masks, annotation; list in the modelling guideline, machine list plans/filters.json4M (~2.5 h, ~1.5 M tokens)done; furniture only implicitly (no wall pairs)
FunctionWalls drawn as filled areas in vector PDFs: wall rectangles, openings where the rendered wall colour is absent, swings from chains of short lines4S (~1 h, ~0.5 M tokens)done
GapRooms on a real sheet not all closed by walls: real project data (details private) after the corner joins, stub and jog fixes and knee walls (24.10.2026)3S (~1 h, ~0.5 M tokens)the open balcony is correct as drawn; in Revit: next run
GapPlan sheets: small symbols drawn in wall colour outside the building became wall stubs; a door beside a window in one gap got only the window3S (~1 h, ~0.5 M tokens)done (24.10.2026): loose groups under 1.5 m outside the outline left out and listed; a window gap with a swing at one end split into door and window
FunctionStorey heights from the elevations sheet (levels and heights instead of the assumed storey height)4M (~2.5 h, ~1.5 M tokens)built (24.10.2026, plans/sheet.py --elevations): level marks of vector elevations or sections; real project data (details private), needs a vector sheet with level texts
FunctionF4 Raster PDF (scanned plan) into Revit: postponed (22.10.2026)4S to L (1-6 h, 0.5-4 M tokens)own reader for filled walls preferred; OCR of room stamps; scale from stamps or dimensions
FunctionHandwritten measurements on a scanned plan (other ink) as checks, kept out of the geometry3M (~2.5 h, ~1.5 M tokens)with F4
Gapplan-extract run locally: blocked, the segmenter model is not public2–only needed for thin-line or sketched plans
Gapplan-extract results: one room the walls do not close; never run on a real result2S (~1 h, ~0.5 M tokens)a real result
FunctionF11 Own raster reader instead of plan-extract3L (~6 h, ~4 M tokens)part of F4

Shared: core, Revit side, agent team

The plan schema, wall geometry, merge, the Revit side through pyRevit 7, the modelling guideline and the agent team. Code scan2revit/core/, tools/, .claude/.

KindItemValueEffortNext step
FunctionRoom tags (Raumstempel) with the area in every floor plan of a room's level, room data of the input (name, number, unit, use, finishes), the rooms' interior fill shown in the floor plans (rule G-9.6)4S (~1 h, ~0.5 M tokens)done (25.10.2026): nine examples 312 of 312 in Revit; the fill is Revit's pale blue on screen, not in prints or image exports
FunctionPoint clouds from Autodesk ReCap (RCP / RCS): link into the Revit copy, read the slices with point cloud filters through pyRevit, on into the slice route3M (~2.5 h, ~1.5 M tokens)needs a test RCP with its RCS from the user
FunctionF25 Deviation analysis: the built model against the scan, per element (signed median, 95 %, LOA share, coverage, verdict pass / fail / not verifiable), missed-element candidates, bias per class, coloured images per storey (deviation-and-review.md 1)5L (~6 h, ~4 M tokens)first: which points to verify against (held-out bands, independent scans, element surface only with normals, clutter out, even thinning, minimum evidence, visible face only, noise baseline)
FunctionF26 Review and correction as one loop: flagged items shown with scan and deviation, a person accepts, moves, changes, deletes or adds, the plan is edited, the stages and checks run again, every decision on the scoreboard (deviation-and-review.md 2); planned agent: review man5L (~6 h, ~4 M tokens)after F25 and the review page F18
FunctionF27 Browser viewer with That Open Company libraries (ifc.js: @thatopen/components, web-ifc): model, scan slices and deviation colours on localhost, for the review loop and the fact review4M (~2.5 h, ~1.5 M tokens)done (25.10.2026, first version): scan2revit/tools/viewer.py serves scan2revit/viewer/ on 127.0.0.1 only: plan (walls, openings, floors, rooms, stairs) per level, scan points in the plan frame with a height band, an IFC through web-ifc (three.js 0.186.1, web-ifc 0.0.78, pinned; MIT / MPL-2.0), colours by kind or measured / assumed, element records on click; open: deviation colours (F25), review cards (F26), IFC properties panel
TaskF28 Meshing: not in the modelling routes (research 25.10.2026, deviation-and-review.md 3); possibly for the viewer and as reference surface of non-planar elements2S (~1 h, ~0.5 M tokens)decision D-24
FunctionF17 Facts from drawings: catalogue of 29 information types from plans, sections, elevations, build-up legends, schedules, site plans into facts.json per project (drawings-and-scans.md)5L (~6 h, ~4 M tokens)the types half built first (scale, storeys, levels, walls, openings, swings, stamps), then sections and labels
FunctionF18 Review page: a person accepts, corrects or rejects every fact at gate 1, crops of the drawing beside each value5M (~2.5 h, ~1.5 M tokens)after F17; decision D-15 (local server)
FunctionF19 Drawings aligned to the scan frame per storey (2D fit of wall axes, person confirms)5M (~2.5 h, ~1.5 M tokens)needs drawings and a scan of the same building from the user; D-14
FunctionF20 Drawn facts as priors in modelling: levels, thickness of one-sided walls, slab thickness, opening heights, room names on scan rooms, drawn walls as hypotheses for the slice route5L (~6 h, ~4 M tokens)after F18, F19; D-4, D-16
FunctionF21 Checker: drawn vs measured for every accepted fact, unused facts listed4M (~2.5 h, ~1.5 M tokens)after F20
FunctionF22 Local LLM helper (local-llm.md): text classification, build-up parsing, raster reading; always proposed facts, checked by code3M (~2.5 h, ~1.5 M tokens)measure speed on this machine, pilot on the plan sheets; D-7
FunctionF23 Build-ups (floor, wall, roof) parsed into layers and thicknesses; slab thickness from them4M (~2.5 h, ~1.5 M tokens)with F17; D-5 (generic types stay)
TaskF24 Agent team phases updated for drawings first (phase 2a, alignment 2c, review at gate 1, drawn vs measured in the check)4S (~1 h, ~0.5 M tokens)planned phases described in agent-team.md (24.10.2026); the agent files follow with F17 to F21
TaskGitHub sources: licence and security check before any skill or code is taken; pinned and listed (github-sources.md)3S (~1 h, ~0.5 M tokens)rule in place; third_party/README.md with the first copied file
FunctionS1 Agent scoreboard: actions, findings, defects found and fixed, gate verdicts and check scores per agent and project, summed up over projects5M (~2.5 h, ~1.5 M tokens)done (24.10.2026, tools/scoreboard.py; every phase records its entry; summary documentation/agent-scoreboard.md, site page agents.html); first real use: the team's next test build
FunctionV1 Rule ids in the modelling guideline, each rule with its Revit check; R2 table rule -> check4M (~2.5 h, ~1.5 M tokens)done (24.10.2026): ids G-0.1 to G-13.4, checks prefixed with their id, new checks G-1.2, G-4.2, G-11.2, G-11.3, table in section 14; open: checks for G-5.2 (wall base and top), G-5.4 (room bounding), G-11.1, G-11.5 (names); decision D-20 for G-11.4
FunctionR1 Rule proposals: agents propose guideline changes in their handover, the project manager collects them, the user approves4S (~1 h, ~0.5 M tokens)done (24.10.2026): handover section, rule-proposals.md, approval by the user
FunctionV2 Comparison with a reference (an IFC of the same building) as a standard checker step, LOA tolerances4M (~2.5 h, ~1.5 M tokens)done (24.10.2026, core/compare.py, in phase check) real project data (details private); open: arcs, stairs, opening heights; IFC linings as walls (--min-thickness)
FunctionV3 Each Revit run compared with the previous one: checks gained, lost, still failing3S (~1 h, ~0.5 M tokens)done (24.10.2026): e2e runs and project checks say what changed since the last run
FunctionA1 Machine-readable input reports for every route (verdict per item)4M (~2.5 h, ~1.5 M tokens)done (24.10.2026, core/inputs.py: pointcloud, ifc with the pre-check, plans); limits are start values (D-21)
TaskUnattended runs: check that the pyRevit agent host answers Revit's failure dialogs like the old add-in4S (~1 h, ~0.5 M tokens)done (24.10.2026) real project data (details private)
FunctionF2 A door and a window family with free size in the blank project (the template)4S (~1 h, ~0.5 M tokens)you: load the families into the template
TaskAgent team: first model built in Revit, phase by phase with its gates4M (~2.5 h, ~1.5 M tokens)the synthetic project first, then a real building
FunctionF15 Modelling guideline: phase "Existing" for every element, a parameter measured / assumed on walls, floors, doors and windows3S (~1 h, ~0.5 M tokens)done (24.10.2026): stage existing, shared parameter scan2revit source; checked by the runner