Printed fixtures, and the path from video capture to a trusted arm policy - #6
Open
di-omics wants to merge 3 commits into
Open
Printed fixtures, and the path from video capture to a trusted arm policy#6di-omics wants to merge 3 commits into
di-omics wants to merge 3 commits into
Conversation
di-omics
force-pushed
the
feat/coverage-durability-teaching-feedback
branch
from
July 29, 2026 17:39
d531723 to
3330cda
Compare
The argument running through this portfolio is that a lab does not need a vendor to ship AI-native labware. That is only honest if the part you printed is held to the standard everything else here is held to, and a printed fixture is untested hardware made in-house, sitting inside the working envelope of a moving robot, sometimes near reagents. The boundary that decides most of it is physical rather than regulatory. Fused-deposition parts were measured by computed tomography at 4.05 to 6.32 percent porosity with infill fixed at 100 percent, so an FDM part cannot be validated as cleanable and does not belong in a fluid path. Post-processing that claims to close this is recorded as a claim rather than a solution, because a coating whose integrity nobody measured is an assertion about a surface. The consequences are computed rather than declared. Of the materials characterized here only a certified biocompatible photopolymer reaches culture contact, and only that plus machined stock reach sample contact: everything printable holds things and nothing printable holds liquid. A fixture with nothing declared about it is refused for every use, since passing by virtue of having no properties is the vacuous-pass failure this package exists to refuse. Four refusals carry the practical weight. A porous process in a fluid path. A material whose glass transition sits below the sterilization cycle -- PETG relaxes its frozen-in extrusion stresses at 121 C and comes out the wrong shape. A part that nothing positively locates, which needs no operator error to move and invalidates every taught position that references it once it has. And a critical dimension that was designed rather than measured, which is a fact about the model: desktop tolerance runs about half a percent with a half-millimetre floor, shrinkage is material and vendor specific, and the first layer is wider than the model by roughly the compensation a slicer applies without being asked. hardware/tilt_module.scad is the worked example, a passive fixed-angle fixture that pools residual liquid at one side of each well. No hinge and no adjustment, because an adjustable angle is an angle nobody records, and a hinge is a degree of freedom inside a moving arm's envelope. It defaults to printing the test coupon rather than the fixture so the fit is proven before hours are committed, and it states no recovery figure anywhere. The guide gives the gravimetric protocol that would produce one instead. Every material property, tolerance, and porosity figure was verified against published sources before it was encoded, and the ones that could not be confirmed are marked rather than rounded. openscad is not installed here, so the SCAD is checked for structure but has not been rendered. 71 new tests, 418 total. ruff clean.
The repo runs an ascii job that refuses non-ASCII bytes in tracked text, and the two new markdown files carried section signs and plus-minus signs. Replaced with '+/-' and plain cross-references. Worth keeping: a tolerance written as a plus-minus glyph reads fine in a browser and badly in a terminal, a diff, and half the tools that will ever open a hardware note.
The portfolio had a vision layer, an arm, and a printed-fixture layer with nothing between them. The join is the flow this work is actually for: capture a demonstration, train an arm from it, and use a printed fixture to make the task tractable. This computes whether a capture can train a policy at all, and whether the policy may then be handed material. A video is not a demonstration. Teleoperation and kinesthetic capture record the arm's own joint states, so the action stream is measured; a monocular human video has none and needs pose estimation followed by a retargeting model onto different kinematics, which is two estimators in series rather than a conversion. No verified figure for human-to-robot retargeting error was located at all, and the published magnitudes for the hand-pose stage alone reach 185.67 mm, so an unmeasured retargeting is not a small unknown. The fixture is inside what the policy learned, which is the connection to the printed layer and the reason a reprint is not a neutral act. A policy carries the fixture revision it learned on, and a capture that recorded no fixture does not count as agreeing with one that did: the part was physically there whether or not anybody wrote it down. A properly run evaluation is not a good result, and this is the distinction the first draft got wrong. Trust.MEASURED means the evaluation was conducted correctly, and a policy that succeeded in zero of twenty held-out trials satisfied it. The enum docstring already said MEASURED does not mean good; the boolean said otherwise to anyone who branched on it rather than reading the prose. evidence_complete and trusted are now separate, and trusted requires a declared acceptance rate that the interval's lower bound clears. There is no default rate, because what is tolerable belongs to the task rather than to this module. A run needs a bound that lives outside the policy, since a learned policy carries no guarantee about an input it has not seen. Interlock demands workspace, speed and force bounds, something named as enforcing them, and a measured miss rate obtained by driving the violation rather than by observing that nothing went wrong. Three further audit findings are closed with regression tests: an unrecorded fixture coupling silently agreeing with a recorded one, a retargeting error accepting zero and negative distances, and success figures quoted as bare percentages off twelve and twenty-four trials, which are counts this module's own success_rate refuses. Those now appear as counts with their intervals, and the simulation result that had been welded onto a real-robot sentence is marked as simulation and reported across all nine models rather than cherry-picked to the worst. 55 new tests, 474 total. ruff clean against the pinned version, ASCII clean.
di-omics
force-pushed
the
feat/printed-fixtures
branch
from
July 29, 2026 17:43
80ff4c6 to
0832622
Compare
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.
printed.py-- the boundary is physical, not regulatoryFDM parts were measured by computed tomography at 4.05-6.32% porosity with infill fixed at 100%. That cannot be validated as cleanable, so it does not go in a fluid path, and post-processing claiming to fix it is recorded as a claim.
Of the materials characterized, only a certified biocompatible photopolymer reaches culture contact, and only that plus machined stock reach sample contact. Everything printable holds things; nothing printable holds liquid. A fixture with nothing declared is refused for every use.
Four refusals carry the weight: porous process in a fluid path; a material whose Tg sits below the sterilization cycle (PETG at 69-77 C comes out the wrong shape from a 121 C autoclave); a part nothing positively locates, which needs no operator error to move and invalidates every taught position once it has; and a critical dimension designed rather than measured.
hardware/tilt_module.scadis the worked example: real ANSI/SLAS figures, 7 deg default, no hinge because an adjustable angle is one nobody records. It defaults to printing the test coupon, and states no recovery figure anywhere.imitation.py-- video capture to a trusted policyA video is not a demonstration. Teleop records the arm's own joint states; monocular human video needs pose estimation then retargeting onto different kinematics, two estimators in series. No verified figure for retargeting error was found at all, and the published hand-pose magnitudes alone reach 185.67 mm.
The fixture is inside what the policy learned. A policy carries the fixture revision it trained on, and a capture recording no fixture does not count as agreeing with one that did.
A properly run evaluation is not a good result. The module shipped with
trusted=Truefor a policy that succeeded in zero of twenty held-out trials.evidence_completeandtrustedare now separate, andtrustedrequires a declared acceptance rate that the interval's lower bound clears. That makes 18 of 20 fail an 80% bar that 90 of 100 clears, at the same point estimate.Interlockadds the leg that was missing: workspace, speed and force bounds enforced outside the policy, with a measured miss rate obtained by driving the violation.Audit found 3 blockers and 2 majors, all closed with regression tests, including success figures quoted as bare percentages off 12 and 24 trials that this module's own
success_ratewould refuse.Note:
openscadis not installed here, so the SCAD is structurally checked but has not been rendered.126 new tests. Recreated after the PR history was reset; the branch is unchanged.