GEOMETRY / REPRODUCTION NOTES / REVISION 03

Check the braid
at the crossings.

The most useful test is whether the strands remain separate, identifiable and continuous where they actually interlace. These checks apply to the displayed geometric model.

The representation

Each configuration has a checked profile in models/braid-profile-N.json. One rotor revolution contains 128 output vertices per carrier. The measured carrier permutation joins that cell to the next; it repeats after a complete carrier circuit. Industrial ends are separate radial offsets from each carrier’s centreline, spaced 0.20 mm across the bank. The two wire diameters are 0.45 mm for tabletop and 0.16 mm for industrial.

The formation table contains 128 tabletop poses. The industrial tables contain 142 poses for 48 carriers and 159 for 72 carriers, with extra poses inserted at the tighter transitions on a 256-step phase grid. It fixes the real guide at the upstream boundary and the output at the downstream boundary. A piecewise linear interpolation supplies intermediate centreline nodes; radial bank offsets and guide motion are evaluated continuously. Four rotational prototypes reduce equivalent geometry. Symmetry is checked against the actual guide equations and the deposited profile before using it in the clearance bound.

tools/relax_braid.py and tools/relax_formation.py generate compact candidates using path length, bend regularisation and finite-segment clearance penalties. Their weights are numerical construction choices. An optimiser reaching its iteration limit does not count as validation or physical equilibrium: the independent geometry checks must still accept the candidate.

What each check tests

CheckMethod and limit
Individual topologycheck_wire_topology.py evaluates the actual guide equations independently and compares the cyclic partner and outside/inside sequence for every individual wire with the deposited profile. All wires are checked, not just the four prototypes. This is a sampled crossing-sequence comparison, not a general braid-group theorem.
Deposited outputvalidate_braid_profile.py checks exact distances between the rendered straight segments, including neighbouring periodic cells and the carrier permutation. Core clearance uses the closest radial point on each chord. Refinement 1 corresponds to the actual static mesh centreline edges.
Continuous formation clearancecertify_formation.py splits time at guide handoffs, profile vertices and formation keyframes. It bounds pair distance from midpoint distance minus relative endpoint travel and analytic chord-error bounds. Unresolved intervals are subdivided. A separate bound covers the core. Accepted lower bounds must exceed the 0.0003 mm numerical reserve.
Sampled formationvalidate_formation.py checks four times as many phases as the table and records close pairs and bend diagnostics. This independently samples the moving approach and the exact downstream segments near its join.
Supply routingexport_supply_paths.mjs exports the viewer’s complete source routes. check_supply_clearance.py compares all carriers and ends at 256 phases using exact segment distances after a spatial broad phase. It also checks nonlocal portions of the same wire, excluding pairs less than two wire diameters apart along the path. This is sampled clearance; it is not a continuous-time supply certificate or a complete self-contact test.
Tube surfacescheck_strand_surfaces.mjs builds the actual supply and formation tubes with the shared output joining ring. It tests every rendered triangle against its outward normals over 512 phases for all ends of the four rotational prototypes. The static deposited output is checked too. This catches folded rings; it is not a complete mesh self-intersection theorem.
Material and motioncheck_yarn.mjs checks every carrier’s crossing repeat, advected material, non-reversing spool payout, visible loop storage, actual neutral-line route lengths and handoff continuity. check_animation.mjs checks all carrier transfer and full-circuit seams.
Rendered identitycheck_output_identity.mjs compares the actual GPU instance attributes and identity texture with each named wire’s material-history coordinates across every output cell. An explicit integer cell attribute avoids Float32 pitch-division errors.
Tabletop source solidsexport_supply_solids.mjs and check_supply_solids.py check conservative capsules around the actual source route against the exported guide post, arm and bobbin at maximum stored slack. FreeCAD is required. This excludes other carriers and the new viewer-only guide hardware.
Browsercheck_viewer.cjs checks controls, count/end switching, exposed crossings, speed ratios, offline loading, mobile layout and console errors. check_rendering.cjs also checks pixel continuity at loop boundaries, solid close-up tubes, orbit/cutaway, pulley picking and paused rendering. Screenshots support visual review.

Reproduce the numerical checks

Run from the project directory. Python requires NumPy and SciPy; the JavaScript checks require Node. The checked assets are included, so validation does not require repeating the optimisation. Substitute 12, 16, 48 or 72 and use --ends 1, --ends 4 or --ends 8 for industrial checks.

node tools/export_braid_source.mjs 8 /tmp/braid-source-8.json
python3 tools/check_wire_topology.py models/braid-profile-8.json
python3 tools/validate_braid_profile.py /tmp/braid-source-8.json models/braid-profile-8.json --refinement 1
python3 tools/certify_formation.py models/braid-profile-8.json
python3 tools/validate_formation.py /tmp/braid-source-8.json models/braid-profile-8.json
node tools/export_supply_paths.mjs models/braid-profile-8.json /tmp/supply-8.jsonl 256
python3 tools/check_supply_clearance.py /tmp/supply-8.jsonl
node tools/check_yarn.mjs
node tools/check_animation.mjs

The optional --report PATH.json arguments write machine-readable evidence. Industrial supply exports accept the end count as a fourth positional argument. OPENBLAS_NUM_THREADS=1 keeps concurrent numerical runs from competing for unnecessary BLAS workers.

The surface checker imports the vendored Three.js through an esbuild alias. Supply the path to an installed esbuild executable:

esbuild tools/check_strand_surfaces.mjs --bundle --platform=node --format=esm --alias:three=./viewer/vendor/three.module.js --outfile=/tmp/braid-check-surfaces.mjs
node /tmp/braid-check-surfaces.mjs models/braid-profile-8.json /tmp/surfaces-8.json

Build and review offline

python3 tools/build_offline.py /path/to/esbuild
./start.sh
node tools/check_viewer.cjs
node tools/check_rendering.cjs
python3 tools/summarize_geometry.py
python3 tools/package.py

Set PLAYWRIGHT_MODULE, CHROMIUM_PATH and optionally BRAIDBENCH_URL for the local browser installation. The offline HTML embeds the five profiles and the model geometry; it requires no CDN or network fetch. Packaging checks document links and the ZIP CRC and creates a SHA-256 file manifest.

Where the evidence stops

The finite-diameter model prevents demonstrated different-wire overlaps through formation. It does not predict calibrated tension, material stress, friction, torsion, complete self-contact behaviour, winding depletion or force-driven carrier transfer. Multi-wire payout uses the bundle’s neutral centreline; per-end elasticity and slip are absent. The guide-bank swivel, return pulley and dancer are visible geometric mechanisms, with fabrication details still outstanding.

A physical machine needs a constrained carrier shoe and transfer mechanism, detailed brake and guide hardware, a full assembly interference study, and hand-built samples before its behaviour can be qualified. Those are separate from these numerical and browser results.