What Is Left: Roadmap¶
Sole author: Independent Research. Open data, open source.
This is the consolidated, deduplicated, and prioritised list of open work, merged from the per-chapter "Status and what's left" sections of all fifteen chapters and the licensing register. Items are graded blocker / high / medium / low and tagged by subsystem. Each carries a single-line action. The grade reflects what blocks a public or commercial release, not difficulty.
Honesty note. Several "what's left" items are honesty constraints, not defects: a stated boundary on a claim (for example, the outline-only density boundary against the reference physics nester). These are listed so the claim boundary is preserved, not because the code is wrong.
Blockers — must resolve before a public or commercial release¶
| Subsystem | Item | Action |
|---|---|---|
| Licensing (E1) | Kintsugi / PuzzleFusion++ is NON-COMMERCIAL, not plain GPL; covers the ported C# and the ~255 MB kintsugi.bin weights. |
Keep Kintsugi as a separately distributed, optional, research-only package outside the default install; verify root LICENSE, port README, and any repo-root statement say research-only non-commercial, not plain GPL. |
| Licensing (RESOLVED 2026-06-15) | Root LICENSE is now full canonical GPL-3.0 text; the dist links Kintsugi.Port (research-only). | DONE. |
| Licensing (spec 16, PARTIAL 2026-06-15) | THIRD_PARTY_NOTICES.md now exists (BFF, CGAL, GMP, Geogram, CoACD, Bullet, Clipper2, NTS, PuzzleFusion++, csg.js). STILL OPEN: SuiteSparse / OpenBLAS / libgfortran rows for the static BFF exe; docs/index/frahan_reference_register.md not yet created; per-file SPDX headers on copied source. |
Add the remaining notice rows + create the reference register before external review. |
High — correctness or canvas-reachability defects¶
| Subsystem | Item | Action |
|---|---|---|
| Quarry / GPR | RecoveryCascade has no GH consumer; FractureBlockPack ships a duplicate self-contained recovery engine, so the validated Core cascade is unreachable on canvas (silent-disagreement risk). |
Refactor FractureBlockPack to call the validated Core RecoveryCascade (facade-not-fork); retire the duplicate engine and add a shared-call-path regression. |
| Masonry / CRA | AdmmQpSolver cold-start degrades steeply past ~50 contact interfaces (54-iface 5.4 s, 147-iface 86 s), so wall-scale equilibrium does not converge in interactive time. |
Keep the LS-first KKT certificate in MasonryStabilityChecker, add warm-start / per-element verification for large mixed assemblies, and benchmark conditioning to 300 interfaces; document per-element as the wall-scale pattern. |
| Edge-Matching | Independently tessellated shard rims yield zero cross-panel hash hits (self 172, cross 0, ProjectionPairFinder.cs:16-22); the geometric 3D path assembles only via the projection bootstrap, which leaves some MST interfaces loose (2 of 5 fully in contact). |
Treat the learned Kintsugi Port as the production 3D path; for the geometric engine, replace independent tessellation with a shared-rim resampling so cross-panel hashes hit. |
| Mesh | No native DLL in the default install: every CGAL and Geogram operation (boolean, segment, skeleton, remesh, reconstruct) is unavailable until the user builds frahan_cgal / frahan_geogram from native/; the default experience is managed BSP CSG plus Rhino-side repair only. |
Ship a build or fetch step for the native shims (the licence mitigation stays, but document the capability gap and fetch path clearly). |
| Mesh / Lab (E6) | TetGeogram and volumetric Voronoi blocks wrap Geogram's TetGen path, AGPL and ON by default in the geogram build. |
Build the geogram shim with -DFRAHAN_WITH_TETGEN=OFF for any AGPL-free packaging; a packager turning on the shims must honour the flag. |
| Fabrication / Quarry | The georeferenced bed-following recovery of example 08 has no shipped physical-marking component: the math (GeoreferenceMath) closes the scan-to-world transform but no GH node turns the oblique cut planes into a georeferenced marking output. |
Ship the physical-marking GH component that consumes the oblique cut planes and the Horn fit to mark the real block. |
Medium — partial implementations, attribution, and scale-invariance¶
| Subsystem | Item | Action |
|---|---|---|
| 2D Nesting | Standalone greedy Trencadis box (F2D00002) is a skeleton returning empty; a ghost on the primary ribbon violates AGENTS.md §6. |
Either implement the greedy pack or move the box off the primary ribbon; route users to Catalog (F2D00007) / Pipeline (F2D00009). |
| 2D Nesting | Deployed .gha can lag current source on live 2D solves (KB-7); an old build may overlap parts where current source does not. |
Rebuild and redeploy the .gha before trusting any live 2D result; gate release on a live zero-overlap check. |
| 2D Nesting | The fold-FreeNestX-into-HoleNest port (eight UI features, then hide) is decided but not landed; the plugin ships two NFP nesters and FreeNestX's shipped path runs no concave-overlap verify (KB-4). | Port FreeNestX's eight unique UI features into HoleNest, then mark FreeNestX [Obsolete] + Exposure=hidden with its GUID preserved. |
| 3D Packing | Heightmap citation inconsistency: Pack3DMeshHeightmapComponent labels the mesh-pile method "Frahan-original" while Pack3DIrregularContainerComponent attributes the same method to "Park and Han 2024" ([R8], no DOI, placeholder). |
Reconcile the two attributions before external review. |
| 3D Packing | Settle 3D needs libbulletc.dll beside the .gha; it ships in install/plugin/ but is absent from a source-only build (component warns and does nothing without it). |
Document the native dependency and bundle/fetch libbulletc.dll with the deploy. |
| 3D Packing | The compactness gain over the heightmap baseline is ~1.05 to 1.15x, not the original 2x target. | Keep the mesh-accurate-port item open to push past ~35% with active void-insertion; report the delta as modest, not 2x. |
| 3D Packing / Slab | The default SlabCutByFractures path is exact for convex slabs only and explodes combinatorially on large slabs with many planes; non-convex or large work needs the opt-in CGAL backend. |
Document the convex-only limit and route non-convex / large cuts through the CGAL backend. |
| Quarry | BlockCutOptOmniSolver coarse-to-fine is a stub: both UseCoarseToFine branches run the fine-step uniform sweep (worst-case wall clock). |
Implement the true coarse-to-fine Pareto sweep; until then, document the flag as a no-op. |
| Quarry | I13 (Tian 2025 multi-model joint generator) is proposed only; I14 (Zhang et al. 2024 composite multi-convex block) is partial. 12 of 14 improvements shipped. | Ship I13 and complete I14, or mark both explicitly as future work in the README. |
| Quarry | Bed-bounded hexahedra and the flat/oblique cost/volume/balanced frontier live in example generators, REPORTED not gated. | Promote the bed-bounded hexahedra fix and the frontier metric into a Core class with a unit-test gate. |
| GPR | .gsf (Geoscanners AKULA) is read-only via conversion; any dataset shipping only .gsf cannot enter the pipeline without a manual GPRSoft/RGPR export to SEG-Y. |
Keep the bridge-not-guess dead-stop; document the conversion path (blocks a real Tamil Nadu charnockite path). |
| GPR | Literature-default presets (granite frequency family, travertine/andesite/limestone) carry paper velocities but extrapolated filter windows; only marble_600 and granite_160 are IsEmpirical=true. |
Validate the remaining presets end-to-end, or keep the IsEmpirical warning prominent. |
| GPR | Multi-channel GSSI .dzt (rh_nchan > 1) is read as a single concatenated stream; companion MALA .cor/.mrk GPS markers are parsed but not written to GprTrace.X/Y (trace geometry is a straight line). |
De-interleave multi-channel DZT and apply MALA marker positions when a multi-channel / marked file appears. |
| Surface Packing | PackOnSurfaceComponent.cs:41 mis-credits Floater 2003 MVC; the lift is plain barycentric (Cramer's rule), confirmed by the SLM card. |
Soften the attribution to the mean-value-coordinate family (after Floater 2003) or replace with a classical barycentric citation; the shipped math is correct, only the attribution is wrong. |
| Surface Packing | A single global chart scale s mis-sizes parts on conformal charts where the local conformal factor e^u departs from the perimeter-weighted average. |
Add per-face / per-cone-patch scale plus adaptive re-cut driven by ChartFlatnessReport. |
| Surface Packing | BarycentricMapper2DTo3D inverse map is an O(P·F) linear scan, author-stated ceiling ~2000 faces. |
Add an RTree over flat-face bounding boxes to make the lift O(P log F). |
| Surface Packing | ChartDistortionAnalyzer edge-stretch metric cannot detect BFF foldovers (scalar lengths ignore orientation sign). |
Add a per-face signed-area sign test (flag M3). |
| Surface Packing | Tolerance system unreconciled and units undeclared: four absolute epsilons plus a 0.01 sampling tolerance, none scaled to chart size; at m-scale the 1e-6 containment eps drops valid boundary points and returns a null curve. | Route all surface-packing tolerances through the scale-relative budget; record the model unit in FrahanSurfaceChart. |
| Masonry / CRA | The alternating-convex CRA certificate is sound only in the certifying direction; "not certified" can be a false negative on the non-convex CRA NLP (CraStabilityChecker.cs:45-49). |
Document the verdict as conservative: stable claims are sound, unstable claims are conservative; do not assert sharpness. |
| Masonry / CRA | The J interlock metric, the Coursing-morph continuum, and the Lambda imposition formalisation are A-candidate originality claims; AGENTS.md §9 forbids "novel" without a completed sweep (Legakis et al. 2001 is the closest known prior). |
Run the targeted prior-art sweep before any external novelty claim. |
| Edge-Matching | BlockPairMatch3DComponent.cs:43-45 declares the VSA face partitioner a Frahan stub; real stone-to-cell work routes to the Hungarian Stone-Cell Match via [RelatedComponent] (:41). |
Either implement the VSA partitioner (Cohen-Steiner 2004) or keep the honest stub-plus-redirect and mark it future work in the README. |
| Edge-Matching | The per-facet projection bootstrap, antiparallel SE(3) lift composition, and 3D-disposes verification gate are original-research A-candidate; the prior-art sweep has not been run. | Run the targeted prior-art sweep per AGENTS.md §9 before asserting novelty. |
| Kintsugi | AutoAgglomerate outer loop is a skeleton: the per-round merge body is stubbed; the shipped path is the single-round denoise-then-verify, not the iterative paper schedule. |
Implement the per-round merge / point-match-deletion / FPS resample, or document the single-round path as the shipped behaviour. |
| Kintsugi | Manual C# denoiser drifts ~3-5% from the libtorch kernels; the TorchSharp path removes it but needs LibTorchSharp.dll + a working libtorch, with a documented silent-fallback. |
Surface the fallback prominently; bundle/fetch the libtorch path for paper-exact runs. |
| Kintsugi | Port mode reassembles reliably only on Breaking Bad-like fractured-scan fragments; synthetic primitives and smooth rims under-place (honesty bound). | State the distribution-only generalisation; keep the geometric path the safe default on clean rims. |
| Mesh | No managed fallback for OBB / skeleton / partition / segmentation: these are CGAL-only and throw when the shim is absent. | Add a managed fallback or document the CGAL-only requirement for these operations. |
| Licensing (E2) | xBIM is CDDL-1.0, distribution-incompatible with GPL-3.0. | Move to the licence-clean GeometryGymIFC path (HITL ruling), or use an out-of-process IFC writer. |
| Licensing (E5) | BestFitInventoryPacker.cs:26-29 and the Masonry facade BestFitPackComponent.cs:30 cite a non-existent "Gramazio/Kohler/Eichenhofer 2017 CAD paper"; the Core lineage is correctly Furrer 2017 / Johns 2020. |
Correct both [Algorithm] attributes to Furrer/Johns before external review. |
| Licensing | Stale Kintsugi [Algorithm] attribute still reads "Full GPL-3.0 honest port ... underway / NO learned model" (KintsugiAssemblyComponent.cs:62-68), describing a pre-port state. |
Correct the attribute to match the ledger (learned port landed, licence non-commercial) before academic review. |
| Fabrication | Wire-saw v1 is planar only: kerf compensation is skipped on a non-planar cut curve (warned); curved-surface, variable-tension, bidirectional are backlog. The robot-mounted diamond-wire workflow remains research-grade. | Add curved-surface ruled-decomposition planning; keep the research-grade caveat. |
| Fabrication | Carving Stages input order is load-bearing: reordering the inputs breaks canvases saved against the proven layout (the v2 regression); heavy scans must be decimated before carving (KB-1/KB-2). | Keep the input order frozen and the synchronous-cached design; document decimate-first. |
| Ingestion | E57 worker is an external dependency (python + pye57 + numpy + frahan_e57_worker.py beside the .gha); if any is missing the component reports the failure but cannot read the file. |
Document the runtime dependency and a fallback (convert to PLY/LAZ) for installs without python. |
Low — perf limitations, bounded residuals, and honesty boundaries¶
| Subsystem | Item | Action |
|---|---|---|
| 2D Nesting | Example 28 (hole nest) ships no rendered figure and no README; the CNH renders borrow examples 10 and 12. | Add a HoleNest-specific capture and README so the hole-aware lane is shown directly. |
| 2D Nesting | Rect shelf fast-path only activates at spacing == 0; spacing > 0 defers to the general engine. |
Add exact rect-dilation bookkeeping for spacing > 0; perf limitation, correct fallback already exists. |
| 2D Nesting | Residual penetration band (~2e-5 caller units) can be accepted after the compound gate; deeper ones cannot on any path. | Document the bounded residual in the claim; it is far inside the fabrication budget but is not a zero guarantee. |
| 2D Nesting | Outline-only strip density still trails the reference physics nester by 6-10%; CNH's win is the hole-aware lane only. | Preserve this boundary in any external claim (honesty constraint, not a defect). |
| 3D Packing | Bullet settle is non-deterministic (a physics simulation, not a search); re-runs can differ, one stone may hang mid-drop. | Document the non-deterministic settle as expected behaviour. |
| 3D Packing | Heightmap proxy is a conservative vertical-column test on envelopes, retained as the validated baseline; the components route users to Settle 3D and Block Pack (Tree) as the evolved paths. | Keep the proxy as baseline; no fix needed, by design. |
| Quarry | Kerf volume is a film approximation A_xy·k/2, not exact inter-cell kerf; recovery denominator is approximate. |
Refine to exact inter-cell kerf alongside the sub-division work (documented Phase-1). |
| Quarry | RecoveryCascade header originality wording (E9): formerly self-labelled "novel", now softened to the Murugean 2026 BoEGE cite. |
Complete the prior-art sweep per AGENTS.md §9 to confirm the A-candidate status. |
| Quarry | RecoveryCascade AabbOf child region is exact only for psi-only oriented blocks; a fully tilted pose feeds a slightly loose axis-aligned bound (conservative, never drops a real block). |
Tighten the child bound for tilted poses, or keep the conservative bound documented. |
| Quarry | Example 08 marble GPR data is CC-BY-NC-ND (research/testing only). | Do not use the flagship marble study in commercial product demos; swap to a CC-BY dataset for any commercial demo. |
| Quarry | Extraction Order Optimizer is self-declared Frahan-original without a prior-art sweep. | Run the prior-art sweep (A-candidate) per the originality framework. |
| GPR | Example 3 ships a radargram PNG plus the .gh canvases but no rendered fracture-pick / 3-D surface figure; marked pending live regeneration. |
Regenerate the example with a shaded fracture-surface capture. |
| GPR | Reconstruction path needs native shims (geogram / CGAL); the default install has no reconstruction and falls back to loft-only surfaces. | Keep the managed loft path as the default; document the shim requirement for cloud reconstruction. |
| Voussoir | Funicular form-finding is external (the arch supports a true catenary intrados, but the pendentive generator is the closed-form sphere only); the ThrustCurve field is unpopulated. |
Route a general form-found shell through the compas-RV reference pipeline; document the scope boundary. |
| Voussoir | Faceted cells by construction (straight-chord facets, O(1/N²) error); no equilibrium check inside the tab; adjacency graph not auto-built by the factory; example READMEs cite Sakarovitch / Galletti / Hooke not yet keyed (Hooke now keyed in 99_references.md). |
Raise count for accuracy; wire the assembly into Masonry Stability for a verdict; emit station/grid adjacency losslessly; finish keying the remaining stereotomy-history cites. |
| Surface Packing | Far-from-origin (UTM-scale) charts lose ~4 mantissa decimals because OBJ is written at raw world coords G10 with no recenter (flag T1). | Recenter to the bbox centroid before OBJ write and undo after the inverse map. |
| Masonry / CRA | Stale audit note E4: a prior digest claimed the shipped RBE verdict still wires the sign-buggy RbeQpFormulation.Build; current source uses BuildPhysicsCorrected (MasonryStabilityRbeComponent.cs:305). Legacy Build survives only for sign-pinning unit tests. |
Mark the legacy Build [Obsolete] to prevent future mis-wiring; the note is stale, not an active bug. |
| Masonry / CRA | PolygonalMasonrySequence3DComponent (C5F18B4D) overlaps BlockBuildOrderer (3D contact-support DAG); two sequencers for one job. |
Merge to a single 3D sequencer (documented architecture candidate). |
| Masonry / CRA | examples/02_masonry_assembly ships .gh + .3dm only, no PNG; the assembly colour/order sequencing figure cannot be embedded. |
Add a rendered PNG capture so the assembly-sequencing figure is embeddable. |
| Edge-Matching | Three duplicate absolute-orientation kernels (Horn quaternion in RigidTransformRecovery, the Georeference private Horn, and SVD-Kabsch in ConstrainedIcp3D/SoftIcpRefiner) solve the same rigid fit by two routes. |
Unify on one MathNet-SVD kernel; both routes are correct, so this is a refactor not a bug. |
| Edge-Matching | The [Algorithm] at EdgeMatchSolveComponent.cs:25 names "Phase correlator FFT" while PhaseCorrelator.cs:29-34 is direct O(n²) circular L1 correlation, not an FFT. |
Reword the attribute to "direct cross-correlation" to avoid implying a frequency-domain implementation; the code is correct and deterministic. |
| Mesh | CGAL/geogram shim wrappers live on the Lab subcategory while Repair/Diagnostics/Sanitize/Close Holes/Scan Reconstruct are on Mesh; a UX inconsistency, not a code fault. |
Reconcile the tab split, or document the Lab-vs-Mesh placement rationale. |
| Mesh / Lab | DecimateGeogram / DecimateCgal redirect to Mesh Repair because there is no production decimate component yet (the lab-not-an-island redirect is satisfied but a production node is missing). |
Promote a production Mesh Decimate out of Lab. |
| Lab | Retired RepairAuto (F2D000D0) is [Obsolete] + Exposure=hidden, superseded by Sanitize Mesh (Backend=Auto), GUID preserved (hide-not-delete done correctly). |
No fix; documented as correct supersession. |
| Reports / Analysis | ChartFlatnessReport feeds only the audience terminal today; the Reports and Analysis tabs ship no dedicated example folder (figures borrow example 09). |
Drive an adaptive per-face surface re-cut from the flatness classifier; add a Reports/Analysis example capture. |
| Fabrication | G-code parser subset: v1 supports G00/G01/G02/G03/G17/G20/G21/G90 plus F S M N; G91 incremental and G18/G19 non-XY arc planes are parsed but flagged, not solved. |
Extend the solved subset, or keep the graceful warnings (not failures). |
| Fabrication | Robot adapters depend on third-party plugins (KUKAprc paid-tier; visose/Robots installed separately, Robots.dll not bundled). |
Decide the packaging; document the external-plugin dependency. |
| Fabrication | Fit-in-block is axis-aligned: v1 matches sorted extents largest-to-largest; a sculpture fitting only in a tilted orientation reads as not fitting. | Add an OBB-exact orientation search. |
| Fabrication | Example 05 (artist pointing machine) ships the carving .gh + light .3dm only, no PNG; figures borrow examples 04/24/25/08. |
Add a rendered carving-stages capture. |
| Ingestion | Vector readers do not reproject: output curves stay in source-CRS units (Loviisa EUREF_FIN_TM35FIN), GeoJSON carries no CRS. Correct (no silent datum error) but pushes reprojection onto the user. |
Document the no-reproject posture; offer an opt-in reprojection helper. |
| Ingestion | No .las/.laz canvas reader validated end-to-end in Rhino on the 357M-point tile; .laz ingest is routed through the harness laszip.net.dll. |
Run a live in-Rhino validation of the LAS/LAZ component on the large tile (the remaining truth-criterion step). |
| Architecture | Four README-less canvases (examples 01, 02, 03b, 28) ship .gh + .3dm with no README and no rendered PNG; their pipeline graphs are read from the canvas. |
Author READMEs and render PNGs for the four canvases. |
Priority order (top to bottom)¶
- Resolve the Kintsugi non-commercial split and the root LICENSE (E1, blocker). This is the single item that gates any public or commercial release; everything ships under the wrong terms until it is correct.
- Add
THIRD_PARTY_NOTICES.mdand the reference register (spec 16, blocker). Required before external review; cheap to author, mandatory to ship; covers BFF, csg.js, NTS, laszip.net, pye57, and the numeric stack. - Make
RecoveryCascadethe on-canvas engine; retire theFractureBlockPackduplicate (high). Removes a silent-disagreement risk and makes the validated cascade reachable. - Hold the line on the two 3D-path boundaries (high). CRA equilibrium does not converge interactively past ~50 contact interfaces (warm-start / per-element verification needed); the geometric 3D reassembler only assembles via the projection bootstrap because independent tessellation kills cross-panel hashes (the learned Kintsugi Port is the production 3D path). Both must be stated, not papered over.
- Remove the ghost greedy Trencadis box and rebuild/redeploy the
.gha(medium). Two §6 canvas-honesty fixes: no empty-output node on the primary ribbon, no stale build overlapping live parts. - Correct the fabricated and mislabelled citations (E5 / Floater / FFT / stale Kintsugi attribute, medium). Fix the BestFit "Gramazio 2017" attribute to Furrer/Johns, soften the Floater-2003 MVC credit on the barycentric lift to the mean-value-coordinate family, reword the "Phase correlator FFT" attribute to direct cross-correlation, and correct the pre-port Kintsugi attribute; all required before any external review under §9.
Research-led future directions (added 2026-06-14)¶
From the field-to-factory site-visit package and the computational-gemology
synthesis (research wiki: krishnagiri_granite_field_to_factory/ and
computational_gemology_robotic_granite_fabrication.md). These are new
capability directions, not defects in shipped code.
Near-term — the photogrammetry-cloud -> discontinuity bridge¶
Frahan already has the Load E57/LAS/PLY cloud readers, the NTS vector reader, and
the GPR FractureExtractor. The gap is turning a UAV/TLS point cloud into joint
sets. The field report's pipeline is Metashape/DJI Terra/Pix4D -> CloudCompare +
FACETS/Compass/DSE -> fracture traces (DXF/GeoJSON/CSV) -> Frahan.
| Subsystem | Item | Action |
|---|---|---|
| Ingestion | No reader for CloudCompare structural output (FACETS facets, Compass traces/planes, DSE sets). Cheapest win. | Add a fracture-trace ingest that reads DXF/GeoJSON/CSV planes + traces into the fracture model, beside the Shapefile reader + GPR picks. |
| GPR / Mesh | ~~No in-Frahan facet extraction~~ LANDED 2026-06-14: Discontinuity Sets (Cloud) (D5F10047) region-grows planar facets (FACETS, Dewez 2016) with dip/dip-direction. |
Optionally expose the facet primitive separately and add the convex facet polygon (alpha-shape) contour. |
| Quarry | ~~No discontinuity-set + spacing summary~~ LANDED 2026-06-14: same component clusters poles into joint sets by antipodal mean-shift (DSE, Riquelme 2014) + reports normal spacing. Validated on the Tongjiang quarry-face cloud (4 sets, 16.6 s/140k). | Add the Jv / wJd block-size proxy and a stereonet report card. |
| Reports / Analysis | No structural-geology summary card. | Add a stereonet + joint-set / spacing report card (Lab/Reports tab). |
| Ingestion | The manual-mapping-calibrates-the-cloud audit step is unmodelled. | Add a scale/registration QA that aligns scanline measurements to the cloud (manual-vs-digital audit). |
Prerequisite already tracked in Low: the LAS/LAZ canvas reader live-in-Rhino validation on the large tile.
Frontier — robotic granite fabrication (diamond-planning analogue)¶
Scientifically grounded but production-unproven; treat as R&D, not v1.x.
| Theme | Item | Evidence posture |
|---|---|---|
| Sensing | Nonlinear-ultrasonic cleavage-plane (rift / grain / hardway) mapping — augment linear US with the acoustic nonlinearity parameter beta. | Granite study shows beta more sensitive than velocity/attenuation; production-scale tomography not yet routine. |
| Closed loop | AE + spindle power/current + force supervisory control for wire-saw / robotic cutting (feed-speed adaptation, workpiece protection). | Strong in machining; ready for supervisory use before autonomous interior-defect avoidance. |
| Closed loop | Live ahead-of-tool tomographic replan (cut-as-acoustic-probe). | Speculative; enabling pieces (sonic tomography, scan-plan-rescan) exist separately, integration not found in production. |
| End-effector | Laser-spalling / laser-preconditioned hybrid saw-or-waterjet granite end-effector. | Laser rock-spallation is real; a closed-loop stone-production cell is unproven. |
| Optimisation | Structural-aesthetic co-optimisation: predict 3D vein trajectories through the block and co-optimise against the fracture field. | Today's vein matching is 2D slab-image + nesting only; the volumetric solver is a genuine research opportunity. |