Repository navigation
chore: deliver the fork delta since the 1105 sync wave - #833
Merged
Merged
Conversation
One batch commit of the fork work that the 1104/1105 waves predate: - Drawing and report fixes: dimension labels clear their lines on every direction, view titles clear the geometry they annotate, the title block closes its box and keeps long values off their labels, letters B, S and O draw shapes of their own, the colon draws two dots, dash patterns follow tessellated circles and arcs in SVG and PDF, and mass prints at one precision everywhere. - V18 contour plate grips: the selected plate's contour gets draggable vertex and edge grips with a corner editor, and a holding grip takes the primary drag from the camera. - V19 slice 1 and V10: the ribbon Weld and bolt-group tools place a weld and a bolt group through their commands. - Q01 stories: the curved/poly member, bent/lofted plate, transform, bolt-group, model-data tool, contour plate, part class, cut lifecycle, fits-and-combine, hole record and storey assignment stories run in their own published stores, and the alpha matrix documents them. - The E04 IFC input study: ifc-inspect reads a received IFC file behind the minimal input contract and changes nothing. - The N03 USD SDK differential harness with its fixtures and the G14.2 gate ignore retirement. - The gate: a selection without a library target passes the doctest step vacuously, and the test-gate tests cover it.
axisrow
commented
Nov 5, 2026
axisrow
left a comment
Collaborator
Author
There was a problem hiding this comment.
Review of PR 833 (fork delta since the 1105 sync wave)
Reviewed the full diff of f953e8c against master 66ee62e (57 files, +10779/-108): the new IFC scanner and its CLI command, the drawing/report fixes, the V18/V19 UI surfaces, the model-command tests, the test-gate change, the USD differential harness with its fixtures, and the docs.
Verdict: approved. No inline findings — nothing in this delta requires a change.
Checked in depth:
crates/ifc/src/read.rs— a bounded scanner of untrusted input. The size cap is re-checked before parsing, non-UTF-8 bytes are refused, slicing is byte-safe on non-ASCII text, argument splitting tracks bracket depth, the name inventory and losses are capped, and the units resolution refuses instead of guessing (the no-fallback rule is pinned by tests). No panic or unbounded-allocation path found: interpreted bodies are slices of lines already bounded by MAX_LINE_BYTES, and first_string/split_args walk bytes via get, never by index.- Drawing fixes (
svg.rs,pdf.rs,sheet.rs) — the line-normal label placement reproduces the old above/below result for horizontal lines and clears the line for vertical and inclined ones (offset = LABEL_GAP plus half the box extent projected onto the normal); polyline chaining compares 4-decimal formatted points, so it cannot merge distinct geometry; the title block now closes at the top and its divider follows the label column. SVG and PDF carry equivalent fixes and tests. - Report precision (
bom.rs,schedule.rs) — quantity trimming is dot-anchored (the formatted value always contains a point, so trailing-zero trimming cannot eat integer digits) with a -0 fix-up; the mass column is matched per template column and falls back safely to the old rendering when cell and column counts disagree. - V18 grips and V19/V10 benches — every vertex and edge access goes through get/get_mut, the modulo is only reached with a nonzero count, single-flight covers all new job kinds through other_command_running, a worker that dies without a result lands in the CLI_FAILED path, and the corner editor is bound to the selection id so a changed selection cannot author on the wrong plate.
- The gate change (
tools/test-gate/src/local.rs) — the vacuous doctest pass triggers only on a nonzero exit without a timeout plus the exact cargo refusal line in the retained stderr log; the new process tests pin both sides (a real doctest failure is never vacuous). registry.rsand COMMANDS.md agree on the new ifc-inspect entry and on --decimals 0..3; the engine already refused decimal_places > 3 (crates/engine/src/drawing.rs:376), so the registry/docs edit only aligns the documented contract with the enforced one.tools/usd-sdk-differential/run.sh— writes only under a mktemp directory it removes on exit, asserts with fixed-string grep, and reads the oracle exit status from the assignment rather than a pipeline.
Non-blocking notes, for the record only:
- In weld_click and bolt_click, clicking the already-picked main part as the second pick fills the secondary slot and is refused only at Create. Refusing the duplicate pick at click time would be friendlier; the current behaviour writes nothing.
- The two 32 MiB cap tests (read.rs and ifc_inspect.rs) allocate or write the full cap on every run — acceptable, but they are the heaviest additions to the suite on a loaded machine.
- In the scanner, once MAX_DISTINCT_NAMES names are present, further instances of already-known names also land in unclassified_instances. That matches the documented cap wording; worth knowing when reading the JSON.
The recorded gate receipt covers the full workspace; the new behaviour carries tests in the same commit, including real-binary CLI suites and egui-driven UI suites that assert both the refusal path and hand-typed equivalence.
Blogbotana
approved these changes
Nov 5, 2026
axisrow
added a commit
to axisrow/BeamCraft
that referenced
this pull request
Nov 6, 2026
Connect the fork's master to the upstream history delivered since the 1105 wave: upstream commit f00260e ("Deliver the fork delta since the 1105 sync wave (Apibim-com#833)") carries the fork's own E04 IFC input study, contour grips, weld panel, bolt panel, A10 bent plates, expanded alpha scenario and the usd-sdk-differential fixtures back into the shared ancestry with their upstream SHAs and parents. The merged tree equals the fork master tree byte for byte - every upstream change is already present in the fork by content, so this merge changes no fork behaviour; it restores the shared history. The fork-only form stays: the recorded-gate ci.yml, the no-Python rule, the fork policy documents and the fork's newer fixes that the upstream copies predate. The fork delta accumulated since the Apibim-com#833 cut (V09/V10/V13 drawing and sheet work) leaves as the next single batch pull request toward upstream. BeamCraft-Test-Gate: {"version":1,"commit":"f3b4ff252295c9d824e13633987f54aeae659d8f","tree":"087ce0ace2921f323399f2129ea841eae1b0503c","base":"f3b4ff252295c9d824e13633987f54aeae659d8f","merge_parent":"f00260ef8bf0b006b826e3b5c4ca6f247c40a853","os":"macos","arch":"aarch64","scope":"full","ui_independent_reason":null,"ui_tested":true,"rustc":"rustc 1.99.1 (58cf8f9c3 2026-10-13)","cargo":"cargo 1.99.1 (5f94df478 2026-08-27)","nextest":"cargo-nextest 0.9.149 (3fe4ef319 2026-10-20)\nrelease: 0.9.149\ncommit-hash: 3fe4ef31972f24e0c94cfe291718eab0fe678260\ncommit-date: 2026-10-20\nhost: aarch64-apple-darwin","expected_tests":2642,"executed_tests":2642,"ignored_tests":["beamcraft-test-gate::process::process_fixture"],"source_unchanged":true,"stages":[{"name":"format","exit_code":0,"elapsed_ms":1587,"timed_out":false},{"name":"clippy","exit_code":0,"elapsed_ms":379,"timed_out":false},{"name":"prepare","exit_code":0,"elapsed_ms":501,"timed_out":false},{"name":"tests","exit_code":0,"elapsed_ms":191471,"timed_out":false},{"name":"doctests","exit_code":0,"elapsed_ms":3016,"timed_out":false},{"name":"docs","exit_code":0,"elapsed_ms":386,"timed_out":false}]}
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Delivers the fork delta accumulated since the 1104/1105 sync waves as one batch commit on top
of
master(the single-batch delivery the fork sync policy prescribes). Nothing here changesthe recorded contracts; it is feature, fix, test and harness work that
masterpredates.clear the geometry they annotate, the title block closes its box and keeps long values off
their labels, the letters B, S and O draw distinguishable shapes, the colon draws two dots,
dash patterns follow tessellated circles and arcs in SVG and PDF, and mass prints at one
precision everywhere.
with a corner editor; a holding grip takes the primary drag from the camera.
through their existing commands.
tool, contour plate, part class, cut lifecycle, fits-and-combine, hole record and storey
assignment stories run in their own published stores so the numbered frame keeps its counts;
the alpha matrix and scenario documents describe the split.
ifc-inspectreads a received IFC file behind the minimal inputcontract and changes nothing (a study, not the deferred I01–I03 item workflow).
with the stage's stderr log retained, and the gate's own tests cover the behaviour.
The fork-only policy (its workflow forms,
docs/plan/, visual evidence, fork tooling) is notpart of this delivery; the upstream-owned Python CI tools are untouched.
How you verified it
cargo fmt --all -- --check(recorded gate stage, exit 0)cargo clippy --workspace --all-targets -- -D warnings(recorded gate stage, exit 0)cargo test --workspace(recorded gate: 2603/2603 runnable tests executed nextest0.9.149 on macOS aarch64, plus mandatory doctests and
cargo doc -D warnings, all exit 0;the committed tree equals the tested tree, receipt in the runner report)
New behaviour carries tests in the same commit: the grip, weld, bolt-group and story suites
exercise the new paths, and the drawing fixes are pinned by path- and shape-level asserts that
failed before the fixes.
Never-crash
Every model file, IFC/DSTV import and keystroke is untrusted input (
AGENTS.md§4).unwrap/expect/panic!/todo!outside testsunsafeProvenance
Read
AGENTS.md§1 and §2 before adding any asset.ATTRIBUTION.md(the USD SDK differential fixtures arecontributor-original synthetic files under the existing test-data entry)
Anything a reviewer should look at first
The label-placement change in
crates/engine/src/drawing/svg.rsreplaces the horizontalabove/below rule with the line-normal rule and moves the call sites; the two finding-4 tests pin
the vertical and the inclined case. The E04
ifc-inspectstudy is read-only by contract; itsscope is deliberately narrow.