nx_assembly_guide.nx
buildroot/runtime/nx_assembly_guide.nx
about
nx_assembly_guide.nx -- sensor-verified step-by-step assembly walkthrough.
module: nishi-core.perception.assembly_guide
depends: nishi-core.perception.profile + nishi-core.perception.transducer_characterizer +
nishi-core.perception.provenance_curve_store + nishi-core.io.syscalls
disk_kb: 6
capability: PERCEPTION
wired_status: PARTIAL_WIRED
MISSING_CAPABILITIES:
- ASSEMBLY_MANIFEST_LOAD (load step-list + expected values from
versioned assembly manifest file)
- SENSOR_READ_DISPATCH (route verification kind to appropriate
hardware interface: serial multimeter, USB ADC, oscilloscope, etc.)
- USER_UI_PRESENT (display step text + expected value + accept-or-fail
prompt; queued, depends on nx_audit_dashboard UI layer)
- STEP_HISTORY_PERSIST (write each step result to nx_provenance_curve_store
so failed builds can be analyzed later)
- DIAGNOSTIC_HOOK_INVOKE (on FAIL, dispatch to nx_instrument_diagnostician
with measurement payload to name the fix)
license_tier: PUBLIC_NISHI_SUBSTRATE
genealogy_id: feedback-substrate-does-heavy-lifting-user-is-partner-not-gate_2026 +
feedback-substrate-primitives-meta-not-one-off_2026 +
feedback-self-surfacing-intelligence-staged-autonomy +
toyota_production_system_andon_jidoka +
feedback-build-the-system-not-manual-output
Per cardinal [[feedback-substrate-does-heavy-lifting-user-is-partner-not-gate]]:
THIS primitive walks the user through ANY physical assembly — DAC board,
amp board, ribbon tweeter, dog toy production unit, attic door tent, 3D-
printed cistern install, mini-split mount, every product. Substrate
presents each step, captures sensor reading, ratifies pass-or-fail,
invokes diagnostician on fail, advances on pass. User contributes solder
+ glue + life-context judgment; substrate contributes every measurement
+ every tolerance check + every error name.
Reuse set served by this single primitive:
- DAC build (W2 of dog perceptual rig)
- Amplifier build (W3)
dependencies 4 imports · 0 importers
imports: nx_syscalls.nxnx_perceptual_profile.nxnx_transducer_characterizer.nxnx_provenance_curve_store.nx
imported by: nobody (leaf or entry point)
structs
| 155 | struct NxAsmStep |
consts
| 58 | const NX_ASM_KIND_SOLDER: i64 = 1 // place + solder a component |
| 59 | const NX_ASM_KIND_GLUE: i64 = 2 // adhesive bonding |
| 60 | const NX_ASM_KIND_MOUNT: i64 = 3 // mechanical mounting (screws, clips) |
| 61 | const NX_ASM_KIND_WIRE: i64 = 4 // route + crimp wires |
| 62 | const NX_ASM_KIND_CONFIGURE: i64 = 5 // software / DIP-switch / jumper |
| 63 | const NX_ASM_KIND_VERIFY: i64 = 6 // measure + check tolerance |
| 64 | const NX_ASM_KIND_CALIBRATE: i64 = 7 // trim pot, bias, zero offset |
| 65 | const NX_ASM_KIND_DOCUMENT: i64 = 8 // photo + serial number + provenance |
| 66 | const NX_ASM_KIND_TENSION: i64 = 9 // ribbon tweeter, magnet alignment |
| 67 | const NX_ASM_KIND_FILL: i64 = 10 // concrete pour, refrigerant charge, scent cartridge fill |
| 68 | const NX_ASM_KIND_CURE: i64 = 11 // adhesive set, concrete cure, refrigerant settle |
| 69 | const NX_ASM_KIND_INSTALL: i64 = 12 // place in final location (cistern, mini-split, etc.) |
| 89 | const NX_ASM_VERIFY_MULTIMETER_RESISTANCE: i64 = 1 // Ω |
| 90 | const NX_ASM_VERIFY_MULTIMETER_VOLTAGE_DC: i64 = 2 // V DC |
| 91 | const NX_ASM_VERIFY_MULTIMETER_VOLTAGE_AC: i64 = 3 |
| 92 | const NX_ASM_VERIFY_MULTIMETER_CONTINUITY: i64 = 4 // 0/1 |
| 93 | const NX_ASM_VERIFY_MULTIMETER_CURRENT: i64 = 5 // A |
| 94 | const NX_ASM_VERIFY_MULTIMETER_CAPACITANCE: i64 = 6 |
| 95 | const NX_ASM_VERIFY_ADC_SAMPLE: i64 = 7 // any ADC reading |
| 96 | const NX_ASM_VERIFY_DIGITAL_LOGIC_PROBE: i64 = 8 // 0/1 high/low |
| 97 | const NX_ASM_VERIFY_OSCILLOSCOPE_CAPTURE: i64 = 9 // waveform |
| 98 | const NX_ASM_VERIFY_VISUAL_INSPECT: i64 = 10 // camera + pose/orientation check |
| 99 | const NX_ASM_VERIFY_MASS_MEASUREMENT: i64 = 11 // for chemical fill volumes |
| 100 | const NX_ASM_VERIFY_TEMPERATURE: i64 = 12 // cure profile |
| 101 | const NX_ASM_VERIFY_TIMING: i64 = 13 // event timing measurement |
| 102 | const NX_ASM_VERIFY_TRANSDUCER_FRF: i64 = 14 // invoke full characterizer |
| 103 | const NX_ASM_VERIFY_PRESSURE: i64 = 15 // cistern leak test, refrigerant |
| 104 | const NX_ASM_VERIFY_USER_CONFIRM: i64 = 16 // human judgment, no sensor available |
| 128 | const NX_ASM_STEP_PASS: i64 = 0 |
| 129 | const NX_ASM_STEP_TOLERANCE_MARGINAL: i64 = 1 // in tolerance but near edge |
| 130 | const NX_ASM_STEP_FAIL_OUT_OF_SPEC: i64 = 2 // measurement outside tolerance |
| 131 | const NX_ASM_STEP_FAIL_NO_READING: i64 = 3 // sensor returned no data |
| 132 | const NX_ASM_STEP_FAIL_SHORT_CIRCUIT: i64 = 4 // continuity where should be open |
| 133 | const NX_ASM_STEP_FAIL_OPEN_CIRCUIT: i64 = 5 // no continuity where should be closed |
| 134 | const NX_ASM_STEP_SKIP_USER: i64 = 6 // user opted to skip |
| 135 | const NX_ASM_STEP_DEPENDENCY_MISSING: i64 = 7 // PARTIAL_WIRED default |
functions
| 71 | func nx_asm_kind_name(k: i64) -> *u8 |
| 106 | func nx_asm_verify_name(v: i64) -> *u8 |
| 137 | func nx_asm_step_verdict_name(v: i64) -> *u8 |
| 176 | func nx_asm_begin_assembly(assembly_id_ptr: *u8, assembly_id_len: i64, |
| 187 | func nx_asm_step_present(assembly_id_ptr: *u8, assembly_id_len: i64) -> i64 |
| 195 | func nx_asm_step_measure(assembly_id_ptr: *u8, assembly_id_len: i64, |
| 206 | func nx_asm_step_verify(assembly_id_ptr: *u8, assembly_id_len: i64, |
| 217 | func nx_asm_step_advance(assembly_id_ptr: *u8, assembly_id_len: i64) -> i64 |
| 225 | func nx_asm_step_user_override(assembly_id_ptr: *u8, assembly_id_len: i64, |
| 237 | func nx_asm_get_progress(assembly_id_ptr: *u8, assembly_id_len: i64) -> i64 |
| 244 | func nx_asm_get_last_verdict(assembly_id_ptr: *u8, assembly_id_len: i64) -> i64 |