diff --git a/AGENTS.md b/AGENTS.md index 6567f8d1..bcf6727d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -242,7 +242,9 @@ both via Commo. - Read this file and the matching subsystem `AGENTS.md` before starting a task; check `TODO.md` and recent git history for context; verify any citation you use against - `REFERENCES.md`. + `REFERENCES.md`. `docs/solutions/` holds documented solutions to past problems (bugs, + design patterns, workflow lessons), organized by category with YAML frontmatter + (`module`, `tags`, `problem_type`) — worth a search when working in an area it covers. - New standards citation: look it up by REF-ID first; if absent, add it to `REFERENCES.md` with a validated URL and exact section, then cite the REF-ID. Never guess a section number. - Keep `PROJECT_INDEX.md` current for active files; when a file is archived, move its entry to diff --git a/ARCHIVE_INDEX.md b/ARCHIVE_INDEX.md index 0cdfda25..d3b21fa8 100644 --- a/ARCHIVE_INDEX.md +++ b/ARCHIVE_INDEX.md @@ -6,16 +6,16 @@ look, change the generator (tools/precommit_index.py), not this file. Machine-readable form: tools/index_tags.json --> - + ## Tag Index Grep a tag name below to get every matching file in one line, without reading the rest of this document. -- `archive` (444): archives/18in-scale-scad/s_cargo_door_scaled18.scad, archives/18in-scale-scad/s_cargo_door_scaled18.stl, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.scad, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.stl, archives/18in-scale-scad/s_cargo_sect_shell18.scad, archives/18in-scale-scad/s_cargo_sect_shell18.stl, archives/18in-scale-scad/s_eng_left_shell18.scad, archives/18in-scale-scad/s_eng_left_shell18.stl, archives/18in-scale-scad/s_eng_pistons_scaled18.scad, archives/18in-scale-scad/s_eng_pistons_scaled18.stl, archives/18in-scale-scad/s_eng_piv_outer_scaled18.scad, archives/18in-scale-scad/s_eng_piv_outer_scaled18.stl, archives/18in-scale-scad/s_eng_piv_pins_scaled18.scad, archives/18in-scale-scad/s_eng_piv_pins_scaled18.stl, archives/18in-scale-scad/s_eng_right_shell18.scad, archives/18in-scale-scad/s_eng_right_shell18.stl, archives/18in-scale-scad/s_feet_x_4_scaled18.scad, archives/18in-scale-scad/s_feet_x_4_scaled18.stl, archives/18in-scale-scad/s_head_shell18.scad, archives/18in-scale-scad/s_head_shell18.stl, archives/18in-scale-scad/s_legs_scaled18.scad, archives/18in-scale-scad/s_legs_scaled18.stl, archives/18in-scale-scad/s_middle_shell18.scad, archives/18in-scale-scad/s_middle_shell18.stl, archives/18in-scale-scad/s_pivot_arm_a_scaled18.scad, archives/18in-scale-scad/s_pivot_arm_a_scaled18.stl, archives/18in-scale-scad/s_rear_shell18.scad, archives/18in-scale-scad/s_rear_shell18.stl, archives/18in-scale-scad/s_wings_both_shell18.scad, archives/18in-scale-scad/s_wings_both_shell18.stl, archives/20260422-Serenity-RevF.zip, archives/20260429_files.zip, archives/Serenity Firefly with landing gear and swivel engines - 7330462.zip, archives/Serenity0Firefly0with0landing0gear0and0swivel0engines0-07330462.zip, archives/airframe-archives/archive/ARCHIVE-REVQ.md, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Assemble.py, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Subsystem-Assembly.py, archives/airframe-archives/archive/FreeCAD-scripts/assembly1.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_fuselage_asm4.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_subsystem_assembler.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v1.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v2.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_2mm.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_50mm.py, archives/airframe-archives/archive/blender-scripts/generate_hollow_shells.py, archives/airframe-archives/archive/blender-scripts/generate_shells_v2.py, archives/airframe-archives/archive/edf_bore_sleeve.scad, archives/airframe-archives/archive/openscad/fuselage/canonical_leg_r6.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_housing.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_pair.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_nozzle_idler.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_pinion.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_sector_gear.scad, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/airframe-archives/archive/stls/fuselage/hull_engine_bell.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/feet_x_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_assembled.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_exploded.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_legs_hull_r1.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/legs_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/post.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/strong-leg.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_strutts_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_revs.stl, archives/airframe-archives/archive/stls/fuselage/s_feet_x_4_scaled24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_intake_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_repaired.stl, archives/airframe-archives/archive/stls/nacelles/edf_bore_sleeve.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_drive_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion_a.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_port_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pushrod_crank.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_sector_gear.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_stbd_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_port.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_stbd.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.obj, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.stl, archives/airframe-archives/archive/stls/nacelles/stator_50mm.stl, archives/airframe-archives/archive/stls/wings/wing_nacelle_pylon_revo.stl, archives/airframe-archives/nacelle_nozzle_straight.scad, archives/airframe-archives/nacelle_pod_50mm_tandem_simple.scad, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Mask.gts, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-NPTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-NPTH.drl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-PTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-PTH.drl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1.net, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-Edge_Cuts.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-In1_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-In2_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Mask.gts, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-NPTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-NPTH.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-PTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-PTH.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1.net, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-Edge_Cuts.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-In1_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-In2_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1.drl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Mask.gts, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-drl_map.pdf, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-job.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1.drl, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-12_202152.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_163955.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_165517.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_170545.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_171620.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_172625.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-19_234555.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_120000.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_134835.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_174009.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_221653.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_114948.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_115954.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_120631.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_121147.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_121710.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-24_170015.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_203319.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_204417.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_205610.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_210615.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_211230.zip, archives/avionics-archives/kicad-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/CAPE-A-1-no-comment.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-1-no-comment.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.md, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.md, archives/avionics-archives/kicad-archives/archive/CM3-CARRIER-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM3-CARRIER-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-SWITCH.kicad_pcb, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-SWITCH.kicad_sch, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.md, archives/avionics-archives/kicad-archives/archive/SENSORHAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/SENSORHAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/TRIHAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/TRIHAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.md, archives/avionics-archives/kicad-archives/archive/gen_cape_a2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_a2_pcb.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2_pcb.py, archives/bom_revH1.json, archives/bom_revP.csv, archives/bom_revP.json, archives/bom_revQ.csv, archives/bom_revQ.json, archives/bom_revR.csv, archives/build_guide_00_cover.svg, archives/build_guide_20_node_placement.svg, archives/chat/2026-04-22-11-20-04-serenity-tiltrotor-drone-design.txt, archives/chat/2026-04-28-14-10-02-serenity-tiltrotor-drone-design.txt, archives/chat/2026-05-03-20-24-05-serenity-tiltrotor-drone-design.txt, archives/chat/journal.txt, archives/docs-superseded/POWER_SYSTEM_Q.md, archives/docs-superseded/README.md, archives/docs-superseded/bom_revQ.csv, archives/docs-superseded/serenity-rev-q.jsx, archives/files.zip, archives/generate_foam_svgs.py, archives/more-files.zip, archives/nacelle-nozzle-gear.jsx, archives/nacelles.jst, archives/root-readme-deep-dive-2026-08-03/README.md, archives/root-readme-deep-dive-2026-08-03/deep_dive_sections.md, archives/sensorhat_mounting_tray.stl, archives/serenity firefly transport ship - 2601098.zip, archives/serenity-connectivity-revH.jsx, archives/serenity-drone-COMPLETE-revH1.zip, archives/serenity-drone-rev-g.zip, archives/serenity-drone.jsx, archives/serenity-esc-telem-revH1.jsx, archives/serenity-rev-b.jsx, archives/serenity-rev-c.jsx, archives/serenity-rev-d.jsx, archives/serenity-rev-f-.jsx, archives/serenity-rev-f.jsx, archives/serenity-rev-o.jsx, archives/serenity-rev-p.jsx, archives/serenity-rev-q.jsx, archives/serenity-rev-r.jsx, archives/serenity/.gitignore, archives/serenity/MANIFEST.json, archives/serenity/README.md, archives/serenity/package-lock.json, archives/serenity/package.json, archives/serenity/public/favicon.ico, archives/serenity/public/index.html, archives/serenity/public/logo192.png, archives/serenity/public/logo512.png, archives/serenity/public/manifest.json, archives/serenity/public/robots.txt, archives/serenity/src/App.css, archives/serenity/src/App.js, archives/serenity/src/App.test.js, archives/serenity/src/index.css, archives/serenity/src/index.js, archives/serenity/src/logo.svg, archives/serenity/src/reportWebVitals.js, archives/serenity/src/setupTests.js, archives/stale-20260601/README.md, archives/stale-20260601/airframe-stls/fuselage.md, archives/stale-20260601/antenna-layout.jsx, archives/stale-20260601/cm4-carrier-update.jsx, archives/stale-20260601/cockpit_dome_clear.stl, archives/stale-20260601/comms-hat.jst, archives/stale-20260601/files-revF/CM4-CARRIER-1.kicad_pcb, archives/stale-20260601/files-revF/COMMS-HAT-1.kicad_pcb, archives/stale-20260601/files-revF/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/TRIHAT-1.kicad_pcb, archives/stale-20260601/files-revF/build_plan.svg, archives/stale-20260601/files-revF/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/components_overview.svg, archives/stale-20260601/files-revF/hull_cockpit_section.stl, archives/stale-20260601/files-revF/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/overview_bottom.svg, archives/stale-20260601/files-revF/overview_front.svg, archives/stale-20260601/files-revF/overview_side.svg, archives/stale-20260601/files-revF/overview_top.svg, archives/stale-20260601/files-revF/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF.zip, archives/stale-20260601/files-revF/serenity-drone-revF/README.md, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/build_plan.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/components_overview.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_bottom.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_front.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_side.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_top.svg, archives/stale-20260601/files-revF/serenity-drone-revF/docs/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/CM4-CARRIER-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/CM4-CARRIER-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier-backups/cm4-carrier-2026-04-20_232359.zip, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier-backups/cm4-carrier-2026-05-11_130328.zip, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_prl, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_pro, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/fp-info-cache, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/COMMS-HAT-1/COMMS-HAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/COMMS-HAT-1/COMMS-HAT-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/TRIHAT-1/TRIHAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/TRIHAT-1/TRIHAT-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/stl/bevel_gear_housing.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/dorsal_antenna_fin.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_aft_neck.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_cap.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_section.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_engine_bell.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_left.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_right.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/landing_skid_foot.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_port.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_stbd.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_flap_x8.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/payload_bay_door.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/pinion_a_bracket.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/tilt_bracket_cf_petg.stl, archives/stale-20260601/overview_side.svg, archives/stale-20260601/pico2-hat.jsx, archives/stl/bevel_gear_housing.stl, archives/stl/cm4_node_mounting_tray.stl, archives/stl/hull_aft_neck.stl, archives/stl/hull_cockpit_cap.stl, archives/stl/hull_cockpit_section.stl, archives/stl/hull_engine_bell.stl, archives/stl/hull_mid_body_left.stl, archives/stl/hull_mid_body_right.stl, archives/stl/landing_skid_foot.stl, archives/stl/nacelle_pod_70mm.stl, archives/stl/nacelle_pod_80mm.stl, archives/stl/nacelle_tip_cap_80mm_port.stl, archives/stl/nozzle_flap_x8.stl, archives/stl/nozzle_inner_ring_40mm.stl, archives/stl/nozzle_inner_ring_70mm.stl, archives/stl/nozzle_inner_ring_80mm.stl, archives/stl/nozzle_outer_housing_40mm.stl, archives/stl/nozzle_outer_housing_70mm.stl, archives/stl/nozzle_outer_housing_80mm.stl, archives/stl/payload_bay_door.stl, archives/stl/pinion_a_bracket.stl, archives/stl/s_eng_left_shell24.stl, archives/stl/s_eng_left_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24.stl, archives/stl/s_eng_left_stator_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_left_stator_shell24_revo.stl, archives/stl/s_eng_pistons_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24_50mm.stl, archives/stl/s_eng_piv_pins_scaled24.stl, archives/stl/s_eng_piv_pins_scaled24_50mm.stl, archives/stl/s_eng_right_shell24.stl, archives/stl/s_eng_right_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24.stl, archives/stl/s_eng_right_stator_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_right_stator_shell24_revo.stl, archives/stl/s_pivot_arm_a_scaled24.stl, archives/stl/s_pivot_arm_a_scaled24_50mm.stl, archives/stl/s_pivot_arm_a_scaled24_50mm_repaired.stl, archives/stl/s_wing_port_s1223_revo.stl, archives/stl/s_wing_stbd_s1223_revo.stl, archives/stl/s_wings_both_shell24.stl, archives/stl/s_wings_both_shell24_2mm.stl, archives/stl/s_wings_both_shell24_2mm_repaired.stl, archives/stl/s_wings_both_shell24_50mm.stl, archives/stl/s_wings_both_shell24_repaired.stl, archives/stl/s_wings_s1223_revo.stl, archives/stl/sector_gear_22mm.stl, archives/stl/sensorhat_mounting_tray.stl, archives/stl/tilt_bracket_cf_petg.stl, archives/tiltrotor-drone.jsx, avionics/firmware/dts/cape-a/archive/k3-am6254-pocketbeagle2-serenity-cape-a.dts, avionics/firmware/dts/cape-b/archive/k3-am6254-pocketbeagle2-serenity-cape-b.dts +- `archive` (445): archives/18in-scale-scad/s_cargo_door_scaled18.scad, archives/18in-scale-scad/s_cargo_door_scaled18.stl, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.scad, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.stl, archives/18in-scale-scad/s_cargo_sect_shell18.scad, archives/18in-scale-scad/s_cargo_sect_shell18.stl, archives/18in-scale-scad/s_eng_left_shell18.scad, archives/18in-scale-scad/s_eng_left_shell18.stl, archives/18in-scale-scad/s_eng_pistons_scaled18.scad, archives/18in-scale-scad/s_eng_pistons_scaled18.stl, archives/18in-scale-scad/s_eng_piv_outer_scaled18.scad, archives/18in-scale-scad/s_eng_piv_outer_scaled18.stl, archives/18in-scale-scad/s_eng_piv_pins_scaled18.scad, archives/18in-scale-scad/s_eng_piv_pins_scaled18.stl, archives/18in-scale-scad/s_eng_right_shell18.scad, archives/18in-scale-scad/s_eng_right_shell18.stl, archives/18in-scale-scad/s_feet_x_4_scaled18.scad, archives/18in-scale-scad/s_feet_x_4_scaled18.stl, archives/18in-scale-scad/s_head_shell18.scad, archives/18in-scale-scad/s_head_shell18.stl, archives/18in-scale-scad/s_legs_scaled18.scad, archives/18in-scale-scad/s_legs_scaled18.stl, archives/18in-scale-scad/s_middle_shell18.scad, archives/18in-scale-scad/s_middle_shell18.stl, archives/18in-scale-scad/s_pivot_arm_a_scaled18.scad, archives/18in-scale-scad/s_pivot_arm_a_scaled18.stl, archives/18in-scale-scad/s_rear_shell18.scad, archives/18in-scale-scad/s_rear_shell18.stl, archives/18in-scale-scad/s_wings_both_shell18.scad, archives/18in-scale-scad/s_wings_both_shell18.stl, archives/20260422-Serenity-RevF.zip, archives/20260429_files.zip, archives/Serenity Firefly with landing gear and swivel engines - 7330462.zip, archives/Serenity0Firefly0with0landing0gear0and0swivel0engines0-07330462.zip, archives/airframe-archives/archive/ARCHIVE-REVQ.md, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Assemble.py, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Subsystem-Assembly.py, archives/airframe-archives/archive/FreeCAD-scripts/assembly1.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_fuselage_asm4.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_subsystem_assembler.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v1.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v2.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_2mm.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_50mm.py, archives/airframe-archives/archive/blender-scripts/generate_hollow_shells.py, archives/airframe-archives/archive/blender-scripts/generate_shells_v2.py, archives/airframe-archives/archive/edf_bore_sleeve.scad, archives/airframe-archives/archive/openscad/fuselage/canonical_leg_r6.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_housing.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_pair.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_nozzle_idler.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_pinion.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_sector_gear.scad, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/airframe-archives/archive/stls/fuselage/hull_engine_bell.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/feet_x_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_assembled.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_exploded.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_legs_hull_r1.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/legs_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/post.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/strong-leg.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_strutts_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_revs.stl, archives/airframe-archives/archive/stls/fuselage/s_feet_x_4_scaled24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_intake_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_repaired.stl, archives/airframe-archives/archive/stls/nacelles/edf_bore_sleeve.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_drive_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion_a.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_port_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pushrod_crank.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_sector_gear.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_stbd_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_port.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_stbd.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.obj, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.stl, archives/airframe-archives/archive/stls/nacelles/stator_50mm.stl, archives/airframe-archives/archive/stls/wings/wing_nacelle_pylon_revo.stl, archives/airframe-archives/nacelle_nozzle_straight.scad, archives/airframe-archives/nacelle_pod_50mm_tandem_simple.scad, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Mask.gts, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-NPTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-NPTH.drl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-PTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-PTH.drl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1.net, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-Edge_Cuts.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-In1_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-In2_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Mask.gts, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-NPTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-NPTH.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-PTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-PTH.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1.net, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-Edge_Cuts.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-In1_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-In2_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1.drl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Mask.gts, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-drl_map.pdf, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-job.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1.drl, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-12_202152.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_163955.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_165517.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_170545.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_171620.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_172625.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-19_234555.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_120000.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_134835.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_174009.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_221653.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_114948.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_115954.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_120631.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_121147.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_121710.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-24_170015.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_203319.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_204417.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_205610.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_210615.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_211230.zip, archives/avionics-archives/kicad-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/CAPE-A-1-no-comment.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-1-no-comment.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.md, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.md, archives/avionics-archives/kicad-archives/archive/CM3-CARRIER-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM3-CARRIER-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-SWITCH.kicad_pcb, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-SWITCH.kicad_sch, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.md, archives/avionics-archives/kicad-archives/archive/SENSORHAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/SENSORHAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/TRIHAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/TRIHAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.md, archives/avionics-archives/kicad-archives/archive/gen_cape_a2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_a2_pcb.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2_pcb.py, archives/bom_revH1.json, archives/bom_revP.csv, archives/bom_revP.json, archives/bom_revQ.csv, archives/bom_revQ.json, archives/bom_revR.csv, archives/build_guide_00_cover.svg, archives/build_guide_20_node_placement.svg, archives/chat/2026-04-22-11-20-04-serenity-tiltrotor-drone-design.txt, archives/chat/2026-04-28-14-10-02-serenity-tiltrotor-drone-design.txt, archives/chat/2026-05-03-20-24-05-serenity-tiltrotor-drone-design.txt, archives/chat/journal.txt, archives/docs-superseded/POWER_SYSTEM_Q.md, archives/docs-superseded/README.md, archives/docs-superseded/bom_revQ.csv, archives/docs-superseded/serenity-rev-q.jsx, archives/files.zip, archives/generate_foam_svgs.py, archives/more-files.zip, archives/nacelle-nozzle-gear.jsx, archives/nacelles.jst, archives/root-readme-deep-dive-2026-08-03/README.md, archives/root-readme-deep-dive-2026-08-03/deep_dive_sections.md, archives/sensorhat_mounting_tray.stl, archives/serenity firefly transport ship - 2601098.zip, archives/serenity-connectivity-revH.jsx, archives/serenity-drone-COMPLETE-revH1.zip, archives/serenity-drone-rev-g.zip, archives/serenity-drone.jsx, archives/serenity-esc-telem-revH1.jsx, archives/serenity-rev-b.jsx, archives/serenity-rev-c.jsx, archives/serenity-rev-d.jsx, archives/serenity-rev-f-.jsx, archives/serenity-rev-f.jsx, archives/serenity-rev-o.jsx, archives/serenity-rev-p.jsx, archives/serenity-rev-q.jsx, archives/serenity-rev-r.jsx, archives/serenity/.gitignore, archives/serenity/MANIFEST.json, archives/serenity/README.md, archives/serenity/package-lock.json, archives/serenity/package.json, archives/serenity/public/favicon.ico, archives/serenity/public/index.html, archives/serenity/public/logo192.png, archives/serenity/public/logo512.png, archives/serenity/public/manifest.json, archives/serenity/public/robots.txt, archives/serenity/src/App.css, archives/serenity/src/App.js, archives/serenity/src/App.test.js, archives/serenity/src/index.css, archives/serenity/src/index.js, archives/serenity/src/logo.svg, archives/serenity/src/reportWebVitals.js, archives/serenity/src/setupTests.js, archives/stale-20260601/README.md, archives/stale-20260601/airframe-stls/fuselage.md, archives/stale-20260601/antenna-layout.jsx, archives/stale-20260601/cm4-carrier-update.jsx, archives/stale-20260601/cockpit_dome_clear.stl, archives/stale-20260601/comms-hat.jst, archives/stale-20260601/files-revF/CM4-CARRIER-1.kicad_pcb, archives/stale-20260601/files-revF/COMMS-HAT-1.kicad_pcb, archives/stale-20260601/files-revF/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/TRIHAT-1.kicad_pcb, archives/stale-20260601/files-revF/build_plan.svg, archives/stale-20260601/files-revF/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/components_overview.svg, archives/stale-20260601/files-revF/hull_cockpit_section.stl, archives/stale-20260601/files-revF/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/overview_bottom.svg, archives/stale-20260601/files-revF/overview_front.svg, archives/stale-20260601/files-revF/overview_side.svg, archives/stale-20260601/files-revF/overview_top.svg, archives/stale-20260601/files-revF/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF.zip, archives/stale-20260601/files-revF/serenity-drone-revF/README.md, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/build_plan.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/components_overview.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_bottom.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_front.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_side.svg, archives/stale-20260601/files-revF/serenity-drone-revF/diagrams/overview_top.svg, archives/stale-20260601/files-revF/serenity-drone-revF/docs/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/CM4-CARRIER-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/CM4-CARRIER-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier-backups/cm4-carrier-2026-04-20_232359.zip, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier-backups/cm4-carrier-2026-05-11_130328.zip, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_prl, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_pro, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/fp-info-cache, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/COMMS-HAT-1/COMMS-HAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/COMMS-HAT-1/COMMS-HAT-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/TRIHAT-1/TRIHAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/TRIHAT-1/TRIHAT-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/stl/bevel_gear_housing.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/dorsal_antenna_fin.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_aft_neck.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_cap.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_section.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_engine_bell.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_left.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_right.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/landing_skid_foot.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_port.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_stbd.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_flap_x8.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/payload_bay_door.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/pinion_a_bracket.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/tilt_bracket_cf_petg.stl, archives/stale-20260601/overview_side.svg, archives/stale-20260601/pico2-hat.jsx, archives/stl/bevel_gear_housing.stl, archives/stl/cm4_node_mounting_tray.stl, archives/stl/hull_aft_neck.stl, archives/stl/hull_cockpit_cap.stl, archives/stl/hull_cockpit_section.stl, archives/stl/hull_engine_bell.stl, archives/stl/hull_mid_body_left.stl, archives/stl/hull_mid_body_right.stl, archives/stl/landing_skid_foot.stl, archives/stl/nacelle_pod_70mm.stl, archives/stl/nacelle_pod_80mm.stl, archives/stl/nacelle_tip_cap_80mm_port.stl, archives/stl/nozzle_flap_x8.stl, archives/stl/nozzle_inner_ring_40mm.stl, archives/stl/nozzle_inner_ring_70mm.stl, archives/stl/nozzle_inner_ring_80mm.stl, archives/stl/nozzle_outer_housing_40mm.stl, archives/stl/nozzle_outer_housing_70mm.stl, archives/stl/nozzle_outer_housing_80mm.stl, archives/stl/payload_bay_door.stl, archives/stl/pinion_a_bracket.stl, archives/stl/s_eng_left_shell24.stl, archives/stl/s_eng_left_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24.stl, archives/stl/s_eng_left_stator_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_left_stator_shell24_revo.stl, archives/stl/s_eng_pistons_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24_50mm.stl, archives/stl/s_eng_piv_pins_scaled24.stl, archives/stl/s_eng_piv_pins_scaled24_50mm.stl, archives/stl/s_eng_right_shell24.stl, archives/stl/s_eng_right_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24.stl, archives/stl/s_eng_right_stator_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_right_stator_shell24_revo.stl, archives/stl/s_pivot_arm_a_scaled24.stl, archives/stl/s_pivot_arm_a_scaled24_50mm.stl, archives/stl/s_pivot_arm_a_scaled24_50mm_repaired.stl, archives/stl/s_wing_port_s1223_revo.stl, archives/stl/s_wing_stbd_s1223_revo.stl, archives/stl/s_wings_both_shell24.stl, archives/stl/s_wings_both_shell24_2mm.stl, archives/stl/s_wings_both_shell24_2mm_repaired.stl, archives/stl/s_wings_both_shell24_50mm.stl, archives/stl/s_wings_both_shell24_repaired.stl, archives/stl/s_wings_s1223_revo.stl, archives/stl/sector_gear_22mm.stl, archives/stl/sensorhat_mounting_tray.stl, archives/stl/tilt_bracket_cf_petg.stl, archives/tiltrotor-drone.jsx, avionics/firmware/dts/cape-a/archive/k3-am6254-pocketbeagle2-serenity-cape-a.dts, avionics/firmware/dts/cape-b/archive/k3-am6254-pocketbeagle2-serenity-cape-b.dts - `avionics-hardware` (2): avionics/firmware/dts/cape-a/archive/k3-am6254-pocketbeagle2-serenity-cape-a.dts, avionics/firmware/dts/cape-b/archive/k3-am6254-pocketbeagle2-serenity-cape-b.dts - `bom` (7): archives/bom_revH1.json, archives/bom_revP.csv, archives/bom_revP.json, archives/bom_revQ.csv, archives/bom_revQ.json, archives/bom_revR.csv, archives/docs-superseded/bom_revQ.csv -- `cad-mesh` (194): archives/18in-scale-scad/s_cargo_door_scaled18.scad, archives/18in-scale-scad/s_cargo_door_scaled18.stl, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.scad, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.stl, archives/18in-scale-scad/s_cargo_sect_shell18.scad, archives/18in-scale-scad/s_cargo_sect_shell18.stl, archives/18in-scale-scad/s_eng_left_shell18.scad, archives/18in-scale-scad/s_eng_left_shell18.stl, archives/18in-scale-scad/s_eng_pistons_scaled18.scad, archives/18in-scale-scad/s_eng_pistons_scaled18.stl, archives/18in-scale-scad/s_eng_piv_outer_scaled18.scad, archives/18in-scale-scad/s_eng_piv_outer_scaled18.stl, archives/18in-scale-scad/s_eng_piv_pins_scaled18.scad, archives/18in-scale-scad/s_eng_piv_pins_scaled18.stl, archives/18in-scale-scad/s_eng_right_shell18.scad, archives/18in-scale-scad/s_eng_right_shell18.stl, archives/18in-scale-scad/s_feet_x_4_scaled18.scad, archives/18in-scale-scad/s_feet_x_4_scaled18.stl, archives/18in-scale-scad/s_head_shell18.scad, archives/18in-scale-scad/s_head_shell18.stl, archives/18in-scale-scad/s_legs_scaled18.scad, archives/18in-scale-scad/s_legs_scaled18.stl, archives/18in-scale-scad/s_middle_shell18.scad, archives/18in-scale-scad/s_middle_shell18.stl, archives/18in-scale-scad/s_pivot_arm_a_scaled18.scad, archives/18in-scale-scad/s_pivot_arm_a_scaled18.stl, archives/18in-scale-scad/s_rear_shell18.scad, archives/18in-scale-scad/s_rear_shell18.stl, archives/18in-scale-scad/s_wings_both_shell18.scad, archives/18in-scale-scad/s_wings_both_shell18.stl, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Assemble.py, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Subsystem-Assembly.py, archives/airframe-archives/archive/FreeCAD-scripts/assembly1.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_fuselage_asm4.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_subsystem_assembler.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v1.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v2.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_2mm.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_50mm.py, archives/airframe-archives/archive/blender-scripts/generate_hollow_shells.py, archives/airframe-archives/archive/blender-scripts/generate_shells_v2.py, archives/airframe-archives/archive/edf_bore_sleeve.scad, archives/airframe-archives/archive/openscad/fuselage/canonical_leg_r6.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_housing.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_pair.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_nozzle_idler.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_pinion.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_sector_gear.scad, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/airframe-archives/archive/stls/fuselage/hull_engine_bell.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/feet_x_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_assembled.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_exploded.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_legs_hull_r1.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/legs_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/post.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/strong-leg.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_strutts_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_revs.stl, archives/airframe-archives/archive/stls/fuselage/s_feet_x_4_scaled24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_intake_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_repaired.stl, archives/airframe-archives/archive/stls/nacelles/edf_bore_sleeve.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_drive_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion_a.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_port_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pushrod_crank.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_sector_gear.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_stbd_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_port.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_stbd.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.stl, archives/airframe-archives/archive/stls/nacelles/stator_50mm.stl, archives/airframe-archives/archive/stls/wings/wing_nacelle_pylon_revo.stl, archives/airframe-archives/nacelle_nozzle_straight.scad, archives/airframe-archives/nacelle_pod_50mm_tandem_simple.scad, archives/sensorhat_mounting_tray.stl, archives/stale-20260601/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/hull_cockpit_section.stl, archives/stale-20260601/files-revF/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/bevel_gear_housing.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/dorsal_antenna_fin.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_aft_neck.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_cap.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_section.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_engine_bell.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_left.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_right.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/landing_skid_foot.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_port.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_stbd.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_flap_x8.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/payload_bay_door.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/pinion_a_bracket.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/tilt_bracket_cf_petg.stl, archives/stl/bevel_gear_housing.stl, archives/stl/cm4_node_mounting_tray.stl, archives/stl/hull_aft_neck.stl, archives/stl/hull_cockpit_cap.stl, archives/stl/hull_cockpit_section.stl, archives/stl/hull_engine_bell.stl, archives/stl/hull_mid_body_left.stl, archives/stl/hull_mid_body_right.stl, archives/stl/landing_skid_foot.stl, archives/stl/nacelle_pod_70mm.stl, archives/stl/nacelle_pod_80mm.stl, archives/stl/nacelle_tip_cap_80mm_port.stl, archives/stl/nozzle_flap_x8.stl, archives/stl/nozzle_inner_ring_40mm.stl, archives/stl/nozzle_inner_ring_70mm.stl, archives/stl/nozzle_inner_ring_80mm.stl, archives/stl/nozzle_outer_housing_40mm.stl, archives/stl/nozzle_outer_housing_70mm.stl, archives/stl/nozzle_outer_housing_80mm.stl, archives/stl/payload_bay_door.stl, archives/stl/pinion_a_bracket.stl, archives/stl/s_eng_left_shell24.stl, archives/stl/s_eng_left_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24.stl, archives/stl/s_eng_left_stator_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_left_stator_shell24_revo.stl, archives/stl/s_eng_pistons_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24_50mm.stl, archives/stl/s_eng_piv_pins_scaled24.stl, archives/stl/s_eng_piv_pins_scaled24_50mm.stl, archives/stl/s_eng_right_shell24.stl, archives/stl/s_eng_right_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24.stl, archives/stl/s_eng_right_stator_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_right_stator_shell24_revo.stl, archives/stl/s_pivot_arm_a_scaled24.stl, archives/stl/s_pivot_arm_a_scaled24_50mm.stl, archives/stl/s_pivot_arm_a_scaled24_50mm_repaired.stl, archives/stl/s_wing_port_s1223_revo.stl, archives/stl/s_wing_stbd_s1223_revo.stl, archives/stl/s_wings_both_shell24.stl, archives/stl/s_wings_both_shell24_2mm.stl, archives/stl/s_wings_both_shell24_2mm_repaired.stl, archives/stl/s_wings_both_shell24_50mm.stl, archives/stl/s_wings_both_shell24_repaired.stl, archives/stl/s_wings_s1223_revo.stl, archives/stl/sector_gear_22mm.stl, archives/stl/sensorhat_mounting_tray.stl, archives/stl/tilt_bracket_cf_petg.stl +- `cad-mesh` (195): archives/18in-scale-scad/s_cargo_door_scaled18.scad, archives/18in-scale-scad/s_cargo_door_scaled18.stl, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.scad, archives/18in-scale-scad/s_cargo_door_strutts_scaled18.stl, archives/18in-scale-scad/s_cargo_sect_shell18.scad, archives/18in-scale-scad/s_cargo_sect_shell18.stl, archives/18in-scale-scad/s_eng_left_shell18.scad, archives/18in-scale-scad/s_eng_left_shell18.stl, archives/18in-scale-scad/s_eng_pistons_scaled18.scad, archives/18in-scale-scad/s_eng_pistons_scaled18.stl, archives/18in-scale-scad/s_eng_piv_outer_scaled18.scad, archives/18in-scale-scad/s_eng_piv_outer_scaled18.stl, archives/18in-scale-scad/s_eng_piv_pins_scaled18.scad, archives/18in-scale-scad/s_eng_piv_pins_scaled18.stl, archives/18in-scale-scad/s_eng_right_shell18.scad, archives/18in-scale-scad/s_eng_right_shell18.stl, archives/18in-scale-scad/s_feet_x_4_scaled18.scad, archives/18in-scale-scad/s_feet_x_4_scaled18.stl, archives/18in-scale-scad/s_head_shell18.scad, archives/18in-scale-scad/s_head_shell18.stl, archives/18in-scale-scad/s_legs_scaled18.scad, archives/18in-scale-scad/s_legs_scaled18.stl, archives/18in-scale-scad/s_middle_shell18.scad, archives/18in-scale-scad/s_middle_shell18.stl, archives/18in-scale-scad/s_pivot_arm_a_scaled18.scad, archives/18in-scale-scad/s_pivot_arm_a_scaled18.stl, archives/18in-scale-scad/s_rear_shell18.scad, archives/18in-scale-scad/s_rear_shell18.stl, archives/18in-scale-scad/s_wings_both_shell18.scad, archives/18in-scale-scad/s_wings_both_shell18.stl, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Assemble.py, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Subsystem-Assembly.py, archives/airframe-archives/archive/FreeCAD-scripts/assembly1.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_fuselage_asm4.py, archives/airframe-archives/archive/FreeCAD-scripts/serenity_subsystem_assembler.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v1.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v2.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_2mm.py, archives/airframe-archives/archive/blender-scripts/blender_shells_v3_50mm.py, archives/airframe-archives/archive/blender-scripts/generate_hollow_shells.py, archives/airframe-archives/archive/blender-scripts/generate_shells_v2.py, archives/airframe-archives/archive/edf_bore_sleeve.scad, archives/airframe-archives/archive/openscad/fuselage/canonical_leg_r6.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_housing.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_pair.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_nozzle_idler.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_pinion.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_sector_gear.scad, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/airframe-archives/archive/stls/fuselage/hull_engine_bell.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/ductile_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/feet_x_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/foot_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_assembled.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_gear_exploded.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/landing_legs_hull_r1.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_1_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_2_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_3_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/leg_4_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/legs_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/post.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_deformed.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/spring_wire_nominal.stl, archives/airframe-archives/archive/stls/fuselage/landing-gear/strong-leg.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_door_strutts_scaled24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_cargo_sect_shell24_revs.stl, archives/airframe-archives/archive/stls/fuselage/s_feet_x_4_scaled24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_head_shell24_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_intake_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_middle_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_2mm_repaired.stl, archives/airframe-archives/archive/stls/fuselage/s_rear_shell24_repaired.stl, archives/airframe-archives/archive/stls/nacelles/edf_bore_sleeve.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_drive_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion_a.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_port_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pushrod_crank.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_sector_gear.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_stbd_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_port.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_stbd.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.stl, archives/airframe-archives/archive/stls/nacelles/stator_50mm.stl, archives/airframe-archives/archive/stls/wings/wing_nacelle_pylon_revo.stl, archives/airframe-archives/nacelle_nozzle_straight.scad, archives/airframe-archives/nacelle_pod_50mm_tandem_simple.scad, archives/sensorhat_mounting_tray.stl, archives/stale-20260601/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/hull_cockpit_section.stl, archives/stale-20260601/files-revF/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/bevel_gear_housing.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/cockpit_dome_clear.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/dorsal_antenna_fin.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_aft_neck.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_cap.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_cockpit_section.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_engine_bell.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_left.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/hull_mid_body_right.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/landing_skid_foot.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_port.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_stbd.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_flap_x8.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/payload_bay_door.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/pinion_a_bracket.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/sector_gear_22mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/tilt_bracket_cf_petg.stl, archives/stl/bevel_gear_housing.stl, archives/stl/cm4_node_mounting_tray.stl, archives/stl/hull_aft_neck.stl, archives/stl/hull_cockpit_cap.stl, archives/stl/hull_cockpit_section.stl, archives/stl/hull_engine_bell.stl, archives/stl/hull_mid_body_left.stl, archives/stl/hull_mid_body_right.stl, archives/stl/landing_skid_foot.stl, archives/stl/nacelle_pod_70mm.stl, archives/stl/nacelle_pod_80mm.stl, archives/stl/nacelle_tip_cap_80mm_port.stl, archives/stl/nozzle_flap_x8.stl, archives/stl/nozzle_inner_ring_40mm.stl, archives/stl/nozzle_inner_ring_70mm.stl, archives/stl/nozzle_inner_ring_80mm.stl, archives/stl/nozzle_outer_housing_40mm.stl, archives/stl/nozzle_outer_housing_70mm.stl, archives/stl/nozzle_outer_housing_80mm.stl, archives/stl/payload_bay_door.stl, archives/stl/pinion_a_bracket.stl, archives/stl/s_eng_left_shell24.stl, archives/stl/s_eng_left_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24.stl, archives/stl/s_eng_left_stator_shell24_50mm.stl, archives/stl/s_eng_left_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_left_stator_shell24_revo.stl, archives/stl/s_eng_pistons_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24.stl, archives/stl/s_eng_piv_outer_scaled24_50mm.stl, archives/stl/s_eng_piv_pins_scaled24.stl, archives/stl/s_eng_piv_pins_scaled24_50mm.stl, archives/stl/s_eng_right_shell24.stl, archives/stl/s_eng_right_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24.stl, archives/stl/s_eng_right_stator_shell24_50mm.stl, archives/stl/s_eng_right_stator_shell24_50mm_repaired.stl, archives/stl/s_eng_right_stator_shell24_revo.stl, archives/stl/s_pivot_arm_a_scaled24.stl, archives/stl/s_pivot_arm_a_scaled24_50mm.stl, archives/stl/s_pivot_arm_a_scaled24_50mm_repaired.stl, archives/stl/s_wing_port_s1223_revo.stl, archives/stl/s_wing_stbd_s1223_revo.stl, archives/stl/s_wings_both_shell24.stl, archives/stl/s_wings_both_shell24_2mm.stl, archives/stl/s_wings_both_shell24_2mm_repaired.stl, archives/stl/s_wings_both_shell24_50mm.stl, archives/stl/s_wings_both_shell24_repaired.stl, archives/stl/s_wings_s1223_revo.stl, archives/stl/sector_gear_22mm.stl, archives/stl/sensorhat_mounting_tray.stl, archives/stl/tilt_bracket_cf_petg.stl - `comms-protocol` (19): archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Mask.gts, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-drl_map.pdf, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-job.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1.drl, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.md - `documentation` (16): archives/airframe-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.md, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.md, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.md, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.md, archives/docs-superseded/POWER_SYSTEM_Q.md, archives/docs-superseded/README.md, archives/root-readme-deep-dive-2026-08-03/README.md, archives/root-readme-deep-dive-2026-08-03/deep_dive_sections.md, archives/serenity/README.md, archives/stale-20260601/README.md, archives/stale-20260601/airframe-stls/fuselage.md, archives/stale-20260601/files-revF/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/serenity-drone-revF/README.md, archives/stale-20260601/files-revF/serenity-drone-revF/docs/LICENSE_AND_ATTRIBUTION.md - `emi-hardening` (14): archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Assemble.py, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Subsystem-Assembly.py, archives/avionics-archives/kicad-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.md, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.md, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.md, archives/avionics-archives/kicad-archives/archive/gen_cape_a2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_a2_pcb.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2_pcb.py, archives/docs-superseded/serenity-rev-q.jsx, archives/root-readme-deep-dive-2026-08-03/deep_dive_sections.md, archives/serenity-rev-q.jsx, archives/serenity-rev-r.jsx @@ -25,7 +25,7 @@ Grep a tag name below to get every matching file in one line, without reading th - `licensing` (2): archives/stale-20260601/files-revF/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/serenity-drone-revF/docs/LICENSE_AND_ATTRIBUTION.md - `pcb-design` (158): archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Mask.gts, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-NPTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-NPTH.drl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-PTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-PTH.drl, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1.net, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-B_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-Edge_Cuts.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-F_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-In1_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-In2_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-A-1/CAPE-A-1/CAPE-A-1.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Mask.gts, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-NPTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-NPTH.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-PTH-drl_map.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-PTH.drl, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1.net, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-B_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-Edge_Cuts.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Mask.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Paste.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-F_Silkscreen.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-In1_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-In2_Cu.gbr, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1-job.gbrjob, archives/avionics-archives/gerber-archive/CAPE-B-1/CAPE-B-1/CAPE-B-1.drl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Cu.gbl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Mask.gbs, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Paste.gbp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-B_Silkscreen.gbo, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-Edge_Cuts.gm1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Cu.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Mask.gts, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Paste.gtp, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-F_Silkscreen.gto, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In1_Cu.g1, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-In2_Cu.g2, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-drl_map.pdf, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1-job.gtl, archives/avionics-archives/gerber-archive/XCVR-49MHZ-1/XCVR-49MHZ-1.drl, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-12_202152.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_163955.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_165517.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_170545.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_171620.zip, archives/avionics-archives/kicad-archives/CAPE-A-1-backups/CAPE-A-1-2026-05-21_172625.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-19_234555.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_120000.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_134835.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_174009.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-21_221653.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_114948.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_115954.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_120631.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_121147.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-22_121710.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-24_170015.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_203319.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_204417.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_205610.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_210615.zip, archives/avionics-archives/kicad-archives/CAPE-B-1-backups/CAPE-B-1-2026-05-31_211230.zip, archives/avionics-archives/kicad-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/CAPE-A-1-no-comment.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-1-no-comment.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-A-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-A-2.md, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-1a.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_prl, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_pro, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/CAPE-B-2.md, archives/avionics-archives/kicad-archives/archive/CM3-CARRIER-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM3-CARRIER-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-2.kicad_pcb, archives/avionics-archives/kicad-archives/archive/CM4-CARRIER-2.kicad_sch, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-SWITCH.kicad_pcb, archives/avionics-archives/kicad-archives/archive/COMMS-HAT-SWITCH.kicad_sch, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/PWR-DIST-1.md, archives/avionics-archives/kicad-archives/archive/SENSORHAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/SENSORHAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/TRIHAT-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/TRIHAT-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pcb, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_prl, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_pro, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.kicad_sch, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.md, archives/avionics-archives/kicad-archives/archive/gen_cape_a2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_a2_pcb.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2.py, archives/avionics-archives/kicad-archives/archive/gen_cape_b2_pcb.py, archives/stale-20260601/files-revF/CM4-CARRIER-1.kicad_pcb, archives/stale-20260601/files-revF/COMMS-HAT-1.kicad_pcb, archives/stale-20260601/files-revF/TRIHAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/CM4-CARRIER-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/CM4-CARRIER-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_prl, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_pro, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/CM4-CARRIER-1/cm4-carrier/cm4-carrier.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/COMMS-HAT-1/COMMS-HAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/COMMS-HAT-1/COMMS-HAT-1.kicad_sch, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/TRIHAT-1/TRIHAT-1.kicad_pcb, archives/stale-20260601/files-revF/serenity-drone-revF/pcb/TRIHAT-1/TRIHAT-1.kicad_sch - `power` (2): archives/docs-superseded/POWER_SYSTEM_Q.md, archives/serenity-esc-telem-revH1.jsx -- `propulsion` (57): archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v1.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v2.py, archives/airframe-archives/archive/edf_bore_sleeve.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_housing.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_pair.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_nozzle_idler.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_pinion.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_sector_gear.scad, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/airframe-archives/archive/stls/nacelles/edf_bore_sleeve.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_drive_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion_a.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_port_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pushrod_crank.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_sector_gear.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_stbd_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_port.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_stbd.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.obj, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.stl, archives/airframe-archives/archive/stls/nacelles/stator_50mm.stl, archives/airframe-archives/archive/stls/wings/wing_nacelle_pylon_revo.stl, archives/airframe-archives/nacelle_nozzle_straight.scad, archives/airframe-archives/nacelle_pod_50mm_tandem_simple.scad, archives/nacelle-nozzle-gear.jsx, archives/nacelles.jst, archives/stale-20260601/files-revF/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_port.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_stbd.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_flap_x8.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_70mm.stl, archives/stl/nacelle_pod_70mm.stl, archives/stl/nacelle_pod_80mm.stl, archives/stl/nacelle_tip_cap_80mm_port.stl, archives/stl/nozzle_flap_x8.stl, archives/stl/nozzle_inner_ring_40mm.stl, archives/stl/nozzle_inner_ring_70mm.stl, archives/stl/nozzle_inner_ring_80mm.stl, archives/stl/nozzle_outer_housing_40mm.stl, archives/stl/nozzle_outer_housing_70mm.stl, archives/stl/nozzle_outer_housing_80mm.stl +- `propulsion` (58): archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v1.py, archives/airframe-archives/archive/blender-scripts/blender_nacelle_integrated_v2.py, archives/airframe-archives/archive/edf_bore_sleeve.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_housing.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_bevel_pair.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_nozzle_idler.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_pinion.scad, archives/airframe-archives/archive/openscad/nacelles/nacelle_sector_gear.scad, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/airframe-archives/archive/stls/nacelles/edf_bore_sleeve.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_drive_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pinion_a.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_port_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_pushrod_crank.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_sector_gear.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_stbd_revt.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_port.stl, archives/airframe-archives/archive/stls/nacelles/nacelle_tip_cap_stbd.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_housing.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_bevel_pair.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.obj, archives/airframe-archives/archive/stls/nacelles/sector_gear_22mm_fixed.stl, archives/airframe-archives/archive/stls/nacelles/stator_50mm.stl, archives/airframe-archives/archive/stls/wings/wing_nacelle_pylon_revo.stl, archives/airframe-archives/nacelle_nozzle_straight.scad, archives/airframe-archives/nacelle_pod_50mm_tandem_simple.scad, archives/nacelle-nozzle-gear.jsx, archives/nacelles.jst, archives/stale-20260601/files-revF/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_pod_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_port.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nacelle_tip_cap_stbd.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_flap_x8.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_inner_ring_70mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_40mm.stl, archives/stale-20260601/files-revF/serenity-drone-revF/stl/nozzle_outer_housing_70mm.stl, archives/stl/nacelle_pod_70mm.stl, archives/stl/nacelle_pod_80mm.stl, archives/stl/nacelle_tip_cap_80mm_port.stl, archives/stl/nozzle_flap_x8.stl, archives/stl/nozzle_inner_ring_40mm.stl, archives/stl/nozzle_inner_ring_70mm.stl, archives/stl/nozzle_inner_ring_80mm.stl, archives/stl/nozzle_outer_housing_40mm.stl, archives/stl/nozzle_outer_housing_70mm.stl, archives/stl/nozzle_outer_housing_80mm.stl - `redundancy-failover` (1): archives/root-readme-deep-dive-2026-08-03/deep_dive_sections.md - `security` (20): archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Assemble.py, archives/airframe-archives/archive/FreeCAD-scripts/Serenity-Subsystem-Assembly.py, archives/airframe-archives/archive/openscad/wings/wing_nacelle_pylon_revo.scad, archives/avionics-archives/kicad-archives/archive/ARCHIVE-REVQ.md, archives/avionics-archives/kicad-archives/archive/XCVR-49MHZ-1.md, archives/chat/journal.txt, archives/docs-superseded/POWER_SYSTEM_Q.md, archives/docs-superseded/serenity-rev-q.jsx, archives/root-readme-deep-dive-2026-08-03/deep_dive_sections.md, archives/serenity-esc-telem-revH1.jsx, archives/serenity-rev-f-.jsx, archives/serenity-rev-f.jsx, archives/serenity-rev-p.jsx, archives/serenity-rev-q.jsx, archives/serenity-rev-r.jsx, archives/stale-20260601/files-revF/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/files-revF/serenity-drone-revF/docs/LICENSE_AND_ATTRIBUTION.md, archives/stale-20260601/pico2-hat.jsx, avionics/firmware/dts/cape-a/archive/k3-am6254-pocketbeagle2-serenity-cape-a.dts, avionics/firmware/dts/cape-b/archive/k3-am6254-pocketbeagle2-serenity-cape-b.dts @@ -240,6 +240,7 @@ nacelle_nozzle_closed_asm.stl — STL mesh (binary) [archive, cad-mesh, propulsi nacelle_nozzle_closed_asm_repaired.stl — STL mesh (binary) [archive, cad-mesh, propulsion] nacelle_nozzle_idler.stl — STL mesh (ASCII): OpenSCAD_Model [archive, cad-mesh, propulsion] nacelle_nozzle_idler_bracket.stl — STL mesh (ASCII): OpenSCAD_Model [archive, cad-mesh, propulsion] +nacelle_nozzle_iris.stl — STL mesh (ASCII): OpenSCAD_Model [archive, cad-mesh, propulsion] nacelle_nozzle_petal.stl — STL mesh (binary) [archive, cad-mesh, propulsion] nacelle_nozzle_petal_repaired.stl — STL mesh (binary) [archive, cad-mesh, propulsion] rear_nozzle_petal_repaired.stl — STL mesh (binary) [archive, cad-mesh, propulsion] diff --git a/PROJECT_INDEX.md b/PROJECT_INDEX.md index 38437f16..0e5f3764 100644 --- a/PROJECT_INDEX.md +++ b/PROJECT_INDEX.md @@ -6,21 +6,21 @@ look, change the generator (tools/precommit_index.py), not this file. Machine-readable form: tools/index_tags.json --> - + ## Tag Index Grep a tag name below to get every matching file in one line, without reading the rest of this document. -- `avionics-hardware` (395): avionics/AGENTS.md, avionics/LICENSE, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/datasheets/6391731564544371956530548.pdf, avionics/datasheets/749010012A.pdf, avionics/datasheets/987651-1223.pdf, avionics/datasheets/DS3218 datasheet.pdf, avionics/datasheets/DS3225 datasheet.pdf, avionics/datasheets/FOCSineESCCANCommunicationProtocolV30.pdf, avionics/datasheets/KSZ9477S-Data-Sheet-DS00002392C.pdf, avionics/datasheets/L-1038e.A5_phyCORE-AM62x_HW Manual.pdf, avionics/datasheets/MT6701_Datasheet_Rev.1.9.pdf, avionics/datasheets/PCA9555.pdf, avionics/datasheets/S32K-RM.pdf, avionics/datasheets/S32K1xx.pdf, avionics/datasheets/SAM-M10Q_DataSheet_UBX-22013293.pdf, avionics/datasheets/SLB_9670VQ20_Infineon.pdf, avionics/datasheets/SLB_9672XU20_Infineon.pdf, avionics/datasheets/SM04B-SRSS-TB.pdf, avionics/datasheets/SM1553-Series_HiRel-Data-Bus-Pulse-Transformer_RevD.pdf, avionics/datasheets/SRF2012A.pdf, avionics/datasheets/Vishay_45273MDSK.pdf, avionics/datasheets/X2YDatasheet.pdf, avionics/datasheets/X2Y_15-2237598.pdf, avionics/datasheets/adin1300.pdf, avionics/datasheets/adm2795e.pdf, avionics/datasheets/ak7455-en-datasheet-myakm.pdf, avionics/datasheets/bsh-bth.pdf, avionics/datasheets/bst-bmp388-ds001.pdf, avionics/datasheets/bth-xxx-xx-x-d-xx-footprint.pdf, avionics/datasheets/ds-000347-icm-42688-p-v1.6.pdf, avionics/datasheets/ds26lv31qml.pdf, avionics/datasheets/ds26lv32at.pdf, avionics/datasheets/eGH.pdf, avionics/datasheets/infineon-optiga-trust-m-datasheet-en.pdf, avionics/datasheets/iso6442.pdf, avionics/datasheets/isow1044.pdf, avionics/datasheets/isow1412.pdf, avionics/datasheets/mspm0g3507-q1.pdf, avionics/datasheets/mspm0g3507.pdf, avionics/datasheets/mspm0g3518-q1.pdf, avionics/datasheets/slaae29a.pdf, avionics/datasheets/slaae76e.pdf, avionics/datasheets/slaaet8a.pdf, avionics/datasheets/slau846e.pdf, avionics/datasheets/slaz742g.pdf, avionics/datasheets/slb9672.pdf, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/CMakeLists.txt, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/cn/CMakeLists.txt, avionics/firmware/cn/src/main.c, avionics/firmware/cn/src/si5351.c, avionics/firmware/cn/src/si5351.h, avionics/firmware/cn/src/xcvr_kiss.c, avionics/firmware/cn/src/xcvr_kiss.h, avionics/firmware/common/CMakeLists.txt, avionics/firmware/common/include/ax25_types.h, avionics/firmware/common/include/failsafe_config.h, avionics/firmware/common/include/kiss_types.h, avionics/firmware/common/include/sbus_input.h, avionics/firmware/common/src/sbus_input.c, avionics/firmware/dts/Makefile, avionics/firmware/dts/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/CMakeLists.txt, avionics/firmware/fc/src/bmon_ina2xx.c, avionics/firmware/fc/src/bmon_ina2xx.h, avionics/firmware/fc/src/cell_mon_bq769x0.c, avionics/firmware/fc/src/cell_mon_bq769x0.h, avionics/firmware/fc/src/governor_config.h, avionics/firmware/fc/src/mag_mmc5983ma.c, avionics/firmware/fc/src/mag_mmc5983ma.h, avionics/firmware/fc/src/mag_qmc5883l.c, avionics/firmware/fc/src/mag_qmc5883l.h, avionics/firmware/fc/src/main.c, avionics/firmware/fc/src/pwr_fault.c, avionics/firmware/fc/src/pwr_fault.h, avionics/firmware/fc/tools/.gitignore, avionics/firmware/fc/tools/governor_cal.py, avionics/firmware/fc/tools/requirements.txt, avionics/kicad/.gitignore, avionics/kicad/4_Run KiCad ERC_DRC validator (changed files only).txt, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Adhesive.gba, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Courtyard.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Cu.gbl, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Fab.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Mask.gbs, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Paste.gbp, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Silkscreen.gbo, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-Edge_Cuts.gm1, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Adhesive.gta, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Courtyard.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Cu.gtl, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Fab.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Mask.gts, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Paste.gtp, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Silkscreen.gto, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-Margin.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-job.gbrjob, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1.drl, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.dsn, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pcb, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pcb.pre-g351x, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_prl, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pro, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_sch, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_sch.pre-g351x, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.net, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.ses, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1_v2.ses, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_pcb.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_sch.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/route_can_periph_gw_pcb.py, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/gerbers/Commo-B_Courtyard.gbr, avionics/kicad/Commo/gerbers/Commo-B_Cu.gbl, avionics/kicad/Commo/gerbers/Commo-B_Fab.gbr, avionics/kicad/Commo/gerbers/Commo-B_Mask.gbs, avionics/kicad/Commo/gerbers/Commo-B_Paste.gbp, avionics/kicad/Commo/gerbers/Commo-B_Silkscreen.gbo, avionics/kicad/Commo/gerbers/Commo-Edge_Cuts.gm1, avionics/kicad/Commo/gerbers/Commo-F_Courtyard.gbr, avionics/kicad/Commo/gerbers/Commo-F_Cu.gtl, avionics/kicad/Commo/gerbers/Commo-F_Fab.gbr, avionics/kicad/Commo/gerbers/Commo-F_Mask.gts, avionics/kicad/Commo/gerbers/Commo-F_Paste.gtp, avionics/kicad/Commo/gerbers/Commo-F_Silkscreen.gto, avionics/kicad/Commo/gerbers/Commo-In1_Cu.g1, avionics/kicad/Commo/gerbers/Commo-In2_Cu.g2, avionics/kicad/Commo/gerbers/Commo-Margin.gbr, avionics/kicad/Commo/gerbers/Commo-in1-back.drl, avionics/kicad/Commo/gerbers/Commo-job.gbrjob, avionics/kicad/Commo/gerbers/Commo.drl, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-Edge_Cuts.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In1_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In2_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-job.gbrjob, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2.drl, avionics/kicad/Commo/kicads/Commo.kicad_pcb, avionics/kicad/Commo/kicads/Commo.kicad_prl, avionics/kicad/Commo/kicads/Commo.kicad_pro, avionics/kicad/Commo/kicads/Commo.kicad_sch, avionics/kicad/Commo/scripts/cleanup_commo_drc.py, avionics/kicad/Commo/scripts/gen_commo_sch.py, avionics/kicad/Commo/scripts/inject_commo_tpm.py, avionics/kicad/Commo/scripts/mod_commo_pcb.py, avionics/kicad/Commo/scripts/route_commo_rssi.py, avionics/kicad/ENC-NACELLE-1.kicad_pcb, avionics/kicad/ENC-NACELLE-1.kicad_prl, avionics/kicad/ENC-NACELLE-1.kicad_pro, avionics/kicad/ENC-NACELLE-1.kicad_sch, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/ENC-NACELLE-1.net, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/GENERATOR_DRIFT_ANALYSIS.md, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Adhesive.gba, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Courtyard.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Cu.gbl, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Fab.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Mask.gbs, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Paste.gbp, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Silkscreen.gbo, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-Edge_Cuts.gm1, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Adhesive.gta, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Courtyard.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Cu.gtl, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Fab.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Mask.gts, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Paste.gtp, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Silkscreen.gto, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-In1_Cu.g1, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-Margin.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-job.gbrjob, avionics/kicad/FlightEngineer/gerbers/FlightEngineer.drl, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_pcb, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_prl, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_pro, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_sch, avionics/kicad/FlightEngineer/kicads/Kaylee.kicad_sch.pre-g351x, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_pin_snap.py, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_revs1_cleanup.py, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_yinv.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_pcb.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_revs1.py, avionics/kicad/FlightEngineer/scripts/inject_flight_engineer_trust_module.py, avionics/kicad/FlightEngineer/scripts/mod_flight_engineer_pcb_revs1.py, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/Observer.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Observer.pretty/TQFP-128-1EP_KSZ9477_14x14mm_P0.4mm_EP10x10.kicad_mod, avionics/kicad/Observer/Observer.pretty/Wurth_749010012A_10-100BASE-TX.kicad_mod, avionics/kicad/Observer/Observer.pretty/phyCORE-AM62x_PCM071_2xBTH-060.kicad_mod, avionics/kicad/Observer/Observer.pretty/phyCORE-AM62x_PCM071_placement.kicad_mod, avionics/kicad/Observer/Observer_som_pinmap.csv, avionics/kicad/Observer/PCBNEW_SWIG_BUG.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Observer/Vera.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Vera.pretty/phyCORE-AM62x_PCM071_2xBTH-060.kicad_mod, avionics/kicad/Observer/Vera.pretty/phyCORE-AM62x_PCM071_placement.kicad_mod, avionics/kicad/Observer/gen_vera_bth060_footprint.py, avionics/kicad/Observer/gen_vera_ds_footprints.py, avionics/kicad/Observer/gen_vera_som_pcm071.py, avionics/kicad/Observer/kicads/Jayne.kicad_sch.pre-g351x, avionics/kicad/Observer/kicads/Observer.kicad_dru, avionics/kicad/Observer/kicads/Observer.kicad_pcb, avionics/kicad/Observer/kicads/Observer.kicad_pcb.pre-g351x, avionics/kicad/Observer/kicads/Observer.kicad_prl, avionics/kicad/Observer/kicads/Observer.kicad_pro, avionics/kicad/Observer/kicads/Observer.kicad_sch, avionics/kicad/Observer/kicads/Observer.net, avionics/kicad/Observer/kicads/_autosave-Observer.kicad_pcb, avionics/kicad/Observer/kicads/fp-lib-table, avionics/kicad/Observer/mod_vera_corners.py, avionics/kicad/Observer/mod_vera_ds_pcb.py, avionics/kicad/Observer/mod_vera_som_place.py, avionics/kicad/Observer/mod_vera_trapezoid.py, avionics/kicad/Observer/scripts/gen_observer.py, avionics/kicad/Observer/scripts/gen_observer_bth060_footprint.py, avionics/kicad/Observer/scripts/gen_observer_carrier_pcb.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_ds_footprints.py, avionics/kicad/Observer/scripts/gen_observer_ic_symbols.py, avionics/kicad/Observer/scripts/gen_observer_ksz_symbol.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Observer/scripts/gen_observer_som_pcm071.py, avionics/kicad/Observer/scripts/gen_observer_som_symbol.py, avionics/kicad/Observer/scripts/mod_observer_corners.py, avionics/kicad/Observer/scripts/mod_observer_ds_pcb.py, avionics/kicad/Observer/scripts/mod_observer_som_place.py, avionics/kicad/Observer/scripts/mod_observer_trapezoid.py, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/Pilot.md, avionics/kicad/Pilot/gerbers/Pilot-B_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Mask.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Paste.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Silkscreen.gbr, avionics/kicad/Pilot/gerbers/Pilot-Edge_Cuts.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Mask.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Paste.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Silkscreen.gbr, avionics/kicad/Pilot/gerbers/Pilot-In1_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-In2_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-job.gbrjob, avionics/kicad/Pilot/gerbers/Pilot.drl, avionics/kicad/Pilot/kicads/Pilot.kicad_pcb, avionics/kicad/Pilot/kicads/Pilot.kicad_prl, avionics/kicad/Pilot/kicads/Pilot.kicad_pro, avionics/kicad/Pilot/kicads/Pilot.kicad_sch, avionics/kicad/Pilot/kicads/Pilot_rebuild.kicad_sch, avionics/kicad/Pilot/kicads/sym-lib-table, avionics/kicad/Pilot/scripts/gen_pilot_sch.py, avionics/kicad/Pilot/scripts/mod_pilot_pcb_reconcile.py, avionics/kicad/README.md, avionics/kicad/Serenity-Custom.pretty/MountingHole_2.2mm_M2_SelfTap_Compact.kicad_mod, avionics/kicad/Serenity-Custom.pretty/Pigtail_7W_DirectSolder.kicad_mod, avionics/kicad/Serenity-Custom.pretty/TI_WL1837MOD.kicad_mod, avionics/kicad/Serenity-Custom.pretty/uBlox_SAM-M10Q-00B.kicad_mod, avionics/kicad/TODO-1.2b-CHECKLIST.md, avionics/kicad/TODO-1.2b-KICAD-READY.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/XO/XO.md, avionics/kicad/XO/gerbers/XO-B_Cu.gbr, avionics/kicad/XO/gerbers/XO-B_Mask.gbr, avionics/kicad/XO/gerbers/XO-B_Paste.gbr, avionics/kicad/XO/gerbers/XO-B_Silkscreen.gbr, avionics/kicad/XO/gerbers/XO-Edge_Cuts.gbr, avionics/kicad/XO/gerbers/XO-F_Cu.gbr, avionics/kicad/XO/gerbers/XO-F_Mask.gbr, avionics/kicad/XO/gerbers/XO-F_Paste.gbr, avionics/kicad/XO/gerbers/XO-F_Silkscreen.gbr, avionics/kicad/XO/gerbers/XO-In1_Cu.gbr, avionics/kicad/XO/gerbers/XO-In2_Cu.gbr, avionics/kicad/XO/gerbers/XO-job.gbrjob, avionics/kicad/XO/gerbers/XO.drl, avionics/kicad/XO/kicads/XO.kicad_pcb, avionics/kicad/XO/kicads/XO.kicad_prl, avionics/kicad/XO/kicads/XO.kicad_pro, avionics/kicad/XO/kicads/XO.kicad_sch, avionics/kicad/XO/ref_remap_2026-07-18.json, avionics/kicad/add_eth_phy.py, avionics/kicad/add_sensors_sbus.py, avionics/kicad/apply_netlist.py, avionics/kicad/check_impedance.py, avionics/kicad/complete_1_2b.py, avionics/kicad/complete_xcvr_49mhz2.py, avionics/kicad/drc_report.txt, avionics/kicad/fix_pilot_xo_isolators.py, avionics/kicad/fix_starved_thermal_pads.py, avionics/kicad/fix_xcvr_labels.py, avionics/kicad/fp-lib-table, avionics/kicad/gen_enc_nacelle_pcb.py, avionics/kicad/generate_gerbers.py, avionics/kicad/generate_gerbers_rev_s1.py, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Courtyard.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Cu.gbl, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Fab.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Mask.gbs, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Paste.gbp, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Silkscreen.gbo, avionics/kicad/gerbers/CAPE-B-2-S1/XO-Edge_Cuts.gm1, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Courtyard.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Cu.gtl, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Fab.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Mask.gts, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Paste.gtp, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Silkscreen.gto, avionics/kicad/gerbers/CAPE-B-2-S1/XO-In1_Cu.g1, avionics/kicad/gerbers/CAPE-B-2-S1/XO-In2_Cu.g2, avionics/kicad/gerbers/CAPE-B-2-S1/XO-Margin.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-job.gbrjob, avionics/kicad/gerbers/CAPE-B-2-S1/XO.drl/XO.drl, avionics/kicad/gerbers/Commo-S1/Commo-B_Courtyard.gbr, avionics/kicad/gerbers/Commo-S1/Commo-B_Cu.gbl, avionics/kicad/gerbers/Commo-S1/Commo-B_Fab.gbr, avionics/kicad/gerbers/Commo-S1/Commo-B_Mask.gbs, avionics/kicad/gerbers/Commo-S1/Commo-B_Paste.gbp, avionics/kicad/gerbers/Commo-S1/Commo-B_Silkscreen.gbo, avionics/kicad/gerbers/Commo-S1/Commo-Edge_Cuts.gm1, avionics/kicad/gerbers/Commo-S1/Commo-F_Courtyard.gbr, avionics/kicad/gerbers/Commo-S1/Commo-F_Cu.gtl, avionics/kicad/gerbers/Commo-S1/Commo-F_Fab.gbr, avionics/kicad/gerbers/Commo-S1/Commo-F_Mask.gts, avionics/kicad/gerbers/Commo-S1/Commo-F_Paste.gtp, avionics/kicad/gerbers/Commo-S1/Commo-F_Silkscreen.gto, avionics/kicad/gerbers/Commo-S1/Commo-In1_Cu.g1, avionics/kicad/gerbers/Commo-S1/Commo-In2_Cu.g2, avionics/kicad/gerbers/Commo-S1/Commo-Margin.gbr, avionics/kicad/gerbers/Commo-S1/Commo-job.gbrjob, avionics/kicad/gerbers/Commo-S1/Commo.drl/Commo.drl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Adhesive.gba, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Courtyard.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Cu.gbl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Fab.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Mask.gbs, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Paste.gbp, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Silkscreen.gbo, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-Edge_Cuts.gm1, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Adhesive.gta, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Courtyard.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Cu.gtl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Fab.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Mask.gts, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Paste.gtp, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Silkscreen.gto, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-In1_Cu.g1, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-Margin.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-job.gbrjob, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer.drl/FlightEngineer.drl, avionics/kicad/replace_footprints.py, avionics/kicad/retarget_mspm0g351x_slb9672.py, avionics/kicad/retarget_pcb_footprints.py, avionics/kicad/symbols/ISOW1044BDFMR_pinmap.csv, avionics/kicad/symbols/KSZ9477STXI_pinmap.csv, avionics/kicad/symbols/MSPM0G3507SRGZR_pinmap.csv, avionics/kicad/symbols/MSPM0G3518_Q1_RHB.kicad_sym, avionics/kicad/symbols/MSPM0G3519_Q1_RGZ.kicad_sym, avionics/kicad/symbols/Observer_ISOW1044BDFMR.kicad_sym, avionics/kicad/symbols/Observer_KSZ9477.kicad_sym, avionics/kicad/symbols/Observer_MSPM0G3507_RGZ.kicad_sym, avionics/kicad/symbols/Observer_SoM.kicad_sym, avionics/kicad/symbols/Observer_SoM_PCM071.kicad_sym, avionics/kicad/symbols/SLB9672XU2_0_pinmap.csv, avionics/kicad/symbols/SLB9672_TPM.kicad_sym, avionics/kicad/symbols/Vera_SoM_PCM071.kicad_sym, avionics/kicad/symbols/footprints/PHYCORE-AM62AX-DSC-FOOTPRINT.kicad_mod, avionics/kicad/symbols/phyCORE_AM62x_PCM071_pinmap.csv, avionics/mosfet-search.txt, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/TODO.md, avionics/rev-s1/WBS.md +- `avionics-hardware` (396): avionics/AGENTS.md, avionics/LICENSE, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/datasheets/6391731564544371956530548.pdf, avionics/datasheets/749010012A.pdf, avionics/datasheets/987651-1223.pdf, avionics/datasheets/DS3218 datasheet.pdf, avionics/datasheets/DS3225 datasheet.pdf, avionics/datasheets/FOCSineESCCANCommunicationProtocolV30.pdf, avionics/datasheets/KSZ9477S-Data-Sheet-DS00002392C.pdf, avionics/datasheets/L-1038e.A5_phyCORE-AM62x_HW Manual.pdf, avionics/datasheets/MT6701_Datasheet_Rev.1.9.pdf, avionics/datasheets/PCA9555.pdf, avionics/datasheets/S32K-RM.pdf, avionics/datasheets/S32K1xx.pdf, avionics/datasheets/SAM-M10Q_DataSheet_UBX-22013293.pdf, avionics/datasheets/SLB_9670VQ20_Infineon.pdf, avionics/datasheets/SLB_9672XU20_Infineon.pdf, avionics/datasheets/SM04B-SRSS-TB.pdf, avionics/datasheets/SM1553-Series_HiRel-Data-Bus-Pulse-Transformer_RevD.pdf, avionics/datasheets/SRF2012A.pdf, avionics/datasheets/Vishay_45273MDSK.pdf, avionics/datasheets/X2YDatasheet.pdf, avionics/datasheets/X2Y_15-2237598.pdf, avionics/datasheets/adin1300.pdf, avionics/datasheets/adm2795e.pdf, avionics/datasheets/ak7455-en-datasheet-myakm.pdf, avionics/datasheets/bsh-bth.pdf, avionics/datasheets/bst-bmp388-ds001.pdf, avionics/datasheets/bth-xxx-xx-x-d-xx-footprint.pdf, avionics/datasheets/ds-000347-icm-42688-p-v1.6.pdf, avionics/datasheets/ds26lv31qml.pdf, avionics/datasheets/ds26lv32at.pdf, avionics/datasheets/eGH.pdf, avionics/datasheets/infineon-optiga-trust-m-datasheet-en.pdf, avionics/datasheets/iso6442.pdf, avionics/datasheets/isow1044.pdf, avionics/datasheets/isow1412.pdf, avionics/datasheets/mechanics-of-advanced-composite-structures.pdf, avionics/datasheets/mspm0g3507-q1.pdf, avionics/datasheets/mspm0g3507.pdf, avionics/datasheets/mspm0g3518-q1.pdf, avionics/datasheets/slaae29a.pdf, avionics/datasheets/slaae76e.pdf, avionics/datasheets/slaaet8a.pdf, avionics/datasheets/slau846e.pdf, avionics/datasheets/slaz742g.pdf, avionics/datasheets/slb9672.pdf, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/CMakeLists.txt, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/cn/CMakeLists.txt, avionics/firmware/cn/src/main.c, avionics/firmware/cn/src/si5351.c, avionics/firmware/cn/src/si5351.h, avionics/firmware/cn/src/xcvr_kiss.c, avionics/firmware/cn/src/xcvr_kiss.h, avionics/firmware/common/CMakeLists.txt, avionics/firmware/common/include/ax25_types.h, avionics/firmware/common/include/failsafe_config.h, avionics/firmware/common/include/kiss_types.h, avionics/firmware/common/include/sbus_input.h, avionics/firmware/common/src/sbus_input.c, avionics/firmware/dts/Makefile, avionics/firmware/dts/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/CMakeLists.txt, avionics/firmware/fc/src/bmon_ina2xx.c, avionics/firmware/fc/src/bmon_ina2xx.h, avionics/firmware/fc/src/cell_mon_bq769x0.c, avionics/firmware/fc/src/cell_mon_bq769x0.h, avionics/firmware/fc/src/governor_config.h, avionics/firmware/fc/src/mag_mmc5983ma.c, avionics/firmware/fc/src/mag_mmc5983ma.h, avionics/firmware/fc/src/mag_qmc5883l.c, avionics/firmware/fc/src/mag_qmc5883l.h, avionics/firmware/fc/src/main.c, avionics/firmware/fc/src/pwr_fault.c, avionics/firmware/fc/src/pwr_fault.h, avionics/firmware/fc/tools/.gitignore, avionics/firmware/fc/tools/governor_cal.py, avionics/firmware/fc/tools/requirements.txt, avionics/kicad/.gitignore, avionics/kicad/4_Run KiCad ERC_DRC validator (changed files only).txt, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Adhesive.gba, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Courtyard.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Cu.gbl, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Fab.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Mask.gbs, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Paste.gbp, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Silkscreen.gbo, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-Edge_Cuts.gm1, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Adhesive.gta, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Courtyard.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Cu.gtl, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Fab.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Mask.gts, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Paste.gtp, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Silkscreen.gto, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-Margin.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-job.gbrjob, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1.drl, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.dsn, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pcb, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pcb.pre-g351x, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_prl, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pro, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_sch, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_sch.pre-g351x, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.net, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.ses, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1_v2.ses, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_pcb.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_sch.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/route_can_periph_gw_pcb.py, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/gerbers/Commo-B_Courtyard.gbr, avionics/kicad/Commo/gerbers/Commo-B_Cu.gbl, avionics/kicad/Commo/gerbers/Commo-B_Fab.gbr, avionics/kicad/Commo/gerbers/Commo-B_Mask.gbs, avionics/kicad/Commo/gerbers/Commo-B_Paste.gbp, avionics/kicad/Commo/gerbers/Commo-B_Silkscreen.gbo, avionics/kicad/Commo/gerbers/Commo-Edge_Cuts.gm1, avionics/kicad/Commo/gerbers/Commo-F_Courtyard.gbr, avionics/kicad/Commo/gerbers/Commo-F_Cu.gtl, avionics/kicad/Commo/gerbers/Commo-F_Fab.gbr, avionics/kicad/Commo/gerbers/Commo-F_Mask.gts, avionics/kicad/Commo/gerbers/Commo-F_Paste.gtp, avionics/kicad/Commo/gerbers/Commo-F_Silkscreen.gto, avionics/kicad/Commo/gerbers/Commo-In1_Cu.g1, avionics/kicad/Commo/gerbers/Commo-In2_Cu.g2, avionics/kicad/Commo/gerbers/Commo-Margin.gbr, avionics/kicad/Commo/gerbers/Commo-in1-back.drl, avionics/kicad/Commo/gerbers/Commo-job.gbrjob, avionics/kicad/Commo/gerbers/Commo.drl, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-Edge_Cuts.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In1_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In2_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-job.gbrjob, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2.drl, avionics/kicad/Commo/kicads/Commo.kicad_pcb, avionics/kicad/Commo/kicads/Commo.kicad_prl, avionics/kicad/Commo/kicads/Commo.kicad_pro, avionics/kicad/Commo/kicads/Commo.kicad_sch, avionics/kicad/Commo/scripts/cleanup_commo_drc.py, avionics/kicad/Commo/scripts/gen_commo_sch.py, avionics/kicad/Commo/scripts/inject_commo_tpm.py, avionics/kicad/Commo/scripts/mod_commo_pcb.py, avionics/kicad/Commo/scripts/route_commo_rssi.py, avionics/kicad/ENC-NACELLE-1.kicad_pcb, avionics/kicad/ENC-NACELLE-1.kicad_prl, avionics/kicad/ENC-NACELLE-1.kicad_pro, avionics/kicad/ENC-NACELLE-1.kicad_sch, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/ENC-NACELLE-1.net, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/GENERATOR_DRIFT_ANALYSIS.md, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Adhesive.gba, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Courtyard.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Cu.gbl, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Fab.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Mask.gbs, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Paste.gbp, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Silkscreen.gbo, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-Edge_Cuts.gm1, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Adhesive.gta, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Courtyard.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Cu.gtl, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Fab.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Mask.gts, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Paste.gtp, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Silkscreen.gto, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-In1_Cu.g1, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-Margin.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-job.gbrjob, avionics/kicad/FlightEngineer/gerbers/FlightEngineer.drl, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_pcb, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_prl, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_pro, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_sch, avionics/kicad/FlightEngineer/kicads/Kaylee.kicad_sch.pre-g351x, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_pin_snap.py, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_revs1_cleanup.py, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_yinv.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_pcb.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_revs1.py, avionics/kicad/FlightEngineer/scripts/inject_flight_engineer_trust_module.py, avionics/kicad/FlightEngineer/scripts/mod_flight_engineer_pcb_revs1.py, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/Observer.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Observer.pretty/TQFP-128-1EP_KSZ9477_14x14mm_P0.4mm_EP10x10.kicad_mod, avionics/kicad/Observer/Observer.pretty/Wurth_749010012A_10-100BASE-TX.kicad_mod, avionics/kicad/Observer/Observer.pretty/phyCORE-AM62x_PCM071_2xBTH-060.kicad_mod, avionics/kicad/Observer/Observer.pretty/phyCORE-AM62x_PCM071_placement.kicad_mod, avionics/kicad/Observer/Observer_som_pinmap.csv, avionics/kicad/Observer/PCBNEW_SWIG_BUG.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Observer/Vera.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Vera.pretty/phyCORE-AM62x_PCM071_2xBTH-060.kicad_mod, avionics/kicad/Observer/Vera.pretty/phyCORE-AM62x_PCM071_placement.kicad_mod, avionics/kicad/Observer/gen_vera_bth060_footprint.py, avionics/kicad/Observer/gen_vera_ds_footprints.py, avionics/kicad/Observer/gen_vera_som_pcm071.py, avionics/kicad/Observer/kicads/Jayne.kicad_sch.pre-g351x, avionics/kicad/Observer/kicads/Observer.kicad_dru, avionics/kicad/Observer/kicads/Observer.kicad_pcb, avionics/kicad/Observer/kicads/Observer.kicad_pcb.pre-g351x, avionics/kicad/Observer/kicads/Observer.kicad_prl, avionics/kicad/Observer/kicads/Observer.kicad_pro, avionics/kicad/Observer/kicads/Observer.kicad_sch, avionics/kicad/Observer/kicads/Observer.net, avionics/kicad/Observer/kicads/_autosave-Observer.kicad_pcb, avionics/kicad/Observer/kicads/fp-lib-table, avionics/kicad/Observer/mod_vera_corners.py, avionics/kicad/Observer/mod_vera_ds_pcb.py, avionics/kicad/Observer/mod_vera_som_place.py, avionics/kicad/Observer/mod_vera_trapezoid.py, avionics/kicad/Observer/scripts/gen_observer.py, avionics/kicad/Observer/scripts/gen_observer_bth060_footprint.py, avionics/kicad/Observer/scripts/gen_observer_carrier_pcb.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_ds_footprints.py, avionics/kicad/Observer/scripts/gen_observer_ic_symbols.py, avionics/kicad/Observer/scripts/gen_observer_ksz_symbol.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Observer/scripts/gen_observer_som_pcm071.py, avionics/kicad/Observer/scripts/gen_observer_som_symbol.py, avionics/kicad/Observer/scripts/mod_observer_corners.py, avionics/kicad/Observer/scripts/mod_observer_ds_pcb.py, avionics/kicad/Observer/scripts/mod_observer_som_place.py, avionics/kicad/Observer/scripts/mod_observer_trapezoid.py, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/Pilot.md, avionics/kicad/Pilot/gerbers/Pilot-B_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Mask.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Paste.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Silkscreen.gbr, avionics/kicad/Pilot/gerbers/Pilot-Edge_Cuts.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Mask.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Paste.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Silkscreen.gbr, avionics/kicad/Pilot/gerbers/Pilot-In1_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-In2_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-job.gbrjob, avionics/kicad/Pilot/gerbers/Pilot.drl, avionics/kicad/Pilot/kicads/Pilot.kicad_pcb, avionics/kicad/Pilot/kicads/Pilot.kicad_prl, avionics/kicad/Pilot/kicads/Pilot.kicad_pro, avionics/kicad/Pilot/kicads/Pilot.kicad_sch, avionics/kicad/Pilot/kicads/Pilot_rebuild.kicad_sch, avionics/kicad/Pilot/kicads/sym-lib-table, avionics/kicad/Pilot/scripts/gen_pilot_sch.py, avionics/kicad/Pilot/scripts/mod_pilot_pcb_reconcile.py, avionics/kicad/README.md, avionics/kicad/Serenity-Custom.pretty/MountingHole_2.2mm_M2_SelfTap_Compact.kicad_mod, avionics/kicad/Serenity-Custom.pretty/Pigtail_7W_DirectSolder.kicad_mod, avionics/kicad/Serenity-Custom.pretty/TI_WL1837MOD.kicad_mod, avionics/kicad/Serenity-Custom.pretty/uBlox_SAM-M10Q-00B.kicad_mod, avionics/kicad/TODO-1.2b-CHECKLIST.md, avionics/kicad/TODO-1.2b-KICAD-READY.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/XO/XO.md, avionics/kicad/XO/gerbers/XO-B_Cu.gbr, avionics/kicad/XO/gerbers/XO-B_Mask.gbr, avionics/kicad/XO/gerbers/XO-B_Paste.gbr, avionics/kicad/XO/gerbers/XO-B_Silkscreen.gbr, avionics/kicad/XO/gerbers/XO-Edge_Cuts.gbr, avionics/kicad/XO/gerbers/XO-F_Cu.gbr, avionics/kicad/XO/gerbers/XO-F_Mask.gbr, avionics/kicad/XO/gerbers/XO-F_Paste.gbr, avionics/kicad/XO/gerbers/XO-F_Silkscreen.gbr, avionics/kicad/XO/gerbers/XO-In1_Cu.gbr, avionics/kicad/XO/gerbers/XO-In2_Cu.gbr, avionics/kicad/XO/gerbers/XO-job.gbrjob, avionics/kicad/XO/gerbers/XO.drl, avionics/kicad/XO/kicads/XO.kicad_pcb, avionics/kicad/XO/kicads/XO.kicad_prl, avionics/kicad/XO/kicads/XO.kicad_pro, avionics/kicad/XO/kicads/XO.kicad_sch, avionics/kicad/XO/ref_remap_2026-07-18.json, avionics/kicad/add_eth_phy.py, avionics/kicad/add_sensors_sbus.py, avionics/kicad/apply_netlist.py, avionics/kicad/check_impedance.py, avionics/kicad/complete_1_2b.py, avionics/kicad/complete_xcvr_49mhz2.py, avionics/kicad/drc_report.txt, avionics/kicad/fix_pilot_xo_isolators.py, avionics/kicad/fix_starved_thermal_pads.py, avionics/kicad/fix_xcvr_labels.py, avionics/kicad/fp-lib-table, avionics/kicad/gen_enc_nacelle_pcb.py, avionics/kicad/generate_gerbers.py, avionics/kicad/generate_gerbers_rev_s1.py, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Courtyard.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Cu.gbl, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Fab.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Mask.gbs, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Paste.gbp, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Silkscreen.gbo, avionics/kicad/gerbers/CAPE-B-2-S1/XO-Edge_Cuts.gm1, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Courtyard.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Cu.gtl, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Fab.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Mask.gts, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Paste.gtp, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Silkscreen.gto, avionics/kicad/gerbers/CAPE-B-2-S1/XO-In1_Cu.g1, avionics/kicad/gerbers/CAPE-B-2-S1/XO-In2_Cu.g2, avionics/kicad/gerbers/CAPE-B-2-S1/XO-Margin.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-job.gbrjob, avionics/kicad/gerbers/CAPE-B-2-S1/XO.drl/XO.drl, avionics/kicad/gerbers/Commo-S1/Commo-B_Courtyard.gbr, avionics/kicad/gerbers/Commo-S1/Commo-B_Cu.gbl, avionics/kicad/gerbers/Commo-S1/Commo-B_Fab.gbr, avionics/kicad/gerbers/Commo-S1/Commo-B_Mask.gbs, avionics/kicad/gerbers/Commo-S1/Commo-B_Paste.gbp, avionics/kicad/gerbers/Commo-S1/Commo-B_Silkscreen.gbo, avionics/kicad/gerbers/Commo-S1/Commo-Edge_Cuts.gm1, avionics/kicad/gerbers/Commo-S1/Commo-F_Courtyard.gbr, avionics/kicad/gerbers/Commo-S1/Commo-F_Cu.gtl, avionics/kicad/gerbers/Commo-S1/Commo-F_Fab.gbr, avionics/kicad/gerbers/Commo-S1/Commo-F_Mask.gts, avionics/kicad/gerbers/Commo-S1/Commo-F_Paste.gtp, avionics/kicad/gerbers/Commo-S1/Commo-F_Silkscreen.gto, avionics/kicad/gerbers/Commo-S1/Commo-In1_Cu.g1, avionics/kicad/gerbers/Commo-S1/Commo-In2_Cu.g2, avionics/kicad/gerbers/Commo-S1/Commo-Margin.gbr, avionics/kicad/gerbers/Commo-S1/Commo-job.gbrjob, avionics/kicad/gerbers/Commo-S1/Commo.drl/Commo.drl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Adhesive.gba, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Courtyard.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Cu.gbl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Fab.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Mask.gbs, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Paste.gbp, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Silkscreen.gbo, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-Edge_Cuts.gm1, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Adhesive.gta, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Courtyard.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Cu.gtl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Fab.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Mask.gts, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Paste.gtp, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Silkscreen.gto, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-In1_Cu.g1, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-Margin.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-job.gbrjob, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer.drl/FlightEngineer.drl, avionics/kicad/replace_footprints.py, avionics/kicad/retarget_mspm0g351x_slb9672.py, avionics/kicad/retarget_pcb_footprints.py, avionics/kicad/symbols/ISOW1044BDFMR_pinmap.csv, avionics/kicad/symbols/KSZ9477STXI_pinmap.csv, avionics/kicad/symbols/MSPM0G3507SRGZR_pinmap.csv, avionics/kicad/symbols/MSPM0G3518_Q1_RHB.kicad_sym, avionics/kicad/symbols/MSPM0G3519_Q1_RGZ.kicad_sym, avionics/kicad/symbols/Observer_ISOW1044BDFMR.kicad_sym, avionics/kicad/symbols/Observer_KSZ9477.kicad_sym, avionics/kicad/symbols/Observer_MSPM0G3507_RGZ.kicad_sym, avionics/kicad/symbols/Observer_SoM.kicad_sym, avionics/kicad/symbols/Observer_SoM_PCM071.kicad_sym, avionics/kicad/symbols/SLB9672XU2_0_pinmap.csv, avionics/kicad/symbols/SLB9672_TPM.kicad_sym, avionics/kicad/symbols/Vera_SoM_PCM071.kicad_sym, avionics/kicad/symbols/footprints/PHYCORE-AM62AX-DSC-FOOTPRINT.kicad_mod, avionics/kicad/symbols/phyCORE_AM62x_PCM071_pinmap.csv, avionics/mosfet-search.txt, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/TODO.md, avionics/rev-s1/WBS.md - `bom` (13): airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv, airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv, avionics/kicad/Observer/Observer_som_pinmap.csv, avionics/kicad/symbols/ISOW1044BDFMR_pinmap.csv, avionics/kicad/symbols/KSZ9477STXI_pinmap.csv, avionics/kicad/symbols/MSPM0G3507SRGZR_pinmap.csv, avionics/kicad/symbols/SLB9672XU2_0_pinmap.csv, avionics/kicad/symbols/phyCORE_AM62x_PCM071_pinmap.csv, code-scanning-files-extracted.csv, current-specification/bom_revS.csv, current-specification/bom_revS.json, docs/bom_revR.json, tools/compact_bom_entries.py - `build-guide` (151): graphical-build-guide/AGENTS.md, graphical-build-guide/BUILD_GUIDE_TEMPLATE.md, graphical-build-guide/LICENSE, graphical-build-guide/README.md, graphical-build-guide/REVN_BUILD_GUIDE_24IN.md, graphical-build-guide/TODO-old.md, graphical-build-guide/TODO.md, graphical-build-guide/WBS.md, graphical-build-guide/build_guide_00_cover.svg, graphical-build-guide/build_guide_01_print_prep.svg, graphical-build-guide/build_guide_02_print_hull.svg, graphical-build-guide/build_guide_03_print_nacelle.svg, graphical-build-guide/build_guide_04_cut_cf.svg, graphical-build-guide/build_guide_05_cf_skeleton.svg, graphical-build-guide/build_guide_06_nacelle_pivot.svg, graphical-build-guide/build_guide_07_edf_install.svg, graphical-build-guide/build_guide_08_nozzle_gear.svg, graphical-build-guide/build_guide_09_avionics.svg, graphical-build-guide/build_guide_10_power_wiring.svg, graphical-build-guide/build_guide_11_inter_board.svg, graphical-build-guide/build_guide_12_security_hw.svg, graphical-build-guide/build_guide_13_nav_lights.svg, graphical-build-guide/build_guide_14_antennas.svg, graphical-build-guide/build_guide_15_software.svg, graphical-build-guide/build_guide_16_calibration.svg, graphical-build-guide/build_guide_17_ground_test.svg, graphical-build-guide/build_guide_18_first_flight.svg, graphical-build-guide/build_guide_19_decal_placement.svg, graphical-build-guide/build_guide_20_node_placement.svg, graphical-build-guide/build_guide_21_node_install.svg, graphical-build-guide/build_guide_22_void_formers.svg, graphical-build-guide/build_guide_23_foam_fill.svg, graphical-build-guide/build_guide_24_access_panels.svg, graphical-build-guide/build_guide_25_obstacle_sensors.svg, graphical-build-guide/build_guide_26_cargo_bay_winch.svg, graphical-build-guide/build_plan.svg, graphical-build-guide/components_overview.svg, graphical-build-guide/decal_sheet.svg, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, graphical-build-guide/gen_hull_outlines.py, graphical-build-guide/hull_bottom.svg, graphical-build-guide/hull_front.svg, graphical-build-guide/hull_side.svg, graphical-build-guide/hull_top.svg, graphical-build-guide/overview_bottom.svg, graphical-build-guide/overview_front.svg, graphical-build-guide/overview_side.svg, graphical-build-guide/overview_svgs/serenity_bottom.svg, graphical-build-guide/overview_svgs/serenity_bow.svg, graphical-build-guide/overview_svgs/serenity_iso_port_bow.svg, graphical-build-guide/overview_svgs/serenity_iso_port_quarter.svg, graphical-build-guide/overview_svgs/serenity_iso_starboard_bow.svg, graphical-build-guide/overview_svgs/serenity_iso_stbd_quarter.svg, graphical-build-guide/overview_svgs/serenity_port.svg, graphical-build-guide/overview_svgs/serenity_starboard.svg, graphical-build-guide/overview_svgs/serenity_stern.svg, graphical-build-guide/overview_svgs/serenity_top.svg, graphical-build-guide/overview_top.svg, graphical-build-guide/pngs/01_port.png, graphical-build-guide/pngs/02_stbd.png, graphical-build-guide/pngs/03_top.png, graphical-build-guide/pngs/04_bottom.png, graphical-build-guide/pngs/05_bow.png, graphical-build-guide/pngs/06_stern.png, graphical-build-guide/pngs/07_iso_port_bow_dorsal.png, graphical-build-guide/pngs/08_iso_stbd_bow_dorsal.png, graphical-build-guide/pngs/09_iso_port_stern_dorsal.png, graphical-build-guide/pngs/10_iso_stbd_stern_dorsal.png, graphical-build-guide/pngs/11_iso_port_bow_ventral.png, graphical-build-guide/pngs/12_iso_stbd_bow_ventral.png, graphical-build-guide/pngs/13_iso_port_stern_ventral.png, graphical-build-guide/pngs/14_iso_stbd_stern_ventral.png, graphical-build-guide/pngs/15_closeup_nose.png, graphical-build-guide/pngs/16_closeup_gear.png, graphical-build-guide/pngs/17_closeup_nacelle.png, graphical-build-guide/probe_stl.py, graphical-build-guide/shellview/cargo_port.png, graphical-build-guide/shellview/cargo_stbd.png, graphical-build-guide/shellview/cargoax_front.png, graphical-build-guide/shellview/cargoax_iso.png, graphical-build-guide/shellview/cargoax_stbd.png, graphical-build-guide/shellview/cargoax_top.png, graphical-build-guide/shellview/fine2_starb.png, graphical-build-guide/shellview/fine_starb.png, graphical-build-guide/shellview/fine_top.png, graphical-build-guide/shellview/grid_starb.png, graphical-build-guide/shellview/hd_s_fwdtop.png, graphical-build-guide/shellview/hd_sf_hi.png, graphical-build-guide/shellview/hd_sf_lo.png, graphical-build-guide/shellview/hd_sf_mid.png, graphical-build-guide/shellview/head_front_Yneg.png, graphical-build-guide/shellview/head_front_Yneg_rg.png, graphical-build-guide/shellview/head_iso.png, graphical-build-guide/shellview/head_port_Xpos.png, graphical-build-guide/shellview/head_stbd_Xneg.png, graphical-build-guide/shellview/head_top_Zpos.png, graphical-build-guide/shellview/head_xsec.png, graphical-build-guide/shellview/head_xsec_zoom.png, graphical-build-guide/shellview/headax_front.png, graphical-build-guide/shellview/headax_iso.png, graphical-build-guide/shellview/headax_stbd.png, graphical-build-guide/shellview/headax_top.png, graphical-build-guide/shellview/headfin_s_fwdtop.png, graphical-build-guide/shellview/headfin_sf_hi.png, graphical-build-guide/shellview/headfin_sf_lo.png, graphical-build-guide/shellview/headfin_sf_mid.png, graphical-build-guide/shellview/headfin_sf_mid_rg.png, graphical-build-guide/shellview/inara_engrave.png, graphical-build-guide/shellview/inner_op4_front_Yneg.png, graphical-build-guide/shellview/inner_op4_iso.png, graphical-build-guide/shellview/inner_op4_port_Xpos.png, graphical-build-guide/shellview/inner_op4_stbd_Xneg.png, graphical-build-guide/shellview/inner_op4_top_Zpos.png, graphical-build-guide/shellview/inner_orig_front_Yneg.png, graphical-build-guide/shellview/inner_orig_iso.png, graphical-build-guide/shellview/inner_orig_port_Xpos.png, graphical-build-guide/shellview/inner_orig_stbd_Xneg.png, graphical-build-guide/shellview/inner_orig_top_Zpos.png, graphical-build-guide/shellview/inner_vop_front_Yneg.png, graphical-build-guide/shellview/inner_vop_iso.png, graphical-build-guide/shellview/inner_vop_port_Xpos.png, graphical-build-guide/shellview/inner_vop_stbd_Xneg.png, graphical-build-guide/shellview/inner_vop_top_Zpos.png, graphical-build-guide/shellview/mk_fwdtop.png, graphical-build-guide/shellview/mk_stbd.png, graphical-build-guide/shellview/port_wall.stl, graphical-build-guide/shellview/rear_front_Yneg.png, graphical-build-guide/shellview/rear_iso.png, graphical-build-guide/shellview/rear_port_Xpos.png, graphical-build-guide/shellview/rear_stbd_Xneg.png, graphical-build-guide/shellview/rear_top_Zpos.png, graphical-build-guide/shellview/rinner_op_s_fwdtop.png, graphical-build-guide/shellview/rinner_op_sf_hi.png, graphical-build-guide/shellview/rinner_op_sf_lo.png, graphical-build-guide/shellview/rinner_op_sf_mid.png, graphical-build-guide/shellview/rinner_orig_s_fwdtop.png, graphical-build-guide/shellview/rinner_orig_sf_hi.png, graphical-build-guide/shellview/rinner_orig_sf_lo.png, graphical-build-guide/shellview/rinner_orig_sf_mid.png, graphical-build-guide/shellview/rio_front_Yneg.png, graphical-build-guide/shellview/rio_iso.png, graphical-build-guide/shellview/rio_port_Xpos.png, graphical-build-guide/shellview/rio_stbd_Xneg.png, graphical-build-guide/shellview/rio_top_Zpos.png, graphical-build-guide/shellview/rop_front_Yneg.png, graphical-build-guide/shellview/rop_iso.png, graphical-build-guide/shellview/rop_port_Xpos.png, graphical-build-guide/shellview/rop_stbd_Xneg.png, graphical-build-guide/shellview/rop_top_Zpos.png, graphical-build-guide/update_overview_paths.py - `build-tooling` (39): tools/AGENTS.md, tools/LICENSE, tools/README.md, tools/TODO.md, tools/TOOL_REFERENCE.md, tools/add_landing_gear_bosses.py, tools/bake_hull_frame.py, tools/build_head_shell.py, tools/build_landing_gear_views.py, tools/cargo_bay_envelope.py, tools/compact_bom_entries.py, tools/export-specctra-dsn.py, tools/export_landing_gear_stls.py, tools/import-specctra-ses.py, tools/landing_gear_bay_pad_fit.py, tools/landing_gear_bay_seat_fit.py, tools/landing_gear_bay_station_fit.py, tools/landing_gear_cowl_clearance.py, tools/landing_gear_foot_stance.py, tools/landing_gear_opening_fit.py, tools/landing_gear_r6_sizing.py, tools/landing_gear_wing_clearance.py, tools/mirror_claude_memory.py, tools/open_mating_faces.py, tools/precommit_index.py, tools/precommit_kicad_load.py, tools/precommit_sanitize.py, tools/purge_stale_fcstd_objects.py, tools/validate_kicad.py, tools/validate_stls.py, tools/verify_bow_pod.py, tools/wing_airfoil_integrity.py, tools/wing_airfoil_variants.py, tools/wing_cfd_openfoam.py, tools/wing_internal_clearance.py, tools/wing_root_deconflict.py, tools/wing_section_figure.py, tools/wing_spar_carrythrough.py, tools/wing_spar_station_fit.py -- `cad-mesh` (278): airframe/FreeCAD-scripts/Makefile, airframe/FreeCAD-scripts/faraday-enclosure.py, airframe/FreeCAD-scripts/freecad-stl2part.py, airframe/FreeCAD-scripts/make_flat_pattern.py, airframe/FreeCAD-scripts/serenity_assembly.py, airframe/FreeCAD-scripts/serenity_placeholders_assembly.py, airframe/blender-scripts/add_structural_features.py, airframe/blender-scripts/blender_edf_bore_and_petals.py, airframe/blender-scripts/blender_hollow_shells.py, airframe/blender-scripts/blender_intake_cut.py, airframe/blender-scripts/blender_middle_intake_cut.py, airframe/blender-scripts/blender_nacelle_revo.py, airframe/blender-scripts/blender_nozzle_gen.py, airframe/blender-scripts/blender_shells_2mm_solidify.py, airframe/blender-scripts/blender_shells_v3.py, airframe/blender-scripts/blender_stator_gen.py, airframe/blender-scripts/check_nacelle_alignment.py, airframe/blender-scripts/engrave_plaques.py, airframe/blender-scripts/engrave_shuttles.py, airframe/blender-scripts/files-hollowed-24in/cargo_sect_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/head_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/middle_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_flight_engineer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_inara.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_river.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_shepherd.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_simon.stl, airframe/blender-scripts/files-hollowed-24in/rear_shell24_2mm_repaired.stl, airframe/blender-scripts/fill_thin_details.py, airframe/blender-scripts/finalize_cargo_middle.py, airframe/blender-scripts/finalize_head_rear.py, airframe/blender-scripts/generate_overview_svgs.py, airframe/blender-scripts/hollow_manifold.py, airframe/blender-scripts/inspect_shell_center.py, airframe/blender-scripts/make_bay_text.py, airframe/blender-scripts/make_shuttle_text.py, airframe/blender-scripts/merge_cargo_interior.py, airframe/blender-scripts/merge_head_interior.py, airframe/blender-scripts/morph_open_voxel.py, airframe/blender-scripts/regen_rear_interior.py, airframe/blender-scripts/repair_shells_for_scad.py, airframe/blender-scripts/serenity_render_views.py, airframe/blender-scripts/verify_shells.py, airframe/freecad/assembly/SerenityAssembly.FCStd.bak2, airframe/freecad/assembly/leg_2_scaled-oriented.stl, airframe/openscad/fuselage/access_panels_24in.scad, airframe/openscad/fuselage/battery_tray.scad, airframe/openscad/fuselage/belly_panel.scad, airframe/openscad/fuselage/bow_sensor_faceplate.scad, airframe/openscad/fuselage/bow_sensor_pod.scad, airframe/openscad/fuselage/canonical_leg_r6_1_5in.scad, airframe/openscad/fuselage/canonical_leg_r6_3_0in.scad, airframe/openscad/fuselage/cargo/_export_cargo_port_root_chunk.scad, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/cargo/cargo_spar_drive.scad, airframe/openscad/fuselage/cargo/cargo_vera_faraday.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/landing_leg_assy.scad, airframe/openscad/fuselage/middle_canonical_shell24.scad, airframe/openscad/fuselage/rcrs49_wire_post.scad, airframe/openscad/fuselage/rear_shell24.scad, airframe/openscad/fuselage/wire_brace_leg.scad, airframe/openscad/fuselage/wire_loop_fuse.scad, airframe/openscad/nacelles/_export_inboard_cut.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/edf_aft_spider_sleeve.scad, airframe/openscad/nacelles/edf_stator_sleeve.scad, airframe/openscad/nacelles/gear_option_compare.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad, airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad, airframe/openscad/nacelles/nacelle_servo_bracket.scad, airframe/openscad/port_tilt_spar_assembly.scad, airframe/openscad/wings/wings_s1223_revo.scad, airframe/openscad/wings/wings_s1223_revo.scad.backup-2026-07-18, airframe/placeholders/avionics/Cape_A2_PCB_55x35mm.stl, airframe/placeholders/avionics/Cape_B2_PCB_55x35mm.stl, airframe/placeholders/avionics/FlightEngineer_PDB_90x65mm.stl, airframe/placeholders/avionics/PocketBeagle2_Industrial_56x35mm.stl, airframe/placeholders/avionics/XCVR_49MHZ2_PCB_55x35mm.stl, airframe/placeholders/avionics/microSD_64GB.stl, airframe/placeholders/bearings/B6804_20x32x7mm_GCS.stl, airframe/placeholders/bearings/MF104ZZ_4x10x4mm.stl, airframe/placeholders/bearings/MR63ZZ_3x6x2p5mm.stl, airframe/placeholders/cargo/DRV8833_Hbridge_breakout.stl, airframe/placeholders/cargo/Dyneema_SK75_0p5mm_coil.stl, airframe/placeholders/cargo/HX711_loadcell_ADC_breakout.stl, airframe/placeholders/cargo/N20_motor_300RPM_6V.stl, airframe/placeholders/faraday/Far_EMI_vent_40x40x6mm.stl, airframe/placeholders/faraday/Far_FT_panel_55x35mm.stl, airframe/placeholders/faraday/Far_bond_strap_100mm.stl, airframe/placeholders/faraday/Far_cage_AV_70x50x82mm.stl, airframe/placeholders/faraday/Far_fan_40mm_5V.stl, airframe/placeholders/faraday/Far_ferrite_4mm_ID.stl, airframe/placeholders/faraday/Far_gasket_AV_250x6x1mm.stl, airframe/placeholders/faraday/Mal_far_fan_40mm_5V.stl, airframe/placeholders/faraday/Mal_far_gasket_470x8x1p5mm.stl, airframe/placeholders/foam/Foam_fill_cargo_190x200x159mm.stl, airframe/placeholders/foam/Foam_fill_head_125x231x136mm.stl, airframe/placeholders/foam/Foam_fill_middle_horseshoe_173x69x161mm.stl, airframe/placeholders/foam/Foam_fill_rear_136x177x154mm.stl, airframe/placeholders/foam/Void_avionics_bay_62x42x75mm.stl, airframe/placeholders/foam/Void_cargo_bay_120x150x80mm.stl, airframe/placeholders/foam/Void_far_cage_76x56x88mm.stl, airframe/placeholders/foam/Void_far_fan_spur_44x44x50mm.stl, airframe/placeholders/foam/Void_nacelle_pylon_20x80x20mm.stl, airframe/placeholders/foam/Void_power_bus_25x500x25mm.stl, airframe/placeholders/foam/Void_vent_exhaust_20x300x20mm.stl, airframe/placeholders/foam/Void_vent_intake_20x250x20mm.stl, airframe/placeholders/foam/Void_wiring_trunk_30x700x20mm.stl, airframe/placeholders/gcs/AS5600_encoder_breakout_15x15mm.stl, airframe/placeholders/gcs/Antenna_2p4GHz_zigbee_rubber_duck.stl, airframe/placeholders/gcs/Antenna_49MHz_whip_940mm.stl, airframe/placeholders/gcs/Antenna_5GHz_panel_14dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_Yagi_9dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_omni_5dBi.stl, airframe/placeholders/gcs/Antenna_GNSS_patch_ANN_MB00.stl, airframe/placeholders/gcs/B6804_20x32x7mm_gimbal_pan.stl, airframe/placeholders/gcs/GPS_module_M10Q_SparkFun.stl, airframe/placeholders/gcs/N42_disc_magnet_6x2mm.stl, airframe/placeholders/gcs/Pololu_D24V22F6_6V2A_BEC.stl, airframe/placeholders/gcs/Pololu_D24V50F5_5V5A_BEC.stl, airframe/placeholders/gcs/RF_splitter_915MHz_2way_ZFSC.stl, airframe/placeholders/gcs/Skipper_enclosure_IP65_145x90x65mm.stl, airframe/placeholders/gcs/Skipper_tripod_antenna_mast.stl, airframe/placeholders/gcs/TCA9548A_I2C_mux_breakout.stl, airframe/placeholders/gears/Bevel_M1_14T_pair.stl, airframe/placeholders/gears/Bevel_housing_CF_PETG.stl, airframe/placeholders/gears/Pinion_M1_12T_R6mm.stl, airframe/placeholders/gears/Sector_gear_M1_R22mm.stl, airframe/placeholders/hardware/Batt_strap_silicone_16mm_CAM.stl, airframe/placeholders/hardware/Insert_M25_brass_L5.stl, airframe/placeholders/hardware/Insert_M3_brass_L5.stl, airframe/placeholders/hardware/Pin_SS_3x5mm_hinge.stl, airframe/placeholders/hardware/Screw_M3x8mm_button_ISO7380.stl, airframe/placeholders/lighting/WS2812C_2020_SMD.stl, airframe/placeholders/power/Fuse_MAXI_150A.stl, airframe/placeholders/power/Fuse_mini_40A.stl, airframe/placeholders/power/LiPo_4S_10000mAh_175x64x38mm_GCS.stl, airframe/placeholders/power/LiPo_6S_2800mAh_115x35x35mm.stl, airframe/placeholders/power/LiPo_6S_4000mAh_138x44x36mm.stl, airframe/placeholders/power/Shunt_CSS2H_2512K_1mohm.stl, airframe/placeholders/propulsion/EDF_120mm_6S_deferred.stl, airframe/placeholders/propulsion/EDF_50mm_6S.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/placeholders/servos/DS3218MG_25kgcm.stl, airframe/placeholders/servos/SG90_micro.stl, airframe/placeholders/structural/CF_bar_6x3mm_620mm_keel.stl, airframe/placeholders/structural/CF_plate_2mm_200x300mm.stl, airframe/placeholders/structural/CF_rod_3mm_300mm_stock.stl, airframe/placeholders/structural/CF_rod_4mm_300mm_stock.stl, airframe/placeholders/structural/CF_tube_12mm_OD_1p5w_350mm_spar.stl, airframe/placeholders/structural/PTFE_sleeve_4mm_OD_3mm_ID_52mm.stl, airframe/placeholders/wiring/PTFE_conduit_4mm_OD_3mm_ID_700mm.stl, airframe/placeholders/wiring/Post_49MHz_base_load_coil.stl, airframe/placeholders/wiring/Wire_10AWG_silicone_400mm.stl, airframe/placeholders/wiring/Wire_28AWG_STP_bundle_500mm.stl, airframe/placeholders/wiring/Wire_49MHz_antenna_0p3mm_470mm.stl, airframe/placeholders/wiring/Wire_4AWG_silicone_200mm_pair.stl, airframe/stls/fuselage/battery_tray.stl, airframe/stls/fuselage/belly_panel.stl, airframe/stls/fuselage/bow_sensor_faceplate.stl, airframe/stls/fuselage/cargo/cargo_cradle_autolatch.stl, airframe/stls/fuselage/cargo/cargo_door_port.stl, airframe/stls/fuselage/cargo/cargo_door_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_door_stbd.stl, airframe/stls/fuselage/cargo/cargo_drv8833_tray.stl, airframe/stls/fuselage/cargo/cargo_fpv_bezel.stl, airframe/stls/fuselage/cargo/cargo_gps_retention_ring.stl, airframe/stls/fuselage/cargo/cargo_hinge_retention.stl, airframe/stls/fuselage/cargo/cargo_release_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_bossed.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_repaired.stl, airframe/stls/fuselage/cargo/cargo_vera_faraday.stl, airframe/stls/fuselage/cargo/cargo_winch_motor_mount.stl, airframe/stls/fuselage/cargo/cargo_winch_spool.stl, airframe/stls/fuselage/cargo_middle_splice_collar.stl, airframe/stls/fuselage/dorsal_antenna_fin.stl, airframe/stls/fuselage/head_cargo_splice_collar.stl, airframe/stls/fuselage/head_shell24.stl, airframe/stls/fuselage/head_shell24_2mm_repaired.stl, airframe/stls/fuselage/inara_access_cover.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_bay.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_nominal.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_foot.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_nominal.stl, airframe/stls/fuselage/middle_canonical_edf_intake.stl, airframe/stls/fuselage/middle_canonical_shell24.stl, airframe/stls/fuselage/middle_rear_splice_collar.stl, airframe/stls/fuselage/middle_shell24_2mm_repaired.stl, airframe/stls/fuselage/rear_shell24_2mm_repaired.stl, airframe/stls/fuselage/river_access_cover.stl, airframe/stls/nacelles/edf_aft_spider_sleeve.stl, airframe/stls/nacelles/edf_stator_sleeve.stl, airframe/stls/nacelles/eng_left_shell24_50mm_repaired.stl, airframe/stls/nacelles/eng_right_shell24_50mm_repaired.stl, airframe/stls/nacelles/nacelle_port_revs.stl, airframe/stls/nacelles/nacelle_servo_bracket.stl, airframe/stls/nacelles/nacelle_stbd_revs.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl, airframe/stls/wings/wing_port_s1223_revo.stl, airframe/stls/wings/wing_stbd_s1223_revo.stl, deferred/aft-edf/openscad/aft_edf_plenum.scad, deferred/aft-edf/openscad/edf_120_motor_mount.scad, deferred/aft-edf/openscad/edf_120_thrust_tube.scad, deferred/aft-edf/openscad/neck_intake_frame.scad, deferred/aft-edf/openscad/rear_neck_intake_shell24.scad, deferred/aft-edf/stls/aft_edf_plenum.stl, deferred/aft-edf/stls/edf_120_motor_mount.stl, deferred/aft-edf/stls/edf_120_thrust_tube.stl, deferred/aft-edf/stls/neck_intake_frame.stl, deferred/aft-edf/stls/rear_nozzle_closed_asm.stl, deferred/aft-edf/stls/rear_nozzle_frame.stl, deferred/aft-edf/stls/rear_nozzle_petal.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_0.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_1.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_2.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_3.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_4.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_5.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_6.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_7.stl, deferred/aft-edf/stls/rear_shell24_2mm_edf_bored.stl, docs/references/thingverse-serenity/files/s_cargo_door.stl, docs/references/thingverse-serenity/files/s_cargo_door_strutts.stl, docs/references/thingverse-serenity/files/s_cargo_sect.stl, docs/references/thingverse-serenity/files/s_eng_left.stl, docs/references/thingverse-serenity/files/s_eng_pistons.stl, docs/references/thingverse-serenity/files/s_eng_piv_outer.stl, docs/references/thingverse-serenity/files/s_eng_piv_pins.stl, docs/references/thingverse-serenity/files/s_eng_right.stl, docs/references/thingverse-serenity/files/s_feet_x_4.stl, docs/references/thingverse-serenity/files/s_head.stl, docs/references/thingverse-serenity/files/s_legs.stl, docs/references/thingverse-serenity/files/s_middle.stl, docs/references/thingverse-serenity/files/s_pivot_arm_a.stl, docs/references/thingverse-serenity/files/s_rear.stl, docs/references/thingverse-serenity/files/s_wings_both.stl, docs/references/vimdrones_can_periph_pico_v1.0.stl, docs/references/vimdrones_esc_s50_v1.0.stl, gcs/skipper/hardware/enclosure/openscad/skipper_field_enclosure.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_mount.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_pan.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_tilt.scad, graphical-build-guide/shellview/port_wall.stl, tools/purge_stale_fcstd_objects.py +- `cad-mesh` (277): airframe/FreeCAD-scripts/Makefile, airframe/FreeCAD-scripts/faraday-enclosure.py, airframe/FreeCAD-scripts/freecad-stl2part.py, airframe/FreeCAD-scripts/make_flat_pattern.py, airframe/FreeCAD-scripts/serenity_assembly.py, airframe/FreeCAD-scripts/serenity_placeholders_assembly.py, airframe/blender-scripts/add_structural_features.py, airframe/blender-scripts/blender_edf_bore_and_petals.py, airframe/blender-scripts/blender_hollow_shells.py, airframe/blender-scripts/blender_intake_cut.py, airframe/blender-scripts/blender_middle_intake_cut.py, airframe/blender-scripts/blender_nacelle_revo.py, airframe/blender-scripts/blender_nozzle_gen.py, airframe/blender-scripts/blender_shells_2mm_solidify.py, airframe/blender-scripts/blender_shells_v3.py, airframe/blender-scripts/blender_stator_gen.py, airframe/blender-scripts/check_nacelle_alignment.py, airframe/blender-scripts/engrave_plaques.py, airframe/blender-scripts/engrave_shuttles.py, airframe/blender-scripts/files-hollowed-24in/cargo_sect_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/head_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/middle_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_flight_engineer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_inara.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_river.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_shepherd.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_simon.stl, airframe/blender-scripts/files-hollowed-24in/rear_shell24_2mm_repaired.stl, airframe/blender-scripts/fill_thin_details.py, airframe/blender-scripts/finalize_cargo_middle.py, airframe/blender-scripts/finalize_head_rear.py, airframe/blender-scripts/generate_overview_svgs.py, airframe/blender-scripts/hollow_manifold.py, airframe/blender-scripts/inspect_shell_center.py, airframe/blender-scripts/make_bay_text.py, airframe/blender-scripts/make_shuttle_text.py, airframe/blender-scripts/merge_cargo_interior.py, airframe/blender-scripts/merge_head_interior.py, airframe/blender-scripts/morph_open_voxel.py, airframe/blender-scripts/regen_rear_interior.py, airframe/blender-scripts/repair_shells_for_scad.py, airframe/blender-scripts/serenity_render_views.py, airframe/blender-scripts/verify_shells.py, airframe/freecad/assembly/SerenityAssembly.FCStd.bak2, airframe/freecad/assembly/leg_2_scaled-oriented.stl, airframe/openscad/fuselage/access_panels_24in.scad, airframe/openscad/fuselage/battery_tray.scad, airframe/openscad/fuselage/belly_panel.scad, airframe/openscad/fuselage/bow_sensor_faceplate.scad, airframe/openscad/fuselage/bow_sensor_pod.scad, airframe/openscad/fuselage/canonical_leg_r6_1_5in.scad, airframe/openscad/fuselage/canonical_leg_r6_3_0in.scad, airframe/openscad/fuselage/cargo/_export_cargo_port_root_chunk.scad, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/cargo/cargo_spar_drive.scad, airframe/openscad/fuselage/cargo/cargo_vera_faraday.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/landing_leg_assy.scad, airframe/openscad/fuselage/middle_canonical_shell24.scad, airframe/openscad/fuselage/rcrs49_wire_post.scad, airframe/openscad/fuselage/rear_shell24.scad, airframe/openscad/fuselage/wire_brace_leg.scad, airframe/openscad/fuselage/wire_loop_fuse.scad, airframe/openscad/nacelles/_export_inboard_cut.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/edf_aft_spider_sleeve.scad, airframe/openscad/nacelles/edf_stator_sleeve.scad, airframe/openscad/nacelles/gear_option_compare.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad, airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad, airframe/openscad/nacelles/nacelle_servo_bracket.scad, airframe/openscad/port_tilt_spar_assembly.scad, airframe/openscad/wings/wings_s1223_revo.scad, airframe/openscad/wings/wings_s1223_revo.scad.backup-2026-07-18, airframe/placeholders/avionics/Cape_A2_PCB_55x35mm.stl, airframe/placeholders/avionics/Cape_B2_PCB_55x35mm.stl, airframe/placeholders/avionics/FlightEngineer_PDB_90x65mm.stl, airframe/placeholders/avionics/PocketBeagle2_Industrial_56x35mm.stl, airframe/placeholders/avionics/XCVR_49MHZ2_PCB_55x35mm.stl, airframe/placeholders/avionics/microSD_64GB.stl, airframe/placeholders/bearings/B6804_20x32x7mm_GCS.stl, airframe/placeholders/bearings/MF104ZZ_4x10x4mm.stl, airframe/placeholders/bearings/MR63ZZ_3x6x2p5mm.stl, airframe/placeholders/cargo/DRV8833_Hbridge_breakout.stl, airframe/placeholders/cargo/Dyneema_SK75_0p5mm_coil.stl, airframe/placeholders/cargo/HX711_loadcell_ADC_breakout.stl, airframe/placeholders/cargo/N20_motor_300RPM_6V.stl, airframe/placeholders/faraday/Far_EMI_vent_40x40x6mm.stl, airframe/placeholders/faraday/Far_FT_panel_55x35mm.stl, airframe/placeholders/faraday/Far_bond_strap_100mm.stl, airframe/placeholders/faraday/Far_cage_AV_70x50x82mm.stl, airframe/placeholders/faraday/Far_fan_40mm_5V.stl, airframe/placeholders/faraday/Far_ferrite_4mm_ID.stl, airframe/placeholders/faraday/Far_gasket_AV_250x6x1mm.stl, airframe/placeholders/faraday/Mal_far_fan_40mm_5V.stl, airframe/placeholders/faraday/Mal_far_gasket_470x8x1p5mm.stl, airframe/placeholders/foam/Foam_fill_cargo_190x200x159mm.stl, airframe/placeholders/foam/Foam_fill_head_125x231x136mm.stl, airframe/placeholders/foam/Foam_fill_middle_horseshoe_173x69x161mm.stl, airframe/placeholders/foam/Foam_fill_rear_136x177x154mm.stl, airframe/placeholders/foam/Void_avionics_bay_62x42x75mm.stl, airframe/placeholders/foam/Void_cargo_bay_120x150x80mm.stl, airframe/placeholders/foam/Void_far_cage_76x56x88mm.stl, airframe/placeholders/foam/Void_far_fan_spur_44x44x50mm.stl, airframe/placeholders/foam/Void_nacelle_pylon_20x80x20mm.stl, airframe/placeholders/foam/Void_power_bus_25x500x25mm.stl, airframe/placeholders/foam/Void_vent_exhaust_20x300x20mm.stl, airframe/placeholders/foam/Void_vent_intake_20x250x20mm.stl, airframe/placeholders/foam/Void_wiring_trunk_30x700x20mm.stl, airframe/placeholders/gcs/AS5600_encoder_breakout_15x15mm.stl, airframe/placeholders/gcs/Antenna_2p4GHz_zigbee_rubber_duck.stl, airframe/placeholders/gcs/Antenna_49MHz_whip_940mm.stl, airframe/placeholders/gcs/Antenna_5GHz_panel_14dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_Yagi_9dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_omni_5dBi.stl, airframe/placeholders/gcs/Antenna_GNSS_patch_ANN_MB00.stl, airframe/placeholders/gcs/B6804_20x32x7mm_gimbal_pan.stl, airframe/placeholders/gcs/GPS_module_M10Q_SparkFun.stl, airframe/placeholders/gcs/N42_disc_magnet_6x2mm.stl, airframe/placeholders/gcs/Pololu_D24V22F6_6V2A_BEC.stl, airframe/placeholders/gcs/Pololu_D24V50F5_5V5A_BEC.stl, airframe/placeholders/gcs/RF_splitter_915MHz_2way_ZFSC.stl, airframe/placeholders/gcs/Skipper_enclosure_IP65_145x90x65mm.stl, airframe/placeholders/gcs/Skipper_tripod_antenna_mast.stl, airframe/placeholders/gcs/TCA9548A_I2C_mux_breakout.stl, airframe/placeholders/gears/Bevel_M1_14T_pair.stl, airframe/placeholders/gears/Bevel_housing_CF_PETG.stl, airframe/placeholders/gears/Pinion_M1_12T_R6mm.stl, airframe/placeholders/gears/Sector_gear_M1_R22mm.stl, airframe/placeholders/hardware/Batt_strap_silicone_16mm_CAM.stl, airframe/placeholders/hardware/Insert_M25_brass_L5.stl, airframe/placeholders/hardware/Insert_M3_brass_L5.stl, airframe/placeholders/hardware/Pin_SS_3x5mm_hinge.stl, airframe/placeholders/hardware/Screw_M3x8mm_button_ISO7380.stl, airframe/placeholders/lighting/WS2812C_2020_SMD.stl, airframe/placeholders/power/Fuse_MAXI_150A.stl, airframe/placeholders/power/Fuse_mini_40A.stl, airframe/placeholders/power/LiPo_4S_10000mAh_175x64x38mm_GCS.stl, airframe/placeholders/power/LiPo_6S_2800mAh_115x35x35mm.stl, airframe/placeholders/power/LiPo_6S_4000mAh_138x44x36mm.stl, airframe/placeholders/power/Shunt_CSS2H_2512K_1mohm.stl, airframe/placeholders/propulsion/EDF_120mm_6S_deferred.stl, airframe/placeholders/propulsion/EDF_50mm_6S.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/placeholders/servos/DS3218MG_25kgcm.stl, airframe/placeholders/servos/SG90_micro.stl, airframe/placeholders/structural/CF_bar_6x3mm_620mm_keel.stl, airframe/placeholders/structural/CF_plate_2mm_200x300mm.stl, airframe/placeholders/structural/CF_rod_3mm_300mm_stock.stl, airframe/placeholders/structural/CF_rod_4mm_300mm_stock.stl, airframe/placeholders/structural/CF_tube_12mm_OD_1p5w_350mm_spar.stl, airframe/placeholders/structural/PTFE_sleeve_4mm_OD_3mm_ID_52mm.stl, airframe/placeholders/wiring/PTFE_conduit_4mm_OD_3mm_ID_700mm.stl, airframe/placeholders/wiring/Post_49MHz_base_load_coil.stl, airframe/placeholders/wiring/Wire_10AWG_silicone_400mm.stl, airframe/placeholders/wiring/Wire_28AWG_STP_bundle_500mm.stl, airframe/placeholders/wiring/Wire_49MHz_antenna_0p3mm_470mm.stl, airframe/placeholders/wiring/Wire_4AWG_silicone_200mm_pair.stl, airframe/stls/fuselage/battery_tray.stl, airframe/stls/fuselage/belly_panel.stl, airframe/stls/fuselage/bow_sensor_faceplate.stl, airframe/stls/fuselage/cargo/cargo_cradle_autolatch.stl, airframe/stls/fuselage/cargo/cargo_door_port.stl, airframe/stls/fuselage/cargo/cargo_door_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_door_stbd.stl, airframe/stls/fuselage/cargo/cargo_drv8833_tray.stl, airframe/stls/fuselage/cargo/cargo_fpv_bezel.stl, airframe/stls/fuselage/cargo/cargo_gps_retention_ring.stl, airframe/stls/fuselage/cargo/cargo_hinge_retention.stl, airframe/stls/fuselage/cargo/cargo_release_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_bossed.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_repaired.stl, airframe/stls/fuselage/cargo/cargo_vera_faraday.stl, airframe/stls/fuselage/cargo/cargo_winch_motor_mount.stl, airframe/stls/fuselage/cargo/cargo_winch_spool.stl, airframe/stls/fuselage/cargo_middle_splice_collar.stl, airframe/stls/fuselage/dorsal_antenna_fin.stl, airframe/stls/fuselage/head_cargo_splice_collar.stl, airframe/stls/fuselage/head_shell24.stl, airframe/stls/fuselage/head_shell24_2mm_repaired.stl, airframe/stls/fuselage/inara_access_cover.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_bay.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_nominal.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_foot.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_nominal.stl, airframe/stls/fuselage/middle_canonical_edf_intake.stl, airframe/stls/fuselage/middle_canonical_shell24.stl, airframe/stls/fuselage/middle_rear_splice_collar.stl, airframe/stls/fuselage/middle_shell24_2mm_repaired.stl, airframe/stls/fuselage/rear_shell24_2mm_repaired.stl, airframe/stls/fuselage/river_access_cover.stl, airframe/stls/nacelles/edf_aft_spider_sleeve.stl, airframe/stls/nacelles/edf_stator_sleeve.stl, airframe/stls/nacelles/eng_left_shell24_50mm_repaired.stl, airframe/stls/nacelles/eng_right_shell24_50mm_repaired.stl, airframe/stls/nacelles/nacelle_port_revs.stl, airframe/stls/nacelles/nacelle_servo_bracket.stl, airframe/stls/nacelles/nacelle_stbd_revs.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl, airframe/stls/wings/wing_port_s1223_revo.stl, airframe/stls/wings/wing_stbd_s1223_revo.stl, deferred/aft-edf/openscad/aft_edf_plenum.scad, deferred/aft-edf/openscad/edf_120_motor_mount.scad, deferred/aft-edf/openscad/edf_120_thrust_tube.scad, deferred/aft-edf/openscad/neck_intake_frame.scad, deferred/aft-edf/openscad/rear_neck_intake_shell24.scad, deferred/aft-edf/stls/aft_edf_plenum.stl, deferred/aft-edf/stls/edf_120_motor_mount.stl, deferred/aft-edf/stls/edf_120_thrust_tube.stl, deferred/aft-edf/stls/neck_intake_frame.stl, deferred/aft-edf/stls/rear_nozzle_closed_asm.stl, deferred/aft-edf/stls/rear_nozzle_frame.stl, deferred/aft-edf/stls/rear_nozzle_petal.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_0.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_1.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_2.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_3.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_4.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_5.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_6.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_7.stl, deferred/aft-edf/stls/rear_shell24_2mm_edf_bored.stl, docs/references/thingverse-serenity/files/s_cargo_door.stl, docs/references/thingverse-serenity/files/s_cargo_door_strutts.stl, docs/references/thingverse-serenity/files/s_cargo_sect.stl, docs/references/thingverse-serenity/files/s_eng_left.stl, docs/references/thingverse-serenity/files/s_eng_pistons.stl, docs/references/thingverse-serenity/files/s_eng_piv_outer.stl, docs/references/thingverse-serenity/files/s_eng_piv_pins.stl, docs/references/thingverse-serenity/files/s_eng_right.stl, docs/references/thingverse-serenity/files/s_feet_x_4.stl, docs/references/thingverse-serenity/files/s_head.stl, docs/references/thingverse-serenity/files/s_legs.stl, docs/references/thingverse-serenity/files/s_middle.stl, docs/references/thingverse-serenity/files/s_pivot_arm_a.stl, docs/references/thingverse-serenity/files/s_rear.stl, docs/references/thingverse-serenity/files/s_wings_both.stl, docs/references/vimdrones_can_periph_pico_v1.0.stl, docs/references/vimdrones_esc_s50_v1.0.stl, gcs/skipper/hardware/enclosure/openscad/skipper_field_enclosure.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_mount.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_pan.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_tilt.scad, graphical-build-guide/shellview/port_wall.stl, tools/purge_stale_fcstd_objects.py - `comms-protocol` (25): airframe/placeholders/avionics/XCVR_49MHZ2_PCB_55x35mm.stl, airframe/placeholders/gcs/Antenna_2p4GHz_zigbee_rubber_duck.stl, airframe/placeholders/gcs/Antenna_49MHz_whip_940mm.stl, airframe/placeholders/wiring/Post_49MHz_base_load_coil.stl, airframe/placeholders/wiring/Wire_49MHz_antenna_0p3mm_470mm.stl, avionics/firmware/cn/src/xcvr_kiss.c, avionics/firmware/cn/src/xcvr_kiss.h, avionics/firmware/common/include/ax25_types.h, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-Edge_Cuts.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In1_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In2_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-job.gbrjob, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2.drl, avionics/kicad/complete_xcvr_49mhz2.py, avionics/kicad/fix_xcvr_labels.py, gcs/skipper/software/config/mavlink_router.conf, gcs/skipper/software/install/install_mavlink_router.sh - `deferred-future` (28): deferred/AGENTS.md, deferred/DEFERRED_ITEM_TEMPLATE.md, deferred/LICENSE, deferred/README.md, deferred/TODO.md, deferred/WBS.md, deferred/aft-edf/README.md, deferred/aft-edf/openscad/aft_edf_plenum.scad, deferred/aft-edf/openscad/edf_120_motor_mount.scad, deferred/aft-edf/openscad/edf_120_thrust_tube.scad, deferred/aft-edf/openscad/neck_intake_frame.scad, deferred/aft-edf/openscad/rear_neck_intake_shell24.scad, deferred/aft-edf/stls/aft_edf_plenum.stl, deferred/aft-edf/stls/edf_120_motor_mount.stl, deferred/aft-edf/stls/edf_120_thrust_tube.stl, deferred/aft-edf/stls/neck_intake_frame.stl, deferred/aft-edf/stls/rear_nozzle_closed_asm.stl, deferred/aft-edf/stls/rear_nozzle_frame.stl, deferred/aft-edf/stls/rear_nozzle_petal.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_0.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_1.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_2.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_3.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_4.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_5.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_6.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_7.stl, deferred/aft-edf/stls/rear_shell24_2mm_edf_bored.stl -- `documentation` (256): AGENTS.md, CLAUDE-MEMORY.md, CLAUDE.md, README.md, REFERENCES.md, REPO_ENFORCEMENT.md, SECURITY.md, TODO.md, WBS.md, airframe/AGENTS.md, airframe/HULL_FRAME_REFERENCE.md, airframe/README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/TODO.md, airframe/VERIFY_PLACEMENT_CHECKLIST.md, airframe/WBS.md, airframe/fuselage-covers/TODO.md, airframe/fuselage-covers/WBS.md, airframe/fuselage-joints/TODO.md, airframe/fuselage-joints/WBS.md, airframe/fuselage-mid/TODO.md, airframe/fuselage-mid/WBS.md, airframe/landing-gear/HANDOFF.md, airframe/landing-gear/TODO.md, airframe/landing-gear/WBS.md, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/dts/README.md, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/Commo/Commo.md, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/GENERATOR_DRIFT_ANALYSIS.md, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/PCBNEW_SWIG_BUG.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/Pilot.md, avionics/kicad/README.md, avionics/kicad/TODO-1.2b-CHECKLIST.md, avionics/kicad/TODO-1.2b-KICAD-READY.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/XO/XO.md, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/TODO.md, avionics/rev-s1/WBS.md, current-specification/AGENTS.md, current-specification/LICENSE_AND_ATTRIBUTION.md, current-specification/README.md, current-specification/SPEC_TEMPLATE.md, current-specification/TODO.md, deferred/AGENTS.md, deferred/DEFERRED_ITEM_TEMPLATE.md, deferred/README.md, deferred/TODO.md, deferred/WBS.md, deferred/aft-edf/README.md, docs/AGENTS.md, docs/AVIONICS_PB2_REDESIGN.md, docs/BATTERY_MOUNT.md, docs/CARGO_WINCH_SPECIFICATION.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/DOC_TEMPLATES.md, docs/DOC_VERIFICATION_0.6.2.md, docs/ETHERNET_PHY_TRADE.md, docs/FIRST_FLIGHT_READINESS.md, docs/LANDING_GEAR_ANALYSIS.md, docs/LICENSE, docs/MANIFEST.json, docs/NOZZLE_DRIVE_TRADE.md, docs/OBSERVER_LASER_ANALYSIS.md, docs/OBSERVER_MANUFACTURING_READINESS.md, docs/OSHW_CERTIFICATION.md, docs/PHASED_BUILD_GUIDE.md, docs/POWER_DISTRIBUTION.md, docs/PROTO_PRINT_DAVINCI_JR.md, docs/PYLON_INTEGRATION_2026-07-18.md, docs/README.md, docs/REVN_BUILD_GUIDE_24IN.md, docs/TILT_ENCODER_WIRING_EMI_SPEC.md, docs/TILT_SPAR_ANALYSIS.md, docs/TODO.md, docs/TODO_1_1_0_COMPLETION_SUMMARY.md, docs/VERIFY_PLACEMENT_WORKFLOW.md, docs/WBS.md, docs/WBS_FEDERATION.md, docs/attribution_and_licensing.md, docs/bom_revR.json, docs/electrical_fault_margins.md, docs/failsafe_thresholds.md, docs/flight_envelope.md, docs/img/assembled-iso.png, docs/img/leg.png, docs/img/nozzle_drive_trade.png, docs/img/port-nacelle-horizontal.png, docs/img/splice-collar.png, docs/img/starboard-nacelle-vert.png, docs/img/transparent-nacelle.png, docs/img/wing_rev_r1a_sections.png, docs/img/wing_rev_s1c_sections.png, docs/references/108090023_STS3215-C001_Datasheet.pdf, docs/references/Bus_servo_control_circuit.pdf, docs/references/CERN_OHL_rationale.pdf, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model.html, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/1.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/2.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37110-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37111-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37112-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-large_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37114-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37115-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/76a8e5b0fe9140cf057b953efbc49a1f.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/EDF50mm-02.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/analytics.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css_002.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades-3s4.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_003.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_004.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_005.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_006.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_007.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/ga.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/mollie.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_114_a4444adaf1056832dd63b28b928b74e6.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_03a718a060cf48c0e5393bbea5cb1aa7_all.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_c1bb31e2f03fadfdc659940cc14955dc_print.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-64mm-edf-glider-nacelle-for-swift-2100.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-edf-glider-nacelle-for-swift-2100-827-50mm.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-model-logo-16966716258.jpg, docs/references/POCKETBEAGLE2 V10_241220.DSN, docs/references/ST3215 memory register map-EN.xls, docs/references/ST3215-2D.zip, docs/references/ST3215-3D.zip, docs/references/Screenshot 2026-08-18 at 09-50-31 EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades 6S Motor 3200KV - Xfly-Model.png, docs/references/Servo_Driver_with_ESP32_3D.zip, docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf, docs/references/nick-henning/Re: Contact got a new submission - Nick Henning - 2026-07-06 1421.txt, docs/references/nick-henning/nick-henning-close-back-combine.jpg, docs/references/nick-henning/nick-henning-close-bridge-combine.jpg, docs/references/nick-henning/nick-henning-close-gear-combine.jpg, docs/references/nick-henning/nick-henning-final-backside-combine.jpg, docs/references/nick-henning/nick-henning-final-front-combine.jpg, docs/references/nick-henning/nick-henning-final-top-combine.jpg, docs/references/nick-henning/nick-henning-uvdisplay-engine.jpg, docs/references/nick-henning/nick-henning-uvdisplay-gear.jpg, docs/references/nick-henning/nick-henning-uvdisplay-wing.jpg, docs/references/nick-henning/port-bow-full-henning.jpg, docs/references/nick-henning/port-bow-upper-bridge-with-wireframe-henning.jpg, docs/references/nick-henning/port-bow-view-with-wireframe-henning.jpg, docs/references/nick-henning/port-quarter-with-wireframe-henning.jpg, docs/references/nick-henning/top-view-with-wireframe-henning.jpg, docs/references/open-source-hardware-checklist.pdf, docs/references/pocketbeagle2 revA_241205.brd, docs/references/scservo.zip.zip, docs/references/thingverse-serenity/LICENSE.txt, docs/references/thingverse-serenity/README.txt, docs/references/thingverse-serenity/files/s_cargo_door.stl, docs/references/thingverse-serenity/files/s_cargo_door_strutts.stl, docs/references/thingverse-serenity/files/s_cargo_sect.stl, docs/references/thingverse-serenity/files/s_eng_left.stl, docs/references/thingverse-serenity/files/s_eng_pistons.stl, docs/references/thingverse-serenity/files/s_eng_piv_outer.stl, docs/references/thingverse-serenity/files/s_eng_piv_pins.stl, docs/references/thingverse-serenity/files/s_eng_right.stl, docs/references/thingverse-serenity/files/s_feet_x_4.stl, docs/references/thingverse-serenity/files/s_head.stl, docs/references/thingverse-serenity/files/s_legs.stl, docs/references/thingverse-serenity/files/s_middle.stl, docs/references/thingverse-serenity/files/s_pivot_arm_a.stl, docs/references/thingverse-serenity/files/s_rear.stl, docs/references/thingverse-serenity/files/s_wings_both.stl, docs/references/thingverse-serenity/images/front-starboard.png, docs/references/thingverse-serenity/images/s_01.jpg, docs/references/thingverse-serenity/images/s_02.jpg, docs/references/thingverse-serenity/images/s_03.jpg, docs/references/thingverse-serenity/images/s_04.jpg, docs/references/thingverse-serenity/images/s_05.jpg, docs/references/thingverse-serenity/images/s_06.jpg, docs/references/thingverse-serenity/images/s_07.jpg, docs/references/thingverse-serenity/images/s_08.jpg, docs/references/thingverse-serenity/images/s_09.jpg, docs/references/thingverse-serenity/images/s_10.jpg, docs/references/thingverse-serenity/images/s_11.jpg, docs/references/thingverse-serenity/images/s_cargo_door.png, docs/references/thingverse-serenity/images/s_cargo_door_strutts.png, docs/references/thingverse-serenity/images/s_cargo_sect.png, docs/references/thingverse-serenity/images/s_eng_left.png, docs/references/thingverse-serenity/images/s_eng_pistons.png, docs/references/thingverse-serenity/images/s_eng_piv_outer.png, docs/references/thingverse-serenity/images/s_eng_piv_pins.png, docs/references/thingverse-serenity/images/s_eng_right.png, docs/references/thingverse-serenity/images/s_feet_x_4.png, docs/references/thingverse-serenity/images/s_head.png, docs/references/thingverse-serenity/images/s_legs.png, docs/references/thingverse-serenity/images/s_middle.png, docs/references/thingverse-serenity/images/s_pivot_arm_a.png, docs/references/thingverse-serenity/images/s_rear.png, docs/references/thingverse-serenity/images/s_wings_both.png, docs/references/vimdrones_can_periph_pico_v1.0.stl, docs/references/vimdrones_esc_s50_v1.0.step, docs/references/vimdrones_esc_s50_v1.0.stl, docs/references/vimdrones_esc_s50_wiring.png, docs/solutions/design-patterns/reducing-token-cost-of-federated-agents-md.md, docs/structural_analysis.md, gcs/AGENTS.md, gcs/README.md, gcs/SKIPPER_SPEC.md, gcs/TODO.md, gcs/WBS.md, gcs/skipper/README.md, gcs/skipper/hardware/docs/skipper_antenna_spec.md, gcs/skipper/hardware/docs/skipper_power_budget.md, gcs/skipper/hardware/docs/skipper_wiring.md, graphical-build-guide/AGENTS.md, graphical-build-guide/BUILD_GUIDE_TEMPLATE.md, graphical-build-guide/README.md, graphical-build-guide/REVN_BUILD_GUIDE_24IN.md, graphical-build-guide/TODO-old.md, graphical-build-guide/TODO.md, graphical-build-guide/WBS.md, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, tools/AGENTS.md, tools/README.md, tools/TODO.md, tools/TOOL_REFERENCE.md -- `emi-hardening` (60): AGENTS.md, README.md, WBS.md, airframe/FreeCAD-scripts/serenity_placeholders_assembly.py, airframe/README.md, airframe/fuselage-joints/WBS.md, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/cargo/cargo_vera_faraday.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/rcrs49_wire_post.scad, airframe/placeholders/faraday/Far_EMI_vent_40x40x6mm.stl, airframe/placeholders/generate_placeholders.py, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/src/mag_mmc5983ma.h, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/scripts/gen_commo_sch.py, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_pcb.py, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Observer/scripts/gen_observer.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Pilot/Pilot.md, avionics/kicad/XO/XO.md, avionics/kicad/complete_xcvr_49mhz2.py, avionics/kicad/fix_xcvr_labels.py, avionics/observer/WBS.md, avionics/rev-s1/WBS.md, current-specification/serenity-rev-s.jsx, docs/AVIONICS_PB2_REDESIGN.md, docs/BATTERY_MOUNT.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/ETHERNET_PHY_TRADE.md, docs/FIRST_FLIGHT_READINESS.md, docs/OBSERVER_MANUFACTURING_READINESS.md, docs/PHASED_BUILD_GUIDE.md, docs/POWER_DISTRIBUTION.md, docs/README.md, docs/REVN_BUILD_GUIDE_24IN.md, docs/TILT_ENCODER_WIRING_EMI_SPEC.md, docs/TILT_SPAR_ANALYSIS.md, docs/WBS_FEDERATION.md, docs/electrical_fault_margins.md, gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts, graphical-build-guide/flight-phases/WBS.md, tools/TOOL_REFERENCE.md, tools/precommit_index.py, tools/validate_kicad.py +- `documentation` (260): AGENTS.md, CLAUDE-MEMORY.md, CLAUDE.md, README.md, REFERENCES.md, REPO_ENFORCEMENT.md, SECURITY.md, TODO.md, WBS.md, airframe/AGENTS.md, airframe/HULL_FRAME_REFERENCE.md, airframe/README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/TODO.md, airframe/VERIFY_PLACEMENT_CHECKLIST.md, airframe/WBS.md, airframe/fuselage-covers/TODO.md, airframe/fuselage-covers/WBS.md, airframe/fuselage-joints/TODO.md, airframe/fuselage-joints/WBS.md, airframe/fuselage-mid/TODO.md, airframe/fuselage-mid/WBS.md, airframe/landing-gear/HANDOFF.md, airframe/landing-gear/TODO.md, airframe/landing-gear/WBS.md, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/dts/README.md, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/Commo/Commo.md, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/GENERATOR_DRIFT_ANALYSIS.md, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/PCBNEW_SWIG_BUG.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/Pilot.md, avionics/kicad/README.md, avionics/kicad/TODO-1.2b-CHECKLIST.md, avionics/kicad/TODO-1.2b-KICAD-READY.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/XO/XO.md, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/TODO.md, avionics/rev-s1/WBS.md, current-specification/AGENTS.md, current-specification/LICENSE_AND_ATTRIBUTION.md, current-specification/README.md, current-specification/SPEC_TEMPLATE.md, current-specification/TODO.md, deferred/AGENTS.md, deferred/DEFERRED_ITEM_TEMPLATE.md, deferred/README.md, deferred/TODO.md, deferred/WBS.md, deferred/aft-edf/README.md, docs/AGENTS.md, docs/AVIONICS_PB2_REDESIGN.md, docs/BATTERY_MOUNT.md, docs/CARGO_WINCH_SPECIFICATION.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/DOC_TEMPLATES.md, docs/DOC_VERIFICATION_0.6.2.md, docs/ETHERNET_PHY_TRADE.md, docs/FIRST_FLIGHT_READINESS.md, docs/LANDING_GEAR_ANALYSIS.md, docs/LICENSE, docs/MANIFEST.json, docs/NOZZLE_DRIVE_TRADE.md, docs/OBSERVER_LASER_ANALYSIS.md, docs/OBSERVER_MANUFACTURING_READINESS.md, docs/OSHW_CERTIFICATION.md, docs/PHASED_BUILD_GUIDE.md, docs/POWER_DISTRIBUTION.md, docs/PROTO_PRINT_DAVINCI_JR.md, docs/PYLON_INTEGRATION_2026-07-18.md, docs/README.md, docs/REVN_BUILD_GUIDE_24IN.md, docs/TILT_ENCODER_WIRING_EMI_SPEC.md, docs/TILT_SPAR_ANALYSIS.md, docs/TODO.md, docs/TODO_1_1_0_COMPLETION_SUMMARY.md, docs/VERIFY_PLACEMENT_WORKFLOW.md, docs/WBS.md, docs/WBS_FEDERATION.md, docs/attribution_and_licensing.md, docs/bom_revR.json, docs/electrical_fault_margins.md, docs/failsafe_thresholds.md, docs/flight_envelope.md, docs/img/assembled-iso.png, docs/img/leg.png, docs/img/nozzle_drive_trade.png, docs/img/port-nacelle-horizontal.png, docs/img/splice-collar.png, docs/img/starboard-nacelle-vert.png, docs/img/transparent-nacelle.png, docs/img/wing_rev_r1a_sections.png, docs/img/wing_rev_s1c_sections.png, docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md, docs/plans/2026-08-25-001-finish-avionics-plan.md, docs/plans/2026-08-25-002-finish-airframe-components-plan.md, docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md, docs/references/108090023_STS3215-C001_Datasheet.pdf, docs/references/Bus_servo_control_circuit.pdf, docs/references/CERN_OHL_rationale.pdf, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model.html, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/1.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/2.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37110-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37111-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37112-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-large_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37114-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37115-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/76a8e5b0fe9140cf057b953efbc49a1f.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/EDF50mm-02.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/analytics.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css_002.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades-3s4.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_003.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_004.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_005.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_006.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_007.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/ga.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/mollie.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_114_a4444adaf1056832dd63b28b928b74e6.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_03a718a060cf48c0e5393bbea5cb1aa7_all.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_c1bb31e2f03fadfdc659940cc14955dc_print.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-64mm-edf-glider-nacelle-for-swift-2100.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-edf-glider-nacelle-for-swift-2100-827-50mm.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-model-logo-16966716258.jpg, docs/references/POCKETBEAGLE2 V10_241220.DSN, docs/references/ST3215 memory register map-EN.xls, docs/references/ST3215-2D.zip, docs/references/ST3215-3D.zip, docs/references/Screenshot 2026-08-18 at 09-50-31 EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades 6S Motor 3200KV - Xfly-Model.png, docs/references/Servo_Driver_with_ESP32_3D.zip, docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf, docs/references/nick-henning/Re: Contact got a new submission - Nick Henning - 2026-07-06 1421.txt, docs/references/nick-henning/nick-henning-close-back-combine.jpg, docs/references/nick-henning/nick-henning-close-bridge-combine.jpg, docs/references/nick-henning/nick-henning-close-gear-combine.jpg, docs/references/nick-henning/nick-henning-final-backside-combine.jpg, docs/references/nick-henning/nick-henning-final-front-combine.jpg, docs/references/nick-henning/nick-henning-final-top-combine.jpg, docs/references/nick-henning/nick-henning-uvdisplay-engine.jpg, docs/references/nick-henning/nick-henning-uvdisplay-gear.jpg, docs/references/nick-henning/nick-henning-uvdisplay-wing.jpg, docs/references/nick-henning/port-bow-full-henning.jpg, docs/references/nick-henning/port-bow-upper-bridge-with-wireframe-henning.jpg, docs/references/nick-henning/port-bow-view-with-wireframe-henning.jpg, docs/references/nick-henning/port-quarter-with-wireframe-henning.jpg, docs/references/nick-henning/top-view-with-wireframe-henning.jpg, docs/references/open-source-hardware-checklist.pdf, docs/references/pocketbeagle2 revA_241205.brd, docs/references/scservo.zip.zip, docs/references/thingverse-serenity/LICENSE.txt, docs/references/thingverse-serenity/README.txt, docs/references/thingverse-serenity/files/s_cargo_door.stl, docs/references/thingverse-serenity/files/s_cargo_door_strutts.stl, docs/references/thingverse-serenity/files/s_cargo_sect.stl, docs/references/thingverse-serenity/files/s_eng_left.stl, docs/references/thingverse-serenity/files/s_eng_pistons.stl, docs/references/thingverse-serenity/files/s_eng_piv_outer.stl, docs/references/thingverse-serenity/files/s_eng_piv_pins.stl, docs/references/thingverse-serenity/files/s_eng_right.stl, docs/references/thingverse-serenity/files/s_feet_x_4.stl, docs/references/thingverse-serenity/files/s_head.stl, docs/references/thingverse-serenity/files/s_legs.stl, docs/references/thingverse-serenity/files/s_middle.stl, docs/references/thingverse-serenity/files/s_pivot_arm_a.stl, docs/references/thingverse-serenity/files/s_rear.stl, docs/references/thingverse-serenity/files/s_wings_both.stl, docs/references/thingverse-serenity/images/front-starboard.png, docs/references/thingverse-serenity/images/s_01.jpg, docs/references/thingverse-serenity/images/s_02.jpg, docs/references/thingverse-serenity/images/s_03.jpg, docs/references/thingverse-serenity/images/s_04.jpg, docs/references/thingverse-serenity/images/s_05.jpg, docs/references/thingverse-serenity/images/s_06.jpg, docs/references/thingverse-serenity/images/s_07.jpg, docs/references/thingverse-serenity/images/s_08.jpg, docs/references/thingverse-serenity/images/s_09.jpg, docs/references/thingverse-serenity/images/s_10.jpg, docs/references/thingverse-serenity/images/s_11.jpg, docs/references/thingverse-serenity/images/s_cargo_door.png, docs/references/thingverse-serenity/images/s_cargo_door_strutts.png, docs/references/thingverse-serenity/images/s_cargo_sect.png, docs/references/thingverse-serenity/images/s_eng_left.png, docs/references/thingverse-serenity/images/s_eng_pistons.png, docs/references/thingverse-serenity/images/s_eng_piv_outer.png, docs/references/thingverse-serenity/images/s_eng_piv_pins.png, docs/references/thingverse-serenity/images/s_eng_right.png, docs/references/thingverse-serenity/images/s_feet_x_4.png, docs/references/thingverse-serenity/images/s_head.png, docs/references/thingverse-serenity/images/s_legs.png, docs/references/thingverse-serenity/images/s_middle.png, docs/references/thingverse-serenity/images/s_pivot_arm_a.png, docs/references/thingverse-serenity/images/s_rear.png, docs/references/thingverse-serenity/images/s_wings_both.png, docs/references/vimdrones_can_periph_pico_v1.0.stl, docs/references/vimdrones_esc_s50_v1.0.step, docs/references/vimdrones_esc_s50_v1.0.stl, docs/references/vimdrones_esc_s50_wiring.png, docs/solutions/design-patterns/reducing-token-cost-of-federated-agents-md.md, docs/structural_analysis.md, gcs/AGENTS.md, gcs/README.md, gcs/SKIPPER_SPEC.md, gcs/TODO.md, gcs/WBS.md, gcs/skipper/README.md, gcs/skipper/hardware/docs/skipper_antenna_spec.md, gcs/skipper/hardware/docs/skipper_power_budget.md, gcs/skipper/hardware/docs/skipper_wiring.md, graphical-build-guide/AGENTS.md, graphical-build-guide/BUILD_GUIDE_TEMPLATE.md, graphical-build-guide/README.md, graphical-build-guide/REVN_BUILD_GUIDE_24IN.md, graphical-build-guide/TODO-old.md, graphical-build-guide/TODO.md, graphical-build-guide/WBS.md, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, tools/AGENTS.md, tools/README.md, tools/TODO.md, tools/TOOL_REFERENCE.md +- `emi-hardening` (61): AGENTS.md, README.md, WBS.md, airframe/FreeCAD-scripts/serenity_placeholders_assembly.py, airframe/README.md, airframe/fuselage-joints/WBS.md, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/cargo/cargo_vera_faraday.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/rcrs49_wire_post.scad, airframe/placeholders/faraday/Far_EMI_vent_40x40x6mm.stl, airframe/placeholders/generate_placeholders.py, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/src/mag_mmc5983ma.h, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/scripts/gen_commo_sch.py, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_pcb.py, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Observer/scripts/gen_observer.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Pilot/Pilot.md, avionics/kicad/XO/XO.md, avionics/kicad/complete_xcvr_49mhz2.py, avionics/kicad/fix_xcvr_labels.py, avionics/observer/WBS.md, avionics/rev-s1/WBS.md, current-specification/serenity-rev-s.jsx, docs/AVIONICS_PB2_REDESIGN.md, docs/BATTERY_MOUNT.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/ETHERNET_PHY_TRADE.md, docs/FIRST_FLIGHT_READINESS.md, docs/OBSERVER_MANUFACTURING_READINESS.md, docs/PHASED_BUILD_GUIDE.md, docs/README.md, docs/REVN_BUILD_GUIDE_24IN.md, docs/TILT_ENCODER_WIRING_EMI_SPEC.md, docs/TILT_SPAR_ANALYSIS.md, docs/WBS_FEDERATION.md, docs/electrical_fault_margins.md, docs/plans/2026-08-25-001-finish-avionics-plan.md, docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md, gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts, graphical-build-guide/flight-phases/WBS.md, tools/TOOL_REFERENCE.md, tools/precommit_index.py, tools/validate_kicad.py - `fabrication` (1): airframe/placeholders/gears/Bevel_housing_CF_PETG.stl - `firmware` (44): avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/CMakeLists.txt, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/cn/CMakeLists.txt, avionics/firmware/cn/src/main.c, avionics/firmware/cn/src/si5351.c, avionics/firmware/cn/src/si5351.h, avionics/firmware/cn/src/xcvr_kiss.c, avionics/firmware/cn/src/xcvr_kiss.h, avionics/firmware/common/CMakeLists.txt, avionics/firmware/common/include/ax25_types.h, avionics/firmware/common/include/failsafe_config.h, avionics/firmware/common/include/kiss_types.h, avionics/firmware/common/include/sbus_input.h, avionics/firmware/common/src/sbus_input.c, avionics/firmware/dts/Makefile, avionics/firmware/dts/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/CMakeLists.txt, avionics/firmware/fc/src/bmon_ina2xx.c, avionics/firmware/fc/src/bmon_ina2xx.h, avionics/firmware/fc/src/cell_mon_bq769x0.c, avionics/firmware/fc/src/cell_mon_bq769x0.h, avionics/firmware/fc/src/governor_config.h, avionics/firmware/fc/src/mag_mmc5983ma.c, avionics/firmware/fc/src/mag_mmc5983ma.h, avionics/firmware/fc/src/mag_qmc5883l.c, avionics/firmware/fc/src/mag_qmc5883l.h, avionics/firmware/fc/src/main.c, avionics/firmware/fc/src/pwr_fault.c, avionics/firmware/fc/src/pwr_fault.h, avionics/firmware/fc/tools/.gitignore, avionics/firmware/fc/tools/governor_cal.py, avionics/firmware/fc/tools/requirements.txt, gcs/skipper/firmware/pb2i/CMakeLists.txt, gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts, gcs/skipper/firmware/pb2i/src/skipper_config.h, gcs/skipper/firmware/pb2i/src/skipper_gimbal.c, gcs/skipper/firmware/pb2i/src/skipper_gimbal.h, gcs/skipper/firmware/pb2i/src/skipper_telemetry.c, gcs/skipper/firmware/pb2i/src/skipper_telemetry.h - `ground-control` (49): airframe/placeholders/bearings/B6804_20x32x7mm_GCS.stl, airframe/placeholders/gcs/AS5600_encoder_breakout_15x15mm.stl, airframe/placeholders/gcs/Antenna_2p4GHz_zigbee_rubber_duck.stl, airframe/placeholders/gcs/Antenna_49MHz_whip_940mm.stl, airframe/placeholders/gcs/Antenna_5GHz_panel_14dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_Yagi_9dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_omni_5dBi.stl, airframe/placeholders/gcs/Antenna_GNSS_patch_ANN_MB00.stl, airframe/placeholders/gcs/B6804_20x32x7mm_gimbal_pan.stl, airframe/placeholders/gcs/GPS_module_M10Q_SparkFun.stl, airframe/placeholders/gcs/N42_disc_magnet_6x2mm.stl, airframe/placeholders/gcs/Pololu_D24V22F6_6V2A_BEC.stl, airframe/placeholders/gcs/Pololu_D24V50F5_5V5A_BEC.stl, airframe/placeholders/gcs/RF_splitter_915MHz_2way_ZFSC.stl, airframe/placeholders/gcs/Skipper_enclosure_IP65_145x90x65mm.stl, airframe/placeholders/gcs/Skipper_tripod_antenna_mast.stl, airframe/placeholders/gcs/TCA9548A_I2C_mux_breakout.stl, airframe/placeholders/power/LiPo_4S_10000mAh_175x64x38mm_GCS.stl, gcs/AGENTS.md, gcs/LICENSE, gcs/README.md, gcs/SKIPPER_SPEC.md, gcs/TODO.md, gcs/WBS.md, gcs/skipper/README.md, gcs/skipper/firmware/pb2i/CMakeLists.txt, gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts, gcs/skipper/firmware/pb2i/src/skipper_config.h, gcs/skipper/firmware/pb2i/src/skipper_gimbal.c, gcs/skipper/firmware/pb2i/src/skipper_gimbal.h, gcs/skipper/firmware/pb2i/src/skipper_telemetry.c, gcs/skipper/firmware/pb2i/src/skipper_telemetry.h, gcs/skipper/hardware/docs/skipper_antenna_spec.md, gcs/skipper/hardware/docs/skipper_power_budget.md, gcs/skipper/hardware/docs/skipper_wiring.md, gcs/skipper/hardware/enclosure/openscad/skipper_field_enclosure.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_mount.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_pan.scad, gcs/skipper/hardware/gimbal/openscad/skipper_gimbal_tilt.scad, gcs/skipper/software/config/mavlink_router.conf, gcs/skipper/software/config/skipper_config.yaml, gcs/skipper/software/install/install_deps.sh, gcs/skipper/software/install/install_mavlink_router.sh, gcs/skipper/software/install/install_qgc.sh, gcs/skipper/software/tracking/requirements.txt, gcs/skipper/software/tracking/src/gimbal_ctrl.py, gcs/skipper/software/tracking/src/telemetry_feed.py, gcs/skipper/software/tracking/src/tracker.py, gcs/skipper/software/tracking/tests/test_tracker.py @@ -29,13 +29,13 @@ Grep a tag name below to get every matching file in one line, without reading th - `pcb-design` (303): avionics/kicad/.gitignore, avionics/kicad/4_Run KiCad ERC_DRC validator (changed files only).txt, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Adhesive.gba, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Courtyard.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Cu.gbl, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Fab.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Mask.gbs, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Paste.gbp, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-B_Silkscreen.gbo, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-Edge_Cuts.gm1, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Adhesive.gta, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Courtyard.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Cu.gtl, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Fab.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Mask.gts, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Paste.gtp, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-F_Silkscreen.gto, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-Margin.gbr, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1-job.gbrjob, avionics/kicad/CAN-PERIPH-GW-1/gerbers/CAN-PERIPH-GW-1.drl, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.dsn, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pcb, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pcb.pre-g351x, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_prl, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_pro, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_sch, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.kicad_sch.pre-g351x, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.net, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1.ses, avionics/kicad/CAN-PERIPH-GW-1/kicads/CAN-PERIPH-GW-1_v2.ses, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_pcb.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_sch.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/route_can_periph_gw_pcb.py, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/gerbers/Commo-B_Courtyard.gbr, avionics/kicad/Commo/gerbers/Commo-B_Cu.gbl, avionics/kicad/Commo/gerbers/Commo-B_Fab.gbr, avionics/kicad/Commo/gerbers/Commo-B_Mask.gbs, avionics/kicad/Commo/gerbers/Commo-B_Paste.gbp, avionics/kicad/Commo/gerbers/Commo-B_Silkscreen.gbo, avionics/kicad/Commo/gerbers/Commo-Edge_Cuts.gm1, avionics/kicad/Commo/gerbers/Commo-F_Courtyard.gbr, avionics/kicad/Commo/gerbers/Commo-F_Cu.gtl, avionics/kicad/Commo/gerbers/Commo-F_Fab.gbr, avionics/kicad/Commo/gerbers/Commo-F_Mask.gts, avionics/kicad/Commo/gerbers/Commo-F_Paste.gtp, avionics/kicad/Commo/gerbers/Commo-F_Silkscreen.gto, avionics/kicad/Commo/gerbers/Commo-In1_Cu.g1, avionics/kicad/Commo/gerbers/Commo-In2_Cu.g2, avionics/kicad/Commo/gerbers/Commo-Margin.gbr, avionics/kicad/Commo/gerbers/Commo-in1-back.drl, avionics/kicad/Commo/gerbers/Commo-job.gbrjob, avionics/kicad/Commo/gerbers/Commo.drl, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-B_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-Edge_Cuts.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Mask.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Paste.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-F_Silkscreen.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In1_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-In2_Cu.gbr, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2-job.gbrjob, avionics/kicad/Commo/gerbers/XCVR-49MHZ-2.drl, avionics/kicad/Commo/kicads/Commo.kicad_pcb, avionics/kicad/Commo/kicads/Commo.kicad_prl, avionics/kicad/Commo/kicads/Commo.kicad_pro, avionics/kicad/Commo/kicads/Commo.kicad_sch, avionics/kicad/Commo/scripts/cleanup_commo_drc.py, avionics/kicad/Commo/scripts/gen_commo_sch.py, avionics/kicad/Commo/scripts/inject_commo_tpm.py, avionics/kicad/Commo/scripts/mod_commo_pcb.py, avionics/kicad/Commo/scripts/route_commo_rssi.py, avionics/kicad/ENC-NACELLE-1.kicad_pcb, avionics/kicad/ENC-NACELLE-1.kicad_prl, avionics/kicad/ENC-NACELLE-1.kicad_pro, avionics/kicad/ENC-NACELLE-1.kicad_sch, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/ENC-NACELLE-1.net, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/GENERATOR_DRIFT_ANALYSIS.md, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Adhesive.gba, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Courtyard.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Cu.gbl, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Fab.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Mask.gbs, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Paste.gbp, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-B_Silkscreen.gbo, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-Edge_Cuts.gm1, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Adhesive.gta, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Courtyard.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Cu.gtl, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Fab.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Mask.gts, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Paste.gtp, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-F_Silkscreen.gto, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-In1_Cu.g1, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-Margin.gbr, avionics/kicad/FlightEngineer/gerbers/FlightEngineer-job.gbrjob, avionics/kicad/FlightEngineer/gerbers/FlightEngineer.drl, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_pcb, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_prl, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_pro, avionics/kicad/FlightEngineer/kicads/FlightEngineer.kicad_sch, avionics/kicad/FlightEngineer/kicads/Kaylee.kicad_sch.pre-g351x, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_pin_snap.py, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_revs1_cleanup.py, avionics/kicad/FlightEngineer/scripts/fix_flight_engineer_yinv.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_pcb.py, avionics/kicad/FlightEngineer/scripts/gen_flight_engineer_revs1.py, avionics/kicad/FlightEngineer/scripts/inject_flight_engineer_trust_module.py, avionics/kicad/FlightEngineer/scripts/mod_flight_engineer_pcb_revs1.py, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/Observer.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Observer.pretty/TQFP-128-1EP_KSZ9477_14x14mm_P0.4mm_EP10x10.kicad_mod, avionics/kicad/Observer/Observer.pretty/Wurth_749010012A_10-100BASE-TX.kicad_mod, avionics/kicad/Observer/Observer.pretty/phyCORE-AM62x_PCM071_2xBTH-060.kicad_mod, avionics/kicad/Observer/Observer.pretty/phyCORE-AM62x_PCM071_placement.kicad_mod, avionics/kicad/Observer/Observer_som_pinmap.csv, avionics/kicad/Observer/PCBNEW_SWIG_BUG.md, avionics/kicad/Observer/VERA_NOSE_TRAPEZOID.md, avionics/kicad/Observer/Vera.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Vera.pretty/phyCORE-AM62x_PCM071_2xBTH-060.kicad_mod, avionics/kicad/Observer/Vera.pretty/phyCORE-AM62x_PCM071_placement.kicad_mod, avionics/kicad/Observer/gen_vera_bth060_footprint.py, avionics/kicad/Observer/gen_vera_ds_footprints.py, avionics/kicad/Observer/gen_vera_som_pcm071.py, avionics/kicad/Observer/kicads/Jayne.kicad_sch.pre-g351x, avionics/kicad/Observer/kicads/Observer.kicad_dru, avionics/kicad/Observer/kicads/Observer.kicad_pcb, avionics/kicad/Observer/kicads/Observer.kicad_pcb.pre-g351x, avionics/kicad/Observer/kicads/Observer.kicad_prl, avionics/kicad/Observer/kicads/Observer.kicad_pro, avionics/kicad/Observer/kicads/Observer.kicad_sch, avionics/kicad/Observer/kicads/Observer.net, avionics/kicad/Observer/kicads/_autosave-Observer.kicad_pcb, avionics/kicad/Observer/kicads/fp-lib-table, avionics/kicad/Observer/mod_vera_corners.py, avionics/kicad/Observer/mod_vera_ds_pcb.py, avionics/kicad/Observer/mod_vera_som_place.py, avionics/kicad/Observer/mod_vera_trapezoid.py, avionics/kicad/Observer/scripts/gen_observer.py, avionics/kicad/Observer/scripts/gen_observer_bth060_footprint.py, avionics/kicad/Observer/scripts/gen_observer_carrier_pcb.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_ds_footprints.py, avionics/kicad/Observer/scripts/gen_observer_ic_symbols.py, avionics/kicad/Observer/scripts/gen_observer_ksz_symbol.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Observer/scripts/gen_observer_som_pcm071.py, avionics/kicad/Observer/scripts/gen_observer_som_symbol.py, avionics/kicad/Observer/scripts/mod_observer_corners.py, avionics/kicad/Observer/scripts/mod_observer_ds_pcb.py, avionics/kicad/Observer/scripts/mod_observer_som_place.py, avionics/kicad/Observer/scripts/mod_observer_trapezoid.py, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/Pilot.md, avionics/kicad/Pilot/gerbers/Pilot-B_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Mask.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Paste.gbr, avionics/kicad/Pilot/gerbers/Pilot-B_Silkscreen.gbr, avionics/kicad/Pilot/gerbers/Pilot-Edge_Cuts.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Mask.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Paste.gbr, avionics/kicad/Pilot/gerbers/Pilot-F_Silkscreen.gbr, avionics/kicad/Pilot/gerbers/Pilot-In1_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-In2_Cu.gbr, avionics/kicad/Pilot/gerbers/Pilot-job.gbrjob, avionics/kicad/Pilot/gerbers/Pilot.drl, avionics/kicad/Pilot/kicads/Pilot.kicad_pcb, avionics/kicad/Pilot/kicads/Pilot.kicad_prl, avionics/kicad/Pilot/kicads/Pilot.kicad_pro, avionics/kicad/Pilot/kicads/Pilot.kicad_sch, avionics/kicad/Pilot/kicads/Pilot_rebuild.kicad_sch, avionics/kicad/Pilot/kicads/sym-lib-table, avionics/kicad/Pilot/scripts/gen_pilot_sch.py, avionics/kicad/Pilot/scripts/mod_pilot_pcb_reconcile.py, avionics/kicad/README.md, avionics/kicad/Serenity-Custom.pretty/MountingHole_2.2mm_M2_SelfTap_Compact.kicad_mod, avionics/kicad/Serenity-Custom.pretty/Pigtail_7W_DirectSolder.kicad_mod, avionics/kicad/Serenity-Custom.pretty/TI_WL1837MOD.kicad_mod, avionics/kicad/Serenity-Custom.pretty/uBlox_SAM-M10Q-00B.kicad_mod, avionics/kicad/TODO-1.2b-CHECKLIST.md, avionics/kicad/TODO-1.2b-KICAD-READY.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/XO/XO.md, avionics/kicad/XO/gerbers/XO-B_Cu.gbr, avionics/kicad/XO/gerbers/XO-B_Mask.gbr, avionics/kicad/XO/gerbers/XO-B_Paste.gbr, avionics/kicad/XO/gerbers/XO-B_Silkscreen.gbr, avionics/kicad/XO/gerbers/XO-Edge_Cuts.gbr, avionics/kicad/XO/gerbers/XO-F_Cu.gbr, avionics/kicad/XO/gerbers/XO-F_Mask.gbr, avionics/kicad/XO/gerbers/XO-F_Paste.gbr, avionics/kicad/XO/gerbers/XO-F_Silkscreen.gbr, avionics/kicad/XO/gerbers/XO-In1_Cu.gbr, avionics/kicad/XO/gerbers/XO-In2_Cu.gbr, avionics/kicad/XO/gerbers/XO-job.gbrjob, avionics/kicad/XO/gerbers/XO.drl, avionics/kicad/XO/kicads/XO.kicad_pcb, avionics/kicad/XO/kicads/XO.kicad_prl, avionics/kicad/XO/kicads/XO.kicad_pro, avionics/kicad/XO/kicads/XO.kicad_sch, avionics/kicad/XO/ref_remap_2026-07-18.json, avionics/kicad/add_eth_phy.py, avionics/kicad/add_sensors_sbus.py, avionics/kicad/apply_netlist.py, avionics/kicad/check_impedance.py, avionics/kicad/complete_1_2b.py, avionics/kicad/complete_xcvr_49mhz2.py, avionics/kicad/drc_report.txt, avionics/kicad/fix_pilot_xo_isolators.py, avionics/kicad/fix_starved_thermal_pads.py, avionics/kicad/fix_xcvr_labels.py, avionics/kicad/fp-lib-table, avionics/kicad/gen_enc_nacelle_pcb.py, avionics/kicad/generate_gerbers.py, avionics/kicad/generate_gerbers_rev_s1.py, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Courtyard.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Cu.gbl, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Fab.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Mask.gbs, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Paste.gbp, avionics/kicad/gerbers/CAPE-B-2-S1/XO-B_Silkscreen.gbo, avionics/kicad/gerbers/CAPE-B-2-S1/XO-Edge_Cuts.gm1, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Courtyard.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Cu.gtl, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Fab.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Mask.gts, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Paste.gtp, avionics/kicad/gerbers/CAPE-B-2-S1/XO-F_Silkscreen.gto, avionics/kicad/gerbers/CAPE-B-2-S1/XO-In1_Cu.g1, avionics/kicad/gerbers/CAPE-B-2-S1/XO-In2_Cu.g2, avionics/kicad/gerbers/CAPE-B-2-S1/XO-Margin.gbr, avionics/kicad/gerbers/CAPE-B-2-S1/XO-job.gbrjob, avionics/kicad/gerbers/CAPE-B-2-S1/XO.drl/XO.drl, avionics/kicad/gerbers/Commo-S1/Commo-B_Courtyard.gbr, avionics/kicad/gerbers/Commo-S1/Commo-B_Cu.gbl, avionics/kicad/gerbers/Commo-S1/Commo-B_Fab.gbr, avionics/kicad/gerbers/Commo-S1/Commo-B_Mask.gbs, avionics/kicad/gerbers/Commo-S1/Commo-B_Paste.gbp, avionics/kicad/gerbers/Commo-S1/Commo-B_Silkscreen.gbo, avionics/kicad/gerbers/Commo-S1/Commo-Edge_Cuts.gm1, avionics/kicad/gerbers/Commo-S1/Commo-F_Courtyard.gbr, avionics/kicad/gerbers/Commo-S1/Commo-F_Cu.gtl, avionics/kicad/gerbers/Commo-S1/Commo-F_Fab.gbr, avionics/kicad/gerbers/Commo-S1/Commo-F_Mask.gts, avionics/kicad/gerbers/Commo-S1/Commo-F_Paste.gtp, avionics/kicad/gerbers/Commo-S1/Commo-F_Silkscreen.gto, avionics/kicad/gerbers/Commo-S1/Commo-In1_Cu.g1, avionics/kicad/gerbers/Commo-S1/Commo-In2_Cu.g2, avionics/kicad/gerbers/Commo-S1/Commo-Margin.gbr, avionics/kicad/gerbers/Commo-S1/Commo-job.gbrjob, avionics/kicad/gerbers/Commo-S1/Commo.drl/Commo.drl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Adhesive.gba, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Courtyard.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Cu.gbl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Fab.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Mask.gbs, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Paste.gbp, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-B_Silkscreen.gbo, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-Edge_Cuts.gm1, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Adhesive.gta, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Courtyard.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Cu.gtl, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Fab.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Mask.gts, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Paste.gtp, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-F_Silkscreen.gto, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-In1_Cu.g1, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-Margin.gbr, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer-job.gbrjob, avionics/kicad/gerbers/FlightEngineer-S1/FlightEngineer.drl/FlightEngineer.drl, avionics/kicad/replace_footprints.py, avionics/kicad/retarget_mspm0g351x_slb9672.py, avionics/kicad/retarget_pcb_footprints.py, avionics/kicad/symbols/ISOW1044BDFMR_pinmap.csv, avionics/kicad/symbols/KSZ9477STXI_pinmap.csv, avionics/kicad/symbols/MSPM0G3507SRGZR_pinmap.csv, avionics/kicad/symbols/MSPM0G3518_Q1_RHB.kicad_sym, avionics/kicad/symbols/MSPM0G3519_Q1_RGZ.kicad_sym, avionics/kicad/symbols/Observer_ISOW1044BDFMR.kicad_sym, avionics/kicad/symbols/Observer_KSZ9477.kicad_sym, avionics/kicad/symbols/Observer_MSPM0G3507_RGZ.kicad_sym, avionics/kicad/symbols/Observer_SoM.kicad_sym, avionics/kicad/symbols/Observer_SoM_PCM071.kicad_sym, avionics/kicad/symbols/SLB9672XU2_0_pinmap.csv, avionics/kicad/symbols/SLB9672_TPM.kicad_sym, avionics/kicad/symbols/Vera_SoM_PCM071.kicad_sym, avionics/kicad/symbols/footprints/PHYCORE-AM62AX-DSC-FOOTPRINT.kicad_mod, avionics/kicad/symbols/phyCORE_AM62x_PCM071_pinmap.csv, tools/precommit_kicad_load.py, tools/validate_kicad.py - `power` (19): airframe/openscad/fuselage/battery_tray.scad, airframe/placeholders/foam/Void_power_bus_25x500x25mm.stl, airframe/placeholders/power/Fuse_MAXI_150A.stl, airframe/placeholders/power/Fuse_mini_40A.stl, airframe/placeholders/power/LiPo_4S_10000mAh_175x64x38mm_GCS.stl, airframe/placeholders/power/LiPo_6S_2800mAh_115x35x35mm.stl, airframe/placeholders/power/LiPo_6S_4000mAh_138x44x36mm.stl, airframe/placeholders/power/Shunt_CSS2H_2512K_1mohm.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/stls/fuselage/battery_tray.stl, avionics/kicad/FlightEngineer/kicads/Kaylee.kicad_sch.pre-g351x, docs/BATTERY_MOUNT.md, docs/POWER_DISTRIBUTION.md, docs/references/vimdrones_esc_s50_v1.0.step, docs/references/vimdrones_esc_s50_v1.0.stl, docs/references/vimdrones_esc_s50_wiring.png, gcs/skipper/hardware/docs/skipper_power_budget.md, graphical-build-guide/build_guide_10_power_wiring.svg - `project-tracking` (43): TODO.md, WBS.md, airframe/TODO.md, airframe/WBS.md, airframe/fuselage-covers/TODO.md, airframe/fuselage-covers/WBS.md, airframe/fuselage-joints/TODO.md, airframe/fuselage-joints/WBS.md, airframe/fuselage-mid/TODO.md, airframe/fuselage-mid/WBS.md, airframe/landing-gear/TODO.md, airframe/landing-gear/WBS.md, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/emi-hardening/TODO.md, avionics/emi-hardening/WBS.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/kicad/TODO-1.2b-CHECKLIST.md, avionics/kicad/TODO-1.2b-KICAD-READY.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/TODO.md, avionics/rev-s1/WBS.md, current-specification/TODO.md, deferred/TODO.md, deferred/WBS.md, docs/TODO.md, docs/TODO_1_1_0_COMPLETION_SUMMARY.md, docs/WBS.md, docs/WBS_FEDERATION.md, gcs/TODO.md, gcs/WBS.md, graphical-build-guide/TODO-old.md, graphical-build-guide/TODO.md, graphical-build-guide/WBS.md, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, tools/TODO.md -- `propulsion` (118): airframe/blender-scripts/blender_edf_bore_and_petals.py, airframe/blender-scripts/blender_nacelle_revo.py, airframe/blender-scripts/blender_nozzle_gen.py, airframe/blender-scripts/check_nacelle_alignment.py, airframe/openscad/nacelles/_export_inboard_cut.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/edf_aft_spider_sleeve.scad, airframe/openscad/nacelles/edf_stator_sleeve.scad, airframe/openscad/nacelles/gear_option_compare.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad, airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad, airframe/openscad/nacelles/nacelle_servo_bracket.scad, airframe/placeholders/foam/Void_nacelle_pylon_20x80x20mm.stl, airframe/placeholders/propulsion/EDF_120mm_6S_deferred.stl, airframe/placeholders/propulsion/EDF_50mm_6S.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/stls/fuselage/middle_canonical_edf_intake.stl, airframe/stls/nacelles/edf_aft_spider_sleeve.stl, airframe/stls/nacelles/edf_stator_sleeve.stl, airframe/stls/nacelles/eng_left_shell24_50mm_repaired.stl, airframe/stls/nacelles/eng_right_shell24_50mm_repaired.stl, airframe/stls/nacelles/nacelle_port_revs.stl, airframe/stls/nacelles/nacelle_servo_bracket.stl, airframe/stls/nacelles/nacelle_stbd_revs.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md, avionics/kicad/ENC-NACELLE-1.kicad_pcb, avionics/kicad/ENC-NACELLE-1.kicad_prl, avionics/kicad/ENC-NACELLE-1.kicad_pro, avionics/kicad/ENC-NACELLE-1.kicad_sch, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/ENC-NACELLE-1.net, avionics/kicad/gen_enc_nacelle_pcb.py, deferred/aft-edf/README.md, deferred/aft-edf/openscad/aft_edf_plenum.scad, deferred/aft-edf/openscad/edf_120_motor_mount.scad, deferred/aft-edf/openscad/edf_120_thrust_tube.scad, deferred/aft-edf/openscad/neck_intake_frame.scad, deferred/aft-edf/openscad/rear_neck_intake_shell24.scad, deferred/aft-edf/stls/aft_edf_plenum.stl, deferred/aft-edf/stls/edf_120_motor_mount.stl, deferred/aft-edf/stls/edf_120_thrust_tube.stl, deferred/aft-edf/stls/neck_intake_frame.stl, deferred/aft-edf/stls/rear_nozzle_closed_asm.stl, deferred/aft-edf/stls/rear_nozzle_frame.stl, deferred/aft-edf/stls/rear_nozzle_petal.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_0.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_1.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_2.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_3.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_4.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_5.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_6.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_7.stl, deferred/aft-edf/stls/rear_shell24_2mm_edf_bored.stl, docs/NOZZLE_DRIVE_TRADE.md, docs/img/nozzle_drive_trade.png, docs/img/port-nacelle-horizontal.png, docs/img/starboard-nacelle-vert.png, docs/img/transparent-nacelle.png, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model.html, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/1.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/2.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37110-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37111-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37112-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-large_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37114-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37115-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/76a8e5b0fe9140cf057b953efbc49a1f.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/EDF50mm-02.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/analytics.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css_002.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades-3s4.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_003.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_004.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_005.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_006.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_007.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/ga.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/mollie.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_114_a4444adaf1056832dd63b28b928b74e6.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_03a718a060cf48c0e5393bbea5cb1aa7_all.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_c1bb31e2f03fadfdc659940cc14955dc_print.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-64mm-edf-glider-nacelle-for-swift-2100.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-edf-glider-nacelle-for-swift-2100-827-50mm.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-model-logo-16966716258.jpg, docs/references/Screenshot 2026-08-18 at 09-50-31 EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades 6S Motor 3200KV - Xfly-Model.png, graphical-build-guide/build_guide_03_print_nacelle.svg, graphical-build-guide/build_guide_06_nacelle_pivot.svg, graphical-build-guide/build_guide_07_edf_install.svg, graphical-build-guide/build_guide_08_nozzle_gear.svg, graphical-build-guide/pngs/17_closeup_nacelle.png +- `propulsion` (117): airframe/blender-scripts/blender_edf_bore_and_petals.py, airframe/blender-scripts/blender_nacelle_revo.py, airframe/blender-scripts/blender_nozzle_gen.py, airframe/blender-scripts/check_nacelle_alignment.py, airframe/openscad/nacelles/_export_inboard_cut.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/edf_aft_spider_sleeve.scad, airframe/openscad/nacelles/edf_stator_sleeve.scad, airframe/openscad/nacelles/gear_option_compare.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad, airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad, airframe/openscad/nacelles/nacelle_servo_bracket.scad, airframe/placeholders/foam/Void_nacelle_pylon_20x80x20mm.stl, airframe/placeholders/propulsion/EDF_120mm_6S_deferred.stl, airframe/placeholders/propulsion/EDF_50mm_6S.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/stls/fuselage/middle_canonical_edf_intake.stl, airframe/stls/nacelles/edf_aft_spider_sleeve.stl, airframe/stls/nacelles/edf_stator_sleeve.stl, airframe/stls/nacelles/eng_left_shell24_50mm_repaired.stl, airframe/stls/nacelles/eng_right_shell24_50mm_repaired.stl, airframe/stls/nacelles/nacelle_port_revs.stl, airframe/stls/nacelles/nacelle_servo_bracket.stl, airframe/stls/nacelles/nacelle_stbd_revs.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md, avionics/kicad/ENC-NACELLE-1.kicad_pcb, avionics/kicad/ENC-NACELLE-1.kicad_prl, avionics/kicad/ENC-NACELLE-1.kicad_pro, avionics/kicad/ENC-NACELLE-1.kicad_sch, avionics/kicad/ENC-NACELLE-1.md, avionics/kicad/ENC-NACELLE-1.net, avionics/kicad/gen_enc_nacelle_pcb.py, deferred/aft-edf/README.md, deferred/aft-edf/openscad/aft_edf_plenum.scad, deferred/aft-edf/openscad/edf_120_motor_mount.scad, deferred/aft-edf/openscad/edf_120_thrust_tube.scad, deferred/aft-edf/openscad/neck_intake_frame.scad, deferred/aft-edf/openscad/rear_neck_intake_shell24.scad, deferred/aft-edf/stls/aft_edf_plenum.stl, deferred/aft-edf/stls/edf_120_motor_mount.stl, deferred/aft-edf/stls/edf_120_thrust_tube.stl, deferred/aft-edf/stls/neck_intake_frame.stl, deferred/aft-edf/stls/rear_nozzle_closed_asm.stl, deferred/aft-edf/stls/rear_nozzle_frame.stl, deferred/aft-edf/stls/rear_nozzle_petal.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_0.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_1.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_2.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_3.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_4.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_5.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_6.stl, deferred/aft-edf/stls/rear_nozzle_petal_hull_7.stl, deferred/aft-edf/stls/rear_shell24_2mm_edf_bored.stl, docs/NOZZLE_DRIVE_TRADE.md, docs/img/nozzle_drive_trade.png, docs/img/port-nacelle-horizontal.png, docs/img/starboard-nacelle-vert.png, docs/img/transparent-nacelle.png, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model.html, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/1.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/2.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37110-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37111-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37112-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-large_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37114-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37115-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/76a8e5b0fe9140cf057b953efbc49a1f.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/EDF50mm-02.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/analytics.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css_002.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades-3s4.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_003.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_004.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_005.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_006.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_007.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/ga.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/mollie.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_114_a4444adaf1056832dd63b28b928b74e6.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_03a718a060cf48c0e5393bbea5cb1aa7_all.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_c1bb31e2f03fadfdc659940cc14955dc_print.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-64mm-edf-glider-nacelle-for-swift-2100.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-edf-glider-nacelle-for-swift-2100-827-50mm.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-model-logo-16966716258.jpg, docs/references/Screenshot 2026-08-18 at 09-50-31 EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades 6S Motor 3200KV - Xfly-Model.png, graphical-build-guide/build_guide_03_print_nacelle.svg, graphical-build-guide/build_guide_06_nacelle_pivot.svg, graphical-build-guide/build_guide_07_edf_install.svg, graphical-build-guide/build_guide_08_nozzle_gear.svg, graphical-build-guide/pngs/17_closeup_nacelle.png - `redundancy-failover` (35): AGENTS.md, README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/middle_canonical_shell24.scad, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/emi-hardening/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/WBS.md, avionics/firmware/common/include/failsafe_config.h, current-specification/README.md, deferred/README.md, docs/AVIONICS_PB2_REDESIGN.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/ETHERNET_PHY_TRADE.md, docs/FIRST_FLIGHT_READINESS.md, docs/PHASED_BUILD_GUIDE.md, docs/README.md, docs/REVN_BUILD_GUIDE_24IN.md, docs/electrical_fault_margins.md, docs/failsafe_thresholds.md, gcs/AGENTS.md, gcs/SKIPPER_SPEC.md, gcs/WBS.md, gcs/skipper/hardware/docs/skipper_antenna_spec.md, graphical-build-guide/README.md, graphical-build-guide/TODO-old.md, graphical-build-guide/WBS.md, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, tools/TOOL_REFERENCE.md, tools/precommit_index.py - `repo-infra` (10): .githooks/pre-commit, .github/linters/.ecrc, .github/linters/.markdown-lint.yml, .github/workflows/ci.yml, .github/workflows/devskim.yml, .github/workflows/stale-branches.yml, .github/workflows/super-linter.yml, .vscode/c_cpp_properties.json, .vscode/extensions.json, .vscode/settings.json -- `security` (104): AGENTS.md, CLAUDE-MEMORY.md, README.md, REFERENCES.md, SECURITY.md, TODO.md, airframe/FreeCAD-scripts/serenity_assembly.py, airframe/README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/blender-scripts/add_structural_features.py, airframe/fuselage-joints/WBS.md, airframe/landing-gear/WBS.md, airframe/openscad/fuselage/cargo/cargo_spar_drive.scad, airframe/openscad/fuselage/landing_leg_assy.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/port_tilt_spar_assembly.scad, airframe/placeholders/generate_placeholders.py, airframe/stls/fuselage/cargo/generate_cargo_hinge_retention.py, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/cn/src/main.c, avionics/firmware/common/src/sbus_input.c, avionics/firmware/dts/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/src/main.c, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_pcb.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_sch.py, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/scripts/inject_commo_tpm.py, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/scripts/inject_flight_engineer_trust_module.py, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/scripts/gen_observer_carrier_pcb.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_ic_symbols.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/scripts/gen_pilot_sch.py, avionics/kicad/Pilot/scripts/mod_pilot_pcb_reconcile.py, avionics/kicad/README.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/replace_footprints.py, avionics/kicad/retarget_mspm0g351x_slb9672.py, avionics/kicad/retarget_pcb_footprints.py, avionics/kicad/symbols/SLB9672_TPM.kicad_sym, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/WBS.md, current-specification/LICENSE_AND_ATTRIBUTION.md, current-specification/README.md, current-specification/serenity-rev-s.jsx, docs/AGENTS.md, docs/AVIONICS_PB2_REDESIGN.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/FIRST_FLIGHT_READINESS.md, docs/OBSERVER_LASER_ANALYSIS.md, docs/OBSERVER_MANUFACTURING_READINESS.md, docs/OSHW_CERTIFICATION.md, docs/PHASED_BUILD_GUIDE.md, docs/POWER_DISTRIBUTION.md, docs/PROTO_PRINT_DAVINCI_JR.md, docs/README.md, docs/TODO_1_1_0_COMPLETION_SUMMARY.md, docs/VERIFY_PLACEMENT_WORKFLOW.md, docs/WBS.md, docs/solutions/design-patterns/reducing-token-cost-of-federated-agents-md.md, gcs/AGENTS.md, gcs/README.md, gcs/SKIPPER_SPEC.md, gcs/TODO.md, gcs/WBS.md, gcs/skipper/README.md, gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts, gcs/skipper/firmware/pb2i/src/skipper_config.h, gcs/skipper/firmware/pb2i/src/skipper_telemetry.c, gcs/skipper/hardware/docs/skipper_power_budget.md, graphical-build-guide/AGENTS.md, graphical-build-guide/BUILD_GUIDE_TEMPLATE.md, graphical-build-guide/README.md, graphical-build-guide/REVN_BUILD_GUIDE_24IN.md, graphical-build-guide/TODO-old.md, graphical-build-guide/TODO.md, graphical-build-guide/build_guide_12_security_hw.svg, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, tools/TOOL_REFERENCE.md, tools/add_landing_gear_bosses.py, tools/build_landing_gear_views.py, tools/landing_gear_bay_pad_fit.py, tools/open_mating_faces.py, tools/precommit_index.py, tools/wing_internal_clearance.py, tools/wing_root_deconflict.py +- `security` (106): AGENTS.md, CLAUDE-MEMORY.md, README.md, REFERENCES.md, SECURITY.md, TODO.md, airframe/FreeCAD-scripts/serenity_assembly.py, airframe/README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/fuselage-joints/WBS.md, airframe/landing-gear/WBS.md, airframe/openscad/fuselage/cargo/cargo_spar_drive.scad, airframe/openscad/fuselage/landing_leg_assy.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/port_tilt_spar_assembly.scad, airframe/placeholders/generate_placeholders.py, airframe/stls/fuselage/cargo/generate_cargo_hinge_retention.py, avionics/AGENTS.md, avionics/README.md, avionics/TODO-1-9-COMPLETION-STATUS.md, avionics/TODO.md, avionics/WBS.md, avionics/firmware/AK7455_CALIBRATION_SPECIFICATION.md, avionics/firmware/README.md, avionics/firmware/TODO.md, avionics/firmware/WBS.md, avionics/firmware/cn/src/main.c, avionics/firmware/common/src/sbus_input.c, avionics/firmware/dts/README.md, avionics/firmware/dts/cape-a/k3-am6254-pocketbeagle2-serenity-cape-a2.dts, avionics/firmware/dts/cape-b/k3-am6254-pocketbeagle2-serenity-cape-b2.dts, avionics/firmware/fc/src/main.c, avionics/kicad/CAN-PERIPH-GW-1/CAN-PERIPH-GW-1.md, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_pcb.py, avionics/kicad/CAN-PERIPH-GW-1/scripts/gen_can_periph_gw_sch.py, avionics/kicad/Commo/Commo.md, avionics/kicad/Commo/scripts/inject_commo_tpm.py, avionics/kicad/FlightEngineer/FlightEngineer.md, avionics/kicad/FlightEngineer/scripts/inject_flight_engineer_trust_module.py, avionics/kicad/Observer/OBSERVER_SOM_NETMAP.md, avionics/kicad/Observer/Observer.md, avionics/kicad/Observer/scripts/gen_observer_carrier_pcb.py, avionics/kicad/Observer/scripts/gen_observer_carrier_sch.py, avionics/kicad/Observer/scripts/gen_observer_ic_symbols.py, avionics/kicad/Observer/scripts/gen_observer_pcb.py, avionics/kicad/Pilot/PILOT_FOOTPRINT_VERIFICATION.md, avionics/kicad/Pilot/scripts/gen_pilot_sch.py, avionics/kicad/Pilot/scripts/mod_pilot_pcb_reconcile.py, avionics/kicad/README.md, avionics/kicad/TODO-1.2b-STATUS-REPORT.md, avionics/kicad/replace_footprints.py, avionics/kicad/retarget_mspm0g351x_slb9672.py, avionics/kicad/retarget_pcb_footprints.py, avionics/kicad/symbols/SLB9672_TPM.kicad_sym, avionics/observer/TODO.md, avionics/observer/WBS.md, avionics/rev-s1/WBS.md, current-specification/LICENSE_AND_ATTRIBUTION.md, current-specification/README.md, current-specification/serenity-rev-s.jsx, docs/AGENTS.md, docs/AVIONICS_PB2_REDESIGN.md, docs/DOCUMENTATION_RECONCILIATION_2026-07-28.md, docs/FIRST_FLIGHT_READINESS.md, docs/OBSERVER_LASER_ANALYSIS.md, docs/OBSERVER_MANUFACTURING_READINESS.md, docs/OSHW_CERTIFICATION.md, docs/PHASED_BUILD_GUIDE.md, docs/POWER_DISTRIBUTION.md, docs/PROTO_PRINT_DAVINCI_JR.md, docs/README.md, docs/TODO_1_1_0_COMPLETION_SUMMARY.md, docs/VERIFY_PLACEMENT_WORKFLOW.md, docs/WBS.md, docs/plans/2026-08-25-001-finish-avionics-plan.md, docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md, docs/solutions/design-patterns/reducing-token-cost-of-federated-agents-md.md, gcs/AGENTS.md, gcs/README.md, gcs/SKIPPER_SPEC.md, gcs/TODO.md, gcs/WBS.md, gcs/skipper/README.md, gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts, gcs/skipper/firmware/pb2i/src/skipper_config.h, gcs/skipper/firmware/pb2i/src/skipper_telemetry.c, gcs/skipper/hardware/docs/skipper_power_budget.md, graphical-build-guide/AGENTS.md, graphical-build-guide/BUILD_GUIDE_TEMPLATE.md, graphical-build-guide/README.md, graphical-build-guide/REVN_BUILD_GUIDE_24IN.md, graphical-build-guide/TODO-old.md, graphical-build-guide/TODO.md, graphical-build-guide/build_guide_12_security_hw.svg, graphical-build-guide/flight-phases/TODO.md, graphical-build-guide/flight-phases/WBS.md, tools/TOOL_REFERENCE.md, tools/add_landing_gear_bosses.py, tools/build_landing_gear_views.py, tools/landing_gear_bay_pad_fit.py, tools/open_mating_faces.py, tools/precommit_index.py, tools/wing_internal_clearance.py, tools/wing_root_deconflict.py, tools/wing_spar_carrythrough.py - `sensors-vision` (13): airframe/openscad/fuselage/bow_sensor_faceplate.scad, airframe/openscad/fuselage/bow_sensor_pod.scad, airframe/stls/fuselage/bow_sensor_faceplate.stl, avionics/kicad/Observer/Observer.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Observer.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_Camera_9P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_Laser_2P.kicad_mod, avionics/kicad/Observer/Vera.pretty/DS_ToF_4P.kicad_mod, avionics/kicad/Observer/kicads/Jayne.kicad_sch.pre-g351x, avionics/kicad/add_sensors_sbus.py, docs/OBSERVER_LASER_ANALYSIS.md, graphical-build-guide/build_guide_25_obstacle_sensors.svg - `specification` (131): REFERENCES.md, airframe/HULL_FRAME_REFERENCE.md, current-specification/AGENTS.md, current-specification/LICENSE, current-specification/LICENSE_AND_ATTRIBUTION.md, current-specification/README.md, current-specification/SPEC_TEMPLATE.md, current-specification/TODO.md, current-specification/bom_revS.csv, current-specification/bom_revS.json, current-specification/serenity-rev-s.jsx, docs/references/108090023_STS3215-C001_Datasheet.pdf, docs/references/Bus_servo_control_circuit.pdf, docs/references/CERN_OHL_rationale.pdf, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model.html, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/1.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/2.jpg, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37110-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37111-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37112-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37113-large_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37114-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/37115-cart_default.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/76a8e5b0fe9140cf057b953efbc49a1f.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/EDF50mm-02.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/analytics.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/css_002.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x3-xfly-model-30mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades-3s4.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x4-xfly-model-40mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_003.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_004.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_005.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_006.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x5-xfly-model-50mm-12-blades_007.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-3s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-4s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x6-xfly-model-64mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x7-xfly-model-70mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades-6s-.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/edf-ducted-fan-xfly-galaxy-x8-xfly-model-80mm-12-blades_002.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/ga.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/mollie.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_114_a4444adaf1056832dd63b28b928b74e6.js, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_03a718a060cf48c0e5393bbea5cb1aa7_all.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/v_138_c1bb31e2f03fadfdc659940cc14955dc_print.css, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-64mm-edf-glider-nacelle-for-swift-2100.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-edf-glider-nacelle-for-swift-2100-827-50mm.webp, docs/references/EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades + 6S Motor 3200KV - Xfly-Model_files/xfly-model-logo-16966716258.jpg, docs/references/POCKETBEAGLE2 V10_241220.DSN, docs/references/ST3215 memory register map-EN.xls, docs/references/ST3215-2D.zip, docs/references/ST3215-3D.zip, docs/references/Screenshot 2026-08-18 at 09-50-31 EDF Ducted Fan XFly Galaxy X5 XFLY-Model 50mm 12 blades 6S Motor 3200KV - Xfly-Model.png, docs/references/Servo_Driver_with_ESP32_3D.zip, docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf, docs/references/nick-henning/Re: Contact got a new submission - Nick Henning - 2026-07-06 1421.txt, docs/references/nick-henning/nick-henning-close-back-combine.jpg, docs/references/nick-henning/nick-henning-close-bridge-combine.jpg, docs/references/nick-henning/nick-henning-close-gear-combine.jpg, docs/references/nick-henning/nick-henning-final-backside-combine.jpg, docs/references/nick-henning/nick-henning-final-front-combine.jpg, docs/references/nick-henning/nick-henning-final-top-combine.jpg, docs/references/nick-henning/nick-henning-uvdisplay-engine.jpg, docs/references/nick-henning/nick-henning-uvdisplay-gear.jpg, docs/references/nick-henning/nick-henning-uvdisplay-wing.jpg, docs/references/nick-henning/port-bow-full-henning.jpg, docs/references/nick-henning/port-bow-upper-bridge-with-wireframe-henning.jpg, docs/references/nick-henning/port-bow-view-with-wireframe-henning.jpg, docs/references/nick-henning/port-quarter-with-wireframe-henning.jpg, docs/references/nick-henning/top-view-with-wireframe-henning.jpg, docs/references/open-source-hardware-checklist.pdf, docs/references/pocketbeagle2 revA_241205.brd, docs/references/scservo.zip.zip, docs/references/thingverse-serenity/LICENSE.txt, docs/references/thingverse-serenity/README.txt, docs/references/thingverse-serenity/files/s_cargo_door.stl, docs/references/thingverse-serenity/files/s_cargo_door_strutts.stl, docs/references/thingverse-serenity/files/s_cargo_sect.stl, docs/references/thingverse-serenity/files/s_eng_left.stl, docs/references/thingverse-serenity/files/s_eng_pistons.stl, docs/references/thingverse-serenity/files/s_eng_piv_outer.stl, docs/references/thingverse-serenity/files/s_eng_piv_pins.stl, docs/references/thingverse-serenity/files/s_eng_right.stl, docs/references/thingverse-serenity/files/s_feet_x_4.stl, docs/references/thingverse-serenity/files/s_head.stl, docs/references/thingverse-serenity/files/s_legs.stl, docs/references/thingverse-serenity/files/s_middle.stl, docs/references/thingverse-serenity/files/s_pivot_arm_a.stl, docs/references/thingverse-serenity/files/s_rear.stl, docs/references/thingverse-serenity/files/s_wings_both.stl, docs/references/thingverse-serenity/images/front-starboard.png, docs/references/thingverse-serenity/images/s_01.jpg, docs/references/thingverse-serenity/images/s_02.jpg, docs/references/thingverse-serenity/images/s_03.jpg, docs/references/thingverse-serenity/images/s_04.jpg, docs/references/thingverse-serenity/images/s_05.jpg, docs/references/thingverse-serenity/images/s_06.jpg, docs/references/thingverse-serenity/images/s_07.jpg, docs/references/thingverse-serenity/images/s_08.jpg, docs/references/thingverse-serenity/images/s_09.jpg, docs/references/thingverse-serenity/images/s_10.jpg, docs/references/thingverse-serenity/images/s_11.jpg, docs/references/thingverse-serenity/images/s_cargo_door.png, docs/references/thingverse-serenity/images/s_cargo_door_strutts.png, docs/references/thingverse-serenity/images/s_cargo_sect.png, docs/references/thingverse-serenity/images/s_eng_left.png, docs/references/thingverse-serenity/images/s_eng_pistons.png, docs/references/thingverse-serenity/images/s_eng_piv_outer.png, docs/references/thingverse-serenity/images/s_eng_piv_pins.png, docs/references/thingverse-serenity/images/s_eng_right.png, docs/references/thingverse-serenity/images/s_feet_x_4.png, docs/references/thingverse-serenity/images/s_head.png, docs/references/thingverse-serenity/images/s_legs.png, docs/references/thingverse-serenity/images/s_middle.png, docs/references/thingverse-serenity/images/s_pivot_arm_a.png, docs/references/thingverse-serenity/images/s_rear.png, docs/references/thingverse-serenity/images/s_wings_both.png, docs/references/vimdrones_can_periph_pico_v1.0.stl, docs/references/vimdrones_esc_s50_v1.0.step, docs/references/vimdrones_esc_s50_v1.0.stl, docs/references/vimdrones_esc_s50_wiring.png, tools/TOOL_REFERENCE.md -- `structural` (267): airframe/AGENTS.md, airframe/FreeCAD-scripts/Makefile, airframe/FreeCAD-scripts/faraday-enclosure.py, airframe/FreeCAD-scripts/freecad-stl2part.py, airframe/FreeCAD-scripts/make_flat_pattern.py, airframe/FreeCAD-scripts/serenity_assembly.py, airframe/FreeCAD-scripts/serenity_placeholders_assembly.py, airframe/HULL_FRAME_REFERENCE.md, airframe/LICENSE, airframe/README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/TODO.md, airframe/VERIFY_PLACEMENT_CHECKLIST.md, airframe/WBS.md, airframe/blender-scripts/add_structural_features.py, airframe/blender-scripts/blender_edf_bore_and_petals.py, airframe/blender-scripts/blender_hollow_shells.py, airframe/blender-scripts/blender_intake_cut.py, airframe/blender-scripts/blender_middle_intake_cut.py, airframe/blender-scripts/blender_nacelle_revo.py, airframe/blender-scripts/blender_nozzle_gen.py, airframe/blender-scripts/blender_shells_2mm_solidify.py, airframe/blender-scripts/blender_shells_v3.py, airframe/blender-scripts/blender_stator_gen.py, airframe/blender-scripts/check_nacelle_alignment.py, airframe/blender-scripts/engrave_plaques.py, airframe/blender-scripts/engrave_shuttles.py, airframe/blender-scripts/files-hollowed-24in/cargo_sect_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/head_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/middle_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_flight_engineer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_inara.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_river.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_shepherd.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_simon.stl, airframe/blender-scripts/files-hollowed-24in/rear_shell24_2mm_repaired.stl, airframe/blender-scripts/fill_thin_details.py, airframe/blender-scripts/finalize_cargo_middle.py, airframe/blender-scripts/finalize_head_rear.py, airframe/blender-scripts/generate_overview_svgs.py, airframe/blender-scripts/hollow_manifold.py, airframe/blender-scripts/inspect_shell_center.py, airframe/blender-scripts/make_bay_text.py, airframe/blender-scripts/make_shuttle_text.py, airframe/blender-scripts/merge_cargo_interior.py, airframe/blender-scripts/merge_head_interior.py, airframe/blender-scripts/morph_open_voxel.py, airframe/blender-scripts/regen_rear_interior.py, airframe/blender-scripts/repair_shells_for_scad.py, airframe/blender-scripts/serenity_render_views.py, airframe/blender-scripts/verify_shells.py, airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv, airframe/diagrams/ring_frames/ring_cargo_Y30_plate_PROVISIONAL.dxf, airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv, airframe/diagrams/ring_frames/ring_rear_Y290_plate.dxf, airframe/freecad/assembly/SerenityAssembly.FCStd.bak2, airframe/freecad/assembly/leg_2_scaled-oriented.stl, airframe/fuselage-covers/TODO.md, airframe/fuselage-covers/WBS.md, airframe/fuselage-joints/TODO.md, airframe/fuselage-joints/WBS.md, airframe/fuselage-mid/TODO.md, airframe/fuselage-mid/WBS.md, airframe/gcode/davinci-jr-proto/.gitignore, airframe/gcode/davinci-jr-proto/davinci_jr_pla.ini, airframe/gcode/davinci-jr-proto/slice_all_batches.sh, airframe/gcode/davinci-jr-proto/xyz_wrap.py, airframe/landing-gear/HANDOFF.md, airframe/landing-gear/TODO.md, airframe/landing-gear/WBS.md, airframe/openscad/fuselage/access_panels_24in.scad, airframe/openscad/fuselage/battery_tray.scad, airframe/openscad/fuselage/belly_panel.scad, airframe/openscad/fuselage/bow_sensor_faceplate.scad, airframe/openscad/fuselage/bow_sensor_pod.scad, airframe/openscad/fuselage/canonical_leg_r6_1_5in.scad, airframe/openscad/fuselage/canonical_leg_r6_3_0in.scad, airframe/openscad/fuselage/cargo/_export_cargo_port_root_chunk.scad, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/cargo/cargo_spar_drive.scad, airframe/openscad/fuselage/cargo/cargo_vera_faraday.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/landing_leg_assy.scad, airframe/openscad/fuselage/middle_canonical_shell24.scad, airframe/openscad/fuselage/rcrs49_wire_post.scad, airframe/openscad/fuselage/rear_shell24.scad, airframe/openscad/fuselage/wire_brace_leg.scad, airframe/openscad/fuselage/wire_loop_fuse.scad, airframe/openscad/nacelles/_export_inboard_cut.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/edf_aft_spider_sleeve.scad, airframe/openscad/nacelles/edf_stator_sleeve.scad, airframe/openscad/nacelles/gear_option_compare.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad, airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad, airframe/openscad/nacelles/nacelle_servo_bracket.scad, airframe/openscad/port_tilt_spar_assembly.scad, airframe/openscad/wings/wings_s1223_revo.scad, airframe/openscad/wings/wings_s1223_revo.scad.backup-2026-07-18, airframe/placeholders/avionics/Cape_A2_PCB_55x35mm.stl, airframe/placeholders/avionics/Cape_B2_PCB_55x35mm.stl, airframe/placeholders/avionics/FlightEngineer_PDB_90x65mm.stl, airframe/placeholders/avionics/PocketBeagle2_Industrial_56x35mm.stl, airframe/placeholders/avionics/XCVR_49MHZ2_PCB_55x35mm.stl, airframe/placeholders/avionics/microSD_64GB.stl, airframe/placeholders/bearings/B6804_20x32x7mm_GCS.stl, airframe/placeholders/bearings/MF104ZZ_4x10x4mm.stl, airframe/placeholders/bearings/MR63ZZ_3x6x2p5mm.stl, airframe/placeholders/cargo/DRV8833_Hbridge_breakout.stl, airframe/placeholders/cargo/Dyneema_SK75_0p5mm_coil.stl, airframe/placeholders/cargo/HX711_loadcell_ADC_breakout.stl, airframe/placeholders/cargo/N20_motor_300RPM_6V.stl, airframe/placeholders/faraday/Far_EMI_vent_40x40x6mm.stl, airframe/placeholders/faraday/Far_FT_panel_55x35mm.stl, airframe/placeholders/faraday/Far_bond_strap_100mm.stl, airframe/placeholders/faraday/Far_cage_AV_70x50x82mm.stl, airframe/placeholders/faraday/Far_fan_40mm_5V.stl, airframe/placeholders/faraday/Far_ferrite_4mm_ID.stl, airframe/placeholders/faraday/Far_gasket_AV_250x6x1mm.stl, airframe/placeholders/faraday/Mal_far_fan_40mm_5V.stl, airframe/placeholders/faraday/Mal_far_gasket_470x8x1p5mm.stl, airframe/placeholders/foam/Foam_fill_cargo_190x200x159mm.stl, airframe/placeholders/foam/Foam_fill_head_125x231x136mm.stl, airframe/placeholders/foam/Foam_fill_middle_horseshoe_173x69x161mm.stl, airframe/placeholders/foam/Foam_fill_rear_136x177x154mm.stl, airframe/placeholders/foam/Void_avionics_bay_62x42x75mm.stl, airframe/placeholders/foam/Void_cargo_bay_120x150x80mm.stl, airframe/placeholders/foam/Void_far_cage_76x56x88mm.stl, airframe/placeholders/foam/Void_far_fan_spur_44x44x50mm.stl, airframe/placeholders/foam/Void_nacelle_pylon_20x80x20mm.stl, airframe/placeholders/foam/Void_power_bus_25x500x25mm.stl, airframe/placeholders/foam/Void_vent_exhaust_20x300x20mm.stl, airframe/placeholders/foam/Void_vent_intake_20x250x20mm.stl, airframe/placeholders/foam/Void_wiring_trunk_30x700x20mm.stl, airframe/placeholders/gcs/AS5600_encoder_breakout_15x15mm.stl, airframe/placeholders/gcs/Antenna_2p4GHz_zigbee_rubber_duck.stl, airframe/placeholders/gcs/Antenna_49MHz_whip_940mm.stl, airframe/placeholders/gcs/Antenna_5GHz_panel_14dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_Yagi_9dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_omni_5dBi.stl, airframe/placeholders/gcs/Antenna_GNSS_patch_ANN_MB00.stl, airframe/placeholders/gcs/B6804_20x32x7mm_gimbal_pan.stl, airframe/placeholders/gcs/GPS_module_M10Q_SparkFun.stl, airframe/placeholders/gcs/N42_disc_magnet_6x2mm.stl, airframe/placeholders/gcs/Pololu_D24V22F6_6V2A_BEC.stl, airframe/placeholders/gcs/Pololu_D24V50F5_5V5A_BEC.stl, airframe/placeholders/gcs/RF_splitter_915MHz_2way_ZFSC.stl, airframe/placeholders/gcs/Skipper_enclosure_IP65_145x90x65mm.stl, airframe/placeholders/gcs/Skipper_tripod_antenna_mast.stl, airframe/placeholders/gcs/TCA9548A_I2C_mux_breakout.stl, airframe/placeholders/gears/Bevel_M1_14T_pair.stl, airframe/placeholders/gears/Bevel_housing_CF_PETG.stl, airframe/placeholders/gears/Pinion_M1_12T_R6mm.stl, airframe/placeholders/gears/Sector_gear_M1_R22mm.stl, airframe/placeholders/generate_placeholders.py, airframe/placeholders/hardware/Batt_strap_silicone_16mm_CAM.stl, airframe/placeholders/hardware/Insert_M25_brass_L5.stl, airframe/placeholders/hardware/Insert_M3_brass_L5.stl, airframe/placeholders/hardware/Pin_SS_3x5mm_hinge.stl, airframe/placeholders/hardware/Screw_M3x8mm_button_ISO7380.stl, airframe/placeholders/lighting/WS2812C_2020_SMD.stl, airframe/placeholders/power/Fuse_MAXI_150A.stl, airframe/placeholders/power/Fuse_mini_40A.stl, airframe/placeholders/power/LiPo_4S_10000mAh_175x64x38mm_GCS.stl, airframe/placeholders/power/LiPo_6S_2800mAh_115x35x35mm.stl, airframe/placeholders/power/LiPo_6S_4000mAh_138x44x36mm.stl, airframe/placeholders/power/Shunt_CSS2H_2512K_1mohm.stl, airframe/placeholders/propulsion/EDF_120mm_6S_deferred.stl, airframe/placeholders/propulsion/EDF_50mm_6S.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/placeholders/servos/DS3218MG_25kgcm.stl, airframe/placeholders/servos/SG90_micro.stl, airframe/placeholders/structural/CF_bar_6x3mm_620mm_keel.stl, airframe/placeholders/structural/CF_plate_2mm_200x300mm.stl, airframe/placeholders/structural/CF_rod_3mm_300mm_stock.stl, airframe/placeholders/structural/CF_rod_4mm_300mm_stock.stl, airframe/placeholders/structural/CF_tube_12mm_OD_1p5w_350mm_spar.stl, airframe/placeholders/structural/PTFE_sleeve_4mm_OD_3mm_ID_52mm.stl, airframe/placeholders/wiring/PTFE_conduit_4mm_OD_3mm_ID_700mm.stl, airframe/placeholders/wiring/Post_49MHz_base_load_coil.stl, airframe/placeholders/wiring/Wire_10AWG_silicone_400mm.stl, airframe/placeholders/wiring/Wire_28AWG_STP_bundle_500mm.stl, airframe/placeholders/wiring/Wire_49MHz_antenna_0p3mm_470mm.stl, airframe/placeholders/wiring/Wire_4AWG_silicone_200mm_pair.stl, airframe/stls/fuselage/battery_tray.stl, airframe/stls/fuselage/belly_panel.stl, airframe/stls/fuselage/bow_sensor_faceplate.stl, airframe/stls/fuselage/cargo/cargo_cradle_autolatch.stl, airframe/stls/fuselage/cargo/cargo_door_port.stl, airframe/stls/fuselage/cargo/cargo_door_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_door_stbd.stl, airframe/stls/fuselage/cargo/cargo_drv8833_tray.stl, airframe/stls/fuselage/cargo/cargo_fpv_bezel.stl, airframe/stls/fuselage/cargo/cargo_gps_retention_ring.stl, airframe/stls/fuselage/cargo/cargo_hinge_retention.stl, airframe/stls/fuselage/cargo/cargo_release_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_bossed.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_repaired.stl, airframe/stls/fuselage/cargo/cargo_vera_faraday.stl, airframe/stls/fuselage/cargo/cargo_winch_motor_mount.stl, airframe/stls/fuselage/cargo/cargo_winch_spool.stl, airframe/stls/fuselage/cargo/generate_cargo_doors.py, airframe/stls/fuselage/cargo/generate_cargo_hinge_retention.py, airframe/stls/fuselage/cargo/generate_cargo_mounts.py, airframe/stls/fuselage/cargo/starboard-view-of-cargo_sect_shell24_2mm_repaired.svg, airframe/stls/fuselage/cargo_middle_splice_collar.stl, airframe/stls/fuselage/dorsal_antenna_fin.stl, airframe/stls/fuselage/generate_conforming_collars.py, airframe/stls/fuselage/head_cargo_splice_collar.stl, airframe/stls/fuselage/head_shell24.stl, airframe/stls/fuselage/head_shell24_2mm_repaired.stl, airframe/stls/fuselage/inara_access_cover.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_bay.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_nominal.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_foot.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_nominal.stl, airframe/stls/fuselage/middle_canonical_edf_intake.stl, airframe/stls/fuselage/middle_canonical_shell24.stl, airframe/stls/fuselage/middle_rear_splice_collar.stl, airframe/stls/fuselage/middle_shell24_2mm_repaired.stl, airframe/stls/fuselage/rear_shell24_2mm_repaired.stl, airframe/stls/fuselage/river_access_cover.stl, airframe/stls/nacelles/edf_aft_spider_sleeve.stl, airframe/stls/nacelles/edf_stator_sleeve.stl, airframe/stls/nacelles/eng_left_shell24_50mm_repaired.stl, airframe/stls/nacelles/eng_right_shell24_50mm_repaired.stl, airframe/stls/nacelles/nacelle_port_revs.stl, airframe/stls/nacelles/nacelle_servo_bracket.stl, airframe/stls/nacelles/nacelle_stbd_revs.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl, airframe/stls/wings/wing_port_s1223_revo.stl, airframe/stls/wings/wing_stbd_s1223_revo.stl, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md +- `structural` (266): airframe/AGENTS.md, airframe/FreeCAD-scripts/Makefile, airframe/FreeCAD-scripts/faraday-enclosure.py, airframe/FreeCAD-scripts/freecad-stl2part.py, airframe/FreeCAD-scripts/make_flat_pattern.py, airframe/FreeCAD-scripts/serenity_assembly.py, airframe/FreeCAD-scripts/serenity_placeholders_assembly.py, airframe/HULL_FRAME_REFERENCE.md, airframe/LICENSE, airframe/README.md, airframe/SPEC_VERIFICATION_0.6.1.md, airframe/TODO.md, airframe/VERIFY_PLACEMENT_CHECKLIST.md, airframe/WBS.md, airframe/blender-scripts/add_structural_features.py, airframe/blender-scripts/blender_edf_bore_and_petals.py, airframe/blender-scripts/blender_hollow_shells.py, airframe/blender-scripts/blender_intake_cut.py, airframe/blender-scripts/blender_middle_intake_cut.py, airframe/blender-scripts/blender_nacelle_revo.py, airframe/blender-scripts/blender_nozzle_gen.py, airframe/blender-scripts/blender_shells_2mm_solidify.py, airframe/blender-scripts/blender_shells_v3.py, airframe/blender-scripts/blender_stator_gen.py, airframe/blender-scripts/check_nacelle_alignment.py, airframe/blender-scripts/engrave_plaques.py, airframe/blender-scripts/engrave_shuttles.py, airframe/blender-scripts/files-hollowed-24in/cargo_sect_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/head_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/middle_shell24_2mm_repaired.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/cargo_sect_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/head_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/middle_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_inner_opened.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__inner.stl, airframe/blender-scripts/files-hollowed-24in/operands/rear_shell24_2mm_repaired__outer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_flight_engineer.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_inara.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_river.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_shepherd.stl, airframe/blender-scripts/files-hollowed-24in/operands/text_simon.stl, airframe/blender-scripts/files-hollowed-24in/rear_shell24_2mm_repaired.stl, airframe/blender-scripts/fill_thin_details.py, airframe/blender-scripts/finalize_cargo_middle.py, airframe/blender-scripts/finalize_head_rear.py, airframe/blender-scripts/generate_overview_svgs.py, airframe/blender-scripts/hollow_manifold.py, airframe/blender-scripts/inspect_shell_center.py, airframe/blender-scripts/make_bay_text.py, airframe/blender-scripts/make_shuttle_text.py, airframe/blender-scripts/merge_cargo_interior.py, airframe/blender-scripts/merge_head_interior.py, airframe/blender-scripts/morph_open_voxel.py, airframe/blender-scripts/regen_rear_interior.py, airframe/blender-scripts/repair_shells_for_scad.py, airframe/blender-scripts/serenity_render_views.py, airframe/blender-scripts/verify_shells.py, airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv, airframe/diagrams/ring_frames/ring_cargo_Y30_plate_PROVISIONAL.dxf, airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv, airframe/diagrams/ring_frames/ring_rear_Y290_plate.dxf, airframe/freecad/assembly/SerenityAssembly.FCStd.bak2, airframe/freecad/assembly/leg_2_scaled-oriented.stl, airframe/fuselage-covers/TODO.md, airframe/fuselage-covers/WBS.md, airframe/fuselage-joints/TODO.md, airframe/fuselage-joints/WBS.md, airframe/fuselage-mid/TODO.md, airframe/fuselage-mid/WBS.md, airframe/gcode/davinci-jr-proto/.gitignore, airframe/gcode/davinci-jr-proto/davinci_jr_pla.ini, airframe/gcode/davinci-jr-proto/slice_all_batches.sh, airframe/gcode/davinci-jr-proto/xyz_wrap.py, airframe/landing-gear/HANDOFF.md, airframe/landing-gear/TODO.md, airframe/landing-gear/WBS.md, airframe/openscad/fuselage/access_panels_24in.scad, airframe/openscad/fuselage/battery_tray.scad, airframe/openscad/fuselage/belly_panel.scad, airframe/openscad/fuselage/bow_sensor_faceplate.scad, airframe/openscad/fuselage/bow_sensor_pod.scad, airframe/openscad/fuselage/canonical_leg_r6_1_5in.scad, airframe/openscad/fuselage/canonical_leg_r6_3_0in.scad, airframe/openscad/fuselage/cargo/_export_cargo_port_root_chunk.scad, airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad, airframe/openscad/fuselage/cargo/cargo_spar_drive.scad, airframe/openscad/fuselage/cargo/cargo_vera_faraday.scad, airframe/openscad/fuselage/head_shell24.scad, airframe/openscad/fuselage/landing_leg_assy.scad, airframe/openscad/fuselage/middle_canonical_shell24.scad, airframe/openscad/fuselage/rcrs49_wire_post.scad, airframe/openscad/fuselage/rear_shell24.scad, airframe/openscad/fuselage/wire_brace_leg.scad, airframe/openscad/fuselage/wire_loop_fuse.scad, airframe/openscad/nacelles/_export_inboard_cut.scad, airframe/openscad/nacelles/_export_pivot_slab.scad, airframe/openscad/nacelles/edf_aft_spider_sleeve.scad, airframe/openscad/nacelles/edf_stator_sleeve.scad, airframe/openscad/nacelles/gear_option_compare.scad, airframe/openscad/nacelles/nacelle_nozzle_iris.scad, airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad, airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad, airframe/openscad/nacelles/nacelle_servo_bracket.scad, airframe/openscad/port_tilt_spar_assembly.scad, airframe/openscad/wings/wings_s1223_revo.scad, airframe/openscad/wings/wings_s1223_revo.scad.backup-2026-07-18, airframe/placeholders/avionics/Cape_A2_PCB_55x35mm.stl, airframe/placeholders/avionics/Cape_B2_PCB_55x35mm.stl, airframe/placeholders/avionics/FlightEngineer_PDB_90x65mm.stl, airframe/placeholders/avionics/PocketBeagle2_Industrial_56x35mm.stl, airframe/placeholders/avionics/XCVR_49MHZ2_PCB_55x35mm.stl, airframe/placeholders/avionics/microSD_64GB.stl, airframe/placeholders/bearings/B6804_20x32x7mm_GCS.stl, airframe/placeholders/bearings/MF104ZZ_4x10x4mm.stl, airframe/placeholders/bearings/MR63ZZ_3x6x2p5mm.stl, airframe/placeholders/cargo/DRV8833_Hbridge_breakout.stl, airframe/placeholders/cargo/Dyneema_SK75_0p5mm_coil.stl, airframe/placeholders/cargo/HX711_loadcell_ADC_breakout.stl, airframe/placeholders/cargo/N20_motor_300RPM_6V.stl, airframe/placeholders/faraday/Far_EMI_vent_40x40x6mm.stl, airframe/placeholders/faraday/Far_FT_panel_55x35mm.stl, airframe/placeholders/faraday/Far_bond_strap_100mm.stl, airframe/placeholders/faraday/Far_cage_AV_70x50x82mm.stl, airframe/placeholders/faraday/Far_fan_40mm_5V.stl, airframe/placeholders/faraday/Far_ferrite_4mm_ID.stl, airframe/placeholders/faraday/Far_gasket_AV_250x6x1mm.stl, airframe/placeholders/faraday/Mal_far_fan_40mm_5V.stl, airframe/placeholders/faraday/Mal_far_gasket_470x8x1p5mm.stl, airframe/placeholders/foam/Foam_fill_cargo_190x200x159mm.stl, airframe/placeholders/foam/Foam_fill_head_125x231x136mm.stl, airframe/placeholders/foam/Foam_fill_middle_horseshoe_173x69x161mm.stl, airframe/placeholders/foam/Foam_fill_rear_136x177x154mm.stl, airframe/placeholders/foam/Void_avionics_bay_62x42x75mm.stl, airframe/placeholders/foam/Void_cargo_bay_120x150x80mm.stl, airframe/placeholders/foam/Void_far_cage_76x56x88mm.stl, airframe/placeholders/foam/Void_far_fan_spur_44x44x50mm.stl, airframe/placeholders/foam/Void_nacelle_pylon_20x80x20mm.stl, airframe/placeholders/foam/Void_power_bus_25x500x25mm.stl, airframe/placeholders/foam/Void_vent_exhaust_20x300x20mm.stl, airframe/placeholders/foam/Void_vent_intake_20x250x20mm.stl, airframe/placeholders/foam/Void_wiring_trunk_30x700x20mm.stl, airframe/placeholders/gcs/AS5600_encoder_breakout_15x15mm.stl, airframe/placeholders/gcs/Antenna_2p4GHz_zigbee_rubber_duck.stl, airframe/placeholders/gcs/Antenna_49MHz_whip_940mm.stl, airframe/placeholders/gcs/Antenna_5GHz_panel_14dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_Yagi_9dBi.stl, airframe/placeholders/gcs/Antenna_915MHz_omni_5dBi.stl, airframe/placeholders/gcs/Antenna_GNSS_patch_ANN_MB00.stl, airframe/placeholders/gcs/B6804_20x32x7mm_gimbal_pan.stl, airframe/placeholders/gcs/GPS_module_M10Q_SparkFun.stl, airframe/placeholders/gcs/N42_disc_magnet_6x2mm.stl, airframe/placeholders/gcs/Pololu_D24V22F6_6V2A_BEC.stl, airframe/placeholders/gcs/Pololu_D24V50F5_5V5A_BEC.stl, airframe/placeholders/gcs/RF_splitter_915MHz_2way_ZFSC.stl, airframe/placeholders/gcs/Skipper_enclosure_IP65_145x90x65mm.stl, airframe/placeholders/gcs/Skipper_tripod_antenna_mast.stl, airframe/placeholders/gcs/TCA9548A_I2C_mux_breakout.stl, airframe/placeholders/gears/Bevel_M1_14T_pair.stl, airframe/placeholders/gears/Bevel_housing_CF_PETG.stl, airframe/placeholders/gears/Pinion_M1_12T_R6mm.stl, airframe/placeholders/gears/Sector_gear_M1_R22mm.stl, airframe/placeholders/generate_placeholders.py, airframe/placeholders/hardware/Batt_strap_silicone_16mm_CAM.stl, airframe/placeholders/hardware/Insert_M25_brass_L5.stl, airframe/placeholders/hardware/Insert_M3_brass_L5.stl, airframe/placeholders/hardware/Pin_SS_3x5mm_hinge.stl, airframe/placeholders/hardware/Screw_M3x8mm_button_ISO7380.stl, airframe/placeholders/lighting/WS2812C_2020_SMD.stl, airframe/placeholders/power/Fuse_MAXI_150A.stl, airframe/placeholders/power/Fuse_mini_40A.stl, airframe/placeholders/power/LiPo_4S_10000mAh_175x64x38mm_GCS.stl, airframe/placeholders/power/LiPo_6S_2800mAh_115x35x35mm.stl, airframe/placeholders/power/LiPo_6S_4000mAh_138x44x36mm.stl, airframe/placeholders/power/Shunt_CSS2H_2512K_1mohm.stl, airframe/placeholders/propulsion/EDF_120mm_6S_deferred.stl, airframe/placeholders/propulsion/EDF_50mm_6S.stl, airframe/placeholders/propulsion/ESC_40A_6S_BLHeli32.stl, airframe/placeholders/propulsion/ESC_80A_6S_BLHeli32_deferred.stl, airframe/placeholders/servos/DS3218MG_25kgcm.stl, airframe/placeholders/servos/SG90_micro.stl, airframe/placeholders/structural/CF_bar_6x3mm_620mm_keel.stl, airframe/placeholders/structural/CF_plate_2mm_200x300mm.stl, airframe/placeholders/structural/CF_rod_3mm_300mm_stock.stl, airframe/placeholders/structural/CF_rod_4mm_300mm_stock.stl, airframe/placeholders/structural/CF_tube_12mm_OD_1p5w_350mm_spar.stl, airframe/placeholders/structural/PTFE_sleeve_4mm_OD_3mm_ID_52mm.stl, airframe/placeholders/wiring/PTFE_conduit_4mm_OD_3mm_ID_700mm.stl, airframe/placeholders/wiring/Post_49MHz_base_load_coil.stl, airframe/placeholders/wiring/Wire_10AWG_silicone_400mm.stl, airframe/placeholders/wiring/Wire_28AWG_STP_bundle_500mm.stl, airframe/placeholders/wiring/Wire_49MHz_antenna_0p3mm_470mm.stl, airframe/placeholders/wiring/Wire_4AWG_silicone_200mm_pair.stl, airframe/stls/fuselage/battery_tray.stl, airframe/stls/fuselage/belly_panel.stl, airframe/stls/fuselage/bow_sensor_faceplate.stl, airframe/stls/fuselage/cargo/cargo_cradle_autolatch.stl, airframe/stls/fuselage/cargo/cargo_door_port.stl, airframe/stls/fuselage/cargo/cargo_door_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_door_stbd.stl, airframe/stls/fuselage/cargo/cargo_drv8833_tray.stl, airframe/stls/fuselage/cargo/cargo_fpv_bezel.stl, airframe/stls/fuselage/cargo/cargo_gps_retention_ring.stl, airframe/stls/fuselage/cargo/cargo_hinge_retention.stl, airframe/stls/fuselage/cargo/cargo_release_servo_bracket.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_bossed.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl, airframe/stls/fuselage/cargo/cargo_sect_shell24_repaired.stl, airframe/stls/fuselage/cargo/cargo_vera_faraday.stl, airframe/stls/fuselage/cargo/cargo_winch_motor_mount.stl, airframe/stls/fuselage/cargo/cargo_winch_spool.stl, airframe/stls/fuselage/cargo/generate_cargo_doors.py, airframe/stls/fuselage/cargo/generate_cargo_hinge_retention.py, airframe/stls/fuselage/cargo/generate_cargo_mounts.py, airframe/stls/fuselage/cargo/starboard-view-of-cargo_sect_shell24_2mm_repaired.svg, airframe/stls/fuselage/cargo_middle_splice_collar.stl, airframe/stls/fuselage/dorsal_antenna_fin.stl, airframe/stls/fuselage/generate_conforming_collars.py, airframe/stls/fuselage/head_cargo_splice_collar.stl, airframe/stls/fuselage/head_shell24.stl, airframe/stls/fuselage/head_shell24_2mm_repaired.stl, airframe/stls/fuselage/inara_access_cover.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_1_5in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_legs.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_hull_stance.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_assembled.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_3_0in_leg_frame.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_bay.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_ductile_wire_nominal.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_foot.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_deformed.stl, airframe/stls/fuselage/landing-gear/lg_r6_common_spring_wire_nominal.stl, airframe/stls/fuselage/middle_canonical_edf_intake.stl, airframe/stls/fuselage/middle_canonical_shell24.stl, airframe/stls/fuselage/middle_rear_splice_collar.stl, airframe/stls/fuselage/middle_shell24_2mm_repaired.stl, airframe/stls/fuselage/rear_shell24_2mm_repaired.stl, airframe/stls/fuselage/river_access_cover.stl, airframe/stls/nacelles/edf_aft_spider_sleeve.stl, airframe/stls/nacelles/edf_stator_sleeve.stl, airframe/stls/nacelles/eng_left_shell24_50mm_repaired.stl, airframe/stls/nacelles/eng_right_shell24_50mm_repaired.stl, airframe/stls/nacelles/nacelle_port_revs.stl, airframe/stls/nacelles/nacelle_servo_bracket.stl, airframe/stls/nacelles/nacelle_stbd_revs.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl, airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl, airframe/stls/wings/wing_port_s1223_revo.stl, airframe/stls/wings/wing_stbd_s1223_revo.stl, airframe/wings-nacelles/TODO.md, airframe/wings-nacelles/WBS.md --- @@ -85,7 +85,7 @@ WBS.md — Serenity UAV — Airframe (Hull-Frame Standard + Placeholders) Work B ## airframe/blender-scripts/ ```text -add_structural_features.py — Python script [cad-mesh, security, structural] +add_structural_features.py — Python script [cad-mesh, structural] blender_edf_bore_and_petals.py — blender_edf_bore_and_petals.py — Rev D — run with: [cad-mesh, propulsion, structural] blender_hollow_shells.py — blender_hollow_shells.py — run with: [cad-mesh, structural] blender_intake_cut.py — blender_intake_cut.py — run with: [cad-mesh, structural] @@ -106,7 +106,7 @@ hollow_manifold.py — hollow_manifold.py — manifold3d boolean stage of the 2 inspect_shell_center.py — HULL-FRAME COORDINATE STANDARD - Rev R1 (2026-06-11). See CLAUDE.md. [cad-mesh, structural] make_bay_text.py — make_bay_text.py — origin-centred watertight text slabs for avionics-bay marks. [cad-mesh, structural] make_shuttle_text.py — make_shuttle_text.py — generate INARA / RIVER text cutter slabs for the cargo [cad-mesh, structural] -merge_cargo_interior.py — Python script [cad-mesh, structural] +merge_cargo_interior.py — merge_cargo_interior.py — Rev R1 (2026-06-30) [cad-mesh, structural] merge_head_interior.py — merge_head_interior.py — Rev R1d (2026-07-03) [cad-mesh, structural] morph_open_voxel.py — morph_open_voxel.py — voxel-SDF morphological opening of a shell inner operand. [cad-mesh, structural] regen_rear_interior.py — regen_rear_interior.py — regenerate the REAR fuselage shell (featured, hull frame). [cad-mesh, structural] @@ -434,16 +434,16 @@ battery_tray.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, power, structur belly_panel.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, structural] bow_sensor_faceplate.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, sensors-vision, structural] cargo_middle_splice_collar.stl — STL mesh (binary) [cad-mesh, structural] -dorsal_antenna_fin.stl — STL mesh (ASCII): dorsal_antenna_fin [cad-mesh, structural] +dorsal_antenna_fin.stl — STL mesh (binary) [cad-mesh, structural] generate_conforming_collars.py — Generate the three CONFORMING splice collars (hull frame, Rev R3). [structural] head_cargo_splice_collar.stl — STL mesh (binary) [cad-mesh, structural] head_shell24.stl — STL mesh (binary) [cad-mesh, structural] -head_shell24_2mm_repaired.stl — STL mesh — header: SerenityUAV HULL-FRAME R1 Head_Shell mating-face-open 2026-07-27 [cad-mesh, structural] +head_shell24_2mm_repaired.stl — STL mesh — header: SerenityUAV HULL-FRAME R1 Head_Shell structural-features 2026-06-14 [cad-mesh, structural] inara_access_cover.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, structural] middle_canonical_edf_intake.stl — STL mesh (binary) [cad-mesh, propulsion, structural] middle_canonical_shell24.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, structural] middle_rear_splice_collar.stl — STL mesh (binary) [cad-mesh, structural] -middle_shell24_2mm_repaired.stl — STL mesh — header: SerenityUAV HULL-FRAME R1 Middle_Shell mating-face-open 2026-07-26 [cad-mesh, structural] +middle_shell24_2mm_repaired.stl — STL mesh — header: SerenityUAV HULL-FRAME R1 Middle_Shell structural-features 2026-06-14 [cad-mesh, structural] rear_shell24_2mm_repaired.stl — STL mesh — header: SerenityUAV HULL-FRAME R1 Rear_Shell interior-regen 2026-07-06 [cad-mesh, structural] river_access_cover.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, structural] ``` @@ -496,8 +496,8 @@ lg_r6_common_spring_wire_nominal.stl — STL mesh (ASCII): OpenSCAD_Model [cad-m ## airframe/stls/nacelles/ ```text -edf_aft_spider_sleeve.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] -edf_stator_sleeve.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] +edf_aft_spider_sleeve.stl — STL mesh (binary) [cad-mesh, propulsion, structural] +edf_stator_sleeve.stl — STL mesh (binary) [cad-mesh, propulsion, structural] eng_left_shell24_50mm_repaired.stl — STL mesh (binary) [cad-mesh, propulsion, structural] eng_right_shell24_50mm_repaired.stl — STL mesh (binary) [cad-mesh, propulsion, structural] nacelle_port_revs.stl — STL mesh — header: SerenityUAV HULL-FRAME R1 Nacelle_Port 2026-06-11 [cad-mesh, propulsion, structural] @@ -512,7 +512,6 @@ nacelle_nozzle_flap.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsi nacelle_nozzle_flap_seal.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] nacelle_nozzle_iris-closed.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] nacelle_nozzle_iris-open.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] -nacelle_nozzle_iris.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] nacelle_nozzle_ring.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] nacelle_nozzle_throat.stl — STL mesh (ASCII): OpenSCAD_Model [cad-mesh, propulsion, structural] ``` @@ -568,6 +567,7 @@ isow1044.pdf — PDF document [avionics-hardware] isow1412.pdf — PDF document [avionics-hardware] KSZ9477S-Data-Sheet-DS00002392C.pdf — PDF document [avionics-hardware] L-1038e.A5_phyCORE-AM62x_HW Manual.pdf — PDF document [avionics-hardware] +mechanics-of-advanced-composite-structures.pdf — PDF document [avionics-hardware] mspm0g3507-q1.pdf — PDF document [avionics-hardware] mspm0g3507.pdf — PDF document [avionics-hardware] mspm0g3518-q1.pdf — PDF document [avionics-hardware] @@ -1185,7 +1185,7 @@ WBS.md — Serenity UAV — Avionics Rev S1 Redesign (Commo / XO / Flight Engine ```text AGENTS.md — Current Specification — Agent Instructions [documentation, specification] -bom_revS.csv — Bill of materials, CSV (168 items) [bom, specification] +bom_revS.csv — Bill of materials, CSV (171 items) [bom, specification] bom_revS.json — Bill of materials, JSON (168 items) [bom, specification] LICENSE — SERENITY UAV — SPECIFICATION & BOM LICENSING [licensing, specification] LICENSE_AND_ATTRIBUTION.md — Serenity-Class Tiltrotor UAV — License & Attribution [documentation, licensing, security, specification] @@ -1268,7 +1268,7 @@ OBSERVER_LASER_ANALYSIS.md — Observer Laser Indicator — Single-Source Feasib OBSERVER_MANUFACTURING_READINESS.md — Observer — Manufacturing-Readiness Gap Analysis [documentation, emi-hardening, security] OSHW_CERTIFICATION.md — Serenity UAV — Open Source Hardware Certification Readiness [documentation, security] PHASED_BUILD_GUIDE.md — Serenity-Class Tiltrotor UAV — Phased Build Guide (Rev M — SUPERSEDED) [documentation, emi-hardening, redundancy-failover, security] -POWER_DISTRIBUTION.md — Serenity UAV — Power Distribution & Battery Management [documentation, emi-hardening, power, security] +POWER_DISTRIBUTION.md — Serenity UAV — Power Distribution & Battery Management [documentation, power, security] PROTO_PRINT_DAVINCI_JR.md — Serenity-Class Tiltrotor UAV — Prototype Print Guide [documentation, security] PYLON_INTEGRATION_2026-07-18.md — Tilt Bracket Integration into Wing — Summary (2026-07-18) [documentation] README.md — Serenity UAV — Documentation Index [documentation, emi-hardening, redundancy-failover, security] @@ -1297,6 +1297,15 @@ wing_rev_r1a_sections.png — Rendered image / reference photo [documentation] wing_rev_s1c_sections.png — Rendered image / reference photo [documentation] ``` +## docs/plans/ + +```text +2026-08-24-001-fix-wing-repair-root-joint-plan.md — fix: Wing S1223 repair, root bearing-seat joint, and tenon fallback spar [documentation] +2026-08-25-001-finish-avionics-plan.md — plan: Close out avionics subsystem [documentation, emi-hardening, security] +2026-08-25-002-finish-airframe-components-plan.md — plan: Finish remaining airframe components [documentation] +2026-08-25-003-feat-emi-rf-design-test-plan-plan.md — plan: EMI/RF Design and Test Plan [documentation, emi-hardening, security] +``` + ## docs/references/ ```text @@ -1772,7 +1781,7 @@ wing_cfd_openfoam.py — 2D RANS comparison of S1223 thickening strategies, via wing_internal_clearance.py — Check every internal bore in the wing against its neighbours and the skin. [build-tooling, security] wing_root_deconflict.py — Deconflict everything crowded into the wing-root zone of the cargo bulkhead. [build-tooling, security] wing_section_figure.py — Draw the wing's root and tip sections with every internal bore, to scale. [build-tooling] -wing_spar_carrythrough.py — Does the rotating wing spar have to span the fuselage? First-principles check. [build-tooling] +wing_spar_carrythrough.py — Does the rotating wing spar have to span the fuselage? First-principles check. [build-tooling, security] wing_spar_station_fit.py — Size the wing spar's chordwise station against the S1223 section it lives in. [build-tooling] ``` diff --git a/REFERENCES.md b/REFERENCES.md index d26ffe3d..54d5f06e 100644 --- a/REFERENCES.md +++ b/REFERENCES.md @@ -85,6 +85,7 @@ CERN-OHL-W 2.0 / CC BY-SA 4.0 dual-license split) - [REF-SENSOR-014: LibreServo v2 (stab-rabbit-coding fork) — Open-Source Smart-Servo Control Board](#ref-sensor-014-libreservo-v2-stab-rabbit-coding-fork--open-source-smart-servo-control-board) - [REF-SENSOR-015: OpenServoCore — Open-Source SG90/MG90-Class Smart-Servo Control Board](#ref-sensor-015-openservocore--open-source-sg90mg90-class-smart-servo-control-board) - [REF-SENSOR-016: Infineon OPTIGA™ Trust M — I2C Secure Element (planned, CAN-PERIPH-GW-1 + Flight Engineer only)](#ref-sensor-016-infineon-optiga-trust-m--i2c-secure-element-planned-can-periph-gw-1--flight-engineer-only) + - [REF-SENSOR-019: SMB Bearings F688ZZ — 8x16x5 mm Flanged Miniature Radial Ball Bearing (wing-root tilt-spar bearing)](#ref-sensor-019-smb-bearings-f688zz--8x16x5-mm-flanged-miniature-radial-ball-bearing-wing-root-tilt-spar-bearing) - [Part XIII — Telecommunications Standards](#part-xiii--telecommunications-standards) - [REF-TIA-001: ANSI/TIA-485-A — Electrical Characteristics of Generators and Receivers for Use in Balanced Digital Multipoint Systems (RS-485)](#ref-tia-001-ansitia-485-a--electrical-characteristics-of-generators-and-receivers-for-use-in-balanced-digital-multipoint-systems-rs-485) - [Part XIV — Upstream CAD / Derivative-Source Attributions](#part-xiv--upstream-cad--derivative-source-attributions) @@ -1115,6 +1116,75 @@ requirements for the airframe itself. --- +## Part X-A — Material Allowables and Property Data (Academic / Test Sources) + +### REF-MAT-001: Batista, Lagomazzini, Ramirez-Peña & Vazquez-Martinez — "Mechanical and Tribological Performance of Carbon Fiber-Reinforced PETG for FFF Applications" + +| Field | Value | +|---|---| +| **Authors** | Moises Batista, Jose Miguel Lagomazzini, Magdalena Ramirez-Peña (Univ. of Cadiz), Juan Manuel Vazquez-Martinez (Polytechnic School of Engineering of Algeciras) | +| **Publication** | *Applied Sciences* **2023**, 13(23), 12701 | +| **DOI / Official URL** | — MDPI open access, CC BY 4.0 () | +| **Retrieved** | 2026-08-25, user-supplied PDF (`applsci-13-12701-v3.pdf`), cross-checked against the DOI landing page's abstract/citation | +| **Test method** | ASTM D638 (tensile, "bone-type" specimens) and ASTM D695 (compression, Ø12.70 × 25.40 mm cylinders); FFF-printed, 100% concentric infill, 0.15/0.25/0.35 mm layer height, 220/230/240 °C extrusion, 60 mm/s | +| **Material tested** | PETG-CF: **20% short (chopped) carbon fiber**-reinforced PETG filament (MÁSTONER, 1.75 mm), vs. unreinforced PETG baseline, both FFF/FDM printed | + +**Measured properties (as published, this project's use):** + +| Property | PETG-CF (20% short CF) | PETG (unreinforced) | Notes | +|---|---|---|---| +| Tensile strength | **39.23 N/mm² (MPa)** | 48.41 N/mm² (MPa) | Text Conclusions §4 — exact, not figure-read. CF **reduces** tensile strength (short-fiber pull-out/poor cohesion observed by SOM microscopy, Fig. 13b) | +| Tensile force at break | 834.052 N | 956.6 N | dog-bone cross-section per Fig. 2a | +| Elongation at break | 2.13% | 2.9% | | +| Compressive strength (max, ASTM D695) | **≈47–60 N/mm² (MPa)**, print-parameter dependent | ≈47–53 N/mm² (MPa) | Read from Fig. 16 bar chart (approximate — the paper states the qualitative result "reinforced material outperforming the non-reinforced material" in compression, `mid text §4, ¶3`, without restating an exact single MPa figure in prose; the range above is the visual envelope across the nine print-parameter combinations tested, not a single certified value) | + +**What this study does NOT provide** (important for how it is used below): no bearing test (e.g., ASTM D953 pin-bearing-in-hole) and no interlaminar/interlayer shear or "fusion strength" test — only bulk tensile and bulk compressive coupons. It does not, by itself, satisfy the CF-PETG **bearing** allowable this repository has flagged as "requires verification" (`airframe/fuselage-mid/WBS.md` CARGO-03c) — bearing failure at a loaded hole is a distinct, generally more severe mode than bulk unnotched compressive strength, and no literature bearing-knockdown factor is asserted here (inventing one would violate root `AGENTS.md` §4). **Confirmed 2026-08-25 (full re-read, all 16 pages): the paper reports NO flexural test (no ASTM D790 or equivalent) and no orientation-specific data of its own** — its Introduction cites a THIRD-PARTY source (ref. [13] within the paper, not this paper's own data) for the general claim that "printing orientation significantly affects... elastic modulus and tensile strength" and that "longitudinal orientation results in greater stiffness," but Batista et al. themselves tested only ASTM D638 dog-bone tensile coupons (concentric 100% infill, load axis in-plane/XY, the FDM-strong direction) and ASTM D695 compression cylinders — do not cite this source for a flexural allowable or for a specific interlayer/Z-axis strength figure; neither exists in it. What it *does* provide: the first real, peer-reviewed, ASTM D695 bulk compressive figure for 20%-CF-reinforced PETG this repository has ever cited, replacing pure conjecture with a measured baseline an order of magnitude above the previous ≈5 MPa bond-limited placeholder (`docs/structural_analysis.md` §7.3), and (new use, `docs/structural_analysis.md` §6.2) the only citable bulk tensile figure for **unreinforced** PETG (48.41 MPa) this repo has, used there as a conservative bending-stress proxy for the rear skid arm — pending an actual flexural coupon and a stated print orientation, since a bending fiber-stress check is not the same test as bulk axial tension. + +**Applied to:** `docs/structural_analysis.md` §7.3 (CF-PETG allowables) and the CARGO-03c CF-PETG bearing-allowable "requires verification" row below — as *context and a materially better bulk-compressive baseline*, not as a substitute for the bearing-specific coupon test that item still calls for. + +**Used in:** `docs/structural_analysis.md` §7.3, `airframe/fuselage-mid/WBS.md` §1.1.1.2 CARGO-03c, this file's Open Standards Verification Items table (CF-PETG bearing allowable row) + +### REF-MAT-002: Ramachandran, Pandian, Ramamoorthi & Britto John — "Influence of Process Parameters on the Mechanical Properties of Carbon Fibre Reinforced PETG" + +| Field | Value | +|---|---| +| **Authors** | Prabhakaran Ramachandran, Venkatesh Ramamoorthi, Jerold John Britto John (Ramco Institute of Technology, Rajapalayam, India); Pitchipoo Pandian (P.S.R. Engineering College, Sivakasi, India) | +| **Publication** | *Mechanics of Advanced Composite Structures* **2026**, 13(1) [Serial No. 27], 171–184, Semnan University Press | +| **DOI / Official URL** | — open access, CC BY 4.0 () | +| **Retrieved** | 2026-08-25, user-supplied PDF, cross-checked against the DOI landing page | +| **Test method** | ASTM D695 (compression, cylindrical specimens), **ASTM D790 (three-point flexural)**, ASTM E384 (Shore D hardness), ASTM D1525 (Vicat softening), ASTM D648 (heat deflection); FFF-printed on a URU 3.0 printer, 0.1 mm layer height, 100% infill, 240°C nozzle / 85°C bed, 80 mm/s, ±45° raster | +| **Material tested** | Pure PETG vs. 10%/20%/30% short chopped-carbon-fiber PETG (M/s. Medsby Health Care Solutions & FlashForge filament), five specimens per composition | + +**Measured properties, unreinforced PETG (this project's use — Table 4 of the paper):** + +| Property | Value | Notes | +|---|---|---| +| **Flexural strength (ASTM D790)** | **54 N/mm² (MPa)** | Table 4, exact — this is a genuine three-point-bend test, not a tensile-strength proxy | +| **Flexural modulus (ASTM D790)** | **2.76 GPa** | Table 4, exact | +| Compressive strength (ASTM D695) | 53 MPa | Table 3 | +| Shore Hardness D | 71 | Table 5 | +| Heat deflection temperature | 67 °C | Table 7 | + +**Measured properties, chopped-carbon-fiber PETG by fiber fraction (Table 4 of the +paper, ASTM D790 three-point flexural test — exact, not figure-read):** + +| Material | Flexural strength (MPa) | Flexural modulus (GPa) | Notes | +|---|---|---|---| +| PETG (0% CF) | 54 | 2.76 | baseline, same row as above | +| **10% CF-PETG** | **43** | **5.15** | **Strength DROPS below plain PETG** at this fraction — the paper attributes this to poor fiber-matrix cohesion/wetting at low loading (short-fiber pull-out), consistent with the tensile-test finding in REF-MAT-001. Modulus still rises. **Do not treat "CF-PETG" as inherently stronger than plain PETG in flexure without a stated fiber fraction — 10% is a strength regression.** | +| **20% CF-PETG** | **77** | **6.67** | Strength recovers well above plain PETG; this is the fraction specified for Serenity's structural airframe skins (owner-directed 2026-08-25, see below) | +| 30% CF-PETG | 80 | 7.01 | Highest strength/modulus tested, but this exact fraction is a custom lab blend (Medsby Health Care Solutions & FlashForge filament, this paper's own test material) — not confirmed as an available commercial retail product; superseded as the airframe target by 20% CF-PETG once a real, explicitly-labeled 20%-CF commercial filament ("3D Maker Engineering" PETG-CF Pro Series) was verified to exist | + +FEA cross-check (ANSYS Workbench, linear-elastic model, Table 11): simulated flexural yield strength for pure PETG = 50 MPa vs. the 54 MPa experimental figure above (7.4% error) — the paper's own validation, not independently re-verified here, but consistent enough to support citing the experimental figure with confidence. + +**What this study does NOT provide:** no print-orientation-specific data (loading axis vs. layer-stack axis) — the paper's own conclusions section notes "anisotropic fibre orientation" as a source of nonlinearity in its compressive/flexural results but gives no interlayer (Z-axis) strength figure or orientation-dependent allowable. It also does not test any geometry resembling a thin-walled tube (only solid dog-bone/bar/cylinder coupons) — this figure is a bulk material property, not a structural-member allowable. + +**Applied to:** `docs/structural_analysis.md` §6.4 (rear CF skid-rod nose-high re-derivation) — **replaces** the REF-MAT-001 tensile-strength-as-bending-proxy (48.41 MPa) used there initially with this source's direct ASTM D790 flexural strength (54 MPa), the correct test type for a bending failure mode. The print-orientation caveat from that section's original derivation stands unchanged — this source does not resolve it. + +**Used in:** `docs/structural_analysis.md` §6.4 + +--- + ## Part XI — FDA / CDRH Laser Product Regulations ### REF-FDA-001: 21 CFR Part 1040 — Performance Standards for Light-Emitting Products @@ -1597,7 +1667,7 @@ TTL bus servo before the fleet-wide standardisation. Do not delete; do not cite | **Control Interface** | **TTL half-duplex serial bus, ID-addressable** — **not** 1000–2000 µs PWM. Lands on `CAN-PERIPH-GW-1` `J_FLEX` → `FLEX_TTL_GPIO`, documented there as covering "a TTL-level digital servo protocol (e.g. a serial-bus servo)". | | **Operating Voltage** | Driven at 5.4 V nominal from Flight Engineer RAIL-2 `5V_OBS` (project-side decision, not a datasheet limit) | | **Torque** | ⚠ Not verified. **Design requirement is ≥ 3.2 kgf·cm (0.31 N·m)** at the coupler — derived in `docs/CARGO_WINCH_SPECIFICATION.md` §4.2, must be checked against the real rating. | -| **Stall current** | ⚠ Not verified for SPT5425LV. Budgeted at 1.2 A for the RAIL-2 sizing (spec §5.4); if actual stall exceeds ~2.5 A, RAIL-2 must be resized. **Note (2026-08-23):** the nacelle-tilt servos moved to DS3225, whose datasheet DOES publish stall current — **1.9 A @ 5 V, 2.3 A @ 6.8 V** — i.e. ~1.9× the 1.2 A placeholder. RAIL-2 sizing must be re-checked against 2.3 A per tilt servo. | +| **Stall current** | ⚠ Not verified for SPT5425LV (the cargo-winch servo on RAIL-2, `docs/CARGO_WINCH_SPECIFICATION.md` §5.4). Budgeted at 1.2 A for the RAIL-2 sizing; if actual stall exceeds ~2.5 A, RAIL-2 must be resized. **Note (2026-08-23):** the *nacelle-tilt* servos (a separate load, on the 6 V servo bus, `docs/POWER_DISTRIBUTION.md` §3.3 — not RAIL-2) moved to DS3225, whose datasheet DOES publish stall current — **1.9 A @ 5 V, 2.3 A @ 6.8 V**. **Correction (2026-08-25, SPAR-02 re-derivation):** the "RAIL-2 sizing must be re-checked" language here previously conflated the tilt servo with the RAIL-2 winch servo; RAIL-2 itself carries only the winch servo and Observer boards and is unaffected by the DS3225 swap. The 6 V servo bus (§3.3) has been resized to 2.3 A/servo instead — see `docs/POWER_DISTRIBUTION.md` §3.3/§4. | | **Mass** | ⚠ Not verified. **60 g assumed** in the mass/CG table (spec §6); this term dominates the +98.6 g net delta and the resulting T/W 1.613 → 1.557. | | **Case envelope / boss pattern** | ⚠ Not verified. Blocks `make_winch_pedestal_port()` in `airframe/stls/fuselage/cargo/generate_cargo_mounts.py`. | | **Application** | Cargo winch drive. Transmits **torque only** through a lost-motion dog coupler; the spool is carried on two MR84ZZ bearings on a fixed Ø4 mm axle clamped at both pedestals, so no radial load reaches the servo output. Paired with a normally-engaged one-way safety ratchet whose catch is retracted by a solenoid on the same gateway. Signed CAN-FD telemetry per [REF-NIST-001 §2.1]. | @@ -1826,6 +1896,49 @@ those boards keep the SLB9672 (REF-SENSOR-011). --- +### REF-SENSOR-019: SMB Bearings F688ZZ — 8x16x5 mm Flanged Miniature Radial Ball Bearing (wing-root tilt-spar bearing) + +| Field | Value | +|---|---| +| **Manufacturer** | SMB Bearings | +| **Product** | F688ZZ — flanged, double-metal-shielded miniature radial ball bearing | +| **Datasheet (fetched and read this session)** | | +| **Bore (ID)** | 8 mm (0.3150 in) | +| **Outside diameter (OD)** | 16 mm (0.6299 in) | +| **Width** | 5 mm | +| **Flange OD** | 18 mm | +| **Flange width** | 1.1 mm | +| **Flange step height** | 0.2 mm (min.) | +| **Rings/balls material** | SAE 52100 chrome steel | +| **Cage material** | Pressed steel | +| **Closures** | Metal shields (ZZ) | +| **Static load rating** | 59 kgf (579 N) | +| **Dynamic load rating** | 125 kgf (1,226 N) | +| **Speed limit** | 36,000 rpm (with adequate lubrication) | +| **Standard lubrication** | Kyodo Yushi Multemp SRL grease | +| **Bore/OD tolerance (P0, as-supplied grade)** | +0 / −0.008 mm each | +| **Compliance** | EU RoHS and REACH | + +**Applied to:** the wing-root (fuselage-wall) end of each 8 mm OD AISI 4130 rotating +tilt-spar, per `airframe/wings-nacelles/WBS.md` §1.1.2 **SPAR-01** ("Root bearing +stays F688ZZ" — the tip end uses the downsized MF128ZZ, not this part; see the +2026-07-19 Rev R2d note in the same section). The bearing seat cut into the cargo +shell (`airframe/fuselage-mid/WBS.md` CARGO-02) is sized from this datasheet's OD — +**16 mm nominal, +0/−0.008 mm** — plus a light interference allowance for a +printed-plastic seat (outer race stationary in the shell; inner race rotates with +the spar), not from the retired Ø22 mm press-fit figure that sized the old fixed +12 mm CF tube boss. The 8 mm bore matches the spar's 8 mm OD directly (line-to-line +on the rotating inner race, per the manufacturer's P0 bore tolerance above; no +added clearance is applied on the *bearing* bore itself — the 8.3 mm figure in +`WING_SPAR_BORE_D` is a separate, non-bearing rotating clearance elsewhere along +the spar's run, not this seat). + +**Used in:** `airframe/blender-scripts/merge_cargo_interior.py` +(`WING_SPAR_BOSS_OD`), `airframe/wings-nacelles/WBS.md` §1.1.2, +`airframe/fuselage-mid/WBS.md` §1.1.1.2 CARGO-02, `current-specification/bom_revS.csv` + +--- + ## Part XIII — Telecommunications Standards ### REF-TIA-001: ANSI/TIA-485-A — Electrical Characteristics of Generators and Receivers for Use in Balanced Digital Multipoint Systems (RS-485) @@ -1989,6 +2102,26 @@ inner surface as the flow-facing boundary. The master flaps are geometrically u `docs/PHASED_BUILD_GUIDE.md` (nozzle flap print quantities), `current-specification/bom_revS.json` (`PRINT-NACELLE-FLAP-MASTER` / `PRINT-NACELLE-FLAP-SEAL`), `TODO.md` §1.1.3. +### REF-CAD-006: Selig, M.S. — S1223 airfoil coordinates (UIUC Airfoil Coordinates Database) + +| Field | Value | +|---|---| +| **Author** | Michael S. Selig (University of Illinois at Urbana-Champaign, Department of Aerospace Engineering) | +| **Work** | S1223 airfoil — tabulated (x, y) surface coordinates, normalised to unit chord, Selig convention (single closed loop starting/ending at the trailing edge, upper surface TE→LE followed by lower surface LE→TE) | +| **Designation** | UIUC Airfoil Coordinates Database, entry `s1223.dat` | +| **Official URL** | (database index); direct file | +| **Retrieved** | 2026-08-24, fetched live via HTTP GET against the direct file URL above; content verified against the published S1223 plots at (same database) | +| **License** | UIUC Applied Aerodynamics Group airfoil data is published for open engineering/research use; cited here per this project's citation policy (root `AGENTS.md` §4) regardless of whether a formal license notice accompanies the file. No coordinate value is altered — the table below is a verbatim re-split of the published 81-point loop into the two ordered surface lists (`S1223_UPPER` LE→TE, `S1223_LOWER` TE→LE) that `wings_s1223_revo.scad`'s existing `s1223_section()`/`midline_frac()` decomposition expects; no interpolation, smoothing, or invented points were introduced. | +| **Note** | Supersedes the placeholder table that shipped with `wings_s1223_revo.scad` since Rev R1 — that table was a hand-typed approximation that crossed to negative thickness at x/c ≈ 0.742 (WING-01, `tools/wing_airfoil_integrity.py`). This entry is the actual source data; the placeholder's origin was never traceable to a fetch and is not cited as a source. | + +**Applied to:** `S1223_UPPER` / `S1223_LOWER` coordinate tables — the wing outer-mold-line section +used by `s1223_section()`, `wing_solid()`, and every bore/pad module in +`wings_s1223_revo.scad` that reads `midline_frac()`. + +**Used in:** `airframe/openscad/wings/wings_s1223_revo.scad` (`S1223_UPPER`, `S1223_LOWER`), +`tools/wing_airfoil_integrity.py` (validates this table), `airframe/wings-nacelles/WBS.md` §1.1.2 +(WING-01). + --- ## Part XV — Open Hardware / Software Licensing Standards @@ -2065,9 +2198,9 @@ Add verified section numbers to the relevant files and update this table. | Tilt-spar material allowables (4130 + trade-study alternates) | `docs/TILT_SPAR_ANALYSIS.md` §3.1–3.2/§3.5, `current-specification/bom_revS.csv` SPAR-TILT-4130 | The §3.5 material trade study uses **typical handbook allowables** for AISI 4130 (~460 MPa yield), 17-4 PH H1075 (~860 MPa), 7075-T6 (~503 MPa), 6061-T6 (~276 MPa), 316 SS, and Ti-6Al-4V (~880 MPa); none are yet tied to a validated MMPDS/AMS product page. Moduli/densities are nominal. | Confirm the **selected** material's design allowable and the two carried alternates (17-4 PH, 7075-T6) vs MMPDS-2023 / AMS (or mill cert) and add `REF-MAT-*` catalog entries with validated URLs before spar procurement (TODO §0.8). | | CF plate bending allowable for the SPAR-01 thwarts | `airframe/wings-nacelles/WBS.md` §1.1.2 SPAR-01, `tools/wing_spar_carrythrough.py`, `docs/structural_analysis.md` §1 | The two CF thwarts that replace the wing-spar carry-through (2026-08-23) are sized against a **300 MPa** cross-ply bending stand-in, chosen a factor of 5 below the only CF figure the repository carries — `docs/structural_analysis.md` §1's ~1 500 MPa for **unidirectional pultruded** stock, which is itself marked as requiring supplier certificates. A thwart is loaded in bending across the ship, which is not that layup, so neither number is a verified allowable for this part. The tool prints FOS against both (8.5 and 42.5 at the governing station). | Obtain ASTM D3039 (tensile) and ASTM D695 (compressive) certificates for the actual CF plate stock, add a `REF-MAT-*` catalog entry with a validated URL and the certified flexural allowable, and re-run `tools/wing_spar_carrythrough.py` before cutting the thwarts. Do not fabricate the figure. (root `TODO.md` §0.8) | | S1223 airfoil coordinates — the tabulated section is not a valid airfoil | `airframe/openscad/wings/wings_s1223_revo.scad` `S1223_UPPER`/`S1223_LOWER`, `airframe/wings-nacelles/WBS.md` §1.1.2 WING-01, `tools/wing_airfoil_integrity.py` | The tabulated upper surface falls below the lower surface over the aft quarter: section thickness goes **negative from x/c ≈ 0.742**, reaching t/c −0.0152 at x/c 0.90, and the outline self-intersects at (0.7417, 0.0235). The aft upper points sit ~0.03 t/c below published Selig S1223. **No source is recorded for the tables** — they carry no citation, retrieval date, or URL anywhere in the repository, which is how a corrupted aft section went unnoticed. `wing_solid()` lofts with `hull()`, whose convex hull is 1.647× the outline's area, so the defect never reaches the STL and `validate_stls.py` passes. | Retrieve S1223 coordinates from the **UIUC Airfoil Coordinates Database** () — URL not yet validated against the issuing site by this repository, so verify before citing — record the retrieval date, add a `REF-CAD-*` entry, and only then replace both tables. `tools/wing_airfoil_integrity.py` must reach PASS. Do **not** transcribe coordinates from memory or from the comparison column in WING-01. (root `TODO.md` §1.1.2) | -| DS3225 nacelle-tilt servo — residual torque margin vs the tilt requirement | `avionics/datasheets/DS3225 datasheet.pdf`, `docs/TILT_SPAR_ANALYSIS.md` §2, `current-specification/bom_revS.csv` SERVO-TILT | **Dimensions RESOLVED and stable across the swap.** DS3225 (added 2026-08-23) is **dimensionally identical** to the DS3218 it replaces — 40 × 20 × 40.5 mm, 60 g, 54.5 mm flange span, 49.5 × 10 mm bolt pattern, flange 27.7 mm above base — so the Rev S1d cargo-shell pads are unaffected. **Torque is closer but still not cleared on datasheet figures:** stall is **21 kgf·cm @ 5 V / 24.5 kgf·cm @ 6.8 V**; the "25kg" in the product name is the marketing figure and the spec table maxes at 24.5. Against the **≥ 25 kgf·cm (2.45 N·m)** requirement that is **98 % at 6.8 V, ~92 % at a 6 V rail, 84 % at 5 V** (DS3218 was 86 % at 6.8 V). LibreServo_v4 re-drives the motor from 4.5–18 V and may close it, but no converted-unit figure exists. Stall current is now cited at **1.9 A / 2.3 A**, against the 1.2 A placeholder RAIL-2 was sized on. | Two routes, and the second is probably the right one first: (a) bench-measure stall torque of a DS3225 + LibreServo_v4 unit at the rail voltage actually chosen; (b) **re-derive the ≥ 25 kgf·cm requirement itself** — it is cited to `serenity-rev-r.jsx` L383 as a spec pick, not a derivation, and `TILT_SPAR_ANALYSIS` §2 records the pivot as being AT the nacelle CG, which nulls the gravity moment and leaves only aero + inertia. Re-derive before buying a larger servo. Also re-size RAIL-2 at 2.3 A per tilt servo. (root `TODO.md` §1.1.3) | +| DS3225 nacelle-tilt servo — residual torque margin vs the tilt requirement | `avionics/datasheets/DS3225 datasheet.pdf`, `docs/TILT_SPAR_ANALYSIS.md` §2/§2.1, `current-specification/bom_revS.csv` SERVO-TILT | **Dimensions RESOLVED and stable across the swap.** DS3225 (added 2026-08-23) is **dimensionally identical** to the DS3218 it replaces — 40 × 20 × 40.5 mm, 60 g, 54.5 mm flange span, 49.5 × 10 mm bolt pattern, flange 27.7 mm above base — so the Rev S1d cargo-shell pads are unaffected. Datasheet stall is **21 kgf·cm @ 5 V / 24.5 kgf·cm @ 6.8 V**; the "25kg" in the product name is the marketing figure and the spec table maxes at 24.5. Against the uncorrected **≥ 25 kgf·cm (2.45 N·m)** spec-pick that was **98 % at 6.8 V**. **RESOLVED 2026-08-25** (`docs/TILT_SPAR_ANALYSIS.md` §2.1): the ≥25 kgf·cm figure was itself the stale artifact — it is a spec pick (`archives/serenity-rev-r.jsx` L383), not a load derivation. Re-derived from aero+inertia only (pivot at CG nulls gravity to within a 0.019 kgf·cm bound on two off-axis parts): grounded requirement ≈ 1.80 kgf·cm, **7.3 % of DS3225's 24.5 kgf·cm** — wide margin. Aero moment could not be grounded (no nacelle Cd/frontal-area data exists in the repo) and remains an open item, not assumed zero. **DS3225 stands; no part change.** Stall current is cited at **1.9 A / 2.3 A** — this is the **6 V servo bus** current (`docs/POWER_DISTRIBUTION.md` §3.3), now resized there to 2.3 A/servo; it is **not** RAIL-2 (RAIL-2/`5V_OBS` is the separate Observer/winch-servo rail, `docs/POWER_DISTRIBUTION.md` §3.2.1/§11.1 — the earlier "1.2 A placeholder RAIL-2 was sized on" language in this row and elsewhere was a citation error, corrected 2026-08-25). | Bench-measure stall torque of a DS3225 + LibreServo_v4 unit at the rail voltage actually chosen, to confirm the datasheet figures translate to the built hardware — the load-side conclusion (DS3225 stands) does not depend on this, but it remains an open verification item per Scope Boundaries. (root `TODO.md` §0.8) | | SPT5425LV mounting-ear span and bolt-hole spacing (REF-SENSOR-013) | `REFERENCES.md` REF-SENSOR-013, `airframe/blender-scripts/merge_cargo_interior.py` `NSVMT_HOLE_S_Y`/`NSVMT_HOLE_S_Z`, `airframe/wings-nacelles/WBS.md` §1.1.2 SPAR-02 | REF-SENSOR-013 publishes the SPT5425LV body as 40.5 × 20 × 40.5 mm but **neither source lists the mounting-ear span or the bolt-hole spacing**. The cargo shell drills a 35 × 16 mm pattern into both nacelle-servo pads; that pattern predates this servo (drawn for the uncited DS3218MG the BOM replaced 2026-08-02) and is therefore unlikely to match. `tools/nacelle_servo_deconflict.py` carries a 6 mm/end ear allowance as an explicitly conservative stand-in, not a datasheet figure, and the 0.5 mm Y pad shortfall it reports rests entirely on that allowance. | Measure the ear span and hole spacing on a real SPT5425LV (or obtain a dimensioned manufacturer drawing), add them to REF-SENSOR-013, then correct `NSVMT_HOLE_S_Y`/`NSVMT_HOLE_S_Z` and re-run `tools/nacelle_servo_deconflict.py` before the cargo shell is cut. Do not fabricate the spacing. (root `TODO.md` §0.8) | -| CF-PETG **bearing** allowable for the wing-root tenon | `airframe/fuselage-mid/WBS.md` §1.1.1.2 CARGO-03c, `tools/wing_spar_carrythrough.py`, `docs/structural_analysis.md` §7.3 | The wing root tenon is a structural joint element (owner, 2026-08-23 — the wings do not rotate with the nacelles, so spanwise load terminates at the fuselage wall through the tenon). It develops **10.14 MPa bearing** at ultimate on its mortise faces. The repository carries **no CF-PETG bearing allowable**; its only CF-PETG figure is ≈5 MPa, which is **bond**-limited (§7.3) and is the wrong mode for a tenon in a slot. Against the §3 joint FOS target of 4.0 the allowable must be ≥ 40.6 MPa at the present 12 mm insertion, or the tenon must grow. The airframe's measured maximum tenon is **39.2 mm wide x 20.1 mm insertion** (`tools/wing_root_deconflict.py` `max_tenon_envelope()`): width is capped aft by the landing-gear bay and cannot move forward at all (0.20 mm to the spar bore), and insertion is capped by the CARGO-01 payload envelope at X -119.1. At that maximum the joint reaches FOS 4.0 only if the allowable is **>= 11.1 MPa** — that is the hard floor the coupon test must clear. Below it the tenon cannot be grown into compliance. **Owner decision rule (2026-08-23): if CF-PETG cannot be sourced at >= 15 MPa fusion strength the joint gets a SECOND SPAR** forward of the main one (14 mm from LE, 31.15 mm separation, 469 N couple force), which at D8 x 40 mm embed needs an allowable of only ~5.9 MPa for FOS 4.0 -- see CARGO-03c. The coupon result therefore selects between two designs, and 15 MPa is the branch point. | Add CF-PETG **bearing/compressive** coupons (ASTM D695, printed in the tenon's own orientation and layer direction) to the LG-11 coupon-test schedule in root `TODO.md` §1.1.4, add a `REF-MAT-*` entry with the measured allowable, then re-run `tools/wing_spar_carrythrough.py` and size the tenon insertion from the result. Do not fabricate the allowable, and do not assume the bond-limited 5 MPa applies. | +| CF-PETG **bearing** allowable for the wing-root tenon | `airframe/fuselage-mid/WBS.md` §1.1.1.2 CARGO-03c, `tools/wing_spar_carrythrough.py`, `docs/structural_analysis.md` §7.3, **REF-MAT-001** | **RESOLVED (built) 2026-08-25 under the default `two_rod` path — this row now describes the coupon-gated alternative, not a blocker.** The wing-root couple is now reacted by two bonded CF tie rods (`wings_s1223_revo.scad` `TENON_LOAD_PATH = "two_rod"`), sized against the repo's existing ≈5 MPa bond-limited CF-PETG figure at FOS 5.26 (fwd)/4.14 (aft) — no new allowable needed to close this. The tenon itself is traded out of the load path and reverted to a locating-only feature. The **`enlarged_tenon`** path (tenon alone reacting the full 14.60 N·m ultimate moment, needing ≥40.6 MPa bearing at 12 mm insertion or ≥11.1 MPa at the airframe's 39.2×20.1 mm maximum envelope) stays documented/buildable but is not default and remains gated on a real bearing coupon. **REF-MAT-001** (2026-08-25) adds the first peer-reviewed data point — ASTM D695 *bulk* compressive strength for 20%-CF-PETG, ≈47–60 MPa — an order of magnitude above the 5 MPa placeholder, but it is bulk unnotched compression, not a bearing-in-a-hole test, so it does not by itself clear the ≥11.1–40.6 MPa bar this row's `enlarged_tenon` alternative needs; it does make that alternative look plausibly viable pending an actual bearing coupon, where before this row had no positive evidence at all. | For the built `two_rod` path: no action required, already closed. To *reopen* `enlarged_tenon` as a real option: run a genuine bearing coupon (ASTM D953 or equivalent pin-in-hole test, printed in the tenon's own orientation/layer direction) rather than inferring a bearing allowable from REF-MAT-001's bulk-compression figure via an unstated knockdown factor — add the LG-11 coupon-test schedule item (root `TODO.md` §1.1.4) if pursued. Do not fabricate a bearing/bulk-compression knockdown factor. | | 14 CFR Part 107 dropped-object provision — section number **not yet verified** | `REFERENCES.md` REF-FAA-002 applied-sections table, `docs/CARGO_WINCH_SPECIFICATION.md` §3.10.2 | Part 107 contains a provision prohibiting dropping an object from a small UA in a manner that creates an undue hazard to persons or property. REF-FAA-002's applied-sections table currently lists only §107.3, §107.29, §107.31 and §107.51(a)–(d) — the dropped-object section is **absent**, so no section number is asserted in the winch spec (root `AGENTS.md` §4: never guess a section number). This matters because the cargo winch **intentionally** releases a payload (requirement R5, overload line-shed) while an uncommanded structural release of the spool itself (19.1 J, or 31.8 J for the full assembly, from the §107.51(b) 400 ft ceiling) is precisely the hazard the provision addresses. | Look up the section in the eCFR Part 107 text, add it to REF-FAA-002's applied-sections table with the exact title and a validated URL, then cite it in `docs/CARGO_WINCH_SPECIFICATION.md` §3.10.2 and state explicitly how a commanded shed differs from an uncommanded release under that text. Do not fabricate the number. (`docs/TODO.md` §0.x) | | STS3215 cargo winch servo — envelope, torque, mass, stall current (REF-SENSOR-012) | `REFERENCES.md` REF-SENSOR-012 | **MOOT — servo superseded 2026-08-02.** The STS3215 datasheet-verification gate below is retained only as a historical record; the winch (and nacelle tilt) servos have moved to SPT5425LV/LibreServo v2 (REF-SENSOR-013/014), whose envelope/torque/mass are published COTS figures — see the row below. Do not spend further effort clearing this gate. | None — superseded. | | SPT5425LV servo — stall current; rotation-pin removal procedure (REF-SENSOR-013) | `REFERENCES.md` REF-SENSOR-013, `docs/CARGO_WINCH_SPECIFICATION.md` §3.1/§3.9 (Rev C), `current-specification/bom_revS.json`/`.csv`, `airframe/openscad/nacelles/nacelle_servo_bracket.scad` | Stall/running current is not published on either sourced listing (manufacturer product page or servodatabase.com), so RAIL-2 and the nacelle-tilt servo rail budgets carry the prior STS3215-era 1.2 A figure forward as a **placeholder, not a verified SPT5425LV number**. Separately, the exact internal location and removal procedure for the rotation-limiting pin has not been confirmed by teardown — the "remove the pin for continuous rotation" mod is a well-known technique on hobby servos generally, but part-specific verification is outstanding. | Bench-measure SPT5425LV stall current at 5–6 V before finalizing RAIL-2 / nacelle-tilt servo-rail sizing; photograph/document the pin-removal procedure on a teardown unit before committing steps to the build guide. Do not fabricate either figure. (`docs/TODO.md` §0.x) | diff --git a/TODO.md b/TODO.md index 6c6aae5e..ff1c2c25 100644 --- a/TODO.md +++ b/TODO.md @@ -33,6 +33,8 @@ - [ ] Verify 4130 / 17-4 PH / 7075 allowables vs MMPDS/AMS (REF-MAT-*) - [ ] Add 4130 corrosion-finish spec (zinc/cad plate) to BOM/build guide - [ ] Verify AK7455 off-axis geometry + pinout vs datasheet (REF-SENSOR-*) +- [ ] ASTM D3039/D695 coupon test: CF-PLATE-2MM bending allowable (thwarts + built at FOS 8.5/8.7 vs the conservative 300 MPa stand-in only) ### 0.10 Update and correct documentation touching every non-archived file. @@ -86,9 +88,10 @@ numeric order.)* → detail: `airframe/fuselage-mid/WBS.md` §1.1.1 (3/3) -- [ ] ★ CARGO-01 payload won't fit past the wing spar (BLOCKER) -- [ ] CARGO-02 shell bores Ø12.3 for a spar the wing retired (8.3) -- [ ] ★ CARGO-03c coupon-test CF-PETG: >=15MPa tenon, else 2nd spar +- [ ] CARGO-03c follow-up: coupon-test CF-PETG fusion/bearing (>=15MPa unlocks + the `enlarged_tenon` alternative) — the default two-rod tie-rod couple + is BUILT and does not block on this (`airframe/fuselage-mid/WBS.md` + §1.1.1.2 CARGO-03c, 2026-08-24) - [ ] head_shell24.stl - [ ] cargo_sect_shell24.stl - [ ] Cargo gondola shell @@ -133,13 +136,6 @@ numeric order.)* → detail: `airframe/wings-nacelles/WBS.md` §1.1.2 -- [ ] ★ WING-01 S1223 section self-intersects at x/c 0.742 (BLOCKER) -- [ ] SPAR-01 spars stop at the wall; CF thwarts fore/aft of bay -- [ ] SPAR-02 DS3225 24.5 vs 25 kgf·cm req (re-derive); RAIL-2 2.3A -- [ ] Re-render + re-bake both wings — Rev S1b tip OML + Rev S1c Hall - (THICKNESS_SCALE_TIP 1.25→1.45, thickness-only section scaling); baked wing - STLs and docs/img/wing_rev_r1a_sections.png are stale - #### 1.1.3 — Nacelles → detail: `airframe/wings-nacelles/WBS.md` §1.1.3 @@ -259,7 +255,6 @@ numeric order.)* - [ ] LG-13 Define wire-end retention detail at bay bosses - [ ] LG-02 Bay mounting integration: backing plates, flank conform… - [ ] Assess foot grip on concrete/asphalt -- [ ] LG-03 CF rod channel in middle_canonical_shell24.scad rear skid… - [ ] LG-06 Elastic bench check: quarter-AUW fixture, 1.5 ft drop - [ ] LG-07 Confirm avionics enclosure shock rating - [ ] LG-11 Coupon-test CF-PETG diff --git a/WBS.md b/WBS.md index 0c64f456..0afec152 100644 --- a/WBS.md +++ b/WBS.md @@ -219,8 +219,8 @@ see docs/WBS.md §0.10.2.)* - [x] Access panel frames + covers (24" Rev R) - [x] 49 MHz (Part 15 §15.235) wire posts - [x] Verify head-cargo mating boss positions in slicer — SUPERSEDED,… -- [ ] ★ CARGO-01 payload won't fit past the wing spar (BLOCKER) -- [ ] CARGO-02 shell bores Ø12.3 for a spar the wing retired (8.3) +- [x] ★ CARGO-01 payload won't fit past the wing spar (BLOCKER) +- [x] CARGO-02 shell bores Ø12.3 for a spar the wing retired (8.3) - [x] ★ CARGO-03 wing root mortise now penetrates — CLOSED - [x] ★ CARGO-03b tenon/mortise on one datum — CLOSED - [ ] ★ CARGO-03c coupon gates tenon vs second spar (15 MPa) @@ -293,9 +293,9 @@ see docs/WBS.md §0.10.2.)* - [x] EDF cableway added - [x] Fuselage spar-interface mismatched — station RESOLVED (Rev S1b) (spar DIAMETER Ø12.3 vs 8.3 still open — see §1.1.1 CARGO-02) -- [ ] ★ WING-01 S1223 section self-intersects at x/c 0.742 (BLOCKER) -- [ ] SPAR-01 spars stop at the wall; CF thwarts fore/aft of bay -- [ ] SPAR-02 DS3225 24.5 vs 25 kgf·cm req (re-derive); RAIL-2 2.3A +- [x] ★ WING-01 S1223 section self-intersects at x/c 0.742 (BLOCKER) +- [x] SPAR-01 spars stop at the wall; CF thwarts fore/aft of bay +- [x] SPAR-02 DS3225 torque re-derived (aero+inertia only, gravity nulled by CG pivot) -- DS3225 clears at ~7.3% margin, no part change; 6 V tilt-servo rail resized to 2.3A/servo (RAIL-2 is unrelated -- winch/Observer rail, corrected citation) - [x] SPAR-04 Hall tip jog crosses the spar bore — CLOSED #### 1.1.3 — Nacelles @@ -360,7 +360,7 @@ see docs/WBS.md §0.10.2.)* - [ ] Assess foot grip on concrete/asphalt - [x] Rev R1.4 corner V-brace (landing_leg_assy.scad) is retired - [x] Rev R4 closed-ring wire fuse (wire_loop_fuse.scad) is retired -- [ ] LG-03 CF rod channel in middle_canonical_shell24.scad rear skid… +- [x] LG-03 CF rod channel in rear skid arms (superseded by LG-26) - [x] landing_legs_hull_r1.stl is orphaned - [ ] LG-06 Elastic bench check: quarter-AUW fixture, 1.5 ft drop - [ ] LG-07 Confirm avionics enclosure shock rating @@ -374,6 +374,8 @@ see docs/WBS.md §0.10.2.)* *(closed 2026-08-09 — 4 ft adopted)* - [ ] LG-18 Mass-reduction pass (leg frame / bay / thigh) - [ ] LG-19 Styling refinement pass vs REF-CAD-002 (cosmetic) +- [x] LG-25 Fore bay frame vs U5 tie-rod boss: 12mm proud (relieved boss) +- [x] LG-26 Rear skid CF-rod bore misses the skid tube (fixed) - [ ] Render overview SVGs using FreeCAD TechDraw #### 1.1.5 — Non-Printable Component Placeholders @@ -1087,6 +1089,23 @@ BOM tables (not checkbox tasks) — referenced, not duplicated here: - [x] rear_shell24_2mm_repaired.stl — 15 bodies, all wt=True - [x] middle_shell24_2mm_repaired.stl — 10 bodies, all wt=True - [x] dorsal_antenna_fin.stl — 3 bodies, all wt=True + - **MESH FIX 2026-08-25** (surfaced by `airframe/freecad/assembly/ + SerenityAssembly.FCStd` failing to open cleanly — "mesh data + structure has some defects"): re-measured, the published file + actually carried 7 bodies — the 3 real ones this line recorded, plus + 4 degenerate zero-area single-triangle fragments not caught by a + per-body watertight check (each fragment IS trivially "watertight" + alone; the whole-file `trimesh.is_watertight` was False). Two of the + 3 real bodies also had inverted (negative-volume) winding. Fixed: + dropped the 4 degenerate fragments, corrected winding + (`trimesh.fix_normals`), unioned the 3 real bodies via `manifold3d` + (same primitive as the sleeve fix above) — result is 1 body, 22 + faces (was 56 total across all 7), fully watertight, volume 2800 mm³ + matching the largest single real body exactly (the smaller box and + the mast were both fully contained within its footprint — genuine + duplicate/leftover fragments, not distinct features; visually + re-verify this reads as the intended flat blade fin, not a + mistakenly-collapsed multi-part design, before next print). - [x] cargo_sect_shell24.stl — 190 bodies, all wt=True ### 6.3 — Rev S Checkpoint (2026-07-04) diff --git a/airframe/FreeCAD-scripts/Makefile b/airframe/FreeCAD-scripts/Makefile index 00aa9c97..005e50ec 100644 --- a/airframe/FreeCAD-scripts/Makefile +++ b/airframe/FreeCAD-scripts/Makefile @@ -48,7 +48,7 @@ AIRFRAME := $(ROOT)/.. SCAD := $(AIRFRAME)/openscad STLS := $(AIRFRAME)/stls SCRIPT := $(ROOT)/serenity_assembly.py -OUTPUT := $(AIRFRAME)/Serenity-Assembled.FCStd +OUTPUT := $(AIRFRAME)/freecad/assembly/SerenityAssembly.FCStd # ---- OpenSCAD flags ------------------------------------------- # --hardwarnings: treat parameter warnings as errors @@ -71,13 +71,22 @@ FUSELAGE_STLS := \ # (bevel housing, bevel pair, Pinion A, Nozzle Drive Pinion, sector gear) is # DELETED and archived (airframe/archive/); replaced by the spar-crank pushrod # (nacelle_pushrod_crank.stl). See docs/NOZZLE_DRIVE_TRADE.md. +# Rev T3 (2026-08-09, airframe/wings-nacelles/WBS.md SS1.1.3.1): the nozzle +# flaps shingled into master+seal pairs, and the combined "asm" preview +# split into two named-endpoint renders (FLAP_PHI = PHI_CLOSED / PHI_OPEN) +# so serenity_assembly.py can pick the one matching each nacelle's +# configured tilt (see nozzle_iris_stl() there). The old single +# nacelle_nozzle_iris.stl (no suffix, always PHI_CLOSED) is superseded by +# -closed.stl and no longer built here or imported by the assembly. NACELLE_STLS := \ $(STLS)/nacelles/edf_stator_sleeve.stl \ $(STLS)/nacelles/edf_aft_spider_sleeve.stl \ - $(STLS)/nacelles/nozzles/nacelle_nozzle_iris.stl \ + $(STLS)/nacelles/nozzles/nacelle_nozzle_iris-closed.stl \ + $(STLS)/nacelles/nozzles/nacelle_nozzle_iris-open.stl \ $(STLS)/nacelles/nozzles/nacelle_nozzle_throat.stl \ $(STLS)/nacelles/nozzles/nacelle_nozzle_ring.stl \ $(STLS)/nacelles/nozzles/nacelle_nozzle_flap.stl \ + $(STLS)/nacelles/nozzles/nacelle_nozzle_flap_seal.stl \ $(STLS)/nacelles/nacelle_pushrod_crank.stl # -- Wings (SCAD-sourced part-local prints; the port/stbd wing @@ -150,10 +159,20 @@ $(STLS)/nacelles/edf_aft_spider_sleeve.stl: \ -o $@ @echo "[stl] $@" -$(STLS)/nacelles/nozzles/nacelle_nozzle_iris.stl: \ +$(STLS)/nacelles/nozzles/nacelle_nozzle_iris-closed.stl: \ $(SCAD)/nacelles/nacelle_nozzle_iris.scad @mkdir -p $(dir $@) $(OPENSCAD) $(SCAD_FLAGS) \ + -D 'FLAP_PHI=PHI_CLOSED' \ + $(SCAD)/nacelles/nacelle_nozzle_iris.scad \ + -o $@ + @echo "[stl] $@" + +$(STLS)/nacelles/nozzles/nacelle_nozzle_iris-open.stl: \ + $(SCAD)/nacelles/nacelle_nozzle_iris.scad + @mkdir -p $(dir $@) + $(OPENSCAD) $(SCAD_FLAGS) \ + -D 'FLAP_PHI=PHI_OPEN' \ $(SCAD)/nacelles/nacelle_nozzle_iris.scad \ -o $@ @echo "[stl] $@" @@ -187,6 +206,17 @@ $(STLS)/nacelles/nozzles/nacelle_nozzle_flap.stl: \ -o $@ @echo "[stl] $@" +# Rev T3 (2026-08-09) seal flap -- 4 per nozzle, lapped 0.2 mm radially +# outboard of the 4 master flaps (PRINT-NACELLE-FLAP-MASTER/-SEAL, 4+4). +$(STLS)/nacelles/nozzles/nacelle_nozzle_flap_seal.stl: \ + $(SCAD)/nacelles/nacelle_nozzle_iris.scad + @mkdir -p $(dir $@) + $(OPENSCAD) $(SCAD_FLAGS) \ + -D 'RENDER_PART="flap_seal"' \ + $(SCAD)/nacelles/nacelle_nozzle_iris.scad \ + -o $@ + @echo "[stl] $@" + # Rev T (2026-07-18, Option B): the tilt-to-nozzle gear train (Pinion A, # Nozzle Drive Pinion, sector gear, bevel pair, bevel housing) is DELETED and # archived; the nozzle spar-crank pushrod replaces it (RENDER_PART="crank" diff --git a/airframe/FreeCAD-scripts/serenity_assembly.py b/airframe/FreeCAD-scripts/serenity_assembly.py index 5550793e..1832039f 100644 --- a/airframe/FreeCAD-scripts/serenity_assembly.py +++ b/airframe/FreeCAD-scripts/serenity_assembly.py @@ -1,9 +1,36 @@ """ serenity_assembly.py — Serenity UAV full-airframe FreeCAD assembly. -Revision: R1.2 (2026-07-18) - -Imports all printed airframe STL components and saves a single -Serenity-Assembled.FCStd for review in FreeCAD. +Revision: R1.3 (2026-08-25) + +Imports all printed airframe STL components and saves a single assembly +file for review in FreeCAD. + +R1.3 Changes (2026-08-25): + - OUTPUT now targets airframe/freecad/assembly/SerenityAssembly.FCStd + directly (was airframe/Serenity-Assembled.FCStd). That file was + previously a hand-built, manually-placed reference (17 objects, several + stale/duplicated across revisions — e.g. both the current + nacelle_port_revs and the superseded nacelle_port_revq were present) + that this script's own docstring cited as the historical SOURCE for + the baked hull-frame placements. This script is now the maintained, + single source of truth for that file instead: it already imports every + current canonical STL (shells, wings, nacelles, splice collars, cargo + interior accessories, EDF sleeves, nozzle iris, landing gear, dorsal + fin, bow sensor faceplate) with validated or explicitly-marked-VERIFY + hull-frame placements. The old hand-built file's content is preserved + in git history and in the pre-existing `.FCStd.bak2`/`.FCBak` files + alongside it; nothing is lost by this switch. + - Added a NACELLE TILT CONFIGURATION block (see NACELLE_TILT_PORT_DEG / + NACELLE_TILT_STBD_DEG below): each side's nacelle body, EDF stator + sleeve, EDF aft spider sleeve, and nozzle iris now rotate together as + one rigid group about that side's tilt pivot (hull +X axis, through + the nacelle's own CG/pivot station), driven by that one per-side + degree value. 0 deg = forward/cruise (the stored/baked attitude); + 90 deg = vertical/hover (duct axis vertical, nozzle exit facing -Z/ + down, for lift). The rotation SIGN was reverse-engineered from the old + hand-built file's own Nacelle_Stbd placement (axis (-1,0,0), angle + 90 deg = -90 deg about hull +X) rather than assumed, and reproduces + that file's stbd-vertical/port-forward configuration by default. R1.2 Changes (2026-07-18): Initial hull-frame VERIFY-tier placements added for all unpositioned parts: @@ -30,7 +57,7 @@ the latter starts the GUI event loop, which on some platforms does not exit cleanly after the script finishes, so the command appears to hang. -Output: /airframe/Serenity-Assembled.FCStd +Output: /airframe/freecad/assembly/SerenityAssembly.FCStd (overwrites any existing file) Author: Steve Griffing, PE(CSE), CISSP-ISSEP, CPP @@ -66,8 +93,9 @@ a VERIFY marker indicating they require confirmation in FreeCAD. References: - [1] airframe/freecad/assembly/SerenityAssembly.FCStd — validated - positions (pre-bake; placements now identity after R1). + [1] airframe/freecad/assembly/SerenityAssembly.FCStd — this script's own + output (R1.3+); pre-bake it was the hand-placed source the R1 bake + extracted from (see git history for that revision). [2] tools/bake_hull_frame.py — canonical bake transforms. [3] airframe/openscad/nacelles/nacelle_pod_50mm_tandem.scad [4] CLAUDE.md — project standards. @@ -97,7 +125,7 @@ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) AIRFRAME = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) STL_DIR = os.path.join(AIRFRAME, "stls") -OUTPUT = os.path.join(AIRFRAME, "Serenity-Assembled.FCStd") +OUTPUT = os.path.join(AIRFRAME, "freecad", "assembly", "SerenityAssembly.FCStd") # --------------------------------------------------------------------------- @@ -289,6 +317,120 @@ def nacelle_rows(side, r_local, t_local): ] +# Nacelle local-frame Z stations, mm (nacelle_pod_50mm_tandem.scad): +# intake Z=0 .. STATOR_SLV_Z_START=90.0 .. AFT_SLV_Z_START=122.5 .. +# NOZZLE_RING_Z(=CROWN_Z)=166.25 .. NACELLE_L=185.2 (nozzle exit). +# PIVOT_Z is the spar-crank / CG station, inside the sleeve span. +# Hoisted to module level (was local to assemble()) so nacelle_pivot_hull() +# can use PIVOT_Z; kept together since they share one source (the SCAD). +STATOR_SLV_Z_START = 90.0 +AFT_SLV_Z_START = 122.5 +# PIVOT_Z re-derived 2026-07-19 for the Rev T rotating assembly: CG_Z = +# 111.5 mm. See nacelle_pod_50mm_tandem.scad header mass breakdown. The +# earlier 104.5 mm figure predates the Rev T nozzle changes: deleting the +# gear train alone left the pivot CG ~unchanged, but doubling the flaps +# 20→40 mm (CG ~198 mm), making the Ø71 throat+housing a discrete pocket +# part (~175 mm), and adding the ~19 g steel spar (on the pivot) net-move +# the CG +7.0 mm aft to 111.5 mm. The spar crank clamps at this station. +PIVOT_Z = 111.5 # pivot / spar-crank station = full-assembly nacelle CG +NOZZLE_RING_Z = 166.25 # nozzle ring station (nozzle placement) + + +# --------------------------------------------------------------------------- +# NACELLE TILT CONFIGURATION (R1.3, 2026-08-25) +# +# Set each side's tilt angle here. 0 deg = forward/cruise (the stored/baked +# attitude every nacelle STL and every nacelle_rows() placement below is +# modelled in). 90 deg = vertical/hover: duct axis vertical, nozzle exit +# (the local +Z end, NACELLE_L = 185.2 mm) facing hull -Z (down), pushing +# air down for lift. +# +# The rotation SIGN below (TILT_SIGN = -1, i.e. rotate -tilt_deg about hull +# +X) was reverse-engineered from the pre-R1.3 hand-built +# airframe/freecad/assembly/SerenityAssembly.FCStd, whose Nacelle_Stbd +# object carried Placement.Rotation = (axis (-1,0,0), angle 90 deg) — the +# same rotation as (axis (1,0,0), angle -90 deg). Reproduced here as the +# STBD default so this script's default output matches that file's own +# configuration (stbd vertical, port forward) rather than an assumed +# convention. Confirmed to point the nozzle exit down (not up) via +# R_BAKE's own local->hull mapping (hull_y = local_z at cruise; a -90 deg +# rotation about hull +X sends hull_z' = -hull_y = -local_z, so the +Z/exit +# end ends up at negative hull Z). +NACELLE_TILT_PORT_DEG = 0.0 # port: forward / cruise +NACELLE_TILT_STBD_DEG = 90.0 # stbd: vertical / hover +NACELLE_TILT_DEG = {"port": NACELLE_TILT_PORT_DEG, "stbd": NACELLE_TILT_STBD_DEG} +TILT_SIGN = -1.0 + + +def nacelle_pivot_hull(side): + """Hull-frame tilt pivot for `side`: local (0, 0, PIVOT_Z) through the + same R_BAKE/T_BAKE composition nacelle_rows() uses for every other + nacelle-local point. PIVOT_Z (the spar-crank / nacelle CG station) is + defined in the Main assembly section below and read here as a module + global set before assemble() runs.""" + off = _mat3_vec(R_BAKE, (0.0, 0.0, PIVOT_Z)) + t_bake = T_BAKE[side] + return tuple(t_bake[i] + off[i] for i in range(3)) + + +def tilt_rotation(side): + """FreeCAD Rotation for this side's configured tilt, about hull +X.""" + return App.Rotation(App.Vector(1.0, 0.0, 0.0), TILT_SIGN * NACELLE_TILT_DEG[side]) + + +def tilt_placement(side): + """Placement rotating a hull-frame-native (cruise/identity) mesh by this + side's configured tilt about its own pivot -- identity when the + configured tilt is 0 deg, so untilted sides are visually unchanged.""" + piv = App.Vector(*nacelle_pivot_hull(side)) + rot = tilt_rotation(side) + base = piv - rot.multVec(piv) + return App.Placement(base, rot) + + +def nozzle_iris_stl(side): + """Nozzle iris STL matching this side's configured tilt. + + Rev T3 (2026-08-09, airframe/wings-nacelles/WBS.md SS1.1.3.1) exposed + `FLAP_PHI` in nacelle_nozzle_iris.scad specifically so each published + assembly STL is reproducible from source at a given flap angle, and the + two committed renders are the two endpoints: nacelle_nozzle_iris- + closed.stl (FLAP_PHI = PHI_CLOSED, petals shut, 0 deg tilt) and + nacelle_nozzle_iris-open.stl (FLAP_PHI = PHI_OPEN, petals full open, + 90 deg tilt). This picks the nearer endpoint by a 45 deg threshold -- + it is NOT a continuous interpolation. A tilt strictly between 0 and 90 + deg would need a fresh `openscad -D 'FLAP_PHI='` render (the + SCAD supports it; this script does not invoke openscad) rather than a + third discrete asset, since the flap angle is a continuous function of + tilt, not a third fixed pose. + + The single-file nacelle_nozzle_iris.stl this script imported before + R1.3 predates Rev T3 (2026-07-19 vs the 2026-08-09 shingle fix) and is + stale -- superseded by the closed/open pair, not reintroduced here. + """ + return _stl( + "nacelles/nozzles/nacelle_nozzle_iris-open.stl" + if NACELLE_TILT_DEG[side] >= 45.0 + else "nacelles/nozzles/nacelle_nozzle_iris-closed.stl" + ) + + +def apply_tilt_to_rows(rows, side): + """Compose this side's configured tilt (about its own pivot) onto + nacelle_rows()'s local->hull-cruise transform, for transform_mesh() + callers (the EDF sleeves and nozzle iris -- rigidly attached to the + nacelle body, so they must tilt with it as one group).""" + flat = [v for row in rows for v in row] + base_m = App.Matrix(*flat, 0.0, 0.0, 0.0, 1.0) + total = tilt_placement(side).multiply(App.Placement(base_m)) + tm = total.Matrix + return [ + [tm.A11, tm.A12, tm.A13, tm.A14], + [tm.A21, tm.A22, tm.A23, tm.A24], + [tm.A31, tm.A32, tm.A33, tm.A34], + ] + + # --------------------------------------------------------------------------- # Main assembly # --------------------------------------------------------------------------- @@ -470,11 +612,16 @@ def assemble(): # ------------------------------------------------------------------- print("[assembly] Nacelle pods ...", flush=True) + # PL_IDENTITY at 0 deg tilt (tilt_placement() reduces to identity there), + # rotated about the per-side pivot by NACELLE_TILT_PORT_DEG/STBD_DEG + # otherwise -- see the NACELLE TILT CONFIGURATION block above. port_nac = add_mesh(doc, _stl("nacelles/nacelle_port_revs.stl"), "Nacelle_Port") - place_mesh(port_nac, PL_IDENTITY) + if port_nac is not None: + port_nac.Placement = tilt_placement("port") stbd_nac = add_mesh(doc, _stl("nacelles/nacelle_stbd_revs.stl"), "Nacelle_Stbd") - place_mesh(stbd_nac, PL_IDENTITY) + if stbd_nac is not None: + stbd_nac.Placement = tilt_placement("stbd") # ------------------------------------------------------------------- # NACELLE INTERNAL COMPONENTS (gear train, nozzle iris, EDF sleeves) @@ -493,21 +640,10 @@ def assemble(): flush=True, ) - # Nacelle local-frame Z stations, mm (nacelle_pod_50mm_tandem.scad): - # intake Z=0 .. STATOR_SLV_Z_START=90.0 .. AFT_SLV_Z_START=122.5 .. - # NOZZLE_RING_Z(=CROWN_Z)=166.25 .. NACELLE_L=185.2 (nozzle exit). - # PIVOT_Z is the spar-crank / CG station, inside the sleeve span. - STATOR_SLV_Z_START = 90.0 - AFT_SLV_Z_START = 122.5 - # PIVOT_Z re-derived 2026-07-19 for the Rev T rotating assembly: CG_Z = - # 111.5 mm. See nacelle_pod_50mm_tandem.scad header mass breakdown. The - # earlier 104.5 mm figure predates the Rev T nozzle changes: deleting the - # gear train alone left the pivot CG ~unchanged, but doubling the flaps - # 20→40 mm (CG ~198 mm), making the Ø71 throat+housing a discrete pocket - # part (~175 mm), and adding the ~19 g steel spar (on the pivot) net-move - # the CG +7.0 mm aft to 111.5 mm. The spar crank clamps at this station. - PIVOT_Z = 111.5 # pivot / spar-crank station = full-assembly nacelle CG - NOZZLE_RING_Z = 166.25 # nozzle ring station (nozzle placement) + # Nacelle local-frame Z stations -- module-level (STATOR_SLV_Z_START, + # AFT_SLV_Z_START, PIVOT_Z, NOZZLE_RING_Z; see their definitions above, + # near the NACELLE TILT CONFIGURATION block -- PIVOT_Z is hoisted there + # because nacelle_pivot_hull() needs it before assemble() runs). for side in ("port", "stbd"): label = "Port" if side == "port" else "Stbd" @@ -523,7 +659,10 @@ def assemble(): f"Nacelle_{label}_Stator_Sleeve", ) transform_mesh( - sleeve, nacelle_rows(side, _IDENTITY3, (0.0, 0.0, STATOR_SLV_Z_START)) + sleeve, + apply_tilt_to_rows( + nacelle_rows(side, _IDENTITY3, (0.0, 0.0, STATOR_SLV_Z_START)), side + ), ) # ── EDF2 aft spider sleeve ──────────────────────────────────────── @@ -535,7 +674,10 @@ def assemble(): f"Nacelle_{label}_Aft_Spider_Sleeve", ) transform_mesh( - aft_sleeve, nacelle_rows(side, _IDENTITY3, (0.0, 0.0, AFT_SLV_Z_START)) + aft_sleeve, + apply_tilt_to_rows( + nacelle_rows(side, _IDENTITY3, (0.0, 0.0, AFT_SLV_Z_START)), side + ), ) # ── Nozzle pushrod drive — Rev T (Option B) ─────────────────────── @@ -567,23 +709,30 @@ def assemble(): # placed here until nacelle_nozzle_pushrod.scad is reworked (TODO §1.1.3). # ── Nozzle iris assembly ────────────────────────────────────────── - # nacelle_nozzle_iris.stl is the combined render (cam-only unison ring - # + outer housing + 8 flaps at the closed position) from - # nacelle_nozzle_iris.scad. Rev T: the ring is a plain CAM disc (no - # gear teeth) driven by the spar-crank pushrod above; the housing has - # no drive-pinion relief and is rotationally symmetric, so identity - # rotation is fine. Translate to NOZZLE_RING_Z. + # nacelle_nozzle_iris-{closed,open}.stl are the combined renders + # (cam-only unison ring + outer housing + 8 shingled master/seal + # flaps, Rev T3) from nacelle_nozzle_iris.scad, one per petal-state + # endpoint -- see nozzle_iris_stl() above for the tilt->file + # selection and its "not continuous" caveat. Rev T: the ring is a + # plain CAM disc (no gear teeth) driven by the spar-crank pushrod + # above; the housing has no drive-pinion relief and is rotationally + # symmetric, so identity rotation is fine. Translate to + # NOZZLE_RING_Z. # History: Rev R1 compound idler (2026-06-22) -> Rev S1 internal ring # gear (2026-07-07) -> Rev T pushrod/cam-only drive (2026-07-18, - # Option B); the entire gear train is deleted and archived — see - # ARCHIVE_INDEX.md and docs/NOZZLE_DRIVE_TRADE.md. + # Option B) -> Rev T3 shingled flaps (2026-08-09); the entire gear + # train is deleted and archived — see ARCHIVE_INDEX.md and + # docs/NOZZLE_DRIVE_TRADE.md. nozzle = add_mesh( doc, - _stl("nacelles/nozzles/nacelle_nozzle_iris.stl"), + nozzle_iris_stl(side), f"Nacelle_{label}_Nozzle_Iris", ) transform_mesh( - nozzle, nacelle_rows(side, _IDENTITY3, (0.0, 0.0, NOZZLE_RING_Z)) + nozzle, + apply_tilt_to_rows( + nacelle_rows(side, _IDENTITY3, (0.0, 0.0, NOZZLE_RING_Z)), side + ), ) # Tip cap (outboard X-face end cap) — ARCHIVED 2026-06-22, legacy diff --git a/airframe/blender-scripts/add_structural_features.py b/airframe/blender-scripts/add_structural_features.py index dc257244..2fe6f4c6 100644 --- a/airframe/blender-scripts/add_structural_features.py +++ b/airframe/blender-scripts/add_structural_features.py @@ -278,21 +278,70 @@ def _ring_pocket_slabs( RING_POCKETS = { - # Cargo wing-spar zone, Y = +30 mm + # Cargo wing-spar zone, Y = +30 mm. SUPERSEDED 2026-08-25 (U4, plan + # docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md): the + # SPAR-01 couple-closure analysis found this station's own bottom chord + # cut away by the clamshell aperture (three-sided frame, not a ring — + # see WBS.md SPAR-01 finding 3), so it never closed the couple it was + # sized for. Retained here, DISABLED at the call site + # (`merge_cargo_interior.py` RING_Y30_ENABLED), per this repo's "keep + # documented, not deleted" convention — not recut, not procured. # Outer bounds at Y=30: X[-257.6..-81.1] Z[+0.5..+158.6] "cargo_Y30": _ring_pocket_slabs((-257.6, -81.1), (0.5, 158.6), 30.0), # Rear anti-ovalisation zone, Y = +290 mm # Outer bounds at Y=290: X[-235.5..-116.0] Z[+11.9..+152.4] "rear_Y290": _ring_pocket_slabs((-235.5, -116.0), (11.9, 152.4), 290.0), + # SPAR-01 CF thwart pair (U4) -- replaces cargo_Y30 as the couple closure. + # Sited on measured-intact structure straddling the wing-spar station + # (WBS.md SPAR-01 point 4): fore Y-40 is a true closed ring (1 poly, 1 + # hole); aft Y+118 has belly + both flanks intact but is not a full + # topological ring (7 disjoint loops at that cut) -- the 4-slab cutter + # below is a no-op wherever a chord is absent, same as it always has been + # for cargo_Y30/rear_Y290, so this is safe at both stations. + # Outer bounds at Y=-40 (measured, published shell): X[-234.4..-102.8] Z[43.4..142.7] + "cargo_Yn40": _ring_pocket_slabs((-234.4, -102.8), (43.4, 142.7), -40.0), + # Outer bounds at Y=+118 (measured, published shell): X[-256.1..-83.8] Z[-0.0..155.0] + "cargo_Y118": _ring_pocket_slabs((-256.1, -83.8), (-0.0, 155.0), 118.0), } # ---------- CF skid-rod bores (Ø 4.2 mm cylinders, Y-axis, 60 mm total) ---------- # Bore spans 30 mm each side of the middle/rear joint (Y = +203 mm). # Positions from STL vertex survey; see structural_analysis.md §6.3. +# LG-26 (2026-08-25, airframe/landing-gear/WBS.md): the previous constants +# here (-202.0/-135.0) missed the skid arm's own hollow cavity entirely -- +# direct measurement (docs/structural_analysis.md SS6.4) found the bore's +# nearest material at those stations was the MAIN HORSESHOE RING's wall +# (2.1-3.5 mm away), not the skid tube (13+ mm away). Re-derived by tracing +# the tube's actual inner-cavity center continuously across its full span +# (`middle_shell24_2mm_repaired.stl` Y=188-202, `rear_shell24_2mm_ +# repaired.stl` Y=208-233 -- the tube is not yet a separate feature below +# Y~188, still fused to the ring) via cross-section slicing at 2-8 mm +# intervals, identifying the isolated ~140 mm^2 annulus loop (not the +# whole-hull cross-section, which spans the same X range and is easy to +# mistake for it) and averaging its measured (X, Z) center. +# +# Port's measured center is stable across its whole span (-220.0 to -226.5, +# a straight bore fits comfortably inside the ~8.5 mm inner-cavity radius +# anywhere in range). Stbd's is NOT: it measures ~-113.7 to -118.4 on the +# middle-shell side (Y188-200) but ~-127.0 to -127.9 on the rear-shell side +# (Y208-233) -- a genuine ~10 mm discontinuity at the print-split joint +# (Y~203), too large for one straight rod to stay centered in the hollow +# cavity on both sides at once (a stiff 4 mm CF rod cannot bend to follow +# it). -122.0 is a deliberate compromise center chosen to minimize the +# worst-case miss across the full span, not a true center for either side +# -- it stays within the ~6.4 mm safety margin (inner-cavity radius minus +# bore radius) for most of the rear-shell span and all but the earliest +# (Y~188) middle-shell stations, where the tube has only just become a +# separate feature and the miss is a few mm larger than ideal. This is a +# real improvement over the previous constant (which missed the cavity by +# 10-20 mm everywhere), not a perfect fit -- verify by slicer/test-fit +# before fabrication, and see LG-26 for the option of building this as two +# independently-anchored rod segments instead of one straight rod if the +# compromise proves inadequate in practice. SKID_ROD_BORES = [ # (x_centre, z_centre, y_start, y_end) - (-202.0, 18.0, +173.0, +233.0), # port arm - (-135.0, 20.0, +173.0, +233.0), # stbd arm + (-223.7, 18.5, +173.0, +233.0), # port arm + (-122.0, 19.0, +173.0, +233.0), # stbd arm (compromise center, see above) ] SKID_ROD_RADIUS = 2.1 # mm — Ø 4.2 mm bore (CF rod 4.0 mm OD + 0.1 mm clearance/side) diff --git a/airframe/blender-scripts/merge_cargo_interior.py b/airframe/blender-scripts/merge_cargo_interior.py index 569f17a8..c56e4d11 100644 --- a/airframe/blender-scripts/merge_cargo_interior.py +++ b/airframe/blender-scripts/merge_cargo_interior.py @@ -51,7 +51,11 @@ * OPEN fwd + aft joint faces (cavity-plug cap removal). * Boss-pin bores (Joint 1 + Joint 2 — collar alignment dowels), keel channel, Y=+30 ring-frame pocket — single-sourced from add_structural_features.py. - * Wing spar bore (Ø12.3, full lateral span) + 2 wing-root mortises (through + * Wing spar F688ZZ bearing seat (Ø15.95 press-fit + Ø18.0 flange counterbore, + REF-SENSOR-019) + Ø8.3 rotating-spar clearance, PER SIDE, terminating at + the fuselage wall station (X −100 port / −240 stbd) instead of a full + lateral-span bore -- CARGO-01/CARGO-02, closed 2026-08-24 per SPAR-01 + (airframe/wings-nacelles/WBS.md §1.1.2) -- + 2 wing-root mortises (through each lateral wall), at the RE-DERIVED chord stations (129 mm root chord, LE root hull Y=−7: spar 35% → Y=+38.15 at Z=68.42 (camber midline, Rev S1b); mortise 50% → Y=+57.5 at Z=62.5). @@ -59,7 +63,9 @@ POSITIVE (added, envelope-clipped so they conform + fuse to the curved wall): * 4 clamshell hinge-pin retention blocks (from generate_cargo_hinge_retention). - * 2 wing-spar bearing bosses (Ø22, coaxial with the spar bore). + * 2 wing-spar bearing bosses (Ø27.7, coaxial with the spar bore -- re-derived + 2026-08-24 from the F688ZZ flange OD, REF-SENSOR-019, not the retired + Ø22 press-fit figure). * 2 nacelle-servo mount pads (one per lateral wall). * Inara avionics-bay standoff bosses (4, dorsal port). The dorsal Faraday access-panel CUT and the River (stbd) bay are DEFERRED (SCAD avionics @@ -121,6 +127,38 @@ sys.path.insert(0, CARGO_DIR) import generate_cargo_hinge_retention as hinge # noqa: E402 +# Reuse the wing SCAD's own S1223 table parser so this file's camber-midline +# figures are DERIVED, not hand-copied. U6 (2026-08-25) root cause: the +# WING_*_MIDLINE constants below used to be one-time hand-computed snapshots +# ("midline_frac(45.15/129) * 129, from the wing SCAD") taken against the +# PRE-U1 S1223 table. When U1 replaced that table with validated UIUC +# coordinates the wing's actual camber line moved (up to ~1.3 mm at some +# stations) but these constants were never refreshed, so the cargo shell's +# harness entry ports and spar bore were cut ~0.3-1.3 mm off the wing's real +# conduit centrelines -- tools/wing_root_deconflict.py caught this as +# "published cargo shell blocks " and "spar bore does not penetrate +# the bulkhead". Computing the midline here the same way +# tools/wing_root_deconflict.py does (via wing_spar_station_fit.surf_y() +# against the live SCAD table) makes drift like this structurally impossible. +TOOLS_DIR = os.path.join(REPO_ROOT, "tools") +sys.path.insert(0, TOOLS_DIR) +import wing_spar_station_fit as wsf # noqa: E402 + + +def _wing_midline_mm(chord_fraction): + """S1223 camber midline (mm, at WING_ROOT_CHORD) at a chord fraction. + + Parsed live from wings_s1223_revo.scad's S1223_UPPER/S1223_LOWER tables, + so this file and tools/wing_root_deconflict.py can never disagree about + where the wing's own airfoil puts a station -- see note above. + """ + with open(wsf.WING_SCAD, encoding="utf-8") as fh: + src = fh.read() + upper = wsf.scad_points(src, "S1223_UPPER") + lower = wsf.scad_points(src, "S1223_LOWER") + mid = (wsf.surf_y(upper, chord_fraction) + wsf.surf_y(lower, chord_fraction)) / 2.0 + return mid * WING_ROOT_CHORD + MARKER = b"SerenityUAV HULL-FRAME R1" # Cargo_Shell bake transform — MUST match tools/bake_hull_frame.py COMPONENTS. @@ -318,10 +356,136 @@ def extract_envelope(shell_tm): # Only the mortise reads this (the spar and the servo pad are spar-relative), so # moving it does not disturb anything else. WING_ROOT_Z = WING_CHORD_LINE_Z -WING_SPAR_MIDLINE = 10.41 # midline_frac(45.15/129) * 129, from the wing SCAD -WING_SPAR_Z = WING_CHORD_LINE_Z + WING_SPAR_MIDLINE # = 68.42 -WING_SPAR_BORE_D = 12.3 -WING_SPAR_BOSS_OD = 22.0 +# U6 (2026-08-25): was a hand-copied snapshot (10.41 mm) taken against the +# pre-U1 S1223 table; now derived live from the SCAD's own table via +# _wing_midline_mm() so it tracks the corrected airfoil automatically -- see +# the note above _wing_midline_mm's definition. +WING_SPAR_MIDLINE = _wing_midline_mm(45.15 / WING_ROOT_CHORD) # ~= 10.72 (post-U1) +WING_SPAR_Z = WING_CHORD_LINE_Z + WING_SPAR_MIDLINE # = 68.42 (pre-U1) / re-derived post-U1 + +# CARGO-01/CARGO-02 (2026-08-24): the wing's single spar is now an 8 mm OD +# rotating AISI 4130 tube per side (wings_s1223_revo.scad TILT_SPAR_OD = 8.0, +# TILT_SPAR_BORE_CLEAR = 8.3), NOT the retired 12 mm fixed CF tube this file +# used to bore for. Per SPAR-01 (airframe/wings-nacelles/WBS.md §1.1.2, +# owner 2026-08-23) each spar terminates at the fuselage wall on its own +# bearing -- it no longer crosses the bay -- so this is a SEAT for that +# bearing, not a full-lateral-span clearance bore. "Root bearing stays +# F688ZZ" (WBS.md, Rev R2d 2026-07-19 wingtip-downsize note): dimensions +# from REF-SENSOR-019 (SMB Bearings F688ZZ datasheet, fetched 2026-08-24). +WING_SPAR_BORE_D = 8.3 # mm, rotating-spar clearance = 8.0 mm OD + 0.15 mm/side + # (matches wings_s1223_revo.scad TILT_SPAR_BORE_CLEAR + # exactly -- same physical shaft, same clearance law) + +# F688ZZ (REF-SENSOR-019): bore 8 / OD 16 / width 5 mm, flange OD 18 / flange +# width 1.1 mm. Seat interference (0.025 mm/side -> seat bore = OD - 0.05 mm) +# mirrors wings_s1223_revo.scad's own TIP_BRG_SEAT_D convention for the +# wingtip MF128ZZ bearing, so both bearing seats in this airframe are sized +# by the same rule. +ROOT_BRG_OD = 16.0 # mm, F688ZZ outer diameter (REF-SENSOR-019) +ROOT_BRG_SEAT_D = 15.95 # mm, press-fit seat bore, 0.025 mm/side interference +ROOT_BRG_W = 5.0 # mm, bearing width = seat depth +ROOT_BRG_FLANGE_OD = 18.0 # mm, flange OD -> shallow counterbore at the boss face +ROOT_BRG_FLANGE_T = 1.1 # mm, flange counterbore depth (= flange width) + +# Boss OD re-derived from the F688ZZ FLANGE OD (18.0 mm, the largest feature +# the boss must enclose) using the SAME 4.85 mm radial wall margin the Rev S1 +# boss originally carried around its old 12.3 mm bore ((22.0-12.3)/2 = 4.85): +# 18.0 + 2*4.85 = 27.7 mm. Explicitly NOT the retired Ø22 press-fit figure -- +# that sized a 12.3 mm bore with no bearing at all, and 22 mm does not clear +# an 18 mm flange with any wall left (22-18)/2 = 2.0 mm, under this boss's own +# established 4.85 mm margin. +WING_SPAR_BOSS_OD = 27.7 + +# --------------------------------------------------------------------------- +# Wing root tie-rod couple (U5/KTD1, 2026-08-24) — two bonded CF rods that +# react the wing-root moment as a couple, replacing the tenon's former +# structural role (airframe/fuselage-mid/WBS.md §1.1.1.2 CARGO-03c). Mirrors +# the spar bearing boss's own embed pattern (PORT_INB/PORT_OUTB) exactly, at +# each rod's own chordwise station. Stations/diameters/embeds MUST be kept in +# step with wings_s1223_revo.scad's ROD_FWD_*/ROD_AFT_* -- same physical rods, +# no other link between the two files (same convention as WING_SPAR_Y above). +# +# Y/Z stations use the same midline-tracking derivation as WING_SPAR_Y/Z: +# Y = WING_LE_ROOT_Y + station (mm from LE); Z = WING_CHORD_LINE_Z + the +# S1223 camber-midline height at that station, at the ROOT chord (both rods +# are ROOT-ONLY -- see the wing SCAD's ROD_FWD_*/ROD_AFT_* comment for why +# full-span is not needed for a root-reacting tie rod). Midline heights +# below are freshly measured against the CORRECTED (WING-01-fixed) S1223 +# table via tools/wing_spar_station_fit.py, since the WING_SPAR_MIDLINE +# constant above predates that fix and is not re-derived here. +ROD_FWD_STATION = 14.0 # [mm] chordwise station aft of LE (wings_s1223_revo.scad ROD_FWD_STATION) +ROD_FWD_MIDLINE = 5.768 # [mm] S1223 camber midline at 14.0 mm, root chord +ROD_FWD_Y = WING_LE_ROOT_Y + ROD_FWD_STATION # = +7.00 +ROD_FWD_D = 8.2 # [mm] clearance bore = 8 mm CF rod + 0.1 mm/side +ROD_FWD_BOSS_OD = 17.9 # [mm] bore + 2 x 4.85 mm radial margin (spar-boss convention) +# 41 mm, not the round 40: an exact 40 mm embed puts this boss's inboard end +# cap exactly coplanar with the main spar boss's own end cap (both at +# PORT_INB = -100.0), which produced a degenerate near-zero-length +# non-manifold edge in the boolean-merged, float32-repaired shell (found by +# tools/validate_stls.py-style verify() during U5 verification -- 1 +# nonmanifold edge at X ~ -99.2, on this boss's end-cap rim). 1 mm of +# separation from that coincident plane clears it; forward-rod bearing FOS +# is already 5.26 at 40 mm, so the extra mm only helps. +ROD_FWD_EMBED = 41.0 # [mm] fuselage-side embed depth + +# LG-25 (2026-08-25, airframe/landing-gear/WBS.md, option 1 selected by +# owner): the fwd boss at full 17.9 mm OD stands up to 12.0 mm proud of the +# fore landing-gear bay's flange-rebate pocket (5 mm deep) at both fore +# corners -- lg_bay_features() protects this boss from the bay's own cuts +# (LG-10.4), so the boss itself must relieve locally instead. Stepped, not +# tapered (a taper needs a manifold-safe cone-frustum join this repo has no +# existing helper for; a step is a plain trimesh boolean union, same pattern +# as every other keep-out here). +# +# The overlap is NOT near the boss's wall-facing (OUTB) end as the bay's +# canted plate frame might suggest at a glance -- measured directly (boolean +# intersection of the unrelieved boss against the bay's own rebate volume, +# both corners), the actual overlap sits at hull X [-98.7..-77.1] (port) / +# [-259.5..-237.9] (stbd), i.e. against the *_INB end of each boss (X -100 / +# -237), not *_OUTB (-60 / -278). Relieve there instead: full 17.9 mm OD for +# most of the embed, stepped down to `ROD_FWD_BOSS_OD_RELIEF` for the last +# `ROD_FWD_BOSS_RELIEF_LEN` mm nearest the INB end (25 mm covers the +# measured ~21.6 mm overlap depth with margin). +# Radial margin over the 8.2 mm bore drops from 4.85 mm to 1.2 mm there -- +# thinner than the spar-boss convention, right at this repo's cited 1.16 mm +# minimum-wall figure (Rev R1a) plus a hair of margin, and only over a short +# local length, not along the rod's full structural embed. Value tuned +# empirically against `tools/landing_gear_wing_clearance.py --proud` (12.0 +# mm proud/1632-1909 mm^3 at 17.9 mm OD -> still 12.0 mm/691-718 mm^3 at +# 12.0 mm OD -> fully clear, "none -- the rebate shaves the whole footprint", +# at 10.6 mm OD) -- not derived in closed form, because the interference is +# measured in the bay's own canted plate frame, not this file's hull frame, +# and the reported "proud depth" turned out to depend on OD in a way that +# wasn't obvious from the plate-frame geometry alone (a partial reduction +# left the same 12.0 mm depth reading with much less volume; only the full +# reduction to 10.6 mm actually cleared the check). +ROD_FWD_BOSS_OD_RELIEF = 10.6 # [mm] stepped-down OD at the relieved end +ROD_FWD_BOSS_RELIEF_LEN = 25.0 # [mm] length of the relief, from the INB face + +ROD_AFT_STATION = 62.0 # [mm] chordwise station aft of LE (wings_s1223_revo.scad ROD_AFT_STATION) +ROD_AFT_MIDLINE = 11.182 # [mm] S1223 camber midline at 62.0 mm, root chord +ROD_AFT_Y = WING_LE_ROOT_Y + ROD_AFT_STATION # = +55.00 +ROD_AFT_D = 6.2 # [mm] clearance bore = 6 mm CF rod + 0.1 mm/side +ROD_AFT_BOSS_OD = 15.9 # [mm] bore + 2 x 4.85 mm radial margin (spar-boss convention) +# 42 mm, not 40: at 40 mm the two-rod couple-force split gives the aft rod +# FOS 3.945 against the 5 MPa bond-limited CF-PETG allowable -- just under +# the §3 FOS 4.0 target (see the derivation in wings_s1223_revo.scad and +# tools/wing_spar_carrythrough.py report_root_joint()). 42 mm clears at +# FOS 4.14. +ROD_AFT_EMBED = 42.0 # [mm] fuselage-side embed depth + +ROD_FWD_Z = WING_CHORD_LINE_Z + ROD_FWD_MIDLINE # = +63.778 +ROD_AFT_Z = WING_CHORD_LINE_Z + ROD_AFT_MIDLINE # = +69.192 + +# Lateral-wall X brackets, mirroring PORT_INB/PORT_OUTB and STBD_INB/STBD_OUTB +# exactly (same outboard reference, -60/-278; inboard walked to the rod's own +# embed depth). Envelope-clipped to real skin by main(), same as the spar +# boss, so only rough bracketing is needed -- the outboard end is clipped to +# whatever material actually exists. +ROD_FWD_PORT_OUTB, ROD_FWD_PORT_INB = -60.0, -60.0 - ROD_FWD_EMBED # -60 / -100 +ROD_FWD_STBD_OUTB, ROD_FWD_STBD_INB = -278.0, -278.0 + ROD_FWD_EMBED # -278 / -238 +ROD_AFT_PORT_OUTB, ROD_AFT_PORT_INB = -60.0, -60.0 - ROD_AFT_EMBED # -60 / -102 +ROD_AFT_STBD_OUTB, ROD_AFT_STBD_INB = -278.0, -278.0 + ROD_AFT_EMBED # -278 / -236 # Wing harness entry ports (Rev S1c, 2026-08-18) — NEW. # @@ -347,9 +511,12 @@ def extract_envelope(shell_tm): WING_EDF_STATION_FWD = 22.75 WING_EDF_STATION_AFT = 32.25 WING_ENC_STATION = 54.0 -WING_EDF_MIDLINE_FWD = 8.685 -WING_EDF_MIDLINE_AFT = 10.088 -WING_ENC_MIDLINE = 9.823 +# U6 (2026-08-25): these three were hand-copied pre-U1 snapshots (8.685, +# 10.088, 9.823) that drifted up to ~1.3 mm from the corrected S1223 table -- +# same root cause as WING_SPAR_MIDLINE above. Now derived live. +WING_EDF_MIDLINE_FWD = _wing_midline_mm(WING_EDF_STATION_FWD / WING_ROOT_CHORD) +WING_EDF_MIDLINE_AFT = _wing_midline_mm(WING_EDF_STATION_AFT / WING_ROOT_CHORD) +WING_ENC_MIDLINE = _wing_midline_mm(WING_ENC_STATION / WING_ROOT_CHORD) WING_EDF_Y_FWD = WING_LE_ROOT_Y + WING_EDF_STATION_FWD # = +15.75 WING_EDF_Y_AFT = WING_LE_ROOT_Y + WING_EDF_STATION_AFT # = +25.25 @@ -472,6 +639,14 @@ def extract_envelope(shell_tm): NSVMT_HOLE_S_Z = 10.0 / 2.0 # = 5.00, datasheet NSVMT_M3_D = 4.1 +# SPAR-01/U4 (2026-08-25): the Y=+30 ring's own bottom chord is cut away by +# the clamshell aperture (WBS.md SPAR-01 finding 3, a three-sided frame, not +# a ring), so it never closed the wing-spar couple it was sized for. The two +# CF thwarts (fore Y-40, aft Y+118 -- see asf.RING_POCKETS) replace it as the +# couple closure; this gate gets flipped False only once a real geometry +# alternative reopens the Y=+30 station, not on a whim. +RING_Y30_ENABLED = False + # Inara avionics-bay standoff bosses (dorsal port half, additive only). INARA_X = -135.0 INARA_Y = 90.0 @@ -616,6 +791,23 @@ def extract_envelope(shell_tm): # edge by 7.7-14.5 mm^3, which is accepted and recorded here. +def _stepped_x_cylinder(y_cen, z_cen, x_far, x_near, od_full, od_relief, + relief_len): + """Boss stepped down to `od_relief` for `relief_len` mm nearest x_near + (the end to relieve), full `od_full` for the rest (LG-25, see + ROD_FWD_BOSS_OD_RELIEF above). Booleans the two segments into one + manifold rather than concatenating them raw -- to_man() requires a + genuinely manifold input, and two abutting cylinders are not that until + unioned.""" + direction = 1.0 if x_far > x_near else -1.0 + x_step = x_near + direction * relief_len + lo, hi = sorted([x_far, x_step]) + full = x_cylinder(y_cen, z_cen, lo, hi, od_full / 2.0) + lo2, hi2 = sorted([x_step, x_near]) + relief = x_cylinder(y_cen, z_cen, lo2, hi2, od_relief / 2.0) + return from_man(to_man(full) + to_man(relief)) + + def wing_keepout_positives(envelope_tm=None): """Wing material the gear bay's cuts must not remove. (label, solid). @@ -641,6 +833,25 @@ def wing_keepout_positives(envelope_tm=None): STBD_OUTB, STBD_INB, NSVMT_Y - NSVMT_PAD_W / 2, NSVMT_Y + NSVMT_PAD_W / 2, NSVMT_Z - NSVMT_PAD_H / 2, NSVMT_Z + NSVMT_PAD_H / 2)), + # U5/KTD1 (2026-08-24): wing-root tie-rod bosses, mirroring the spar + # boss's own embed-boss pattern exactly. + # LG-25 (owner-selected option 1): stepped down near the INB end, + # where the fore landing-gear bay's flange rebate footprint left the + # boss standing up to 12.0 mm proud (measured overlap, see the + # ROD_FWD_BOSS_OD_RELIEF comment above -- NOT the OUTB/wall-facing + # end intuition would suggest). + ("rod fwd boss port", _stepped_x_cylinder( + ROD_FWD_Y, ROD_FWD_Z, ROD_FWD_PORT_OUTB, ROD_FWD_PORT_INB, + ROD_FWD_BOSS_OD, ROD_FWD_BOSS_OD_RELIEF, ROD_FWD_BOSS_RELIEF_LEN)), + ("rod fwd boss stbd", _stepped_x_cylinder( + ROD_FWD_Y, ROD_FWD_Z, ROD_FWD_STBD_OUTB, ROD_FWD_STBD_INB, + ROD_FWD_BOSS_OD, ROD_FWD_BOSS_OD_RELIEF, ROD_FWD_BOSS_RELIEF_LEN)), + ("rod aft boss port", x_cylinder( + ROD_AFT_Y, ROD_AFT_Z, ROD_AFT_PORT_INB, ROD_AFT_PORT_OUTB, + ROD_AFT_BOSS_OD / 2.0)), + ("rod aft boss stbd", x_cylinder( + ROD_AFT_Y, ROD_AFT_Z, ROD_AFT_STBD_OUTB, ROD_AFT_STBD_INB, + ROD_AFT_BOSS_OD / 2.0)), ] if envelope_tm is None: return raw @@ -687,13 +898,77 @@ def wing_harness_ports(): ] +def spar_bearing_seat_cuts(outb_x, inb_x, label, harness_inb=None): + """CARGO-01/CARGO-02 (2026-08-24): one side's F688ZZ bearing seat + + rotating-spar clearance bore, coaxial with the spar boss, STOPPING at the + wall station `inb_x` instead of crossing the bay. `outb_x` is the + wing-facing (outboard) end of the boss, where the bearing's flange seats + flush; `inb_x` is the bay-facing (inboard) end -- the spar's inboard tip, + per SPAR-01's measured "spar inboard end if it stops at the boss" station + (X -100 port / -240 stbd). Three coaxial cylinders, outboard to inboard: + 1. flange counterbore (ROOT_BRG_FLANGE_OD, ROOT_BRG_FLANGE_T deep) -- + seats the F688ZZ flange flush with the boss face. + 2. bearing seat (ROOT_BRG_SEAT_D, ROOT_BRG_W deep) -- press-fit for the + bearing's outer race. + 3. rotating-spar clearance (WING_SPAR_BORE_D) for the remainder of the + boss depth, down to `inb_x` -- the spar's shaft, NOT a through-bore + to the opposite wall. + + U6 (2026-08-25): a 4th cut, "nav-light wire exit", was added when + tools/wing_root_deconflict.py's bulkhead-penetration sweep found 7.4 mm^3 + of uncut material on the STBD side only, 15-45 mm inboard of `inb_x`. + Root cause: the spar's rotating tube physically ends at `inb_x` (the + boss's own inboard tip), so cut #3 above stops there too -- but the + nav-light 3-core wire that rides inside the spar's hollow ID does NOT + stop there. It has to keep going, loose, to the same deep interior wall + the EDF/Hall harness ports were already cut through + (`WING_HARNESS_INB_PORT`/`_STBD`, "past the ... encoder-line wall"). On + port that wall sits close enough to `inb_x` (-100 -> harness limit -125) + that no separate cut was needed by coincidence; on stbd the gap is wider + (-240 -> -213) and the wire path was left uncut. Pass `harness_inb` (the + same constant `wing_harness_ports()`/`wing_keepout_negatives()` already + use for that side) to extend the wire-clearance bore the rest of the way; + omit it to keep the old 3-cut behaviour (there is no other caller). + Returns a list of (label, solid) tuples, matching the module's convention. + """ + span = abs(outb_x - inb_x) + depth = ROOT_BRG_FLANGE_T + ROOT_BRG_W + assert depth < span, ( + f"{label}: flange+seat depth {depth} mm exceeds boss span {span} mm" + ) + # Walk inward from outb_x toward inb_x by a signed step (handles both the + # port boss, where inb_x < outb_x, and the stbd boss, where inb_x > outb_x). + step = -1.0 if inb_x < outb_x else 1.0 + x0 = outb_x + x1 = outb_x + step * ROOT_BRG_FLANGE_T + x2 = x1 + step * ROOT_BRG_W + cuts = [ + (f"{label} bearing flange counterbore", x_cylinder( + WING_SPAR_Y, WING_SPAR_Z, min(x0, x1), max(x0, x1), + ROOT_BRG_FLANGE_OD / 2.0)), + (f"{label} bearing seat", x_cylinder( + WING_SPAR_Y, WING_SPAR_Z, min(x1, x2), max(x1, x2), + ROOT_BRG_SEAT_D / 2.0)), + (f"{label} spar clearance", x_cylinder( + WING_SPAR_Y, WING_SPAR_Z, min(x2, inb_x), max(x2, inb_x), + WING_SPAR_BORE_D / 2.0)), + ] + if harness_inb is not None and abs(harness_inb - inb_x) > 0.01: + cuts.append((f"{label} nav-light wire exit", x_cylinder( + WING_SPAR_Y, WING_SPAR_Z, min(inb_x, harness_inb), + max(inb_x, harness_inb), WING_SPAR_BORE_D / 2.0))) + return cuts + + def wing_keepout_negatives(): """Wing voids the gear bay's added material must not intrude into.""" my0, my1 = WING_MORT_Y - MORT_W / 2, WING_MORT_Y + MORT_W / 2 mz0, mz1 = WING_ROOT_Z - MORT_H / 2, WING_ROOT_Z + MORT_H / 2 return [ - ("spar bore", x_cylinder( - WING_SPAR_Y, WING_SPAR_Z, -270.0, -70.0, WING_SPAR_BORE_D / 2.0)), + *spar_bearing_seat_cuts(PORT_OUTB, PORT_INB, "port", + harness_inb=WING_HARNESS_INB_PORT), + *spar_bearing_seat_cuts(STBD_OUTB, STBD_INB, "stbd", + harness_inb=WING_HARNESS_INB_STBD), # CARGO-03 (2026-08-24): these used to span PORT_INB+1 .. PORT_OUTB-10 # (X -99..-70), described as cutting "through each wall". They did not: # at the mortise station the wall lies at X -115..-99, so the cut began @@ -714,6 +989,22 @@ def wing_keepout_negatives(): # A gear-bay flange that plugs a harness port is the same class of # failure as one that plugs the spar bore: it is found at assembly, # with the wire in hand, and it cannot be relieved from outside. + # + # U5/KTD1 (2026-08-24): wing-root tie-rod clearance bores, same + # treatment as the spar bore -- deep bonded holes that must stay + # open for the CF rod to seat, not be plugged by the gear bay. + ("rod fwd bore port", x_cylinder( + ROD_FWD_Y, ROD_FWD_Z, ROD_FWD_PORT_INB, ROD_FWD_PORT_OUTB, + ROD_FWD_D / 2.0)), + ("rod fwd bore stbd", x_cylinder( + ROD_FWD_Y, ROD_FWD_Z, ROD_FWD_STBD_OUTB, ROD_FWD_STBD_INB, + ROD_FWD_D / 2.0)), + ("rod aft bore port", x_cylinder( + ROD_AFT_Y, ROD_AFT_Z, ROD_AFT_PORT_INB, ROD_AFT_PORT_OUTB, + ROD_AFT_D / 2.0)), + ("rod aft bore stbd", x_cylinder( + ROD_AFT_Y, ROD_AFT_Z, ROD_AFT_STBD_OUTB, ROD_AFT_STBD_INB, + ROD_AFT_D / 2.0)), ] + wing_harness_ports() @@ -1006,11 +1297,29 @@ def build_negatives(shell_tm, envelope_tm=None): ) ) notes.append("keel channel") - for xm, xx, zm, zx, ym, yx in asf.RING_POCKETS["cargo_Y30"]: + if RING_Y30_ENABLED: + for xm, xx, zm, zx, ym, yx in asf.RING_POCKETS["cargo_Y30"]: + cutters.append(box(xm, xx, ym, yx, zm, zx)) + notes.append("ring pocket Y=30") + else: + notes.append("ring pocket Y=30 GATED OFF -- superseded by the U4 " + "CF thwart pair (SPAR-01); see RING_Y30_ENABLED") + + # SPAR-01/U4: CF thwart pair (fore Y-40, aft Y+118) closing the wing-spar + # couple that the retired Y=+30 ring never closed (its bottom chord was + # cut away by the clamshell aperture -- see WBS.md SPAR-01 finding 3). + # Same locating-groove pattern as the existing ring frames: a 2 mm + # CF-PLATE-2MM part bonds into a shallow perimeter pocket, not a printed + # solid, so only the pocket is a Blender/hull-frame feature here. + for xm, xx, zm, zx, ym, yx in asf.RING_POCKETS["cargo_Yn40"]: + cutters.append(box(xm, xx, ym, yx, zm, zx)) + for xm, xx, zm, zx, ym, yx in asf.RING_POCKETS["cargo_Y118"]: cutters.append(box(xm, xx, ym, yx, zm, zx)) - notes.append("ring pocket Y=30") + notes.append("CF thwart pockets Y=-40 (fore) / Y=+118 (aft), U4/SPAR-01") - # Wing spar bore (full lateral span) + 2 root mortises (through each wall). + # Wing spar F688ZZ bearing seat + rotating-spar clearance (per side, + # terminating at the wall -- CARGO-01/CARGO-02) + 2 root mortises (through + # each wall). # Built by wing_keepout_negatives() so the solids the gear bay is trimmed # against are the SAME solids the hull is actually cut with (LG-10.4). for label, solid in wing_keepout_negatives(): @@ -1052,14 +1361,16 @@ def build_positives(shell_tm, envelope_tm=None): feats.append(hinge._block(side, station)) notes.append("4 hinge retention blocks") - # Wing-spar bearing bosses (Ø22, coaxial with the spar) and the two - # nacelle-servo mount pads -- deep boxes/cylinders, envelope-clipped. - # Built by wing_keepout_positives() so the solids the gear bay is trimmed - # against are the SAME solids the hull actually carries (LG-10.4). + # Wing-spar bearing bosses (Ø27.7, coaxial with the spar), the two + # nacelle-servo mount pads, and (U5/KTD1) the two wing-root tie-rod + # bosses -- deep boxes/cylinders, envelope-clipped. Built by + # wing_keepout_positives() so the solids the gear bay is trimmed against + # are the SAME solids the hull actually carries (LG-10.4). for _label, solid in wing_keepout_positives(): # raw: main() clips feats.append(solid) notes.append("2 wing-spar bearing bosses") notes.append("2 nacelle-servo mount pads") + notes.append("2 wing-root tie-rod bosses (fwd+aft, port+stbd)") # Inara avionics-bay standoff bosses (dorsal port, deep Z-cyl, clipped). n = 0 @@ -1175,6 +1486,56 @@ def verify(mesh): return ok +DEGENERATE_EDGE_MM = 0.05 # mm; see collapse_degenerate_edges() -- far below + # any FDM manufacturing tolerance (~0.1-0.2 mm), so + # collapsing an edge this short cannot be a real + # design feature. + + +def collapse_degenerate_edges(mesh, max_len=DEGENERATE_EDGE_MM): + """Collapse near-zero-length NON-MANIFOLD edges (>2 incident faces). + + U5/KTD1 (2026-08-24): the wing-root tie-rod bosses (ROD_FWD_*/ROD_AFT_*) + graze the fore landing-gear bay's aperture/rebate cutters by a genuinely + tiny amount (< 0.004 mm^3 measured) -- well below any manufacturing + tolerance, but manifold3d's boolean kernel can leave a near-duplicate + vertex pair at exactly that graze instead of merging it, producing an + edge so short (~0.001-0.002 mm observed) that it is a mesh-processing + artifact, not a real feature -- yet it is NON-MANIFOLD (3+ incident + faces), which `close_zero_area_slits()` above does not touch (that + targets boundary LOOPS, not this). + + A GLOBAL coarser `merge_vertices(digits_vertex=...)` pass was tried and + rejected: at 0.01 mm resolution it merges unrelated, legitimately close + (but distinct) vertices elsewhere in this ~900k-face shell, trading one + non-manifold edge for dozens more. This is deliberately LOCAL instead: + it only touches edges that are BOTH non-manifold AND shorter than + `max_len`, so it cannot affect any edge that is a real design feature at + printable scale. Verified 2026-08-24: collapses the one edge found, + volume unchanged to 5 significant figures, 0 new defects. + """ + ec = np.bincount(mesh.edges_unique_inverse, minlength=len(mesh.edges_unique)) + nonman = np.where(ec > 2)[0] + if not len(nonman): + return mesh, 0 + remap = np.arange(len(mesh.vertices)) + collapsed = 0 + for i in nonman: + v0, v1 = mesh.edges_unique[i] + d = np.linalg.norm(mesh.vertices[v0] - mesh.vertices[v1]) + if d < max_len: + remap[remap == remap[v1]] = remap[v0] + collapsed += 1 + if not collapsed: + return mesh, 0 + out = trimesh.Trimesh(vertices=mesh.vertices.copy(), + faces=remap[mesh.faces], process=False) + out.update_faces(out.nondegenerate_faces()) + out.update_faces(out.unique_faces()) + out.remove_unreferenced_vertices() + return out, collapsed + + def close_zero_area_slits(mesh, flat_mm=SLIT_FLAT_MM): """Close boundary loops that enclose no area, and report how many. @@ -1262,6 +1623,16 @@ def finalize_watertight(mesh): mesh, n_slit = close_zero_area_slits(mesh) if n_slit: print(f" finalize: closed {n_slit} zero-area collinear slit(s)") + # U5/KTD1: a residual NON-MANIFOLD (not boundary) edge -- e.g. the wing- + # root tie-rod boss grazing an LG-bay cutter by a sub-manufacturing- + # tolerance sliver -- is neither a hole (close_zero_area_slits) nor + # something fill_holes touches (it only adds faces to open boundary + # loops). Try collapsing it before falling back to fill_holes. + if not mesh.is_watertight: + mesh, n_collapsed = collapse_degenerate_edges(mesh) + if n_collapsed: + print(f" finalize: collapsed {n_collapsed} degenerate " + f"(< {DEGENERATE_EDGE_MM} mm) non-manifold edge(s)") if not mesh.is_watertight: trimesh.repair.fill_holes(mesh) trimesh.repair.fix_normals(mesh) diff --git a/airframe/blender-scripts/serenity_render_views.py b/airframe/blender-scripts/serenity_render_views.py index 083497ad..9d2365a2 100644 --- a/airframe/blender-scripts/serenity_render_views.py +++ b/airframe/blender-scripts/serenity_render_views.py @@ -104,8 +104,14 @@ ("nacelles/edf_stator_sleeve.stl", "Stator_Sleeve", DETAIL_COLOR), ("nacelles/edf_aft_spider_sleeve.stl", "Spider_Sleeve", DETAIL_COLOR), # nacelle_nozzle_closed_asm.stl (old Rev R1 axial-hinge nozzle) archived - # 2026-07-20; use the current Rev T iris assembly. See ARCHIVE_INDEX.md. - ("nacelles/nozzles/nacelle_nozzle_iris.stl", "Nozzle_Asm", DETAIL_COLOR), + # 2026-07-20; use the current Rev T3 iris assembly. The bare + # nacelle_nozzle_iris.stl (2026-07-19, pre-dates the Rev T3 shingle fix, + # 2026-08-09) was itself archived 2026-08-25 -- see ARCHIVE_INDEX.md. + # Rev T3 split the combined render into two named-endpoint STLs (open/ + # closed petals, see airframe/wings-nacelles/WBS.md SS1.1.3.1); this + # static overview render has no tilt concept, so it uses the closed + # (cruise, 0 deg) endpoint, matching FreeCAD's own untilted default. + ("nacelles/nozzles/nacelle_nozzle_iris-closed.stl", "Nozzle_Asm", DETAIL_COLOR), # Cargo bay doors (printed; positioned in cargo-section local frame) ("fuselage/cargo/cargo_door_port.stl", "Cargo_Door_Port", FUSELAGE_COLOR), ("fuselage/cargo/cargo_door_stbd.stl", "Cargo_Door_Stbd", FUSELAGE_COLOR), diff --git a/airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv b/airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv index ec8b835d..74e3ddb3 100644 --- a/airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv +++ b/airframe/diagrams/ring_frames/ring_cargo_Y30_inner.csv @@ -1,2855 +1,3208 @@ -X_mm,Z_mm,path_index --121.198,144.000,0 --120.998,143.909,0 --120.709,143.775,0 --120.400,143.631,0 --120.055,143.472,0 --119.737,143.322,0 --119.537,143.231,0 --119.337,143.136,0 --119.081,143.015,0 --118.800,142.877,0 --118.456,142.702,0 --118.143,142.541,0 --117.943,142.430,0 --117.743,142.319,0 --117.487,142.162,0 --117.200,141.988,0 --116.933,141.820,0 --116.692,141.669,0 --116.492,141.544,0 --116.292,141.419,0 --115.958,141.239,0 --115.581,141.024,0 --115.270,140.909,0 --115.098,140.825,0 --115.021,140.807,0 --114.703,140.679,0 --114.480,140.631,0 --114.018,140.412,0 --113.588,140.299,0 --113.419,140.168,0 --113.412,140.162,0 --113.396,140.139,0 --113.153,139.805,0 --112.988,139.601,0 --112.820,139.192,0 --112.810,139.176,0 --112.650,138.869,0 --112.602,138.747,0 --112.484,138.391,0 --112.306,138.026,0 --112.147,137.668,0 --112.048,137.508,0 --111.987,137.348,0 --111.866,137.144,0 --111.670,136.727,0 --111.449,136.365,0 --111.319,136.135,0 --111.218,135.971,0 --111.146,135.852,0 --110.987,135.608,0 --110.782,135.278,0 --110.564,134.943,0 --110.438,134.743,0 --110.312,134.543,0 --110.165,134.288,0 --110.000,134.000,0 --109.833,133.695,0 --109.688,133.426,0 --109.587,133.226,0 --109.487,133.026,0 --109.340,132.731,0 --109.176,132.400,0 --109.024,132.090,0 --108.888,131.817,0 --108.793,131.617,0 --108.696,131.417,0 --108.562,131.127,0 --108.408,130.800,0 --108.251,130.436,0 --108.113,130.129,0 --108.031,129.929,0 --107.945,129.729,0 --107.853,129.493,0 --107.730,129.200,0 --107.579,128.800,0 --107.413,128.373,0 --107.303,128.075,0 --107.237,127.899,0 --107.194,127.782,0 --107.100,127.526,0 --106.982,127.210,0 --106.831,126.800,0 --106.655,126.325,0 --106.536,126.004,0 --106.404,125.641,0 --106.394,125.615,0 --106.327,125.443,0 --106.244,125.216,0 --106.091,124.800,0 --105.946,124.400,0 --105.804,124.001,0 --105.690,123.683,0 --105.608,123.444,0 --105.561,123.311,0 --105.500,123.141,0 --105.391,122.831,0 --105.243,122.400,0 --105.104,122.000,0 --104.975,121.624,0 --104.871,121.323,0 --104.800,121.112,0 --104.746,120.957,0 --104.685,120.784,0 --104.565,120.435,0 --104.417,120.000,0 --104.279,119.600,0 --104.156,119.197,0 --104.065,118.918,0 --103.995,118.655,0 --103.962,118.538,0 --103.948,118.280,0 --103.919,118.000,0 --103.930,117.514,0 --103.944,117.200,0 --103.969,116.592,0 --103.979,116.400,0 --103.987,115.724,0 --103.989,115.600,0 --103.986,114.950,0 --103.988,114.800,0 --103.990,114.119,0 --103.992,114.000,0 --103.999,113.589,0 --103.999,113.577,0 --104.006,113.365,0 --104.013,113.185,0 --104.010,112.719,0 --104.013,112.372,0 --104.006,112.095,0 --104.003,111.965,0 --103.986,111.799,0 --103.967,111.596,0 --103.895,111.163,0 --103.834,110.800,0 --103.716,110.400,0 --103.600,110.000,0 --103.469,109.658,0 --103.329,109.297,0 --103.243,109.097,0 --103.157,108.897,0 --103.040,108.639,0 --102.931,108.400,0 --102.757,108.022,0 --102.559,107.586,0 --102.467,107.389,0 --102.390,107.223,0 --102.344,107.122,0 --102.215,106.834,0 --102.019,106.419,0 --101.808,105.964,0 --101.685,105.711,0 --101.616,105.570,0 --101.530,105.413,0 --101.412,105.206,0 --101.193,104.830,0 --100.993,104.502,0 --100.864,104.302,0 --100.731,104.102,0 --100.556,103.846,0 --100.382,103.600,0 --100.219,103.365,0 --100.050,103.129,0 --100.019,103.083,0 --100.000,103.056,0 --100.000,102.692,0 --100.000,102.553,0 --100.000,102.395,0 --100.000,102.234,0 --100.000,102.099,0 --100.000,101.936,0 --100.000,101.561,0 --100.000,101.384,0 --100.000,101.251,0 --100.000,101.169,0 --100.000,100.591,0 --100.000,100.327,0 --100.000,99.194,0 --100.000,98.952,0 --100.000,97.967,0 --100.000,97.767,0 --100.000,96.915,0 --100.000,95.305,0 --100.000,95.297,0 --100.000,95.251,0 --100.000,95.163,0 --100.000,95.031,0 --100.000,94.854,0 --100.000,94.628,0 --100.000,94.350,0 --100.000,94.018,0 --100.000,93.630,0 --100.000,93.184,0 --100.000,92.682,0 --100.000,92.126,0 --100.000,91.521,0 --100.000,90.879,0 --100.000,90.212,0 --100.000,89.540,0 --100.000,88.887,0 --100.000,88.280,0 --100.000,87.748,0 --100.000,87.318,0 --100.000,87.012,0 --100.000,85.246,0 --100.000,84.992,0 --100.000,84.762,0 --100.000,84.560,0 --100.000,84.391,0 --100.000,84.387,0 --100.000,84.382,0 --100.000,84.377,0 --100.000,84.371,0 --100.000,84.364,0 --100.000,84.358,0 --100.000,84.351,0 --100.000,84.344,0 --100.000,84.337,0 --100.000,84.330,0 --100.000,84.011,0 --100.000,84.005,0 --100.000,83.999,0 --100.000,83.993,0 --100.000,83.986,0 --100.000,83.981,0 --100.000,83.975,0 --100.000,83.970,0 --100.000,83.752,0 --100.000,83.747,0 --100.000,83.550,0 --100.000,83.545,0 --100.000,83.540,0 --100.000,83.412,0 --100.000,83.214,0 --100.000,83.043,0 --100.000,82.901,0 --100.000,82.790,0 --100.000,82.711,0 --100.000,78.000,0 --88.668,78.000,0 --88.067,78.000,0 --87.401,78.000,0 --86.658,78.000,0 --85.839,78.000,0 --85.773,78.000,0 --85.722,78.000,0 --84.100,78.000,0 --84.100,84.301,0 --84.100,87.059,0 --84.100,87.345,0 --84.100,90.326,0 --84.115,90.327,0 --84.158,90.331,0 --84.358,90.426,0 --84.558,90.533,0 --84.797,90.733,0 --85.045,90.933,0 --85.255,91.306,0 --85.445,91.634,0 --85.543,91.911,0 --85.589,92.036,0 --85.640,92.201,0 --85.704,92.403,0 --85.851,92.835,0 --85.979,93.200,0 --86.117,93.468,0 --86.265,93.743,0 --86.513,93.943,0 --86.758,94.143,0 --86.958,94.286,0 --87.158,94.430,0 --87.374,94.585,0 --87.600,94.748,0 --87.862,94.936,0 --88.115,95.118,0 --88.315,95.261,0 --88.593,95.461,0 --89.272,95.948,0 --89.472,96.092,0 --89.642,96.214,0 --89.731,96.278,0 --90.000,96.471,0 --90.188,96.605,0 --90.271,96.665,0 --90.420,96.772,0 --90.629,96.923,0 --90.829,97.066,0 --91.308,97.410,0 --91.726,97.710,0 --92.026,97.925,0 --92.265,98.097,0 --92.544,98.297,0 --92.744,98.440,0 --92.967,98.601,0 --93.200,98.769,0 --93.451,98.952,0 --93.693,99.128,0 --93.893,99.286,0 --94.093,99.445,0 --94.337,99.645,0 --94.582,99.845,0 --94.782,100.021,0 --94.982,100.196,0 --95.198,100.396,0 --95.415,100.596,0 --95.615,100.791,0 --95.815,100.984,0 --96.008,101.184,0 --96.202,101.384,0 --96.402,101.607,0 --96.602,101.829,0 --96.768,102.029,0 --96.938,102.229,0 --97.138,102.497,0 --97.338,102.758,0 --97.482,102.958,0 --97.630,103.158,0 --97.782,103.378,0 --97.936,103.600,0 --98.122,103.867,0 --98.306,104.135,0 --98.450,104.335,0 --98.589,104.535,0 --98.789,104.809,0 --98.989,105.095,0 --99.133,105.295,0 --99.271,105.495,0 --99.432,105.754,0 --99.580,106.000,0 --99.739,106.286,0 --99.909,106.601,0 --99.999,106.801,0 --100.090,107.001,0 --100.230,107.315,0 --100.361,107.600,0 --100.509,107.930,0 --100.671,108.279,0 --100.762,108.479,0 --100.855,108.679,0 --100.980,108.950,0 --101.097,109.200,0 --101.266,109.568,0 --101.442,109.955,0 --101.531,110.155,0 --101.619,110.355,0 --101.704,110.587,0 --101.782,110.800,0 --101.879,111.200,0 --101.978,111.600,0 --102.002,112.000,0 --102.033,112.400,0 --102.016,112.800,0 --102.013,113.200,0 --101.992,113.600,0 --101.985,114.000,0 --101.979,114.400,0 --101.978,114.800,0 --101.977,115.200,0 --101.975,115.600,0 --101.967,116.000,0 --101.966,116.400,0 --101.940,116.800,0 --101.933,117.200,0 --101.890,117.600,0 --101.867,118.000,0 --101.892,118.400,0 --101.916,118.800,0 --102.035,119.200,0 --102.155,119.634,0 --102.279,119.993,0 --102.341,120.172,0 --102.393,120.324,0 --102.467,120.538,0 --102.566,120.826,0 --102.695,121.200,0 --102.833,121.600,0 --102.980,122.028,0 --103.093,122.353,0 --103.154,122.532,0 --103.199,122.660,0 --103.283,122.904,0 --103.387,123.203,0 --103.524,123.600,0 --103.666,124.000,0 --103.813,124.421,0 --103.911,124.696,0 --103.974,124.873,0 --104.007,124.964,0 --104.111,125.251,0 --104.227,125.569,0 --104.385,126.000,0 --104.554,126.458,0 --104.672,126.778,0 --104.794,127.111,0 --104.814,127.163,0 --104.879,127.340,0 --104.969,127.585,0 --105.122,128.000,0 --105.269,128.400,0 --105.408,128.778,0 --105.521,129.084,0 --105.599,129.297,0 --105.655,129.449,0 --105.727,129.624,0 --105.856,129.965,0 --106.044,130.400,0 --106.218,130.828,0 --106.316,131.048,0 --106.390,131.222,0 --106.416,131.279,0 --106.557,131.593,0 --106.723,131.941,0 --106.955,132.436,0 --107.089,132.707,0 --107.167,132.866,0 --107.245,133.022,0 --107.348,133.230,0 --107.537,133.609,0 --107.731,134.000,0 --107.856,134.253,0 --107.965,134.471,0 --108.066,134.671,0 --108.171,134.871,0 --108.393,135.253,0 --108.593,135.602,0 --108.754,135.871,0 --108.818,135.973,0 --108.930,136.130,0 --109.084,136.364,0 --109.307,136.705,0 --109.485,136.979,0 --109.616,137.179,0 --109.736,137.379,0 --109.952,137.698,0 --110.073,138.036,0 --110.248,138.562,0 --110.243,138.803,0 --110.288,139.531,0 --110.254,139.600,0 --109.981,139.972,0 --109.846,140.123,0 --109.652,140.201,0 --109.200,140.382,0 --108.786,140.559,0 --108.556,140.657,0 --108.365,140.739,0 --108.096,140.854,0 --108.024,140.885,0 --107.600,141.066,0 --107.135,141.266,0 --106.800,141.409,0 --106.393,141.583,0 --106.380,141.589,0 --106.071,141.799,0 --105.934,141.883,0 --105.666,142.149,0 --105.566,142.295,0 --105.566,142.418,0 --105.573,142.464,0 --105.775,142.623,0 --105.980,142.823,0 --106.088,143.331,0 --106.211,143.525,0 --106.400,143.880,0 --106.460,143.953,0 --106.627,144.124,0 --106.781,144.411,0 --106.912,144.714,0 --106.973,145.226,0 --107.079,145.622,0 --107.101,146.000,0 --107.158,146.209,0 --107.190,146.417,0 --107.395,146.432,0 --107.600,146.458,0 --107.832,146.449,0 --108.088,146.441,0 --108.288,146.348,0 --108.488,146.254,0 --108.856,146.082,0 --109.200,145.922,0 --109.460,145.800,0 --109.744,145.667,0 --109.944,145.574,0 --110.144,145.480,0 --110.484,145.322,0 --110.800,145.174,0 --111.088,145.039,0 --111.400,144.894,0 --111.600,144.800,0 --111.800,144.707,0 --112.180,144.453,0 --112.439,144.279,0 --112.791,144.009,0 --112.801,144.001,0 --112.860,143.734,0 --112.927,143.600,0 --113.103,143.204,0 --113.296,142.942,0 --113.704,142.824,0 --114.020,142.658,0 --114.400,142.779,0 --114.800,142.826,0 --115.047,142.997,0 --115.273,143.153,0 --115.473,143.274,0 --115.673,143.405,0 --116.001,143.605,0 --116.321,143.805,0 --116.521,143.928,0 --116.721,144.048,0 --116.945,144.172,0 --117.200,144.316,0 --117.556,144.501,0 --117.884,144.668,0 --118.084,144.764,0 --118.284,144.852,0 --118.528,144.967,0 --118.800,145.090,0 --119.180,145.269,0 --119.543,145.438,0 --119.743,145.533,0 --119.943,145.627,0 --120.163,145.728,0 --120.400,145.838,0 --120.800,146.021,0 --121.236,146.221,0 --121.447,146.317,0 --121.615,146.393,0 --121.693,146.429,0 --121.979,146.559,0 --122.351,146.727,0 --122.833,146.959,0 --123.101,147.081,0 --123.277,147.163,0 --123.407,147.226,0 --123.638,147.355,0 --124.078,147.599,0 --124.406,147.788,0 --124.772,147.993,0 --124.792,148.005,0 --124.956,148.128,0 --125.174,148.267,0 --125.521,148.498,0 --125.791,148.675,0 --125.991,148.803,0 --126.191,148.935,0 --126.470,149.093,0 --126.831,149.303,0 --127.132,149.459,0 --127.305,149.552,0 --127.432,149.609,0 --127.676,149.717,0 --127.997,149.859,0 --128.400,150.037,0 --128.787,150.192,0 --129.068,150.315,0 --129.304,150.414,0 --129.434,150.469,0 --129.641,150.516,0 --129.985,150.629,0 --130.400,150.727,0 --130.800,150.825,0 --131.200,150.929,0 --131.595,151.025,0 --131.953,151.120,0 --132.144,151.167,0 --132.268,151.200,0 --132.534,151.271,0 --132.732,151.322,0 --133.176,151.439,0 --133.600,151.547,0 --134.000,151.649,0 --134.400,151.751,0 --134.786,151.849,0 --135.117,151.934,0 --135.296,151.979,0 --135.377,152.000,0 --135.699,152.082,0 --135.898,152.133,0 --136.371,152.253,0 --136.800,152.355,0 --137.200,152.462,0 --137.600,152.547,0 --137.961,152.641,0 --138.318,152.719,0 --138.509,152.771,0 --138.622,152.799,0 --138.943,152.884,0 --139.174,152.945,0 --139.621,153.062,0 --140.000,153.157,0 --140.400,153.263,0 --140.815,153.370,0 --141.200,153.472,0 --141.398,153.524,0 --141.641,153.588,0 --141.683,153.600,0 --142.091,153.711,0 --142.336,153.778,0 --142.816,153.908,0 --143.200,154.012,0 --143.574,154.114,0 --144.031,154.238,0 --144.274,154.304,0 --144.626,154.400,0 --144.717,154.425,0 --144.966,154.492,0 --145.200,154.556,0 --145.571,154.657,0 --146.018,154.779,0 --146.457,154.898,0 --146.800,154.991,0 --147.118,155.075,0 --147.382,155.145,0 --147.605,155.199,0 --147.824,155.252,0 --148.102,155.314,0 --148.400,155.380,0 --148.767,155.460,0 --149.190,155.551,0 --149.600,155.634,0 --149.976,155.711,0 --150.385,155.794,0 --150.800,155.872,0 --151.008,155.924,0 --151.291,155.975,0 --151.378,155.998,0 --151.723,156.094,0 --151.743,156.100,0 --153.549,156.100,0 --153.594,156.100,0 --154.533,156.100,0 --155.882,156.100,0 --156.357,156.100,0 --156.489,156.100,0 --156.730,156.100,0 --160.581,156.100,0 --161.093,156.100,0 --161.300,156.100,0 --161.629,156.100,0 --161.658,156.100,0 --161.668,156.100,0 --162.154,156.100,0 --162.129,156.097,0 --162.000,156.084,0 --161.794,156.059,0 --161.470,156.024,0 --161.463,156.023,0 --161.277,156.000,0 --160.995,155.966,0 --160.693,155.919,0 --160.400,155.882,0 --160.032,155.812,0 --159.613,155.745,0 --159.200,155.646,0 --158.800,155.560,0 --158.400,155.450,0 --158.023,155.350,0 --157.699,155.266,0 --157.536,155.214,0 --157.476,155.200,0 --157.112,155.111,0 --156.882,155.071,0 --156.401,154.962,0 --156.000,154.898,0 --155.600,154.827,0 --155.200,154.764,0 --154.779,154.695,0 --154.351,154.611,0 --154.000,154.538,0 --153.757,154.476,0 --153.526,154.421,0 --153.455,154.400,0 --153.100,154.294,0 --152.880,154.232,0 --152.407,154.092,0 --152.000,153.986,0 --151.610,153.877,0 --151.118,153.765,0 --150.871,153.700,0 --150.416,153.600,0 --150.408,153.598,0 --150.146,153.547,0 --150.000,153.515,0 --149.565,153.423,0 --149.164,153.337,0 --148.800,153.255,0 --148.392,153.159,0 --147.971,153.054,0 --147.600,152.959,0 --147.359,152.894,0 --147.109,152.827,0 --147.009,152.800,0 --146.667,152.708,0 --146.425,152.642,0 --145.973,152.520,0 --145.600,152.419,0 --145.211,152.314,0 --144.724,152.182,0 --144.480,152.116,0 --144.055,152.000,0 --144.027,151.992,0 --143.787,151.930,0 --143.600,151.881,0 --143.211,151.781,0 --142.798,151.675,0 --142.400,151.571,0 --142.015,151.473,0 --141.554,151.353,0 --141.319,151.292,0 --140.961,151.199,0 --140.879,151.179,0 --140.635,151.121,0 --140.400,151.065,0 --140.036,150.977,0 --139.614,150.878,0 --139.200,150.777,0 --138.789,150.685,0 --138.368,150.586,0 --138.000,150.512,0 --137.785,150.459,0 --137.530,150.415,0 --137.476,150.402,0 --137.110,150.312,0 --136.908,150.258,0 --136.426,150.148,0 --136.000,150.040,0 --135.600,149.943,0 --135.200,149.841,0 --134.817,149.744,0 --134.496,149.662,0 --134.318,149.617,0 --134.252,149.600,0 --133.914,149.513,0 --133.716,149.462,0 --133.233,149.338,0 --132.800,149.226,0 --132.400,149.121,0 --132.000,149.019,0 --131.629,148.922,0 --131.355,148.853,0 --131.180,148.805,0 --131.166,148.802,0 --130.746,148.697,0 --130.479,148.610,0 --130.000,148.474,0 --129.600,148.315,0 --129.192,148.165,0 --128.979,148.073,0 --128.798,148.001,0 --128.795,147.999,0 --128.409,147.819,0 --128.017,147.615,0 --127.597,147.402,0 --127.251,147.209,0 --127.217,147.190,0 --127.044,147.076,0 --126.823,146.938,0 --126.469,146.710,0 --126.190,146.533,0 --125.990,146.407,0 --125.790,146.283,0 --125.521,146.124,0 --125.200,145.939,0 --124.925,145.782,0 --124.697,145.656,0 --124.497,145.549,0 --124.297,145.449,0 --123.972,145.285,0 --123.600,145.108,0 --123.324,144.974,0 --123.072,144.859,0 --122.872,144.766,0 --122.672,144.675,0 --122.348,144.526,0 --122.000,144.368,0 --121.689,144.225,0 --121.398,144.093,0 --121.198,144.000,0 -,, --90.319,45.263,1 --90.096,45.063,1 --89.991,44.973,1 --89.956,44.944,1 --89.958,44.942,1 --89.989,44.911,1 --90.120,44.780,1 --90.241,44.659,1 --90.301,44.599,1 --90.400,44.500,1 --90.500,44.400,1 --90.900,44.000,1 --90.900,43.954,1 --90.900,43.942,1 --90.900,43.934,1 --90.900,43.772,1 --91.279,43.636,1 --91.589,43.571,1 --91.980,43.232,1 --92.005,43.208,1 --92.098,43.010,1 --92.203,42.816,1 --92.426,42.424,1 --92.617,42.054,1 --92.729,41.854,1 --92.828,41.654,1 --92.940,41.430,1 --93.051,41.200,1 --93.237,40.812,1 --93.422,40.420,1 --93.516,40.220,1 --93.609,40.020,1 --93.711,39.808,1 --93.809,39.600,1 --93.999,39.200,1 --94.189,38.800,1 --94.287,38.590,1 --94.389,38.376,1 --94.483,38.176,1 --94.576,37.976,1 --94.759,37.586,1 --94.939,37.200,1 --95.049,36.964,1 --95.163,36.721,1 --95.257,36.521,1 --95.351,36.321,1 --95.521,35.957,1 --95.689,35.600,1 --95.812,35.338,1 --95.938,35.068,1 --96.032,34.868,1 --96.126,34.668,1 --96.284,34.330,1 --96.439,34.000,1 --96.574,33.711,1 --96.713,33.415,1 --96.807,33.215,1 --96.901,33.015,1 --97.047,32.704,1 --97.189,32.400,1 --97.337,32.084,1 --97.488,31.761,1 --97.582,31.561,1 --97.676,31.361,1 --97.809,31.077,1 --97.939,30.800,1 --98.100,30.458,1 --98.263,30.110,1 --98.357,29.910,1 --98.452,29.710,1 --98.572,29.452,1 --98.689,29.200,1 --98.862,28.830,1 --99.038,28.450,1 --99.131,28.250,1 --99.223,28.050,1 --99.331,27.819,1 --99.432,27.600,1 --99.618,27.204,1 --99.824,26.759,1 --99.908,26.581,1 --100.000,26.400,1 --100.001,26.398,1 --100.163,26.031,1 --100.331,25.675,1 --100.549,25.200,1 --100.653,24.975,1 --100.767,24.707,1 --100.846,24.507,1 --100.915,24.307,1 --101.048,23.933,1 --101.130,23.600,1 --101.214,23.200,1 --101.244,22.800,1 --101.240,22.792,1 --101.203,22.697,1 --101.303,22.597,1 --101.400,22.500,1 --101.500,22.400,1 --101.900,22.000,1 --102.300,21.600,1 --102.400,21.500,1 --103.200,21.500,1 --103.400,21.500,1 --103.500,21.400,1 --103.900,21.000,1 --103.925,20.975,1 --103.970,20.930,1 --103.978,20.922,1 --104.000,20.920,1 --104.400,20.883,1 --104.719,20.854,1 --105.052,20.823,1 --105.252,20.805,1 --105.452,20.786,1 --105.733,20.756,1 --106.000,20.727,1 --106.400,20.670,1 --106.800,20.613,1 --107.200,20.534,1 --107.600,20.454,1 --108.000,20.360,1 --108.400,20.267,1 --108.776,20.176,1 --109.161,20.085,1 --109.361,20.037,1 --109.561,19.991,1 --109.786,19.944,1 --110.000,19.912,1 --110.400,19.853,1 --110.800,19.814,1 --111.200,19.788,1 --111.600,19.770,1 --112.000,19.751,1 --112.400,19.731,1 --112.800,19.697,1 --113.200,19.661,1 --113.600,19.586,1 --114.000,19.512,1 --114.292,19.419,1 --114.630,19.306,1 --114.830,19.210,1 --115.030,19.115,1 --115.395,18.862,1 --115.632,18.692,1 --115.987,18.415,1 --116.003,18.403,1 --116.135,18.223,1 --116.273,18.032,1 --116.505,17.658,1 --116.695,17.333,1 --116.775,17.133,1 --116.849,16.933,1 --116.898,16.675,1 --116.944,16.400,1 --116.977,16.000,1 --116.998,15.600,1 --117.004,15.200,1 --117.007,14.800,1 --117.007,14.400,1 --117.007,14.000,1 --117.007,13.600,1 --117.008,13.200,1 --117.008,12.800,1 --117.008,12.400,1 --117.008,12.000,1 --117.008,11.600,1 --117.008,11.200,1 --117.008,10.800,1 --117.008,10.400,1 --117.008,10.000,1 --117.009,9.600,1 --117.009,9.200,1 --117.009,8.800,1 --117.009,8.400,1 --117.009,8.239,1 --117.009,8.056,1 --117.009,8.000,1 --117.010,7.890,1 --117.266,7.634,1 --117.317,7.583,1 --117.400,7.500,1 --117.440,7.460,1 --117.600,7.300,1 --117.600,7.109,1 --117.600,4.436,1 --117.600,4.421,1 --117.600,4.405,1 --117.600,4.378,1 --117.600,4.348,1 --117.600,4.321,1 --117.600,4.290,1 --117.600,4.259,1 --117.600,4.222,1 --117.600,3.322,1 --117.600,3.202,1 --117.600,3.000,1 --116.269,3.000,1 --115.801,3.000,1 --115.125,3.000,1 --115.105,3.010,1 --115.054,3.328,1 --115.009,3.600,1 --115.009,4.000,1 --115.009,4.400,1 --115.009,4.800,1 --115.009,5.200,1 --115.009,5.600,1 --115.009,6.000,1 --115.009,6.400,1 --115.009,6.800,1 --115.009,7.200,1 --115.009,7.600,1 --115.008,8.000,1 --115.008,8.400,1 --115.008,8.800,1 --115.008,9.200,1 --115.008,9.600,1 --115.007,10.000,1 --115.007,10.400,1 --115.007,10.800,1 --115.007,11.200,1 --115.007,11.600,1 --115.007,12.000,1 --115.007,12.400,1 --115.007,12.800,1 --115.007,13.200,1 --115.006,13.600,1 --115.006,14.000,1 --115.006,14.400,1 --115.006,14.800,1 --115.006,15.200,1 --115.006,15.600,1 --114.989,16.000,1 --114.944,16.400,1 --114.795,16.737,1 --114.641,17.048,1 --114.270,17.271,1 --113.975,17.447,1 --113.630,17.564,1 --113.541,17.591,1 --113.330,17.623,1 --113.140,17.652,1 --112.704,17.700,1 --112.400,17.724,1 --112.000,17.740,1 --111.600,17.756,1 --111.200,17.772,1 --110.800,17.789,1 --110.400,17.816,1 --110.000,17.864,1 --109.600,17.930,1 --109.200,18.017,1 --108.800,18.113,1 --108.400,18.210,1 --108.104,18.281,1 --107.806,18.353,1 --107.606,18.401,1 --107.406,18.450,1 --107.102,18.520,1 --106.800,18.590,1 --106.400,18.657,1 --106.000,18.723,1 --105.600,18.763,1 --105.200,18.802,1 --104.800,18.839,1 --104.400,18.875,1 --104.000,18.912,1 --103.600,18.948,1 --103.200,18.985,1 --102.800,19.021,1 --102.400,19.058,1 --102.000,19.094,1 --101.617,19.129,1 --101.226,19.165,1 --101.026,19.184,1 --100.826,19.202,1 --100.609,19.223,1 --100.400,19.245,1 --100.000,19.285,1 --99.600,19.325,1 --99.215,19.505,1 --98.849,19.683,1 --98.829,20.042,1 --98.867,20.431,1 --98.971,20.796,1 --99.099,21.200,1 --99.054,21.482,1 --99.017,22.000,1 --99.063,22.362,1 --99.114,22.657,1 --99.187,22.955,1 --99.223,23.111,1 --99.223,23.189,1 --99.216,23.237,1 --99.125,23.418,1 --99.044,23.605,1 --98.888,24.040,1 --98.725,24.400,1 --98.601,24.671,1 --98.470,24.950,1 --98.376,25.150,1 --98.283,25.350,1 --98.129,25.679,1 --97.978,26.000,1 --97.839,26.298,1 --97.695,26.604,1 --97.602,26.804,1 --97.508,27.004,1 --97.367,27.306,1 --97.229,27.600,1 --97.076,27.928,1 --96.921,28.261,1 --96.829,28.461,1 --96.735,28.661,1 --96.607,28.932,1 --96.481,29.200,1 --96.314,29.552,1 --96.146,29.911,1 --96.052,30.111,1 --95.958,30.311,1 --95.842,30.559,1 --95.730,30.800,1 --95.552,31.179,1 --95.371,31.565,1 --95.277,31.765,1 --95.184,31.965,1 --95.080,32.186,1 --94.980,32.400,1 --94.792,32.800,1 --94.605,33.200,1 --94.509,33.405,1 --94.409,33.618,1 --94.315,33.818,1 --94.221,34.018,1 --94.036,34.413,1 --93.855,34.800,1 --93.746,35.032,1 --93.634,35.272,1 --93.540,35.472,1 --93.446,35.672,1 --93.274,36.039,1 --93.105,36.400,1 --92.983,36.659,1 --92.858,36.925,1 --92.765,37.125,1 --92.670,37.325,1 --92.510,37.666,1 --92.354,38.000,1 --92.220,38.285,1 --92.083,38.578,1 --91.988,38.778,1 --91.889,38.978,1 --91.741,39.293,1 --91.596,39.600,1 --91.452,39.915,1 --91.307,40.240,1 --91.211,40.440,1 --91.118,40.640,1 --90.973,40.925,1 --90.797,41.200,1 --90.641,41.535,1 --90.478,41.806,1 --90.397,42.006,1 --90.210,42.207,1 --90.000,42.416,1 --89.871,42.607,1 --89.562,42.603,1 --89.257,42.603,1 --88.858,42.310,1 --88.824,42.267,1 --88.896,42.017,1 --88.789,41.762,1 --88.791,41.727,1 --88.791,41.554,1 --88.800,41.510,1 --88.907,41.105,1 --88.983,40.875,1 --89.090,40.398,1 --89.185,40.000,1 --89.251,39.600,1 --89.338,39.200,1 --89.416,38.839,1 --89.506,38.447,1 --89.556,38.229,1 --89.600,38.037,1 --89.654,37.802,1 --89.706,37.579,1 --89.799,37.169,1 --89.884,36.800,1 --89.976,36.400,1 --90.065,36.000,1 --90.153,35.606,1 --90.206,35.196,1 --90.300,34.800,1 --90.269,34.577,1 --90.386,34.245,1 --90.402,33.853,1 --90.405,33.722,1 --90.405,33.599,1 --90.405,33.592,1 --90.109,33.420,1 --90.000,33.306,1 --89.667,33.102,1 --89.410,32.932,1 --89.172,32.801,1 --88.966,32.689,1 --88.663,32.566,1 --88.400,32.455,1 --88.038,32.295,1 --87.739,32.178,1 --87.410,31.998,1 --87.294,31.933,1 --87.022,31.933,1 --86.968,31.939,1 --86.824,32.016,1 --86.653,32.344,1 --86.412,32.428,1 --86.329,32.555,1 --86.296,32.657,1 --86.270,33.200,1 --86.255,33.381,1 --86.148,33.996,1 --86.098,34.381,1 --85.932,34.800,1 --85.826,35.084,1 --85.685,35.378,1 --85.590,35.578,1 --85.494,35.778,1 --85.343,36.093,1 --85.196,36.400,1 --85.051,36.702,1 --84.902,37.012,1 --84.806,37.212,1 --84.710,37.412,1 --84.567,37.709,1 --84.427,38.000,1 --84.274,38.319,1 --84.117,38.644,1 --84.110,38.659,1 --84.100,38.680,1 --84.100,44.266,1 --84.100,44.471,1 --84.100,45.412,1 --84.127,45.422,1 --84.378,45.518,1 --84.650,45.588,1 --84.749,45.612,1 --84.788,45.612,1 --84.827,45.612,1 --84.992,45.535,1 --85.192,45.442,1 --85.627,45.239,1 --86.000,45.065,1 --86.228,44.958,1 --86.483,44.839,1 --86.683,44.746,1 --86.883,44.652,1 --87.255,44.496,1 --87.600,44.368,1 --87.986,44.448,1 --88.343,44.515,1 --88.539,44.871,1 --88.747,45.236,1 --88.659,45.654,1 --88.620,45.963,1 --88.423,46.381,1 --88.227,46.800,1 --88.125,47.017,1 --88.020,47.242,1 --87.926,47.442,1 --87.832,47.642,1 --87.652,48.025,1 --87.476,48.400,1 --87.362,48.644,1 --87.244,48.895,1 --87.151,49.095,1 --87.057,49.295,1 --86.890,49.651,1 --86.727,50.000,1 --86.600,50.271,1 --86.470,50.549,1 --86.362,50.749,1 --86.261,50.949,1 --86.061,51.207,1 --85.861,51.470,1 --85.668,51.582,1 --85.556,51.647,1 --85.488,51.686,1 --85.228,51.876,1 --84.907,51.990,1 --84.847,52.016,1 --84.677,52.106,1 --84.427,52.192,1 --84.176,52.210,1 --84.100,52.216,1 --84.100,55.583,1 --84.100,55.976,1 --84.100,56.596,1 --97.740,56.596,1 --100.000,56.596,1 --100.000,56.385,1 --100.000,56.156,1 --100.000,54.415,1 --100.000,51.647,1 --90.373,51.647,1 --88.112,51.647,1 --88.161,51.559,1 --88.164,51.555,1 --88.180,51.526,1 --88.369,51.153,1 --88.553,50.800,1 --88.659,50.576,1 --88.773,50.343,1 --88.867,50.143,1 --88.961,49.943,1 --89.138,49.567,1 --89.313,49.200,1 --89.430,48.949,1 --89.551,48.696,1 --89.645,48.496,1 --89.737,48.296,1 --89.901,47.946,1 --90.060,47.600,1 --90.190,47.315,1 --90.324,47.019,1 --90.407,46.818,1 --90.488,46.619,1 --90.565,46.303,1 --90.618,46.000,1 --90.571,45.718,1 --90.530,45.463,1 --90.319,45.263,1 -,, --223.137,4.800,2 --223.137,4.400,2 --223.107,4.000,2 --222.950,3.565,2 --222.754,3.287,2 --222.631,3.123,2 --222.555,3.109,2 --222.500,3.098,2 --222.500,3.200,2 --222.500,3.280,2 --222.500,3.474,2 --222.500,3.752,2 --222.500,3.907,2 --222.500,4.008,2 --222.500,4.155,2 --222.500,4.248,2 --222.500,4.405,2 --222.500,4.477,2 --222.500,4.841,2 --222.500,4.887,2 --222.500,5.043,2 --222.500,5.108,2 --222.500,5.219,2 --222.500,5.299,2 --222.500,5.410,2 --222.500,5.482,2 --222.500,5.838,2 --222.500,5.984,2 --222.500,6.032,2 --222.500,6.062,2 --222.500,6.112,2 --222.500,6.138,2 --222.500,6.160,2 --222.500,6.170,2 --222.500,6.191,2 --222.500,6.207,2 --222.500,6.227,2 --222.500,6.231,2 --222.500,6.250,2 --222.500,6.251,2 --222.500,6.256,2 --222.500,6.262,2 --222.500,6.270,2 --222.500,6.279,2 --222.500,6.288,2 --222.500,6.306,2 --222.500,6.318,2 --222.500,6.377,2 --222.500,6.396,2 --222.500,6.406,2 --222.500,6.425,2 --222.500,6.435,2 --222.500,6.453,2 --222.500,9.000,2 --221.190,9.000,2 --221.139,9.000,2 --221.139,9.103,2 --221.139,9.119,2 --221.139,9.142,2 --221.139,9.176,2 --221.139,9.200,2 --221.139,9.600,2 --221.139,10.000,2 --221.139,10.400,2 --221.139,10.800,2 --221.139,11.200,2 --221.139,11.600,2 --221.140,12.000,2 --221.140,12.400,2 --221.140,12.800,2 --221.140,13.200,2 --221.140,13.600,2 --221.140,14.000,2 --221.140,14.400,2 --221.140,14.800,2 --221.146,15.200,2 --221.151,15.600,2 --221.207,16.000,2 --221.261,16.400,2 --221.370,16.714,2 --221.480,17.046,2 --221.588,17.246,2 --221.685,17.446,2 --221.885,17.706,2 --222.112,18.008,2 --222.292,18.209,2 --222.430,18.372,2 --222.534,18.451,2 --222.795,18.649,2 --223.138,18.850,2 --223.487,19.073,2 --223.687,19.161,2 --223.887,19.246,2 --224.117,19.298,2 --224.400,19.371,2 --224.800,19.428,2 --225.200,19.485,2 --225.600,19.514,2 --226.000,19.540,2 --226.400,19.578,2 --226.800,19.602,2 --227.200,19.677,2 --227.600,19.736,2 --227.987,19.828,2 --228.365,19.912,2 --228.565,19.960,2 --228.765,20.008,2 --228.978,20.060,2 --229.200,20.113,2 --229.600,20.209,2 --230.000,20.304,2 --230.400,20.394,2 --230.800,20.484,2 --231.200,20.557,2 --231.600,20.631,2 --232.000,20.685,2 --232.400,20.740,2 --232.659,20.768,2 --232.883,20.793,2 --233.083,20.809,2 --233.283,20.824,2 --233.624,20.854,2 --233.766,20.866,2 --233.857,20.957,2 --233.900,21.000,2 --234.000,21.100,2 --234.400,21.500,2 --235.200,21.500,2 --235.400,21.500,2 --235.800,21.900,2 --235.900,22.000,2 --236.000,22.100,2 --236.400,22.500,2 --236.554,22.654,2 --236.612,22.712,2 --236.610,22.744,2 --236.607,22.800,2 --236.689,23.049,2 --236.764,23.291,2 --236.846,23.491,2 --236.926,23.691,2 --237.084,24.043,2 --237.238,24.400,2 --237.375,24.690,2 --237.512,24.988,2 --237.606,25.188,2 --237.699,25.388,2 --237.845,25.697,2 --237.986,26.000,2 --238.135,26.317,2 --238.287,26.641,2 --238.381,26.841,2 --238.474,27.041,2 --238.607,27.324,2 --238.736,27.600,2 --238.897,27.944,2 --239.062,28.295,2 --239.156,28.495,2 --239.249,28.695,2 --239.370,28.951,2 --239.486,29.200,2 --239.660,29.570,2 --239.837,29.948,2 --239.931,30.148,2 --240.024,30.348,2 --240.132,30.578,2 --240.237,30.800,2 --240.462,31.280,2 --240.631,31.641,2 --240.793,31.986,2 --240.800,32.001,2 --240.883,32.180,2 --240.968,32.360,2 --241.176,32.804,2 --241.362,33.200,2 --241.467,33.423,2 --241.575,33.654,2 --241.669,33.854,2 --241.762,34.054,2 --241.939,34.431,2 --242.112,34.800,2 --242.230,35.049,2 --242.350,35.307,2 --242.443,35.507,2 --242.537,35.707,2 --242.704,36.057,2 --242.866,36.400,2 --242.995,36.667,2 --243.129,36.948,2 --243.227,37.148,2 --243.321,37.348,2 --243.481,37.682,2 --243.632,38.000,2 --243.766,38.269,2 --243.911,38.560,2 --244.031,38.760,2 --244.137,38.960,2 --244.297,39.291,2 --244.439,39.600,2 --244.559,39.867,2 --244.702,40.164,2 --244.834,40.364,2 --244.957,40.564,2 --245.157,40.811,2 --245.370,41.138,2 --245.578,41.337,2 --245.687,41.516,2 --245.783,41.603,2 --246.072,41.905,2 --246.353,42.087,2 --246.551,42.305,2 --246.715,42.398,2 --246.983,42.560,2 --247.161,42.581,2 --247.297,42.597,2 --247.299,42.599,2 --247.340,42.640,2 --247.400,42.700,2 --247.700,43.000,2 --247.800,43.100,2 --247.900,43.200,2 --247.900,44.000,2 --247.900,44.316,2 --247.900,44.433,2 --247.882,44.454,2 --247.822,44.521,2 --247.696,44.887,2 --247.572,45.200,2 --247.572,45.600,2 --247.547,46.000,2 --247.656,46.400,2 --247.759,46.800,2 --247.859,47.037,2 --247.962,47.281,2 --248.056,47.481,2 --248.149,47.681,2 --248.320,48.044,2 --248.486,48.400,2 --248.610,48.664,2 --248.737,48.935,2 --248.831,49.135,2 --248.924,49.335,2 --249.082,49.671,2 --249.236,50.000,2 --249.372,50.291,2 --249.512,50.589,2 --249.605,50.789,2 --249.699,50.989,2 --249.850,51.298,2 --249.878,51.356,2 --249.888,51.377,2 --249.996,51.600,2 --250.021,51.647,2 --248.303,51.647,2 --248.127,51.647,2 --240.000,51.647,2 --240.000,56.156,2 --240.000,56.385,2 --240.000,56.596,2 --252.525,56.596,2 --254.600,56.596,2 --254.600,55.825,2 --254.600,55.630,2 --254.600,52.193,2 --254.365,52.286,2 --254.000,52.414,2 --253.600,52.401,2 --253.200,52.376,2 --252.939,52.233,2 --252.690,52.105,2 --252.463,51.808,2 --252.335,51.647,2 --252.270,51.566,2 --252.269,51.564,2 --252.267,51.562,2 --252.265,51.558,2 --252.085,51.304,2 --252.079,51.295,2 --252.004,51.192,2 --251.928,51.031,2 --251.834,50.831,2 --251.629,50.392,2 --251.445,50.000,2 --251.338,49.773,2 --251.229,49.539,2 --251.135,49.339,2 --251.041,49.139,2 --250.867,48.766,2 --250.695,48.400,2 --250.577,48.146,2 --250.454,47.885,2 --250.360,47.685,2 --250.266,47.485,2 --250.104,47.139,2 --249.945,46.800,2 --249.814,46.520,2 --249.679,46.232,2 --249.585,46.032,2 --249.491,45.832,2 --249.491,45.620,2 --249.491,45.422,2 --249.638,45.222,2 --249.789,45.022,2 --249.989,44.823,2 --250.189,44.626,2 --250.498,44.613,2 --250.836,44.624,2 --251.081,44.722,2 --251.235,44.784,2 --251.386,44.854,2 --251.599,44.954,2 --251.999,45.142,2 --252.400,45.331,2 --252.653,45.450,2 --252.887,45.559,2 --253.087,45.650,2 --253.287,45.743,2 --253.597,45.743,2 --254.000,45.733,2 --254.193,45.654,2 --254.370,45.588,2 --254.453,45.549,2 --254.600,45.479,2 --254.600,43.763,2 --254.600,39.768,2 --254.576,39.719,2 --254.556,39.676,2 --254.459,39.476,2 --254.363,39.276,2 --254.247,39.034,2 --254.134,38.800,2 --253.954,38.426,2 --253.771,38.045,2 --253.675,37.845,2 --253.578,37.645,2 --253.470,37.419,2 --253.364,37.200,2 --253.177,36.811,2 --252.968,36.377,2 --252.865,36.162,2 --252.794,36.013,2 --252.719,35.858,2 --252.612,35.637,2 --252.406,35.209,2 --252.208,34.800,2 --252.109,34.596,2 --252.007,34.388,2 --251.890,34.188,2 --251.773,33.988,2 --251.573,33.646,2 --251.373,33.305,2 --251.256,33.105,2 --251.138,32.905,2 --250.995,32.651,2 --250.852,32.400,2 --250.709,31.982,2 --250.544,31.690,2 --250.366,31.407,2 --250.325,31.335,2 --250.338,30.888,2 --250.312,30.800,2 --250.393,30.393,2 --250.394,30.384,2 --250.380,30.073,2 --250.481,29.905,2 --250.459,29.786,2 --250.459,29.483,2 --250.387,29.464,2 --250.048,29.279,2 --249.491,29.300,2 --249.200,29.140,2 --248.684,29.316,2 --248.400,29.410,2 --247.999,29.577,2 --247.982,29.585,2 --247.667,29.832,2 --247.559,29.918,2 --247.211,30.208,2 --247.101,30.303,2 --246.831,30.610,2 --246.706,30.744,2 --246.410,31.133,2 --246.388,31.170,2 --246.388,31.233,2 --246.390,31.255,2 --246.544,31.530,2 --246.526,31.707,2 --246.516,31.944,2 --246.606,32.415,2 --246.674,32.819,2 --246.744,33.200,2 --246.818,33.600,2 --246.892,34.000,2 --246.961,34.374,2 --247.030,34.764,2 --247.120,35.242,2 --247.151,35.412,2 --247.186,35.613,2 --247.233,35.844,2 --247.258,35.968,2 --247.359,36.436,2 --247.428,36.818,2 --247.478,37.200,2 --247.587,37.609,2 --247.635,38.036,2 --247.842,38.623,2 --247.887,38.785,2 --247.795,39.352,2 --247.757,39.603,2 --247.532,39.968,2 --247.344,40.138,2 --247.250,40.102,2 --247.112,40.102,2 --247.027,39.982,2 --246.746,39.582,2 --246.616,39.400,2 --246.394,39.213,2 --246.385,39.184,2 --246.302,38.777,2 --246.129,38.411,2 --245.911,38.000,2 --245.778,37.790,2 --245.612,37.568,2 --245.522,37.368,2 --245.444,37.168,2 --245.263,36.779,2 --245.085,36.400,2 --244.971,36.159,2 --244.842,35.911,2 --244.748,35.711,2 --244.654,35.511,2 --244.486,35.152,2 --244.322,34.800,2 --244.196,34.533,2 --244.067,34.258,2 --243.974,34.058,2 --243.879,33.858,2 --243.723,33.525,2 --243.571,33.200,2 --243.433,32.906,2 --243.292,32.604,2 --243.198,32.404,2 --243.104,32.204,2 --242.961,31.898,2 --242.821,31.600,2 --242.671,31.279,2 --242.517,30.951,2 --242.423,30.751,2 --242.329,30.551,2 --242.198,30.272,2 --242.071,30.000,2 --241.908,29.653,2 --241.742,29.298,2 --241.648,29.098,2 --241.554,28.898,2 --241.435,28.645,2 --241.320,28.400,2 --241.145,28.026,2 --240.966,27.645,2 --240.873,27.445,2 --240.779,27.245,2 --240.673,27.019,2 --240.570,26.800,2 --240.368,26.368,2 --240.178,25.962,2 --240.058,25.707,2 --240.004,25.592,2 --239.930,25.433,2 --239.834,25.230,2 --239.629,24.792,2 --239.446,24.400,2 --239.339,24.173,2 --239.229,23.938,2 --239.135,23.738,2 --239.041,23.538,2 --238.867,23.165,2 --238.695,22.800,2 --238.585,22.432,2 --238.465,22.029,2 --238.369,21.860,2 --238.320,21.781,2 --238.320,21.593,2 --238.320,21.377,2 --238.368,21.312,2 --238.501,21.146,2 --238.707,20.809,2 --238.898,20.492,2 --239.119,20.292,2 --239.336,20.092,2 --239.336,19.965,2 --239.336,19.834,2 --239.069,19.671,2 --238.800,19.508,2 --238.400,19.396,2 --238.000,19.286,2 --237.738,19.249,2 --237.479,19.212,2 --237.279,19.192,2 --237.079,19.172,2 --236.741,19.138,2 --236.400,19.104,2 --236.000,19.065,2 --235.600,19.025,2 --235.200,18.988,2 --234.800,18.950,2 --234.400,18.914,2 --234.000,18.877,2 --233.600,18.840,2 --233.200,18.804,2 --232.800,18.767,2 --232.400,18.731,2 --232.000,18.673,2 --231.600,18.614,2 --231.253,18.540,2 --230.916,18.467,2 --230.716,18.420,2 --230.516,18.373,2 --230.263,18.312,2 --230.000,18.249,2 --229.600,18.152,2 --229.200,18.056,2 --228.800,17.959,2 --228.400,17.863,2 --227.958,17.765,2 --227.601,17.679,2 --227.318,17.608,2 --227.242,17.590,2 --226.970,17.579,2 --226.800,17.558,2 --226.395,17.551,2 --225.973,17.529,2 --225.600,17.509,2 --225.200,17.489,2 --224.800,17.407,2 --224.400,17.325,2 --224.078,17.153,2 --223.781,17.002,2 --223.581,16.730,2 --223.381,16.474,2 --223.288,16.274,2 --223.170,16.074,2 --223.155,15.832,2 --223.141,15.600,2 --223.141,15.200,2 --223.140,14.800,2 --223.140,14.400,2 --223.140,14.000,2 --223.140,13.600,2 --223.140,13.200,2 --223.140,12.800,2 --223.140,12.400,2 --223.140,12.000,2 --223.139,11.600,2 --223.139,11.200,2 --223.139,10.800,2 --223.139,10.400,2 --223.139,10.000,2 --223.139,9.600,2 --223.139,9.200,2 --223.139,8.800,2 --223.138,8.400,2 --223.138,8.000,2 --223.138,7.600,2 --223.138,7.200,2 --223.138,6.800,2 --223.138,6.400,2 --223.138,6.000,2 --223.138,5.600,2 --223.137,5.200,2 --223.137,4.800,2 -,, --253.827,76.800,3 --253.813,76.400,3 --253.755,76.123,3 --253.693,75.842,3 --253.573,75.642,3 --253.453,75.442,3 --253.319,75.118,3 --253.188,74.800,3 --253.101,74.400,3 --253.016,74.000,3 --252.973,73.600,3 --252.947,73.353,3 --245.972,73.353,3 --245.143,73.353,3 --243.297,73.353,3 --240.000,73.353,3 --240.000,70.585,3 --240.000,68.844,3 --240.000,68.404,3 --242.075,68.404,3 --254.600,68.404,3 --254.600,70.693,3 --254.600,73.103,3 --254.600,78.588,3 --254.600,87.671,3 --254.600,90.335,3 --254.509,90.341,3 --254.196,90.360,3 --253.996,90.409,3 --253.796,90.449,3 --253.532,90.649,3 --253.279,90.849,3 --253.079,91.153,3 --252.879,91.441,3 --252.814,91.641,3 --252.749,91.841,3 --252.665,92.107,3 --252.570,92.400,3 --252.436,92.800,3 --252.302,93.200,3 --252.187,93.452,3 --252.082,93.694,3 --251.805,93.916,3 --251.563,94.110,3 --251.309,94.297,3 --251.184,94.389,3 --251.026,94.505,3 --250.822,94.656,3 --250.513,94.883,3 --250.241,95.083,3 --250.041,95.230,3 --249.841,95.378,3 --249.569,95.578,3 --249.369,95.725,3 --249.114,95.913,3 --248.400,96.439,3 --248.184,96.598,3 --247.955,96.767,3 --247.755,96.914,3 --247.555,97.061,3 --247.283,97.261,3 --247.010,97.461,3 --246.810,97.608,3 --246.610,97.753,3 --246.336,97.953,3 --246.060,98.153,3 --245.860,98.299,3 --245.660,98.444,3 --245.422,98.616,3 --245.200,98.777,3 --244.965,98.949,3 --244.713,99.133,3 --244.513,99.293,3 --244.313,99.451,3 --244.070,99.651,3 --243.826,99.851,3 --243.626,100.030,3 --243.426,100.206,3 --243.208,100.406,3 --242.989,100.606,3 --242.789,100.793,3 --242.589,100.979,3 --242.389,101.179,3 --242.190,101.379,3 --241.990,101.605,3 --241.790,101.827,3 --241.626,102.027,3 --241.463,102.227,3 --241.263,102.479,3 --241.063,102.741,3 --240.904,102.941,3 --240.754,103.141,3 --240.573,103.365,3 --240.383,103.600,3 --240.203,103.823,3 --240.030,104.036,3 --239.868,104.236,3 --239.708,104.436,3 --239.508,104.690,3 --239.308,104.943,3 --239.164,105.143,3 --239.022,105.343,3 --238.781,105.742,3 --238.601,106.036,3 --238.408,106.382,3 --238.399,106.398,3 --238.305,106.574,3 --238.202,106.762,3 --237.951,107.264,3 --237.768,107.623,3 --237.618,107.939,3 --237.595,107.988,3 --237.524,108.164,3 --237.436,108.368,3 --237.260,108.800,3 --237.094,109.200,3 --236.972,109.505,3 --236.866,109.770,3 --236.789,109.970,3 --236.712,110.170,3 --236.613,110.464,3 --236.499,110.800,3 --236.408,111.200,3 --236.318,111.600,3 --236.265,112.000,3 --236.212,112.400,3 --236.165,112.800,3 --236.131,113.200,3 --236.102,113.600,3 --236.093,114.000,3 --236.080,114.400,3 --236.081,114.800,3 --236.081,115.200,3 --236.082,115.600,3 --236.089,116.000,3 --236.090,116.400,3 --236.091,116.800,3 --236.092,117.200,3 --236.093,117.600,3 --236.094,118.000,3 --236.074,118.334,3 --236.048,118.683,3 --236.016,118.883,3 --235.980,119.083,3 --235.899,119.349,3 --235.820,119.600,3 --235.681,120.000,3 --235.544,120.400,3 --235.424,120.744,3 --235.303,121.098,3 --235.233,121.298,3 --235.165,121.498,3 --235.077,121.755,3 --234.994,122.000,3 --234.857,122.400,3 --234.722,122.800,3 --234.610,123.128,3 --234.493,123.475,3 --234.425,123.675,3 --234.358,123.875,3 --234.266,124.146,3 --234.180,124.400,3 --234.044,124.800,3 --233.905,125.200,3 --233.797,125.502,3 --233.682,125.806,3 --233.603,126.006,3 --233.522,126.206,3 --233.400,126.504,3 --233.282,126.800,3 --233.121,127.190,3 --232.947,127.628,3 --232.867,127.821,3 --232.794,127.985,3 --232.763,128.061,3 --232.652,128.369,3 --232.498,128.755,3 --232.333,129.200,3 --232.218,129.496,3 --232.091,129.843,3 --232.013,130.043,3 --231.940,130.243,3 --231.824,130.547,3 --231.730,130.800,3 --231.578,131.204,3 --231.407,131.636,3 --231.312,131.875,3 --231.231,132.066,3 --231.164,132.212,3 --231.062,132.428,3 --230.862,132.848,3 --230.691,133.200,3 --230.573,133.429,3 --230.445,133.685,3 --230.328,133.885,3 --230.222,134.085,3 --230.022,134.421,3 --229.803,134.800,3 --229.686,134.995,3 --229.582,135.170,3 --229.523,135.264,3 --229.333,135.569,3 --229.159,135.843,3 --228.932,136.200,3 --228.791,136.400,3 --228.659,136.600,3 --228.459,136.867,3 --228.237,137.176,3 --228.082,137.378,3 --227.958,137.546,3 --227.845,137.691,3 --227.604,138.001,3 --227.372,138.299,3 --227.247,138.460,3 --227.118,138.625,3 --226.960,138.829,3 --226.736,139.117,3 --226.536,139.370,3 --226.380,139.570,3 --226.218,139.770,3 --226.018,140.022,3 --225.818,140.260,3 --225.654,140.460,3 --225.481,140.660,3 --225.281,140.881,3 --225.081,141.088,3 --224.885,141.288,3 --224.680,141.488,3 --224.480,141.679,3 --224.280,141.859,3 --224.073,142.059,3 --223.855,142.259,3 --223.655,142.462,3 --223.455,142.656,3 --223.257,142.856,3 --223.049,143.056,3 --222.849,143.234,3 --222.649,143.405,3 --222.391,143.606,3 --222.114,143.805,3 --221.914,143.948,3 --221.714,144.077,3 --221.444,144.249,3 --221.200,144.396,3 --220.940,144.547,3 --220.618,144.719,3 --220.418,144.809,3 --220.218,144.894,3 --219.878,145.032,3 --219.600,145.146,3 --219.247,145.285,3 --218.817,145.468,3 --218.610,145.551,3 --218.446,145.619,3 --218.292,145.686,3 --218.036,145.808,3 --217.597,146.005,3 --217.164,146.206,3 --216.906,146.323,3 --216.769,146.386,3 --216.609,146.479,3 --216.403,146.575,3 --216.055,146.797,3 --215.657,147.011,3 --215.458,147.159,3 --215.276,147.259,3 --215.132,147.354,3 --214.797,147.577,3 --214.469,147.776,3 --214.247,147.911,3 --214.080,148.005,3 --213.873,148.126,3 --213.447,148.367,3 --213.192,148.515,3 --212.828,148.720,3 --212.749,148.768,3 --212.556,148.887,3 --212.366,149.006,3 --212.007,149.211,3 --211.645,149.426,3 --211.448,149.530,3 --211.264,149.633,3 --211.140,149.688,3 --210.821,149.831,3 --210.390,150.017,3 --209.984,150.194,3 --209.634,150.346,3 --209.556,150.381,3 --209.362,150.465,3 --209.172,150.548,3 --208.729,150.738,3 --208.365,150.882,3 --208.014,151.002,3 --207.667,151.105,3 --207.539,151.137,3 --207.250,151.210,3 --207.202,151.222,3 --206.761,151.327,3 --206.395,151.406,3 --206.000,151.487,3 --205.600,151.574,3 --205.200,151.659,3 --204.803,151.758,3 --204.430,151.851,3 --203.998,151.961,3 --203.918,151.981,3 --203.649,152.050,3 --203.502,152.088,3 --203.207,152.164,3 --202.820,152.263,3 --202.399,152.377,3 --201.972,152.486,3 --201.588,152.592,3 --201.256,152.681,3 --201.128,152.725,3 --200.822,152.806,3 --200.800,152.814,3 --200.400,152.964,3 --200.145,153.055,3 --199.632,153.229,3 --199.013,153.401,3 --198.800,153.457,3 --198.380,153.567,3 --198.332,153.580,3 --198.051,153.655,3 --197.881,153.699,3 --197.673,153.755,3 --197.164,153.890,3 --196.795,153.988,3 --196.426,154.086,3 --195.919,154.220,3 --195.681,154.284,3 --195.528,154.324,3 --195.220,154.406,3 --195.206,154.410,3 --194.800,154.517,3 --194.610,154.566,3 --193.983,154.729,3 --193.610,154.822,3 --193.236,154.918,3 --192.719,155.045,3 --192.500,155.100,3 --192.338,155.139,3 --192.042,155.212,3 --192.013,155.219,3 --191.600,155.320,3 --191.399,155.368,3 --190.783,155.518,3 --190.407,155.596,3 --190.016,155.681,3 --189.473,155.775,3 --189.200,155.825,3 --188.695,155.910,3 --188.541,155.936,3 --188.353,155.968,3 --188.075,156.015,3 --188.072,156.016,3 --188.031,156.023,3 --187.739,156.073,3 --187.600,156.096,3 --187.579,156.100,3 --181.616,156.100,3 --177.831,156.100,3 --177.830,156.100,3 --177.829,156.100,3 --177.545,156.100,3 --177.444,156.100,3 --177.429,156.100,3 --177.397,156.100,3 --177.357,156.100,3 --177.122,156.100,3 --177.150,156.095,3 --177.169,156.091,3 --177.278,156.068,3 --177.594,155.999,3 --177.599,155.998,3 --178.000,155.920,3 --178.213,155.880,3 --178.806,155.777,3 --179.222,155.714,3 --179.600,155.662,3 --180.000,155.598,3 --180.400,155.536,3 --180.790,155.451,3 --181.167,155.368,3 --181.611,155.252,3 --181.707,155.227,3 --181.963,155.163,3 --182.131,155.121,3 --182.370,155.065,3 --182.817,154.970,3 --183.223,154.894,3 --183.600,154.827,3 --183.987,154.746,3 --184.394,154.666,3 --184.830,154.555,3 --185.074,154.492,3 --185.240,154.446,3 --185.500,154.371,3 --185.586,154.348,3 --186.000,154.242,3 --186.273,154.176,3 --186.788,154.058,3 --187.181,153.978,3 --187.582,153.904,3 --188.141,153.807,3 --188.400,153.762,3 --188.882,153.678,3 --189.015,153.655,3 --189.222,153.616,3 --189.475,153.570,3 --189.550,153.554,3 --190.000,153.458,3 --190.229,153.403,3 --190.811,153.267,3 --191.189,153.174,3 --191.565,153.082,3 --192.078,152.954,3 --192.294,152.900,3 --192.459,152.858,3 --192.750,152.786,3 --192.785,152.776,3 --193.200,152.668,3 --193.400,152.615,3 --194.043,152.446,3 --194.500,152.325,3 --194.800,152.246,3 --195.260,152.125,3 --195.433,152.079,3 --195.626,152.031,3 --195.877,151.962,3 --195.965,151.940,3 --196.400,151.829,3 --196.648,151.767,3 --197.224,151.620,3 --197.702,151.497,3 --198.000,151.419,3 --198.443,151.305,3 --198.598,151.263,3 --198.807,151.213,3 --199.032,151.150,3 --199.163,151.117,3 --199.631,150.986,3 --200.013,150.888,3 --200.400,150.772,3 --200.796,150.669,3 --201.170,150.560,3 --201.602,150.444,3 --201.688,150.421,3 --201.954,150.353,3 --202.104,150.314,3 --202.393,150.240,3 --202.782,150.140,3 --203.201,150.033,3 --203.600,149.931,3 --203.992,149.833,3 --204.364,149.741,3 --204.809,149.634,3 --204.883,149.617,3 --205.153,149.560,3 --205.309,149.526,3 --205.574,149.470,3 --205.993,149.381,3 --206.405,149.288,3 --206.800,149.196,3 --207.220,149.078,3 --207.595,148.964,3 --207.974,148.841,3 --208.040,148.817,3 --208.240,148.733,3 --208.427,148.654,3 --208.865,148.468,3 --209.200,148.324,3 --209.441,148.218,3 --209.768,148.075,3 --209.968,147.981,3 --210.168,147.890,3 --210.546,147.686,3 --210.830,147.534,3 --211.117,147.364,3 --211.302,147.260,3 --211.469,147.161,3 --211.676,147.039,3 --212.030,146.819,3 --212.376,146.615,3 --212.562,146.502,3 --212.762,146.377,3 --212.821,146.343,3 --213.195,146.130,3 --213.454,145.980,3 --213.873,145.724,3 --214.090,145.604,3 --214.237,145.509,3 --214.486,145.376,3 --214.765,145.219,3 --215.041,145.074,3 --215.352,144.884,3 --215.552,144.784,3 --215.752,144.672,3 --216.096,144.508,3 --216.400,144.359,3 --216.679,144.230,3 --216.992,144.086,3 --217.192,143.995,3 --217.392,143.906,3 --217.713,143.762,3 --218.000,143.640,3 --218.332,143.496,3 --218.754,143.323,3 --218.959,143.235,3 --219.122,143.167,3 --219.278,143.095,3 --219.570,142.962,3 --219.910,142.787,3 --220.295,142.580,3 --220.495,142.462,3 --220.695,142.334,3 --220.963,142.149,3 --221.200,141.967,3 --221.416,141.808,3 --221.636,141.633,3 --221.836,141.446,3 --222.036,141.249,3 --222.249,141.049,3 --222.451,140.849,3 --222.651,140.662,3 --222.851,140.465,3 --223.064,140.265,3 --223.268,140.065,3 --223.467,139.863,3 --223.697,139.609,3 --223.894,139.404,3 --224.040,139.244,3 --224.173,139.085,3 --224.402,138.801,3 --224.654,138.491,3 --224.763,138.353,3 --224.896,138.184,3 --225.052,137.983,3 --225.277,137.698,3 --225.477,137.441,3 --225.632,137.241,3 --225.788,137.041,3 --225.988,136.783,3 --226.188,136.525,3 --226.339,136.325,3 --226.494,136.125,3 --226.734,135.794,3 --226.902,135.570,3 --227.145,135.241,3 --227.188,135.182,3 --227.303,134.999,3 --227.427,134.810,3 --227.646,134.463,3 --227.846,134.147,3 --227.965,133.947,3 --228.087,133.747,3 --228.254,133.454,3 --228.405,133.200,3 --228.551,132.936,3 --228.718,132.644,3 --228.819,132.444,3 --228.922,132.244,3 --229.083,131.908,3 --229.230,131.600,3 --229.363,131.306,3 --229.508,130.971,3 --229.590,130.771,3 --229.668,130.571,3 --229.788,130.265,3 --229.890,130.000,3 --230.043,129.592,3 --230.209,129.165,3 --230.302,128.913,3 --230.373,128.730,3 --230.431,128.583,3 --230.515,128.369,3 --230.674,127.950,3 --230.813,127.600,3 --230.944,127.263,3 --231.085,126.914,3 --231.164,126.714,3 --231.246,126.514,3 --231.351,126.251,3 --231.453,126.000,3 --231.611,125.600,3 --231.769,125.200,3 --231.864,124.952,3 --231.962,124.691,3 --232.033,124.491,3 --232.102,124.291,3 --232.224,123.939,3 --232.340,123.600,3 --232.476,123.200,3 --232.612,122.800,3 --232.690,122.570,3 --232.774,122.323,3 --232.842,122.123,3 --232.910,121.923,3 --233.036,121.553,3 --233.157,121.200,3 --233.294,120.800,3 --233.432,120.400,3 --233.506,120.183,3 --233.585,119.956,3 --233.653,119.756,3 --233.723,119.556,3 --233.841,119.173,3 --233.955,118.800,3 --234.018,118.400,3 --234.078,118.000,3 --234.085,117.600,3 --234.091,117.200,3 --234.090,116.800,3 --234.088,116.400,3 --234.086,116.000,3 --234.082,115.600,3 --234.080,115.200,3 --234.081,114.800,3 --234.083,114.400,3 --234.095,114.000,3 --234.108,113.600,3 --234.134,113.200,3 --234.163,112.800,3 --234.203,112.400,3 --234.250,112.000,3 --234.307,111.575,3 --234.354,111.286,3 --234.380,111.108,3 --234.407,110.987,3 --234.461,110.738,3 --234.555,110.409,3 --234.664,110.000,3 --234.804,109.600,3 --234.945,109.200,3 --235.054,108.917,3 --235.148,108.672,3 --235.230,108.472,3 --235.311,108.272,3 --235.445,107.955,3 --235.593,107.600,3 --235.744,107.264,3 --235.882,106.952,3 --235.979,106.752,3 --236.074,106.552,3 --236.210,106.288,3 --236.354,106.000,3 --236.522,105.688,3 --236.681,105.388,3 --236.795,105.188,3 --236.909,104.988,3 --237.090,104.700,3 --237.279,104.400,3 --237.428,104.174,3 --237.570,103.958,3 --237.719,103.758,3 --237.872,103.558,3 --238.072,103.296,3 --238.272,103.039,3 --238.431,102.839,3 --238.594,102.639,3 --238.794,102.386,3 --238.994,102.138,3 --239.150,101.938,3 --239.306,101.738,3 --239.526,101.458,3 --239.734,101.193,3 --239.922,100.957,3 --240.000,100.859,3 --240.000,100.095,3 --240.000,99.890,3 --240.000,98.718,3 --240.000,97.719,3 --240.000,97.701,3 --240.000,97.660,3 --240.000,97.593,3 --240.000,97.497,3 --240.000,97.371,3 --240.000,97.209,3 --240.000,97.008,3 --240.000,96.760,3 --240.000,96.461,3 --240.000,96.103,3 --240.000,95.678,3 --240.000,95.181,3 --240.000,94.607,3 --240.000,93.955,3 --240.000,93.231,3 --240.000,92.454,3 --240.000,91.655,3 --240.000,90.883,3 --240.000,90.200,3 --240.000,85.505,3 --240.000,85.248,3 --240.000,84.985,3 --240.000,84.721,3 --240.000,84.461,3 --240.000,84.211,3 --240.000,83.975,3 --240.000,83.758,3 --240.000,83.752,3 --240.000,83.747,3 --240.000,83.550,3 --240.000,83.380,3 --240.000,83.239,3 --240.000,79.452,3 --240.000,79.399,3 --240.000,79.353,3 --240.000,79.315,3 --240.000,79.285,3 --240.000,79.264,3 --240.000,78.000,3 --244.636,78.000,3 --245.101,78.000,3 --246.014,78.000,3 --246.200,78.000,3 --247.082,78.000,3 --247.934,78.000,3 --248.267,78.000,3 --248.630,78.000,3 --249.027,78.000,3 --249.463,78.000,3 --249.944,78.000,3 --250.478,78.000,3 --251.074,78.000,3 --251.743,78.000,3 --252.499,78.000,3 --253.362,78.000,3 --253.840,78.000,3 --253.840,77.600,3 --253.840,77.200,3 --253.827,76.800,3 -,, --256.973,43.448,4 --256.729,43.279,4 --256.529,43.072,4 --256.329,42.874,4 --256.206,42.754,4 --256.125,42.675,4 --256.100,42.647,4 --256.100,42.740,4 --256.100,43.173,4 --256.100,43.560,4 --256.100,44.763,4 --256.253,44.690,4 --256.276,44.678,4 --256.383,44.627,4 --256.852,44.403,4 --257.233,44.215,4 --257.498,44.085,4 --257.618,44.019,4 --257.618,43.985,4 --257.618,43.959,4 --257.450,43.833,4 --257.233,43.670,4 --256.973,43.448,4 -,, --164.516,158.442,5 --164.911,158.479,5 --165.200,158.505,5 --165.673,158.549,5 --166.000,158.580,5 --166.432,158.607,5 --166.800,158.637,5 --167.235,158.639,5 --167.600,158.648,5 --168.049,158.638,5 --168.400,158.631,5 --168.863,158.622,5 --169.200,158.615,5 --169.672,158.610,5 --170.000,158.605,5 --170.465,158.608,5 --170.800,158.607,5 --171.273,158.598,5 --171.600,158.584,5 --172.142,158.543,5 --172.400,158.520,5 --173.074,158.459,5 --173.200,158.447,5 --173.977,158.408,5 --174.000,158.407,5 --174.781,158.406,5 --174.800,158.406,5 --175.370,158.406,5 --175.390,158.406,5 --175.630,158.401,5 --175.913,158.397,5 --175.922,158.397,5 --176.400,158.341,5 --176.571,158.312,5 --177.200,158.196,5 --177.602,158.105,5 --178.000,158.018,5 --178.394,157.940,5 --178.823,157.869,5 --179.276,157.806,5 --179.600,157.764,5 --180.237,157.682,5 --180.400,157.662,5 --180.803,157.608,5 --180.823,157.605,5 --180.830,157.603,5 --180.843,157.600,5 --180.360,157.600,5 --180.301,157.600,5 --179.863,157.600,5 --174.786,157.600,5 --172.852,157.600,5 --158.437,157.600,5 --158.398,157.600,5 --158.398,157.600,5 --158.398,157.600,5 --158.399,157.600,5 --158.628,157.649,5 --158.800,157.695,5 --159.153,157.769,5 --159.580,157.866,5 --160.000,157.934,5 --160.400,158.008,5 --160.800,158.057,5 --161.215,158.117,5 --161.644,158.165,5 --162.000,158.203,5 --162.341,158.238,5 --162.800,158.282,5 --163.049,158.305,5 --163.600,158.357,5 --163.714,158.367,5 --164.027,158.396,5 --164.066,158.400,5 --164.516,158.442,5 -,, --246.743,106.000,6 --246.842,105.649,6 --246.960,105.200,6 --246.911,104.909,6 --246.826,104.400,6 --246.663,104.080,6 --246.524,103.884,6 --246.229,103.705,6 --246.000,103.543,6 --245.695,103.539,6 --245.223,103.630,6 --245.126,103.784,6 --244.816,104.023,6 --244.800,104.051,6 --244.575,104.475,6 --244.502,104.827,6 --244.367,105.200,6 --244.445,105.570,6 --244.530,105.939,6 --244.649,106.066,6 --244.847,106.365,6 --244.900,106.388,6 --245.321,106.533,6 --245.811,106.542,6 --246.000,106.557,6 --246.409,106.472,6 --246.468,106.456,6 --246.612,106.177,6 --246.743,106.000,6 -,, --81.252,43.368,7 --81.097,43.600,7 --81.216,43.858,7 --81.325,44.133,7 --81.646,44.287,7 --82.000,44.458,7 --82.295,44.599,7 --82.556,44.725,7 --82.575,44.734,7 --82.580,44.737,7 --82.581,44.737,7 --82.600,44.746,7 --82.600,44.345,7 --82.600,44.330,7 --82.600,43.936,7 --82.600,43.781,7 --82.600,42.489,7 --82.600,41.787,7 --82.579,41.829,7 --82.546,41.897,7 --82.447,42.097,7 --82.348,42.297,7 --82.148,42.517,7 --81.948,42.733,7 --81.658,42.933,7 --81.373,43.133,7 --81.252,43.368,7 -,, --85.025,74.800,8 --84.929,75.028,8 --84.834,75.258,8 --84.686,75.458,8 --84.537,75.658,8 --84.337,75.892,8 --84.137,76.123,8 --84.117,76.138,8 --84.100,76.150,8 --84.100,70.083,8 --84.100,69.923,8 --84.100,68.404,8 --86.360,68.404,8 --100.000,68.404,8 --100.000,68.615,8 --100.000,68.844,8 --100.000,73.353,8 --96.236,73.353,8 --94.632,73.353,8 --94.135,73.353,8 --85.256,73.353,8 --85.240,73.600,8 --85.237,73.642,8 --85.210,74.000,8 --85.118,74.400,8 --85.025,74.800,8 -,, --81.385,88.728,9 --81.297,88.400,9 --81.274,88.000,9 --81.259,87.600,9 --81.259,87.200,9 --81.259,86.800,9 --81.258,86.400,9 --81.258,86.000,9 --81.258,85.600,9 --81.258,85.200,9 --81.258,84.800,9 --81.258,84.400,9 --81.258,84.000,9 --81.258,83.600,9 --81.258,83.200,9 --81.258,82.800,9 --81.258,82.400,9 --81.258,82.000,9 --81.258,81.100,9 --81.258,80.450,9 --81.258,80.089,9 --81.258,78.500,9 --81.258,78.457,9 --81.258,78.400,9 --81.258,78.320,9 --81.258,78.200,9 --81.258,78.000,9 --81.258,77.600,9 --81.258,77.000,9 --81.258,76.400,9 --81.342,76.057,9 --81.429,75.714,9 --81.669,75.514,9 --81.915,75.314,9 --82.115,75.246,9 --82.315,75.181,9 --82.459,75.059,9 --82.550,74.981,9 --82.600,74.938,9 --82.600,77.619,9 --82.600,80.116,9 --82.600,85.728,9 --82.600,90.203,9 --82.458,90.129,9 --82.096,89.949,9 --81.896,89.674,9 --81.696,89.426,9 --81.578,89.226,9 --81.468,89.026,9 --81.385,88.728,9 -,, +X_mm,Z_mm,path_index +-121.198,144.000,0 +-120.998,143.909,0 +-120.709,143.775,0 +-120.400,143.631,0 +-120.055,143.472,0 +-119.737,143.322,0 +-119.537,143.231,0 +-119.337,143.136,0 +-119.081,143.015,0 +-118.800,142.877,0 +-118.456,142.702,0 +-118.143,142.541,0 +-117.943,142.430,0 +-117.743,142.319,0 +-117.487,142.162,0 +-117.200,141.988,0 +-116.933,141.820,0 +-116.692,141.669,0 +-116.492,141.544,0 +-116.292,141.419,0 +-115.958,141.239,0 +-115.581,141.024,0 +-115.270,140.909,0 +-115.098,140.825,0 +-115.021,140.807,0 +-114.703,140.679,0 +-114.480,140.631,0 +-114.018,140.412,0 +-113.588,140.299,0 +-113.419,140.168,0 +-113.412,140.162,0 +-113.396,140.139,0 +-113.153,139.805,0 +-112.988,139.601,0 +-112.820,139.192,0 +-112.810,139.176,0 +-112.650,138.869,0 +-112.602,138.747,0 +-112.484,138.391,0 +-112.306,138.026,0 +-112.147,137.668,0 +-112.048,137.508,0 +-111.987,137.348,0 +-111.866,137.144,0 +-111.670,136.727,0 +-111.449,136.365,0 +-111.319,136.135,0 +-111.218,135.971,0 +-111.146,135.852,0 +-110.987,135.608,0 +-110.782,135.278,0 +-110.564,134.943,0 +-110.438,134.743,0 +-110.312,134.543,0 +-110.165,134.288,0 +-110.000,134.000,0 +-109.833,133.695,0 +-109.688,133.426,0 +-109.587,133.226,0 +-109.487,133.026,0 +-109.340,132.731,0 +-109.176,132.400,0 +-109.024,132.090,0 +-108.888,131.817,0 +-108.793,131.617,0 +-108.696,131.417,0 +-108.562,131.127,0 +-108.408,130.800,0 +-108.251,130.436,0 +-108.113,130.129,0 +-108.031,129.929,0 +-107.945,129.729,0 +-107.853,129.493,0 +-107.730,129.200,0 +-107.579,128.800,0 +-107.413,128.373,0 +-107.303,128.075,0 +-107.237,127.899,0 +-107.194,127.782,0 +-107.100,127.526,0 +-106.982,127.210,0 +-106.831,126.800,0 +-106.655,126.325,0 +-106.536,126.004,0 +-106.404,125.641,0 +-106.394,125.615,0 +-106.327,125.443,0 +-106.244,125.216,0 +-106.091,124.800,0 +-105.946,124.400,0 +-105.804,124.001,0 +-105.690,123.683,0 +-105.608,123.444,0 +-105.561,123.311,0 +-105.500,123.141,0 +-105.391,122.831,0 +-105.243,122.400,0 +-105.104,122.000,0 +-104.975,121.624,0 +-104.871,121.323,0 +-104.800,121.112,0 +-104.746,120.957,0 +-104.685,120.784,0 +-104.565,120.435,0 +-104.417,120.000,0 +-104.279,119.600,0 +-104.156,119.197,0 +-104.065,118.918,0 +-103.995,118.655,0 +-103.962,118.538,0 +-103.948,118.280,0 +-103.919,118.000,0 +-103.930,117.514,0 +-103.944,117.200,0 +-103.969,116.592,0 +-103.979,116.400,0 +-103.987,115.724,0 +-103.989,115.600,0 +-103.986,114.950,0 +-103.988,114.800,0 +-103.990,114.119,0 +-103.992,114.000,0 +-103.999,113.589,0 +-103.999,113.577,0 +-104.006,113.365,0 +-104.013,113.185,0 +-104.010,112.719,0 +-104.013,112.372,0 +-104.006,112.095,0 +-104.003,111.965,0 +-103.986,111.799,0 +-103.967,111.596,0 +-103.895,111.163,0 +-103.834,110.800,0 +-103.716,110.400,0 +-103.600,110.000,0 +-103.469,109.658,0 +-103.329,109.297,0 +-103.243,109.097,0 +-103.157,108.897,0 +-103.040,108.639,0 +-102.931,108.400,0 +-102.757,108.022,0 +-102.559,107.586,0 +-102.467,107.389,0 +-102.390,107.223,0 +-102.344,107.122,0 +-102.215,106.834,0 +-102.019,106.419,0 +-101.808,105.964,0 +-101.685,105.711,0 +-101.616,105.570,0 +-101.530,105.413,0 +-101.412,105.206,0 +-101.193,104.830,0 +-100.993,104.502,0 +-100.864,104.302,0 +-100.731,104.102,0 +-100.556,103.846,0 +-100.382,103.600,0 +-100.219,103.365,0 +-100.050,103.129,0 +-100.019,103.083,0 +-100.000,103.056,0 +-100.000,102.373,0 +-100.000,102.162,0 +-100.000,102.102,0 +-100.000,102.028,0 +-100.000,101.122,0 +-100.000,100.960,0 +-100.000,100.809,0 +-100.000,100.168,0 +-100.000,99.968,0 +-100.000,99.844,0 +-100.000,99.612,0 +-100.000,99.147,0 +-100.000,99.063,0 +-100.000,98.797,0 +-100.000,98.470,0 +-100.000,98.444,0 +-100.000,98.156,0 +-100.000,98.017,0 +-100.000,98.010,0 +-100.000,97.924,0 +-100.000,97.619,0 +-100.000,97.514,0 +-100.000,97.482,0 +-100.000,97.468,0 +-100.000,97.446,0 +-100.000,97.416,0 +-100.000,97.096,0 +-100.000,97.090,0 +-100.000,97.079,0 +-100.000,96.751,0 +-100.000,96.439,0 +-100.000,96.153,0 +-100.000,94.901,0 +-100.000,94.634,0 +-100.000,94.378,0 +-100.000,94.140,0 +-100.000,93.922,0 +-100.000,93.730,0 +-100.000,93.567,0 +-100.000,93.435,0 +-100.000,89.784,0 +-100.000,89.134,0 +-100.000,89.110,0 +-100.000,89.081,0 +-100.000,89.047,0 +-100.000,89.008,0 +-100.000,88.965,0 +-100.000,88.920,0 +-100.000,88.872,0 +-100.000,88.824,0 +-100.000,88.775,0 +-100.000,88.726,0 +-100.000,88.679,0 +-100.000,88.635,0 +-100.000,87.312,0 +-100.000,87.270,0 +-100.000,87.226,0 +-100.000,87.180,0 +-100.000,87.133,0 +-100.000,87.086,0 +-100.000,87.040,0 +-100.000,86.995,0 +-100.000,86.953,0 +-100.000,86.914,0 +-100.000,85.701,0 +-93.017,85.701,0 +-90.576,85.701,0 +-88.688,85.701,0 +-87.170,85.701,0 +-86.609,85.701,0 +-85.190,85.701,0 +-84.440,85.701,0 +-83.259,85.701,0 +-83.259,85.621,0 +-83.259,85.613,0 +-83.259,85.601,0 +-83.259,85.571,0 +-83.259,85.517,0 +-83.259,85.382,0 +-83.259,85.200,0 +-83.259,84.800,0 +-83.258,84.400,0 +-83.258,84.000,0 +-83.258,83.600,0 +-83.258,83.200,0 +-83.258,82.800,0 +-83.258,82.400,0 +-83.258,82.000,0 +-83.258,81.600,0 +-83.258,81.200,0 +-83.258,80.800,0 +-83.258,80.400,0 +-83.258,80.000,0 +-83.258,79.907,0 +-86.381,79.907,0 +-100.000,79.907,0 +-100.000,79.392,0 +-100.000,79.352,0 +-100.000,79.307,0 +-100.000,76.881,0 +-100.000,76.687,0 +-100.000,74.985,0 +-100.000,73.713,0 +-100.000,73.437,0 +-100.000,73.142,0 +-100.000,72.107,0 +-100.000,71.222,0 +-100.000,70.915,0 +-100.000,70.634,0 +-100.000,70.595,0 +-100.000,70.510,0 +-100.000,70.371,0 +-100.000,70.172,0 +-100.000,69.997,0 +-100.000,69.759,0 +-100.000,69.456,0 +-100.000,69.092,0 +-100.000,68.979,0 +-100.000,68.582,0 +-100.000,68.150,0 +-100.000,68.061,0 +-100.000,67.976,0 +-100.000,67.536,0 +-100.000,67.098,0 +-100.000,66.686,0 +-100.000,66.592,0 +-100.000,66.508,0 +-100.000,66.110,0 +-100.000,65.765,0 +-100.000,65.484,0 +-100.000,65.270,0 +-100.000,65.121,0 +-100.000,65.031,0 +-100.000,64.993,0 +-100.000,64.026,0 +-100.000,62.739,0 +-100.000,62.477,0 +-100.000,62.237,0 +-100.000,60.581,0 +-100.000,60.408,0 +-100.000,58.110,0 +-100.000,58.070,0 +-100.000,57.555,0 +-97.176,57.555,0 +-93.760,57.555,0 +-84.896,57.555,0 +-84.880,57.244,0 +-84.878,57.200,0 +-84.857,56.800,0 +-84.834,56.365,0 +-84.816,56.014,0 +-84.807,55.846,0 +-84.800,55.693,0 +-84.789,55.475,0 +-84.671,55.268,0 +-84.657,55.243,0 +-84.718,55.182,0 +-84.823,55.077,0 +-84.900,55.000,0 +-84.900,54.200,0 +-84.900,54.000,0 +-85.002,53.898,0 +-85.054,53.846,0 +-85.084,53.833,0 +-85.200,53.783,0 +-85.566,53.764,0 +-85.874,53.742,0 +-86.074,53.635,0 +-86.274,53.538,0 +-86.508,53.362,0 +-86.835,53.138,0 +-87.063,52.953,0 +-87.228,52.827,0 +-87.332,52.701,0 +-87.553,52.435,0 +-87.732,52.204,0 +-87.957,51.926,0 +-88.067,51.726,0 +-88.180,51.526,0 +-88.369,51.153,0 +-88.553,50.800,0 +-88.659,50.576,0 +-88.773,50.343,0 +-88.867,50.143,0 +-88.961,49.943,0 +-89.138,49.567,0 +-89.313,49.200,0 +-89.430,48.949,0 +-89.551,48.696,0 +-89.645,48.496,0 +-89.737,48.296,0 +-89.901,47.946,0 +-90.060,47.600,0 +-90.190,47.315,0 +-90.324,47.019,0 +-90.407,46.818,0 +-90.488,46.619,0 +-90.565,46.303,0 +-90.618,46.000,0 +-90.571,45.718,0 +-90.530,45.463,0 +-90.319,45.263,0 +-90.096,45.063,0 +-89.991,44.973,0 +-89.956,44.944,0 +-89.958,44.942,0 +-89.989,44.911,0 +-90.120,44.780,0 +-90.241,44.659,0 +-90.301,44.599,0 +-90.400,44.500,0 +-90.500,44.400,0 +-90.900,44.000,0 +-90.900,43.954,0 +-90.900,43.942,0 +-90.900,43.934,0 +-90.900,43.772,0 +-91.279,43.636,0 +-91.589,43.571,0 +-91.980,43.232,0 +-92.005,43.208,0 +-92.098,43.010,0 +-92.203,42.816,0 +-92.426,42.424,0 +-92.617,42.054,0 +-92.729,41.854,0 +-92.828,41.654,0 +-92.940,41.430,0 +-93.051,41.200,0 +-93.237,40.812,0 +-93.422,40.420,0 +-93.516,40.220,0 +-93.609,40.020,0 +-93.711,39.808,0 +-93.809,39.600,0 +-93.999,39.200,0 +-94.189,38.800,0 +-94.287,38.590,0 +-94.389,38.376,0 +-94.483,38.176,0 +-94.576,37.976,0 +-94.759,37.586,0 +-94.939,37.200,0 +-95.049,36.964,0 +-95.163,36.721,0 +-95.257,36.521,0 +-95.351,36.321,0 +-95.521,35.957,0 +-95.689,35.600,0 +-95.812,35.338,0 +-95.938,35.068,0 +-96.032,34.868,0 +-96.126,34.668,0 +-96.284,34.330,0 +-96.439,34.000,0 +-96.574,33.711,0 +-96.713,33.415,0 +-96.807,33.215,0 +-96.901,33.015,0 +-97.047,32.704,0 +-97.189,32.400,0 +-97.337,32.084,0 +-97.488,31.761,0 +-97.582,31.561,0 +-97.676,31.361,0 +-97.809,31.077,0 +-97.939,30.800,0 +-98.100,30.458,0 +-98.263,30.110,0 +-98.357,29.910,0 +-98.452,29.710,0 +-98.572,29.452,0 +-98.689,29.200,0 +-98.862,28.830,0 +-99.038,28.450,0 +-99.131,28.250,0 +-99.223,28.050,0 +-99.331,27.819,0 +-99.432,27.600,0 +-99.618,27.204,0 +-99.824,26.759,0 +-99.908,26.581,0 +-100.000,26.400,0 +-100.001,26.398,0 +-100.163,26.031,0 +-100.331,25.675,0 +-100.549,25.200,0 +-100.653,24.975,0 +-100.767,24.707,0 +-100.846,24.507,0 +-100.915,24.307,0 +-101.048,23.933,0 +-101.130,23.600,0 +-101.214,23.200,0 +-101.244,22.800,0 +-101.240,22.792,0 +-101.203,22.697,0 +-101.303,22.597,0 +-101.400,22.500,0 +-101.500,22.400,0 +-101.900,22.000,0 +-102.300,21.600,0 +-102.400,21.500,0 +-103.200,21.500,0 +-103.400,21.500,0 +-103.500,21.400,0 +-103.900,21.000,0 +-103.925,20.975,0 +-103.970,20.930,0 +-103.978,20.922,0 +-104.000,20.920,0 +-104.400,20.883,0 +-104.719,20.854,0 +-105.052,20.823,0 +-105.252,20.805,0 +-105.452,20.786,0 +-105.733,20.756,0 +-106.000,20.727,0 +-106.400,20.670,0 +-106.800,20.613,0 +-107.200,20.534,0 +-107.600,20.454,0 +-108.000,20.360,0 +-108.400,20.267,0 +-108.776,20.176,0 +-109.161,20.085,0 +-109.361,20.037,0 +-109.561,19.991,0 +-109.786,19.944,0 +-110.000,19.912,0 +-110.400,19.853,0 +-110.800,19.814,0 +-111.200,19.788,0 +-111.600,19.770,0 +-112.000,19.751,0 +-112.400,19.731,0 +-112.800,19.697,0 +-113.200,19.661,0 +-113.600,19.586,0 +-114.000,19.512,0 +-114.292,19.419,0 +-114.630,19.306,0 +-114.830,19.210,0 +-115.030,19.115,0 +-115.395,18.862,0 +-115.632,18.692,0 +-115.987,18.415,0 +-116.003,18.403,0 +-116.135,18.223,0 +-116.273,18.032,0 +-116.505,17.658,0 +-116.695,17.333,0 +-116.775,17.133,0 +-116.849,16.933,0 +-116.898,16.675,0 +-116.944,16.400,0 +-116.977,16.000,0 +-116.998,15.600,0 +-117.004,15.200,0 +-117.007,14.800,0 +-117.007,14.400,0 +-117.007,14.000,0 +-117.007,13.600,0 +-117.008,13.200,0 +-117.008,12.800,0 +-117.008,12.400,0 +-117.008,12.000,0 +-117.008,11.600,0 +-117.008,11.200,0 +-117.008,10.800,0 +-117.008,10.400,0 +-117.008,10.000,0 +-117.009,9.600,0 +-117.009,9.200,0 +-117.009,8.800,0 +-117.009,8.400,0 +-117.009,8.239,0 +-117.009,8.056,0 +-117.009,8.000,0 +-117.010,7.890,0 +-117.266,7.634,0 +-117.317,7.583,0 +-117.400,7.500,0 +-117.440,7.460,0 +-117.600,7.300,0 +-117.600,7.109,0 +-117.600,4.436,0 +-117.600,4.421,0 +-117.600,4.405,0 +-117.600,4.378,0 +-117.600,4.348,0 +-117.600,4.321,0 +-117.600,4.290,0 +-117.600,4.259,0 +-117.600,4.222,0 +-117.600,3.710,0 +-117.600,3.568,0 +-117.600,3.261,0 +-117.600,3.252,0 +-117.600,2.584,0 +-117.502,2.587,0 +-117.495,2.587,0 +-117.492,2.587,0 +-117.487,2.587,0 +-117.478,2.588,0 +-117.467,2.588,0 +-117.454,2.588,0 +-117.443,2.589,0 +-117.435,2.589,0 +-117.419,2.589,0 +-117.393,2.590,0 +-117.360,2.591,0 +-117.317,2.592,0 +-117.288,2.593,0 +-117.247,2.594,0 +-117.200,2.596,0 +-116.800,2.607,0 +-116.400,2.618,0 +-116.000,2.670,0 +-115.600,2.725,0 +-115.349,2.889,0 +-115.105,3.010,0 +-115.054,3.328,0 +-115.009,3.600,0 +-115.009,4.000,0 +-115.009,4.400,0 +-115.009,4.800,0 +-115.009,5.200,0 +-115.009,5.600,0 +-115.009,6.000,0 +-115.009,6.400,0 +-115.009,6.800,0 +-115.009,7.200,0 +-115.009,7.600,0 +-115.008,8.000,0 +-115.008,8.400,0 +-115.008,8.800,0 +-115.008,9.200,0 +-115.008,9.600,0 +-115.007,10.000,0 +-115.007,10.400,0 +-115.007,10.800,0 +-115.007,11.200,0 +-115.007,11.600,0 +-115.007,12.000,0 +-115.007,12.400,0 +-115.007,12.800,0 +-115.007,13.200,0 +-115.006,13.600,0 +-115.006,14.000,0 +-115.006,14.400,0 +-115.006,14.800,0 +-115.006,15.200,0 +-115.006,15.600,0 +-114.989,16.000,0 +-114.944,16.400,0 +-114.795,16.737,0 +-114.641,17.048,0 +-114.270,17.271,0 +-113.975,17.447,0 +-113.630,17.564,0 +-113.541,17.591,0 +-113.330,17.623,0 +-113.140,17.652,0 +-112.704,17.700,0 +-112.400,17.724,0 +-112.000,17.740,0 +-111.600,17.756,0 +-111.200,17.772,0 +-110.800,17.789,0 +-110.400,17.816,0 +-110.000,17.864,0 +-109.600,17.930,0 +-109.200,18.017,0 +-108.800,18.113,0 +-108.400,18.210,0 +-108.104,18.281,0 +-107.806,18.353,0 +-107.606,18.401,0 +-107.406,18.450,0 +-107.102,18.520,0 +-106.800,18.590,0 +-106.400,18.657,0 +-106.000,18.723,0 +-105.600,18.763,0 +-105.200,18.802,0 +-104.800,18.839,0 +-104.400,18.875,0 +-104.000,18.912,0 +-103.600,18.948,0 +-103.200,18.985,0 +-102.800,19.021,0 +-102.400,19.058,0 +-102.000,19.094,0 +-101.617,19.129,0 +-101.226,19.165,0 +-101.026,19.184,0 +-100.826,19.202,0 +-100.609,19.223,0 +-100.400,19.245,0 +-100.000,19.285,0 +-99.600,19.325,0 +-99.215,19.505,0 +-98.849,19.683,0 +-98.829,20.042,0 +-98.867,20.431,0 +-98.971,20.796,0 +-99.099,21.200,0 +-99.054,21.482,0 +-99.017,22.000,0 +-99.063,22.362,0 +-99.114,22.657,0 +-99.187,22.955,0 +-99.223,23.111,0 +-99.223,23.189,0 +-99.216,23.237,0 +-99.125,23.418,0 +-99.044,23.605,0 +-98.888,24.040,0 +-98.725,24.400,0 +-98.601,24.671,0 +-98.470,24.950,0 +-98.376,25.150,0 +-98.283,25.350,0 +-98.129,25.679,0 +-97.978,26.000,0 +-97.839,26.298,0 +-97.695,26.604,0 +-97.602,26.804,0 +-97.508,27.004,0 +-97.367,27.306,0 +-97.229,27.600,0 +-97.076,27.928,0 +-96.921,28.261,0 +-96.829,28.461,0 +-96.735,28.661,0 +-96.607,28.932,0 +-96.481,29.200,0 +-96.314,29.552,0 +-96.146,29.911,0 +-96.052,30.111,0 +-95.958,30.311,0 +-95.842,30.559,0 +-95.730,30.800,0 +-95.552,31.179,0 +-95.371,31.565,0 +-95.277,31.765,0 +-95.184,31.965,0 +-95.080,32.186,0 +-94.980,32.400,0 +-94.792,32.800,0 +-94.605,33.200,0 +-94.509,33.405,0 +-94.409,33.618,0 +-94.315,33.818,0 +-94.221,34.018,0 +-94.036,34.413,0 +-93.855,34.800,0 +-93.746,35.032,0 +-93.634,35.272,0 +-93.540,35.472,0 +-93.446,35.672,0 +-93.274,36.039,0 +-93.105,36.400,0 +-92.983,36.659,0 +-92.858,36.925,0 +-92.765,37.125,0 +-92.670,37.325,0 +-92.510,37.666,0 +-92.354,38.000,0 +-92.220,38.285,0 +-92.083,38.578,0 +-91.988,38.778,0 +-91.889,38.978,0 +-91.741,39.293,0 +-91.596,39.600,0 +-91.452,39.915,0 +-91.307,40.240,0 +-91.211,40.440,0 +-91.118,40.640,0 +-90.973,40.925,0 +-90.797,41.200,0 +-90.641,41.535,0 +-90.478,41.806,0 +-90.397,42.006,0 +-90.210,42.207,0 +-90.000,42.416,0 +-89.871,42.607,0 +-89.562,42.603,0 +-89.257,42.603,0 +-88.858,42.310,0 +-88.824,42.267,0 +-88.896,42.017,0 +-88.789,41.762,0 +-88.791,41.727,0 +-88.791,41.554,0 +-88.800,41.510,0 +-88.907,41.105,0 +-88.983,40.875,0 +-89.090,40.398,0 +-89.185,40.000,0 +-89.251,39.600,0 +-89.338,39.200,0 +-89.416,38.839,0 +-89.506,38.447,0 +-89.556,38.229,0 +-89.600,38.037,0 +-89.654,37.802,0 +-89.706,37.579,0 +-89.799,37.169,0 +-89.884,36.800,0 +-89.976,36.400,0 +-90.065,36.000,0 +-90.153,35.606,0 +-90.206,35.196,0 +-90.300,34.800,0 +-90.269,34.577,0 +-90.386,34.245,0 +-90.402,33.853,0 +-90.405,33.722,0 +-90.405,33.599,0 +-90.405,33.592,0 +-90.109,33.420,0 +-90.000,33.306,0 +-89.667,33.102,0 +-89.410,32.932,0 +-89.172,32.801,0 +-88.966,32.689,0 +-88.663,32.566,0 +-88.400,32.455,0 +-88.038,32.295,0 +-87.739,32.178,0 +-87.410,31.998,0 +-87.294,31.933,0 +-87.022,31.933,0 +-86.968,31.939,0 +-86.824,32.016,0 +-86.653,32.344,0 +-86.412,32.428,0 +-86.329,32.555,0 +-86.296,32.657,0 +-86.270,33.200,0 +-86.255,33.381,0 +-86.148,33.996,0 +-86.098,34.381,0 +-85.932,34.800,0 +-85.826,35.084,0 +-85.685,35.378,0 +-85.590,35.578,0 +-85.494,35.778,0 +-85.343,36.093,0 +-85.196,36.400,0 +-85.051,36.702,0 +-84.902,37.012,0 +-84.806,37.212,0 +-84.710,37.412,0 +-84.567,37.709,0 +-84.427,38.000,0 +-84.274,38.319,0 +-84.117,38.644,0 +-84.021,38.844,0 +-83.925,39.044,0 +-83.790,39.326,0 +-83.658,39.600,0 +-83.497,39.935,0 +-83.333,40.276,0 +-83.237,40.476,0 +-83.141,40.676,0 +-83.012,40.942,0 +-82.886,41.200,0 +-82.718,41.546,0 +-82.546,41.897,0 +-82.447,42.097,0 +-82.348,42.297,0 +-82.148,42.517,0 +-81.948,42.733,0 +-81.658,42.933,0 +-81.373,43.133,0 +-81.252,43.368,0 +-81.097,43.600,0 +-81.216,43.858,0 +-81.325,44.133,0 +-81.646,44.287,0 +-82.000,44.458,0 +-82.295,44.599,0 +-82.556,44.725,0 +-82.756,44.821,0 +-82.956,44.918,0 +-83.261,45.065,0 +-83.600,45.228,0 +-84.030,45.385,0 +-84.378,45.518,0 +-84.650,45.588,0 +-84.749,45.612,0 +-84.788,45.612,0 +-84.827,45.612,0 +-84.992,45.535,0 +-85.192,45.442,0 +-85.627,45.239,0 +-86.000,45.065,0 +-86.228,44.958,0 +-86.483,44.839,0 +-86.683,44.746,0 +-86.883,44.652,0 +-87.255,44.496,0 +-87.600,44.368,0 +-87.986,44.448,0 +-88.343,44.515,0 +-88.539,44.871,0 +-88.747,45.236,0 +-88.659,45.654,0 +-88.620,45.963,0 +-88.423,46.381,0 +-88.227,46.800,0 +-88.125,47.017,0 +-88.020,47.242,0 +-87.926,47.442,0 +-87.832,47.642,0 +-87.652,48.025,0 +-87.476,48.400,0 +-87.362,48.644,0 +-87.244,48.895,0 +-87.151,49.095,0 +-87.057,49.295,0 +-86.890,49.651,0 +-86.727,50.000,0 +-86.600,50.271,0 +-86.470,50.549,0 +-86.362,50.749,0 +-86.261,50.949,0 +-86.061,51.207,0 +-85.861,51.470,0 +-85.488,51.686,0 +-85.228,51.876,0 +-84.907,51.990,0 +-84.847,52.016,0 +-84.677,52.106,0 +-84.427,52.192,0 +-84.000,52.223,0 +-83.600,52.205,0 +-83.260,52.316,0 +-82.923,52.424,0 +-82.792,52.811,0 +-82.666,53.200,0 +-82.686,53.600,0 +-82.707,54.000,0 +-82.728,54.400,0 +-82.749,54.800,0 +-82.770,55.200,0 +-82.791,55.600,0 +-82.812,56.000,0 +-82.833,56.400,0 +-82.854,56.800,0 +-82.874,57.200,0 +-82.891,57.519,0 +-82.895,57.600,0 +-82.916,58.000,0 +-82.927,58.200,0 +-82.942,58.500,0 +-82.958,58.800,0 +-82.979,59.200,0 +-83.000,59.600,0 +-83.026,60.100,0 +-83.035,60.267,0 +-83.042,60.400,0 +-83.063,60.800,0 +-83.083,61.200,0 +-83.104,61.600,0 +-83.125,62.000,0 +-83.146,62.400,0 +-83.169,62.831,0 +-83.185,63.143,0 +-83.194,63.316,0 +-83.201,63.452,0 +-83.213,63.685,0 +-83.230,64.005,0 +-83.250,64.400,0 +-83.270,64.800,0 +-83.291,65.200,0 +-83.311,65.600,0 +-83.331,66.000,0 +-83.352,66.400,0 +-83.372,66.800,0 +-83.392,67.200,0 +-83.412,67.600,0 +-83.433,68.000,0 +-83.453,68.400,0 +-83.471,68.800,0 +-83.488,69.200,0 +-83.483,69.600,0 +-83.477,70.000,0 +-83.451,70.400,0 +-83.425,70.800,0 +-83.397,71.200,0 +-83.370,71.600,0 +-83.343,72.000,0 +-83.316,72.400,0 +-83.288,72.800,0 +-83.261,73.200,0 +-83.241,73.502,0 +-83.217,73.815,0 +-83.203,74.015,0 +-83.185,74.215,0 +-82.985,74.504,0 +-82.785,74.781,0 +-82.550,74.981,0 +-82.315,75.181,0 +-82.115,75.246,0 +-81.915,75.314,0 +-81.669,75.514,0 +-81.429,75.714,0 +-81.342,76.057,0 +-81.258,76.400,0 +-81.258,76.533,0 +-81.258,76.800,0 +-81.258,77.000,0 +-81.258,77.600,0 +-81.258,78.200,0 +-81.258,78.400,0 +-81.258,78.500,0 +-81.258,78.560,0 +-81.258,78.600,0 +-81.258,78.629,0 +-81.258,78.650,0 +-81.258,79.400,0 +-81.258,79.600,0 +-81.258,79.696,0 +-81.258,79.907,0 +-81.258,80.342,0 +-81.258,80.400,0 +-81.258,80.800,0 +-81.258,81.200,0 +-81.258,81.600,0 +-81.258,82.000,0 +-81.258,82.400,0 +-81.258,82.800,0 +-81.258,83.200,0 +-81.258,83.600,0 +-81.258,84.000,0 +-81.258,84.400,0 +-81.258,84.800,0 +-81.258,85.200,0 +-81.258,85.333,0 +-81.258,85.600,0 +-81.258,86.000,0 +-81.259,86.800,0 +-81.259,87.200,0 +-81.259,87.600,0 +-81.274,88.000,0 +-81.297,88.400,0 +-81.385,88.728,0 +-81.468,89.026,0 +-81.578,89.226,0 +-81.696,89.426,0 +-81.896,89.674,0 +-82.096,89.949,0 +-82.458,90.129,0 +-82.800,90.308,0 +-83.200,90.293,0 +-83.600,90.289,0 +-83.891,90.310,0 +-84.158,90.331,0 +-84.358,90.426,0 +-84.558,90.533,0 +-84.797,90.733,0 +-85.045,90.933,0 +-85.255,91.306,0 +-85.445,91.634,0 +-85.543,91.911,0 +-85.589,92.036,0 +-85.640,92.201,0 +-85.704,92.403,0 +-85.851,92.835,0 +-85.979,93.200,0 +-86.117,93.468,0 +-86.265,93.743,0 +-86.513,93.943,0 +-86.758,94.143,0 +-86.958,94.286,0 +-87.158,94.430,0 +-87.374,94.585,0 +-87.600,94.748,0 +-87.862,94.936,0 +-88.115,95.118,0 +-88.315,95.261,0 +-88.593,95.461,0 +-89.272,95.948,0 +-89.472,96.092,0 +-89.642,96.214,0 +-89.731,96.278,0 +-90.000,96.471,0 +-90.188,96.605,0 +-90.271,96.665,0 +-90.420,96.772,0 +-90.629,96.923,0 +-90.829,97.066,0 +-91.308,97.410,0 +-91.726,97.710,0 +-92.026,97.925,0 +-92.265,98.097,0 +-92.544,98.297,0 +-92.744,98.440,0 +-92.967,98.601,0 +-93.200,98.769,0 +-93.451,98.952,0 +-93.693,99.128,0 +-93.893,99.286,0 +-94.093,99.445,0 +-94.337,99.645,0 +-94.582,99.845,0 +-94.782,100.021,0 +-94.982,100.196,0 +-95.198,100.396,0 +-95.415,100.596,0 +-95.615,100.791,0 +-95.815,100.984,0 +-96.008,101.184,0 +-96.202,101.384,0 +-96.402,101.607,0 +-96.602,101.829,0 +-96.768,102.029,0 +-96.938,102.229,0 +-97.138,102.497,0 +-97.338,102.758,0 +-97.482,102.958,0 +-97.630,103.158,0 +-97.782,103.378,0 +-97.936,103.600,0 +-98.122,103.867,0 +-98.306,104.135,0 +-98.450,104.335,0 +-98.589,104.535,0 +-98.789,104.809,0 +-98.989,105.095,0 +-99.133,105.295,0 +-99.271,105.495,0 +-99.432,105.754,0 +-99.580,106.000,0 +-99.739,106.286,0 +-99.909,106.601,0 +-99.999,106.801,0 +-100.090,107.001,0 +-100.230,107.315,0 +-100.361,107.600,0 +-100.509,107.930,0 +-100.671,108.279,0 +-100.762,108.479,0 +-100.855,108.679,0 +-100.980,108.950,0 +-101.097,109.200,0 +-101.266,109.568,0 +-101.442,109.955,0 +-101.531,110.155,0 +-101.619,110.355,0 +-101.704,110.587,0 +-101.782,110.800,0 +-101.879,111.200,0 +-101.978,111.600,0 +-102.002,112.000,0 +-102.033,112.400,0 +-102.016,112.800,0 +-102.013,113.200,0 +-101.992,113.600,0 +-101.985,114.000,0 +-101.979,114.400,0 +-101.978,114.800,0 +-101.977,115.200,0 +-101.975,115.600,0 +-101.967,116.000,0 +-101.966,116.400,0 +-101.940,116.800,0 +-101.933,117.200,0 +-101.890,117.600,0 +-101.867,118.000,0 +-101.892,118.400,0 +-101.916,118.800,0 +-102.035,119.200,0 +-102.155,119.634,0 +-102.279,119.993,0 +-102.341,120.172,0 +-102.393,120.324,0 +-102.467,120.538,0 +-102.566,120.826,0 +-102.695,121.200,0 +-102.833,121.600,0 +-102.980,122.028,0 +-103.093,122.353,0 +-103.154,122.532,0 +-103.199,122.660,0 +-103.283,122.904,0 +-103.387,123.203,0 +-103.524,123.600,0 +-103.666,124.000,0 +-103.813,124.421,0 +-103.911,124.696,0 +-103.974,124.873,0 +-104.007,124.964,0 +-104.111,125.251,0 +-104.227,125.569,0 +-104.385,126.000,0 +-104.554,126.458,0 +-104.672,126.778,0 +-104.794,127.111,0 +-104.814,127.163,0 +-104.879,127.340,0 +-104.969,127.585,0 +-105.122,128.000,0 +-105.269,128.400,0 +-105.408,128.778,0 +-105.521,129.084,0 +-105.599,129.297,0 +-105.655,129.449,0 +-105.727,129.624,0 +-105.856,129.965,0 +-106.044,130.400,0 +-106.218,130.828,0 +-106.316,131.048,0 +-106.390,131.222,0 +-106.416,131.279,0 +-106.557,131.593,0 +-106.723,131.941,0 +-106.955,132.436,0 +-107.089,132.707,0 +-107.167,132.866,0 +-107.245,133.022,0 +-107.348,133.230,0 +-107.537,133.609,0 +-107.731,134.000,0 +-107.856,134.253,0 +-107.965,134.471,0 +-108.066,134.671,0 +-108.171,134.871,0 +-108.393,135.253,0 +-108.593,135.602,0 +-108.754,135.871,0 +-108.818,135.973,0 +-108.930,136.130,0 +-109.084,136.364,0 +-109.307,136.705,0 +-109.485,136.979,0 +-109.616,137.179,0 +-109.736,137.379,0 +-109.952,137.698,0 +-110.073,138.036,0 +-110.248,138.562,0 +-110.243,138.803,0 +-110.288,139.531,0 +-110.254,139.600,0 +-109.981,139.972,0 +-109.846,140.123,0 +-109.652,140.201,0 +-109.200,140.382,0 +-108.786,140.559,0 +-108.556,140.657,0 +-108.365,140.739,0 +-108.096,140.854,0 +-108.024,140.885,0 +-107.600,141.066,0 +-107.135,141.266,0 +-106.800,141.409,0 +-106.393,141.583,0 +-106.380,141.589,0 +-106.071,141.799,0 +-105.934,141.883,0 +-105.666,142.149,0 +-105.566,142.295,0 +-105.566,142.418,0 +-105.573,142.464,0 +-105.775,142.623,0 +-105.980,142.823,0 +-106.088,143.331,0 +-106.211,143.525,0 +-106.400,143.880,0 +-106.460,143.953,0 +-106.627,144.124,0 +-106.781,144.411,0 +-106.912,144.714,0 +-106.973,145.226,0 +-107.079,145.622,0 +-107.101,146.000,0 +-107.158,146.209,0 +-107.190,146.417,0 +-107.395,146.432,0 +-107.600,146.458,0 +-107.832,146.449,0 +-108.088,146.441,0 +-108.288,146.348,0 +-108.488,146.254,0 +-108.856,146.082,0 +-109.200,145.922,0 +-109.460,145.800,0 +-109.744,145.667,0 +-109.944,145.574,0 +-110.144,145.480,0 +-110.484,145.322,0 +-110.800,145.174,0 +-111.088,145.039,0 +-111.400,144.894,0 +-111.600,144.800,0 +-111.800,144.707,0 +-112.180,144.453,0 +-112.439,144.279,0 +-112.791,144.009,0 +-112.801,144.001,0 +-112.860,143.734,0 +-112.927,143.600,0 +-113.103,143.204,0 +-113.296,142.942,0 +-113.704,142.824,0 +-114.020,142.658,0 +-114.400,142.779,0 +-114.800,142.826,0 +-115.047,142.997,0 +-115.273,143.153,0 +-115.473,143.274,0 +-115.673,143.405,0 +-116.001,143.605,0 +-116.321,143.805,0 +-116.521,143.928,0 +-116.721,144.048,0 +-116.945,144.172,0 +-117.200,144.316,0 +-117.556,144.501,0 +-117.884,144.668,0 +-118.084,144.764,0 +-118.284,144.852,0 +-118.528,144.967,0 +-118.800,145.090,0 +-119.180,145.269,0 +-119.543,145.438,0 +-119.743,145.533,0 +-119.943,145.627,0 +-120.163,145.728,0 +-120.400,145.838,0 +-120.800,146.021,0 +-121.236,146.221,0 +-121.447,146.317,0 +-121.615,146.393,0 +-121.693,146.429,0 +-121.979,146.559,0 +-122.351,146.727,0 +-122.833,146.959,0 +-123.101,147.081,0 +-123.277,147.163,0 +-123.407,147.226,0 +-123.638,147.355,0 +-124.078,147.599,0 +-124.406,147.788,0 +-124.772,147.993,0 +-124.792,148.005,0 +-124.956,148.128,0 +-125.174,148.267,0 +-125.521,148.498,0 +-125.791,148.675,0 +-125.991,148.803,0 +-126.191,148.935,0 +-126.470,149.093,0 +-126.831,149.303,0 +-127.132,149.459,0 +-127.305,149.552,0 +-127.432,149.609,0 +-127.676,149.717,0 +-127.997,149.859,0 +-128.400,150.037,0 +-128.787,150.192,0 +-129.068,150.315,0 +-129.304,150.414,0 +-129.434,150.469,0 +-129.641,150.516,0 +-129.985,150.629,0 +-130.400,150.727,0 +-130.800,150.825,0 +-131.200,150.929,0 +-131.595,151.025,0 +-131.953,151.120,0 +-132.144,151.167,0 +-132.268,151.200,0 +-132.534,151.271,0 +-132.732,151.322,0 +-133.176,151.439,0 +-133.600,151.547,0 +-134.000,151.649,0 +-134.400,151.751,0 +-134.786,151.849,0 +-135.117,151.934,0 +-135.296,151.979,0 +-135.377,152.000,0 +-135.699,152.082,0 +-135.898,152.133,0 +-136.371,152.253,0 +-136.800,152.355,0 +-137.200,152.462,0 +-137.600,152.547,0 +-137.961,152.641,0 +-138.318,152.719,0 +-138.509,152.771,0 +-138.622,152.799,0 +-138.943,152.884,0 +-139.174,152.945,0 +-139.621,153.062,0 +-140.000,153.157,0 +-140.400,153.263,0 +-140.815,153.370,0 +-141.200,153.472,0 +-141.398,153.524,0 +-141.641,153.588,0 +-141.683,153.600,0 +-142.091,153.711,0 +-142.336,153.778,0 +-142.816,153.908,0 +-143.200,154.012,0 +-143.574,154.114,0 +-144.031,154.238,0 +-144.274,154.304,0 +-144.626,154.400,0 +-144.717,154.425,0 +-144.966,154.492,0 +-145.200,154.556,0 +-145.571,154.657,0 +-146.018,154.779,0 +-146.457,154.898,0 +-146.800,154.991,0 +-147.118,155.075,0 +-147.382,155.145,0 +-147.605,155.199,0 +-147.824,155.252,0 +-148.102,155.314,0 +-148.400,155.380,0 +-148.767,155.460,0 +-149.190,155.551,0 +-149.600,155.634,0 +-149.976,155.711,0 +-150.385,155.794,0 +-150.800,155.872,0 +-151.008,155.924,0 +-151.291,155.975,0 +-151.378,155.998,0 +-151.723,156.094,0 +-151.940,156.161,0 +-152.399,156.286,0 +-152.800,156.405,0 +-153.203,156.521,0 +-153.613,156.615,0 +-154.000,156.700,0 +-154.221,156.736,0 +-154.500,156.780,0 +-154.624,156.800,0 +-154.956,156.852,0 +-155.268,156.897,0 +-155.600,156.947,0 +-155.965,157.009,0 +-156.385,157.070,0 +-156.800,157.170,0 +-157.200,157.253,0 +-157.688,157.396,0 +-157.968,157.473,0 +-158.398,157.600,0 +-158.399,157.600,0 +-158.628,157.649,0 +-158.800,157.695,0 +-159.153,157.769,0 +-159.580,157.866,0 +-160.000,157.934,0 +-160.400,158.008,0 +-160.800,158.057,0 +-161.215,158.117,0 +-161.644,158.165,0 +-162.000,158.203,0 +-162.341,158.238,0 +-162.800,158.282,0 +-163.049,158.305,0 +-163.600,158.357,0 +-163.714,158.367,0 +-164.027,158.396,0 +-164.066,158.400,0 +-164.516,158.442,0 +-164.911,158.479,0 +-165.200,158.505,0 +-165.673,158.549,0 +-166.000,158.580,0 +-166.432,158.607,0 +-166.800,158.637,0 +-167.235,158.639,0 +-167.600,158.648,0 +-168.049,158.638,0 +-168.400,158.631,0 +-168.863,158.622,0 +-169.200,158.615,0 +-169.672,158.610,0 +-170.000,158.605,0 +-170.465,158.608,0 +-170.800,158.607,0 +-171.273,158.598,0 +-171.600,158.584,0 +-172.142,158.543,0 +-172.400,158.520,0 +-173.074,158.459,0 +-173.200,158.447,0 +-173.977,158.408,0 +-174.000,158.407,0 +-174.781,158.406,0 +-174.800,158.406,0 +-175.370,158.406,0 +-175.390,158.406,0 +-175.630,158.401,0 +-175.913,158.397,0 +-175.922,158.397,0 +-176.400,158.341,0 +-176.571,158.312,0 +-177.200,158.196,0 +-177.602,158.105,0 +-178.000,158.018,0 +-178.394,157.940,0 +-178.823,157.869,0 +-179.276,157.806,0 +-179.600,157.764,0 +-180.237,157.682,0 +-180.400,157.662,0 +-180.803,157.608,0 +-180.823,157.605,0 +-181.129,157.532,0 +-181.265,157.499,0 +-181.564,157.421,0 +-181.983,157.310,0 +-182.396,157.203,0 +-182.819,157.099,0 +-183.301,157.010,0 +-183.600,156.957,0 +-184.089,156.883,0 +-184.265,156.857,0 +-184.447,156.827,0 +-184.725,156.785,0 +-184.772,156.774,0 +-185.200,156.657,0 +-185.465,156.580,0 +-185.975,156.438,0 +-186.372,156.339,0 +-186.769,156.252,0 +-187.422,156.127,0 +-187.600,156.096,0 +-188.031,156.023,0 +-188.072,156.016,0 +-188.353,155.968,0 +-188.541,155.936,0 +-188.695,155.910,0 +-189.200,155.825,0 +-189.473,155.775,0 +-190.016,155.681,0 +-190.407,155.596,0 +-190.783,155.518,0 +-191.399,155.368,0 +-191.600,155.320,0 +-192.013,155.219,0 +-192.042,155.212,0 +-192.338,155.139,0 +-192.500,155.100,0 +-192.719,155.045,0 +-193.236,154.918,0 +-193.610,154.822,0 +-193.983,154.729,0 +-194.610,154.566,0 +-194.800,154.517,0 +-195.206,154.410,0 +-195.220,154.406,0 +-195.528,154.324,0 +-195.681,154.284,0 +-195.919,154.220,0 +-196.426,154.086,0 +-196.795,153.988,0 +-197.164,153.890,0 +-197.673,153.755,0 +-197.881,153.699,0 +-198.051,153.655,0 +-198.332,153.580,0 +-198.380,153.567,0 +-198.800,153.457,0 +-199.013,153.401,0 +-199.632,153.229,0 +-200.145,153.055,0 +-200.400,152.964,0 +-200.800,152.814,0 +-200.822,152.806,0 +-201.128,152.725,0 +-201.256,152.681,0 +-201.588,152.592,0 +-201.972,152.486,0 +-202.399,152.377,0 +-202.820,152.263,0 +-203.207,152.164,0 +-203.502,152.088,0 +-203.649,152.050,0 +-203.918,151.981,0 +-203.998,151.961,0 +-204.430,151.851,0 +-204.803,151.758,0 +-205.200,151.659,0 +-205.600,151.574,0 +-206.000,151.487,0 +-206.395,151.406,0 +-206.761,151.327,0 +-207.202,151.222,0 +-207.250,151.210,0 +-207.539,151.137,0 +-207.667,151.105,0 +-208.014,151.002,0 +-208.365,150.882,0 +-208.729,150.738,0 +-209.172,150.548,0 +-209.362,150.465,0 +-209.556,150.381,0 +-209.634,150.346,0 +-209.984,150.194,0 +-210.390,150.017,0 +-210.821,149.831,0 +-211.140,149.688,0 +-211.264,149.633,0 +-211.448,149.530,0 +-211.645,149.426,0 +-212.007,149.211,0 +-212.366,149.006,0 +-212.556,148.887,0 +-212.749,148.768,0 +-212.828,148.720,0 +-213.192,148.515,0 +-213.447,148.367,0 +-213.873,148.126,0 +-214.080,148.005,0 +-214.247,147.911,0 +-214.469,147.776,0 +-214.797,147.577,0 +-215.132,147.354,0 +-215.276,147.259,0 +-215.458,147.159,0 +-215.657,147.011,0 +-216.055,146.797,0 +-216.403,146.575,0 +-216.609,146.479,0 +-216.769,146.386,0 +-216.906,146.323,0 +-217.164,146.206,0 +-217.597,146.005,0 +-218.036,145.808,0 +-218.292,145.686,0 +-218.446,145.619,0 +-218.610,145.551,0 +-218.817,145.468,0 +-219.247,145.285,0 +-219.600,145.146,0 +-219.878,145.032,0 +-220.218,144.894,0 +-220.418,144.809,0 +-220.618,144.719,0 +-220.940,144.547,0 +-221.200,144.396,0 +-221.444,144.249,0 +-221.714,144.077,0 +-221.914,143.948,0 +-222.114,143.805,0 +-222.391,143.606,0 +-222.649,143.405,0 +-222.849,143.234,0 +-223.049,143.056,0 +-223.257,142.856,0 +-223.455,142.656,0 +-223.655,142.462,0 +-223.855,142.259,0 +-224.073,142.059,0 +-224.280,141.859,0 +-224.480,141.679,0 +-224.680,141.488,0 +-224.885,141.288,0 +-225.081,141.088,0 +-225.281,140.881,0 +-225.481,140.660,0 +-225.654,140.460,0 +-225.818,140.260,0 +-226.018,140.022,0 +-226.218,139.770,0 +-226.380,139.570,0 +-226.536,139.370,0 +-226.736,139.117,0 +-226.960,138.829,0 +-227.118,138.625,0 +-227.247,138.460,0 +-227.372,138.299,0 +-227.604,138.001,0 +-227.845,137.691,0 +-227.958,137.546,0 +-228.082,137.378,0 +-228.237,137.176,0 +-228.459,136.867,0 +-228.659,136.600,0 +-228.791,136.400,0 +-228.932,136.200,0 +-229.159,135.843,0 +-229.333,135.569,0 +-229.523,135.264,0 +-229.582,135.170,0 +-229.686,134.995,0 +-229.803,134.800,0 +-230.022,134.421,0 +-230.222,134.085,0 +-230.328,133.885,0 +-230.445,133.685,0 +-230.573,133.429,0 +-230.691,133.200,0 +-230.862,132.848,0 +-231.062,132.428,0 +-231.164,132.212,0 +-231.231,132.066,0 +-231.312,131.875,0 +-231.407,131.636,0 +-231.578,131.204,0 +-231.730,130.800,0 +-231.824,130.547,0 +-231.940,130.243,0 +-232.013,130.043,0 +-232.091,129.843,0 +-232.218,129.496,0 +-232.333,129.200,0 +-232.498,128.755,0 +-232.652,128.369,0 +-232.763,128.061,0 +-232.794,127.985,0 +-232.867,127.821,0 +-232.947,127.628,0 +-233.121,127.190,0 +-233.282,126.800,0 +-233.400,126.504,0 +-233.522,126.206,0 +-233.603,126.006,0 +-233.682,125.806,0 +-233.797,125.502,0 +-233.905,125.200,0 +-234.044,124.800,0 +-234.180,124.400,0 +-234.266,124.146,0 +-234.358,123.875,0 +-234.425,123.675,0 +-234.493,123.475,0 +-234.610,123.128,0 +-234.722,122.800,0 +-234.857,122.400,0 +-234.994,122.000,0 +-235.077,121.755,0 +-235.165,121.498,0 +-235.233,121.298,0 +-235.303,121.098,0 +-235.424,120.744,0 +-235.544,120.400,0 +-235.681,120.000,0 +-235.820,119.600,0 +-235.899,119.349,0 +-235.980,119.083,0 +-236.016,118.883,0 +-236.048,118.683,0 +-236.074,118.334,0 +-236.094,118.000,0 +-236.093,117.600,0 +-236.092,117.200,0 +-236.091,116.800,0 +-236.090,116.400,0 +-236.089,116.000,0 +-236.082,115.600,0 +-236.081,115.200,0 +-236.081,114.800,0 +-236.080,114.400,0 +-236.093,114.000,0 +-236.102,113.600,0 +-236.131,113.200,0 +-236.165,112.800,0 +-236.212,112.400,0 +-236.265,112.000,0 +-236.318,111.600,0 +-236.408,111.200,0 +-236.499,110.800,0 +-236.613,110.464,0 +-236.712,110.170,0 +-236.789,109.970,0 +-236.866,109.770,0 +-236.972,109.505,0 +-237.094,109.200,0 +-237.260,108.800,0 +-237.436,108.368,0 +-237.524,108.164,0 +-237.595,107.988,0 +-237.618,107.939,0 +-237.768,107.623,0 +-237.951,107.264,0 +-238.202,106.762,0 +-238.305,106.574,0 +-238.399,106.398,0 +-238.408,106.382,0 +-238.601,106.036,0 +-238.781,105.742,0 +-239.022,105.343,0 +-239.164,105.143,0 +-239.308,104.943,0 +-239.508,104.690,0 +-239.708,104.436,0 +-239.868,104.236,0 +-240.030,104.036,0 +-240.203,103.823,0 +-240.383,103.600,0 +-240.573,103.365,0 +-240.754,103.141,0 +-240.904,102.941,0 +-241.063,102.741,0 +-241.263,102.479,0 +-241.463,102.227,0 +-241.626,102.027,0 +-241.790,101.827,0 +-241.990,101.605,0 +-242.190,101.379,0 +-242.389,101.179,0 +-242.589,100.979,0 +-242.789,100.793,0 +-242.989,100.606,0 +-243.208,100.406,0 +-243.426,100.206,0 +-243.626,100.030,0 +-243.826,99.851,0 +-244.070,99.651,0 +-244.313,99.451,0 +-244.513,99.293,0 +-244.713,99.133,0 +-244.965,98.949,0 +-245.200,98.777,0 +-245.422,98.616,0 +-245.660,98.444,0 +-245.860,98.299,0 +-246.060,98.153,0 +-246.336,97.953,0 +-246.610,97.753,0 +-246.810,97.608,0 +-247.010,97.461,0 +-247.283,97.261,0 +-247.555,97.061,0 +-247.755,96.914,0 +-247.955,96.767,0 +-248.184,96.598,0 +-248.400,96.439,0 +-249.114,95.913,0 +-249.369,95.725,0 +-249.569,95.578,0 +-249.841,95.378,0 +-250.041,95.230,0 +-250.241,95.083,0 +-250.513,94.883,0 +-250.822,94.656,0 +-251.026,94.505,0 +-251.184,94.389,0 +-251.309,94.297,0 +-251.563,94.110,0 +-251.805,93.916,0 +-252.082,93.694,0 +-252.187,93.452,0 +-252.302,93.200,0 +-252.436,92.800,0 +-252.570,92.400,0 +-252.665,92.107,0 +-252.749,91.841,0 +-252.814,91.641,0 +-252.879,91.441,0 +-253.079,91.153,0 +-253.279,90.849,0 +-253.532,90.649,0 +-253.796,90.449,0 +-253.996,90.409,0 +-254.196,90.360,0 +-254.509,90.341,0 +-254.800,90.322,0 +-255.160,90.143,0 +-255.522,89.963,0 +-255.683,89.581,0 +-255.846,89.200,0 +-255.846,88.800,0 +-255.848,88.400,0 +-255.848,88.000,0 +-255.848,87.600,0 +-255.848,87.200,0 +-255.847,86.800,0 +-255.847,86.400,0 +-255.847,86.000,0 +-255.846,85.761,0 +-255.846,85.701,0 +-255.846,85.600,0 +-255.845,85.200,0 +-255.843,84.800,0 +-255.841,84.400,0 +-255.839,84.000,0 +-255.837,83.600,0 +-255.836,83.200,0 +-255.835,82.800,0 +-255.836,82.400,0 +-255.838,82.000,0 +-255.840,81.600,0 +-255.841,81.200,0 +-255.841,80.800,0 +-255.841,80.400,0 +-255.841,80.000,0 +-255.841,80.000,0 +-255.841,79.888,0 +-255.841,79.600,0 +-255.841,79.200,0 +-255.841,78.800,0 +-255.841,78.400,0 +-255.840,77.600,0 +-255.840,77.200,0 +-255.840,76.800,0 +-255.840,76.400,0 +-255.829,76.000,0 +-255.819,75.600,0 +-255.661,75.235,0 +-255.499,74.866,0 +-255.322,74.666,0 +-255.144,74.466,0 +-255.081,74.231,0 +-255.021,74.000,0 +-254.975,73.600,0 +-254.929,73.200,0 +-254.903,72.800,0 +-254.877,72.400,0 +-254.850,72.000,0 +-254.823,71.600,0 +-254.796,71.200,0 +-254.769,70.800,0 +-254.742,70.400,0 +-254.715,70.000,0 +-254.710,69.600,0 +-254.705,69.200,0 +-254.725,68.800,0 +-254.744,68.400,0 +-254.751,68.277,0 +-254.756,68.180,0 +-254.773,67.864,0 +-254.788,67.600,0 +-254.791,67.547,0 +-254.808,67.232,0 +-254.857,66.335,0 +-254.876,66.000,0 +-254.897,65.600,0 +-254.919,65.200,0 +-254.939,64.800,0 +-254.958,64.400,0 +-254.976,64.000,0 +-254.993,63.600,0 +-255.010,63.200,0 +-255.026,62.800,0 +-255.043,62.400,0 +-255.076,61.600,0 +-255.093,61.200,0 +-255.109,60.800,0 +-255.126,60.400,0 +-255.142,60.000,0 +-255.159,59.600,0 +-255.175,59.255,0 +-255.188,58.962,0 +-255.198,58.762,0 +-255.208,58.562,0 +-255.222,58.307,0 +-255.238,58.000,0 +-255.243,57.924,0 +-255.246,57.862,0 +-255.250,57.790,0 +-255.260,57.600,0 +-255.263,57.550,0 +-255.282,57.200,0 +-255.303,56.800,0 +-255.325,56.400,0 +-255.347,56.000,0 +-255.368,55.600,0 +-255.390,55.200,0 +-255.412,54.800,0 +-255.433,54.400,0 +-255.455,54.000,0 +-255.477,53.600,0 +-255.498,53.200,0 +-255.455,52.800,0 +-255.407,52.400,0 +-255.329,52.183,0 +-255.247,51.967,0 +-255.185,51.967,0 +-255.126,51.967,0 +-254.926,52.057,0 +-254.726,52.144,0 +-254.365,52.286,0 +-254.000,52.414,0 +-253.600,52.401,0 +-253.200,52.376,0 +-252.939,52.233,0 +-252.690,52.105,0 +-252.463,51.808,0 +-252.267,51.562,0 +-252.079,51.295,0 +-252.004,51.192,0 +-251.928,51.031,0 +-251.834,50.831,0 +-251.629,50.392,0 +-251.445,50.000,0 +-251.338,49.773,0 +-251.229,49.539,0 +-251.135,49.339,0 +-251.041,49.139,0 +-250.867,48.766,0 +-250.695,48.400,0 +-250.577,48.146,0 +-250.454,47.885,0 +-250.360,47.685,0 +-250.266,47.485,0 +-250.104,47.139,0 +-249.945,46.800,0 +-249.814,46.520,0 +-249.679,46.232,0 +-249.585,46.032,0 +-249.491,45.832,0 +-249.491,45.620,0 +-249.491,45.422,0 +-249.638,45.222,0 +-249.789,45.022,0 +-249.989,44.823,0 +-250.189,44.626,0 +-250.498,44.613,0 +-250.836,44.624,0 +-251.081,44.722,0 +-251.235,44.784,0 +-251.386,44.854,0 +-251.599,44.954,0 +-251.999,45.142,0 +-252.400,45.331,0 +-252.653,45.450,0 +-252.887,45.559,0 +-253.087,45.650,0 +-253.287,45.743,0 +-253.597,45.743,0 +-254.000,45.733,0 +-254.193,45.654,0 +-254.370,45.588,0 +-254.453,45.549,0 +-254.770,45.398,0 +-255.216,45.185,0 +-255.628,44.988,0 +-255.974,44.823,0 +-256.011,44.805,0 +-256.199,44.715,0 +-256.383,44.627,0 +-256.852,44.403,0 +-257.233,44.215,0 +-257.498,44.085,0 +-257.618,44.019,0 +-257.618,43.985,0 +-257.618,43.959,0 +-257.450,43.833,0 +-257.233,43.670,0 +-256.973,43.448,0 +-256.729,43.279,0 +-256.529,43.072,0 +-256.329,42.874,0 +-256.125,42.675,0 +-255.942,42.474,0 +-255.813,42.241,0 +-255.688,42.000,0 +-255.519,41.656,0 +-255.345,41.303,0 +-255.248,41.103,0 +-255.149,40.903,0 +-255.025,40.648,0 +-254.905,40.400,0 +-254.732,40.042,0 +-254.556,39.676,0 +-254.459,39.476,0 +-254.363,39.276,0 +-254.247,39.034,0 +-254.134,38.800,0 +-253.954,38.426,0 +-253.771,38.045,0 +-253.675,37.845,0 +-253.578,37.645,0 +-253.470,37.419,0 +-253.364,37.200,0 +-253.177,36.811,0 +-252.968,36.377,0 +-252.865,36.162,0 +-252.794,36.013,0 +-252.719,35.858,0 +-252.612,35.637,0 +-252.406,35.209,0 +-252.208,34.800,0 +-252.109,34.596,0 +-252.007,34.388,0 +-251.890,34.188,0 +-251.773,33.988,0 +-251.573,33.646,0 +-251.373,33.305,0 +-251.256,33.105,0 +-251.138,32.905,0 +-250.995,32.651,0 +-250.852,32.400,0 +-250.709,31.982,0 +-250.544,31.690,0 +-250.366,31.407,0 +-250.325,31.335,0 +-250.338,30.888,0 +-250.312,30.800,0 +-250.393,30.393,0 +-250.394,30.384,0 +-250.380,30.073,0 +-250.481,29.905,0 +-250.459,29.786,0 +-250.459,29.483,0 +-250.387,29.464,0 +-250.048,29.279,0 +-249.491,29.300,0 +-249.200,29.140,0 +-248.684,29.316,0 +-248.400,29.410,0 +-247.999,29.577,0 +-247.982,29.585,0 +-247.667,29.832,0 +-247.559,29.918,0 +-247.211,30.208,0 +-247.101,30.303,0 +-246.831,30.610,0 +-246.706,30.744,0 +-246.410,31.133,0 +-246.388,31.170,0 +-246.388,31.233,0 +-246.390,31.255,0 +-246.544,31.530,0 +-246.526,31.707,0 +-246.516,31.944,0 +-246.606,32.415,0 +-246.674,32.819,0 +-246.744,33.200,0 +-246.818,33.600,0 +-246.892,34.000,0 +-246.961,34.374,0 +-247.030,34.764,0 +-247.120,35.242,0 +-247.151,35.412,0 +-247.186,35.613,0 +-247.233,35.844,0 +-247.258,35.968,0 +-247.359,36.436,0 +-247.428,36.818,0 +-247.478,37.200,0 +-247.587,37.609,0 +-247.635,38.036,0 +-247.842,38.623,0 +-247.887,38.785,0 +-247.795,39.352,0 +-247.757,39.603,0 +-247.532,39.968,0 +-247.344,40.138,0 +-247.250,40.102,0 +-247.112,40.102,0 +-247.027,39.982,0 +-246.746,39.582,0 +-246.616,39.400,0 +-246.394,39.213,0 +-246.385,39.184,0 +-246.302,38.777,0 +-246.129,38.411,0 +-245.911,38.000,0 +-245.778,37.790,0 +-245.612,37.568,0 +-245.522,37.368,0 +-245.444,37.168,0 +-245.263,36.779,0 +-245.085,36.400,0 +-244.971,36.159,0 +-244.842,35.911,0 +-244.748,35.711,0 +-244.654,35.511,0 +-244.486,35.152,0 +-244.322,34.800,0 +-244.196,34.533,0 +-244.067,34.258,0 +-243.974,34.058,0 +-243.879,33.858,0 +-243.723,33.525,0 +-243.571,33.200,0 +-243.433,32.906,0 +-243.292,32.604,0 +-243.198,32.404,0 +-243.104,32.204,0 +-242.961,31.898,0 +-242.821,31.600,0 +-242.671,31.279,0 +-242.517,30.951,0 +-242.423,30.751,0 +-242.329,30.551,0 +-242.198,30.272,0 +-242.071,30.000,0 +-241.908,29.653,0 +-241.742,29.298,0 +-241.648,29.098,0 +-241.554,28.898,0 +-241.435,28.645,0 +-241.320,28.400,0 +-241.145,28.026,0 +-240.966,27.645,0 +-240.873,27.445,0 +-240.779,27.245,0 +-240.673,27.019,0 +-240.570,26.800,0 +-240.368,26.368,0 +-240.178,25.962,0 +-240.058,25.707,0 +-240.004,25.592,0 +-239.930,25.433,0 +-239.834,25.230,0 +-239.629,24.792,0 +-239.446,24.400,0 +-239.339,24.173,0 +-239.229,23.938,0 +-239.135,23.738,0 +-239.041,23.538,0 +-238.867,23.165,0 +-238.695,22.800,0 +-238.585,22.432,0 +-238.465,22.029,0 +-238.369,21.860,0 +-238.320,21.781,0 +-238.320,21.593,0 +-238.320,21.377,0 +-238.368,21.312,0 +-238.501,21.146,0 +-238.707,20.809,0 +-238.898,20.492,0 +-239.119,20.292,0 +-239.336,20.092,0 +-239.336,19.965,0 +-239.336,19.834,0 +-239.069,19.671,0 +-238.800,19.508,0 +-238.400,19.396,0 +-238.000,19.286,0 +-237.738,19.249,0 +-237.479,19.212,0 +-237.279,19.192,0 +-237.079,19.172,0 +-236.741,19.138,0 +-236.400,19.104,0 +-236.000,19.065,0 +-235.600,19.025,0 +-235.200,18.988,0 +-234.800,18.950,0 +-234.400,18.914,0 +-234.000,18.877,0 +-233.600,18.840,0 +-233.200,18.804,0 +-232.800,18.767,0 +-232.400,18.731,0 +-232.000,18.673,0 +-231.600,18.614,0 +-231.253,18.540,0 +-230.916,18.467,0 +-230.716,18.420,0 +-230.516,18.373,0 +-230.263,18.312,0 +-230.000,18.249,0 +-229.600,18.152,0 +-229.200,18.056,0 +-228.800,17.959,0 +-228.400,17.863,0 +-227.958,17.765,0 +-227.601,17.679,0 +-227.318,17.608,0 +-227.242,17.590,0 +-226.970,17.579,0 +-226.800,17.558,0 +-226.395,17.551,0 +-225.973,17.529,0 +-225.600,17.509,0 +-225.200,17.489,0 +-224.800,17.407,0 +-224.400,17.325,0 +-224.078,17.153,0 +-223.781,17.002,0 +-223.581,16.730,0 +-223.381,16.474,0 +-223.288,16.274,0 +-223.170,16.074,0 +-223.155,15.832,0 +-223.141,15.600,0 +-223.141,15.200,0 +-223.140,14.800,0 +-223.140,14.400,0 +-223.140,14.000,0 +-223.140,13.600,0 +-223.140,13.200,0 +-223.140,12.800,0 +-223.140,12.400,0 +-223.140,12.000,0 +-223.139,11.600,0 +-223.139,11.200,0 +-223.139,10.800,0 +-223.139,10.400,0 +-223.139,10.000,0 +-223.139,9.600,0 +-223.139,9.200,0 +-223.139,8.800,0 +-223.138,8.400,0 +-223.138,8.000,0 +-223.138,7.600,0 +-223.138,7.200,0 +-223.138,6.800,0 +-223.138,6.400,0 +-223.138,6.000,0 +-223.138,5.600,0 +-223.137,5.200,0 +-223.137,4.800,0 +-223.137,4.400,0 +-223.107,4.000,0 +-222.950,3.565,0 +-222.754,3.287,0 +-222.631,3.123,0 +-222.553,3.108,0 +-222.500,3.098,0 +-222.500,3.200,0 +-222.500,3.474,0 +-222.500,3.752,0 +-222.500,3.907,0 +-222.500,4.008,0 +-222.500,4.155,0 +-222.500,4.248,0 +-222.500,4.405,0 +-222.500,4.477,0 +-222.500,4.841,0 +-222.500,4.887,0 +-222.500,5.043,0 +-222.500,5.108,0 +-222.500,5.219,0 +-222.500,5.299,0 +-222.500,5.410,0 +-222.500,5.482,0 +-222.500,5.838,0 +-222.500,5.984,0 +-222.500,6.032,0 +-222.500,6.062,0 +-222.500,6.112,0 +-222.500,6.138,0 +-222.500,6.160,0 +-222.500,6.170,0 +-222.500,6.191,0 +-222.500,6.207,0 +-222.500,6.227,0 +-222.500,6.231,0 +-222.500,6.250,0 +-222.500,6.251,0 +-222.500,6.256,0 +-222.500,6.262,0 +-222.500,6.270,0 +-222.500,6.279,0 +-222.500,6.288,0 +-222.500,6.306,0 +-222.500,6.318,0 +-222.500,6.377,0 +-222.500,6.396,0 +-222.500,6.406,0 +-222.500,6.425,0 +-222.500,6.435,0 +-222.500,6.453,0 +-222.500,6.463,0 +-222.500,6.481,0 +-222.500,6.490,0 +-222.500,6.507,0 +-222.500,6.516,0 +-222.500,6.532,0 +-222.500,6.541,0 +-222.500,6.557,0 +-222.500,6.565,0 +-222.500,6.580,0 +-222.500,6.589,0 +-222.500,6.603,0 +-222.500,6.611,0 +-222.500,6.625,0 +-222.500,6.633,0 +-222.500,6.646,0 +-222.500,6.654,0 +-222.500,6.666,0 +-222.500,6.674,0 +-222.500,6.686,0 +-222.500,6.693,0 +-222.500,6.705,0 +-222.500,6.712,0 +-222.500,6.723,0 +-222.500,6.730,0 +-222.500,6.740,0 +-222.500,6.747,0 +-222.500,6.757,0 +-222.500,6.764,0 +-222.500,6.773,0 +-222.500,6.780,0 +-222.500,6.789,0 +-222.500,6.795,0 +-222.500,9.000,0 +-221.190,9.000,0 +-221.139,9.000,0 +-221.139,9.103,0 +-221.139,9.119,0 +-221.139,9.142,0 +-221.139,9.176,0 +-221.139,9.200,0 +-221.139,9.600,0 +-221.139,10.000,0 +-221.139,10.400,0 +-221.139,10.800,0 +-221.139,11.200,0 +-221.139,11.600,0 +-221.140,12.000,0 +-221.140,12.400,0 +-221.140,12.800,0 +-221.140,13.200,0 +-221.140,13.600,0 +-221.140,14.000,0 +-221.140,14.400,0 +-221.140,14.800,0 +-221.146,15.200,0 +-221.151,15.600,0 +-221.207,16.000,0 +-221.261,16.400,0 +-221.370,16.714,0 +-221.480,17.046,0 +-221.588,17.246,0 +-221.685,17.446,0 +-221.885,17.706,0 +-222.112,18.008,0 +-222.292,18.209,0 +-222.430,18.372,0 +-222.534,18.451,0 +-222.795,18.649,0 +-223.138,18.850,0 +-223.487,19.073,0 +-223.687,19.161,0 +-223.887,19.246,0 +-224.117,19.298,0 +-224.400,19.371,0 +-224.800,19.428,0 +-225.200,19.485,0 +-225.600,19.514,0 +-226.000,19.540,0 +-226.400,19.578,0 +-226.800,19.602,0 +-227.200,19.677,0 +-227.600,19.736,0 +-227.987,19.828,0 +-228.365,19.912,0 +-228.565,19.960,0 +-228.765,20.008,0 +-228.978,20.060,0 +-229.200,20.113,0 +-229.600,20.209,0 +-230.000,20.304,0 +-230.400,20.394,0 +-230.800,20.484,0 +-231.200,20.557,0 +-231.600,20.631,0 +-232.000,20.685,0 +-232.400,20.740,0 +-232.659,20.768,0 +-232.883,20.793,0 +-233.083,20.809,0 +-233.283,20.824,0 +-233.624,20.854,0 +-233.766,20.866,0 +-233.857,20.957,0 +-233.900,21.000,0 +-234.000,21.100,0 +-234.400,21.500,0 +-235.200,21.500,0 +-235.400,21.500,0 +-235.800,21.900,0 +-235.900,22.000,0 +-236.000,22.100,0 +-236.400,22.500,0 +-236.554,22.654,0 +-236.612,22.712,0 +-236.610,22.744,0 +-236.607,22.800,0 +-236.689,23.049,0 +-236.764,23.291,0 +-236.846,23.491,0 +-236.926,23.691,0 +-237.084,24.043,0 +-237.238,24.400,0 +-237.375,24.690,0 +-237.512,24.988,0 +-237.606,25.188,0 +-237.699,25.388,0 +-237.845,25.697,0 +-237.986,26.000,0 +-238.135,26.317,0 +-238.287,26.641,0 +-238.381,26.841,0 +-238.474,27.041,0 +-238.607,27.324,0 +-238.736,27.600,0 +-238.897,27.944,0 +-239.062,28.295,0 +-239.156,28.495,0 +-239.249,28.695,0 +-239.370,28.951,0 +-239.486,29.200,0 +-239.660,29.570,0 +-239.837,29.948,0 +-239.931,30.148,0 +-240.024,30.348,0 +-240.132,30.578,0 +-240.237,30.800,0 +-240.462,31.280,0 +-240.631,31.641,0 +-240.793,31.986,0 +-240.800,32.001,0 +-240.883,32.180,0 +-240.968,32.360,0 +-241.176,32.804,0 +-241.362,33.200,0 +-241.467,33.423,0 +-241.575,33.654,0 +-241.669,33.854,0 +-241.762,34.054,0 +-241.939,34.431,0 +-242.112,34.800,0 +-242.230,35.049,0 +-242.350,35.307,0 +-242.443,35.507,0 +-242.537,35.707,0 +-242.704,36.057,0 +-242.866,36.400,0 +-242.995,36.667,0 +-243.129,36.948,0 +-243.227,37.148,0 +-243.321,37.348,0 +-243.481,37.682,0 +-243.632,38.000,0 +-243.766,38.269,0 +-243.911,38.560,0 +-244.031,38.760,0 +-244.137,38.960,0 +-244.297,39.291,0 +-244.439,39.600,0 +-244.559,39.867,0 +-244.702,40.164,0 +-244.834,40.364,0 +-244.957,40.564,0 +-245.157,40.811,0 +-245.370,41.138,0 +-245.578,41.337,0 +-245.687,41.516,0 +-245.783,41.603,0 +-246.072,41.905,0 +-246.353,42.087,0 +-246.551,42.305,0 +-246.715,42.398,0 +-246.983,42.560,0 +-247.161,42.581,0 +-247.297,42.597,0 +-247.299,42.599,0 +-247.340,42.640,0 +-247.400,42.700,0 +-247.700,43.000,0 +-247.800,43.100,0 +-247.900,43.200,0 +-247.900,44.000,0 +-247.900,44.316,0 +-247.900,44.433,0 +-247.882,44.454,0 +-247.822,44.521,0 +-247.696,44.887,0 +-247.572,45.200,0 +-247.572,45.600,0 +-247.547,46.000,0 +-247.656,46.400,0 +-247.759,46.800,0 +-247.859,47.037,0 +-247.962,47.281,0 +-248.056,47.481,0 +-248.149,47.681,0 +-248.320,48.044,0 +-248.486,48.400,0 +-248.610,48.664,0 +-248.737,48.935,0 +-248.831,49.135,0 +-248.924,49.335,0 +-249.082,49.671,0 +-249.236,50.000,0 +-249.372,50.291,0 +-249.512,50.589,0 +-249.605,50.789,0 +-249.699,50.989,0 +-249.850,51.298,0 +-249.996,51.600,0 +-250.145,51.878,0 +-250.297,52.164,0 +-250.430,52.364,0 +-250.560,52.564,0 +-250.760,52.813,0 +-250.960,53.065,0 +-251.160,53.265,0 +-251.351,53.465,0 +-251.551,53.625,0 +-251.751,53.785,0 +-252.068,53.954,0 +-252.400,54.128,0 +-252.771,54.041,0 +-252.900,54.007,0 +-252.900,54.153,0 +-252.900,55.000,0 +-253.000,55.100,0 +-253.400,55.500,0 +-253.413,55.513,0 +-253.440,55.540,0 +-253.433,55.566,0 +-253.423,55.600,0 +-253.374,56.000,0 +-253.322,56.400,0 +-253.300,56.800,0 +-253.279,57.200,0 +-253.260,57.550,0 +-253.259,57.555,0 +-252.973,57.555,0 +-250.771,57.555,0 +-240.000,57.555,0 +-240.000,58.110,0 +-240.000,58.155,0 +-240.000,60.581,0 +-240.000,60.775,0 +-240.000,62.477,0 +-240.000,62.739,0 +-240.000,64.026,0 +-240.000,64.320,0 +-240.000,65.239,0 +-240.000,65.254,0 +-240.000,65.319,0 +-240.000,65.443,0 +-240.000,65.631,0 +-240.000,65.888,0 +-240.000,66.211,0 +-240.000,66.323,0 +-240.000,66.440,0 +-240.000,66.787,0 +-240.000,67.187,0 +-240.000,67.620,0 +-240.000,67.706,0 +-240.000,68.150,0 +-240.000,68.582,0 +-240.000,68.680,0 +-240.000,69.092,0 +-240.000,69.199,0 +-240.000,69.583,0 +-240.000,69.909,0 +-240.000,70.048,0 +-240.000,70.335,0 +-240.000,70.559,0 +-240.000,70.722,0 +-240.000,70.829,0 +-240.000,70.888,0 +-240.000,71.222,0 +-240.000,72.107,0 +-240.000,72.403,0 +-240.000,73.437,0 +-240.000,73.713,0 +-240.000,74.985,0 +-240.000,75.225,0 +-240.000,76.881,0 +-240.000,79.307,0 +-240.000,79.352,0 +-240.000,79.392,0 +-240.000,79.907,0 +-243.825,79.907,0 +-245.719,79.907,0 +-253.840,79.907,0 +-253.841,80.287,0 +-253.841,80.400,0 +-253.840,80.800,0 +-253.840,81.200,0 +-253.839,81.600,0 +-253.838,82.000,0 +-253.837,82.400,0 +-253.836,82.800,0 +-253.836,83.200,0 +-253.837,83.600,0 +-253.839,84.000,0 +-253.840,84.400,0 +-253.842,84.800,0 +-253.844,85.200,0 +-253.845,85.600,0 +-253.845,85.701,0 +-253.698,85.701,0 +-253.281,85.701,0 +-252.636,85.701,0 +-251.729,85.701,0 +-251.423,85.701,0 +-250.945,85.701,0 +-250.678,85.701,0 +-250.260,85.701,0 +-249.657,85.701,0 +-249.450,85.701,0 +-249.122,85.701,0 +-248.938,85.701,0 +-248.645,85.701,0 +-248.479,85.701,0 +-248.215,85.701,0 +-248.066,85.701,0 +-247.828,85.701,0 +-247.692,85.701,0 +-247.475,85.701,0 +-247.352,85.701,0 +-247.154,85.701,0 +-247.041,85.701,0 +-246.494,85.701,0 +-246.027,85.701,0 +-245.624,85.701,0 +-243.884,85.701,0 +-243.494,85.701,0 +-240.000,85.701,0 +-240.000,92.510,0 +-240.000,92.728,0 +-240.000,92.964,0 +-240.000,93.214,0 +-240.000,93.474,0 +-240.000,93.738,0 +-240.000,94.002,0 +-240.000,94.261,0 +-240.000,94.509,0 +-240.000,94.742,0 +-240.000,94.956,0 +-240.000,95.146,0 +-240.000,99.263,0 +-240.000,99.416,0 +-240.000,99.532,0 +-240.000,99.721,0 +-240.000,99.810,0 +-240.000,100.039,0 +-240.000,100.098,0 +-240.000,100.369,0 +-240.000,100.396,0 +-240.000,100.575,0 +-240.000,100.581,0 +-240.000,100.707,0 +-240.000,100.781,0 +-240.000,100.799,0 +-240.000,100.859,0 +-239.922,100.957,0 +-239.734,101.193,0 +-239.526,101.458,0 +-239.306,101.738,0 +-239.150,101.938,0 +-238.994,102.138,0 +-238.794,102.386,0 +-238.594,102.639,0 +-238.431,102.839,0 +-238.272,103.039,0 +-238.072,103.296,0 +-237.872,103.558,0 +-237.719,103.758,0 +-237.570,103.958,0 +-237.428,104.174,0 +-237.279,104.400,0 +-237.090,104.700,0 +-236.909,104.988,0 +-236.795,105.188,0 +-236.681,105.388,0 +-236.522,105.688,0 +-236.354,106.000,0 +-236.210,106.288,0 +-236.074,106.552,0 +-235.979,106.752,0 +-235.882,106.952,0 +-235.744,107.264,0 +-235.593,107.600,0 +-235.445,107.955,0 +-235.311,108.272,0 +-235.230,108.472,0 +-235.148,108.672,0 +-235.054,108.917,0 +-234.945,109.200,0 +-234.804,109.600,0 +-234.664,110.000,0 +-234.555,110.409,0 +-234.461,110.738,0 +-234.407,110.987,0 +-234.380,111.108,0 +-234.354,111.286,0 +-234.307,111.575,0 +-234.250,112.000,0 +-234.203,112.400,0 +-234.163,112.800,0 +-234.134,113.200,0 +-234.108,113.600,0 +-234.095,114.000,0 +-234.083,114.400,0 +-234.081,114.800,0 +-234.080,115.200,0 +-234.082,115.600,0 +-234.086,116.000,0 +-234.088,116.400,0 +-234.090,116.800,0 +-234.091,117.200,0 +-234.085,117.600,0 +-234.078,118.000,0 +-234.018,118.400,0 +-233.955,118.800,0 +-233.841,119.173,0 +-233.723,119.556,0 +-233.653,119.756,0 +-233.585,119.956,0 +-233.506,120.183,0 +-233.432,120.400,0 +-233.294,120.800,0 +-233.157,121.200,0 +-233.036,121.553,0 +-232.910,121.923,0 +-232.842,122.123,0 +-232.774,122.323,0 +-232.690,122.570,0 +-232.612,122.800,0 +-232.476,123.200,0 +-232.340,123.600,0 +-232.224,123.939,0 +-232.102,124.291,0 +-232.033,124.491,0 +-231.962,124.691,0 +-231.864,124.952,0 +-231.769,125.200,0 +-231.611,125.600,0 +-231.453,126.000,0 +-231.351,126.251,0 +-231.246,126.514,0 +-231.164,126.714,0 +-231.085,126.914,0 +-230.944,127.263,0 +-230.813,127.600,0 +-230.674,127.950,0 +-230.515,128.369,0 +-230.431,128.583,0 +-230.373,128.730,0 +-230.302,128.913,0 +-230.209,129.165,0 +-230.043,129.592,0 +-229.890,130.000,0 +-229.788,130.265,0 +-229.668,130.571,0 +-229.590,130.771,0 +-229.508,130.971,0 +-229.363,131.306,0 +-229.230,131.600,0 +-229.083,131.908,0 +-228.922,132.244,0 +-228.819,132.444,0 +-228.718,132.644,0 +-228.551,132.936,0 +-228.405,133.200,0 +-228.254,133.454,0 +-228.087,133.747,0 +-227.965,133.947,0 +-227.846,134.147,0 +-227.646,134.463,0 +-227.427,134.810,0 +-227.303,134.999,0 +-227.188,135.182,0 +-227.145,135.241,0 +-226.902,135.570,0 +-226.734,135.794,0 +-226.494,136.125,0 +-226.339,136.325,0 +-226.188,136.525,0 +-225.988,136.783,0 +-225.788,137.041,0 +-225.632,137.241,0 +-225.477,137.441,0 +-225.277,137.698,0 +-225.052,137.983,0 +-224.896,138.184,0 +-224.763,138.353,0 +-224.654,138.491,0 +-224.402,138.801,0 +-224.173,139.085,0 +-224.040,139.244,0 +-223.894,139.404,0 +-223.697,139.609,0 +-223.467,139.863,0 +-223.268,140.065,0 +-223.064,140.265,0 +-222.851,140.465,0 +-222.651,140.662,0 +-222.451,140.849,0 +-222.249,141.049,0 +-222.036,141.249,0 +-221.836,141.446,0 +-221.636,141.633,0 +-221.416,141.808,0 +-221.200,141.967,0 +-220.963,142.149,0 +-220.695,142.334,0 +-220.495,142.462,0 +-220.295,142.580,0 +-219.910,142.787,0 +-219.570,142.962,0 +-219.278,143.095,0 +-219.122,143.167,0 +-218.959,143.235,0 +-218.754,143.323,0 +-218.332,143.496,0 +-218.000,143.640,0 +-217.713,143.762,0 +-217.392,143.906,0 +-217.192,143.995,0 +-216.992,144.086,0 +-216.679,144.230,0 +-216.400,144.359,0 +-216.096,144.508,0 +-215.752,144.672,0 +-215.552,144.784,0 +-215.352,144.884,0 +-215.041,145.074,0 +-214.765,145.219,0 +-214.486,145.376,0 +-214.237,145.509,0 +-214.090,145.604,0 +-213.873,145.724,0 +-213.454,145.980,0 +-213.195,146.130,0 +-212.821,146.343,0 +-212.762,146.377,0 +-212.562,146.502,0 +-212.376,146.615,0 +-212.030,146.819,0 +-211.676,147.039,0 +-211.469,147.161,0 +-211.302,147.260,0 +-211.117,147.364,0 +-210.830,147.534,0 +-210.546,147.686,0 +-210.168,147.890,0 +-209.968,147.981,0 +-209.768,148.075,0 +-209.441,148.218,0 +-209.200,148.324,0 +-208.865,148.468,0 +-208.427,148.654,0 +-208.240,148.733,0 +-208.040,148.817,0 +-207.974,148.841,0 +-207.595,148.964,0 +-207.220,149.078,0 +-206.800,149.196,0 +-206.405,149.288,0 +-205.993,149.381,0 +-205.574,149.470,0 +-205.309,149.526,0 +-205.153,149.560,0 +-204.883,149.617,0 +-204.809,149.634,0 +-204.364,149.741,0 +-203.992,149.833,0 +-203.600,149.931,0 +-203.201,150.033,0 +-202.782,150.140,0 +-202.393,150.240,0 +-202.104,150.314,0 +-201.954,150.353,0 +-201.688,150.421,0 +-201.602,150.444,0 +-201.170,150.560,0 +-200.796,150.669,0 +-200.400,150.772,0 +-200.013,150.888,0 +-199.631,150.986,0 +-199.163,151.117,0 +-199.032,151.150,0 +-198.807,151.213,0 +-198.598,151.263,0 +-198.443,151.305,0 +-198.000,151.419,0 +-197.702,151.497,0 +-197.224,151.620,0 +-196.648,151.767,0 +-196.400,151.829,0 +-195.965,151.940,0 +-195.877,151.962,0 +-195.626,152.031,0 +-195.433,152.079,0 +-195.260,152.125,0 +-194.800,152.246,0 +-194.500,152.325,0 +-194.043,152.446,0 +-193.400,152.615,0 +-193.200,152.668,0 +-192.785,152.776,0 +-192.750,152.786,0 +-192.459,152.858,0 +-192.294,152.900,0 +-192.078,152.954,0 +-191.565,153.082,0 +-191.189,153.174,0 +-190.811,153.267,0 +-190.229,153.403,0 +-190.000,153.458,0 +-189.550,153.554,0 +-189.475,153.570,0 +-189.222,153.616,0 +-189.015,153.655,0 +-188.882,153.678,0 +-188.400,153.762,0 +-188.141,153.807,0 +-187.582,153.904,0 +-187.181,153.978,0 +-186.788,154.058,0 +-186.273,154.176,0 +-186.000,154.242,0 +-185.586,154.348,0 +-185.500,154.371,0 +-185.240,154.446,0 +-185.074,154.492,0 +-184.830,154.555,0 +-184.394,154.666,0 +-183.987,154.746,0 +-183.600,154.827,0 +-183.223,154.894,0 +-182.817,154.970,0 +-182.370,155.065,0 +-182.131,155.121,0 +-181.963,155.163,0 +-181.707,155.227,0 +-181.611,155.252,0 +-181.167,155.368,0 +-180.790,155.451,0 +-180.400,155.536,0 +-180.000,155.598,0 +-179.600,155.662,0 +-179.222,155.714,0 +-178.806,155.777,0 +-178.213,155.880,0 +-178.000,155.920,0 +-177.599,155.998,0 +-177.594,155.999,0 +-177.278,156.068,0 +-177.150,156.095,0 +-176.830,156.156,0 +-176.403,156.226,0 +-175.980,156.269,0 +-175.600,156.298,0 +-175.200,156.307,0 +-174.800,156.313,0 +-174.400,156.318,0 +-174.000,156.322,0 +-173.600,156.339,0 +-173.200,156.355,0 +-172.800,156.385,0 +-172.400,156.413,0 +-172.000,156.441,0 +-171.600,156.463,0 +-171.200,156.475,0 +-170.800,156.479,0 +-170.400,156.481,0 +-170.000,156.479,0 +-169.600,156.483,0 +-169.200,156.485,0 +-168.811,156.492,0 +-168.375,156.499,0 +-167.998,156.504,0 +-167.600,156.511,0 +-167.268,156.506,0 +-166.832,156.505,0 +-166.400,156.479,0 +-166.000,156.461,0 +-165.600,156.426,0 +-165.200,156.393,0 +-164.800,156.356,0 +-164.400,156.319,0 +-164.000,156.282,0 +-163.616,156.246,0 +-163.194,156.206,0 +-162.800,156.168,0 +-162.488,156.135,0 +-162.000,156.084,0 +-161.794,156.059,0 +-161.463,156.023,0 +-161.277,156.000,0 +-160.995,155.966,0 +-160.693,155.919,0 +-160.400,155.882,0 +-160.032,155.812,0 +-159.613,155.745,0 +-159.200,155.646,0 +-158.800,155.560,0 +-158.400,155.450,0 +-158.023,155.350,0 +-157.699,155.266,0 +-157.536,155.214,0 +-157.476,155.200,0 +-157.112,155.111,0 +-156.882,155.071,0 +-156.401,154.962,0 +-156.000,154.898,0 +-155.600,154.827,0 +-155.200,154.764,0 +-154.779,154.695,0 +-154.351,154.611,0 +-154.000,154.538,0 +-153.757,154.476,0 +-153.526,154.421,0 +-153.455,154.400,0 +-153.100,154.294,0 +-152.880,154.232,0 +-152.407,154.092,0 +-152.000,153.986,0 +-151.610,153.877,0 +-151.118,153.765,0 +-150.871,153.700,0 +-150.416,153.600,0 +-150.408,153.598,0 +-150.146,153.547,0 +-150.000,153.515,0 +-149.565,153.423,0 +-149.164,153.337,0 +-148.800,153.255,0 +-148.392,153.159,0 +-147.971,153.054,0 +-147.600,152.959,0 +-147.359,152.894,0 +-147.109,152.827,0 +-147.009,152.800,0 +-146.667,152.708,0 +-146.425,152.642,0 +-145.973,152.520,0 +-145.600,152.419,0 +-145.211,152.314,0 +-144.724,152.182,0 +-144.480,152.116,0 +-144.055,152.000,0 +-144.027,151.992,0 +-143.787,151.930,0 +-143.600,151.881,0 +-143.211,151.781,0 +-142.798,151.675,0 +-142.400,151.571,0 +-142.015,151.473,0 +-141.554,151.353,0 +-141.319,151.292,0 +-140.961,151.199,0 +-140.879,151.179,0 +-140.635,151.121,0 +-140.400,151.065,0 +-140.036,150.977,0 +-139.614,150.878,0 +-139.200,150.777,0 +-138.789,150.685,0 +-138.368,150.586,0 +-138.000,150.512,0 +-137.785,150.459,0 +-137.530,150.415,0 +-137.476,150.402,0 +-137.110,150.312,0 +-136.908,150.258,0 +-136.426,150.148,0 +-136.000,150.040,0 +-135.600,149.943,0 +-135.200,149.841,0 +-134.817,149.744,0 +-134.496,149.662,0 +-134.318,149.617,0 +-134.252,149.600,0 +-133.914,149.513,0 +-133.716,149.462,0 +-133.233,149.338,0 +-132.800,149.226,0 +-132.400,149.121,0 +-132.000,149.019,0 +-131.629,148.922,0 +-131.355,148.853,0 +-131.180,148.805,0 +-131.166,148.802,0 +-130.746,148.697,0 +-130.479,148.610,0 +-130.000,148.474,0 +-129.600,148.315,0 +-129.192,148.165,0 +-128.979,148.073,0 +-128.798,148.001,0 +-128.795,147.999,0 +-128.409,147.819,0 +-128.017,147.615,0 +-127.597,147.402,0 +-127.251,147.209,0 +-127.217,147.190,0 +-127.044,147.076,0 +-126.823,146.938,0 +-126.469,146.710,0 +-126.190,146.533,0 +-125.990,146.407,0 +-125.790,146.283,0 +-125.521,146.124,0 +-125.200,145.939,0 +-124.925,145.782,0 +-124.697,145.656,0 +-124.497,145.549,0 +-124.297,145.449,0 +-123.972,145.285,0 +-123.600,145.108,0 +-123.324,144.974,0 +-123.072,144.859,0 +-122.872,144.766,0 +-122.672,144.675,0 +-122.348,144.526,0 +-122.000,144.368,0 +-121.689,144.225,0 +-121.398,144.093,0 +-121.198,144.000,0 +,, +-246.743,106.000,1 +-246.842,105.649,1 +-246.960,105.200,1 +-246.911,104.909,1 +-246.826,104.400,1 +-246.663,104.080,1 +-246.524,103.884,1 +-246.229,103.705,1 +-246.000,103.543,1 +-245.695,103.539,1 +-245.223,103.630,1 +-245.126,103.784,1 +-244.816,104.023,1 +-244.800,104.051,1 +-244.575,104.475,1 +-244.502,104.827,1 +-244.367,105.200,1 +-244.445,105.570,1 +-244.530,105.939,1 +-244.649,106.066,1 +-244.847,106.365,1 +-244.900,106.388,1 +-245.321,106.533,1 +-245.811,106.542,1 +-246.000,106.557,1 +-246.409,106.472,1 +-246.468,106.456,1 +-246.612,106.177,1 +-246.743,106.000,1 +,, diff --git a/airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv b/airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv index bb75b830..59a8b644 100644 --- a/airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv +++ b/airframe/diagrams/ring_frames/ring_rear_Y290_inner.csv @@ -1,2792 +1,2787 @@ -X_mm,Z_mm,path_index --234.491,84.302,0 --234.713,83.590,0 --234.719,83.585,0 --234.735,83.566,0 --234.747,83.538,0 --234.782,83.474,0 --235.053,83.060,0 --235.204,82.853,0 --235.288,82.766,0 --235.311,82.730,0 --235.313,82.677,0 --235.500,82.000,0 --235.481,81.200,0 --235.388,80.400,0 --235.264,79.951,0 --234.785,79.589,0 --234.731,79.557,0 --234.629,79.475,0 --234.219,78.960,0 --234.164,78.856,0 --234.147,78.785,0 --234.000,78.212,0 --234.000,78.592,0 --234.000,80.405,0 --234.000,85.768,0 --234.000,93.927,0 --234.221,93.361,0 --234.544,92.961,0 --234.944,92.522,0 --235.304,92.122,0 --235.441,91.600,0 --235.508,90.800,0 --235.445,90.008,0 --235.442,89.950,0 --235.392,89.837,0 --235.021,89.293,0 --234.859,89.142,0 --234.653,88.715,0 --234.497,88.400,0 --234.493,88.250,0 --234.482,87.600,0 --234.482,87.418,0 --234.488,86.800,0 --234.488,86.628,0 --234.487,86.000,0 --234.487,85.827,0 --234.487,85.200,0 --234.487,85.025,0 --234.486,84.400,0 --234.491,84.302,0 -,, --224.000,30.500,1 --223.200,30.500,1 --223.000,30.500,1 --222.800,30.500,1 --222.763,30.537,1 --222.662,30.638,1 --222.385,30.915,1 --222.000,30.733,1 --221.363,30.490,1 --220.963,30.338,1 --220.400,30.124,1 --219.600,29.820,1 --219.111,29.634,1 --218.711,29.482,1 --218.000,29.213,1 --217.236,28.924,1 --217.182,28.904,1 --217.148,28.891,1 --217.065,28.859,1 --216.854,28.780,1 --216.615,28.690,1 --216.520,28.654,1 --216.472,28.636,1 --215.600,28.307,1 --214.993,28.078,1 --214.648,27.948,1 --214.619,27.919,1 --214.608,27.908,1 --214.576,27.876,1 --214.557,27.857,1 --214.500,27.800,1 --214.500,27.000,1 --214.500,26.200,1 --214.500,26.000,1 --214.400,25.900,1 --214.000,25.500,1 --213.985,25.485,1 --213.944,25.445,1 --214.037,25.200,1 --214.295,24.523,1 --214.447,24.123,1 --214.646,23.600,1 --214.950,22.800,1 --215.151,22.272,1 --215.313,21.872,1 --215.713,21.248,1 --216.049,20.848,1 --216.450,20.470,1 --216.872,20.070,1 --217.272,19.673,1 --217.670,19.273,1 --218.070,18.840,1 --218.436,18.440,1 --218.906,17.923,1 --218.910,17.918,1 --218.918,17.910,1 --219.199,17.599,1 --219.493,17.289,1 --219.501,17.281,1 --219.505,17.277,1 --219.510,17.272,1 --219.979,16.778,1 --220.359,16.378,1 --220.759,15.957,1 --221.143,15.557,1 --221.543,15.142,1 --221.942,14.742,1 --222.286,14.400,1 --219.478,14.400,1 --219.339,14.546,1 --218.959,14.946,1 --218.559,15.368,1 --218.179,15.768,1 --217.779,16.189,1 --217.407,16.589,1 --217.007,17.038,1 --216.657,17.438,1 --216.257,17.869,1 --215.864,18.269,1 --215.464,18.650,1 --215.039,19.050,1 --214.639,19.423,1 --214.211,19.823,1 --213.811,20.365,1 --213.585,20.765,1 --213.419,21.200,1 --213.115,22.000,1 --212.881,22.614,1 --212.729,23.014,1 --212.506,23.600,1 --212.202,24.400,1 --212.025,24.866,1 --211.873,25.266,1 --211.594,26.000,1 --211.321,26.711,1 --211.165,27.111,1 --210.970,27.600,1 --211.024,28.460,1 --211.025,28.464,1 --211.026,28.466,1 --211.028,28.470,1 --211.204,28.793,1 --211.538,28.924,1 --211.541,28.926,1 --211.544,28.927,1 --211.547,28.928,1 --212.400,29.248,1 --213.068,29.499,1 --213.468,29.650,1 --214.000,29.849,1 --214.800,30.151,1 --215.330,30.351,1 --215.730,30.502,1 --216.400,30.756,1 --217.232,31.071,1 --217.245,31.076,1 --217.253,31.079,1 --217.268,31.084,1 --217.587,31.205,1 --217.916,31.330,1 --217.931,31.336,1 --217.942,31.340,1 --218.800,31.667,1 --219.437,31.910,1 --219.837,32.062,1 --220.400,32.277,1 --221.200,32.582,1 --221.686,32.767,1 --222.086,32.920,1 --222.800,33.193,1 --223.552,33.480,1 --223.606,33.500,1 --223.642,33.514,1 --223.733,33.549,1 --223.934,33.625,1 --224.168,33.697,1 --224.273,33.730,1 --224.327,33.745,1 --224.940,33.744,1 --225.332,33.200,1 --225.592,32.788,1 --225.845,32.388,1 --226.245,31.754,1 --226.495,31.354,1 --226.826,30.800,1 --226.991,30.000,1 --226.660,29.256,1 --226.359,28.856,1 --226.359,28.730,1 --226.650,28.330,1 --227.050,27.854,1 --227.600,27.648,1 --228.351,27.432,1 --228.383,27.426,1 --228.464,27.389,1 --228.645,27.145,1 --228.943,26.800,1 --229.075,26.569,1 --229.305,26.078,1 --229.446,25.922,1 --229.699,25.396,1 --229.800,25.200,1 --229.890,24.995,1 --230.091,24.484,1 --230.201,24.374,1 --230.375,23.985,1 --230.569,23.600,1 --230.741,23.224,1 --230.895,22.798,1 --230.984,22.695,1 --231.289,22.063,1 --231.309,21.967,1 --231.315,21.926,1 --231.506,21.200,1 --231.404,20.617,1 --231.073,20.217,1 --231.073,19.832,1 --231.352,19.432,1 --231.752,18.931,1 --232.082,18.531,1 --232.142,18.000,1 --232.084,17.200,1 --232.022,16.495,1 --232.016,16.431,1 --231.955,15.734,1 --231.945,15.630,1 --231.942,15.591,1 --231.872,14.800,1 --231.858,14.639,1 --231.837,14.400,1 --229.503,14.400,1 --227.633,14.400,1 --227.100,14.400,1 --227.186,14.486,1 --227.200,14.500,1 --228.000,14.500,1 --228.400,14.900,1 --228.500,15.000,1 --228.600,15.100,1 --229.000,15.500,1 --229.400,15.900,1 --229.500,16.000,1 --229.500,16.200,1 --229.500,17.000,1 --229.678,17.178,1 --230.013,17.513,1 --229.883,17.965,1 --229.575,18.365,1 --229.285,18.800,1 --228.941,19.602,1 --228.919,19.668,1 --228.916,19.950,1 --228.857,20.400,1 --228.781,20.749,1 --228.767,21.200,1 --228.398,22.022,1 --228.397,22.024,1 --228.397,22.025,1 --228.396,22.025,1 --228.396,22.026,1 --228.396,22.026,1 --228.394,22.029,1 --227.971,22.800,1 --227.604,23.567,1 --227.593,23.592,1 --227.588,23.599,1 --227.578,23.619,1 --227.178,24.400,1 --226.814,25.045,1 --226.760,25.151,1 --226.727,25.195,1 --226.521,25.453,1 --226.118,25.976,1 --226.004,26.065,1 --225.893,26.183,1 --225.457,26.668,1 --225.360,26.769,1 --224.907,27.362,1 --224.664,27.762,1 --224.446,28.400,1 --224.482,29.200,1 --224.646,29.854,1 --224.546,29.954,1 --224.500,30.000,1 --224.100,30.400,1 --224.000,30.500,1 -,, --123.620,108.400,2 --123.918,109.089,2 --123.984,109.213,2 --124.390,109.962,2 --124.407,109.992,2 --124.412,110.001,2 --124.458,110.079,2 --124.857,110.765,2 --124.932,110.854,2 --125.356,111.552,2 --125.629,111.952,2 --125.911,112.400,2 --126.282,113.029,2 --126.504,113.429,2 --126.831,114.000,2 --127.128,114.552,2 --127.322,114.952,2 --127.664,115.600,2 --127.942,116.122,2 --128.163,116.522,2 --128.579,117.176,2 --128.601,117.214,2 --128.617,117.234,2 --128.652,117.276,2 --128.848,117.549,2 --129.077,117.856,2 --129.111,117.907,2 --129.134,117.939,2 --129.535,118.496,2 --129.827,118.896,2 --130.227,119.437,2 --130.532,119.837,2 --130.953,120.363,2 --130.988,120.407,2 --131.018,120.442,2 --131.096,120.527,2 --131.270,120.733,2 --131.448,120.973,2 --131.518,121.076,2 --131.557,121.131,2 --131.945,121.693,2 --132.193,122.093,2 --132.632,122.761,2 --132.702,122.854,2 --133.152,123.429,2 --133.249,123.544,2 --133.317,123.624,2 --133.990,124.370,2 --134.009,124.390,2 --134.027,124.408,2 --134.792,125.160,2 --134.817,125.184,2 --134.844,125.210,2 --135.582,125.914,2 --135.636,125.965,2 --135.695,126.021,2 --136.373,126.671,2 --136.453,126.748,2 --136.539,126.832,2 --137.164,127.437,2 --137.265,127.536,2 --137.371,127.640,2 --137.959,128.217,2 --138.072,128.329,2 --138.185,128.444,2 --138.771,129.068,2 --138.848,129.153,2 --138.904,129.220,2 --139.450,129.952,2 --139.460,129.969,2 --139.465,129.980,2 --139.876,130.765,2 --139.894,130.816,2 --140.195,131.535,2 --140.232,131.609,2 --140.256,131.637,2 --140.632,132.051,2 --141.200,132.121,2 --142.000,132.283,2 --142.737,132.613,2 --143.137,132.837,2 --143.600,133.115,2 --144.183,133.477,2 --144.583,133.751,2 --145.162,134.151,2 --145.562,134.426,2 --146.000,134.732,2 --146.511,135.106,2 --146.911,135.494,2 --147.287,135.894,2 --147.638,136.407,2 --147.674,136.471,2 --147.783,136.633,2 --148.178,136.991,2 --148.328,137.070,2 --148.399,137.071,2 --149.200,137.214,2 --150.000,137.204,2 --150.800,137.401,2 --151.218,137.591,2 --151.618,137.772,2 --152.400,138.088,2 --152.974,138.316,2 --153.374,138.505,2 --154.000,138.796,2 --154.580,139.091,2 --154.980,139.349,2 --155.455,139.749,2 --155.855,140.169,2 --156.277,140.569,2 --156.677,140.891,2 --157.131,140.894,2 --157.133,140.894,2 --157.144,140.892,2 --157.158,140.887,2 --157.558,140.783,2 --157.989,140.674,2 --158.011,140.669,2 --158.029,140.664,2 --158.800,140.568,2 --159.549,140.654,2 --159.566,140.656,2 --159.613,140.668,2 --160.458,140.891,2 --160.486,140.899,2 --161.200,141.167,2 --161.770,141.473,2 --162.170,141.767,2 --162.617,142.167,2 --162.928,142.500,2 --163.000,142.500,2 --163.076,142.576,2 --163.124,142.624,2 --163.285,142.785,2 --163.311,142.803,2 --163.560,142.979,2 --163.596,143.009,2 --163.613,143.051,2 --163.656,143.090,2 --164.142,143.218,2 --164.400,143.190,2 --164.891,143.031,2 --165.129,142.981,2 --165.200,142.981,2 --166.000,142.844,2 --166.869,143.020,2 --166.936,143.031,2 --167.532,143.103,2 --167.600,143.104,2 --168.400,142.936,2 --169.200,142.786,2 --170.000,142.748,2 --170.800,142.787,2 --171.600,142.873,2 --172.400,142.953,2 --173.143,143.027,2 --173.200,143.033,2 --173.511,143.064,2 --174.000,143.113,2 --174.247,143.136,2 --174.800,143.189,2 --175.234,143.214,2 --175.600,143.236,2 --176.061,143.226,2 --176.400,143.218,2 --176.769,143.187,2 --177.200,143.151,2 --177.429,143.129,2 --178.000,143.074,2 --178.045,143.069,2 --178.278,143.047,2 --178.660,143.010,2 --178.732,143.003,2 --179.600,142.920,2 --180.400,142.835,2 --181.200,142.778,2 --182.000,142.782,2 --182.800,142.860,2 --183.661,143.061,2 --183.708,143.057,2 --184.340,143.034,2 --184.388,143.028,2 --185.200,142.837,2 --186.000,142.913,2 --186.753,143.077,2 --186.770,143.077,2 --186.818,143.084,2 --187.349,143.174,2 --187.410,143.184,2 --187.501,143.199,2 --187.572,143.128,2 --187.675,143.025,2 --187.892,142.808,2 --188.129,142.571,2 --188.198,142.502,2 --188.200,142.500,2 --188.209,142.500,2 --188.659,142.500,2 --188.675,142.500,2 --188.676,142.498,2 --188.785,142.385,2 --189.258,141.962,2 --189.302,141.937,2 --189.353,141.893,2 --189.664,141.637,2 --189.934,141.472,2 --189.988,141.439,2 --190.005,141.430,2 --190.026,141.422,2 --190.827,141.020,2 --190.863,141.010,2 --190.931,140.988,2 --191.399,140.829,2 --191.600,140.771,2 --191.800,140.734,2 --192.234,140.673,2 --192.403,140.646,2 --192.459,140.636,2 --193.095,140.663,2 --193.133,140.665,2 --193.246,140.689,2 --194.027,140.861,2 --194.090,140.881,2 --194.578,140.891,2 --194.978,140.694,2 --195.471,140.294,2 --195.871,139.879,2 --196.470,139.458,2 --196.526,139.420,2 --196.610,139.351,2 --196.820,139.211,2 --197.021,139.100,2 --197.123,139.057,2 --197.159,139.037,2 --197.214,139.011,2 --198.000,138.607,2 --198.436,138.417,2 --198.836,138.228,2 --199.600,137.868,2 --200.086,137.640,2 --200.486,137.454,2 --201.200,137.205,2 --202.000,137.088,2 --202.800,137.117,2 --203.371,136.979,2 --203.771,136.539,2 --204.098,136.139,2 --204.498,135.662,2 --204.867,135.262,2 --205.267,134.920,2 --205.773,134.520,2 --206.173,134.254,2 --206.843,133.827,2 --206.873,133.807,2 --206.898,133.788,2 --206.924,133.771,2 --207.194,133.596,2 --207.469,133.401,2 --207.496,133.382,2 --207.524,133.365,2 --208.177,132.912,2 --208.577,132.671,2 --209.200,132.394,2 --210.000,132.194,2 --210.707,132.072,2 --210.725,132.064,2 --210.758,132.039,2 --210.812,132.005,2 --211.065,131.878,2 --211.230,131.627,2 --211.276,131.570,2 --211.301,131.541,2 --211.308,131.516,2 --211.598,130.800,2 --211.879,130.200,2 --212.144,129.800,2 --212.572,129.278,2 --212.598,129.244,2 --212.627,129.213,2 --212.692,129.142,2 --212.901,128.907,2 --213.139,128.666,2 --213.257,128.546,2 --213.301,128.500,2 --213.346,128.455,2 --213.464,128.337,2 --213.702,128.100,2 --213.938,127.869,2 --214.059,127.751,2 --214.106,127.705,2 --214.154,127.658,2 --214.280,127.534,2 --214.511,127.308,2 --214.733,127.090,2 --214.863,126.963,2 --214.914,126.913,2 --214.966,126.863,2 --215.102,126.729,2 --215.319,126.517,2 --215.530,126.312,2 --215.615,126.228,2 --215.652,126.193,2 --215.683,126.162,2 --216.131,125.726,2 --216.531,125.341,2 --216.948,124.941,2 --217.348,124.558,2 --217.762,124.158,2 --218.187,123.690,2 --218.215,123.662,2 --218.234,123.630,2 --218.301,123.557,2 --218.493,123.324,2 --218.686,123.022,2 --218.740,122.928,2 --218.760,122.864,2 --219.133,122.305,2 --219.421,121.905,2 --219.821,121.421,2 --220.205,121.021,2 --220.605,120.494,2 --220.849,120.094,2 --221.161,119.600,2 --221.512,119.106,2 --221.842,118.706,2 --222.242,118.211,2 --222.555,117.811,2 --222.997,117.130,2 --222.998,117.128,2 --223.002,117.122,2 --223.394,116.475,2 --223.397,116.469,2 --223.842,115.699,2 --224.039,115.299,2 --224.302,114.800,2 --224.663,114.127,2 --224.858,113.727,2 --225.136,113.200,2 --225.479,112.590,2 --225.701,112.190,2 --226.127,111.546,2 --226.133,111.533,2 --226.143,111.522,2 --226.392,111.171,2 --226.608,110.842,2 --226.616,110.827,2 --226.619,110.821,2 --226.623,110.814,2 --226.712,110.667,2 --227.053,110.091,2 --227.075,110.073,2 --227.091,110.043,2 --227.123,109.987,2 --227.269,109.723,2 --227.450,109.384,2 --227.490,109.307,2 --227.519,109.256,2 --227.880,108.492,2 --227.887,108.481,2 --227.893,108.462,2 --227.904,108.435,2 --228.033,108.092,2 --228.174,107.684,2 --228.188,107.643,2 --228.200,107.609,2 --228.475,106.800,2 --228.705,106.121,2 --228.711,106.103,2 --228.720,106.078,2 --228.730,106.047,2 --228.841,105.720,2 --228.978,105.311,2 --228.995,105.258,2 --229.009,105.216,2 --229.281,104.400,2 --229.507,103.724,2 --229.513,103.706,2 --229.522,103.680,2 --229.532,103.649,2 --229.641,103.326,2 --229.791,102.917,2 --229.811,102.864,2 --229.826,102.823,2 --230.200,102.022,2 --230.204,102.013,2 --230.209,102.005,2 --230.219,101.988,2 --230.424,101.646,2 --230.792,101.218,2 --230.801,101.207,2 --230.806,101.201,2 --230.810,101.197,2 --230.817,101.189,2 --231.193,100.788,2 --231.476,100.435,2 --231.481,100.428,2 --231.484,100.425,2 --231.486,100.421,2 --231.486,100.419,2 --231.490,100.406,2 --231.721,99.600,2 --231.527,98.800,2 --231.397,98.000,2 --231.441,97.200,2 --231.545,96.400,2 --231.670,95.600,2 --231.828,94.800,2 --231.955,94.091,2 --232.016,93.691,2 --232.167,93.200,2 --232.500,92.522,2 --232.500,92.582,2 --232.500,92.644,2 --232.500,92.716,2 --232.500,102.482,2 --232.406,102.590,2 --232.350,102.664,2 --232.330,102.689,2 --232.301,102.708,2 --232.291,102.734,2 --232.250,102.792,2 --231.991,103.198,2 --231.848,103.603,2 --231.846,103.613,2 --231.842,103.621,2 --231.583,104.400,2 --231.334,105.151,2 --231.332,105.155,2 --231.331,105.159,2 --231.329,105.165,2 --231.192,105.576,2 --231.049,106.006,2 --231.046,106.014,2 --231.044,106.022,2 --230.782,106.800,2 --230.530,107.542,2 --230.527,107.548,2 --230.525,107.556,2 --230.521,107.566,2 --230.387,107.962,2 --230.243,108.387,2 --230.238,108.401,2 --230.233,108.414,2 --229.962,109.200,2 --229.711,109.815,2 --229.498,110.215,2 --229.140,110.863,2 --229.108,110.921,2 --229.059,111.010,2 --228.877,111.339,2 --228.741,111.586,2 --228.707,111.649,2 --228.688,111.684,2 --228.661,111.693,2 --228.258,112.321,2 --227.948,112.721,2 --227.705,113.200,2 --227.357,113.849,2 --227.117,114.249,2 --226.838,114.800,2 --226.521,115.394,2 --226.290,115.794,2 --225.974,116.400,2 --225.684,116.942,2 --225.468,117.342,2 --225.086,118.000,2 --224.819,118.427,2 --224.534,118.827,2 --224.134,119.366,2 --223.823,119.766,2 --223.423,120.268,2 --223.098,120.668,2 --222.663,121.216,2 --222.636,121.252,2 --222.616,121.278,2 --222.579,121.343,2 --222.391,121.588,2 --222.210,121.841,2 --222.162,121.891,2 --222.134,121.928,2 --221.706,122.534,2 --221.405,122.934,2 --220.989,123.560,2 --220.971,123.586,2 --220.953,123.606,2 --220.919,123.663,2 --220.745,123.932,2 --220.420,124.376,2 --220.411,124.388,2 --220.407,124.392,2 --220.405,124.396,2 --220.401,124.401,2 --220.058,124.870,2 --219.809,125.159,2 --219.722,125.261,2 --219.692,125.297,2 --219.651,125.341,2 --219.535,125.471,2 --219.314,125.719,2 --219.090,125.934,2 --218.960,126.059,2 --218.913,126.109,2 --218.865,126.154,2 --218.749,126.262,2 --218.502,126.494,2 --218.232,126.749,2 --218.127,126.849,2 --218.087,126.886,2 --218.049,126.922,2 --217.956,127.010,2 --217.679,127.275,2 --217.386,127.558,2 --217.302,127.640,2 --217.270,127.670,2 --217.239,127.700,2 --217.161,127.775,2 --216.865,128.063,2 --216.557,128.363,2 --216.486,128.433,2 --216.459,128.459,2 --216.433,128.485,2 --216.366,128.550,2 --216.055,128.854,2 --215.734,129.169,2 --215.673,129.228,2 --215.650,129.250,2 --215.628,129.272,2 --215.570,129.328,2 --215.247,129.646,2 --214.912,129.974,2 --214.861,130.023,2 --214.842,130.042,2 --214.823,130.060,2 --214.775,130.108,2 --214.439,130.438,2 --214.166,130.758,2 --214.099,130.836,2 --214.071,130.866,2 --214.039,130.905,2 --213.943,131.032,2 --213.704,131.329,2 --213.561,131.553,2 --213.511,131.626,2 --213.480,131.664,2 --213.480,131.702,2 --213.448,132.053,2 --213.410,132.400,2 --213.396,132.470,2 --213.154,133.064,2 --213.136,133.109,2 --213.084,133.148,2 --212.958,133.266,2 --212.695,133.516,2 --212.447,133.713,2 --212.385,133.763,2 --212.353,133.788,2 --212.329,133.803,2 --211.569,134.205,2 --211.515,134.219,2 --210.857,134.173,2 --210.806,134.183,2 --209.981,134.179,2 --209.974,134.181,2 --209.969,134.182,2 --209.590,134.394,2 --209.219,134.627,2 --209.216,134.630,2 --209.212,134.635,2 --209.206,134.638,2 --208.587,135.049,2 --208.187,135.324,2 --207.570,135.737,2 --207.559,135.741,2 --207.549,135.745,2 --207.175,135.988,2 --206.820,136.215,2 --206.815,136.221,2 --206.808,136.229,2 --206.799,136.234,2 --206.227,136.643,2 --205.827,137.059,2 --205.513,137.459,2 --205.385,138.000,2 --205.072,138.601,2 --204.426,139.004,2 --204.417,139.013,2 --204.408,139.017,2 --204.391,139.027,2 --204.039,139.221,2 --203.657,139.409,2 --203.639,139.418,2 --203.622,139.425,2 --202.963,139.412,2 --202.563,139.059,2 --201.975,139.051,2 --201.938,139.056,2 --201.898,139.062,2 --201.544,139.173,2 --201.228,139.318,2 --201.208,139.334,2 --201.191,139.351,2 --201.160,139.365,2 --200.353,139.757,2 --200.302,139.768,2 --200.230,139.788,2 --199.882,139.947,2 --199.608,140.070,2 --199.577,140.097,2 --199.557,140.118,2 --199.513,140.138,2 --198.800,140.432,2 --198.194,140.706,2 --197.794,140.899,2 --197.237,141.312,2 --197.203,141.332,2 --197.183,141.355,2 --197.142,141.407,2 --196.858,141.707,2 --196.761,142.001,2 --196.745,142.038,2 --196.730,142.057,2 --196.712,142.081,2 --196.340,142.606,2 --195.562,142.961,2 --195.515,142.977,2 --195.415,143.010,2 --194.977,143.156,2 --194.800,143.213,2 --194.173,143.134,2 --194.029,143.143,2 --193.934,143.085,2 --193.200,142.809,2 --192.400,142.806,2 --191.594,143.015,2 --191.560,143.031,2 --191.503,143.046,2 --191.145,143.158,2 --190.824,143.301,2 --190.790,143.321,2 --190.771,143.336,2 --190.757,143.354,2 --190.176,143.748,2 --189.799,144.403,2 --189.798,144.404,2 --189.798,144.408,2 --189.532,145.200,2 --189.517,145.637,2 --189.509,146.000,2 --189.508,146.456,2 --189.506,146.800,2 --189.562,147.220,2 --189.576,147.600,2 --189.650,147.801,2 --189.774,148.318,2 --189.782,148.369,2 --189.783,148.388,2 --189.978,149.200,2 --190.045,149.900,2 --182.814,149.900,2 --182.993,149.198,2 --182.995,149.129,2 --183.046,148.958,2 --183.342,148.479,2 --183.469,148.305,2 --183.623,148.119,2 --184.145,147.821,2 --184.400,147.657,2 --185.002,147.783,2 --185.200,147.818,2 --185.636,147.848,2 --186.024,148.044,2 --186.662,147.618,2 --186.826,147.147,2 --186.893,146.800,2 --186.892,146.660,2 --186.897,146.000,2 --186.884,145.924,2 --186.800,145.805,2 --186.683,145.553,2 --186.182,145.189,2 --186.129,145.166,2 --186.116,145.163,2 --186.107,145.156,2 --186.104,145.152,2 --185.246,145.119,2 --185.200,145.120,2 --184.409,145.197,2 --184.404,145.198,2 --184.404,145.198,2 --184.404,145.198,2 --184.403,145.198,2 --183.747,145.192,2 --183.668,145.203,2 --182.786,144.936,2 --182.773,144.938,2 --182.699,144.933,2 --182.000,144.865,2 --181.839,144.881,2 --181.394,144.924,2 --181.197,144.943,2 --181.151,144.947,2 --180.400,145.019,2 --179.600,145.096,2 --178.800,145.173,2 --178.000,145.250,2 --177.200,145.327,2 --176.346,145.409,2 --176.277,145.411,2 --175.630,145.427,2 --175.561,145.422,2 --174.800,145.369,2 --174.000,145.290,2 --173.200,145.210,2 --172.400,145.130,2 --171.600,145.051,2 --170.851,144.976,2 --170.793,144.970,2 --170.480,144.937,2 --170.000,144.886,2 --169.785,144.879,2 --169.200,144.839,2 --169.071,144.851,2 --168.594,144.948,2 --168.492,144.968,2 --168.463,144.966,2 --167.609,145.252,2 --167.540,145.247,2 --166.787,145.197,2 --166.763,145.200,2 --166.760,145.200,2 --166.759,145.197,2 --166.757,145.196,2 --166.730,145.190,2 --166.056,145.037,2 --166.000,145.024,2 --165.216,145.184,2 --165.202,145.182,2 --165.191,145.193,2 --165.158,145.209,2 --165.103,145.286,2 --164.506,146.000,2 --164.505,146.526,2 --164.501,146.782,2 --164.648,147.331,2 --164.779,147.618,2 --164.949,147.842,2 --165.182,147.984,2 --165.556,148.014,2 --166.000,147.973,2 --166.520,147.742,2 --166.776,147.637,2 --167.295,147.776,2 --167.576,147.840,2 --167.778,148.028,2 --168.112,148.347,2 --168.176,148.391,2 --168.204,148.409,2 --168.222,148.438,2 --168.595,149.200,2 --168.726,149.900,2 --161.563,149.900,2 --161.590,149.457,2 --161.644,149.057,2 --161.791,148.400,2 --161.997,147.670,2 --162.002,147.572,2 --162.041,147.117,2 --162.085,146.800,2 --162.084,146.713,2 --162.098,146.000,2 --162.094,145.934,2 --162.088,145.653,2 --162.089,145.218,2 --162.097,145.133,2 --161.814,144.382,2 --161.815,144.335,2 --161.795,144.270,2 --161.258,143.636,2 --161.225,143.608,2 --161.200,143.580,2 --161.110,143.535,2 --160.400,143.129,2 --159.965,143.013,2 --159.675,142.935,2 --159.564,142.905,2 --158.800,142.701,2 --157.982,142.932,2 --157.974,142.932,2 --157.967,142.937,2 --157.954,142.947,2 --157.445,143.205,2 --157.200,143.249,2 --156.476,143.124,2 --156.365,143.110,2 --156.321,143.095,2 --155.600,142.831,2 --155.056,142.540,2 --154.759,141.994,2 --154.724,141.937,2 --154.658,141.762,2 --154.183,141.208,2 --154.051,141.136,2 --154.005,141.082,2 --153.354,140.725,2 --153.205,140.640,2 --153.188,140.632,2 --152.403,140.281,2 --152.352,140.259,2 --152.226,140.202,2 --151.610,139.933,2 --151.526,139.896,2 --150.800,139.570,2 --150.068,139.288,2 --150.003,139.229,2 --149.870,139.229,2 --149.225,139.216,2 --149.180,139.246,2 --149.154,139.262,2 --149.077,139.262,2 --148.400,139.428,2 --147.665,139.328,2 --147.577,139.278,2 --146.985,138.945,2 --146.857,138.873,2 --146.802,138.842,2 --146.274,138.510,2 --146.130,138.000,2 --145.807,137.193,2 --145.742,137.109,2 --145.281,136.654,2 --145.198,136.593,2 --144.583,136.143,2 --144.183,135.870,2 --143.585,135.474,2 --143.573,135.466,2 --143.550,135.451,2 --142.828,134.982,2 --142.809,134.970,2 --142.171,134.548,2 --141.771,134.305,2 --141.200,134.053,2 --140.348,134.156,2 --140.330,134.151,2 --140.051,134.114,2 --139.629,134.081,2 --139.618,134.081,2 --139.569,134.052,2 --139.469,133.980,2 --138.850,133.518,2 --138.741,133.432,2 --138.224,132.982,2 --138.126,132.400,2 --138.001,131.600,2 --137.699,131.073,2 --137.332,130.673,2 --136.932,130.270,2 --136.455,129.803,2 --136.330,129.679,2 --135.907,129.270,2 --135.717,129.086,2 --135.541,128.916,2 --135.061,128.457,2 --134.899,128.303,2 --134.752,128.162,2 --134.209,127.646,2 --134.079,127.522,2 --133.961,127.410,2 --133.357,126.834,2 --133.259,126.742,2 --133.171,126.658,2 --132.535,126.031,2 --132.451,125.947,2 --132.364,125.855,2 --131.811,125.242,2 --131.760,125.183,2 --131.320,124.653,2 --131.010,124.253,2 --130.610,123.657,2 --130.370,123.257,2 --130.045,122.800,2 --129.675,122.299,2 --129.357,121.899,2 --128.957,121.394,2 --128.640,120.994,2 --128.240,120.470,2 --127.947,120.070,2 --127.603,119.600,2 --127.256,119.130,2 --126.937,118.730,2 --126.537,118.172,2 --126.293,117.772,2 --125.986,117.200,2 --125.693,116.629,2 --125.456,116.229,2 --125.121,115.600,2 --124.865,115.085,2 --124.622,114.685,2 --124.254,114.000,2 --124.033,113.540,2 --123.784,113.140,2 --123.369,112.430,2 --123.257,112.333,2 --122.804,111.616,2 --122.797,111.604,2 --122.795,111.600,2 --122.775,111.564,2 --122.362,110.815,2 --122.299,110.703,2 --121.916,109.998,2 --121.893,109.956,2 --121.843,109.844,2 --121.564,109.200,2 --121.399,108.705,2 --121.322,108.469,2 --121.297,108.391,2 --121.150,107.931,2 --121.050,107.617,2 --121.033,107.564,2 --120.985,107.415,2 --120.786,106.800,2 --120.603,106.244,2 --120.539,106.053,2 --120.518,105.988,2 --120.375,105.561,2 --120.259,105.216,2 --120.241,105.162,2 --120.192,105.016,2 --119.983,104.400,2 --119.798,103.854,2 --119.731,103.657,2 --119.708,103.596,2 --119.353,102.833,2 --119.296,102.744,2 --119.021,102.453,2 --119.000,102.431,2 --119.000,102.033,2 --119.000,101.069,2 --119.000,99.267,2 --119.000,99.255,2 --119.000,98.978,2 --119.000,98.512,2 --119.000,97.843,2 --119.000,97.392,2 --119.000,92.369,2 --119.000,92.333,2 --119.000,92.315,2 --119.001,92.316,2 --119.256,92.716,2 --119.431,93.200,2 --119.601,94.000,2 --119.698,94.800,2 --119.829,95.600,2 --119.957,96.300,2 --120.013,96.700,2 --120.135,97.200,2 --120.317,98.000,2 --120.190,98.849,2 --120.185,98.889,2 --120.167,98.934,2 --120.027,99.292,2 --119.915,99.587,2 --119.900,99.626,2 --119.896,99.649,2 --119.896,99.659,2 --119.874,100.214,2 --120.146,100.614,2 --120.546,101.033,2 --120.956,101.433,2 --121.348,102.002,2 --121.354,102.011,2 --121.365,102.032,2 --121.741,102.822,2 --121.747,102.837,2 --122.021,103.600,2 --122.273,104.346,2 --122.279,104.363,2 --122.555,105.190,2 --122.564,105.217,2 --122.568,105.230,2 --122.821,106.000,2 --123.066,106.760,2 --123.067,106.764,2 --123.343,107.625,2 --123.345,107.631,2 --123.346,107.633,2 --123.620,108.400,2 -,, --183.081,151.436,3 --183.349,151.836,3 --183.749,152.172,3 --184.400,152.362,3 --185.150,152.153,3 --185.195,152.148,3 --185.228,152.130,3 --185.306,152.079,3 --185.525,151.945,3 --185.942,151.632,3 --185.976,151.607,3 --185.986,151.600,3 --185.993,151.593,3 --186.003,151.585,3 --186.040,151.585,3 --186.789,151.589,3 --186.792,151.589,3 --186.813,151.605,3 --186.813,151.605,3 --186.862,151.645,3 --187.476,152.093,3 --187.600,152.168,3 --188.400,152.371,3 --189.037,152.155,3 --189.437,151.811,3 --189.704,151.411,3 --189.708,151.400,3 --187.245,151.400,3 --187.224,151.400,3 --186.875,151.400,3 --183.753,151.400,3 --183.470,151.400,3 --183.068,151.400,3 --183.081,151.436,3 -,, --127.350,52.381,4 --127.303,52.451,4 --127.113,52.691,4 --126.845,53.030,4 --126.771,53.114,4 --126.750,53.146,4 --126.727,53.166,4 --126.695,53.221,4 --126.400,53.607,4 --126.176,53.984,4 --126.174,53.986,4 --126.173,53.988,4 --125.760,54.731,4 --125.751,54.754,4 --125.735,54.774,4 --125.723,54.810,4 --125.557,55.120,4 --125.363,55.485,4 --125.333,55.529,4 --125.318,55.564,4 --124.929,56.313,4 --124.919,56.343,4 --124.899,56.371,4 --124.888,56.420,4 --124.761,56.694,4 --124.603,57.037,4 --124.563,57.101,4 --124.547,57.146,4 --124.143,57.925,4 --124.129,57.973,4 --124.095,58.007,4 --124.066,58.095,4 --123.947,58.311,4 --123.810,58.575,4 --123.742,58.667,4 --123.716,58.732,4 --123.346,59.472,4 --123.123,59.872,4 --122.851,60.400,4 --122.528,61.084,4 --122.340,61.484,4 --122.069,62.000,4 --121.742,62.800,4 --121.613,63.235,4 --121.451,63.635,4 --121.171,64.400,4 --120.927,65.200,4 --120.806,65.617,4 --120.644,66.017,4 --120.360,66.800,4 --120.118,67.633,4 --120.107,67.678,4 --120.085,67.707,4 --120.079,67.729,4 --120.000,68.000,4 --119.861,68.271,4 --119.850,68.293,4 --119.835,68.327,4 --119.624,68.770,4 --119.428,69.224,4 --119.413,69.268,4 --119.392,69.325,4 --119.244,69.726,4 --119.134,70.042,4 --119.122,70.076,4 --119.113,70.103,4 --119.106,70.121,4 --119.005,70.410,4 --119.000,70.423,4 --119.000,71.570,4 --119.000,76.633,4 --119.000,80.132,4 --119.080,80.040,4 --119.172,79.934,4 --119.341,79.606,4 --119.352,79.584,4 --119.358,79.573,4 --119.361,79.560,4 --119.622,78.800,4 --119.783,77.947,4 --119.794,77.875,4 --119.838,77.601,4 --119.889,77.279,4 --119.902,77.200,4 --119.975,76.744,4 --120.031,76.400,4 --120.061,76.215,4 --120.135,75.752,4 --120.156,75.623,4 --120.163,75.582,4 --120.289,74.800,4 --120.418,74.000,4 --120.547,73.200,4 --120.681,72.466,4 --120.684,72.456,4 --120.687,72.443,4 --120.790,72.004,4 --120.919,71.561,4 --120.922,71.553,4 --120.924,71.547,4 --120.925,71.543,4 --121.176,70.800,4 --121.463,70.036,4 --121.465,70.028,4 --121.469,70.020,4 --121.473,70.005,4 --121.612,69.660,4 --121.789,69.269,4 --121.797,69.254,4 --121.803,69.237,4 --122.221,68.365,4 --122.226,68.342,4 --122.241,68.283,4 --122.479,67.631,4 --122.497,67.599,4 --122.744,66.800,4 --123.053,65.961,4 --123.053,65.959,4 --123.054,65.956,4 --123.306,65.208,4 --123.307,65.206,4 --123.558,64.400,4 --123.868,63.559,4 --123.875,63.540,4 --124.113,62.872,4 --124.120,62.850,4 --124.121,62.837,4 --124.433,62.000,4 --124.710,61.332,4 --124.723,61.312,4 --124.743,61.272,4 --124.770,61.215,4 --124.883,60.965,4 --125.201,60.400,4 --125.204,60.394,4 --125.205,60.392,4 --125.208,60.388,4 --125.218,60.371,4 --125.521,59.860,4 --125.646,59.629,4 --125.679,59.561,4 --125.705,59.521,4 --125.719,59.494,4 --126.115,58.751,4 --126.138,58.707,4 --126.169,58.648,4 --126.352,58.299,4 --126.497,58.015,4 --126.520,57.969,4 --126.532,57.944,4 --126.541,57.924,4 --126.939,57.169,4 --126.953,57.142,4 --126.970,57.110,4 --127.167,56.737,4 --127.342,56.409,4 --127.355,56.381,4 --127.364,56.367,4 --127.370,56.354,4 --127.782,55.591,4 --127.783,55.590,4 --127.784,55.588,4 --127.999,55.204,4 --128.258,54.817,4 --128.259,54.815,4 --128.259,54.814,4 --128.260,54.813,4 --128.673,54.236,4 --128.987,53.836,4 --129.409,53.302,4 --129.439,53.264,4 --129.471,53.224,4 --129.534,53.143,4 --129.703,52.930,4 --129.940,52.629,4 --130.035,52.508,4 --130.065,52.471,4 --130.084,52.446,4 --130.142,52.372,4 --130.417,52.023,4 --130.735,51.613,4 --130.761,51.578,4 --130.770,51.567,4 --130.784,51.549,4 --130.830,51.491,4 --131.128,51.106,4 --131.327,50.847,4 --131.369,50.790,4 --131.391,50.762,4 --131.413,50.733,4 --131.835,50.184,4 --132.142,49.784,4 --132.563,49.238,4 --132.579,49.218,4 --132.591,49.202,4 --132.623,49.160,4 --132.851,48.866,4 --133.193,48.424,4 --133.202,48.412,4 --133.206,48.407,4 --133.209,48.404,4 --133.214,48.397,4 --133.561,47.954,4 --133.842,47.634,4 --133.910,47.556,4 --133.932,47.530,4 --133.963,47.498,4 --134.049,47.404,4 --134.314,47.114,4 --134.583,46.856,4 --134.685,46.758,4 --134.721,46.723,4 --134.757,46.689,4 --134.847,46.602,4 --135.130,46.334,4 --135.438,46.041,4 --135.514,45.969,4 --135.542,45.943,4 --135.564,45.922,4 --135.635,45.854,4 --135.951,45.554,4 --136.296,45.227,4 --136.340,45.185,4 --136.362,45.163,4 --136.382,45.145,4 --136.423,45.106,4 --136.772,44.774,4 --137.151,44.413,4 --137.172,44.392,4 --137.182,44.383,4 --137.192,44.373,4 --137.211,44.355,4 --137.590,43.992,4 --137.972,43.609,4 --137.984,43.597,4 --137.990,43.591,4 --137.996,43.585,4 --138.008,43.572,4 --138.385,43.185,4 --138.684,42.829,4 --138.729,42.774,4 --138.755,42.746,4 --138.785,42.707,4 --138.858,42.615,4 --139.120,42.285,4 --139.268,42.049,4 --139.313,41.977,4 --139.334,41.947,4 --139.347,41.920,4 --139.732,41.134,4 --139.766,41.065,4 --139.812,40.963,4 --139.937,40.682,4 --140.186,40.474,4 --140.279,40.393,4 --140.333,40.354,4 --141.200,40.024,4 --141.619,40.006,4 --142.019,39.864,4 --142.800,39.535,4 --143.296,39.271,4 --143.696,38.996,4 --144.297,38.596,4 --144.697,38.329,4 --145.200,38.003,4 --145.706,37.674,4 --146.106,37.368,4 --146.576,36.968,4 --146.976,36.558,4 --147.320,36.158,4 --147.735,35.554,4 --147.742,35.544,4 --147.750,35.532,4 --148.010,35.186,4 --148.354,35.040,4 --148.367,35.035,4 --148.376,35.032,4 --149.200,34.904,4 --150.000,34.884,4 --150.800,34.734,4 --151.427,34.505,4 --151.827,34.320,4 --152.400,34.058,4 --153.098,33.738,4 --153.498,33.552,4 --154.000,33.318,4 --154.684,32.966,4 --155.084,32.724,4 --155.548,32.324,4 --155.948,31.940,4 --156.396,31.505,4 --156.411,31.487,4 --156.430,31.467,4 --156.468,31.431,4 --156.890,31.157,4 --157.200,31.094,4 --157.366,31.109,4 --158.000,31.175,4 --158.550,31.257,4 --158.800,31.293,4 --159.368,31.265,4 --159.600,31.251,4 --159.923,31.198,4 --160.460,31.099,4 --160.468,31.098,4 --160.472,31.097,4 --161.200,30.948,4 --162.000,30.782,4 --162.845,30.604,4 --162.903,30.589,4 --163.039,30.555,4 --163.449,30.454,4 --163.600,30.412,4 --163.766,30.361,4 --164.199,30.179,4 --164.299,30.141,4 --164.349,30.121,4 --164.974,29.745,4 --165.374,29.397,4 --165.764,28.997,4 --166.074,28.500,4 --166.764,28.500,4 --166.800,28.500,4 --166.900,28.400,4 --167.000,28.300,4 --167.544,28.300,4 --167.801,28.300,4 --168.129,28.682,4 --168.529,28.986,4 --169.200,29.289,4 --170.000,29.411,4 --170.800,29.369,4 --171.600,29.273,4 --172.400,29.177,4 --173.200,29.090,4 --174.000,29.011,4 --174.770,28.939,4 --174.820,28.936,4 --175.100,28.919,4 --175.492,28.894,4 --175.600,28.889,4 --176.273,28.903,4 --176.400,28.906,4 --176.753,28.936,4 --177.164,28.971,4 --177.228,28.978,4 --178.000,29.056,4 --178.800,29.142,4 --179.600,29.228,4 --180.400,29.320,4 --181.200,29.360,4 --182.000,29.236,4 --182.667,28.960,4 --183.067,28.705,4 --183.466,28.305,4 --183.866,27.794,4 --184.066,27.500,4 --184.200,27.500,4 --184.600,27.900,4 --184.700,28.000,4 --185.000,28.300,4 --185.147,28.447,4 --185.200,28.500,4 --185.344,28.500,4 --185.391,28.500,4 --185.423,28.500,4 --185.424,28.500,4 --185.424,28.500,4 --185.446,28.530,4 --185.919,29.157,4 --185.962,29.210,4 --186.014,29.262,4 --186.719,29.858,4 --186.753,29.881,4 --186.772,29.893,4 --187.542,30.293,4 --187.584,30.308,4 --188.353,30.527,4 --188.420,30.544,4 --188.445,30.549,4 --189.200,30.706,4 --190.000,30.874,4 --190.762,31.040,4 --190.789,31.046,4 --190.883,31.067,4 --191.600,31.222,4 --192.292,31.310,4 --192.400,31.324,4 --193.071,31.296,4 --193.200,31.292,4 --193.579,31.225,4 --194.038,31.128,4 --194.061,31.122,4 --194.079,31.117,4 --194.082,31.117,4 --194.557,31.113,4 --194.957,31.348,4 --195.420,31.748,4 --195.820,32.186,4 --196.268,32.586,4 --196.668,32.889,4 --197.200,33.169,4 --197.852,33.480,4 --198.252,33.675,4 --198.800,33.899,4 --199.621,34.222,4 --199.674,34.245,4 --199.760,34.292,4 --200.247,34.507,4 --200.342,34.539,4 --201.200,34.873,4 --202.000,35.011,4 --202.800,35.027,4 --203.309,35.110,4 --203.709,35.503,4 --204.070,35.903,4 --204.470,36.375,4 --204.825,36.775,4 --205.225,37.132,4 --205.694,37.532,4 --206.094,37.808,4 --206.666,38.208,4 --207.066,38.496,4 --207.600,38.852,4 --208.070,39.155,4 --208.470,39.394,4 --209.200,39.756,4 --210.000,39.950,4 --210.022,39.956,4 --210.073,39.962,4 --210.820,40.087,4 --210.855,40.093,4 --211.395,40.515,4 --211.771,41.215,4 --211.780,41.234,4 --211.806,41.292,4 --212.172,41.973,4 --212.197,42.015,4 --212.626,42.607,4 --212.977,43.007,4 --213.377,43.427,4 --213.778,43.827,4 --214.178,44.212,4 --214.596,44.612,4 --214.996,44.995,4 --215.415,45.395,4 --215.815,45.777,4 --216.234,46.177,4 --216.634,46.558,4 --217.049,46.958,4 --217.449,47.360,4 --217.807,47.760,4 --218.207,48.244,4 --218.523,48.644,4 --218.956,49.194,4 --218.989,49.235,4 --219.469,49.847,4 --219.587,49.998,4 --219.594,50.007,4 --219.606,50.022,4 --220.186,50.762,4 --220.229,50.816,4 --220.665,51.372,4 --220.979,51.772,4 --221.429,52.345,4 --221.514,52.454,4 --221.949,53.009,4 --222.054,53.141,4 --222.117,53.223,4 --222.456,53.657,4 --222.712,53.983,4 --222.760,54.044,4 --222.838,54.148,4 --223.282,54.763,4 --223.344,54.857,4 --223.770,55.605,4 --223.775,55.614,4 --223.786,55.635,4 --224.181,56.393,4 --224.189,56.409,4 --224.467,56.940,4 --224.603,57.200,4 --224.607,57.208,4 --225.009,57.977,4 --225.014,57.987,4 --225.016,57.991,4 --225.433,58.779,4 --225.452,58.816,4 --225.819,59.516,4 --225.845,59.569,4 --225.857,59.591,4 --226.261,60.362,4 --226.293,60.427,4 --226.605,61.060,4 --226.640,61.152,4 --226.646,61.191,4 --227.020,62.000,4 --227.186,62.426,4 --227.418,62.826,4 --227.743,63.600,4 --227.908,64.287,4 --227.930,64.347,4 --227.951,64.375,4 --227.973,64.420,4 --228.035,64.644,4 --228.164,64.954,4 --228.196,65.059,4 --228.211,65.136,4 --228.563,66.000,4 --228.716,66.675,4 --228.736,66.741,4 --228.759,66.772,4 --228.784,66.825,4 --228.839,67.028,4 --228.959,67.318,4 --228.999,67.447,4 --229.016,67.533,4 --229.422,68.400,4 --229.585,68.849,4 --229.762,69.249,4 --230.069,70.000,4 --230.318,70.691,4 --230.342,70.760,4 --230.580,71.456,4 --230.619,71.574,4 --230.632,71.626,4 --230.837,72.400,4 --230.971,73.182,4 --230.985,73.255,4 --231.039,73.619,4 --231.096,74.000,4 --231.134,74.248,4 --231.218,74.800,4 --231.328,75.500,4 --231.350,75.639,4 --231.355,75.672,4 --231.473,76.400,4 --231.604,77.200,4 --231.737,78.000,4 --231.875,78.726,4 --231.877,78.734,4 --231.882,78.753,4 --232.176,79.598,4 --232.183,79.611,4 --232.498,80.108,4 --232.500,80.110,4 --232.500,80.097,4 --232.500,80.095,4 --232.500,80.091,4 --232.500,80.089,4 --232.500,80.087,4 --232.500,80.078,4 --232.500,80.055,4 --232.500,75.320,4 --232.500,73.721,4 --232.500,73.484,4 --232.500,73.323,4 --232.500,72.689,4 --232.500,72.482,4 --232.500,71.593,4 --232.500,70.351,4 --232.500,70.330,4 --232.382,70.000,4 --232.124,69.253,4 --232.118,69.234,4 --231.801,68.455,4 --231.789,68.426,4 --231.784,68.411,4 --231.428,67.600,4 --231.234,67.110,4 --231.102,66.710,4 --230.890,66.000,4 --230.614,65.200,4 --230.427,64.728,4 --230.299,64.328,4 --230.080,63.600,4 --229.799,62.800,4 --229.618,62.360,4 --229.438,61.960,4 --228.992,61.126,4 --228.989,61.118,4 --228.669,60.481,4 --228.664,60.473,4 --228.661,60.468,4 --228.605,60.346,4 --228.247,59.584,4 --228.233,59.543,4 --228.195,59.484,4 --227.869,58.866,4 --227.844,58.815,4 --227.416,57.976,4 --227.410,57.962,4 --227.393,57.931,4 --227.031,57.244,4 --227.019,57.219,4 --226.603,56.388,4 --226.601,56.380,4 --226.592,56.362,4 --226.223,55.608,4 --226.216,55.594,4 --225.808,54.796,4 --225.807,54.794,4 --225.805,54.791,4 --225.390,54.004,4 --225.388,54.001,4 --224.982,53.358,4 --224.676,52.958,4 --224.243,52.407,4 --224.210,52.365,4 --223.725,51.746,4 --223.612,51.603,4 --223.606,51.594,4 --223.595,51.580,4 --223.013,50.838,4 --222.971,50.784,4 --222.535,50.228,4 --222.221,49.828,4 --221.771,49.255,4 --221.686,49.146,4 --221.251,48.592,4 --221.147,48.459,4 --221.083,48.377,4 --220.736,47.936,4 --220.485,47.617,4 --220.438,47.558,4 --220.363,47.462,4 --219.879,46.850,4 --219.808,46.760,4 --219.361,46.213,4 --218.990,45.813,4 --218.590,45.419,4 --218.169,45.019,4 --217.769,44.639,4 --217.349,44.239,4 --216.949,43.858,4 --216.530,43.458,4 --216.130,43.076,4 --215.644,42.611,4 --215.527,42.499,4 --215.082,42.073,4 --214.901,41.900,4 --214.736,41.739,4 --214.289,41.263,4 --214.205,41.166,4 --213.988,40.863,4 --213.711,40.485,4 --213.649,40.355,4 --213.609,40.068,4 --213.509,39.600,4 --213.226,38.964,4 --213.219,38.948,4 --212.611,38.532,4 --212.211,38.247,4 --211.600,37.957,4 --210.800,38.029,4 --210.000,37.943,4 --209.927,37.928,4 --209.735,37.857,4 --209.258,37.559,4 --209.168,37.453,4 --208.659,37.155,4 --208.418,36.992,4 --208.356,36.952,4 --207.731,36.539,4 --207.650,36.485,4 --207.610,36.459,4 --207.058,36.097,4 --206.658,35.827,4 --206.198,35.427,4 --205.798,34.942,4 --205.504,34.542,4 --205.325,34.000,4 --205.021,33.478,4 --204.395,33.131,4 --204.349,33.106,4 --204.225,33.049,4 --203.600,32.771,4 --203.269,32.759,4 --202.897,32.870,4 --202.803,32.939,4 --202.776,32.960,4 --202.713,32.956,4 --202.000,33.086,4 --201.422,32.880,4 --201.022,32.701,4 --200.400,32.422,4 --199.679,32.095,4 --199.580,32.051,4 --199.009,31.799,4 --198.857,31.731,4 --198.800,31.705,4 --198.020,31.354,4 --197.988,31.339,4 --197.262,30.838,4 --197.212,30.799,4 --197.175,30.741,4 --196.678,29.931,4 --196.671,29.917,4 --196.285,29.452,4 --195.600,29.151,4 --194.898,28.884,4 --194.818,28.854,4 --194.728,28.854,4 --194.022,28.883,4 --193.970,28.912,4 --193.948,28.923,4 --193.922,28.929,4 --193.200,29.183,4 --192.400,29.192,4 --191.621,29.021,4 --191.562,29.009,4 --191.334,28.958,4 --190.800,28.842,4 --190.028,28.683,4 --189.965,28.670,4 --189.945,28.666,4 --189.200,28.514,4 --188.400,28.338,4 --187.811,28.121,4 --187.411,27.806,4 --187.055,27.406,4 --187.079,26.738,4 --187.080,26.735,4 --187.240,26.057,4 --187.240,26.054,4 --187.240,26.053,4 --187.245,25.471,4 --187.016,25.071,4 --186.616,24.640,4 --186.000,24.485,4 --185.283,24.670,4 --185.251,24.673,4 --185.227,24.683,4 --185.180,24.704,4 --184.512,24.691,4 --184.454,24.691,4 --184.384,24.656,4 --184.025,24.631,4 --183.551,24.584,4 --183.509,24.607,4 --183.437,24.635,4 --183.157,24.747,4 --182.995,25.026,4 --182.958,25.093,4 --182.939,25.135,4 --182.626,26.000,4 --182.474,26.497,4 --182.010,26.925,4 --181.995,26.944,4 --181.976,26.963,4 --181.938,26.997,4 --181.478,27.216,4 --181.200,27.236,4 --180.775,27.190,4 --180.400,27.150,4 --179.772,27.082,4 --179.560,27.059,4 --179.515,27.054,4 --178.800,26.977,4 --178.000,26.894,4 --177.200,26.820,4 --176.400,26.751,4 --175.600,26.733,4 --174.800,26.788,4 --174.000,26.863,4 --173.200,26.943,4 --172.364,27.040,4 --172.303,27.047,4 --172.075,27.077,4 --171.706,27.124,4 --171.600,27.137,4 --171.177,27.192,4 --170.800,27.241,4 --170.634,27.260,4 --170.197,27.291,4 --170.023,27.306,4 --169.973,27.310,4 --169.545,27.257,4 --169.147,26.800,4 --168.827,26.091,4 --168.808,26.058,4 --168.804,25.999,4 --168.662,25.308,4 --168.645,25.258,4 --168.203,24.643,4 --167.600,24.509,4 --166.818,24.662,4 --166.817,24.661,4 --166.016,24.627,4 --166.015,24.627,4 --165.138,24.569,4 --165.085,24.598,4 --164.986,24.634,4 --164.732,24.730,4 --164.579,24.982,4 --164.525,25.077,4 --164.503,25.129,4 --164.273,26.000,4 --164.491,26.800,4 --164.276,27.676,4 --164.274,27.682,4 --164.267,27.688,4 --163.995,28.003,4 --163.679,28.136,4 --163.673,28.140,4 --163.667,28.144,4 --162.800,28.419,4 --161.953,28.595,4 --161.892,28.608,4 --161.711,28.645,4 --161.322,28.726,4 --161.200,28.751,4 --160.916,28.810,4 --160.409,28.916,4 --160.375,28.923,4 --160.358,28.926,4 --159.600,29.079,4 --158.800,29.181,4 --157.998,28.979,4 --157.959,28.957,4 --157.875,28.943,4 --157.200,28.767,4 --156.934,28.804,4 --156.399,28.954,4 --156.392,28.957,4 --156.388,28.958,4 --156.385,28.959,4 --155.529,29.307,4 --155.478,29.342,4 --155.363,29.392,4 --155.102,29.519,4 --154.987,29.772,4 --154.948,29.877,4 --154.911,29.935,4 --154.582,30.604,4 --154.065,31.005,4 --154.031,31.028,4 --154.010,31.053,4 --153.978,31.086,4 --153.706,31.251,4 --153.367,31.409,4 --153.299,31.429,4 --153.248,31.440,4 --152.419,31.835,4 --152.408,31.840,4 --152.402,31.847,4 --152.396,31.852,4 --152.031,32.011,4 --151.642,32.192,4 --151.630,32.195,4 --151.617,32.197,4 --151.370,32.315,4 --150.774,32.584,4 --150.745,32.597,4 --150.711,32.612,4 --150.332,32.772,4 --150.001,32.906,4 --149.973,32.917,4 --149.958,32.924,4 --149.944,32.924,4 --149.285,32.926,4 --149.186,32.926,4 --149.181,32.926,4 --149.169,32.924,4 --148.400,32.740,4 --148.019,32.740,4 --147.624,32.858,4 --147.557,32.896,4 --147.522,32.915,4 --147.498,32.928,4 --146.767,33.335,4 --146.747,33.348,4 --146.715,33.365,4 --146.357,33.589,4 --146.226,33.926,4 --146.219,33.955,4 --146.211,33.974,4 --145.935,34.643,4 --145.842,34.860,4 --145.838,34.867,4 --145.836,34.872,4 --145.601,35.209,4 --145.241,35.516,4 --145.201,35.542,4 --145.180,35.559,4 --145.148,35.581,4 --145.074,35.640,4 --144.698,35.932,4 --144.456,36.098,4 --144.386,36.145,4 --144.358,36.164,4 --144.332,36.180,4 --143.983,36.417,4 --143.670,36.599,4 --143.620,36.628,4 --143.597,36.659,4 --143.560,36.699,4 --143.303,36.863,4 --142.802,37.191,4 --142.797,37.195,4 --142.793,37.197,4 --142.788,37.200,4 --142.773,37.211,4 --142.295,37.530,4 --142.057,37.676,4 --141.985,37.717,4 --141.954,37.739,4 --141.926,37.752,4 --141.200,38.072,4 --140.400,37.984,4 --139.553,38.076,4 --139.522,38.096,4 --139.484,38.122,4 --139.139,38.357,4 --138.836,38.569,4 --138.799,38.595,4 --138.784,38.606,4 --138.771,38.619,4 --138.195,39.037,4 --137.995,39.600,4 --137.796,40.406,4 --137.796,40.408,4 --137.795,40.410,4 --137.793,40.414,4 --137.594,40.782,4 --137.277,41.186,4 --137.249,41.220,4 --137.236,41.237,4 --137.217,41.258,4 --137.174,41.309,4 --136.866,41.670,4 --136.575,41.955,4 --136.489,42.038,4 --136.465,42.063,4 --136.436,42.091,4 --136.360,42.164,4 --136.057,42.455,4 --135.728,42.767,4 --135.668,42.825,4 --135.646,42.845,4 --135.629,42.862,4 --135.572,42.916,4 --135.236,43.235,4 --134.871,43.582,4 --134.841,43.610,4 --134.826,43.625,4 --134.812,43.638,4 --134.785,43.664,4 --134.415,44.015,4 --134.013,44.397,4 --134.007,44.402,4 --134.005,44.405,4 --134.002,44.407,4 --133.997,44.412,4 --133.594,44.794,4 --133.210,45.160,4 --133.192,45.176,4 --133.184,45.184,4 --133.175,45.193,4 --133.155,45.212,4 --132.773,45.574,4 --132.402,45.966,4 --132.390,45.979,4 --132.384,45.984,4 --132.379,45.990,4 --132.370,46.001,4 --132.006,46.408,4 --131.719,46.776,4 --131.671,46.839,4 --131.654,46.860,4 --131.629,46.893,4 --131.545,47.001,4 --131.296,47.324,4 --131.125,47.544,4 --131.066,47.620,4 --131.037,47.659,4 --131.007,47.697,4 --130.586,48.242,4 --130.279,48.642,4 --129.859,49.191,4 --129.851,49.202,4 --129.843,49.212,4 --129.829,49.232,4 --129.573,49.566,4 --129.242,49.992,4 --129.227,50.011,4 --129.219,50.021,4 --129.208,50.035,4 --129.182,50.069,4 --128.862,50.479,4 --128.643,50.757,4 --128.603,50.808,4 --128.587,50.828,4 --128.569,50.851,4 --128.146,51.385,4 --127.830,51.785,4 --127.409,52.306,4 --127.381,52.350,4 --127.350,52.381,4 -,, --128.000,30.500,5 --127.600,30.100,5 --127.500,30.000,5 --127.400,29.900,5 --127.000,29.500,5 --126.888,29.388,5 --126.943,29.200,5 --126.979,28.400,5 --126.720,27.600,5 --126.438,27.143,5 --126.031,26.709,5 --126.006,26.674,5 --125.971,26.625,5 --125.887,26.529,5 --125.681,26.302,5 --125.443,26.087,5 --125.330,25.990,5 --125.301,25.951,5 --125.272,25.903,5 --125.192,25.783,5 --124.816,25.421,5 --124.697,25.200,5 --124.632,25.078,5 --124.403,24.521,5 --124.375,24.452,5 --124.370,24.436,5 --124.364,24.426,5 --124.357,24.410,5 --124.053,23.802,5 --123.958,23.600,5 --123.892,23.474,5 --123.620,22.925,5 --123.587,22.864,5 --123.580,22.847,5 --123.574,22.837,5 --123.566,22.820,5 --123.274,22.273,5 --123.054,21.973,5 --122.964,21.887,5 --122.956,21.831,5 --122.927,21.791,5 --122.773,21.454,5 --122.655,21.254,5 --122.643,21.200,5 --122.640,21.129,5 --122.627,20.716,5 --122.598,20.408,5 --122.592,20.372,5 --122.667,19.600,5 --122.542,18.866,5 --122.372,18.466,5 --122.080,18.000,5 --121.798,17.502,5 --121.872,17.428,5 --121.899,17.401,5 --121.905,17.395,5 --122.000,17.300,5 --122.300,17.000,5 --122.300,16.400,5 --122.300,16.000,5 --122.500,15.800,5 --122.700,15.600,5 --123.000,15.300,5 --123.300,15.000,5 --123.400,14.900,5 --123.409,14.891,5 --123.818,14.482,5 --123.900,14.400,5 --121.672,14.400,5 --121.638,14.400,5 --121.294,14.400,5 --120.899,14.400,5 --119.691,14.400,5 --119.674,14.600,5 --119.656,14.800,5 --119.585,15.600,5 --119.514,16.400,5 --119.444,17.200,5 --119.573,18.000,5 --119.869,18.474,5 --120.328,18.874,5 --120.594,19.600,5 --120.266,20.356,5 --119.958,20.756,5 --119.938,21.200,5 --119.980,21.659,5 --120.334,22.043,5 --120.346,22.075,5 --120.367,22.133,5 --120.485,22.470,5 --120.616,22.736,5 --120.626,22.800,5 --120.761,23.215,5 --120.974,23.617,5 --121.056,23.685,5 --121.071,23.726,5 --121.094,23.769,5 --121.246,24.160,5 --121.355,24.349,5 --121.362,24.400,5 --121.546,24.806,5 --121.748,25.181,5 --121.855,25.271,5 --121.881,25.319,5 --121.913,25.377,5 --122.179,26.014,5 --122.210,26.070,5 --122.330,26.530,5 --122.642,26.930,5 --123.042,27.398,5 --123.600,27.601,5 --124.249,27.804,5 --124.649,28.139,5 --125.001,28.539,5 --125.001,29.075,5 --124.678,29.475,5 --124.511,30.000,5 --124.633,30.684,5 --124.869,31.084,5 --125.188,31.600,5 --125.519,32.128,5 --125.772,32.528,5 --126.172,33.162,5 --126.485,33.562,5 --126.885,33.688,5 --127.430,33.688,5 --127.830,33.535,5 --128.400,33.318,5 --129.200,33.013,5 --129.678,32.830,5 --130.078,32.677,5 --130.800,32.402,5 --131.527,32.125,5 --131.927,31.972,5 --132.400,31.792,5 --133.200,31.487,5 --133.777,31.267,5 --134.177,31.116,5 --134.800,30.880,5 --135.622,30.570,5 --135.667,30.552,5 --135.750,30.520,5 --136.296,30.314,5 --136.368,30.287,5 --137.200,29.973,5 --137.896,29.711,5 --138.296,29.561,5 --138.800,29.372,5 --139.600,29.071,5 --140.161,28.861,5 --140.521,28.400,5 --140.558,27.600,5 --140.242,26.800,5 --140.043,26.286,5 --139.891,25.886,5 --139.630,25.200,5 --139.339,24.434,5 --139.187,24.034,5 --139.022,23.600,5 --138.718,22.800,5 --138.483,22.182,5 --138.331,21.782,5 --138.109,21.200,5 --137.779,20.463,5 --137.553,20.063,5 --137.153,19.670,5 --136.725,19.270,5 --136.325,18.897,5 --135.900,18.497,5 --135.500,18.098,5 --135.108,17.698,5 --134.708,17.249,5 --134.357,16.849,5 --133.957,16.416,5 --133.585,16.016,5 --133.162,15.571,5 --133.126,15.533,5 --133.005,15.405,5 --132.608,14.987,5 --132.494,14.868,5 --132.463,14.835,5 --132.050,14.400,5 --130.833,14.400,5 --128.900,14.400,5 --128.961,14.461,5 --129.000,14.500,5 --129.363,14.500,5 --129.432,14.564,5 --129.821,14.964,5 --130.221,15.386,5 --130.605,15.786,5 --131.005,16.205,5 --131.385,16.605,5 --131.785,17.026,5 --132.163,17.426,5 --132.563,17.857,5 --132.929,18.257,5 --133.329,18.697,5 --133.697,19.097,5 --134.097,19.509,5 --134.493,19.909,5 --134.893,20.293,5 --135.314,20.693,5 --135.714,21.128,5 --136.047,21.528,5 --136.260,22.000,5 --136.578,22.800,5 --136.765,23.292,5 --136.917,23.692,5 --137.186,24.400,5 --137.469,25.144,5 --137.621,25.544,5 --137.726,25.774,5 --137.579,25.922,5 --137.500,26.000,5 --137.500,26.200,5 --137.500,27.000,5 --137.100,27.400,5 --137.000,27.500,5 --136.900,27.600,5 --136.500,28.000,5 --136.486,28.014,5 --136.447,28.053,5 --136.354,28.146,5 --136.344,28.150,5 --135.600,28.431,5 --134.911,28.691,5 --134.511,28.842,5 --134.000,29.035,5 --133.200,29.337,5 --132.653,29.545,5 --132.253,29.696,5 --131.600,29.945,5 --130.746,30.269,5 --130.745,30.270,5 --130.056,30.532,5 --130.054,30.532,5 --130.053,30.533,5 --129.314,30.814,5 --129.314,30.814,5 --129.188,30.688,5 --129.000,30.500,5 --128.200,30.500,5 --128.000,30.500,5 -,, --222.282,11.954,6 --221.882,12.134,6 --221.322,12.534,6 --220.941,12.900,6 --231.648,12.900,6 --231.516,12.400,6 --231.270,11.954,6 --230.800,11.907,6 --230.000,11.908,6 --229.200,11.908,6 --228.400,11.908,6 --227.600,11.908,6 --226.800,11.908,6 --226.000,11.908,6 --225.200,11.908,6 --224.400,11.908,6 --223.600,11.908,6 --222.800,11.909,6 --222.282,11.954,6 -,, --116.314,80.100,7 --116.157,80.332,7 --116.148,80.400,7 --116.066,80.951,7 --116.046,81.200,7 --116.025,81.627,7 --115.993,82.000,7 --116.271,82.681,7 --116.282,82.741,7 --116.316,82.775,7 --116.742,83.333,7 --116.922,83.733,7 --117.045,84.400,7 --117.044,85.200,7 --117.044,86.000,7 --117.043,86.800,7 --117.043,87.600,7 --117.008,88.400,7 --116.887,88.894,7 --116.447,89.294,7 --116.073,89.921,7 --116.069,89.923,7 --116.068,89.928,7 --116.067,89.933,7 --116.033,90.533,7 --116.020,90.800,7 --116.076,91.347,7 --116.098,91.600,7 --116.324,92.104,7 --116.429,92.351,7 --116.503,92.416,7 --116.860,92.837,7 --117.154,93.178,7 --117.208,93.231,7 --117.285,93.404,7 --117.498,93.881,7 --117.500,93.886,7 --117.500,89.561,7 --117.500,89.438,7 --117.500,89.158,7 --117.500,88.427,7 --117.500,86.891,7 --117.500,83.455,7 --117.500,78.322,7 --117.498,78.332,7 --117.428,78.621,7 --117.399,78.753,7 --117.387,78.798,7 --117.030,79.408,7 --116.485,79.812,7 --116.441,79.845,7 --116.428,79.881,7 --116.314,80.100,7 -,, --172.303,18.800,8 --172.100,18.228,8 --171.776,17.828,8 --171.376,17.480,8 --170.800,17.264,8 --170.000,17.274,8 --169.462,17.490,8 --169.029,18.055,8 --169.022,18.065,8 --169.015,18.077,8 --168.805,18.414,8 --168.702,18.741,8 --168.699,18.752,8 --168.696,18.758,8 --168.694,18.768,8 --168.567,19.600,8 --168.684,20.254,8 --168.908,20.654,8 --169.308,21.077,8 --169.948,21.473,8 --169.956,21.484,8 --169.968,21.487,8 --169.987,21.494,8 --170.808,21.521,8 --170.841,21.521,8 --170.873,21.513,8 --171.238,21.298,8 --171.644,21.065,8 --171.676,21.038,8 --172.128,20.467,8 --172.144,20.436,8 --172.368,19.600,8 --172.303,18.800,8 -,, --179.259,18.600,9 --179.161,19.000,9 --179.164,19.651,9 --179.164,19.655,9 --179.164,19.661,9 --179.199,19.991,9 --179.366,20.328,9 --179.369,20.334,9 --179.370,20.338,9 --179.373,20.343,9 --179.807,20.988,9 --180.415,21.403,9 --180.417,21.405,9 --180.419,21.406,9 --180.423,21.409,9 --181.032,21.554,9 --181.200,21.552,9 --181.705,21.357,9 --181.940,21.266,9 --181.992,21.229,9 --182.459,20.873,9 --182.687,20.400,9 --182.856,19.600,9 --182.808,18.800,9 --182.579,18.105,9 --182.292,17.705,9 --181.892,17.410,9 --181.200,17.179,9 --180.348,17.354,9 --180.313,17.376,9 --180.255,17.405,9 --179.961,17.561,9 --179.730,17.850,9 --179.689,17.905,9 --179.667,17.937,9 --179.259,18.600,9 -,, --129.951,12.291,10 --130.442,12.759,10 --130.584,12.900,10 --119.833,12.900,10 --119.888,12.400,10 --119.970,11.968,10 --120.400,11.921,10 --121.200,11.908,10 --122.000,11.908,10 --122.800,11.908,10 --123.600,11.908,10 --124.400,11.908,10 --125.200,11.908,10 --126.000,11.908,10 --126.800,11.908,10 --127.600,11.908,10 --128.400,11.909,10 --129.199,11.933,10 --129.271,11.938,10 --129.409,11.959,10 --129.825,12.172,10 --129.951,12.291,10 -,, --167.751,152.193,11 --168.037,152.038,11 --168.226,151.755,11 --168.262,151.700,11 --168.281,151.666,11 --168.288,151.649,11 --168.401,151.400,11 --167.375,151.400,11 --161.890,151.400,11 --162.005,151.599,11 --162.038,151.666,11 --162.144,151.814,11 --162.584,152.174,11 --162.731,152.242,11 --162.798,152.245,11 --163.600,152.313,11 --164.145,152.101,11 --164.545,151.787,11 --165.200,151.689,11 --165.750,151.901,11 --166.150,152.137,11 --166.800,152.370,11 --167.659,152.247,11 --167.694,152.224,11 --167.751,152.193,11 -,, --232.445,86.800,12 --232.444,87.600,12 --232.466,88.400,12 --232.500,88.568,12 --232.500,88.477,12 --232.500,88.408,12 --232.500,88.378,12 --232.500,88.336,12 --232.500,88.303,12 --232.500,88.293,12 --232.500,88.262,12 --232.500,88.223,12 --232.500,88.191,12 --232.500,88.155,12 --232.500,88.125,12 --232.500,87.377,12 --232.500,83.955,12 --232.442,84.400,12 --232.442,85.200,12 --232.445,86.000,12 --232.445,86.800,12 -,, --117.500,99.507,13 --117.500,99.722,13 --117.482,99.600,13 --117.500,99.507,13 -,, --234.000,99.474,14 --234.000,99.944,14 --234.045,99.600,14 --234.000,99.474,14 -,, +X_mm,Z_mm,path_index +-234.491,84.302,0 +-234.713,83.590,0 +-234.719,83.585,0 +-234.735,83.566,0 +-234.747,83.538,0 +-234.782,83.474,0 +-235.053,83.060,0 +-235.204,82.853,0 +-235.288,82.766,0 +-235.311,82.730,0 +-235.313,82.677,0 +-235.500,82.000,0 +-235.481,81.200,0 +-235.388,80.400,0 +-235.264,79.951,0 +-234.785,79.589,0 +-234.731,79.557,0 +-234.629,79.475,0 +-234.219,78.960,0 +-234.164,78.856,0 +-234.147,78.785,0 +-234.000,78.212,0 +-234.000,78.592,0 +-234.000,80.405,0 +-234.000,85.768,0 +-234.000,93.927,0 +-234.221,93.361,0 +-234.544,92.961,0 +-234.944,92.522,0 +-235.304,92.122,0 +-235.441,91.600,0 +-235.508,90.800,0 +-235.445,90.008,0 +-235.442,89.950,0 +-235.392,89.837,0 +-235.021,89.293,0 +-234.859,89.142,0 +-234.653,88.715,0 +-234.497,88.400,0 +-234.493,88.250,0 +-234.482,87.600,0 +-234.482,87.418,0 +-234.488,86.800,0 +-234.488,86.628,0 +-234.487,86.000,0 +-234.487,85.827,0 +-234.487,85.200,0 +-234.487,85.025,0 +-234.486,84.400,0 +-234.491,84.302,0 +,, +-224.000,30.500,1 +-223.200,30.500,1 +-223.000,30.500,1 +-222.800,30.500,1 +-222.763,30.537,1 +-222.662,30.638,1 +-222.385,30.915,1 +-222.000,30.733,1 +-221.363,30.490,1 +-220.963,30.338,1 +-220.400,30.124,1 +-219.600,29.820,1 +-219.111,29.634,1 +-218.711,29.482,1 +-218.000,29.213,1 +-217.236,28.924,1 +-217.182,28.904,1 +-217.148,28.891,1 +-217.065,28.859,1 +-216.854,28.780,1 +-216.615,28.690,1 +-216.520,28.654,1 +-216.472,28.636,1 +-215.600,28.307,1 +-214.993,28.078,1 +-214.648,27.948,1 +-214.619,27.919,1 +-214.608,27.908,1 +-214.576,27.876,1 +-214.557,27.857,1 +-214.500,27.800,1 +-214.500,27.000,1 +-214.500,26.200,1 +-214.500,26.000,1 +-214.400,25.900,1 +-214.000,25.500,1 +-213.985,25.485,1 +-213.944,25.445,1 +-214.037,25.200,1 +-214.295,24.523,1 +-214.447,24.123,1 +-214.646,23.600,1 +-214.950,22.800,1 +-215.151,22.272,1 +-215.313,21.872,1 +-215.713,21.248,1 +-216.049,20.848,1 +-216.450,20.470,1 +-216.872,20.070,1 +-217.272,19.673,1 +-217.670,19.273,1 +-218.070,18.840,1 +-218.436,18.440,1 +-218.906,17.923,1 +-218.910,17.918,1 +-218.918,17.910,1 +-219.199,17.599,1 +-219.493,17.289,1 +-219.501,17.281,1 +-219.505,17.277,1 +-219.510,17.272,1 +-219.979,16.778,1 +-220.359,16.378,1 +-220.759,15.957,1 +-221.143,15.557,1 +-221.543,15.142,1 +-221.942,14.742,1 +-222.286,14.400,1 +-219.478,14.400,1 +-219.339,14.546,1 +-218.959,14.946,1 +-218.559,15.368,1 +-218.179,15.768,1 +-217.779,16.189,1 +-217.407,16.589,1 +-217.007,17.038,1 +-216.657,17.438,1 +-216.257,17.869,1 +-215.864,18.269,1 +-215.464,18.650,1 +-215.039,19.050,1 +-214.639,19.423,1 +-214.211,19.823,1 +-213.811,20.365,1 +-213.585,20.765,1 +-213.419,21.200,1 +-213.115,22.000,1 +-212.881,22.614,1 +-212.729,23.014,1 +-212.506,23.600,1 +-212.202,24.400,1 +-212.025,24.866,1 +-211.873,25.266,1 +-211.594,26.000,1 +-211.321,26.711,1 +-211.165,27.111,1 +-210.970,27.600,1 +-211.024,28.460,1 +-211.025,28.464,1 +-211.026,28.466,1 +-211.028,28.470,1 +-211.204,28.793,1 +-211.538,28.924,1 +-211.541,28.926,1 +-211.544,28.927,1 +-211.547,28.928,1 +-212.400,29.248,1 +-213.068,29.499,1 +-213.468,29.650,1 +-214.000,29.849,1 +-214.800,30.151,1 +-215.330,30.351,1 +-215.730,30.502,1 +-216.400,30.756,1 +-217.232,31.071,1 +-217.245,31.076,1 +-217.253,31.079,1 +-217.268,31.084,1 +-217.587,31.205,1 +-217.916,31.330,1 +-217.931,31.336,1 +-217.942,31.340,1 +-218.800,31.667,1 +-219.437,31.910,1 +-219.837,32.062,1 +-220.400,32.277,1 +-221.200,32.582,1 +-221.686,32.767,1 +-222.086,32.920,1 +-222.800,33.193,1 +-223.552,33.480,1 +-223.606,33.500,1 +-223.642,33.514,1 +-223.733,33.549,1 +-223.934,33.625,1 +-224.168,33.697,1 +-224.273,33.730,1 +-224.327,33.745,1 +-224.940,33.744,1 +-225.332,33.200,1 +-225.592,32.788,1 +-225.845,32.388,1 +-226.245,31.754,1 +-226.495,31.354,1 +-226.826,30.800,1 +-226.991,30.000,1 +-226.660,29.256,1 +-226.359,28.856,1 +-226.359,28.730,1 +-226.650,28.330,1 +-227.050,27.854,1 +-227.600,27.648,1 +-228.351,27.432,1 +-228.383,27.426,1 +-228.464,27.389,1 +-228.645,27.145,1 +-228.943,26.800,1 +-229.075,26.569,1 +-229.305,26.078,1 +-229.446,25.922,1 +-229.699,25.396,1 +-229.800,25.200,1 +-229.890,24.995,1 +-230.091,24.484,1 +-230.201,24.374,1 +-230.375,23.985,1 +-230.569,23.600,1 +-230.741,23.224,1 +-230.895,22.798,1 +-230.984,22.695,1 +-231.289,22.063,1 +-231.309,21.967,1 +-231.315,21.926,1 +-231.506,21.200,1 +-231.404,20.617,1 +-231.073,20.217,1 +-231.073,19.832,1 +-231.352,19.432,1 +-231.752,18.931,1 +-232.082,18.531,1 +-232.142,18.000,1 +-232.084,17.200,1 +-232.022,16.495,1 +-232.016,16.431,1 +-231.955,15.734,1 +-231.945,15.630,1 +-231.942,15.591,1 +-231.872,14.800,1 +-231.858,14.639,1 +-231.837,14.400,1 +-229.503,14.400,1 +-227.633,14.400,1 +-227.100,14.400,1 +-227.186,14.486,1 +-227.200,14.500,1 +-228.000,14.500,1 +-228.400,14.900,1 +-228.500,15.000,1 +-228.600,15.100,1 +-229.000,15.500,1 +-229.400,15.900,1 +-229.500,16.000,1 +-229.500,16.200,1 +-229.500,17.000,1 +-229.678,17.178,1 +-230.013,17.513,1 +-229.883,17.965,1 +-229.575,18.365,1 +-229.285,18.800,1 +-228.941,19.602,1 +-228.919,19.668,1 +-228.916,19.950,1 +-228.857,20.400,1 +-228.781,20.749,1 +-228.767,21.200,1 +-228.398,22.022,1 +-228.397,22.024,1 +-228.397,22.025,1 +-228.396,22.025,1 +-228.396,22.026,1 +-228.396,22.026,1 +-228.394,22.029,1 +-227.971,22.800,1 +-227.604,23.567,1 +-227.593,23.592,1 +-227.588,23.599,1 +-227.578,23.619,1 +-227.178,24.400,1 +-226.814,25.045,1 +-226.760,25.151,1 +-226.727,25.195,1 +-226.521,25.453,1 +-226.118,25.976,1 +-226.004,26.065,1 +-225.893,26.183,1 +-225.457,26.668,1 +-225.360,26.769,1 +-224.907,27.362,1 +-224.664,27.762,1 +-224.446,28.400,1 +-224.482,29.200,1 +-224.646,29.854,1 +-224.546,29.954,1 +-224.500,30.000,1 +-224.100,30.400,1 +-224.000,30.500,1 +,, +-123.620,108.400,2 +-123.918,109.089,2 +-123.984,109.213,2 +-124.390,109.962,2 +-124.407,109.992,2 +-124.412,110.001,2 +-124.458,110.079,2 +-124.857,110.765,2 +-124.932,110.854,2 +-125.356,111.552,2 +-125.629,111.952,2 +-125.911,112.400,2 +-126.282,113.029,2 +-126.504,113.429,2 +-126.831,114.000,2 +-127.128,114.552,2 +-127.322,114.952,2 +-127.664,115.600,2 +-127.942,116.122,2 +-128.163,116.522,2 +-128.579,117.176,2 +-128.601,117.214,2 +-128.617,117.234,2 +-128.652,117.276,2 +-128.848,117.549,2 +-129.077,117.856,2 +-129.111,117.907,2 +-129.134,117.939,2 +-129.535,118.496,2 +-129.827,118.896,2 +-130.227,119.437,2 +-130.532,119.837,2 +-130.953,120.363,2 +-130.988,120.407,2 +-131.018,120.442,2 +-131.096,120.527,2 +-131.270,120.733,2 +-131.448,120.973,2 +-131.518,121.076,2 +-131.557,121.131,2 +-131.945,121.693,2 +-132.193,122.093,2 +-132.632,122.761,2 +-132.702,122.854,2 +-133.152,123.429,2 +-133.249,123.544,2 +-133.317,123.624,2 +-133.990,124.370,2 +-134.009,124.390,2 +-134.027,124.408,2 +-134.792,125.160,2 +-134.817,125.184,2 +-134.844,125.210,2 +-135.582,125.914,2 +-135.636,125.965,2 +-135.695,126.021,2 +-136.373,126.671,2 +-136.453,126.748,2 +-136.539,126.832,2 +-137.164,127.437,2 +-137.265,127.536,2 +-137.371,127.640,2 +-137.959,128.217,2 +-138.072,128.329,2 +-138.185,128.444,2 +-138.771,129.068,2 +-138.848,129.153,2 +-138.904,129.220,2 +-139.450,129.952,2 +-139.460,129.969,2 +-139.465,129.980,2 +-139.876,130.765,2 +-139.894,130.816,2 +-140.195,131.535,2 +-140.232,131.609,2 +-140.256,131.637,2 +-140.632,132.051,2 +-141.200,132.121,2 +-142.000,132.283,2 +-142.737,132.613,2 +-143.137,132.837,2 +-143.600,133.115,2 +-144.183,133.477,2 +-144.583,133.751,2 +-145.162,134.151,2 +-145.562,134.426,2 +-146.000,134.732,2 +-146.511,135.106,2 +-146.911,135.494,2 +-147.287,135.894,2 +-147.638,136.407,2 +-147.674,136.471,2 +-147.783,136.633,2 +-148.178,136.991,2 +-148.328,137.070,2 +-148.399,137.071,2 +-149.200,137.214,2 +-150.000,137.204,2 +-150.800,137.401,2 +-151.218,137.591,2 +-151.618,137.772,2 +-152.400,138.088,2 +-152.974,138.316,2 +-153.374,138.505,2 +-154.000,138.796,2 +-154.580,139.091,2 +-154.980,139.349,2 +-155.455,139.749,2 +-155.855,140.169,2 +-156.277,140.569,2 +-156.677,140.891,2 +-157.131,140.894,2 +-157.133,140.894,2 +-157.144,140.892,2 +-157.158,140.887,2 +-157.558,140.783,2 +-157.989,140.674,2 +-158.011,140.669,2 +-158.029,140.664,2 +-158.800,140.568,2 +-159.549,140.654,2 +-159.566,140.656,2 +-159.613,140.668,2 +-160.458,140.891,2 +-160.486,140.899,2 +-161.200,141.167,2 +-161.770,141.473,2 +-162.170,141.767,2 +-162.617,142.167,2 +-162.928,142.500,2 +-163.000,142.500,2 +-163.076,142.576,2 +-163.124,142.624,2 +-163.285,142.785,2 +-163.311,142.803,2 +-163.560,142.979,2 +-163.596,143.009,2 +-163.613,143.051,2 +-163.656,143.090,2 +-164.142,143.218,2 +-164.400,143.190,2 +-164.891,143.031,2 +-165.129,142.981,2 +-165.200,142.981,2 +-166.000,142.844,2 +-166.869,143.020,2 +-166.936,143.031,2 +-167.532,143.103,2 +-167.600,143.104,2 +-168.400,142.936,2 +-169.200,142.786,2 +-170.000,142.748,2 +-170.800,142.787,2 +-171.600,142.873,2 +-172.400,142.953,2 +-173.143,143.027,2 +-173.200,143.033,2 +-173.511,143.064,2 +-174.000,143.113,2 +-174.247,143.136,2 +-174.800,143.189,2 +-175.234,143.214,2 +-175.600,143.236,2 +-176.061,143.226,2 +-176.400,143.218,2 +-176.769,143.187,2 +-177.200,143.151,2 +-177.429,143.129,2 +-178.000,143.074,2 +-178.045,143.069,2 +-178.278,143.047,2 +-178.660,143.010,2 +-178.732,143.003,2 +-179.600,142.920,2 +-180.400,142.835,2 +-181.200,142.778,2 +-182.000,142.782,2 +-182.800,142.860,2 +-183.661,143.061,2 +-183.708,143.057,2 +-184.340,143.034,2 +-184.388,143.028,2 +-185.200,142.837,2 +-186.000,142.913,2 +-186.753,143.077,2 +-186.770,143.077,2 +-186.818,143.084,2 +-187.349,143.174,2 +-187.410,143.184,2 +-187.501,143.199,2 +-187.572,143.128,2 +-187.675,143.025,2 +-187.892,142.808,2 +-188.129,142.571,2 +-188.198,142.502,2 +-188.200,142.500,2 +-188.209,142.500,2 +-188.659,142.500,2 +-188.675,142.500,2 +-188.676,142.498,2 +-188.785,142.385,2 +-189.258,141.962,2 +-189.302,141.937,2 +-189.353,141.893,2 +-189.664,141.637,2 +-189.934,141.472,2 +-189.988,141.439,2 +-190.005,141.430,2 +-190.026,141.422,2 +-190.827,141.020,2 +-190.863,141.010,2 +-190.931,140.988,2 +-191.399,140.829,2 +-191.600,140.771,2 +-191.800,140.734,2 +-192.234,140.673,2 +-192.403,140.646,2 +-192.459,140.636,2 +-193.095,140.663,2 +-193.133,140.665,2 +-193.246,140.689,2 +-194.027,140.861,2 +-194.090,140.881,2 +-194.578,140.891,2 +-194.978,140.694,2 +-195.471,140.294,2 +-195.871,139.879,2 +-196.470,139.458,2 +-196.526,139.420,2 +-196.610,139.351,2 +-196.820,139.211,2 +-197.021,139.100,2 +-197.123,139.057,2 +-197.159,139.037,2 +-197.214,139.011,2 +-198.000,138.607,2 +-198.436,138.417,2 +-198.836,138.228,2 +-199.600,137.868,2 +-200.086,137.640,2 +-200.486,137.454,2 +-201.200,137.205,2 +-202.000,137.088,2 +-202.800,137.117,2 +-203.371,136.979,2 +-203.771,136.539,2 +-204.098,136.139,2 +-204.498,135.662,2 +-204.867,135.262,2 +-205.267,134.920,2 +-205.773,134.520,2 +-206.173,134.254,2 +-206.843,133.827,2 +-206.873,133.807,2 +-206.898,133.788,2 +-206.924,133.771,2 +-207.194,133.596,2 +-207.469,133.401,2 +-207.496,133.382,2 +-207.524,133.365,2 +-208.177,132.912,2 +-208.577,132.671,2 +-209.200,132.394,2 +-210.000,132.194,2 +-210.707,132.072,2 +-210.725,132.064,2 +-210.758,132.039,2 +-210.812,132.005,2 +-211.065,131.878,2 +-211.230,131.627,2 +-211.276,131.570,2 +-211.301,131.541,2 +-211.308,131.516,2 +-211.598,130.800,2 +-211.879,130.200,2 +-212.144,129.800,2 +-212.572,129.278,2 +-212.598,129.244,2 +-212.627,129.213,2 +-212.692,129.142,2 +-212.901,128.907,2 +-213.139,128.666,2 +-213.257,128.546,2 +-213.301,128.500,2 +-213.346,128.455,2 +-213.464,128.337,2 +-213.702,128.100,2 +-213.938,127.869,2 +-214.059,127.751,2 +-214.106,127.705,2 +-214.154,127.658,2 +-214.280,127.534,2 +-214.511,127.308,2 +-214.733,127.090,2 +-214.863,126.963,2 +-214.914,126.913,2 +-214.966,126.863,2 +-215.102,126.729,2 +-215.319,126.517,2 +-215.530,126.312,2 +-215.615,126.228,2 +-215.652,126.193,2 +-215.683,126.162,2 +-216.131,125.726,2 +-216.531,125.341,2 +-216.948,124.941,2 +-217.348,124.558,2 +-217.762,124.158,2 +-218.187,123.690,2 +-218.215,123.662,2 +-218.234,123.630,2 +-218.301,123.557,2 +-218.493,123.324,2 +-218.686,123.022,2 +-218.740,122.928,2 +-218.760,122.864,2 +-219.133,122.305,2 +-219.421,121.905,2 +-219.821,121.421,2 +-220.205,121.021,2 +-220.605,120.494,2 +-220.849,120.094,2 +-221.161,119.600,2 +-221.512,119.106,2 +-221.842,118.706,2 +-222.242,118.211,2 +-222.555,117.811,2 +-222.997,117.130,2 +-222.998,117.128,2 +-223.002,117.122,2 +-223.394,116.475,2 +-223.397,116.469,2 +-223.842,115.699,2 +-224.039,115.299,2 +-224.302,114.800,2 +-224.663,114.127,2 +-224.858,113.727,2 +-225.136,113.200,2 +-225.479,112.590,2 +-225.701,112.190,2 +-226.127,111.546,2 +-226.133,111.533,2 +-226.143,111.522,2 +-226.392,111.171,2 +-226.608,110.842,2 +-226.616,110.827,2 +-226.619,110.821,2 +-226.623,110.814,2 +-226.712,110.667,2 +-227.053,110.091,2 +-227.075,110.073,2 +-227.091,110.043,2 +-227.123,109.987,2 +-227.269,109.723,2 +-227.450,109.384,2 +-227.490,109.307,2 +-227.519,109.256,2 +-227.880,108.492,2 +-227.887,108.481,2 +-227.893,108.462,2 +-227.904,108.435,2 +-228.033,108.092,2 +-228.174,107.684,2 +-228.188,107.643,2 +-228.200,107.609,2 +-228.475,106.800,2 +-228.705,106.121,2 +-228.711,106.103,2 +-228.720,106.078,2 +-228.730,106.047,2 +-228.841,105.720,2 +-228.978,105.311,2 +-228.995,105.258,2 +-229.009,105.216,2 +-229.281,104.400,2 +-229.507,103.724,2 +-229.513,103.706,2 +-229.522,103.680,2 +-229.532,103.649,2 +-229.641,103.326,2 +-229.791,102.917,2 +-229.811,102.864,2 +-229.826,102.823,2 +-230.200,102.022,2 +-230.204,102.013,2 +-230.209,102.005,2 +-230.219,101.988,2 +-230.424,101.646,2 +-230.792,101.218,2 +-230.801,101.207,2 +-230.806,101.201,2 +-230.810,101.197,2 +-230.817,101.189,2 +-231.193,100.788,2 +-231.476,100.435,2 +-231.481,100.428,2 +-231.484,100.425,2 +-231.486,100.421,2 +-231.486,100.419,2 +-231.490,100.406,2 +-231.721,99.600,2 +-231.527,98.800,2 +-231.397,98.000,2 +-231.441,97.200,2 +-231.545,96.400,2 +-231.670,95.600,2 +-231.828,94.800,2 +-231.955,94.091,2 +-232.016,93.691,2 +-232.167,93.200,2 +-232.500,92.522,2 +-232.500,100.445,2 +-232.500,101.605,2 +-232.500,101.873,2 +-232.500,101.909,2 +-232.500,102.482,2 +-232.406,102.590,2 +-232.330,102.689,2 +-232.301,102.708,2 +-232.291,102.734,2 +-232.250,102.792,2 +-231.991,103.198,2 +-231.848,103.603,2 +-231.846,103.613,2 +-231.842,103.621,2 +-231.583,104.400,2 +-231.334,105.151,2 +-231.332,105.155,2 +-231.331,105.159,2 +-231.329,105.165,2 +-231.192,105.576,2 +-231.049,106.006,2 +-231.046,106.014,2 +-231.044,106.022,2 +-230.782,106.800,2 +-230.530,107.542,2 +-230.527,107.548,2 +-230.525,107.556,2 +-230.521,107.566,2 +-230.387,107.962,2 +-230.243,108.387,2 +-230.238,108.401,2 +-230.233,108.414,2 +-229.962,109.200,2 +-229.711,109.815,2 +-229.498,110.215,2 +-229.140,110.863,2 +-229.108,110.921,2 +-229.059,111.010,2 +-228.877,111.339,2 +-228.741,111.586,2 +-228.707,111.649,2 +-228.688,111.684,2 +-228.661,111.693,2 +-228.258,112.321,2 +-227.948,112.721,2 +-227.705,113.200,2 +-227.357,113.849,2 +-227.117,114.249,2 +-226.838,114.800,2 +-226.521,115.394,2 +-226.290,115.794,2 +-225.974,116.400,2 +-225.684,116.942,2 +-225.468,117.342,2 +-225.086,118.000,2 +-224.819,118.427,2 +-224.534,118.827,2 +-224.134,119.366,2 +-223.823,119.766,2 +-223.423,120.268,2 +-223.098,120.668,2 +-222.663,121.216,2 +-222.636,121.252,2 +-222.616,121.278,2 +-222.579,121.343,2 +-222.391,121.588,2 +-222.210,121.841,2 +-222.162,121.891,2 +-222.134,121.928,2 +-221.706,122.534,2 +-221.405,122.934,2 +-220.989,123.560,2 +-220.971,123.586,2 +-220.953,123.606,2 +-220.919,123.663,2 +-220.745,123.932,2 +-220.420,124.376,2 +-220.411,124.388,2 +-220.407,124.392,2 +-220.405,124.396,2 +-220.401,124.401,2 +-220.058,124.870,2 +-219.809,125.159,2 +-219.722,125.261,2 +-219.692,125.297,2 +-219.651,125.341,2 +-219.535,125.471,2 +-219.314,125.719,2 +-219.090,125.934,2 +-218.960,126.059,2 +-218.913,126.109,2 +-218.865,126.154,2 +-218.749,126.262,2 +-218.502,126.494,2 +-218.232,126.749,2 +-218.127,126.849,2 +-218.087,126.886,2 +-218.049,126.922,2 +-217.956,127.010,2 +-217.679,127.275,2 +-217.386,127.558,2 +-217.302,127.640,2 +-217.270,127.670,2 +-217.239,127.700,2 +-217.161,127.775,2 +-216.865,128.063,2 +-216.557,128.363,2 +-216.486,128.433,2 +-216.459,128.459,2 +-216.433,128.485,2 +-216.366,128.550,2 +-216.055,128.854,2 +-215.734,129.169,2 +-215.673,129.228,2 +-215.650,129.250,2 +-215.628,129.272,2 +-215.570,129.328,2 +-215.247,129.646,2 +-214.912,129.974,2 +-214.861,130.023,2 +-214.842,130.042,2 +-214.823,130.060,2 +-214.775,130.108,2 +-214.439,130.438,2 +-214.166,130.758,2 +-214.099,130.836,2 +-214.071,130.866,2 +-214.039,130.905,2 +-213.943,131.032,2 +-213.704,131.329,2 +-213.561,131.553,2 +-213.511,131.626,2 +-213.480,131.664,2 +-213.480,131.702,2 +-213.448,132.053,2 +-213.410,132.400,2 +-213.396,132.470,2 +-213.154,133.064,2 +-213.136,133.109,2 +-213.084,133.148,2 +-212.958,133.266,2 +-212.695,133.516,2 +-212.447,133.713,2 +-212.385,133.763,2 +-212.353,133.788,2 +-212.329,133.803,2 +-211.569,134.205,2 +-211.515,134.219,2 +-210.857,134.173,2 +-210.806,134.183,2 +-209.981,134.179,2 +-209.974,134.181,2 +-209.969,134.182,2 +-209.590,134.394,2 +-209.219,134.627,2 +-209.216,134.630,2 +-209.212,134.635,2 +-209.206,134.638,2 +-208.587,135.049,2 +-208.187,135.324,2 +-207.570,135.737,2 +-207.559,135.741,2 +-207.549,135.745,2 +-207.175,135.988,2 +-206.820,136.215,2 +-206.815,136.221,2 +-206.808,136.229,2 +-206.799,136.234,2 +-206.227,136.643,2 +-205.827,137.059,2 +-205.513,137.459,2 +-205.385,138.000,2 +-205.072,138.601,2 +-204.426,139.004,2 +-204.417,139.013,2 +-204.408,139.017,2 +-204.391,139.027,2 +-204.039,139.221,2 +-203.657,139.409,2 +-203.639,139.418,2 +-203.622,139.425,2 +-202.963,139.412,2 +-202.563,139.059,2 +-201.975,139.051,2 +-201.938,139.056,2 +-201.898,139.062,2 +-201.544,139.173,2 +-201.228,139.318,2 +-201.208,139.334,2 +-201.191,139.351,2 +-201.160,139.365,2 +-200.353,139.757,2 +-200.302,139.768,2 +-200.230,139.788,2 +-199.882,139.947,2 +-199.608,140.070,2 +-199.577,140.097,2 +-199.557,140.118,2 +-199.513,140.138,2 +-198.800,140.432,2 +-198.194,140.706,2 +-197.794,140.899,2 +-197.237,141.312,2 +-197.203,141.332,2 +-197.183,141.355,2 +-197.142,141.407,2 +-196.858,141.707,2 +-196.761,142.001,2 +-196.745,142.038,2 +-196.730,142.057,2 +-196.712,142.081,2 +-196.340,142.606,2 +-195.562,142.961,2 +-195.515,142.977,2 +-195.415,143.010,2 +-194.977,143.156,2 +-194.800,143.213,2 +-194.173,143.134,2 +-194.029,143.143,2 +-193.934,143.085,2 +-193.200,142.809,2 +-192.400,142.806,2 +-191.594,143.015,2 +-191.560,143.031,2 +-191.503,143.046,2 +-191.145,143.158,2 +-190.824,143.301,2 +-190.790,143.321,2 +-190.771,143.336,2 +-190.757,143.354,2 +-190.176,143.748,2 +-189.799,144.403,2 +-189.798,144.404,2 +-189.798,144.408,2 +-189.532,145.200,2 +-189.517,145.637,2 +-189.509,146.000,2 +-189.508,146.456,2 +-189.506,146.800,2 +-189.562,147.220,2 +-189.576,147.600,2 +-189.650,147.801,2 +-189.774,148.318,2 +-189.782,148.369,2 +-189.783,148.388,2 +-189.978,149.200,2 +-190.045,149.900,2 +-183.390,149.900,2 +-182.890,149.900,2 +-182.881,149.900,2 +-182.814,149.900,2 +-182.993,149.198,2 +-182.995,149.129,2 +-183.046,148.958,2 +-183.342,148.479,2 +-183.469,148.305,2 +-183.623,148.119,2 +-184.145,147.821,2 +-184.400,147.657,2 +-185.002,147.783,2 +-185.200,147.818,2 +-185.636,147.848,2 +-186.024,148.044,2 +-186.662,147.618,2 +-186.826,147.147,2 +-186.893,146.800,2 +-186.892,146.660,2 +-186.897,146.000,2 +-186.884,145.924,2 +-186.800,145.805,2 +-186.683,145.553,2 +-186.182,145.189,2 +-186.129,145.166,2 +-186.116,145.163,2 +-186.107,145.156,2 +-186.104,145.152,2 +-185.246,145.119,2 +-185.200,145.120,2 +-184.409,145.197,2 +-184.404,145.198,2 +-184.404,145.198,2 +-184.404,145.198,2 +-184.403,145.198,2 +-183.747,145.192,2 +-183.668,145.203,2 +-182.786,144.936,2 +-182.773,144.938,2 +-182.699,144.933,2 +-182.000,144.865,2 +-181.839,144.881,2 +-181.394,144.924,2 +-181.197,144.943,2 +-181.151,144.947,2 +-180.400,145.019,2 +-179.600,145.096,2 +-178.800,145.173,2 +-178.000,145.250,2 +-177.200,145.327,2 +-176.346,145.409,2 +-176.277,145.411,2 +-175.630,145.427,2 +-175.561,145.422,2 +-174.800,145.369,2 +-174.000,145.290,2 +-173.200,145.210,2 +-172.400,145.130,2 +-171.600,145.051,2 +-170.851,144.976,2 +-170.793,144.970,2 +-170.480,144.937,2 +-170.000,144.886,2 +-169.785,144.879,2 +-169.200,144.839,2 +-169.071,144.851,2 +-168.594,144.948,2 +-168.492,144.968,2 +-168.463,144.966,2 +-167.609,145.252,2 +-167.540,145.247,2 +-166.787,145.197,2 +-166.763,145.200,2 +-166.760,145.200,2 +-166.759,145.197,2 +-166.757,145.196,2 +-166.730,145.190,2 +-166.056,145.037,2 +-166.000,145.024,2 +-165.216,145.184,2 +-165.202,145.182,2 +-165.191,145.193,2 +-165.158,145.209,2 +-165.103,145.286,2 +-164.506,146.000,2 +-164.505,146.526,2 +-164.501,146.782,2 +-164.648,147.331,2 +-164.779,147.618,2 +-164.949,147.842,2 +-165.182,147.984,2 +-165.556,148.014,2 +-166.000,147.973,2 +-166.520,147.742,2 +-166.776,147.637,2 +-167.295,147.776,2 +-167.576,147.840,2 +-167.778,148.028,2 +-168.112,148.347,2 +-168.176,148.391,2 +-168.204,148.409,2 +-168.222,148.438,2 +-168.595,149.200,2 +-168.726,149.900,2 +-161.563,149.900,2 +-161.590,149.457,2 +-161.644,149.057,2 +-161.791,148.400,2 +-161.997,147.670,2 +-162.002,147.572,2 +-162.041,147.117,2 +-162.085,146.800,2 +-162.084,146.713,2 +-162.098,146.000,2 +-162.094,145.934,2 +-162.088,145.653,2 +-162.089,145.218,2 +-162.097,145.133,2 +-161.814,144.382,2 +-161.815,144.335,2 +-161.795,144.270,2 +-161.258,143.636,2 +-161.225,143.608,2 +-161.200,143.580,2 +-161.110,143.535,2 +-160.400,143.129,2 +-159.965,143.013,2 +-159.675,142.935,2 +-159.564,142.905,2 +-158.800,142.701,2 +-157.982,142.932,2 +-157.974,142.932,2 +-157.967,142.937,2 +-157.954,142.947,2 +-157.445,143.205,2 +-157.200,143.249,2 +-156.476,143.124,2 +-156.365,143.110,2 +-156.321,143.095,2 +-155.600,142.831,2 +-155.056,142.540,2 +-154.759,141.994,2 +-154.724,141.937,2 +-154.658,141.762,2 +-154.183,141.208,2 +-154.051,141.136,2 +-154.005,141.082,2 +-153.354,140.725,2 +-153.205,140.640,2 +-153.188,140.632,2 +-152.403,140.281,2 +-152.352,140.259,2 +-152.226,140.202,2 +-151.610,139.933,2 +-151.526,139.896,2 +-150.800,139.570,2 +-150.068,139.288,2 +-150.003,139.229,2 +-149.870,139.229,2 +-149.225,139.216,2 +-149.180,139.246,2 +-149.154,139.262,2 +-149.077,139.262,2 +-148.400,139.428,2 +-147.665,139.328,2 +-147.577,139.278,2 +-146.985,138.945,2 +-146.857,138.873,2 +-146.802,138.842,2 +-146.274,138.510,2 +-146.130,138.000,2 +-145.807,137.193,2 +-145.742,137.109,2 +-145.281,136.654,2 +-145.198,136.593,2 +-144.583,136.143,2 +-144.183,135.870,2 +-143.585,135.474,2 +-143.573,135.466,2 +-143.550,135.451,2 +-142.828,134.982,2 +-142.809,134.970,2 +-142.171,134.548,2 +-141.771,134.305,2 +-141.200,134.053,2 +-140.348,134.156,2 +-140.330,134.151,2 +-140.051,134.114,2 +-139.629,134.081,2 +-139.618,134.081,2 +-139.569,134.052,2 +-139.469,133.980,2 +-138.850,133.518,2 +-138.741,133.432,2 +-138.224,132.982,2 +-138.126,132.400,2 +-138.001,131.600,2 +-137.699,131.073,2 +-137.332,130.673,2 +-136.932,130.270,2 +-136.455,129.803,2 +-136.330,129.679,2 +-135.907,129.270,2 +-135.717,129.086,2 +-135.541,128.916,2 +-135.061,128.457,2 +-134.899,128.303,2 +-134.752,128.162,2 +-134.209,127.646,2 +-134.079,127.522,2 +-133.961,127.410,2 +-133.357,126.834,2 +-133.259,126.742,2 +-133.171,126.658,2 +-132.535,126.031,2 +-132.451,125.947,2 +-132.364,125.855,2 +-131.811,125.242,2 +-131.760,125.183,2 +-131.320,124.653,2 +-131.010,124.253,2 +-130.610,123.657,2 +-130.370,123.257,2 +-130.045,122.800,2 +-129.675,122.299,2 +-129.357,121.899,2 +-128.957,121.394,2 +-128.640,120.994,2 +-128.240,120.470,2 +-127.947,120.070,2 +-127.603,119.600,2 +-127.256,119.130,2 +-126.937,118.730,2 +-126.537,118.172,2 +-126.293,117.772,2 +-125.986,117.200,2 +-125.693,116.629,2 +-125.456,116.229,2 +-125.121,115.600,2 +-124.865,115.085,2 +-124.622,114.685,2 +-124.254,114.000,2 +-124.033,113.540,2 +-123.784,113.140,2 +-123.369,112.430,2 +-123.257,112.333,2 +-122.804,111.616,2 +-122.797,111.604,2 +-122.795,111.600,2 +-122.775,111.564,2 +-122.362,110.815,2 +-122.299,110.703,2 +-121.916,109.998,2 +-121.893,109.956,2 +-121.843,109.844,2 +-121.564,109.200,2 +-121.399,108.705,2 +-121.322,108.469,2 +-121.297,108.391,2 +-121.150,107.931,2 +-121.050,107.617,2 +-121.033,107.564,2 +-120.985,107.415,2 +-120.786,106.800,2 +-120.603,106.244,2 +-120.539,106.053,2 +-120.518,105.988,2 +-120.375,105.561,2 +-120.259,105.216,2 +-120.241,105.162,2 +-120.192,105.016,2 +-119.983,104.400,2 +-119.798,103.854,2 +-119.731,103.657,2 +-119.708,103.596,2 +-119.353,102.833,2 +-119.296,102.744,2 +-119.021,102.453,2 +-119.000,102.431,2 +-119.000,101.592,2 +-119.000,99.909,2 +-119.000,97.392,2 +-119.000,96.524,2 +-119.000,95.590,2 +-119.000,92.341,2 +-119.000,92.324,2 +-119.000,92.315,2 +-119.001,92.316,2 +-119.256,92.716,2 +-119.431,93.200,2 +-119.601,94.000,2 +-119.698,94.800,2 +-119.829,95.600,2 +-119.957,96.300,2 +-120.013,96.700,2 +-120.135,97.200,2 +-120.317,98.000,2 +-120.190,98.849,2 +-120.185,98.889,2 +-120.167,98.934,2 +-120.027,99.292,2 +-119.915,99.587,2 +-119.900,99.626,2 +-119.896,99.649,2 +-119.896,99.659,2 +-119.874,100.214,2 +-120.146,100.614,2 +-120.546,101.033,2 +-120.956,101.433,2 +-121.348,102.002,2 +-121.354,102.011,2 +-121.365,102.032,2 +-121.741,102.822,2 +-121.747,102.837,2 +-122.021,103.600,2 +-122.273,104.346,2 +-122.279,104.363,2 +-122.555,105.190,2 +-122.564,105.217,2 +-122.568,105.230,2 +-122.821,106.000,2 +-123.066,106.760,2 +-123.067,106.764,2 +-123.343,107.625,2 +-123.345,107.631,2 +-123.346,107.633,2 +-123.620,108.400,2 +,, +-183.081,151.436,3 +-183.349,151.836,3 +-183.749,152.172,3 +-184.400,152.362,3 +-185.150,152.153,3 +-185.195,152.148,3 +-185.228,152.130,3 +-185.306,152.079,3 +-185.525,151.945,3 +-185.942,151.632,3 +-185.976,151.607,3 +-185.986,151.600,3 +-185.993,151.593,3 +-186.003,151.585,3 +-186.040,151.585,3 +-186.789,151.589,3 +-186.792,151.589,3 +-186.813,151.605,3 +-186.813,151.605,3 +-186.862,151.645,3 +-187.476,152.093,3 +-187.600,152.168,3 +-188.400,152.371,3 +-189.037,152.155,3 +-189.437,151.811,3 +-189.704,151.411,3 +-189.708,151.400,3 +-187.245,151.400,3 +-187.224,151.400,3 +-186.875,151.400,3 +-183.753,151.400,3 +-183.470,151.400,3 +-183.068,151.400,3 +-183.081,151.436,3 +,, +-127.350,52.381,4 +-127.303,52.451,4 +-127.113,52.691,4 +-126.845,53.030,4 +-126.771,53.114,4 +-126.750,53.146,4 +-126.727,53.166,4 +-126.695,53.221,4 +-126.400,53.607,4 +-126.176,53.984,4 +-126.174,53.986,4 +-126.173,53.988,4 +-125.760,54.731,4 +-125.751,54.754,4 +-125.735,54.774,4 +-125.723,54.810,4 +-125.557,55.120,4 +-125.363,55.485,4 +-125.333,55.529,4 +-125.318,55.564,4 +-124.929,56.313,4 +-124.919,56.343,4 +-124.899,56.371,4 +-124.888,56.420,4 +-124.761,56.694,4 +-124.603,57.037,4 +-124.563,57.101,4 +-124.547,57.146,4 +-124.143,57.925,4 +-124.129,57.973,4 +-124.095,58.007,4 +-124.066,58.095,4 +-123.947,58.311,4 +-123.810,58.575,4 +-123.742,58.667,4 +-123.716,58.732,4 +-123.346,59.472,4 +-123.123,59.872,4 +-122.851,60.400,4 +-122.528,61.084,4 +-122.340,61.484,4 +-122.069,62.000,4 +-121.742,62.800,4 +-121.613,63.235,4 +-121.451,63.635,4 +-121.171,64.400,4 +-120.927,65.200,4 +-120.806,65.617,4 +-120.644,66.017,4 +-120.360,66.800,4 +-120.118,67.633,4 +-120.107,67.678,4 +-120.085,67.707,4 +-120.079,67.729,4 +-120.000,68.000,4 +-119.861,68.271,4 +-119.850,68.293,4 +-119.835,68.327,4 +-119.624,68.770,4 +-119.428,69.224,4 +-119.413,69.268,4 +-119.392,69.325,4 +-119.244,69.726,4 +-119.134,70.042,4 +-119.122,70.076,4 +-119.113,70.103,4 +-119.106,70.121,4 +-119.005,70.410,4 +-119.000,70.423,4 +-119.000,71.570,4 +-119.000,80.132,4 +-119.080,80.040,4 +-119.172,79.934,4 +-119.341,79.606,4 +-119.352,79.584,4 +-119.358,79.573,4 +-119.361,79.560,4 +-119.622,78.800,4 +-119.783,77.947,4 +-119.794,77.875,4 +-119.838,77.601,4 +-119.889,77.279,4 +-119.902,77.200,4 +-119.975,76.744,4 +-120.031,76.400,4 +-120.061,76.215,4 +-120.135,75.752,4 +-120.156,75.623,4 +-120.163,75.582,4 +-120.289,74.800,4 +-120.418,74.000,4 +-120.547,73.200,4 +-120.681,72.466,4 +-120.684,72.456,4 +-120.687,72.443,4 +-120.790,72.004,4 +-120.919,71.561,4 +-120.922,71.553,4 +-120.924,71.547,4 +-120.925,71.543,4 +-121.176,70.800,4 +-121.463,70.036,4 +-121.465,70.028,4 +-121.469,70.020,4 +-121.473,70.005,4 +-121.612,69.660,4 +-121.789,69.269,4 +-121.797,69.254,4 +-121.803,69.237,4 +-122.221,68.365,4 +-122.226,68.342,4 +-122.241,68.283,4 +-122.479,67.631,4 +-122.497,67.599,4 +-122.744,66.800,4 +-123.053,65.961,4 +-123.053,65.959,4 +-123.054,65.956,4 +-123.306,65.208,4 +-123.307,65.206,4 +-123.558,64.400,4 +-123.868,63.559,4 +-123.875,63.540,4 +-124.113,62.872,4 +-124.120,62.850,4 +-124.121,62.837,4 +-124.433,62.000,4 +-124.710,61.332,4 +-124.723,61.312,4 +-124.743,61.272,4 +-124.770,61.215,4 +-124.883,60.965,4 +-125.201,60.400,4 +-125.204,60.394,4 +-125.205,60.392,4 +-125.208,60.388,4 +-125.218,60.371,4 +-125.521,59.860,4 +-125.646,59.629,4 +-125.679,59.561,4 +-125.705,59.521,4 +-125.719,59.494,4 +-126.115,58.751,4 +-126.138,58.707,4 +-126.169,58.648,4 +-126.352,58.299,4 +-126.497,58.015,4 +-126.520,57.969,4 +-126.532,57.944,4 +-126.541,57.924,4 +-126.939,57.169,4 +-126.953,57.142,4 +-126.970,57.110,4 +-127.167,56.737,4 +-127.342,56.409,4 +-127.355,56.381,4 +-127.364,56.367,4 +-127.370,56.354,4 +-127.782,55.591,4 +-127.783,55.590,4 +-127.784,55.588,4 +-127.999,55.204,4 +-128.258,54.817,4 +-128.259,54.815,4 +-128.259,54.814,4 +-128.260,54.813,4 +-128.673,54.236,4 +-128.987,53.836,4 +-129.409,53.302,4 +-129.439,53.264,4 +-129.471,53.224,4 +-129.534,53.143,4 +-129.703,52.930,4 +-129.940,52.629,4 +-130.035,52.508,4 +-130.065,52.471,4 +-130.084,52.446,4 +-130.142,52.372,4 +-130.417,52.023,4 +-130.735,51.613,4 +-130.761,51.578,4 +-130.770,51.567,4 +-130.784,51.549,4 +-130.830,51.491,4 +-131.128,51.106,4 +-131.327,50.847,4 +-131.369,50.790,4 +-131.391,50.762,4 +-131.413,50.733,4 +-131.835,50.184,4 +-132.142,49.784,4 +-132.563,49.238,4 +-132.579,49.218,4 +-132.591,49.202,4 +-132.623,49.160,4 +-132.851,48.866,4 +-133.193,48.424,4 +-133.202,48.412,4 +-133.206,48.407,4 +-133.209,48.404,4 +-133.214,48.397,4 +-133.561,47.954,4 +-133.842,47.634,4 +-133.910,47.556,4 +-133.932,47.530,4 +-133.963,47.498,4 +-134.049,47.404,4 +-134.314,47.114,4 +-134.583,46.856,4 +-134.685,46.758,4 +-134.721,46.723,4 +-134.757,46.689,4 +-134.847,46.602,4 +-135.130,46.334,4 +-135.438,46.041,4 +-135.514,45.969,4 +-135.542,45.943,4 +-135.564,45.922,4 +-135.635,45.854,4 +-135.951,45.554,4 +-136.296,45.227,4 +-136.340,45.185,4 +-136.362,45.163,4 +-136.382,45.145,4 +-136.423,45.106,4 +-136.772,44.774,4 +-137.151,44.413,4 +-137.172,44.392,4 +-137.182,44.383,4 +-137.192,44.373,4 +-137.211,44.355,4 +-137.590,43.992,4 +-137.972,43.609,4 +-137.984,43.597,4 +-137.990,43.591,4 +-137.996,43.585,4 +-138.008,43.572,4 +-138.385,43.185,4 +-138.684,42.829,4 +-138.729,42.774,4 +-138.755,42.746,4 +-138.785,42.707,4 +-138.858,42.615,4 +-139.120,42.285,4 +-139.268,42.049,4 +-139.313,41.977,4 +-139.334,41.947,4 +-139.347,41.920,4 +-139.732,41.134,4 +-139.766,41.065,4 +-139.812,40.963,4 +-139.937,40.682,4 +-140.186,40.474,4 +-140.279,40.393,4 +-140.333,40.354,4 +-141.200,40.024,4 +-141.619,40.006,4 +-142.019,39.864,4 +-142.800,39.535,4 +-143.296,39.271,4 +-143.696,38.996,4 +-144.297,38.596,4 +-144.697,38.329,4 +-145.200,38.003,4 +-145.706,37.674,4 +-146.106,37.368,4 +-146.576,36.968,4 +-146.976,36.558,4 +-147.320,36.158,4 +-147.735,35.554,4 +-147.742,35.544,4 +-147.750,35.532,4 +-148.010,35.186,4 +-148.354,35.040,4 +-148.367,35.035,4 +-148.376,35.032,4 +-149.200,34.904,4 +-150.000,34.884,4 +-150.800,34.734,4 +-151.427,34.505,4 +-151.827,34.320,4 +-152.400,34.058,4 +-153.098,33.738,4 +-153.498,33.552,4 +-154.000,33.318,4 +-154.684,32.966,4 +-155.084,32.724,4 +-155.548,32.324,4 +-155.948,31.940,4 +-156.396,31.505,4 +-156.411,31.487,4 +-156.430,31.467,4 +-156.468,31.431,4 +-156.890,31.157,4 +-157.200,31.094,4 +-157.366,31.109,4 +-158.000,31.175,4 +-158.550,31.257,4 +-158.800,31.293,4 +-159.368,31.265,4 +-159.600,31.251,4 +-159.923,31.198,4 +-160.460,31.099,4 +-160.468,31.098,4 +-160.472,31.097,4 +-161.200,30.948,4 +-162.000,30.782,4 +-162.845,30.604,4 +-162.903,30.589,4 +-163.039,30.555,4 +-163.449,30.454,4 +-163.600,30.412,4 +-163.766,30.361,4 +-164.199,30.179,4 +-164.299,30.141,4 +-164.349,30.121,4 +-164.974,29.745,4 +-165.374,29.397,4 +-165.764,28.997,4 +-166.074,28.500,4 +-166.764,28.500,4 +-166.800,28.500,4 +-166.900,28.400,4 +-167.000,28.300,4 +-167.544,28.300,4 +-167.801,28.300,4 +-168.129,28.682,4 +-168.529,28.986,4 +-169.200,29.289,4 +-170.000,29.411,4 +-170.800,29.369,4 +-171.600,29.273,4 +-172.400,29.177,4 +-173.200,29.090,4 +-174.000,29.011,4 +-174.770,28.939,4 +-174.820,28.936,4 +-175.100,28.919,4 +-175.492,28.894,4 +-175.600,28.889,4 +-176.273,28.903,4 +-176.400,28.906,4 +-176.753,28.936,4 +-177.164,28.971,4 +-177.228,28.978,4 +-178.000,29.056,4 +-178.800,29.142,4 +-179.600,29.228,4 +-180.400,29.320,4 +-181.200,29.360,4 +-182.000,29.236,4 +-182.667,28.960,4 +-183.067,28.705,4 +-183.466,28.305,4 +-183.866,27.794,4 +-184.066,27.500,4 +-184.200,27.500,4 +-184.600,27.900,4 +-184.700,28.000,4 +-185.000,28.300,4 +-185.147,28.447,4 +-185.200,28.500,4 +-185.344,28.500,4 +-185.391,28.500,4 +-185.423,28.500,4 +-185.424,28.500,4 +-185.424,28.500,4 +-185.446,28.530,4 +-185.919,29.157,4 +-185.962,29.210,4 +-186.014,29.262,4 +-186.719,29.858,4 +-186.753,29.881,4 +-186.772,29.893,4 +-187.542,30.293,4 +-187.584,30.308,4 +-188.353,30.527,4 +-188.420,30.544,4 +-188.445,30.549,4 +-189.200,30.706,4 +-190.000,30.874,4 +-190.762,31.040,4 +-190.789,31.046,4 +-190.883,31.067,4 +-191.600,31.222,4 +-192.292,31.310,4 +-192.400,31.324,4 +-193.071,31.296,4 +-193.200,31.292,4 +-193.579,31.225,4 +-194.038,31.128,4 +-194.061,31.122,4 +-194.079,31.117,4 +-194.082,31.117,4 +-194.557,31.113,4 +-194.957,31.348,4 +-195.420,31.748,4 +-195.820,32.186,4 +-196.268,32.586,4 +-196.668,32.889,4 +-197.200,33.169,4 +-197.852,33.480,4 +-198.252,33.675,4 +-198.800,33.899,4 +-199.621,34.222,4 +-199.674,34.245,4 +-199.760,34.292,4 +-200.247,34.507,4 +-200.342,34.539,4 +-201.200,34.873,4 +-202.000,35.011,4 +-202.800,35.027,4 +-203.309,35.110,4 +-203.709,35.503,4 +-204.070,35.903,4 +-204.470,36.375,4 +-204.825,36.775,4 +-205.225,37.132,4 +-205.694,37.532,4 +-206.094,37.808,4 +-206.666,38.208,4 +-207.066,38.496,4 +-207.600,38.852,4 +-208.070,39.155,4 +-208.470,39.394,4 +-209.200,39.756,4 +-210.000,39.950,4 +-210.022,39.956,4 +-210.073,39.962,4 +-210.820,40.087,4 +-210.855,40.093,4 +-211.395,40.515,4 +-211.771,41.215,4 +-211.780,41.234,4 +-211.806,41.292,4 +-212.172,41.973,4 +-212.197,42.015,4 +-212.626,42.607,4 +-212.977,43.007,4 +-213.377,43.427,4 +-213.778,43.827,4 +-214.178,44.212,4 +-214.596,44.612,4 +-214.996,44.995,4 +-215.415,45.395,4 +-215.815,45.777,4 +-216.234,46.177,4 +-216.634,46.558,4 +-217.049,46.958,4 +-217.449,47.360,4 +-217.807,47.760,4 +-218.207,48.244,4 +-218.523,48.644,4 +-218.956,49.194,4 +-218.989,49.235,4 +-219.469,49.847,4 +-219.587,49.998,4 +-219.594,50.007,4 +-219.606,50.022,4 +-220.186,50.762,4 +-220.229,50.816,4 +-220.665,51.372,4 +-220.979,51.772,4 +-221.429,52.345,4 +-221.514,52.454,4 +-221.949,53.009,4 +-222.054,53.141,4 +-222.117,53.223,4 +-222.456,53.657,4 +-222.712,53.983,4 +-222.760,54.044,4 +-222.838,54.148,4 +-223.282,54.763,4 +-223.344,54.857,4 +-223.770,55.605,4 +-223.775,55.614,4 +-223.786,55.635,4 +-224.181,56.393,4 +-224.189,56.409,4 +-224.467,56.940,4 +-224.603,57.200,4 +-224.607,57.208,4 +-225.009,57.977,4 +-225.014,57.987,4 +-225.016,57.991,4 +-225.433,58.779,4 +-225.452,58.816,4 +-225.819,59.516,4 +-225.845,59.569,4 +-225.857,59.591,4 +-226.261,60.362,4 +-226.293,60.427,4 +-226.605,61.060,4 +-226.640,61.152,4 +-226.646,61.191,4 +-227.020,62.000,4 +-227.186,62.426,4 +-227.418,62.826,4 +-227.743,63.600,4 +-227.908,64.287,4 +-227.930,64.347,4 +-227.951,64.375,4 +-227.973,64.420,4 +-228.035,64.644,4 +-228.164,64.954,4 +-228.196,65.059,4 +-228.211,65.136,4 +-228.563,66.000,4 +-228.716,66.675,4 +-228.736,66.741,4 +-228.759,66.772,4 +-228.784,66.825,4 +-228.839,67.028,4 +-228.959,67.318,4 +-228.999,67.447,4 +-229.016,67.533,4 +-229.422,68.400,4 +-229.585,68.849,4 +-229.762,69.249,4 +-230.069,70.000,4 +-230.318,70.691,4 +-230.342,70.760,4 +-230.580,71.456,4 +-230.619,71.574,4 +-230.632,71.626,4 +-230.837,72.400,4 +-230.971,73.182,4 +-230.985,73.255,4 +-231.039,73.619,4 +-231.096,74.000,4 +-231.134,74.248,4 +-231.218,74.800,4 +-231.328,75.500,4 +-231.350,75.639,4 +-231.355,75.672,4 +-231.473,76.400,4 +-231.604,77.200,4 +-231.737,78.000,4 +-231.875,78.726,4 +-231.877,78.734,4 +-231.882,78.753,4 +-232.176,79.598,4 +-232.183,79.611,4 +-232.212,79.657,4 +-232.500,80.110,4 +-232.500,80.097,4 +-232.500,78.291,4 +-232.500,78.136,4 +-232.500,77.714,4 +-232.500,77.536,4 +-232.500,77.314,4 +-232.500,76.621,4 +-232.500,75.320,4 +-232.500,73.778,4 +-232.500,70.407,4 +-232.500,70.330,4 +-232.382,70.000,4 +-232.124,69.253,4 +-232.118,69.234,4 +-231.801,68.455,4 +-231.789,68.426,4 +-231.784,68.411,4 +-231.428,67.600,4 +-231.234,67.110,4 +-231.102,66.710,4 +-230.890,66.000,4 +-230.614,65.200,4 +-230.427,64.728,4 +-230.299,64.328,4 +-230.080,63.600,4 +-229.799,62.800,4 +-229.618,62.360,4 +-229.438,61.960,4 +-228.992,61.126,4 +-228.989,61.118,4 +-228.669,60.481,4 +-228.664,60.473,4 +-228.661,60.468,4 +-228.605,60.346,4 +-228.247,59.584,4 +-228.233,59.543,4 +-228.195,59.484,4 +-227.869,58.866,4 +-227.844,58.815,4 +-227.416,57.976,4 +-227.410,57.962,4 +-227.393,57.931,4 +-227.031,57.244,4 +-227.019,57.219,4 +-226.603,56.388,4 +-226.601,56.380,4 +-226.592,56.362,4 +-226.223,55.608,4 +-226.216,55.594,4 +-225.808,54.796,4 +-225.807,54.794,4 +-225.805,54.791,4 +-225.390,54.004,4 +-225.388,54.001,4 +-224.982,53.358,4 +-224.676,52.958,4 +-224.243,52.407,4 +-224.210,52.365,4 +-223.725,51.746,4 +-223.612,51.603,4 +-223.606,51.594,4 +-223.595,51.580,4 +-223.013,50.838,4 +-222.971,50.784,4 +-222.535,50.228,4 +-222.221,49.828,4 +-221.771,49.255,4 +-221.686,49.146,4 +-221.251,48.592,4 +-221.147,48.459,4 +-221.083,48.377,4 +-220.736,47.936,4 +-220.485,47.617,4 +-220.438,47.558,4 +-220.363,47.462,4 +-219.879,46.850,4 +-219.808,46.760,4 +-219.361,46.213,4 +-218.990,45.813,4 +-218.590,45.419,4 +-218.169,45.019,4 +-217.769,44.639,4 +-217.349,44.239,4 +-216.949,43.858,4 +-216.530,43.458,4 +-216.130,43.076,4 +-215.644,42.611,4 +-215.527,42.499,4 +-215.082,42.073,4 +-214.901,41.900,4 +-214.736,41.739,4 +-214.289,41.263,4 +-214.205,41.166,4 +-213.988,40.863,4 +-213.711,40.485,4 +-213.649,40.355,4 +-213.609,40.068,4 +-213.509,39.600,4 +-213.226,38.964,4 +-213.219,38.948,4 +-212.611,38.532,4 +-212.211,38.247,4 +-211.600,37.957,4 +-210.800,38.029,4 +-210.000,37.943,4 +-209.927,37.928,4 +-209.735,37.857,4 +-209.258,37.559,4 +-209.168,37.453,4 +-208.659,37.155,4 +-208.418,36.992,4 +-208.356,36.952,4 +-207.731,36.539,4 +-207.650,36.485,4 +-207.610,36.459,4 +-207.058,36.097,4 +-206.658,35.827,4 +-206.198,35.427,4 +-205.798,34.942,4 +-205.504,34.542,4 +-205.325,34.000,4 +-205.021,33.478,4 +-204.395,33.131,4 +-204.349,33.106,4 +-204.225,33.049,4 +-203.600,32.771,4 +-203.269,32.759,4 +-202.897,32.870,4 +-202.803,32.939,4 +-202.776,32.960,4 +-202.713,32.956,4 +-202.000,33.086,4 +-201.422,32.880,4 +-201.022,32.701,4 +-200.400,32.422,4 +-199.679,32.095,4 +-199.580,32.051,4 +-199.009,31.799,4 +-198.857,31.731,4 +-198.800,31.705,4 +-198.020,31.354,4 +-197.988,31.339,4 +-197.262,30.838,4 +-197.212,30.799,4 +-197.175,30.741,4 +-196.678,29.931,4 +-196.671,29.917,4 +-196.285,29.452,4 +-195.600,29.151,4 +-194.898,28.884,4 +-194.818,28.854,4 +-194.728,28.854,4 +-194.022,28.883,4 +-193.970,28.912,4 +-193.948,28.923,4 +-193.922,28.929,4 +-193.200,29.183,4 +-192.400,29.192,4 +-191.621,29.021,4 +-191.562,29.009,4 +-191.334,28.958,4 +-190.800,28.842,4 +-190.028,28.683,4 +-189.965,28.670,4 +-189.945,28.666,4 +-189.200,28.514,4 +-188.400,28.338,4 +-187.811,28.121,4 +-187.411,27.806,4 +-187.055,27.406,4 +-187.079,26.738,4 +-187.080,26.735,4 +-187.240,26.057,4 +-187.240,26.054,4 +-187.240,26.053,4 +-187.245,25.471,4 +-187.016,25.071,4 +-186.616,24.640,4 +-186.000,24.485,4 +-185.283,24.670,4 +-185.251,24.673,4 +-185.227,24.683,4 +-185.180,24.704,4 +-184.512,24.691,4 +-184.454,24.691,4 +-184.384,24.656,4 +-184.025,24.631,4 +-183.551,24.584,4 +-183.509,24.607,4 +-183.437,24.635,4 +-183.157,24.747,4 +-182.995,25.026,4 +-182.958,25.093,4 +-182.939,25.135,4 +-182.626,26.000,4 +-182.474,26.497,4 +-182.010,26.925,4 +-181.995,26.944,4 +-181.976,26.963,4 +-181.938,26.997,4 +-181.478,27.216,4 +-181.200,27.236,4 +-180.775,27.190,4 +-180.400,27.150,4 +-179.772,27.082,4 +-179.560,27.059,4 +-179.515,27.054,4 +-178.800,26.977,4 +-178.000,26.894,4 +-177.200,26.820,4 +-176.400,26.751,4 +-175.600,26.733,4 +-174.800,26.788,4 +-174.000,26.863,4 +-173.200,26.943,4 +-172.364,27.040,4 +-172.303,27.047,4 +-172.075,27.077,4 +-171.706,27.124,4 +-171.600,27.137,4 +-171.177,27.192,4 +-170.800,27.241,4 +-170.634,27.260,4 +-170.197,27.291,4 +-170.023,27.306,4 +-169.973,27.310,4 +-169.545,27.257,4 +-169.147,26.800,4 +-168.827,26.091,4 +-168.808,26.058,4 +-168.804,25.999,4 +-168.662,25.308,4 +-168.645,25.258,4 +-168.203,24.643,4 +-167.600,24.509,4 +-166.818,24.662,4 +-166.817,24.661,4 +-166.016,24.627,4 +-166.015,24.627,4 +-165.138,24.569,4 +-165.085,24.598,4 +-164.986,24.634,4 +-164.732,24.730,4 +-164.579,24.982,4 +-164.525,25.077,4 +-164.503,25.129,4 +-164.273,26.000,4 +-164.491,26.800,4 +-164.276,27.676,4 +-164.274,27.682,4 +-164.267,27.688,4 +-163.995,28.003,4 +-163.679,28.136,4 +-163.673,28.140,4 +-163.667,28.144,4 +-162.800,28.419,4 +-161.953,28.595,4 +-161.892,28.608,4 +-161.711,28.645,4 +-161.322,28.726,4 +-161.200,28.751,4 +-160.916,28.810,4 +-160.409,28.916,4 +-160.375,28.923,4 +-160.358,28.926,4 +-159.600,29.079,4 +-158.800,29.181,4 +-157.998,28.979,4 +-157.959,28.957,4 +-157.875,28.943,4 +-157.200,28.767,4 +-156.934,28.804,4 +-156.399,28.954,4 +-156.392,28.957,4 +-156.388,28.958,4 +-156.385,28.959,4 +-155.529,29.307,4 +-155.478,29.342,4 +-155.363,29.392,4 +-155.102,29.519,4 +-154.987,29.772,4 +-154.948,29.877,4 +-154.911,29.935,4 +-154.582,30.604,4 +-154.065,31.005,4 +-154.031,31.028,4 +-154.010,31.053,4 +-153.978,31.086,4 +-153.706,31.251,4 +-153.367,31.409,4 +-153.299,31.429,4 +-153.248,31.440,4 +-152.419,31.835,4 +-152.408,31.840,4 +-152.402,31.847,4 +-152.396,31.852,4 +-152.031,32.011,4 +-151.642,32.192,4 +-151.630,32.195,4 +-151.617,32.197,4 +-151.370,32.315,4 +-150.774,32.584,4 +-150.745,32.597,4 +-150.711,32.612,4 +-150.332,32.772,4 +-150.001,32.906,4 +-149.973,32.917,4 +-149.958,32.924,4 +-149.944,32.924,4 +-149.285,32.926,4 +-149.186,32.926,4 +-149.181,32.926,4 +-149.169,32.924,4 +-148.400,32.740,4 +-148.019,32.740,4 +-147.624,32.858,4 +-147.557,32.896,4 +-147.522,32.915,4 +-147.498,32.928,4 +-146.767,33.335,4 +-146.747,33.348,4 +-146.715,33.365,4 +-146.357,33.589,4 +-146.226,33.926,4 +-146.219,33.955,4 +-146.211,33.974,4 +-145.935,34.643,4 +-145.842,34.860,4 +-145.838,34.867,4 +-145.836,34.872,4 +-145.601,35.209,4 +-145.241,35.516,4 +-145.201,35.542,4 +-145.180,35.559,4 +-145.148,35.581,4 +-145.074,35.640,4 +-144.698,35.932,4 +-144.456,36.098,4 +-144.386,36.145,4 +-144.358,36.164,4 +-144.332,36.180,4 +-143.983,36.417,4 +-143.670,36.599,4 +-143.620,36.628,4 +-143.597,36.659,4 +-143.560,36.699,4 +-143.303,36.863,4 +-142.802,37.191,4 +-142.797,37.195,4 +-142.793,37.197,4 +-142.788,37.200,4 +-142.773,37.211,4 +-142.295,37.530,4 +-142.057,37.676,4 +-141.985,37.717,4 +-141.954,37.739,4 +-141.926,37.752,4 +-141.200,38.072,4 +-140.400,37.984,4 +-139.553,38.076,4 +-139.522,38.096,4 +-139.484,38.122,4 +-139.139,38.357,4 +-138.836,38.569,4 +-138.799,38.595,4 +-138.784,38.606,4 +-138.771,38.619,4 +-138.195,39.037,4 +-137.995,39.600,4 +-137.796,40.406,4 +-137.796,40.408,4 +-137.795,40.410,4 +-137.793,40.414,4 +-137.594,40.782,4 +-137.277,41.186,4 +-137.249,41.220,4 +-137.236,41.237,4 +-137.217,41.258,4 +-137.174,41.309,4 +-136.866,41.670,4 +-136.575,41.955,4 +-136.489,42.038,4 +-136.465,42.063,4 +-136.436,42.091,4 +-136.360,42.164,4 +-136.057,42.455,4 +-135.728,42.767,4 +-135.668,42.825,4 +-135.646,42.845,4 +-135.629,42.862,4 +-135.572,42.916,4 +-135.236,43.235,4 +-134.871,43.582,4 +-134.841,43.610,4 +-134.826,43.625,4 +-134.812,43.638,4 +-134.785,43.664,4 +-134.415,44.015,4 +-134.013,44.397,4 +-134.007,44.402,4 +-134.005,44.405,4 +-134.002,44.407,4 +-133.997,44.412,4 +-133.594,44.794,4 +-133.210,45.160,4 +-133.192,45.176,4 +-133.184,45.184,4 +-133.175,45.193,4 +-133.155,45.212,4 +-132.773,45.574,4 +-132.402,45.966,4 +-132.390,45.979,4 +-132.384,45.984,4 +-132.379,45.990,4 +-132.370,46.001,4 +-132.006,46.408,4 +-131.719,46.776,4 +-131.671,46.839,4 +-131.654,46.860,4 +-131.629,46.893,4 +-131.545,47.001,4 +-131.296,47.324,4 +-131.125,47.544,4 +-131.066,47.620,4 +-131.037,47.659,4 +-131.007,47.697,4 +-130.586,48.242,4 +-130.279,48.642,4 +-129.859,49.191,4 +-129.851,49.202,4 +-129.843,49.212,4 +-129.829,49.232,4 +-129.573,49.566,4 +-129.242,49.992,4 +-129.227,50.011,4 +-129.219,50.021,4 +-129.208,50.035,4 +-129.182,50.069,4 +-128.862,50.479,4 +-128.643,50.757,4 +-128.603,50.808,4 +-128.587,50.828,4 +-128.569,50.851,4 +-128.146,51.385,4 +-127.830,51.785,4 +-127.409,52.306,4 +-127.381,52.350,4 +-127.350,52.381,4 +,, +-128.000,30.500,5 +-127.600,30.100,5 +-127.500,30.000,5 +-127.400,29.900,5 +-127.000,29.500,5 +-126.888,29.388,5 +-126.943,29.200,5 +-126.979,28.400,5 +-126.720,27.600,5 +-126.438,27.143,5 +-126.031,26.709,5 +-126.006,26.674,5 +-125.971,26.625,5 +-125.887,26.529,5 +-125.681,26.302,5 +-125.443,26.087,5 +-125.330,25.990,5 +-125.301,25.951,5 +-125.272,25.903,5 +-125.192,25.783,5 +-124.816,25.421,5 +-124.697,25.200,5 +-124.632,25.078,5 +-124.403,24.521,5 +-124.375,24.452,5 +-124.370,24.436,5 +-124.364,24.426,5 +-124.357,24.410,5 +-124.053,23.802,5 +-123.958,23.600,5 +-123.892,23.474,5 +-123.620,22.925,5 +-123.587,22.864,5 +-123.580,22.847,5 +-123.574,22.837,5 +-123.566,22.820,5 +-123.274,22.273,5 +-123.054,21.973,5 +-122.964,21.887,5 +-122.956,21.831,5 +-122.927,21.791,5 +-122.773,21.454,5 +-122.655,21.254,5 +-122.643,21.200,5 +-122.640,21.129,5 +-122.627,20.716,5 +-122.598,20.408,5 +-122.592,20.372,5 +-122.667,19.600,5 +-122.542,18.866,5 +-122.372,18.466,5 +-122.080,18.000,5 +-121.798,17.502,5 +-121.872,17.428,5 +-121.899,17.401,5 +-121.905,17.395,5 +-122.000,17.300,5 +-122.300,17.000,5 +-122.300,16.400,5 +-122.300,16.000,5 +-122.500,15.800,5 +-122.700,15.600,5 +-123.000,15.300,5 +-123.300,15.000,5 +-123.400,14.900,5 +-123.409,14.891,5 +-123.818,14.482,5 +-123.900,14.400,5 +-121.672,14.400,5 +-121.638,14.400,5 +-121.294,14.400,5 +-120.899,14.400,5 +-119.691,14.400,5 +-119.674,14.600,5 +-119.656,14.800,5 +-119.585,15.600,5 +-119.514,16.400,5 +-119.444,17.200,5 +-119.573,18.000,5 +-119.869,18.474,5 +-120.328,18.874,5 +-120.594,19.600,5 +-120.266,20.356,5 +-119.958,20.756,5 +-119.938,21.200,5 +-119.980,21.659,5 +-120.334,22.043,5 +-120.346,22.075,5 +-120.367,22.133,5 +-120.485,22.470,5 +-120.616,22.736,5 +-120.626,22.800,5 +-120.761,23.215,5 +-120.974,23.617,5 +-121.056,23.685,5 +-121.071,23.726,5 +-121.094,23.769,5 +-121.246,24.160,5 +-121.355,24.349,5 +-121.362,24.400,5 +-121.546,24.806,5 +-121.748,25.181,5 +-121.855,25.271,5 +-121.881,25.319,5 +-121.913,25.377,5 +-122.179,26.014,5 +-122.210,26.070,5 +-122.330,26.530,5 +-122.642,26.930,5 +-123.042,27.398,5 +-123.600,27.601,5 +-124.249,27.804,5 +-124.649,28.139,5 +-125.001,28.539,5 +-125.001,29.075,5 +-124.678,29.475,5 +-124.511,30.000,5 +-124.633,30.684,5 +-124.869,31.084,5 +-125.188,31.600,5 +-125.519,32.128,5 +-125.772,32.528,5 +-126.172,33.162,5 +-126.485,33.562,5 +-126.885,33.688,5 +-127.430,33.688,5 +-127.830,33.535,5 +-128.400,33.318,5 +-129.200,33.013,5 +-129.678,32.830,5 +-130.078,32.677,5 +-130.800,32.402,5 +-131.527,32.125,5 +-131.927,31.972,5 +-132.400,31.792,5 +-133.200,31.487,5 +-133.777,31.267,5 +-134.177,31.116,5 +-134.800,30.880,5 +-135.622,30.570,5 +-135.667,30.552,5 +-135.750,30.520,5 +-136.296,30.314,5 +-136.368,30.287,5 +-137.200,29.973,5 +-137.896,29.711,5 +-138.296,29.561,5 +-138.800,29.372,5 +-139.600,29.071,5 +-140.161,28.861,5 +-140.521,28.400,5 +-140.558,27.600,5 +-140.242,26.800,5 +-140.043,26.286,5 +-139.891,25.886,5 +-139.630,25.200,5 +-139.339,24.434,5 +-139.187,24.034,5 +-139.022,23.600,5 +-138.718,22.800,5 +-138.483,22.182,5 +-138.331,21.782,5 +-138.109,21.200,5 +-137.779,20.463,5 +-137.553,20.063,5 +-137.153,19.670,5 +-136.725,19.270,5 +-136.325,18.897,5 +-135.900,18.497,5 +-135.500,18.098,5 +-135.108,17.698,5 +-134.708,17.249,5 +-134.357,16.849,5 +-133.957,16.416,5 +-133.585,16.016,5 +-133.162,15.571,5 +-133.126,15.533,5 +-133.005,15.405,5 +-132.608,14.987,5 +-132.494,14.868,5 +-132.463,14.835,5 +-132.050,14.400,5 +-130.833,14.400,5 +-128.900,14.400,5 +-128.961,14.461,5 +-129.000,14.500,5 +-129.363,14.500,5 +-129.432,14.564,5 +-129.821,14.964,5 +-130.221,15.386,5 +-130.605,15.786,5 +-131.005,16.205,5 +-131.385,16.605,5 +-131.785,17.026,5 +-132.163,17.426,5 +-132.563,17.857,5 +-132.929,18.257,5 +-133.329,18.697,5 +-133.697,19.097,5 +-134.097,19.509,5 +-134.493,19.909,5 +-134.893,20.293,5 +-135.314,20.693,5 +-135.714,21.128,5 +-136.047,21.528,5 +-136.260,22.000,5 +-136.578,22.800,5 +-136.765,23.292,5 +-136.917,23.692,5 +-137.186,24.400,5 +-137.469,25.144,5 +-137.621,25.544,5 +-137.726,25.774,5 +-137.579,25.922,5 +-137.500,26.000,5 +-137.500,26.200,5 +-137.500,27.000,5 +-137.100,27.400,5 +-137.000,27.500,5 +-136.900,27.600,5 +-136.500,28.000,5 +-136.486,28.014,5 +-136.447,28.053,5 +-136.354,28.146,5 +-136.344,28.150,5 +-135.600,28.431,5 +-134.911,28.691,5 +-134.511,28.842,5 +-134.000,29.035,5 +-133.200,29.337,5 +-132.653,29.545,5 +-132.253,29.696,5 +-131.600,29.945,5 +-130.746,30.269,5 +-130.745,30.270,5 +-130.056,30.532,5 +-130.054,30.532,5 +-130.053,30.533,5 +-129.314,30.814,5 +-129.314,30.814,5 +-129.188,30.688,5 +-129.000,30.500,5 +-128.200,30.500,5 +-128.000,30.500,5 +,, +-222.282,11.954,6 +-221.882,12.134,6 +-221.322,12.534,6 +-220.941,12.900,6 +-231.648,12.900,6 +-231.516,12.400,6 +-231.270,11.954,6 +-230.800,11.907,6 +-230.000,11.908,6 +-229.200,11.908,6 +-228.400,11.908,6 +-227.600,11.908,6 +-226.800,11.908,6 +-226.000,11.908,6 +-225.200,11.908,6 +-224.400,11.908,6 +-223.600,11.908,6 +-222.800,11.909,6 +-222.282,11.954,6 +,, +-116.314,80.100,7 +-116.157,80.332,7 +-116.148,80.400,7 +-116.066,80.951,7 +-116.046,81.200,7 +-116.025,81.627,7 +-115.993,82.000,7 +-116.271,82.681,7 +-116.282,82.741,7 +-116.316,82.775,7 +-116.742,83.333,7 +-116.922,83.733,7 +-117.045,84.400,7 +-117.044,85.200,7 +-117.044,86.000,7 +-117.043,86.800,7 +-117.043,87.600,7 +-117.008,88.400,7 +-116.887,88.894,7 +-116.447,89.294,7 +-116.073,89.921,7 +-116.069,89.923,7 +-116.068,89.928,7 +-116.067,89.933,7 +-116.033,90.533,7 +-116.020,90.800,7 +-116.076,91.347,7 +-116.098,91.600,7 +-116.324,92.104,7 +-116.429,92.351,7 +-116.503,92.416,7 +-116.860,92.837,7 +-117.154,93.178,7 +-117.208,93.231,7 +-117.285,93.404,7 +-117.498,93.881,7 +-117.500,93.886,7 +-117.500,89.561,7 +-117.500,89.438,7 +-117.500,89.158,7 +-117.500,88.427,7 +-117.500,86.891,7 +-117.500,83.455,7 +-117.500,78.322,7 +-117.498,78.332,7 +-117.428,78.621,7 +-117.399,78.753,7 +-117.387,78.798,7 +-117.030,79.408,7 +-116.485,79.812,7 +-116.441,79.845,7 +-116.428,79.881,7 +-116.314,80.100,7 +,, +-172.303,18.800,8 +-172.100,18.228,8 +-171.776,17.828,8 +-171.376,17.480,8 +-170.800,17.264,8 +-170.000,17.274,8 +-169.462,17.490,8 +-169.029,18.055,8 +-169.022,18.065,8 +-169.015,18.077,8 +-168.805,18.414,8 +-168.702,18.741,8 +-168.699,18.752,8 +-168.696,18.758,8 +-168.694,18.768,8 +-168.567,19.600,8 +-168.684,20.254,8 +-168.908,20.654,8 +-169.308,21.077,8 +-169.948,21.473,8 +-169.956,21.484,8 +-169.968,21.487,8 +-169.987,21.494,8 +-170.808,21.521,8 +-170.841,21.521,8 +-170.873,21.513,8 +-171.238,21.298,8 +-171.644,21.065,8 +-171.676,21.038,8 +-172.128,20.467,8 +-172.144,20.436,8 +-172.368,19.600,8 +-172.303,18.800,8 +,, +-179.259,18.600,9 +-179.161,19.000,9 +-179.164,19.651,9 +-179.164,19.655,9 +-179.164,19.661,9 +-179.199,19.991,9 +-179.366,20.328,9 +-179.369,20.334,9 +-179.370,20.338,9 +-179.373,20.343,9 +-179.807,20.988,9 +-180.415,21.403,9 +-180.417,21.405,9 +-180.419,21.406,9 +-180.423,21.409,9 +-181.032,21.554,9 +-181.200,21.552,9 +-181.705,21.357,9 +-181.940,21.266,9 +-181.992,21.229,9 +-182.459,20.873,9 +-182.687,20.400,9 +-182.856,19.600,9 +-182.808,18.800,9 +-182.579,18.105,9 +-182.292,17.705,9 +-181.892,17.410,9 +-181.200,17.179,9 +-180.348,17.354,9 +-180.313,17.376,9 +-180.255,17.405,9 +-179.961,17.561,9 +-179.730,17.850,9 +-179.689,17.905,9 +-179.667,17.937,9 +-179.259,18.600,9 +,, +-129.951,12.291,10 +-130.442,12.759,10 +-130.584,12.900,10 +-119.833,12.900,10 +-119.888,12.400,10 +-119.970,11.968,10 +-120.400,11.921,10 +-121.200,11.908,10 +-122.000,11.908,10 +-122.800,11.908,10 +-123.600,11.908,10 +-124.400,11.908,10 +-125.200,11.908,10 +-126.000,11.908,10 +-126.800,11.908,10 +-127.600,11.908,10 +-128.400,11.909,10 +-129.199,11.933,10 +-129.271,11.938,10 +-129.409,11.959,10 +-129.825,12.172,10 +-129.951,12.291,10 +,, +-167.751,152.193,11 +-168.037,152.038,11 +-168.226,151.755,11 +-168.262,151.700,11 +-168.281,151.666,11 +-168.288,151.649,11 +-168.401,151.400,11 +-167.375,151.400,11 +-161.890,151.400,11 +-162.005,151.599,11 +-162.038,151.666,11 +-162.144,151.814,11 +-162.584,152.174,11 +-162.731,152.242,11 +-162.798,152.245,11 +-163.600,152.313,11 +-164.145,152.101,11 +-164.545,151.787,11 +-165.200,151.689,11 +-165.750,151.901,11 +-166.150,152.137,11 +-166.800,152.370,11 +-167.659,152.247,11 +-167.694,152.224,11 +-167.751,152.193,11 +,, +-232.445,86.800,12 +-232.444,87.600,12 +-232.466,88.400,12 +-232.500,88.567,12 +-232.500,88.568,12 +-232.500,88.566,12 +-232.500,88.563,12 +-232.500,88.560,12 +-232.500,88.559,12 +-232.500,88.557,12 +-232.500,88.467,12 +-232.500,85.463,12 +-232.500,85.332,12 +-232.500,84.928,12 +-232.500,84.784,12 +-232.500,84.403,12 +-232.500,84.269,12 +-232.500,83.955,12 +-232.442,84.400,12 +-232.442,85.200,12 +-232.445,86.000,12 +-232.445,86.800,12 +,, +-117.500,99.507,13 +-117.500,99.722,13 +-117.482,99.600,13 +-117.500,99.507,13 +,, +-234.000,99.474,14 +-234.000,99.944,14 +-234.045,99.600,14 +-234.000,99.474,14 +,, diff --git a/airframe/fuselage-mid/TODO.md b/airframe/fuselage-mid/TODO.md index af0e7380..4f686979 100644 --- a/airframe/fuselage-mid/TODO.md +++ b/airframe/fuselage-mid/TODO.md @@ -16,9 +16,8 @@ ## §1.1.1 — Fuselage: Shell Regeneration, Middle-Section Bays (part 3/3) → full detail: `WBS.md` §1.1.1 -- [ ] ★ CARGO-01 payload won't fit past the wing spar (BLOCKER) -- [ ] CARGO-02 shell bores Ø12.3 for a spar the wing retired (8.3) -- [ ] ★ CARGO-03c coupon-test CF-PETG: >=15MPa tenon, else 2nd spar +- [ ] CARGO-03c follow-up: coupon-test CF-PETG fusion/bearing (built + two-rod couple already clears the cited 5 MPa figure; not blocking) - [ ] head_shell24.stl - [ ] cargo_sect_shell24.stl - [ ] Cargo gondola shell diff --git a/airframe/fuselage-mid/WBS.md b/airframe/fuselage-mid/WBS.md index a5fe4691..4e400f3f 100644 --- a/airframe/fuselage-mid/WBS.md +++ b/airframe/fuselage-mid/WBS.md @@ -412,6 +412,63 @@ the table; < 15 MPa → second spar at 14 mm.** Re-run `tools/wing_spar_carrythrough.py` either way. + **BUILT 2026-08-24, U5/KTD1: two-rod system, not a single rod vs. the + tenon.** A feasibility pass against the corrected S1223 geometry (WING-01 + fix) found a matching Ø8.2 mm AFT rod does not fit anywhere aft of the + main spar (spar bore aft edge 49.30 mm and the Hall conduit's fixed + 52.25..55.75 mm span leave no room); a smaller **Ø6.2 mm aft rod** fits + **root-only** at **62.0 mm from LE** (picked within the 60..62 mm feasible + band for maximum clearance margin to the Hall conduit's trailing edge — + `tools/wing_spar_station_fit.py`), with the forward Ø8.2 mm rod unchanged + at 14.0 mm. Both rods are root-only embeds (not full-span like the main + spar — a root-reacting tie rod has no structural reason to reach the + tip). + + The couple-force split is **not** the single-rod `F = M / separation from + spar` method above: with two dedicated rods and no third reaction (the + main spar rides in a rotating CLEARANCE bore at the wing root and reacts + no moment about this axis), pure statics for two pin reactions gives + **equal-magnitude forces**, `F = M / (rod-to-rod separation)`, independent + of the spar's position — `tools/wing_spar_carrythrough.py + report_two_rod_couple()`: + + | Rod | Station | D (nominal) | Embed | F (ultimate) | Bearing | FOS vs 5 MPa | + | --- | --- | --- | --- | --- | --- | --- | + | fwd | 14.0 mm | 8 mm | 40 mm | 304.3 N | 0.951 MPa | **5.26** | + | aft | 62.0 mm | 6 mm | 42 mm | 304.3 N | 1.207 MPa | **4.14** | + + (48.00 mm rod-to-rod separation; ultimate root moment 14.60 N·m unchanged + from the table above.) Both clear the §3 FOS 4.0 target against the + existing 5 MPa bond-limited CF-PETG allowable — the aft rod needed its + embed bumped from the WBS-convention 40 mm to 42 mm to clear (at 40 mm, + FOS is 3.945, just under target). No new coupon data required. + + **REF-MAT-001 added 2026-08-25** (`REFERENCES.md`) — the first peer- + reviewed data point for CF-PETG in this repository (Batista et al. 2023, + *Appl. Sci.* 13(23), 12701, ASTM D695 bulk compressive strength on 20% + short-CF-reinforced PETG, ≈47–60 MPa). It does not change anything + above — bulk unnotched compression is not the bearing-in-a-hole mode + either the tenon or the tie rods actually see, so it is not substituted + into the FOS figures here — but it is real evidence the `enlarged_tenon` + alternative's ≥11.1–40.6 MPa bar is plausibly clearable, which the + coupon-test decision is still the correct way to confirm. + + **The tenon is traded out of the load path entirely** (not merely + "restored" pending a coupon result, as the single-rod branch above + described) — `fuselage_root_tab()` is now a pure locating/index feature, + gated behind `TENON_LOAD_PATH = "two_rod"` in + `wings_s1223_revo.scad` (default); the enlarged-tenon sizing above stays + documented and buildable under `TENON_LOAD_PATH = "enlarged_tenon"` if a + future coupon clears ≥ 15 MPa. Geometry: `wings_s1223_revo.scad` + (`ROD_FWD_*`/`ROD_AFT_*`, `wing_root_tie_rod_fwd_bore()`/ + `_aft_bore()`), `merge_cargo_interior.py` (`ROD_FWD_*`/`ROD_AFT_*` + wall bosses, mirroring the `PORT_INB`/`PORT_OUTB` main-spar-boss embed + pattern — the forward boss's fuselage-side embed is 41 mm, not 40, to + avoid an exact end-cap coincidence with the main spar boss that produced + a non-manifold seam in the merged shell). CARGO-03c is CLOSED under this + branch; the coupon test remains open only to *enable* the + `enlarged_tenon` alternative, not to close this one. + - [x] **CARGO-04 — the aft EDF ESC conduit is blocked, and the Hall conduit runs inside the rotating spar. CLOSED 2026-08-24.** *(found 2026-08-23 with CARGO-03; same tool)* **BLOCKS the nacelle ESC harness and the tilt-encoder harness.** @@ -506,7 +563,7 @@ ##### 1.1.1.2 *Cargo* -- [ ] **★ CARGO-01 — the mission payload does not fit past the wing spar.** +- [x] **★ CARGO-01 — the mission payload does not fit past the wing spar. CLOSED 2026-08-25 (U3/U4).** *(found 2026-08-23 while placing the VERIFY-tier cargo accessories against the baked hull, root `WBS.md` §1.1.0; measured by `tools/cargo_bay_envelope.py`)* **BLOCKS the cargo mission, the cradle/winch placements, and the §1.1.1.2.1 @@ -545,10 +602,14 @@ instead. Verified adequate in `airframe/wings-nacelles/WBS.md` §1.1.2 **SPAR-01** (`tools/wing_spar_carrythrough.py`). With the spar stopping at X −100 / −240 the bay clear span is **X −240…−100 = 140 mm** at full bay - height, and the 4 × 3 × 3 in payload fits. **This item stays open until the - shell is re-cut** — `tools/cargo_bay_envelope.py` still fails against the - published STL, which is correct until the geometry changes. Close it together - with **CARGO-02**, which is the same shell edit. + height, and the 4 × 3 × 3 in payload fits. + + **CLOSED 2026-08-25.** The shell was re-cut (U3, `7bfccd3`) and the two CF + thwarts closing the couple were added (U4). `tools/cargo_bay_envelope.py` + now PASSES against the published, re-merged STL: measured interior + 170.6 mm (X) x 150.7 mm (Z), aperture 106.0 mm (Y) — the + 101.6 x 76.2 x 76.2 mm payload fits with margin on every axis. Closed + together with **CARGO-02** below, the same shell edit. Candidate resolutions as originally tabled, retained for the record (the owner took 1; each of the others trades against a requirement that is currently @@ -576,7 +637,7 @@ (110 × 80 × 72 mm) is sized for the 4 × 3 × 3 in payload and inherits the same obstruction. -- [ ] **CARGO-02 — the cargo shell bores for a spar the wing retired.** +- [x] **CARGO-02 — the cargo shell bores for a spar the wing retired. CLOSED 2026-08-25 (U3).** *(found 2026-08-23 alongside CARGO-01; gated by `tools/cargo_bay_envelope.py`, which fails loudly on the mismatch)* **BLOCKS cargo shell print.** @@ -611,6 +672,12 @@ crossing the bay. `WING_SPAR_BOSS_OD` is re-derived from that bearing's OD rather than from the retired Ø12 press fit. + **CLOSED 2026-08-25.** `WING_SPAR_BORE_D` is 8.3 mm (matching the wing's + `SPAR_BORE_OD`); `WING_SPAR_BOSS_OD` is 27.7 mm, derived from the F688ZZ + bearing seat, not the retired Ø22 press fit; `bom_revS.csv`'s + `CF-TUBE-12MM` row is marked SUPERSEDED (qty 0), retained for + traceability, citing `SPAR-TILT-4130` as the single active spar row. + **Rev R shell updates (sensor/antenna mounts; carried fwd from Rev O, 2026-05-24):** - [ ] **cargo_sect_shell24.stl** — regenerate from `serenity/stl/cargo_sect_shell24.scad` (cargo nadir FPV mount added) diff --git a/airframe/landing-gear/TODO.md b/airframe/landing-gear/TODO.md index e98dcbba..938d7408 100644 --- a/airframe/landing-gear/TODO.md +++ b/airframe/landing-gear/TODO.md @@ -20,7 +20,6 @@ - [ ] LG-16 Confirm ductile wire temper survives jig-forming - [ ] LG-02 Backing plate part (optional at 4 ft; FOS 4.56 unaided) - [ ] Assess foot grip on concrete/asphalt (traction requirement) -- [ ] LG-03 CF rod channel in `middle_canonical_shell24.scad` rear skids - [ ] LG-06 Elastic bench check: quarter-AUW fixture, 1.5 ft drop - [ ] LG-07 Confirm avionics enclosure shock rating - [ ] LG-11 Coupon-test CF-PETG diff --git a/airframe/landing-gear/WBS.md b/airframe/landing-gear/WBS.md index d25c5924..069b8f79 100644 --- a/airframe/landing-gear/WBS.md +++ b/airframe/landing-gear/WBS.md @@ -198,6 +198,15 @@ the lowest. whole footprint". Note the spar station is what actually removed the conflict; at the old 30 % station the boss fouled the fore flange at every setting. Re-verify with that tool after any spar move. + + **STALE as of 2026-08-24 (U5/KTD1), RE-CLOSED 2026-08-25 (LG-25).** + The "no proud material at all" result above was against the pre-U5 + wing, which had no fwd/aft tie-rod bosses. Adding + `ROD_FWD_BOSS_OD`/`ROD_AFT_BOSS_OD` (U5, the two-rod wing-root + couple) reopened proud material at the fore bay corners — tracked, + not silently re-closed, at **LG-25** below, and closed there by a + local boss relief (`ROD_FWD_BOSS_OD_RELIEF`). "No proud material at + all" is accurate again as of that fix. - [x] **LG-10.5 — DONE 2026-08-17.** Cargo merge re-run against the LG-10.4 wing keep-outs and the Rev S1b spar, and published to `cargo_sect_shell24_2mm_repaired.stl`: 908,106 faces, 1 body, @@ -382,11 +391,19 @@ the lowest. ##### 1.1.4.6 *Rear Skid Reinforcement (related: tip-back backstop)* -- [ ] **LG-03 CF rod channel in `middle_canonical_shell24.scad` rear skid - arms** — 3 mm bore, ~140 mm per skid, per `docs/LANDING_GEAR_ANALYSIS.md` - §10. The skids now also serve as the aft-heavy stance tip-back backstop - (§2.3 of the analysis). Re-export, re-bake, verify watertight. - **BLOCKS taxi test.** +- [x] **LG-03 CF rod channel in rear skid arms — CLOSED 2026-08-25, superseded + by LG-26.** *(was: "3 mm bore, ~140 mm per skid... re-export, re-bake" — + stale against the current Blender-merge pipeline; `middle_canonical_ + shell24.scad` is not how these shells are built any more.)* The channel + itself is not missing: `add_structural_features.py`'s `SKID_ROD_BORES` + (4.2 mm, not 3 mm — matches a 4 mm rod not 3 mm) already cuts it in both + `process_middle()` and `regen_rear_interior.py`, confirmed present by + direct measurement in the published STLs (`docs/structural_analysis.md` + §6.4). What the same measurement found is a **different, more specific** + problem — the bore is cut at the wrong X station, missing the actual + skid tube entirely over its bored span — tracked precisely as **LG-26** + below. This item is closed as superseded, not because the underlying + concern is resolved. - [x] **`landing_legs_hull_r1.stl` orphan** *(resolved 2026-07-12; archived)*. The Rev R5-era gap ("no hull-frame multi-corner gear render") is now @@ -431,6 +448,172 @@ the lowest. - [ ] **LG-19 Styling refinement vs REF-CAD-002** (slimmer telescope collars, piston detail, bay recess depth) — cosmetic only, no structural change. +- [x] **LG-25 — fwd wing-root tie-rod boss stands proud of the fore bay's + flange rebate. CLOSED 2026-08-25 (owner-selected option 1).** *(found + 2026-08-25, U8 closeout of `docs/plans/2026-08-24-001-fix-wing-repair- + root-joint-plan.md`, while re-running + `tools/landing_gear_wing_clearance.py --proud` against the final U5–U7 + geometry.)* Re-opened the "no proud material at all" claim closed under + **LG-10.4** — see the stale-claim note there. + + **Root cause.** U5/KTD1 added the forward wing-root tie-rod's fuselage- + side boss (`ROD_FWD_BOSS_OD` = 17.9 mm, embedded X −60…−100 port / + −238…−278 stbd, at Y +7.00, Z +63.78) as a new `wing_keepout_positives()` + solid *after* LG-10.4 was last measured against "no proud material". + `lg_bay_features()`'s flange-rebate cutter correctly stops at that keep- + out (`merge_cargo_interior.py` line ~1152, "Where it does, the skin is + left proud and the PRINTED frame carries the relief instead") — so the + hull side is behaving exactly as designed. What was never checked is + whether the **printed bay frame** (`BAY_PLATE_T` = 5 mm rebate depth) can + actually absorb the relief that design promises to hand it. + + **Measured (`--proud`, final U7 geometry, 2026-08-25):** + + | Corner | Proud depth | Volume | Patch (plate-frame u, v) | + | --- | --- | --- | --- | + | fore-port × rod fwd boss port | 10.818 mm | 1 631.98 mm³ | \|u\| 1.20…23.81, v +3.79…+23.66 | + | fore-stbd × rod fwd boss stbd | 12.000 mm | 1 909.15 mm³ | \|u\| 0.31…22.91, v +3.36…+23.56 | + + Worst case is **12.0 mm proud against a 5 mm frame** — 2.4× the frame's + own thickness, so a local pocket in the printed part cannot absorb it + without either (a) a pocket deeper than the frame is thick, which breaks + through the frame's outer face, or (b) cutting back the flange footprint + itself. Option (b) is foreclosed by the tool's own check: the affected + patch starts at \|u\| 0.31 mm, inboard of the upper M3 bolt hole edge at + \|u\| 23.70 mm (`BAY_BOLT_YB[1]` + `LG_M3_D`/2), so a cut-back there costs + the upper bolt's bearing area — the same fore-port bay that LG-10.6 + already datumed on its tightest floor. + + **Not blocking this closeout.** `--proud` is a diagnostic report, not a + gate: `landing_gear_wing_clearance.py`'s exit status (and its four named + CLEAR checks — aperture/rebate, bay-vs-voids, bolt bores, bolt-vs-servo- + pilot) is unaffected, because none of those four checks tests frame + pocket depth against boss protrusion. The plan's R9 gate list re-runs + clean (see U8 verification sweep) with this finding present. + + **Is blocking fabrication of the fore bay as currently drawn.** The fore + landing-gear bay frame (`canonical_leg_r6_*.scad`) cannot seat flush at + either fore corner today — a 12 mm gap under a 5 mm-thick part is not a + shim-able manufacturing tolerance, it is a design conflict between the + U5 rod boss and the LG-10.6 flange-rebate/seat-collar scheme. + + **Candidate resolutions tabled, retained for the record (owner selected + option 1):** + 1. **Locally relieve `ROD_FWD_BOSS_OD`** over just the u/v patch the + rebate needs (a stepped or tapered boss, full 17.9 mm OD outside the + fore-bay footprint, reduced within it). Feasible on margin: the fwd + rod's bearing check (`wing_spar_carrythrough.py`, this unit's + verification sweep) runs at **FOS 5.26 against the 5 MPa target of + 4.0**, so there is headroom to shave the boss locally without + reopening that gate. + 2. **Move the fore bay's flange rebate outboard of the boss** by + re-siting `BAY_STANDOFF['fore']` (currently 4.91 mm, LG-10.6) — + constrained by the same yawed panel-normal geometry LG-10.3/LG-10.6 + already fought, so re-siting it again risks reopening those. + 3. **Accept the proud material as a local relief cut in the printed + frame** deep enough to clear it, and resize the fore bay's bolt + pattern to sit outboard of the enlarged relief — a bolt-pattern + change, not just a pocket change, so it is a fore-bay redesign, not + a tweak. + + **Implemented (option 1), `airframe/blender-scripts/merge_cargo_interior.py` + `ROD_FWD_BOSS_OD_RELIEF`/`ROD_FWD_BOSS_RELIEF_LEN`.** A stepped, not + tapered, boss (a plain boolean union of two coaxial cylinders — a taper + would need a manifold-safe cone-frustum join this repo has no existing + helper for): full 17.9 mm OD along most of the fwd rod's 41 mm + fuselage-side embed, stepped down to a reduced OD for the last 25 mm + nearest the *_INB end of each side's boss. + + **The overlap sits at the *_INB end, not *_OUTB (the wall-facing end) as + the bay's canted plate frame might suggest at a glance** — measured + directly (boolean intersection of the unrelieved boss against the bay's + own rebate volume, both corners), it is at hull X [−98.7‥−77.1] (port) / + [−259.5‥−237.9] (stbd), against `ROD_FWD_PORT_INB`/`ROD_FWD_STBD_INB` + (−100 / −237), not `_OUTB` (−60 / −278). + + **The reduced OD needed was found empirically, not derived in closed + form** (the interference lives in the bay's own canted plate frame, not + this file's hull frame, and the relationship between OD and the tool's + reported "proud depth" was not monotonic in the way a first guess + suggests): + + | `ROD_FWD_BOSS_OD_RELIEF` | Worst proud depth | Worst volume | + | --- | --- | --- | + | 17.9 mm (unrelieved) | 12.000 mm | 1 909.15 mm³ | + | 12.0 mm | 12.000 mm (same depth, less volume) | 718.28 mm³ | + | **10.6 mm (selected)** | **cleared — "none: the rebate shaves the whole footprint"** | **0 mm³** | + + A partial reduction (12.0 mm) cut the interference *volume* by over half + but left the same 12.0 mm *depth* reading — the rod's own bore has to + run continuously through this station, so a boss that still reaches the + rebate's full depth anywhere along its centerline keeps reporting that + depth regardless of radius, until the OD shrinks enough that the whole + cross-section clears the footprint. 10.6 mm does: radial margin over the + 8.2 mm bore drops from 4.85 mm (spar-boss convention) to 1.2 mm — thinner, + but at this repo's own cited 1.16 mm minimum-wall figure (Rev R1a) plus a + hair of margin, and only over the 25 mm relieved length, not the rod's + full structural embed. + + **Re-verified 2026-08-25, final geometry:** `tools/landing_gear_wing_ + clearance.py --proud` reports zero proud material at both fore corners; + all 4 named CLEAR checks still pass; `tools/wing_root_deconflict.py` and + `tools/wing_spar_carrythrough.py` (fwd rod FOS unaffected — the bearing + check uses the rod's own diameter/embed, not the boss OD) both re-run + clean; `tools/validate_stls.py` passes on the re-merged shell. The fore + landing-gear bay frame is no longer blocked from printing on this + finding. + +- [x] **LG-26 — rear CF skid-rod bore does not run through the skid arm it's + meant to reinforce. CLOSED 2026-08-25 (owner-directed fix).** *(found + 2026-08-25, `docs/structural_analysis.md` §6.4 nose-high re-derivation.)* + Tracking the skid tube's actual cross-section continuously from the + middle/rear joint (Y=204) to the tip (Y=384) in the published + `rear_shell24_2mm_repaired.stl` showed its centerline far from the bored + station (X=-202): direct probe at Y=210 found the nearest material to + the bore was the **main horseshoe ring's wall** (2.1–3.5 mm away), not + the skid tube (13.2 mm away, outside the bore's clearance) — the rod was + bored through the wrong structure over the whole region where the + cantilever bending moment is largest. + + **Fix applied:** re-measured the tube's own hollow-cavity centerline + continuously across its full span, including the middle-shell portion + this finding's first pass didn't check (`middle_shell24_2mm_repaired.stl` + Y=188–202 — the tube isn't a separate feature below Y≈188 — plus + `rear_shell24_2mm_repaired.stl` Y=208–233). Port is stable across its + whole span; re-sited to (-223.7, 18.5). **Stbd is not stable** — its + measured center jumps ~10 mm at the print-split joint (≈-117 on the + middle side, ≈-127 on the rear side), too large for one straight 4 mm CF + rod to stay centered on both sides at once; re-sited to a deliberate + compromise center (-122.0, 19.0) that minimizes the worst-case miss + rather than perfectly centering on either side. Both shells re-verified: + `tools/validate_stls.py` 61/61 PASS; nearest material to the bore is now + 2.09–7.03 mm at every one of 8 sampled stations per side (was 13+ mm + everywhere) — the bore is inside the tube's cavity, not the ring wall, + everywhere checked. + + **What this fix does and does not achieve.** Re-running + `docs/structural_analysis.md` §6.4 with the rod now geometrically + coupled (credited via a parallel-EI split, not assumed at 0% or 100%) + found the rod's own contribution is small — a solid 4 mm CF rod is too + slender to meaningfully stiffen even this thin PETG shell (5.9% of the + moment once coupled) — so the nose-high FOS only moves from 3.27 to + 3.47, still short of the 4.0 target. **This finding is closed as a + geometry defect** (the rod now does what it was designed to do, + verified), **not as a load-case pass** — closing the FOS gap itself + required the separate 20% CF-PETG material decision recorded in §6.4 + (FOS 4.75 with the rod fix combined; 20% chosen over the source paper's + stronger 30% figure because a genuine 30%-CF retail filament could not + be verified to exist, while 20% is a real, verified commercial product), + tracked in the BOM/material-spec + update, not in this item. + + **Residual, not re-opened here:** the stbd compromise center is a real + improvement, not a perfect fit — a slicer/test-fit check before + fabrication is still warranted, and building the rod as two + independently-anchored segments (rather than one straight rod bridging + the ~10 mm stbd discontinuity) remains an option if the compromise + proves inadequate in practice. + **Remaining parts needing SCAD source creation then STL export:** - [ ] **Reconcile the remaining-parts list** — one known outstanding render: diff --git a/airframe/openscad/wings/wings_s1223_revo.scad b/airframe/openscad/wings/wings_s1223_revo.scad index 0471ba2b..ab9330ed 100644 --- a/airframe/openscad/wings/wings_s1223_revo.scad +++ b/airframe/openscad/wings/wings_s1223_revo.scad @@ -170,20 +170,36 @@ THICKNESS_SCALE = 1.0; // [1.0 = full S1223 t/c; 0.85–1.0 recommended range // (gives 1.17 mm). Measured by tools/wing_spar_station_fit.py; do not // hand-tune it. // +// U6 (2026-08-25): 1.45 → 1.56. The 1.447 figure above was measured against +// the PRE-U1 S1223 table (a hand-approximated set of coordinates). U1 +// replaced that table with the validated UIUC S1223 points, which are a +// genuinely different shape at 48.5 % tip chord — deeper near mid-chord, +// shallower aft, where this bore sits. Re-measuring wall-over-spar with +// tools/wing_internal_clearance.py against the corrected table found the tip +// wall had dropped to 0.82 mm (below the 1.16 mm floor) at the old 1.45 +// scale. 1.5505 is the new exact figure (verified: `Section(chord_tip, +// t_scale).depth(SPAR_BORE_STATION)/2 - SPAR_BORE_OD/2 == 1.16` at that +// scale); 1.56 is used for the same "not sitting on its own limit" margin +// (gives 1.19 mm). Root is unaffected (unchanged THICKNESS_SCALE, 2.46 mm +// wall there) -- this is purely a tip-airfoil-correction consequence. +// // This is now a THICKNESS-only multiplier in fact as well as in name — see // s1223_section() below. It no longer stretches the camber line, so the tip -// keeps S1223's canonical 8.12 % camber instead of being driven to 11.75 %. -// Tip t/c rises 13.45 % → 19.47 % (thickness only). +// keeps S1223's canonical camber instead of being driven up. +// Tip t/c is now ≈ 11.5 % at 1.56 (thickness only) -- see U6 note above; +// the "13.45 % → 19.47 %" figure below predates the U1 airfoil correction and +// is stale (kept in the historical record, not restated as current). // // CANON NOTE: this is an outer-mold-line change local to the wingtip; verify // against the canonical Serenity wing silhouette before committing to print -// (see TODO.md §1.1.2). Lower the value only if the bore stays skinned. +// (see TODO.md §1.1.2, U8 canon-check). Lower the value only if the bore +// stays skinned per tools/wing_internal_clearance.py. // UNVERIFIED BY CFD: the OpenFOAM study intended to quantify the drag penalty -// of a 19.5 % t/c tip at Re ≈ 2.1e5 is blocked on mesh generation +// of the thicker tip at Re ≈ 2.1e5 is blocked on mesh generation // (tools/wing_cfd_openfoam.py, WIP). The camber-preservation argument does // not depend on it, but the absolute penalty of the thicker tip is not yet // quantified. -THICKNESS_SCALE_TIP = 1.45; // [tip thickness multiplier; root stays THICKNESS_SCALE] +THICKNESS_SCALE_TIP = 1.56; // [tip thickness multiplier; root stays THICKNESS_SCALE] // ── Rotating tilt-spar bore (Rev R2 — unified 8 mm rotating spar) ──────────── // UNIFIED ROTATING SPAR (2026-07-18): the wing's single spar is now the 8 mm @@ -459,12 +475,122 @@ HALL_CABLE_STATION = 54.0; // [mm] chordwise station aft of LE — CONSTANT over function spar_tip_y() = midline_frac(SPAR_BORE_STATION / WING_CHORD_TIP) * WING_CHORD_TIP; -// ── Wing root fuselage tab ──────────────────────────────────────────────────── +// ── Wing root joint load path (KTD1/U5, 2026-08-24 refinement) ─────────────── +// CARGO-03c found the tenon under-strength as a STRUCTURAL joint (10.14 MPa +// bearing at ultimate vs. the repo's only CF-PETG figure, 5 MPa bond-limited, +// docs/structural_analysis.md §7.3 — FOS 0.49) and, per the owner's +// <15 MPa-fusion-strength decision rule, routed the load to a bonded CF rod +// instead of growing the tenon. A feasibility pass then found a SINGLE rod +// forward of the main spar works (Ø8.2 mm at 14 mm from LE) but a matching +// Ø8.2 mm AFT rod does not fit anywhere aft of the spar (the main spar bore's +// aft edge at 49.30 mm and the Hall/encoder conduit's fixed Rev S1c span +// 52.25..55.75 mm leave no room at any station without breaking the wall or +// the skin). A smaller Ø6.2 mm aft rod DOES fit, aft of the Hall conduit — +// see ROD_AFT_* below. So the tenon is now traded out of the load path +// entirely and replaced by a TWO-ROD couple (not a single rod vs. the tenon). +// +// TENON_LOAD_PATH selects which joint reacts the wing-root couple: +// "two_rod" (DEFAULT) — two bonded CF rods (below) react the couple; +// the tenon is reduced to a locating/index feature only. +// "enlarged_tenon" — the tenon alone reacts the couple, grown to the +// airframe's measured maximum envelope (39.2 x 20.1 mm, +// tools/wing_root_deconflict.py max_tenon_envelope()). +// Requires a CF-PETG fusion/bearing coupon test clearing +// >= 15 MPa (root TODO.md §1.1.4 LG-11) — NOT yet +// available, so this path is documented but NOT default. +// Kept as a named constant, not deleted, per KTD1: a future coupon result +// >= 15 MPa can swap the joint back to the tenon without re-deriving the +// sizing table. +TENON_LOAD_PATH = "two_rod"; // ["two_rod" | "enlarged_tenon"] + +// ── Wing root fuselage tab (locating/index feature under "two_rod"; full +// structural tenon under "enlarged_tenon") ──────────────────────────────── // The root face (Z=0) must interface with the fuselage wing slot. // VERIFY slot dimensions in fuselage hull STL before printing. -WING_ROOT_TAB_W = 30.0; // [mm] VERIFY — fuselage slot width in X -WING_ROOT_TAB_H = 20.0; // [mm] VERIFY — fuselage slot height in Y -WING_ROOT_TAB_L = 12.0; // [mm] VERIFY — insertion depth into fuselage slot +// +// "two_rod" (default): the two CF rods below react the entire wing-root +// couple, so the tab reverts to ITS OWN documented job — radial restraint +// and rotational location, not moment reaction. Only W and L shrink: those +// are the two dimensions that actually appear in the bearing-stress formula +// (sigma = F / (W . L/2), tools/wing_spar_carrythrough.py report_root_joint()) +// — H never did, it only sets the tab's vertical reach. W/L are sized like +// this repo's other non-structural locating dowels/bosses +// (docs/structural_analysis.md §7.1 boss-pin convention: 8 mm depth is the +// established "positive stop / 3-point kinematic location" figure for a +// joint that "carries no structural flight load"). +// +// H is DELIBERATELY left at its enlarged-tenon value, not shrunk: the S1223 +// section at this chordwise band is centred well ABOVE the chord line (the +// tab is centred ON the chord line, Y=0, per CARGO-03b's fixed datum) — real +// wing material at x=64.5 spans only Y +6.6..+15.7 mm +// (tools/wing_spar_station_fit.py), so a tab shorter than ~H=13 mm never +// reaches material at all and unions as a disconnected floating solid (found +// by trimesh body-count during verification: bodies=2, not 1). H=20 keeps +// the ~3.4 mm structural-era overlap into that material band that already +// made this connect cleanly; shrinking it would break the union, not the +// bearing stress (H was already not part of that calculation). +WING_ROOT_TAB_W_LOCATING = 12.0; // [mm] locating-tab width in X +WING_ROOT_TAB_H_LOCATING = 20.0; // [mm] locating-tab height in Y — see note above +WING_ROOT_TAB_L_LOCATING = 8.0; // [mm] insertion depth (§7.1 boss-pin depth) + +// "enlarged_tenon" (documented, gated off): the AS-BUILT structural sizing +// from CARGO-03c's first pass — 30 x 20 x 12 mm, FOS 0.49 against the 5 MPa +// bond-limited figure at that size. Retained verbatim (not the 39.2 x 20.1 +// mm envelope maximum, which needs the >=15 MPa fusion-strength coupon +// before it can be built) so the alternate branch still renders a real, +// previously-verified solid if selected. +WING_ROOT_TAB_W_ENLARGED = 30.0; // [mm] VERIFY — fuselage slot width in X +WING_ROOT_TAB_H_ENLARGED = 20.0; // [mm] VERIFY — fuselage slot height in Y +WING_ROOT_TAB_L_ENLARGED = 12.0; // [mm] VERIFY — insertion depth into slot + +WING_ROOT_TAB_W = (TENON_LOAD_PATH == "two_rod") ? + WING_ROOT_TAB_W_LOCATING : WING_ROOT_TAB_W_ENLARGED; +WING_ROOT_TAB_H = (TENON_LOAD_PATH == "two_rod") ? + WING_ROOT_TAB_H_LOCATING : WING_ROOT_TAB_H_ENLARGED; +WING_ROOT_TAB_L = (TENON_LOAD_PATH == "two_rod") ? + WING_ROOT_TAB_L_LOCATING : WING_ROOT_TAB_L_ENLARGED; + +// ── Wing root tie-rod couple (U5, "two_rod" path) ───────────────────────────── +// Two bonded CF rods react the ultimate root moment (14.60 N.m, +// airframe/fuselage-mid/WBS.md §1.1.1.2 CARGO-03c) as a couple. Each rod is a +// simple bonded pin (shear only, no moment restraint credited — the +// conservative idealisation, since the bond's rotational stiffness is not +// characterised) — see the couple-force derivation in that WBS.md section and +// tools/wing_spar_carrythrough.py report_root_joint(). Clearance bore = rod +// OD + 0.1 mm/side, matching the CF-ROD bonding convention already +// established for CF-ROD-4MM (docs/structural_analysis.md §6/§7: same +// pultruded-CF-rod-stock citation, West System 105/206 epoxy, cure 24 h +// before foam pour). +// +// Both rods are ROOT-ONLY embeds, not full-span like the main spar: the main +// spar must run full-span because it is ALSO the rotating tilt axis reaching +// the wingtip bearing — these tie rods only react the ROOT joint, so running +// them to the tip would add mass and risk fouling the tip bearing/gear/Hall +// pocket for no structural benefit. Same reasoning applied to both rods for +// consistency. +// +// FWD rod: Ø8.2 mm (8 mm CF rod + 0.1 mm/side), station 14 mm from LE +// (largest separation from the main spar on a healthy bore wall — measured +// 2.92 mm at Ø8.2, tools/wing_spar_station_fit.py). 40 mm wing-side embed. +ROD_FWD_D = 8.2; // [mm] fwd tie-rod clearance bore +ROD_FWD_STATION = 14.0; // [mm] chordwise station aft of LE +ROD_FWD_EMBED = 40.0; // [mm] wing-side embed depth (root face inward) + +// AFT rod: Ø6.2 mm (6 mm CF rod + 0.1 mm/side). A matching Ø8.2 mm aft rod +// does not fit at ANY aft station (main spar bore aft edge 49.30 mm and the +// Hall conduit's fixed 52.25..55.75 mm span leave no room); Ø6.2 mm fits aft +// of the Hall conduit. Station 62.0 mm from LE is the pick WITHIN the +// feasible 60..62 mm band: it maximises clearance margin to the Hall +// conduit's trailing edge (3.15 mm vs 1.15 mm at 60 mm) while the spar-bore +// margin stays ample throughout that band (7.6..9.6 mm) and root wall stays +// well above the repo's 1.16 mm floor (measured 1.72 mm at 62 mm, +// tools/wing_spar_station_fit.py --station 62 --bore 6.2). 40 mm embed +// alone gives FOS 3.945 against the 5 MPa allowable (just under the §3 FOS +// 4.0 target — see the couple-force derivation) so the embed is bumped to +// 42 mm, which clears at FOS 4.14. +ROD_AFT_D = 6.2; // [mm] aft tie-rod clearance bore +ROD_AFT_STATION = 62.0; // [mm] chordwise station aft of LE +ROD_AFT_EMBED = 42.0; // [mm] wing-side embed depth (root face inward) // ── Print chirality ─────────────────────────────────────────────────────────── // RENDER_SIDE = +1 → port (left) wing; RENDER_SIDE = -1 → starboard (right). @@ -481,85 +607,118 @@ $fn = 72; // ============================================================================= // ── S1223 Airfoil Coordinate Data ───────────────────────────────────────────── // ============================================================================= -// Normalised coordinates from UIUC Airfoil Database (Selig & Guglielmo 1997). -// x ∈ [0,1], y = local thickness ratio (positive = upper surface toward sky). +// Coordinates fetched live from the UIUC Airfoil Coordinates Database, +// `s1223.dat` (Selig), 2026-08-24 — REFERENCES.md REF-CAD-006. This is a +// VERBATIM re-split of the published 81-point Selig-format loop (one closed +// list, upper TE->LE then lower LE->TE) into the two ordered lists this +// file's s1223_section()/midline_frac() decomposition expects (upper LE->TE, +// lower TE->LE). No coordinate value, interpolation, or invented point was +// introduced — every (x, y) pair below appears verbatim in the fetched file. +// x in [0,1], y = local thickness ratio (positive = upper surface toward sky). // -// Format: closed polygon, upper surface LE→TE then lower surface TE→LE. -// OpenSCAD polygon() uses counterclockwise winding (positive fill). +// This table REPLACES the Rev R1 placeholder table, which was never traced to +// an actual fetch and crossed to negative thickness at x/c ~= 0.742 +// (WING-01, tools/wing_airfoil_integrity.py) -- a fabricated/reconstructed +// table, prohibited by root AGENTS.md SS4. // -// Accuracy note: interpolated from published data; matches database to ±0.001 -// chord units. Download s1223.dat from UIUC for production verification: -// https://m-selig.ae.illinois.edu/ads/coord/s1223.dat +// Format: closed polygon, upper surface LE->TE then lower surface TE->LE. +// OpenSCAD polygon() uses counterclockwise winding (positive fill). +// The two surfaces do not share an exact (0,0) leading-edge point -- neither +// does the source data, which is normal for a discretely sampled finite- +// radius leading edge (upper's LE-most point is [0.00005, 0.00178]; lower's +// is [0.00044, -0.00561]). tools/wing_airfoil_integrity.py excludes a +// LE_EXCLUDE = 0.005 band from the thickness check for exactly this reason. // ============================================================================= -// ── Upper surface points (LE x=0 → TE x=1) ─────────────────────────────────── +// ── Upper surface points (LE x=0 -> TE x=1) ────────────────────────────────── +// REF-CAD-006, s1223.dat rows 46 down to 1 (reversed to LE->TE order). S1223_UPPER = [ - [ 0.0000, 0.0000 ], // leading edge - [ 0.0050, 0.0163 ], - [ 0.0100, 0.0231 ], - [ 0.0150, 0.0284 ], - [ 0.0250, 0.0381 ], - [ 0.0350, 0.0472 ], - [ 0.0500, 0.0594 ], - [ 0.0650, 0.0706 ], - [ 0.0800, 0.0810 ], - [ 0.1000, 0.0936 ], - [ 0.1250, 0.1073 ], - [ 0.1500, 0.1189 ], - [ 0.1750, 0.1285 ], - [ 0.2000, 0.1362 ], - [ 0.2250, 0.1419 ], - [ 0.2500, 0.1455 ], // ← approx max thickness station (half-thickness perp. to camber) - [ 0.2750, 0.1472 ], - [ 0.3000, 0.1471 ], - [ 0.3250, 0.1454 ], - [ 0.3500, 0.1422 ], - [ 0.3750, 0.1378 ], - [ 0.4000, 0.1323 ], - [ 0.4250, 0.1260 ], - [ 0.4500, 0.1189 ], - [ 0.5000, 0.1033 ], - [ 0.5500, 0.0866 ], - [ 0.6000, 0.0696 ], - [ 0.6500, 0.0526 ], - [ 0.7000, 0.0361 ], - [ 0.7500, 0.0210 ], - [ 0.8000, 0.0082 ], - [ 0.8500, -0.0020 ], - [ 0.9000, -0.0089 ], - [ 0.9500, -0.0109 ], - [ 1.0000, 0.0000 ], // trailing edge + [ 0.00005, 0.00178 ], // leading-edge-most upper sample (source data; see note above) + [ 0.00155, 0.01033 ], + [ 0.00495, 0.01969 ], + [ 0.01028, 0.02954 ], + [ 0.01755, 0.03961 ], + [ 0.02694, 0.04966 ], + [ 0.03855, 0.05968 ], + [ 0.05223, 0.06965 ], + [ 0.06789, 0.07940 ], + [ 0.08545, 0.08879 ], + [ 0.10482, 0.09770 ], + [ 0.12591, 0.10598 ], + [ 0.14863, 0.11355 ], + [ 0.17286, 0.12026 ], + [ 0.19846, 0.12594 ], + [ 0.22541, 0.13037 ], + [ 0.25370, 0.13346 ], + [ 0.28347, 0.13505 ], + [ 0.31488, 0.13526 ], // <- max thickness station (source data) + [ 0.34777, 0.13447 ], + [ 0.38193, 0.13271 ], + [ 0.41721, 0.13011 ], + [ 0.45340, 0.12683 ], + [ 0.49025, 0.12303 ], + [ 0.52744, 0.11881 ], + [ 0.56465, 0.11425 ], + [ 0.60158, 0.10935 ], + [ 0.63798, 0.10412 ], + [ 0.67360, 0.09859 ], + [ 0.70823, 0.09277 ], + [ 0.74166, 0.08671 ], + [ 0.77369, 0.08044 ], + [ 0.80412, 0.07402 ], + [ 0.83277, 0.06749 ], + [ 0.85947, 0.06089 ], + [ 0.88406, 0.05427 ], + [ 0.90641, 0.04768 ], + [ 0.92639, 0.04116 ], + [ 0.94389, 0.03476 ], + [ 0.95884, 0.02853 ], + [ 0.97111, 0.02250 ], + [ 0.98075, 0.01646 ], + [ 0.98825, 0.01037 ], + [ 0.99417, 0.00494 ], + [ 0.99838, 0.00126 ], + [ 1.00000, 0.00000 ], // trailing edge ]; -// ── Lower surface points (TE x=1 → LE x=0) ─────────────────────────────────── +// ── Lower surface points (TE x=1 -> LE x=0) ────────────────────────────────── +// REF-CAD-006, s1223.dat rows 81 down to 47 (reversed to TE->LE order). S1223_LOWER = [ - [ 1.0000, 0.0000 ], // trailing edge - [ 0.9500, 0.0021 ], - [ 0.9000, 0.0063 ], - [ 0.8500, 0.0117 ], - [ 0.8000, 0.0175 ], - [ 0.7500, 0.0228 ], - [ 0.7000, 0.0270 ], - [ 0.6500, 0.0299 ], - [ 0.6000, 0.0313 ], - [ 0.5500, 0.0312 ], - [ 0.5000, 0.0297 ], - [ 0.4500, 0.0270 ], - [ 0.4000, 0.0233 ], - [ 0.3500, 0.0192 ], - [ 0.3000, 0.0149 ], - [ 0.2500, 0.0109 ], - [ 0.2000, 0.0073 ], - [ 0.1500, 0.0040 ], - [ 0.1000, 0.0012 ], - [ 0.0750, -0.0003 ], - [ 0.0500, -0.0022 ], - [ 0.0350, -0.0038 ], - [ 0.0250, -0.0053 ], - [ 0.0150, -0.0067 ], - [ 0.0100, -0.0074 ], - [ 0.0050, -0.0073 ], - [ 0.0000, 0.0000 ], // leading edge (closes polygon) + [ 1.00000, 0.00000 ], // trailing edge + [ 0.99825, 0.00115 ], + [ 0.99268, 0.00468 ], + [ 0.98255, 0.01060 ], + [ 0.96693, 0.01822 ], + [ 0.94573, 0.02624 ], + [ 0.91966, 0.03387 ], + [ 0.88928, 0.04088 ], + [ 0.85500, 0.04706 ], + [ 0.81729, 0.05219 ], + [ 0.77660, 0.05612 ], + [ 0.73344, 0.05872 ], + [ 0.68832, 0.05994 ], + [ 0.64176, 0.05976 ], + [ 0.59428, 0.05820 ], + [ 0.54639, 0.05534 ], + [ 0.49860, 0.05129 ], + [ 0.45139, 0.04618 ], + [ 0.40519, 0.04021 ], + [ 0.36044, 0.03358 ], + [ 0.31750, 0.02652 ], + [ 0.27673, 0.01928 ], + [ 0.23840, 0.01213 ], + [ 0.20278, 0.00535 ], + [ 0.17006, -0.00075 ], + [ 0.14020, -0.00563 ], + [ 0.11282, -0.00925 ], + [ 0.08787, -0.01202 ], + [ 0.06561, -0.01404 ], + [ 0.04627, -0.01532 ], + [ 0.03006, -0.01584 ], + [ 0.01718, -0.01550 ], + [ 0.00789, -0.01427 ], + [ 0.00264, -0.01120 ], + [ 0.00044, -0.00561 ], // leading-edge-most lower sample (source data; see note above) ]; // ── Combined polygon (counterclockwise: upper LE→TE, lower TE→LE) ───────────── @@ -642,9 +801,30 @@ module s1223_section(chord = 65.0, t_scale = THICKNESS_SCALE) { // ============================================================================= // ── Module: wing_solid ──────────────────────────────────────────────────────── // ============================================================================= -// Lofted tapered wing solid using hull() of root and tip cross-sections. -// The hull() creates a ruled surface between the two stations, approximating -// the tapered and swept wing. Valid for taper ratios > 0.4 (Serenity ≈ 0.65). +// REV S1d (2026-08-24, KTD4): true vertex-matched loft, NOT hull(). +// +// Why hull() was replaced: hull() takes the CONVEX HULL of the root and tip +// cross-section point clouds. With the corrected UIUC S1223 table +// (REF-CAD-006, see S1223_UPPER/S1223_LOWER above) the real section has a +// genuinely reflexed/concave lower surface aft of ~65% chord -- that is real +// S1223 geometry, not a table defect. `tools/wing_airfoil_integrity.py` +// reports the convex hull of the tabulated outline is 1.612x the true +// outline's area, over its 1.10x tolerance -- so a hull()-lofted solid would +// be measurably not the S1223 section the aero/mass analysis assumes (the +// reflex is filled in solid, changing wetted area, internal clearance, and +// mass). +// +// Replacement: a manual polyhedron() built from the two end-station point +// lists returned by s1223_scaled_pts() (the same list `s1223_section()` +// polygon()s). s1223_scaled_pts() always returns the SAME point count in +// the SAME order (46 upper + 35 lower = 81 pts, upper LE->TE then lower +// TE->LE) regardless of chord or t_scale -- only the scaled coordinate +// values differ between root and tip -- so root and tip are vertex-matched +// by construction and a straight quad-strip side wall between them is a +// faithful ruled loft of the TRUE (non-convex) outline, not its hull. +// Span-wise the loft is still linear between just the two stations (root, +// tip), same as the old hull() version -- only the per-station CHORDWISE +// cross-section fidelity changes, from convex-hull-approximated to exact. // // Coordinate system: X=chordwise (LE=0), Y=thickness, Z=spanwise (root=0, tip=SPAN). // The LE sweeps in +X by WING_SWEEP_LE over the span (aft sweep). @@ -656,21 +836,47 @@ module wing_solid() { sweep = WING_SWEEP_LE; // LE moves aft (+X) by this amount over span dihedral = WING_DIHEDRAL; // tip rises (+Y) by this amount over span - hull() { - // ── Root cross-section at Z = 0 ─────────────────────────────────── - // Extruded to 0.01 mm thin disc for hull input - translate([0, 0, 0]) - linear_extrude(height = 0.01) - s1223_section(chord = root_chord); - - // ── Tip cross-section at Z = span (swept + tapered + dihedral) ──── - // Leading edge swept aft by WING_SWEEP_LE; tip centred on same LE sweep. - // Tip uses THICKNESS_SCALE_TIP (local thickening for the spar bore — see - // parameter block); root uses THICKNESS_SCALE, so the loft tapers between. - translate([sweep, dihedral, span]) - linear_extrude(height = 0.01) - s1223_section(chord = tip_chord, t_scale = THICKNESS_SCALE_TIP); - } + // Normalized (chord-fraction) section point lists -- SAME topology + // (point count + winding order) at root and tip; only t_scale differs + // (THICKNESS_SCALE at root, THICKNESS_SCALE_TIP at tip, per the Rev S1b + // camber-preserving decomposition above). + root_pts2d = s1223_scaled_pts(THICKNESS_SCALE); + tip_pts2d = s1223_scaled_pts(THICKNESS_SCALE_TIP); + n = len(root_pts2d); // == len(tip_pts2d) by construction; asserted below + + assert(n == len(tip_pts2d), + "wing_solid(): root/tip section point counts diverged -- vertex-matched loft requires identical topology"); + + // Scale each normalized point to its station's chord and place it in 3D. + root_pts3d = [ for (p = root_pts2d) [ p[0] * root_chord, p[1] * root_chord, 0 ] ]; + tip_pts3d = [ for (p = tip_pts2d) + [ p[0] * tip_chord + sweep, p[1] * tip_chord + dihedral, span ] ]; + + pts = concat(root_pts3d, tip_pts3d); + + // Root cap (Z=0): reversed winding so its outward normal points -Z (away + // from the solid, toward the fuselage). Tip cap (Z=span): original CCW + // winding so its outward normal points +Z (toward the wingtip). This is + // the standard prism-cap convention for a manually-built polyhedron(). + root_cap = [ for (i = [n - 1 : -1 : 0]) i ]; + tip_cap = [ for (i = [0 : n - 1]) n + i ]; + + // Side wall: two triangles per matched root/tip vertex pair, wound + // outward. Explicit triangulation (not a quad) because the root and + // tip outlines differ (taper + the S1223 reflex), so the quad + // [i, i2, n+i2, n+i] is not guaranteed planar -- OpenSCAD's own + // nonplanar-quad fallback triangulator was found to produce a + // non-watertight mesh (Volumes: 3, trimesh is_watertight: False) on + // this section, so the diagonal split is done here explicitly instead. + side_faces = [ for (i = [0 : n - 1]) + let (i2 = (i + 1) % n) + each [ + [ i, i2, n + i ], + [ i2, n + i2, n + i ], + ] + ]; + + polyhedron(points = pts, faces = concat([root_cap], [tip_cap], side_faces), convexity = 6); } @@ -960,7 +1166,20 @@ module wing_tip_fixed_gear_inserts() { } // ============================================================================= // A positive protrusion at the root face (Z = 0) that inserts into the fuselage // wing slot. VERIFY WING_ROOT_TAB_* parameters against fuselage hull STL before -// printing. The tab provides radial restraint; the CF spar carries spanwise load. +// printing. +// +// CORRECTED 2026-08-24 (U5/KTD1): under TENON_LOAD_PATH = "two_rod" (default) +// the tab is RESTORED to its originally-intended, correct role — radial +// restraint and rotational location only. It does NOT react the wing-root +// couple; the two CF tie rods (wing_root_tie_rod_fwd_bore() / +// wing_root_tie_rod_aft_bore(), cut in wing_one_side()) do that. This +// corrects the stale comment that used to read "The tab provides radial +// restraint; the CF spar carries spanwise load" — that was written when the +// spar carried through the fuselage; under SPAR-01 it terminates at the wall +// on its own bearing and never touched this joint anyway, and CARGO-03c then +// (temporarily, before this fix) made the tab itself react the moment. Under +// TENON_LOAD_PATH = "enlarged_tenon" the tab reverts to that structural role +// at its documented AS-BUILT size — see the WING_ROOT_TAB_* selection above. // // The tab is centred chordwise at 50% root chord, at Y = 0 (chord line). module fuselage_root_tab() { @@ -973,6 +1192,35 @@ module fuselage_root_tab() { } +// ============================================================================= +// ── Module: wing_root_tie_rod_fwd_bore / wing_root_tie_rod_aft_bore ────────── +// ============================================================================= +// U5 (KTD1 "two_rod" path): bonded CF tie-rod clearance bores that react the +// wing-root couple as a two-point system, replacing the tenon's former +// structural role. Each is a straight, ROOT-ONLY bore (does NOT run to the +// tip — see the rationale in the ROD_FWD_*/ROD_AFT_* parameter block above), +// centred on the S1223 camber midline at its own chordwise station exactly +// like spar_bore()/cableway_bore(), running from just outboard of the root +// face inward (+Z) by the rod's own embed depth. +// +// Matching bosses/bores on the fuselage side live in +// airframe/blender-scripts/merge_cargo_interior.py (ROD_FWD_*/ROD_AFT_*), +// mirroring the PORT_INB/PORT_OUTB main-spar-boss embed pattern. +module wing_root_tie_rod_fwd_bore() { + xc = ROD_FWD_STATION; + yc = midline_frac(xc / WING_CHORD_ROOT) * WING_CHORD_ROOT; + translate([xc, yc, -1.0]) + cylinder(r = ROD_FWD_D / 2, h = ROD_FWD_EMBED + 1.0, $fn = 32); +} + +module wing_root_tie_rod_aft_bore() { + xc = ROD_AFT_STATION; + yc = midline_frac(xc / WING_CHORD_ROOT) * WING_CHORD_ROOT; + translate([xc, yc, -1.0]) + cylinder(r = ROD_AFT_D / 2, h = ROD_AFT_EMBED + 1.0, $fn = 32); +} + + // ============================================================================= // ── Module: wing_one_side ───────────────────────────────────────────────────── // ============================================================================= @@ -1016,6 +1264,15 @@ module wing_one_side() { // ── Harness cableway (2× Ø7 conduits for EDF power + signal) ────── cableway_bore(); + + // ── Wing-root tie-rod couple (U5, "two_rod" path only) ───────────── + // Replaces the tenon's former structural role; see the module docs + // above and the couple-force derivation in + // airframe/fuselage-mid/WBS.md §1.1.1.2 CARGO-03c. + if (TENON_LOAD_PATH == "two_rod") { + wing_root_tie_rod_fwd_bore(); + wing_root_tie_rod_aft_bore(); + } } } diff --git a/airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl b/airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl index ed9855bb..fc9296ad 100644 Binary files a/airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl and b/airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl differ diff --git a/airframe/stls/fuselage/dorsal_antenna_fin.stl b/airframe/stls/fuselage/dorsal_antenna_fin.stl index 2cd7df3b..06bab089 100644 Binary files a/airframe/stls/fuselage/dorsal_antenna_fin.stl and b/airframe/stls/fuselage/dorsal_antenna_fin.stl differ diff --git a/airframe/stls/fuselage/head_shell24_2mm_repaired.stl b/airframe/stls/fuselage/head_shell24_2mm_repaired.stl index a3a0810a..66988052 100644 Binary files a/airframe/stls/fuselage/head_shell24_2mm_repaired.stl and b/airframe/stls/fuselage/head_shell24_2mm_repaired.stl differ diff --git a/airframe/stls/fuselage/middle_shell24_2mm_repaired.stl b/airframe/stls/fuselage/middle_shell24_2mm_repaired.stl index ce8d31f8..d1c24314 100644 Binary files a/airframe/stls/fuselage/middle_shell24_2mm_repaired.stl and b/airframe/stls/fuselage/middle_shell24_2mm_repaired.stl differ diff --git a/airframe/stls/fuselage/rear_shell24_2mm_repaired.stl b/airframe/stls/fuselage/rear_shell24_2mm_repaired.stl index 8e7e36d5..4f627b88 100644 Binary files a/airframe/stls/fuselage/rear_shell24_2mm_repaired.stl and b/airframe/stls/fuselage/rear_shell24_2mm_repaired.stl differ diff --git a/airframe/stls/nacelles/edf_aft_spider_sleeve.stl b/airframe/stls/nacelles/edf_aft_spider_sleeve.stl index f2a9f20a..e9db6419 100644 Binary files a/airframe/stls/nacelles/edf_aft_spider_sleeve.stl and b/airframe/stls/nacelles/edf_aft_spider_sleeve.stl differ diff --git a/airframe/stls/nacelles/edf_stator_sleeve.stl b/airframe/stls/nacelles/edf_stator_sleeve.stl index 4d3001c0..28f6a74a 100644 Binary files a/airframe/stls/nacelles/edf_stator_sleeve.stl and b/airframe/stls/nacelles/edf_stator_sleeve.stl differ diff --git a/airframe/stls/wings/wing_port_s1223_revo.stl b/airframe/stls/wings/wing_port_s1223_revo.stl index 7188f416..ff4aa6c1 100644 Binary files a/airframe/stls/wings/wing_port_s1223_revo.stl and b/airframe/stls/wings/wing_port_s1223_revo.stl differ diff --git a/airframe/stls/wings/wing_stbd_s1223_revo.stl b/airframe/stls/wings/wing_stbd_s1223_revo.stl index bd33cd2f..7884715e 100644 Binary files a/airframe/stls/wings/wing_stbd_s1223_revo.stl and b/airframe/stls/wings/wing_stbd_s1223_revo.stl differ diff --git a/airframe/wings-nacelles/TODO.md b/airframe/wings-nacelles/TODO.md index 745a7aac..600df2e8 100644 --- a/airframe/wings-nacelles/TODO.md +++ b/airframe/wings-nacelles/TODO.md @@ -16,18 +16,13 @@ ## §1.1.2 — Wings → full detail: `WBS.md` §1.1.2 -- [ ] wing_nacelle_pylon_revo.stl -- [ ] wings_s1223_revo.stl -- [ ] Re-render + re-bake both wings (Rev S1b OML + S1c Hall) -- [ ] ★ WING-01 S1223 section self-intersects at x/c 0.742 (BLOCKER) -- [ ] SPAR-01 spars stop at the wall; CF thwarts fore/aft of bay -- [ ] SPAR-02 DS3225 24.5 vs 25 kgf·cm req (re-derive); RAIL-2 2.3A -- [ ] Canon-check tip thickness/spar station vs silhouette +- [ ] SPAR-02 mounting bolt pattern — measure real SPT5425LV ear span/holes ## §1.1.3 — Nacelles → full detail: `WBS.md` §1.1.3 - [ ] [OPEN — DESIGN] Nozzle drive protrudes ~10 mm past nacelle bore (routing) - [ ] [OPEN — VERIFY] AK7455 off-axis bench-cal / wing pocket 4x4 §1.1.3.6 +- [ ] serenity_render_views.py still refs stale nacelle_nozzle_iris.stl --- \ No newline at end of file diff --git a/airframe/wings-nacelles/WBS.md b/airframe/wings-nacelles/WBS.md index faa01454..453f423f 100644 --- a/airframe/wings-nacelles/WBS.md +++ b/airframe/wings-nacelles/WBS.md @@ -29,8 +29,8 @@ - **[x]** Re-check root-tab center position: with 129 mm chord the tab centers at hull Y ≈ +57.5 mm (was +73.5 mm); confirm mortise center in cargo SCAD matches - **[x]** Verify wing TE position (hull Y≈+122 mm port, +117 mm stbd) clears cargo-section aft interior features; cargo aft boundary is hull Y≈+132 mm — 10 mm clearance -- [ ] **SPAR-01 — spars do NOT carry through the fuselage; adopt the two-bearing - overhung shaft + CF thwart pair.** *(owner direction 2026-08-23: the 8 mm steel +- [x] **SPAR-01 — spars do NOT carry through the fuselage; adopt the two-bearing + overhung shaft + CF thwart pair. CLOSED 2026-08-25 (U3/U4).** *(owner direction 2026-08-23: the 8 mm steel spars rotate **independently**, driven by the nacelle servos, on a wingtip bearing and a fuselage-side bearing. Verified by `tools/wing_spar_carrythrough.py`.)* **Resolves CARGO-01.** @@ -137,14 +137,40 @@ - Retire or re-scope the Y +30 cargo ring in `bom_revS.csv` and `docs/structural_analysis.md` §5 rather than finalising its PROVISIONAL DXF. - **Open sub-steps:** - - [ ] Owner confirms the thwart stations (Y −40 / +118) before geometry work. - - [ ] Re-cut the shell: spar bore → bearing seat, terminate at the wall. - - [ ] Author the two thwarts + their landing pads; re-run the cargo merge. - - [ ] Re-verify with `cargo_bay_envelope.py` and `wing_spar_carrythrough.py`. - - [ ] Update `TILT_SPAR_ANALYSIS.md` §1/§3.2 and `structural_analysis.md` §5. + **CLOSED 2026-08-25 (U3/U4).** Owner confirmed the Y −40/+118 stations + (KTD2). The shell's spar interface is re-cut to an F688ZZ bearing seat + terminating at the wall (U3, `7bfccd3`). The two CF thwart locating + pockets are authored in `add_structural_features.py` `RING_POCKETS` + (`cargo_Yn40`, `cargo_Y118`, same 4-slab groove pattern as the existing + ring frames — a bonded CF-PLATE-2MM part, not a printed solid) and wired + into `merge_cargo_interior.py`'s negatives; the superseded `cargo_Y30` + pocket is gated off (`RING_Y30_ENABLED = False`), not deleted, per this + repo's KTD1-style "keep documented" convention. Re-merged and + re-verified against the published shell: + + | Gate | Result | + | --- | --- | + | `merge_cargo_interior.py` | watertight, 1 body, 910,470 faces, 306,626 mm³ | + | `tools/validate_stls.py` | 62/62 PASS | + | `tools/cargo_bay_envelope.py` | PASS — 4×3×3 in payload fits | + | `tools/wing_spar_carrythrough.py` | fore FOS 8.5, aft FOS 8.7 (unchanged from the analysis above) | + | `tools/wing_root_deconflict.py` | CLEAR | + | `tools/landing_gear_wing_clearance.py --proud` | CLEAR (4/4); LG-25 proud-material finding closed (`airframe/landing-gear/WBS.md`) | + + `docs/TILT_SPAR_ANALYSIS.md` §1/§3.2 and `docs/structural_analysis.md` §5 + updated to point at the two-thwart closure instead of the single Y+30 + ring (see those files' own changelog). + + **Open sub-step, unchanged from before this closure:** + - [ ] ASTM D3039/D695 coupon test for the CF-PLATE-2MM bending allowable + (root `TODO.md` §0.8) — the FOS 8.5/8.7 above stands on the + conservative 300 MPa stand-in, not a certified figure. - [ ] **SPAR-02 — bulkhead servo mounts: deconflicted, but the pad is undersized.** + **2026-08-25 status: torque re-derivation and current-rail resizing sub-items + are CLOSED (see item 1/2 below) — DS3225 stands, no part change; remaining + open work is the mounting bolt-pattern verification (item further below), + unrelated to load/power sizing.** *(owner direction 2026-08-23: 25 kgf·cm+ servos inside the fuselage, against the port and starboard bulkheads, each driving one spar and its nacelle. Checked by `tools/nacelle_servo_deconflict.py`, which pulls every neighbour live from @@ -268,9 +294,39 @@ §2 of the same analysis records the pivot as being **at the nacelle CG** — which nulls the gravity moment by design and leaves only aero and inertia. A 2 % gap against a possibly-stale requirement is not worth a part change. - 2. **Stall current is now cited, and it is higher than the budget.** 1.9 A @ - 5 V / **2.3 A @ 6.8 V** (DS3225), against the 1.2 A placeholder RAIL-2 was - sized on — about 1.9×. RAIL-2 must be re-checked per tilt servo. + + **Re-derived 2026-08-25 (`docs/TILT_SPAR_ANALYSIS.md` §2.1) — DONE, DS3225 + STANDS.** Gravity is nulled to within a 0.00185 N·m (0.019 kgf·cm) bound + on the two asymmetric off-axis parts (spar crank + pushrod; the axial CG + coordinate is exact by construction, `PIVOT_Z` was set equal to the + computed CG_Z). Inertia, from the mass table's own 11-item moment of + inertia about the pivot (I = 7.189e-4 kg·m²) and the repo's *only* cited + tilt-transition figure (stale Phase-3 145°/500 ms slew test, triangular- + profile bound, ×6 for the 4 g/1.5× ultimate convention) is ≈ 0.175 N·m + (1.78 kgf·cm). **Grounded total ≈ 1.80 kgf·cm — 7.3 % of DS3225's cited + 24.5 kgf·cm at 6.8 V**, a wide margin. Aero moment about the tilt axis + could not be grounded (no nacelle Cd/frontal-area/dynamic-pressure figure + exists anywhere in the repo) and is left an explicit open item, not + assumed zero — but it would need to be roughly an order of magnitude + larger than the wing's own cited lift/thrust figures to threaten this + margin. **DS3225 clears the actual (aero+inertia) requirement by a wide + margin; the old ≥25 kgf·cm figure was itself the stale artifact. No + servo change on load grounds.** + 2. **Stall current is now cited, and it is higher than the budget — but not + RAIL-2's budget.** 1.9 A @ 5 V / **2.3 A @ 6.8 V** (DS3225). **Correction, + 2026-08-25:** the "1.2 A placeholder RAIL-2 was sized on" language here and + in `REFERENCES.md`/`current-specification/bom_revS.csv` was a citation + error — `RAIL-2` (`5V_OBS`, `docs/POWER_DISTRIBUTION.md` §3.2.1/§11.1) is + the Flight Engineer payload rail feeding the **Observer vision boards and + the cargo-winch servo** (`docs/CARGO_WINCH_SPECIFICATION.md` §5.4); its + 1.2 A figure is the STS3215/SPT5425LV-era **winch-servo** placeholder, not + a tilt-servo budget. The nacelle tilt servos are powered from the + separate **6 V servo bus** (`docs/POWER_DISTRIBUTION.md` §3.3, "PDB 6 V + BEC output" in §4) which carried forward a DS3218MG-era 1.5 A stall + figure per servo. That 6 V rail — not RAIL-2 — is the one resized here + to DS3225's cited 2.3 A stall (see `docs/POWER_DISTRIBUTION.md` §3.3/§3.4 + for the corrected figures). RAIL-2 itself is unaffected by the DS3225 + swap and is left at its existing winch-servo-driven 1.2 A placeholder. Original open item, now partly closed: @@ -413,8 +469,9 @@ 3. Take the lead out through the **nacelle** side instead of back down the wing, if the encoder can be read from a harness that stays outboard. -- [ ] **★ WING-01 — the tabulated S1223 section is not a valid airfoil: the - surfaces cross at x/c 0.742 and the outline self-intersects.** +- [x] **★ WING-01 — the tabulated S1223 section is not a valid airfoil: the + surfaces cross at x/c 0.742 and the outline self-intersects. CLOSED + 2026-08-25 (U1/U2/U6).** *(owner asked 2026-08-23: "verify that the airfoil doesn't create a zero thickness point that would cause a gap partway toward the trailing edge, as some of the drawings show." It does. Gated by @@ -467,23 +524,34 @@ | 0.95 | −0.0109 | +0.0109 | −0.0218 | | 1.00 | 0.0000 | 0.0000 | 0.0000 | - **This item is NOT closed by a fix, deliberately.** Correcting it means - replacing the coordinate table, and root `AGENTS.md` §4 forbids sourcing that - from memory — the Selig column above is a comparison, not a transcription to - paste in. The table must come from a validated source (UIUC Airfoil - Coordinates Database), be added to `REFERENCES.md` with a validated URL, and - only then replace `S1223_UPPER`/`S1223_LOWER`. - - **Open sub-steps:** - - [ ] Obtain S1223 coordinates from the UIUC database; add a `REF-CAD-*` - entry with a validated URL and the retrieval date. - - [ ] Replace both tables; `tools/wing_airfoil_integrity.py` must reach PASS. - - [ ] Decide `hull()` vs a true loft. Even with a correct table, `hull()` - convexifies away S1223's concavity — check the ratio the gate reports and - move to a swept/lofted solid if it stays above tolerance. - - [ ] Re-render and re-bake both wings; re-run `wing_internal_clearance.py` - and `wing_root_deconflict.py` against the corrected section. - - [ ] Re-derive wing mass and re-check the §1.1.2 aero figures. + **CLOSED 2026-08-25 (U1/U2/U6).** `S1223_UPPER`/`S1223_LOWER` replaced + with validated UIUC Airfoil Coordinates Database (Selig) coordinates, + cited as **REF-CAD-006** in `REFERENCES.md` (`39d8b9e`). + `tools/wing_airfoil_integrity.py` now **PASSES** all 3 checks: positive + thickness across the chord, a valid simple polygon, and — since check 3 + (KTD4) — no `hull()` masking to report a ratio for at all. + + **KTD4 resolved against a true loft, not `hull()`.** The corrected + table's real concavity (a reflexed lower surface aft of ≈65 % chord) + convexified at **1.612×** under `hull()`, over the gate's tolerance, so + `wing_solid()` was rewritten to loft a manual `polyhedron()` from the + same `s1223_scaled_pts()` list the integrity gate already validates — + the built cross-section **is** the tabulated outline now, with no + convex-hull approximation and no area-ratio check needed (`cd3c8db`). + + Both wings re-rendered and re-baked (U6, `a156aca`): each wing STL is + **70,069.5 mm³**, watertight, 1 body. `tools/wing_internal_clearance.py` + and `tools/wing_root_deconflict.py` both re-run clean against the + corrected section (see this unit's re-verification table above and the + U8 sweep below). + + **Not closed by this fix — carried forward, not silently dropped:** + re-deriving wing mass from the corrected volume needs an infill % + convention for the wing print (the existing wing STLs have no + `bom_revS.csv` line to inherit one from, unlike the fuselage shells' + 0.20 mm/8% gyroid convention) — logged as a follow-up BOM item, not + fabricated here. No §1.1.2 aero figure in this repo cites the old + convex-hull volume, so none needs correcting as a consequence. ##### 1.1.2.1 *Rev R1a — spar straightened + camber-centered + EDF cableway (2026-07-07)* @@ -599,9 +667,105 @@ is committed WIP. The camber-preservation argument above does not depend on CFD; the absolute penalty of the thicker tip does. -- [ ] **[OPEN] Canon-check `THICKNESS_SCALE_TIP` / `SPAR_BORE_STATION` against the - Serenity wing silhouette** before print — carried over from the resolved item - above, and now more pointed, since the tip is thicker than when it was raised. +- [x] **Canon-check `THICKNESS_SCALE_TIP` / `SPAR_BORE_STATION` against the + Serenity wing silhouette — CLOSED 2026-08-25 (U8).** Carried over from the + resolved item above, and made more pointed by the U6 re-derivation + (`THICKNESS_SCALE_TIP` 1.45 → 1.56). + + **What was actually checked, and why not in FreeCAD against a 3D + reference mesh.** Confirmed on disk before measuring anything: + `docs/references/nick-henning/` holds nine `.jpg` renders (REF-CAD-002) + and `docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf` + (REF-CAD-003) is a 20-page scanned blueprint set — **neither is a 3D + mesh**. `REF-CAD-004` (misubisu Thingiverse) is the only 3D geometry in + the reference hierarchy, and it is explicitly the **lowest**-authority + source, already superseded as the hull/wing starting point. There is + therefore no 3D reference geometry to import into FreeCAD and diff + against — doing so would mean fabricating a comparison that did not + happen. What follows is a code-level measurement of the built wing + against a **visual** reading of REF-CAD-002/003, which is what the + source material actually supports. + + **Built wing, measured (`tools/wing_airfoil_variants.py`, thickness-only + decomposition, the strategy actually built per Rev S1b):** + + | Station | t/c | Camber max | x/c of max thickness | + | --- | --- | --- | --- | + | root (`THICKNESS_SCALE` = 1.0) | 12.14 % | 8.67 % | 19.8 % | + | tip (`THICKNESS_SCALE_TIP` = 1.56, as-built) | **18.94 %** | 8.67 % (unchanged) | 19.8 % | + + `SPAR_BORE_STATION` = 45.15 mm = **35.0 % root chord / 48.5 % tip chord** + (constant mm station, not a chord fraction — see the Rev S1b note above). + + **What REF-CAD-002/003 actually show, and the resulting scope of this + check.** `nick-henning-uvdisplay-wing.jpg` (REF-CAD-002) and QMx Sheet 4 + "Dorsal Surface Plan View" (REF-CAD-003, PDF page 6) both depict + Serenity's "wing" as a **flat, boxy nacelle pod** — vertical panel faces, + hard chines, an aft engine housing — not a swept, thin aerodynamic + airfoil. Canon defines **no internal cross-section, no thickness + ratio, and no numeric spar station** for this feature; it is a + production model/CGI asset with a load-bearing external shape only. The + S1223 section, the 12.14 %/18.94 % t/c, and `SPAR_BORE_STATION` are all + **this project's own aerodynamic engineering additions** to give the + fictional shape a functioning lifting surface — they have no canon + figure to be checked against, and this item does not claim one. + + **What canon DOES constrain, and was already fixed independent of this + unit:** the wing **planform** — root chord 129 mm, tip chord 93 mm, zero + LE sweep (Rev R1, 2026-06-14, table above, §1.1.2) — was derived from the + QMx dorsal plan view and is unchanged by any of U1–U7's airfoil-section + work. Visually cross-checking the current planform against + `nick-henning-uvdisplay-wing.jpg`'s wing-pod silhouette and QMx Sheet 4: + proportions (chord taper ratio ≈0.72, stub span, hard-edged root-to-pod + transition) are consistent with both references. No delta is computed + here because Rev R1's planform derivation predates and is outside this + plan's scope (WING-01/SPAR-01/SPAR-02 are section/structure fixes, not a + planform re-derivation) — this check confirms U1–U7 did not disturb it, + which is the only claim R8 requires. + + **Delta, stated explicitly per R8/the plan's Test Scenarios (not + omitted even though it is not a numeric mismatch):** delta on t/c and + spar station vs. canon is **not quantifiable — zero reference figures + exist to diff against**, which is itself the finding, not a PASS on a + numeric tolerance. Delta on planform (the one canon-constrained + quantity) is **0 mm / 0°** — unchanged from Rev R1 by this plan. + +- [x] **U8 mating-verification pass and R9 gate sweep — CLOSED 2026-08-25.** + Same substitution rationale as the canon-check above: this repo has no + literal-FreeCAD numeric-verification precedent anywhere in its + toolchain (`airframe/FreeCAD-scripts/serenity_assembly.py` is a hull- + frame PLACEMENT script, not a clearance gate) — every other mating/ + interference check in this repo (`wing_root_deconflict.py`, + `landing_gear_wing_clearance.py`, `cargo_bay_envelope.py`) is a + trimesh-based numeric probe against the published STLs, and this unit + follows that established pattern rather than introduce a new tool + family. `wing_root_deconflict.py` is extended (this session) with an + explicit probe for the U5 two-rod bores — previously unmodeled — using + the same camber-midline convention as its existing bore checks; each + rod's own fuselage-side embed span is used (not the wider main-spar + span) so the probe doesn't read solid wall beyond a root-only rod's + real embed as a false blockage. + + **Full R9 gate sweep, final geometry (2026-08-25):** + + | Gate | Result | + | --- | --- | + | `tools/wing_airfoil_integrity.py` | PASS — valid polygon, positive thickness, no `hull()` masking to check | + | `tools/wing_internal_clearance.py` | PASS — all bores clear each other, the skin, and the wingtip pad | + | `tools/wing_root_deconflict.py` | CLEAR — incl. new fwd/aft tie-rod bore probe, 0 mm³ blocked everywhere | + | `tools/wing_spar_carrythrough.py` | fwd rod FOS 5.26, aft rod FOS 4.14 (both ≥ 4.0 target); thwart FOS 8.5/8.7 | + | `tools/cargo_bay_envelope.py` | PASS — 101.6×76.2×76.2 mm payload fits (170.6×106.0×150.7 mm measured bay) | + | servo pad/body/horn deconfliction | CLEAR (folded into `wing_root_deconflict.py` — no standalone `nacelle_servo_deconflict.py` exists in this repo; WBS.md's own prose elsewhere already notes the servo PAD probe living there) | + | `tools/landing_gear_wing_clearance.py --proud` | CLEAR, 4/4 named checks, zero proud material — see **LG-25** (`airframe/landing-gear/WBS.md`) | + | `tools/validate_stls.py` | 62/62 PASS, all watertight | + + All gates PASS/CLEAR against the final, published, re-merged geometry + (not against source scripts alone, per this unit's own verification + contract). The `--proud` diagnostic first found 12.0 mm of proud material + at the fore bay corners (U5's new tie-rod boss standing into the LG bay's + flange rebate footprint) — tracked and closed as **LG-25** in the same + session, via a local boss relief (`ROD_FWD_BOSS_OD_RELIEF`), not silently + re-closed without a note. ## §1.1.3 — Nacelles @@ -624,8 +788,31 @@ file (2592/2592 verts, identical). **Pre-existing finding, not caused by today's changes:** `edf_stator_sleeve.stl` is not 2-manifold (OpenSCAD itself warns "may not be a valid 2-manifold" on render) — logged here - per CLAUDE.md's mesh-verification-finding requirement; not fixed in this - pass (unrelated to the nozzle/gear-train work above). + per CLAUDE.md's mesh-verification-finding requirement. + + **CLOSED 2026-08-25** — surfaced again as "The mesh data structure has + some defects" (5 objects, ×2 dialogs each in the FreeCAD GUI = 10) when + reopening `airframe/freecad/assembly/SerenityAssembly.FCStd` (the file + still opened underneath the warnings — confirmed headless via + `freecadcmd` and with `Gui` active under `xvfb-run`, all 34 view + providers created — but the dialogs are a bad user experience and the + defect is real, not cosmetic). Root cause, per-body: `edf_stator_sleeve. + stl` and `edf_aft_spider_sleeve.stl` each carry the main sleeve body plus + 3-4 small keying-tab bodies that touch it at coincident vertices (min + distance 0.0, confirmed) but were never welded into the same shell by + OpenSCAD's STL export, leaving locally non-manifold/overlapping facets + at the seams. Fixed by a `manifold3d` boolean union of the mesh's own + split bodies (`Manifold.__add__`, the same primitive + `merge_cargo_interior.py` already uses throughout) — this is a real + topology fix, not a masking one: it measurably dropped 12/12 duplicate + seam facets (stator 6490→6478, aft sleeve 2748→2736) and both files are + now `trimesh`-watertight overall (each was already watertight per body; + the whole file was not). The tabs remain separate solids after the fix + (still 5/4 bodies under `mesh.split()`) — by design, not a residual + defect: manifold3d's own validity check is on the whole set, not on + single-body connectivity. `airframe/stls/fuselage/dorsal_antenna_fin.stl` + (unrelated part, same symptom) is fixed alongside — see + `dorsal_antenna_fin.stl — MESH FIX 2026-08-25` below. ##### 1.1.3.1 *Nozzle* @@ -681,6 +868,28 @@ the intervening gaps at +2.7 mm radius. Confirm the residual step is acceptable for the "smooth, low-turbulence exit" goal by bench/CFD before flight; if not, the alternative is a scarfed (tapering-thickness) seal. + - [x] **CLOSED 2026-08-25 — the FreeCAD assembly and its Makefile were + importing the pre-Rev-T3 `nacelle_nozzle_iris.stl`** (2026-07-19, single + combined render, `FLAP_PHI` not yet exposed — predates this shingle fix + by three weeks), found while wiring per-side nozzle petal state to + `airframe/FreeCAD-scripts/serenity_assembly.py`'s new nacelle-tilt + config. `airframe/FreeCAD-scripts/Makefile` built only that stale + target and never built `nacelle_nozzle_flap_seal.stl` at all. + Fixed: the assembly now imports `nacelle_nozzle_iris-closed.stl` + (petals shut, `FLAP_PHI = PHI_CLOSED`) for a 0°-tilt nacelle and + `nacelle_nozzle_iris-open.stl` (petals full open, `FLAP_PHI = + PHI_OPEN`) for 90°, picked by threshold — not a continuous + interpolation; an intermediate tilt would need a fresh `openscad` + render at a computed `FLAP_PHI`, which this script does not invoke. + Both committed STLs re-verified byte-identical (face count + volume) + against a fresh render from the current SCAD. Makefile gained rules + for `-closed.stl`/`-open.stl`/`nacelle_nozzle_flap_seal.stl` and + dropped the stale bare-name target. + **Not fixed, flagged for follow-up:** + `airframe/blender-scripts/serenity_render_views.py` still references + the stale bare `nacelle_nozzle_iris.stl` for its overview-image + pipeline (a different, non-FreeCAD tool) — untouched here since it + was out of scope for the tilt-config task that surfaced this. - **Rev T (2026-07-18) — Option B pushrod drive adopted** (user decision; `docs/NOZZLE_DRIVE_TRADE.md`). Supersedes the Rev S1 internal-ring gear drive. diff --git a/airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl b/archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl similarity index 100% rename from airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl rename to archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl diff --git a/avionics/TODO.md b/avionics/TODO.md index a1be353e..09dafa65 100644 --- a/avionics/TODO.md +++ b/avionics/TODO.md @@ -13,6 +13,21 @@ --- +### Avionics close-out: actuator bus, SG90/OSC, Observer pitot (2026-08-25) +→ full detail: `docs/plans/2026-08-25-001-finish-avionics-plan.md` + +- [ ] U1: Retire Pilot J_ESC/J_SERVO PWM headers → CAN-FD/RS-485 trunk +- [ ] U2: LibreServo_v4 nacelle-tilt bus integration (GW-1 J_FLEX gap) +- [ ] U3: Open-Secure-ESC 50A/6S CAN-FD integration + governor rewrite +- [ ] U4: OpenServoCore SG90 TTL+CMAC bus finalize (re-check maturity gate) +- [ ] U5: Add Observer pitot-tube airspeed sensor; fix Pilot's stale claim +- [ ] U6: Fleet host+message auth wiring for ESC/servo/SG90 endpoints +- [ ] U7: Per-board ERC/DRC/gerber closeout (Pilot/XO/Commo/FE/Obs/GW-1) +- [ ] U8: Tamper-mesh creepage fix (Pilot fab blocker) + Faraday/shielding +- [ ] U9: REFERENCES.md + WBS/TODO closeout for all of the above + +--- + #### ***EM hardening Objective is to ensure safe and controlled operations in hostile em/rf environments such as the vicinity of radiating commercial broadcast, amateur radio and cellular towers.*** → full detail: `WBS.md` §1.2a diff --git a/avionics/datasheets/mechanics-of-advanced-composite-structures.pdf b/avionics/datasheets/mechanics-of-advanced-composite-structures.pdf new file mode 100644 index 00000000..f44b544d Binary files /dev/null and b/avionics/datasheets/mechanics-of-advanced-composite-structures.pdf differ diff --git a/current-specification/bom_revS.csv b/current-specification/bom_revS.csv index 37a6f503..05a6d84a 100644 --- a/current-specification/bom_revS.csv +++ b/current-specification/bom_revS.csv @@ -1,169 +1,172 @@ -Ref,Description,Category,Qty,Unit_Mass_g,Total_Mass_g,Supplier,Supplier_PN_or_Search,Est_Unit_Price_USD,Est_Total_Price_USD,Notes -EDF-50-6S,50mm EDF unit @ 6S (6- or 12-blade),Propulsion,4,70,280,AliExpress / Banggood,"XFly Galaxy X5 50mm 12-blade 6S 3200KV (canonical) OR Surpass Hobby 2627 (legacy)",28.00,112.00,"1240g thrust each (XFly Galaxy X5 canonical); 70g unit mass; verify CW vs CCW rotation before nacelle install; 2 per nacelle tandem with 11-fin stator (90% efficiency); Rev S1 positioning Z=22..72mm EDF1, Z=98..143mm EDF2" -EDF-55-6S,55mm EDF unit @ 6S — Phase 11 DEFERRED,Propulsion,0,95,0,HobbyKing / AliExpress,55mm 6S ducted fan EDF ~1500g thrust,45.00,0.00,*** PHASE 11 DEFERRED — rear fuselage EDF; not installed in Phases 5-10 (CLAUDE.md: "optional addition once everything else works"); ~1500g fan thrust; exhausts aft through fixed canonical elliptical nozzle (2.06x1.76 in); also feeds 4 RCS bleed jets (~15% flow); FORWARD (cruise) thrust only — not counted in hover T/W *** -ESC-40A-6S,"40A 6S BLHeli32 ESC, BDSHOT600",ESC,4,25,100,AliExpress / HobbyKing,BLHeli32 40A 6S DSHOT600 ESC,18.00,72.00,One per 50mm EDF; mount in nacelle hub bore ID=20mm; 55A burst -ESC-50A-6S,50A 6S BLHeli32 ESC — Phase 11 DEFERRED,ESC,0,35,0,AliExpress / HobbyKing,BLHeli32 50A 6S ESC ~65A burst,22.00,0.00,*** PHASE 11 DEFERRED — not installed in Phases 5-10; for 55mm rear EDF only; ~65A burst; XT60; F_ESC5 = 60A MIDI fuse *** -SERVO-TILT,"Nacelle tilt servo — DS3225 converted with LibreServo_v4, 21-24.5 kgf·cm stall (4.8-6.8V), rotation-limit pin removed",Servo,2,60,120,"Amazon / AliExpress (servo) + github.com/Stab-Rabbit-coding/LibreServo_v4 (board, self-build)",DS3225 25kg digital servo metal gear,13.00,26.00,"2026-08-23 (Rev S1d, owner): DS3225 bodies + LibreServo_v4 PCB (TI MSPM0G3518-Q1 + OPTIGA Trust M). Supersedes DS3218 (same session) and the 2026-08-02 SPT5425LV+LibreServo v2. DIMENSIONS AUTHORITATIVE from avionics/datasheets/DS3225 datasheet.pdf (Dongguan City Dsservo): 40x20x40.5 mm, 60 g, 54.5 mm flange span, 49.5x10 mm bolt pattern, flange 27.7 mm above base, IP66, double bearing, 275:1 — DIMENSIONALLY IDENTICAL to the DS3218 datasheet, so the Rev S1d cargo-shell pads (61.5x27.0 mm at hull Z +98.89, bores 49.5x10) are unchanged by this swap. LibreServo_v4 keeps the stock case, so the external envelope is unchanged. ** TORQUE, still marginal ** datasheet stall 21 kgf·cm @5V / 24.5 @6.8V — the '25kg' in the product name is the marketing figure, the spec table maxes at 24.5. Against the >=25 kgf·cm (2.45 N·m) tilt requirement (docs/TILT_SPAR_ANALYSIS.md §2, from serenity-rev-r.jsx L383) that is 98% at 6.8V, ~92% at a 6V rail, 84% at 5V. Much closer than DS3218's 86%, but not cleared on datasheet figures alone. LibreServo_v4 re-drives the motor from 4.5-18V and may close it; no converted-unit figure exists. NOTE the requirement itself may be stale — the pivot is AT the nacelle CG (TILT_SPAR_ANALYSIS §2), so the gravity moment is nulled by design and only aero + inertia remain; re-derive before buying a bigger servo. ** CURRENT ** stall 1.9A @5V / 2.3A @6.8V vs the 1.2A placeholder RAIL-2 was sized on. See REFERENCES.md and airframe/wings-nacelles/WBS.md SPAR-02." -SERVO-RCS-VALVE,"RCS bleed-jet proportional valve servo — SG90 class, OpenServoCore control board — Phase 11 DEFERRED",Servo,0,9,0,"Amazon / AliExpress (servo) + github.com/OpenServoCore/open-servo-core (board, self-build)",SG90 9g micro servo 1.8kg,3.00,0.00,"*** PHASE 11 DEFERRED — 4 per aircraft; modulates the 4 EDF-fed RCS bleed jets for pitch/yaw attitude authority *** 2026-08-02: standardises on the OpenServoCore ""OSC SG90 M007"" swap board (REFERENCES.md REF-SENSOR-015) when this phase is implemented; inherits the pre-production-hardware caveat from SERVO-CARGO below." -SERVO-CARGO,"SG90 micro servo — cargo door actuation (1×) + payload release (1×), OpenServoCore control board",Cargo,2,9,18,"Amazon / AliExpress (servo) + github.com/OpenServoCore/open-servo-core (board, self-build)",SG90 9g micro servo 1.8kg cm,3.00,6.00,"Rev P new; Ch-A = door cam via DRV8833 H-bridge; Ch-B = latch release pull-wire; both on Cape-B GPIO PWM. 2026-08-02: control board = OpenServoCore ""OSC SG90 M007"" (REFERENCES.md REF-SENSOR-015), swap board replacing the SG90 factory PCB in place — same body envelope, no bracket change. Upstream hardware is pre-production (""nothing here is shippable yet""); do not procure in flight-article quantity until upstream reaches a shippable release." -BRG-MF104ZZ,MF104ZZ flanged bearing 4×10×4mm,Bearing,4,2,8,Amazon / AliExpress,MF104ZZ flanged ball bearing 4x10x4mm,1.50,6.00,2 per nacelle pivot housing; press-fit into clevis ear bore OD=16mm; Rev O: confirmed selection over 686ZZ -CF-ROD-4MM,4mm OD solid CF pivot rod (cut to length per pivot housing),Structural Hardware,2,8,16,Amazon / AliExpress,4mm solid carbon fiber rod 300mm,6.00,12.00,One per nacelle; cut length per pivot housing drawing; pivot at Z=83mm (CG) in Rev O -PIN-3X18,3mm OD × 18mm stainless dowel pin — nacelle nozzle flap tangential hinge (Rev S),Hardware,16,0.9,14.4,McMaster-Carr / Amazon,"Stainless dowel pin 3mm x 18mm, McMaster 91585A476 or equiv",0.60,9.60,8 per nacelle × 2; tangential hinge for the Rev R2/S overlapping conical flaps (nacelle_nozzle_iris.scad). Rear nozzle is the fixed canonical elliptical exit (no petals) so it needs no hinge pins. -PIN-2X4,2mm OD × 4mm stainless dowel pin — nacelle nozzle flap cam follower (Rev S),Hardware,16,0.1,1.6,McMaster-Carr / Amazon,"Stainless dowel pin 2mm x 4mm, McMaster 91585A302 or equiv",0.40,6.40,8 per nacelle × 2; follower pin rides the unison-ring spiral face-cam slot that drives each flap — REPLACES the retired Rev R1 0.8mm piano-wire iris link ring (the Rev R2/S drive is a rotating spiral cam, no bent wire). -SECTOR-GEAR-M05,M0.5 sector gear R=22mm — SUPERSEDED in Rev O by SECTOR-M1-R22 (M=1.0); retain row for Rev N back-compat,Gear,0,5,0,AliExpress / Shapeways / in-house resin,M0.5 sector gear 22mm pitch radius — see SECTOR-M1-R22 for Rev O replacement,8.00,0.00,Rev O: replaced by SECTOR-M1-R22 (M=1.0 module). Qty=0 in Rev O/P build. -BEVEL-PAIR-M05,"M0.5 bevel gear pair 1:1, 90° axis redirect — SUPERSEDED in Rev O by BEVEL-M1-14T",Gear,0,3,0,AliExpress,M0.5 bevel gear pair 1:1 90 degree shaft — see BEVEL-M1-14T for Rev O replacement,10.00,0.00,Rev O: replaced by BEVEL-M1-14T (M=1.0). Qty=0 in Rev O/P build. -PINION-M05,M0.5 drive pinion R=6mm — SUPERSEDED in Rev O by PINION-A-M1-12T and CROWN-M1-12T,Gear,0,1,0,AliExpress / in-house resin,M0.5 spur pinion 6mm pitch radius — see PINION-A-M1-12T and CROWN-M1-12T for Rev O,5.00,0.00,Rev O: replaced by M=1.0 pinions. Qty=0 in Rev O/P build. -PB2-I-FC,"PocketBeagle 2 Industrial AM6254 — FC node, Cape-A",Avionics,4,13,52,BeagleBoard.org / DigiKey,PocketBeagle 2 Industrial (AM6254),51.03,204.12,FC node upper slot in bays A/B/D/E; runs ArduPilot / flight control stack -PB2-I-CN,"PocketBeagle 2 Industrial AM6254 — CN node, Cape-B",Avionics,4,13,52,BeagleBoard.org / DigiKey,PocketBeagle 2 Industrial (AM6254),51.03,204.12,CN node lower slot in bays A/B/D/E; comms + logging + payload control -CAPE-A,Cape-A PCB 55×35mm — Sensor + FC cape (tamper mesh on F.Cu/B.Cu nets TMESH_P/N),Avionics,0,0,0,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-A gerbers + BOM,0,0,ARCHIVED Rev Q 2026-06-05 — superseded by CAPE-A-2. -CAPE-B,Cape-B PCB 55×35mm — Comms + Logging + Payload cape (tamper mesh on F.Cu/B.Cu nets TMESH_P/N),Avionics,0,0,0,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-B gerbers + BOM,0,0,ARCHIVED Rev Q 2026-06-05 — superseded by CAPE-B-2. -RCRS-49,RCRS-49 sub-module PCB — 49 MHz TDDS RC,Avionics,0,0,0,JLCPCB (fab from project gerbers),RCRS-49 gerbers,0,0,ARCHIVED Rev Q 2026-06-05 — superseded by XCVR-49MHZ-2. -CAPE-A-2,Cape-A-2 PCB 55x35mm — EMI-hardened Cape-A: ISOW1044BDFMR 5kV CAN FD isolation + ADM2795EBRWZ 5kV RS-485 isolation + ADIN1300BCPZ 1000BASE-T PHY + 2x ISO7642FDWRR 6-ch digital isolators + Wurth 749010012A ETH transformer + JST GH 4P + SRF2012 CMC + PRTR5V0U2X TVS,Avionics,4,31,124,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-A-2 gerbers + BOM,68.00,272.00,Cape-A-2 PCB 55x35mm EMI-hardened — ALL 4 FC positions — Rev Q primary FC cape. ISOW1044BDFMR 5kV CAN FD + ADM2795EBRWZ 5kV RS-485 + ADIN1300BCPZ 1000BASE-T. Gerbers pending DRC. DTS: cape-a2.dts -CAPE-B-2,"Cape-B-2 PCB 55x35mm — EMI-hardened Cape-B: same CAN FD + RS-485 + Ethernet isolation stack as CAPE-A-2 plus Cape-B payload ICs (MAVLink, TI WL1837MOD WiFi/BT, SLB9672 TPM 2.0, ATF16V8BQL CPLD write-blocker, log microSD); P1+P2 passthrough socket rails on upper face for Commo XCVR stack (LoRa removed from XO — moved to Commo board Rev R1)",Avionics,4,40,160,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-B-2 gerbers + BOM,105.00,420.00,Cape-B-2 PCB 55x35mm EMI-hardened — ALL 4 CN positions — Rev R1: LoRa RFM95W removed (moved to Commo); P1+P2 passthrough rails added to upper face (Commo plugs onto River and Simon stacks; rails bare/capped on Shepherd and Inara stacks). PCB redesign required — see TODO §avionics. Gerbers pending DRC. DTS: cape-b2.dts -Commo,"Commo XCVR sub-module PCB — EMI-hardened 49 MHz AX.25 XCVR + LoRa RFM95W 915 MHz: SRF2012-100Y CMC + PRTR5V0U2X TVS + X2Y cap + Wurth 742792512 ferrite on +5V; P1+P2 2×20-pin socket rails (replaces JST GH 6P); 55x35mm 4-layer PCB",Avionics,2,20,40,JLCPCB (fab from project gerbers),Commo gerbers (redesign pending — see TODO §avionics),32.00,64.00,Commo XCVR sub-module — River's Room + Simon's Medbay only (Rev R1). LoRa RFM95W added (moved from Cape-B-2); P1+P2 socket rails replace JST GH 6P for clean board-to-board stacking on XO passthrough rails. RF Z0=52.26Ohm PASS. PCB redesign required. Gerbers pending DRC. -MICROSD-LOG,64GB microSD — Cape-B write-blocked flight log,Avionics,4,1,4,Amazon,Samsung 64GB microSD Class 10 U3,12.00,48.00,Write-blocked; flight log storage; formatted FAT32 or ext4 per firmware -WIRE-49MHZ,49MHz top wire — 0.3mm stainless steel ~470mm dorsal spine,Avionics,1,3,3,Amazon / AliExpress,Stainless steel wire 0.3mm dia 1m spool,5.00,5.00,End-fed shortened wire; horizontal polarisation; cross-pol loss ~6-12dB at <=300m acceptable -POST-FWD-49,Forward wire post + base-loading coil — PETG post + 38uH coil + LC pi-net at dorsal hull ~120mm,Avionics,1,4,4,In-house / AliExpress,38uH air-core inductor + variable cap + PETG printed post,8.00,8.00,3mm clearance from GPS patch face; bench-test HDOP <=1.5 with XCVR TX before flight -POST-AFT-49,Aft wire post + ceramic bead insulator — top of rear nozzle cone ~600mm from nose,Avionics,1,2,2,AliExpress,Ceramic standoff insulator 3mm + PETG post,3.00,3.00,Strain-relief wire at aft post; open-circuit (insulated) end -BATT-6S-4000,6S 4000mAh LiPo — hover / high-endurance,Power,1,750,750,HobbyKing / GetFPV,Tattu or Gens Ace 4000mAh 6S 60C LiPo XT60,55.00,55.00,Primary flight battery; >=15C cont (~60A draw); AUW ~3608g with Rev P cargo hardware -BATT-6S-2800,6S 2800mAh LiPo — cargo delivery (lower mass),Power,1,525,525,HobbyKing / GetFPV,Tattu or Gens Ace 2800mAh 6S LiPo XT60,40.00,40.00,Use when payload <=250g; -225g AUW vs 4000mAh cell -Flight Engineer,Custom Power Distribution Board Rev A1 — 4-layer 90x65mm PCB; dual redundant 5V/10A BEC (TPS54620x2 diode-OR'd); 5V/3A dedicated servo BEC (TPS54620 third instance); 5x INA226 current monitors; BQ76930 6S cell monitor; 150A MAXI + 4x40A mini blade fuses; XT60 in / 4xXT30 out / Molex Nano-Fit BEC out,Power,1,75,75,JLCPCB (fab from project gerbers),avionics/kicad/ Flight Engineer gerbers + BOM,65.00,65.00,Rev A1: 6V/5A TPS54540 servo BEC removed; replaced with 5V/3A servo output from third TPS54620 instance sharing 5V rail (DS3218MG operates 4.8-7.4V; ~21 kg·cm at 5V vs 25 kg·cm at 6V — adequate for nacelle tilt loads with safety margin). Dual redundant 5V avionics SMPS retained. 5x INA226 current sense (0x40-0x44). BQ76930 cell monitor 0x08. 150A MAXI main fuse + 4x40A mini ESC fuses. PCB redesign required — see TODO §avionics. -FUSE-MAIN-150A,Littelfuse 0297150.ZXNV 150A MAXI blade automotive fuse — main battery bus protection,Power,1,8,8,DigiKey / Mouser,Littelfuse 0297150.ZXNV or 0297150.PXCN,1.50,1.50,Installed in Flight Engineer inline fuse holder on VBAT positive rail between XT60 and distribution outputs; clears AFTER 40A branch fuses on short-circuit -FUSE-ESC-40A,Littelfuse 0297040.WXNV 40A mini blade automotive fuse — per-ESC branch protection (4x),Power,4,2,8,DigiKey / Mouser,Littelfuse 0297040.WXNV,0.50,2.00,One per ESC output on Flight Engineer; coordinates with 10AWG wire (55A rated); clears first on ESC-side short; 4 included in Flight Engineer BOM -SHUNT-1MOHM,Bourns CSS2H-2512K-1L00F 1mΩ 3W Kelvin 4-terminal shunt resistor (5x),Power,5,2,10,DigiKey / Mouser,Bourns CSS2H-2512K-1L00F,2.50,12.50,5x on Flight Engineer: 4 for ESC current monitors (U_IS1-U_IS4) + 1 for main bus monitor (U_IS_MAIN); Kelvin 4-terminal connection required; 3W rating; at 40A: P=1.6W within rating -SPT5425LV-WINCH-LS2,"Cargo winch servo — SPT5425LV converted with LibreServo v2, rotation-limit pin removed, RS-485 bus, encoded continuous rotation",Cargo,1,60,60,"Amazon / AliExpress (servo) + github.com/Stab-Rabbit-coding/LibreServo_v2 (board, self-build)",SPT5425LV 25kg digital servo metal gear,13.00,13.00,"2026-08-02 (docs/CARGO_WINCH_SPECIFICATION.md Rev C): supersedes the retired N20-WINCH gearmotor (Rev P/Q/R) and the never-procured STS3215 (Rev B) — REFERENCES.md REF-SENSOR-012 (superseded), REF-SENSOR-013/014. Drives the both-ends-supported spool through a lost-motion dog coupler (torque only, no radial load); paired with HX711 for line tension and AK7455 for true spool position. Stall current not yet published — see REFERENCES.md Open Standards Verification Items." -SOL-CATCH-5V,"Pull solenoid, >=2.5 N @ 3 mm stroke, 5 V — winch ratchet catch actuator",Cargo,1,15,15,Amazon / AliExpress,5V pull-type linear solenoid 3mm stroke 2.5N,4.00,4.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.5; de-energised = catch engaged (fail-safe); driven by AO3400 N-FET + SS34 flyback" -BRG-MR84ZZ,"MR84ZZ bearing, 4x8x3mm — winch spool hub, pressed in pairs",Bearing,2,1.5,3,Amazon / AliExpress,MR84ZZ miniature ball bearing 4x8x3mm,1.00,2.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.2/§3.3; static rating ~130N, FOS~13 at 10N/bearing" -SHAFT-SS-4MM,"4mm OD A2 stainless rod, 46mm — winch fixed spool axle",Structural Hardware,1,4.6,4.6,Amazon / AliExpress / McMaster-Carr,4mm A2 stainless steel rod 46mm,2.00,2.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.2; stationary, clamped at both pedestals; new stock item (project's stocked 3mm CF rod is unsuitable in a press-fit bearing race)" -SPRING-PAWL,"Compression spring, 1.0N +/-0.2N installed — winch ratchet pawl",Hardware,1,1,1,Amazon / AliExpress / McMaster-Carr,small stainless compression spring 1N,1.00,1.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.4; seated in a set-screw-adjustable seat in the starboard pedestal for bench trim of the slip threshold" -DOWEL-M2-10,M2 x 10mm A2 stainless dowel — winch pawl pivot,Hardware,1,0.3,0.3,Amazon / AliExpress / McMaster-Carr,M2 x 10mm stainless dowel pin,0.50,0.50,docs/CARGO_WINCH_SPECIFICATION.md §3.4 -SLEEVE-HUB-STEEL,"Steel sleeve, 10mm OD x 8mm ID x 25mm — winch spool hub bearing race",Hardware,1,5.6,5.6,Amazon / AliExpress / McMaster-Carr,steel sleeve bushing 10mm OD 8mm ID,3.00,3.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM2 — bearings press into steel, not printed plastic; keeps fragments captive if the printed hub cracks" -CLIP-EXT-4MM,"External circlip, 4mm shaft — winch axle positive retention",Hardware,2,0.1,0.2,Amazon / AliExpress / McMaster-Carr,4mm external circlip retaining ring,0.30,0.60,"docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM1 — positive axle retention outboard of each pedestal; the pinch screw is demoted to locating/anti-rotation only" -KEEPER-WINCH,"Keeper bar, 1mm aluminium, pedestal-to-pedestal — winch independent secondary capture",Hardware,1,5,5,In-house fabrication / Amazon aluminium stock,1mm aluminium sheet/strap stock,2.00,2.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM4 — holds the spool assembly captive even if FM1-FM3 all fail or a retainer is omitted at assembly" -PLATE-PEDESTAL,"Aluminium backing plate, pedestal through-bolt — winch pedestal mounting",Hardware,2,2,4,In-house fabrication / Amazon aluminium stock,aluminium backing plate stock,1.50,3.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM3 — replaces heat-set-insert-only mounting for a flight-critical joint per root AGENTS.md §7" -ENC-AK7455-SPOOL,AKM AK7455 off-axis angle sensor + diametric magnet — winch spool position,Cargo,1,4,4,Mouser / Digi-Key,AKM AK7455 14-bit off-axis angle sensor QFN24,5.00,5.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.7.3; REF-SENSOR-008, fleet-standard part already used for nacelle tilt (SKIPPER-TILT-ENC-PCB) — no new part number; mates the CAN-PERIPH-GW's existing J_ENC pigtail, no board change" -FET-AO3400,"AO3400 N-FET, SOT-23 — winch catch solenoid drive",Hardware,1,0.1,0.1,Mouser / Digi-Key,AO3400 N-channel MOSFET SOT-23,0.30,0.30,"docs/CARGO_WINCH_SPECIFICATION.md §5.1; existing project-standard part (avionics/kicad/Observer/Observer.md Q1)" -DIODE-SS34,SS34 flyback diode — across winch catch solenoid coil,Hardware,1,0.2,0.2,Mouser / Digi-Key,SS34 Schottky diode 3A 40V,0.30,0.30,docs/CARGO_WINCH_SPECIFICATION.md §5.1 -HX711-LC,HX711 24-bit load cell ADC module,Cargo,1,3,3,Amazon / AliExpress,HX711 load cell amplifier breakout module,4.00,4.00,Cargo weight monitoring; interfaces to Cape-B SPI/GPIO -DRV8833-CARGO,DRV8833 dual H-bridge motor driver breakout — cargo door + release servo controller,Cargo,1,3,3,Amazon / AliExpress,DRV8833 dual H-bridge motor driver breakout board,2.00,2.00,Rev P new; drives 2x SG90 cargo servos; over-current protection for door-jam scenario; mounts in cargo_drv8833_tray.stl; 2.7-10.8V supply -DYNEEMA-SK75,"Dyneema SK75 0.5mm braided line, 2m — cargo winch spool line",Cargo,1,3,3,Amazon / AliExpress,Dyneema SK75 0.5mm braided fishing line 100m spool,4.00,4.00,Rev P new; buy 100m spool cut to 2m; break strength ~300N; WLL ~60N (5:1 SF) >> 400g payload load of ~4N -FOAM-GASKET-CARGO,3M foam gasket tape 2×2mm — cargo door mating flange seal,Cargo,1,5,5,Amazon,3M foam double-sided tape 2mm wide closed-cell weatherseal,3.00,3.00,Rev P new; fills 2x2mm door flange groove in cargo_door_port/stbd.stl; dust and weather seal; replace if adhesion fails after door cycles -CF-BAR-6X3,CF flat bar 6x3mm — hull keel (TBD length + form),Structural,1,30,30,Amazon / AliExpress,6mm x 3mm carbon fiber flat bar 700mm,12.00,12.00,*** COMPLETE RE-EVALUATION REQUIRED (Rev R1) *** A continuous bow-to-stern keel is structurally justified, but the canonical Serenity hull geometry makes a straight flat bar infeasible: Head_Shell Z_min=+61.2mm vs Cargo Z_min=0mm (≈61mm vertical step at head/cargo joint); Middle_Shell horseshoe is open at −Z (no belly floor to bond to at Y=+130..+204mm). Keel form (straight / pre-bent / segmented-lap / tube / CF-tow-in-foam), cross-section, span (full 620mm or cargo-to-rear-only ≈455mm), Z routing, and RF counterpoise integration must all be re-evaluated against the baked canonical hull cross-sections. Datum marks (91/165/251/320/388mm from nose) are stale — tied to pre-Rev N ring plate stations. Mass and length TBD. BLOCKS keel fabrication + ring plate + foam pour — see TODO §1.1.1 keel re-evaluation task. -CF-TUBE-12MM,CF tube 12mm OD x 1.5mm wall x 350mm — wing spar,Structural,2,35,70,Amazon / AliExpress,12mm OD 1.5mm wall carbon fiber tube 350mm,10.00,20.00,Wing spar through wing root to fuselage; carries nacelle tilt loads -CF-PLATE-2MM,2mm CF plate — ring frame profiles (2 stations: cargo Y=+30mm, rear Y=+290mm),Structural,2,57,114,Amazon / AliExpress,2mm carbon fiber sheet 200x300mm,20.00,40.00,Re-evaluation complete (Rev R1, docs/structural_analysis.md §5); 2 full-closed-ring stations (down from 5 pre-Rev N): cargo hull Y=+30mm (wing-spar anti-ovalisation) and rear hull Y=+290mm (landing-impact anti-ovalisation). Inner-skin profiles in airframe/diagrams/ring_frames/*_inner.csv (add_structural_features.py); DXF plate profiles (inner trace + 3mm outward clearance offset + 3.5mm(X) x 6mm(Z) keel-bar notch centred hull X=-170mm, per structural_analysis.md §4.5/§5.4) exported 2026-07-03 to airframe/diagrams/ring_frames/ring_rear_Y290_plate.dxf (FINAL: net area 113.2 cm^2, mass 36.2 g @ rho=1.6 g/cm^3) and ring_cargo_Y30_plate_PROVISIONAL.dxf (net area 242.9 cm^2, mass 77.7 g @ rho=1.6 g/cm^3 -- PROVISIONAL: the cargo Y=+30mm mesh cross-section is fragmented into 4 disjoint closed loops, consistent with the open large_shells>1/MESH-01 cargo-mesh defect tracked in TODO §1.1.1; this profile is a convex-hull approximation of those 4 loops pending that mesh fix and must be re-extracted once the cargo shell is repaired). rho=1.6 g/cm^3 is the CF sheet density already used in structural_analysis.md §5.6 (verified precedent in this repo); the 1.54 g/cm^3 figure previously quoted in TODO.md §1.1.1.0b has no other citation in this repo and is superseded by the §5.6 value. Combined mass 113.9 g (Unit_Mass_g/Total_Mass_g columns are an average of the two different-size rings; supersedes the ~300g bounding-rectangle/fill-factor estimate in structural_analysis.md §5.6, now replaced by actual computed DXF areas). Do not procure/cut the cargo ring until its DXF is finalized post-mesh-fix. See TODO §1.1.1.0b. -FOAM-PU-2LB,"Two-part closed-cell PU foam — 2 lb/ft³, 4x expansion",Structural,1,900,900,Amazon / Foam Factory,2 lb/cu ft two-part expanding foam kit (A+B),25.00,25.00,~0.7L mixed fill; place EPS void formers for avionics bays + cargo before pouring; do NOT foam nacelle or open cargo bay -WIRE-6AWG,6AWG silicone wire — battery XT60 to Flight Engineer XT60 (main bus),Wiring,1,60,60,Amazon / AliExpress,6AWG silicone wire red/black 200mm each,12.00,12.00,Rev R1: 4AWG→6AWG; main battery positive + negative; 200mm per polarity; 6AWG rated 120A continuous / 200A burst at this length; R=0.84 mΩ ΔV=0.13V at 160A peak — negligible; saves 30g vs 4AWG -WIRE-10AWG,10AWG silicone wire — Flight Engineer XT30 outputs to ESC inputs,Wiring,1,80,80,Amazon / AliExpress,10AWG silicone wire red/black 1m each,15.00,15.00,ESC branch wiring only (Flight Engineer XT30 to ESC XT30); 55A rated free air; 1 pair per ESC x4 = ~400mm per polarity total; NOT for main battery bus (use WIRE-4AWG) -WIRE-16AWG,16AWG silicone wire — ESC to EDF motor phase leads,Wiring,1,40,40,Amazon / AliExpress,16AWG silicone wire 3m assorted,10.00,10.00,5 ESCs x 3 phases x ~200mm each -WIRE-28AWG-STP,28AWG shielded twisted pair — servo signal + DSHOT leads,Wiring,1,20,20,DigiKey / Mouser,28AWG shielded twisted pair signal cable 5m,15.00,15.00,Minimise EMI near avionics bays; use shielded for DSHOT and servo signal runs -CONDUIT-PTFE,PTFE conduit 3mm ID — data bus run full hull length,Wiring,1,25,25,Amazon / AliExpress,PTFE tube 3mm ID 4mm OD 700mm,8.00,8.00,Houses CAN FD / RS-485 / 1553 / ETH data bus bundle; full hull length -FIL-PETG,PETG filament 1kg spool — hull shells and fairings,Filament,2,1000,2000,Amazon / Hatchbox / eSUN,Hatchbox or eSUN PETG 1kg 1.75mm,28.00,56.00,~1460g required in Rev P (Rev O ~1400g + ~54g cargo prints); 2 spools; 0.20mm layer / 8% gyroid typical -FIL-CF-PETG,CF-PETG filament 0.75kg spool — structural nacelles and cargo brackets,Filament,1,750,750,3DXTech / MatterHackers,3DXTech CarbonX PETG+CF 0.75kg 1.75mm,48.00,48.00,~755g required in Rev P (Rev O ~620g + ~135g cargo CF-PETG prints); marginally exceeds 1 spool (750g) — have second spool on hand; requires hardened-steel nozzle; 0.15mm layer / 25-40% gyroid -FIL-TPU-95A,TPU 95A flexible filament 0.75kg — landing gear feet,Filament,1,250,250,Amazon / Polymaker,Polymaker PolyFlex TPU95 0.75kg 1.75mm,30.00,30.00,~100g required; 0.25mm layer / 40% infill -PRINT-HEAD-SHELL,head_shell24_2mm_repaired.stl — Cockpit / nose section (Blender-canonical),Printed Part,1,83,83,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,PRINT FROM: airframe/stls/fuselage/head_shell24_2mm_repaired.stl (baked hull-frame R1; 790036 tri; extents X -232.9..-103.5 / Y -305.7..-70.7 / Z +61.1..+201.5 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/head_shell24_2mm_repaired.stl. SCAD s_head_shell24.scad is secondary reference only. Rev R1: 0.20mm / 5% gyroid (reduced from 8%); saves ~12g. FABRICATION SPLIT at head/cargo joint hull Y≈−71mm — print-split for fabrication access, not a structural joint. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse reference model was a decorative display piece — no structural provision for UAV flight loads (bending, torsion, shear, vibration). Inter-section load paths must be designed from first principles. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss design task. Joint face requires minimum 2-wall contact annulus + positive-stop shoulder per CLAUDE.md once structural design is complete. -PRINT-MIDDLE-CANONICAL,"middle_shell24_2mm_repaired.stl — Fuselage mid-section (Blender-canonical: horseshoe ring + inner neck — ONE piece)",Printed Part,1,135,135,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,PRINT FROM: airframe/stls/fuselage/middle_shell24_2mm_repaired.stl (baked hull-frame R1; 855328 tri; extents X -258.5..-81.6 / Y +130.4..+203.6 / Z +1.3..+166.1 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/middle_shell24_2mm_repaired.stl. SCAD s_middle_canonical_shell24.scad superseded. GEOMETRY: ONE printed piece — (1) outer horseshoe ring (U-shaped exterior frame open at −Z/ventral); (2) inner neck (closed tube passing through horseshoe centre, connecting cargo bay interior to rear engine room interior). FLIGHT ENGINEER'S ROOM: the Flight Engineer PDB bay is located inside the inner neck, accessible through the open ventral face of the horseshoe. Mounting boss features for Flight Engineer must be added to the inner neck before printing — see TODO §1.1.1.3. PHASE 5-10: inner neck is a closed tube — aft EDF intake scoops (4 radial cuts for 120mm EDF) are DEFERRED to Phase 11. Print as-is with no intake modifications. 0.20mm / 8% gyroid. Rev R1 skid reinforcement: add 4.2mm bore CF rod channel running full length of each horseshoe-to-skid section (2 channels, coaxial with PRINT-REAR-NECK-INTAKE) — see TODO §1.1.5 skid task. FABRICATION SPLITS at cargo/middle hull Y≈+131mm (fwd face) and middle/rear hull Y≈+203mm (aft face) — print-splits for fabrication access only. Skids are integral extensions of this horseshoe ring; the middle/rear cut was for printability only. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse model was a decorative display piece — no structural provision for UAV flight loads. The inner neck and horseshoe ring cross-sections were not designed for bending, torsion, or shear. Inter-section and intra-section structural solutions must be designed from first principles. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss task. The 4mm CF skid rods address skid bending specifically; all other joint load paths remain open design items. -PRINT-CARGO-SECT,cargo_sect_shell24_2mm_repaired.stl — Cargo section (Blender-canonical; interior features pending merge),Printed Part,1,165,165,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,PRINT FROM: airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl (baked hull-frame R1; 1414068 tri; extents X -267.0..-72.7 / Y -71.5..+132.0 / Z 0.0..+163.2 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/cargo_sect_shell24_2mm_repaired.stl. SCAD cargo_sect_shell24.scad (Rev S3) is secondary — interior boss features (door opening, hinge blocks, servo pads, spar bore, avionics standoffs) from SCAD Rev S/S1/S2/S3 must be merged into the Blender mesh before printing; see TODO §1.1.1.2. FABRICATION SPLITS at head/cargo hull Y≈−71mm (fwd face) and cargo/middle hull Y≈+131mm (aft face) — print-splits for fabrication access, not structural joints. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse model was a decorative display piece — no structural provision for UAV flight loads. Inter-section load paths must be designed from first principles. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss task. Joint faces require minimum 2-wall contact annulus + positive-stop shoulder per CLAUDE.md once structural design is complete. -PRINT-REAR-NECK-INTAKE,rear_shell24_2mm_repaired.stl — Rear fuselage / engine bell (Blender-canonical; no EDF hardware Phases 5-10),Printed Part,1,200,200,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,PRINT FROM: airframe/stls/fuselage/rear_shell24_2mm_repaired.stl (baked hull-frame R1; 1095972 tri; extents X -246.1..-105.5 / Y +203.2..+384.3 / Z +3.3..+161.1 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/rear_shell24_2mm_repaired.stl. SCAD s_rear_neck_intake_shell24.scad is secondary. NOTE: the "neck" in this part name refers to the rear section transition toward the aft EDF intake (deferred Phase 11) — the inner neck of the MIDDLE section is a separate feature of PRINT-MIDDLE-CANONICAL. PHASE 5-10: print as-is from baked canonical mesh; no EDF intake hardware, thrust tube, or petal nozzle. Rev R1: 0.20mm / 5% gyroid throughout. Skid reinforcement: skid arms are extensions of the PRINT-MIDDLE-CANONICAL horseshoe ring continuing through this section — the middle/rear print joint is a fabrication split for printability only. Add 4.2mm bore CF rod channels coaxially aligned with matching channels in PRINT-MIDDLE-CANONICAL; insert 4mm CF rod (~250mm per skid from CF-ROD-4MM stock) from aft; epoxy; rod provides skid bending stiffness and joint alignment. See TODO §1.1.5. FABRICATION SPLIT at middle/rear joint hull Y≈+203mm — print-split for fabrication access only. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse model was a decorative display piece — no structural provision for UAV flight loads. The rear cone geometry, skid arms, and dorsal pod were not designed for bending, torsion, landing impact, or vibration loads. Inter-section and local structural solutions must be designed from first principles. The 4mm CF skid rods address skid bending specifically; all other load paths remain open design items. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss task. -PRINT-HEAD-CARGO-COLLAR,head_cargo_splice_collar.stl — Internal head/cargo joint splice collar (Rev R1),Printed Part,1,14,14,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"0.15mm / 100% infill / 4 walls (thin 2mm ring). PRINT FROM airframe/stls/fuselage/head_cargo_splice_collar.stl (hull-frame, spans head/cargo joint Y -79..-63mm; ~13.4g; watertight). GENERATOR airframe/stls/fuselage/generate_head_cargo_splice_collar.py. FUNCTION: secures head (~0.59kg forward cantilever) to cargo — converts the peel-prone thin-shell butt joint into a SHEAR-loaded bonded double-lap with full-perimeter 2-wall contact annulus + anti-ovalisation ring, satisfying the CLAUDE.md joint standard. Joint is NOT strength-limited (worst-case 9g crash <1MPa); collar sized by handling/printability. BOND with West System 105/206 thickened with 406 colloidal silica (bridges the 1-2mm bondline); cure 24h before foam-fill. The 3 boss dowel pins (BOSS_PIN_BORES joint1) are retained for assembly registration only — re-roled from structural. See docs/structural_analysis.md section 4a, TODO 1.1.0." -PRINT-CARGO-MIDDLE-COLLAR,cargo_middle_splice_collar.stl — Internal cargo/middle joint splice collar (Rev R1),Printed Part,1,17,17,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"0.15mm / 100% infill / 4 walls (thin 2mm ring). PRINT FROM airframe/stls/fuselage/cargo_middle_splice_collar.stl (hull-frame, spans cargo/middle joint Y +123.1..+139.1mm; ~17.0g; watertight, 1 body). GENERATOR airframe/stls/fuselage/generate_cargo_middle_splice_collar.py. FUNCTION: secures cargo to middle — converts the peel-prone thin-shell butt joint into a SHEAR-loaded bonded double-lap with full-perimeter 2-wall contact annulus + anti-ovalisation ring, satisfying the CLAUDE.md joint standard. Profile taken from the MIDDLE inner wall at Y=+137mm (narrower/cleaner shell at this joint); fit-verified OK against middle over Y 133-139mm. Cargo-side fit checked only against the nearest clean cargo station (Y=+122mm) — the true cargo-side bonding span overlaps the documented cargo MESH-01 defect band; re-verify once that mesh defect is resolved. Joint is NOT strength-limited (real section modulus S_x=31984mm^3 from digitized middle profile; worst-case 9g crash ultimate load 20260 N*mm gives peak fibre stress 0.63MPa, well below the ~5MPa CF-PETG/epoxy allowable); collar sized by handling/printability. BOND with West System 105/206 thickened with 406 colloidal silica; cure 24h before foam-fill. The 3 boss dowel pins (BOSS_PIN_BORES joint2) are retained for assembly registration only. See docs/structural_analysis.md section 7.4, TODO 1.1.1.0b." -PRINT-MIDDLE-REAR-COLLAR,middle_rear_splice_collar.stl — Internal middle/rear joint splice collar (Rev R1),Printed Part,1,16,16,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"0.15mm / 100% infill / 4 walls (thin 2mm ring). PRINT FROM airframe/stls/fuselage/middle_rear_splice_collar.stl (hull-frame, spans middle/rear joint Y +195.4..+211.4mm; ~15.9g; watertight, 1 body). GENERATOR airframe/stls/fuselage/generate_middle_rear_splice_collar.py. FUNCTION: secures middle to rear — converts the peel-prone thin-shell butt joint into a SHEAR-loaded bonded double-lap with full-perimeter 2-wall contact annulus + anti-ovalisation ring, satisfying the CLAUDE.md joint standard; complements (does not replace) the CF skid rods (FOS 205 in tension, structural_analysis.md section 6.2) which carry the skid-tip impact load path. Profile taken from the MIDDLE inner wall at Y=+195mm (narrower/cleaner shell at this joint; convex-hull-area ratio 0.96-1.00 confirms the section is still a single closed tube at the joint plane, so a FULL RING collar is feasible, not just a partial inner-neck sleeve); fit-verified OK against middle over Y 196-200mm. Rear-side fit checked only against the nearest clean rear station (Y=+233mm) — the true rear-side bonding span overlaps the documented rear MESH-01 defect band; re-verify once that mesh defect is resolved. Joint is NOT strength-limited (real section modulus S_x=27713mm^3 from digitized middle profile; worst-case 9g crash ultimate load 7362 N*mm gives peak fibre stress 0.27MPa, well below the ~5MPa CF-PETG/epoxy allowable); collar sized by handling/printability. BOND with West System 105/206 thickened with 406 colloidal silica; cure 24h before foam-fill. The 3 boss dowel pins (BOSS_PIN_BORES joint3) are retained for assembly registration only; CF skid-rod bores (SKID_ROD_BORES) are clear of the collar ring. See docs/structural_analysis.md section 7.5, TODO 1.1.1.0b." -PRINT-NECK-INTAKE-FRAME,s_neck_intake_frame.stl — CF-PETG structural intake frame ring (bonds into reduced-area scoop windows for 55mm EDF),Printed Part,1,85,85,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; SCAD: serenity/stl/s_neck_intake_frame.scad; REQUIRES REGEN for 55mm intake area (Rev R1); bond with West System 105/206; cure 24h before foam-fill -PRINT-AFT-PLENUM,s_aft_edf_plenum.stl — PETG plenum manifold (55mm EDF inlet + 4 RCS bleed taps) — Phase 11 DEFERRED,Printed Part,0,50,0,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 55mm rear EDF plenum with 4 RCS bleed taps (~15% flow); REQUIRES REGEN (outlet 120mm->55mm + RCS taps, Rev R1); not printed/installed in Phases 5-10 *** -PRINT-EDF-MOTOR-MOUNT,s_edf_55_motor_mount.stl — CF-PETG 55mm EDF motor mount spider — Phase 11 DEFERRED,Printed Part,0,25,0,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 3-arm spider motor mount for 55mm rear EDF; REQUIRES REGEN (120mm->55mm, Rev R1); not printed in Phases 5-10 *** -PRINT-THRUST-TUBE,s_edf_55_thrust_tube.stl — PETG 55mm EDF thrust tube — Phase 11 DEFERRED,Printed Part,0,20,0,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,*** PHASE 11 DEFERRED — inner duct for 55mm rear EDF; REQUIRES REGEN (120mm->55mm, Rev R1); not printed in Phases 5-10 *** -PRINT-WINGS,s_wings_both_shell24.stl — Wing pair (SUPERSEDED by PRINT-WINGS-S1223 in Rev O),Printed Part,0,110,0,In-house 3D print,SUPERSEDED — see PRINT-WINGS-S1223,0.00,0.00,Retained for traceability; flat-plate cross-section replaced by Selig S1223 profile in Rev O -PRINT-WINGS-S1223,s_wing_port/stbd_s1223_revo.stl — Wing pair with Selig S1223 airfoil (Rev O),Printed Part,2,118,236,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; S1223 t/c=12.14% max camber=8.65%; SCAD: serenity/stl/s_wings_s1223_revo.scad; CL=1.55 at 3deg AoA -PRINT-NACELLE-PORT,s_eng_left_stator_shell24_revo.stl — Port nacelle + CW stator + nav-wire conduit + harness port (Rev O),Printed Part,1,132,132,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,0.15mm / 25% gyroid / 4 walls; SWIRL_DIR=+1 PYLON_SIDE=+1; SCAD: nacelle_pod_50mm_tandem.scad; pivot Z=83mm -PRINT-NACELLE-STBD,s_eng_right_stator_shell24_revo.stl — Stbd nacelle + CCW stator + nav-wire conduit + harness port (Rev O),Printed Part,1,132,132,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,0.15mm / 25% gyroid / 4 walls; SWIRL_DIR=-1 PYLON_SIDE=-1; SCAD: nacelle_pod_50mm_tandem.scad -D SWIRL_DIR=-1 -PRINT-PYLON,s_wing_nacelle_pylon_port/stbd_revo.stl — Integrated wing nacelle tilt pylon (Rev O),Printed Part,2,52,104,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; hollow harness channel; spar press-fit bore 3.98mm; 4x M2.5 sector insert + 4x M3 wing insert; SCAD: serenity/stl/s_wing_nacelle_pylon_revo.scad -PRINT-PIV-OUTER,s_eng_piv_outer_scaled24.stl — SUPERSEDED by PRINT-PYLON in Rev O,Printed Part,0,35,0,In-house 3D print,SUPERSEDED — see PRINT-PYLON,0.00,0.00,Retained for traceability; replaced by s_wing_nacelle_pylon_revo.scad -PRINT-PIV-PINS,s_eng_piv_pins_scaled24.stl — SUPERSEDED by PRINT-PYLON fold hinge CF pin in Rev O,Printed Part,0,12,0,In-house 3D print,SUPERSEDED — see SPAR-HINGE-CF4,0.00,0.00,Retained for traceability -PRINT-PISTONS,s_eng_pistons_scaled24.stl — Tilt piston linkage fairing,Printed Part,2,25,50,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,0.20mm / 20% gyroid; decorative fairing only -PRINT-PIVOT-ARM,s_pivot_arm_a_scaled24.stl — SUPERSEDED by PRINT-PYLON in Rev O,Printed Part,0,20,0,In-house 3D print,SUPERSEDED — see PRINT-PYLON,0.00,0.00,Retained for traceability -SPAR-TILT-CF4,4mm OD solid CF rod — nacelle tilt spar (press-fit in pylon + MF104ZZ bearing in nacelle),Hardware,2,3,6,Amazon / AliExpress,4mm solid carbon fiber rod 300mm,5.00,10.00,120mm per nacelle; cut to length; press-fit in pylon bore OD 3.98mm; nacelle MF104ZZ bearing rotates on spar -LED-WS2812C-NAC,WS2812C-2020 RGB LED — nacelle tip nav lights (port RED / stbd GREEN),LED,4,0.05,0.2,AliExpress / Mouser,WS2812C-2020 addressable RGB LED,0.20,0.80,2 per nacelle: 1x tip cap LED + 1x spare; FAA 14 CFR 91.209 compliant: port=RED stbd=GREEN -WIRE-28AWG-NAC,28AWG 3-core silicone wire — nacelle nav light WS2812C signal lead,Hardware,1,8,8,Amazon / AliExpress,28AWG 3-core silicone wire 1m,2.50,2.50,VCC / GND / DATA; routed through nacelle D-conduit and pylon hollow body; ~500mm per nacelle run -INSERT-M25-BRASS,M2.5 brass heat-set insert (M2.5×L5 OD3.5mm) — sector gear mount,Hardware,8,0.2,1.6,Amazon / AliExpress,M2.5 brass heat-set threaded insert L5mm,0.10,0.80,4 per pylon sector gear mount × 2 pylons; installed with soldering iron 220°C into CF-PETG -INSERT-M3-WING,M3 brass heat-set insert (M3×L5 OD4.2mm) — wing attachment bolts,Hardware,8,0.3,2.4,Amazon / AliExpress,M3 brass heat-set threaded insert L5mm,0.12,0.96,4 per pylon wing block × 2 pylons; M3×16 SHCS bolt from wing side -PRINT-NACELLE-FLAP-MASTER,"nacelle_nozzle_flap.stl — Nacelle nozzle overlapping conical flap, MASTER — Rev T3 tangential-hinge flap",Printed Part,8,3.4,27.2,In-house 3D print,PETG body + translucent-blue PETG inner face — see FIL-PETG,0.00,0.00,"4 per nacelle x 2 (Rev T3 splits the former 8-per-nacelle single flap into 4 master + 4 seal); print flat (concave/flow face down); tangential hinge (PIN-3X18) + spiral-cam follower (PIN-2X4); band r25.0-27.5 mm UNCHANGED from Rev S; mass 3.4g measured from rendered solid; supersedes the archived Rev O flat petal (nacelle_nozzle_petal.stl)" -PRINT-NACELLE-FLAP-SEAL,"nacelle_nozzle_flap_seal.stl — Nacelle nozzle overlapping conical flap, SEAL — Rev T3 shingle",Printed Part,8,3.7,29.6,In-house 3D print,PETG body + translucent-blue PETG inner face — see FIL-PETG,0.00,0.00,"4 per nacelle x 2. NEW in Rev T3: alternates with the master flap, lapped 0.2mm radially outboard (band r27.7-30.2 mm); shares PIN-3X18/PIN-2X4 hardware with the master; mass 3.7g measured from rendered solid" -PRINT-NACELLE-THROAT,nacelle_nozzle_throat.stl — Nacelle nozzle fixed throat liner + housing — Rev S,Printed Part,2,20,40,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; fixed flow liner + outer shell carrying the 8 tangential hinge bosses and the idler-access slot; RENDER_PART="throat" of nacelle_nozzle_iris.scad -PRINT-NACELLE-RING,nacelle_nozzle_ring.stl — Nacelle nozzle unison ring gear (72T M=1.0) + spiral cams — Rev S,Printed Part,2,18,36,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% / 4 walls; full-circle 72T M=1.0 external ring gear R=36mm driven by the compound idler (NOT a rack); 8 spiral face-cam slots drive the flap follower pins (PIN-2X4); RENDER_PART="ring" of nacelle_nozzle_iris.scad -PRINT-NACELLE-IDLER,nacelle_nozzle_idler.stl — Nacelle nozzle compound idler gear (44T/15T) — Rev S,Printed Part,2,4,8,In-house resin print,nacelle_nozzle_idler.scad,0.00,0.00,Crown-Pinion→ring-gear stage; Idler-In 44T meshes the Crown Pinion, Idler-Out 15T meshes the 72T unison ring; RENDER_PART="gear" -PRINT-NACELLE-IDLER-BKT,nacelle_nozzle_idler_bracket.stl — Nacelle nozzle idler bracket — Rev S,Printed Part,2,1,2,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,Two-boss mount for the idler gear shaft; RENDER_PART="bracket" of nacelle_nozzle_idler.scad -PRINT-REAR-NOZZLE,rear_nozzle_canonical.stl — Fixed canonical elliptical tail nozzle (2.06x1.76 in exit) — Phase 11 DEFERRED,Printed Part,0,30,0,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — fixed canonical Serenity tail nozzle (52.3x44.7mm elliptical exit, ~1836 mm2); NO iris, NO servo; blends into hull outer mold line; REQUIRES GEN (Rev R1, supersedes old iris rear_nozzle_frame/petal); not printed in Phases 5-10 *** -PRINT-RCS-THRUSTER,rcs_thruster_nozzle.stl — RCS bleed-air jet nozzle — Phase 11 DEFERRED,Printed Part,0,8,0,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 4 per aircraft; EDF-fed bleed jet for pitch/yaw attitude; REQUIRES GEN (Rev R1); not printed in Phases 5-10 *** -PRINT-RCS-MANIFOLD,rcs_distribution_manifold.stl — 4-way RCS bleed manifold off EDF plenum — Phase 11 DEFERRED,Printed Part,0,25,0,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,*** PHASE 11 DEFERRED — splits ~15% EDF mass flow to the 4 RCS valves; REQUIRES GEN (Rev R1); not printed in Phases 5-10 *** -PRINT-RCS-VALVE-BRACKET,rcs_valve_bracket.stl — SG90-class proportional valve mount — Phase 11 DEFERRED,Printed Part,0,10,0,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 4 per aircraft; one per RCS bleed jet; REQUIRES GEN (Rev R1); not printed in Phases 5-10 *** -PRINT-FEET,s_feet_x_4_scaled24.stl — Landing gear feet x4,Printed Part,1,80,80,In-house 3D print,TPU 95A — see FIL-TPU-95A,0.00,0.00,0.25mm / 40%; flexible shock absorbers -PRINT-LEGS,s_legs_scaled24.stl — Landing gear legs,Printed Part,1,60,60,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,0.15mm / 30% -SECTOR-M1-R22,M=1.0 sector gear R=22mm — fixed to tilt bracket,Gear,2,8,16,In-house resin print,nacelle_sector_gear.scad,3.00,6.00,Fixed to bracket; nacelle Pinion A rolls along arc during tilt; print resin SLA at <=0.05mm -PINION-A-M1-12T,M=1.0 Drive Pinion A N=12T R=6mm on nacelle exterior,Gear,2,3,6,In-house resin print,nacelle_pinion.scad,2.00,4.00,MR63ZZ (3×6×2.5mm) × 2 per pinion; shaft = 3mm CF rod -BEVEL-M1-14T,M=1.0 bevel gear pair N=14T 45° pitch cone 1:1 90° redirect,Gear,4,4,16,SDP-SI or in-house resin,nacelle_bevel_pair.scad,8.00,32.00,2 per nacelle (Bevel A transverse + Bevel B longitudinal); resin SLA preferred -CROWN-M1-12T,M=1.0 Crown Pinion N=12T R=6mm — drives the compound idler which drives the 72T nozzle ring gear (Rev S),Gear,2,3,6,In-house resin print,nacelle_pinion.scad,2.00,4.00,MR63ZZ × 2 per crown; offset 10mm toward intake of the ring (CROWN_Z=NOZZLE_RING_Z-10) so the idler's two gear bands mesh both — see TODO §1.1.3.3 -BEVEL-HOUSING,Bevel gear housing block CF-PETG 24×14×20mm,Gear,2,12,24,In-house CF-PETG print,nacelle_bevel_housing.scad,0.00,0.00,Mounts to inboard nacelle boss posts via M2.5 screws -SHAFT-CF-3MM,3mm OD solid CF rod for gear shafts cut to length,Hardware,1,4,4,Amazon / AliExpress,3mm solid carbon fiber rod 300mm,6.00,6.00,2x 22mm transverse + 1x 52mm longitudinal per nacelle -BRG-MR63ZZ,MR63ZZ miniature ball bearing 3×6×2.5mm,Bearing,8,0.5,4,Amazon / AliExpress,MR63ZZ miniature ball bearing 3x6x2.5mm,0.80,6.40,2 per pinion/crown × 4 = 8 total -PTFE-SLEEVE-4MM,PTFE tube 4mm OD 3mm ID longitudinal shaft sleeve,Hardware,1,2,2,Amazon / AliExpress,PTFE tube 4mm OD 3mm ID 300mm,4.00,4.00,52mm per nacelle inside conduit; lubricates 3mm CF shaft -PRINT-CARGO-DOOR-PORT,"cargo_door_port.stl — Port clamshell cargo door, CF-PETG",Printed Part,1,45,45,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #22 2026-06-01); bilinear interp from belly faces; 8-barrel piano hinge tab; 3mm CF rod bore 3.15mm; 2x2mm foam gasket channel on inner mating flange; 0.15mm / 40% gyroid / 4 walls -PRINT-CARGO-DOOR-STBD,"cargo_door_stbd.stl — Starboard clamshell cargo door, CF-PETG",Printed Part,1,45,45,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #22 2026-06-01); mirror of cargo_door_port.stl; print with supports on hinge tab; 0.15mm / 40% gyroid / 4 walls -PRINT-CARGO-WINCH-PEDESTAL-PORT,"cargo_winch_pedestal_port.stl — Port axle clamp + bearing seat + SPT5425LV case cradle, CF-PETG",Printed Part,1,18,18,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3; supersedes cargo_winch_motor_mount.stl (N20 cantilever mount). Case cradle sized to SPT5425LV 40.5x20x40.5mm (REF-SENSOR-013). NOT YET GENERATED — generator implementation open. 0.15mm / 40% gyroid / 4 walls." -PRINT-CARGO-WINCH-PEDESTAL-STBD,"cargo_winch_pedestal_stbd.stl — Stbd axle clamp + bearing seat + pawl pivot boss + solenoid mount, CF-PETG",Printed Part,1,20,20,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3/§3.4/§3.5. NOT YET GENERATED. 0.15mm / 40% gyroid / 4 walls." -PRINT-CARGO-WINCH-SPOOL-R2,"cargo_winch_spool_r2.stl — Dyneema winch spool, CF-PETG, twin MR84ZZ bearing counterbores + integral 24-tooth ratchet ring, no anchor slot",Printed Part,1,16,16,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3; supersedes cargo_winch_spool.stl (PETG, N20 D-bore + anchor slot defeated the R5 line-shed requirement). Deliberate sacrificial/wear part (§3.8) — spare in the field kit. NOT YET GENERATED. 0.15mm / 40% gyroid." -PRINT-CARGO-WINCH-PAWL,"cargo_winch_pawl.stl — sawtooth ratchet pawl lever, CF-PETG",Printed Part,1,2,2,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.4. NOT YET GENERATED. 0.15mm / 40% gyroid / 4 walls." -PRINT-CARGO-WINCH-DOG-COUPLER,"cargo_winch_dog_coupler.stl — lost-motion servo-to-spool dog coupler, CF-PETG",Printed Part,1,3,3,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.2/§3.3; isolates the servo from radial load. NOT YET GENERATED. 0.15mm / 40% gyroid / 4 walls." -PRINT-CARGO-WINCH-FAIRLEAD,"cargo_winch_fairlead.stl — line exit guide, 10mm throat radius, PETG",Printed Part,1,3,3,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3/§3.6; keeps a shed line clear of the flange. NOT YET GENERATED. 0.15mm / 25% gyroid." -PRINT-CARGO-DOOR-SERVO-BKT,"cargo_door_servo_bracket.stl — Port door SG90 servo bracket, CF-PETG",Printed Part,1,10,10,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); SG90 pocket + 2x M2 screws; 1mm music wire pushrod slot; 0.15mm / 40% gyroid / 4 walls -PRINT-CARGO-RELEASE-BKT,"cargo_release_servo_bracket.stl — Release SG90 servo bracket, CF-PETG",Printed Part,1,10,10,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); mirrors door servo bracket; drives cradle pull-wire release; 2mm PTFE guide tube for wire; 0.15mm / 40% gyroid / 4 walls -PRINT-DRV8833-TRAY,"cargo_drv8833_tray.stl — DRV8833 breakout tray, PETG",Printed Part,1,8,8,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); 23x19mm PCB pocket; 4x snap tabs; JST-PH 2mm cutout; 3mm thermal clearance; 0.20mm / 25% gyroid -PRINT-CARGO-CRADLE,"cargo_cradle_autolatch.stl — Cargo auto-latch cradle, PETG",Printed Part,1,18,18,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); press-to-lock latch 5N hold; 0.5mm SS spring wire; pull-wire release from SERVO-CARGO Ch-B; 50x50x30mm+ payload footprint; 0.20mm / 40% gyroid -PRINT-GPS-RETENTION,"cargo_gps_retention_ring.stl — GPS patch antenna retention ring, PETG",Printed Part,1,5,5,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); 25mm dia opening; 3mm lip catches GPS PCB edge; bonds to door inner face; 0.20mm / 20% gyroid -PRINT-FPV-BEZEL,"cargo_fpv_bezel.stl — FPV camera bezel, PETG, forward cargo bulkhead",Printed Part,1,8,8,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); 28mm FOV cutout for M12 FPV module; 4x M2 mounting screws; camera points down at payload; cable to Cape-B MIPI/USB; 0.20mm / 20% gyroid -PRINT-BATT-TRAY,"battery_tray.stl — 6S LiPo battery tray, CF-PETG; interior 148×56×44mm; adjustable ±20mm keel rail",Printed Part,1,22,22,In-house 3D print,CF-PETG + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev Q new; stations 60-130mm from nose; 3mm wall / 4mm floor; 4x strap anchor slots; 4x 8×2mm vent slots (stainless mesh); 14×10mm XT60/balance exit slot; forward stop rib 4mm; SCAD: battery_tray.scad; 0.15mm / 40% gyroid / 4 walls -PRINT-BELLY-PANEL,"belly_panel.stl — Battery bay belly access panel, PETG; 160×65mm; flush rebate fit",Printed Part,2,6,12,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,Rev Q new; 2mm PETG; 1.5mm rebate locates flush with hull skin; 2x M3 coin-slot screws; EPDM foam tape seal; 1 per face (port+stbd); SCAD: belly_panel.scad; 0.20mm / 15% gyroid / 3 walls -BATT-STRAP-CAM,"16mm silicone cam-buckle strap, 50N rated — battery retention (2 per aircraft)",Hardware,2,8,16,Amazon / AliExpress,16mm silicone strap metal side-release cam buckle 50N,3.00,6.00,Rev Q new; two straps cross battery at 1/3 and 2/3 positions; route through tray anchor slots; 100N combined = 2.7x SF at 5G crash load per BATTERY_MOUNT.md §3.2 -BATT-FOAM-SILICONE,"3mm medium-density silicone foam sheet, Shore A 20-30 — battery tray lining",Hardware,1,10,10,Amazon / AliExpress,3mm closed-cell silicone foam sheet Shore A 20-30 200x200mm,5.00,5.00,Rev Q new; bond to tray floor + 4 side walls; pre-compresses ~1mm when strapped = locks vertical vibration; cut to fit tray interior 148×56×44mm -MESH-VENT-SS,"Stainless 0.5mm perforated mesh, 30×10mm strip — battery tray vent covers (4×)",Hardware,1,3,3,Amazon / AliExpress,Stainless perforated mesh sheet 0.5mm thick 1mm holes,4.00,4.00,Rev Q new; 4x 10×4mm strips covering 4 vent slots in tray floor; prevents debris ingestion; bond with CA adhesive to floor underside -SCREW-M3-8-BTN,"M3×8mm stainless button-head cap screw — belly panel fasteners",Hardware,4,0.3,1.2,Amazon / McMaster-Carr,M3×8mm stainless button-head SHCS ISO 7380,0.20,0.80,Rev Q new; 2x per belly panel × 2 panels = 4 total; coin-slot drive in head; finger-tight + 1/4 turn max (PETG boss strips at >0.5 N·m) -SEAL-EPDM-2MM,"2mm closed-cell EPDM foam tape — belly panel rebate dust seal",Hardware,1,2,2,Amazon / AliExpress,2mm closed-cell EPDM foam tape 10mm wide self-adhesive,3.00,3.00,Rev Q new; applied in 1.5mm rebate of belly panel; dust seal (not waterproof); replace if adhesion fails after repeated panel cycles -SKIPPER-PB2-I,PocketBeagle 2 Industrial (AM6254) — Skipper comms node,GCS,1,13,13,DigiKey,2820-100003007-ND,51.03,51.03,Rev Q1; USB CDC-ECM tether to host PC; same hardware as aircraft CN nodes; Cape-B-2 + Commo mounted; separate from aircraft nodes -SKIPPER-CAPE-B-2,Cape-B-2 (XO) Rev R1 PCB — Skipper radio+logging cape,GCS,1,34,34,JLCPCB (in-house fab),Order with aircraft Cape-B-2 batch,105.00,105.00,Rev R1: same PCB as aircraft CN (LoRa removed, P1+P2 passthrough rails added); Skipper does not mount Commo board; WiFi+SiK+MAVLink interfaces -SKIPPER-Commo,Commo 49 MHz XCVR sub-module — Skipper XCVR link,GCS,1,18,18,In-house fab,Order with aircraft Commo batch,32.00,32.00,Rev Q1; KISS AX.25; UART5; same sub-module as aircraft positions -SKIPPER-MICROSD-LOG,64 GB microSD — Skipper log storage (CPLD write-blocked),GCS,1,2,2,Amazon / Best Buy,Samsung 64GB Class 10 microSD,12.00,12.00,Rev Q1; CPLD enforces write-block on log partition; same spec as aircraft log cards -SKIPPER-ANT-915-OMNI,5 dBi 915 MHz omni rubber duck — bench and portable use (×2),GCS,2,28,56,Amazon / AliExpress,5dBi RP-SMA 915MHz rubber duck antenna,8.00,16.00,Rev Q1; one for SiK UART2 bench use; one for LoRa SPI1 bench use; field use switches to Yagi+splitter -SKIPPER-ANT-915-YAGI,9 dBi 915 MHz Yagi directional — shared SiK+LoRa via RF splitter,GCS,1,180,180,Amazon / Taoglas,9dBi RP-SMA 915MHz Yagi directional antenna ~1.2m boom,28.00,28.00,Rev Q1; shared via SKIPPER-RF-SPLITTER; only one link transmits at a time; gimbal-mounted; EIRP ≤27.5 dBm (FCC compliant) -SKIPPER-ANT-WIFI-PNL,14 dBi 5 GHz flat panel — WiFi directional antenna,GCS,1,220,220,Amazon / Alfa Network,14dBi 5GHz RP-SMA flat panel antenna,22.00,22.00,Rev Q1; MUST use with WL1837MOD Tx=17 dBm (1700 mBm) to stay ≤30 dBm EIRP (FCC Part 15 UNII-3); gimbal-mounted alongside Yagi -SKIPPER-ANT-49MHZ,49 MHz base-loaded ¼-wave whip with 4 ground radials,GCS,1,150,150,AliExpress / in-house cut,49MHz loaded whip SO-239 with ground radial kit,18.00,18.00,Rev Q1; ~0.94 m physical; 4 radials 1.5 m each; ERP ≤18 dBm (FCC Part 95 limit 20 dBm); tripod-mast mounted -SKIPPER-ANT-ZIGBEE,3 dBi 2.4 GHz rubber duck dipole — Zigbee link,GCS,1,15,15,Amazon / AliExpress,3dBi RP-SMA 2.4GHz rubber duck dipole,6.00,6.00,Rev Q1; Zigbee 2.4 GHz link on Cape-B-2; optional directional upgrade to 6 dBi panel in future -SKIPPER-ANT-GPS,u-blox ANN-MB-00 active GNSS patch — GCS operator position fix,GCS,1,20,20,Mouser / DigiKey,u-blox ANN-MB-00-00 or ANN-MB-01-00,12.00,12.00,Rev Q1; 3.3 V; SMA; provides GCS lat/lon/alt to tracker.py via /dev/gnss_gcs -SKIPPER-GPS-MODULE,u-blox M9N/M10Q GNSS breakout — operator position module,GCS,1,5,5,SparkFun / Mouser,SparkFun GPS-17285 M10Q or equiv u-blox M9N USB UART,38.00,38.00,Rev Q1; USB UART to host PC; NMEA GGA output at 10 Hz; symlinked to /dev/gnss_gcs via udev -SKIPPER-RF-SPLITTER,2-way 915 MHz RF splitter — SiK and LoRa share Yagi,GCS,1,25,25,Mini-Circuits / Amazon,Mini-Circuits ZFSC-2-1W-S+ or equiv SMA 2-way 900 MHz splitter,18.00,18.00,Rev Q1; ≥20 dB port-to-port isolation; 3.5 dB insertion loss; only one link transmits at a time; SMA connectors -SKIPPER-GIMBAL-SERVO,DS3218MG digital servo — pan axis and tilt axis,GCS,2,60,120,Amazon / AliExpress,DS3218MG 25kg.cm digital servo metal gear,14.00,28.00,Rev Q1; 25 kg·cm at 6 V; same model as aircraft nacelle tilt servos; pan stage and tilt stage of antenna gimbal -SKIPPER-GIMBAL-ENC,AS5600 12-bit magnetic encoder PCB breakout — pan and tilt axes,GCS,2,3,6,Amazon / AliExpress,AS5600 I2C magnetic encoder module 12-bit,4.00,8.00,Rev Q1; I²C addr 0x36 (fixed); requires TCA9548A mux SKIPPER-TCA9548A for dual-encoder; ANGLE reg 0x0E-0x0F; STATUS bit 5=MD -SKIPPER-GIMBAL-MAG,N42 diametrically magnetised disc magnet 6×2 mm — encoder rotor,GCS,2,1,2,Amazon / K&J Magnetics,N42 diametrically magnetized disc magnet 6mm dia 2mm thick,1.50,3.00,Rev Q1; one per encoder; epoxy to servo output shaft; must be diametric (not axial) for AS5600 -SKIPPER-TCA9548A,TCA9548A 1-to-8 I²C mux breakout — encoder address isolation,GCS,1,2,2,Amazon / Adafruit,Adafruit TCA9548A 1-to-8 I2C multiplexer breakout (ID 2717),3.50,3.50,Rev Q1; addr 0x70; pan encoder on ch.0; tilt encoder on ch.1; resolves AS5600 fixed-addr conflict on I²C2 bus -SKIPPER-BRG-6804,6804 thin-section bearing 20×32×7 mm — gimbal pan stage,GCS,1,12,12,Amazon / VXB Bearings,6804-2RS thin section bearing 20x32x7mm,8.00,8.00,Rev Q1; press-fit to pan turret housing; ABEC-3 or better; LubeNote: grease with Mobilux EP2; same OD/ID tolerance as nacelle bearing pockets -SKIPPER-ENCLOSURE,IP65 aluminum project box — Skipper field enclosure,GCS,1,280,280,Amazon / Hammond Mfg,Hammond 1455N1601 or equiv 145×90×65mm IP65 aluminum enclosure,28.00,28.00,Rev Q1; EPDM gasket; 40mm fan cutout; cable glands for USB/RF/power/servo; PCB standoffs at Cape-B-2 hole pattern 55×35mm -SKIPPER-TRIPOD,Heavy-duty camera tripod / antenna mast — GCS antenna support,GCS,1,1200,1200,Amazon / B&H,Heavy duty aluminum camera tripod 5kg rated 3/8-16 mount,45.00,45.00,Rev Q1; minimum 5 kg load rating; ≥1.5 m extended height; 3/8"-16 × ¼"-20 adapter to gimbal pan base M6 tripod thread -SKIPPER-PWR-5V-BEC,5V 5A DC-DC switching BEC — Skipper comms node 5V rail,GCS,1,30,30,Pololu,Pololu D24V50F5 5V 5A switching step-down,12.00,12.00,Rev Q1; supplies PB2-I + Cape-B-2 (560 mA typ; 1400 mA peak); input from SKIPPER-FIELD-BATTERY via XT30 -SKIPPER-PWR-6V-BEC,6V 2A DC-DC switching BEC — gimbal servo 6V rail,GCS,1,20,20,Pololu,Pololu D24V22F6 6V 2.2A switching step-down,8.00,8.00,Rev Q1; dedicated servo rail for 2× DS3218MG (200 mA typ; 1200 mA peak stall); input from SKIPPER-FIELD-BATTERY -SKIPPER-FIELD-BATTERY,4S 10000 mAh LiPo — Skipper field power pack,GCS,1,830,830,Amazon / HobbyKing,Tattu 4S 10000mAh 14.8V LiPo XT60 RC battery,65.00,65.00,Rev Q1; ~6.4 h endurance at 560 mA typical load; powers PB2-I + Cape-B-2 + servos + field electronics; XT60 output -FAR-CAGE-AV,Faraday cage assembly — avionics bay 0.1 mm Al foil (foam-bonded) + 0.8 mm lid channel + 0.5 mm lid 70×50×82 mm,EMC/Shielding,4,17,68,Local sheet metal shop / 3M distributor,"0.1 mm 5052-H34 Al foil (5-wall liner bonded to VOID-FAR-CAGE foam cavity with 3M DP190 flexible epoxy); 0.8 mm 5052-H32 Al channel strip (lid perimeter / EMI gasket seat); 0.5 mm 5052-H32 Al removable lid; 0.8 mm brass insert strips at M3 fastener holes",25.00,100.00,"Rev R new; one per bay (Shepherd/Inara/River/Simon); inner clear 66×46×79 mm; 4× M3 captive lid screws; 40 mm fan aperture on aft face; bottom 4× M3 standoff mounts. Construction: 5-wall 0.1 mm Al foil liner bonded into foam void — foam elastic foundation raises panel f₁ ≈ 810 Hz (above EDF shaft ~470 Hz at rated RPM); seam laps ≥25 mm with conductive adhesive; liner is non-removable (integral with airframe foam). Lid perimeter channel (0.8 mm) provides rigid EMI gasket seating surface. Lid (0.5 mm) is field-removable. Flexible adhesive accommodates Al/foam CTE mismatch. *** MASS NOTICE: Faraday aircraft system now 364 g (0.80 lbm) after ferrite/strap reduction; all changes in this commit bring cumulative T/W to ~1.19 without battery swap; battery swap to 2800mAh (BATT-6S-2800) brings T/W to ~1.25 ***" -FAR-GASKET-AV,EMI spring-contact lid gasket — avionics cage 250 mm × 6 mm beryllium-Cu strip,EMC/Shielding,4,3,12,DigiKey / Mouser,Leader Tech F-100-B series or Laird Soft Shield 325,8.00,32.00,Rev R new; one per cage; seals all 4 lid sides ≥60 dB at 500 MHz; compress to 1 mm in lid rebate groove -FAR-FAN-40,40×40×10 mm axial fan 5 V DC 4.8 CFM — Faraday cage internal cooling,EMC/Shielding,4,17,68,DigiKey / Mouser,Sunon ME40101V1-000U-A99 or equiv 40mm 5V fan,6.00,24.00,Rev R new; one per cage; mounts on aft fan-face panel; inlet + outlet each covered by FAR-EMI-VENT-40; powered from Flight Engineer 5 V rail via FAR-FT-PANEL -FAR-EMI-VENT-40,40×40×6 mm aluminum honeycomb EMI vent panel — cage ventilation,EMC/Shielding,8,8,64,Laird Technologies / custom machined,Laird 1-600600 series or custom-cut Al honeycomb stock,12.00,96.00,Rev R new; two per cage (fan inlet + fan outlet); ~3 mm hexagonal cell 6 mm depth; L/d≈2.0 → ≥35 dB attenuation at 1 GHz (MIL-HDBK-419A §1.6) -FAR-BOND-STRAP,100 mm tinned-Cu braid bonding strap M3 lugs — cage chassis ground bond,EMC/Shielding,4,10,40,DigiKey / McMaster-Carr,Panduit GB-10 series or Keystone 3645 braid + M3 compression lugs,5.00,20.00,Rev R1: 1 per cage (down from 2); meets IEC 61000-5-2 bonding requirement; secondary bond path provided by M3 cage mounting screws through alodine Al to airframe; DC resistance ≤2.5 mΩ; 10 A fault-current rated -FAR-FT-PANEL,EMI-filtered signal feed-through panel PCB 55×35 mm — all cage cable penetrations,EMC/Shielding,4,8,32,JLCPCB (fab from project gerbers),FAR-FT-PANEL gerbers (design pending — see TODO §1.2),15.00,60.00,Rev R new; one per cage; 5 kV LC π-filter + TVS on all penetrations: CAN FD ×2 (JST-GH 4P) + RS-485 ×1 (JST-GH 3P) + Ethernet ×1 (RJ45 mag) + power ×1 (JST-GH 2P); continuous with Cape-A-2/B-2 5 kV isolation chain -FAR-FERRITE-4MM,Split ferrite clamp 4 mm bore type-31 NiZn — cable EMI at cage wall,EMC/Shielding,16,5,80,DigiKey / Mouser,Würth 742 716 1 series or Fair-Rite 0431167281,1.50,24.00,Rev R1: 4 per cage × 4 cages (reduced from 8); covers all primary cable penetrations: CAN FD ×2 + RS-485 + Ethernet; power and XCVR leads un-clamped (shorter runs inside foam void, low EM coupling risk); ~200 Ω impedance at 100 MHz -SKIPPER-FAR-FAN,40×40×10 mm axial fan 5 V DC — Skipper Hammond enclosure cooling,GCS,1,17,17,DigiKey / Mouser,Sunon ME40101V1-000U-A99 (same PN as FAR-FAN-40),6.00,6.00,Rev R new; mount in existing 40 mm fan cutout of Hammond 1455N1601; powered from SKIPPER-PWR-5V-BEC 5 V rail -SKIPPER-FAR-GASKET,EMI spring-contact gasket 470 mm × 8 mm — Skipper Hammond 1455N1601 lid seal,GCS,1,5,5,DigiKey / Mouser,Laird Soft Shield 325 or Leader Tech F-100-B wide grade,10.00,10.00,Rev R new; replaces EPDM weatherseal for RF attenuation at lid seam; 470 mm = 2×(145+90) mm perimeter; ≥50 dB attenuation at lid interface -SPAR-TILT-4130,8mm OD x 1.5mm wall AISI 4130 steel tube — rotating tilt spar (hollow 5mm ID for nav wires),Structural Hardware,2,48,96,McMaster-Carr / Aircraft Spruce,4130 chromoly tube 8mm OD 1.5mm wall,9.00,18.00,Rev R2: unified rotating tilt-spar (wing structural spar AND nacelle tilt axis); servo-driven from cargo bay, keyed to nacelle at CG; also carries the Option B nozzle pushrod crank. ~200mm/side. FOS ~13 bend / ~9 torsion (docs/TILT_SPAR_ANALYSIS.md). Hollow 5mm ID routes nav 3-core to outboard nav light. MATERIAL TRADE (docs §3.5): 4130 baseline REQUIRES corrosion finish (zinc/cadmium plate; journals ground — bare tube rusts at bearing journals); 17-4 PH H1075 is the qualified plating-free alternative (same section/mass/stiffness, higher FOS, higher cost/make-from-bar); 7075-T6 is the mass-critical life-limited fallback. FERROMAGNETIC (4130/17-4) — see Hall-sensor rows + EMI WBS §1.4.6. 4130/17-4/7075 allowables require MMPDS/AMS verification — REFERENCES.md / TODO §0.8. -BRG-F688ZZ,F688ZZ flanged/shielded ball bearing 8x16x5mm — tilt-spar ROOT (cargo) bearing,Bearing,2,5,10,Amazon / AliExpress,F688ZZ 8x16x5 flanged shielded,1.80,3.60,Rev R2d: 1 per side — the ROOT (cargo-bay) bearing only; carries the main structural reaction (~9.4 N; x2 dyn ~19 N). The rotating 8mm spar turns in it. Wingtip bearing downsized to BRG-MF128ZZ (see below). Replaces BRG-MF104ZZ. -BRG-MF128ZZ,MF128ZZ flanged/shielded ball bearing 8x12x3.5mm — tilt-spar WINGTIP bearing,Bearing,2,2,4,Amazon / AliExpress / VXB,MF128ZZ 8x12x3.5 flanged shielded,2.00,4.00,Rev R2d (2026-07-19): 1 per side — WINGTIP bearing. DOWNSIZED from F688ZZ: the Ø16 seat radius (7.975mm) exceeded the S1223 tip half-thickness (7.80mm) and broke through BOTH airfoil skins by ~0.21mm (wings_s1223_revo.scad TIP_BRG_*, docs/TILT_SPAR_ANALYSIS.md §8). MF128ZZ (Ø12, flange Ø13.5) seats with ~1.79mm skin margin. Wingtip radial reaction ~19 N (dyn) << MF128 dynamic capacity (~700 N) — load-safe. -PRINT-PUSHROD-CRANK,nacelle_pushrod_crank.stl — Option B nozzle-drive crank, clamps the 8mm tilt spar,Printed Part,2,3,6,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,Rev T (2026-07-18): clamps the rotating 8mm spar (SPAR_OD), carries an M3 ball stud at CRANK_R=8.5mm; tilt directly strokes the nozzle unison-ring lever via the pushrod. nacelle_nozzle_pushrod.scad. 0.15mm/40%/4 walls. -PUSHROD-BALL-M3,M3 ball-link pushrod ~45mm (threaded rod + 2 ball cups) — nozzle drive,Hardware,2,3,6,Amazon / AliExpress,M3 ball link pushrod RC 45mm,2.00,4.00,Rev T: 1 per nacelle; connects the spar crank ball stud to the nozzle unison-ring lever ball stud (PUSHROD_LEN 45mm; ball-cup OD 7mm). Length trim at assembly for the -5deg..140 deg sweep. -BALLSTUD-M3,M3 ball stud, Ø3mm ball — pushrod ends (crank + ring lever),Hardware,4,1,4,Amazon / AliExpress,M3 ball stud 3mm ball RC,0.50,2.00,Rev T: 2 per nacelle (one on the spar crank, one on the nozzle ring lever); M3 shank into tapped 2.5mm pilot bores. -SKIPPER-TILT-ENC-PCB,Tilt-encoder PCB — AKM AK7455 off-axis magnetic angle IC (SPI) — wing/nacelle true-tilt feedback,Sensor,2,2,4,JLCPCB (fab) + Mouser/Digi-Key (AK7455),in-house 7x7mm PCB; AKM AK7455 14-bit angle sensor QFN24 4x4,6.00,12.00,Rev S (2026-07-19): 1 per nacelle joint; closes the tilt-servo loop on ACTUAL nacelle angle so it is independent of spar torsional wind-up (docs/TILT_SPAR_ANALYSIS.md §1/§3.5). SENSOR = AKM AK7455 (REF-SENSOR-008) — explicitly supports the OFF-AXIS (side-of-shaft) config the through-shaft spar requires (on-axis AS5600/MT6701 will NOT work) + anomaly-magnetic-field detection/reduction + EEPROM INL calibration (suits the ferromagnetic 4130/17-4 spar). 4-wire SPI + ERROR on a 7-wire direct-solder pigtail (GND/+3V3/SCLK/MOSI/MISO/CSN/ERROR); both nacelles SHARE the SPI bus via separate CSN (no I2C address conflict). Seats in the wing-tip pad pocket (wings_s1223_revo.scad wing_tip_hall_sensor_pocket). Pinout/interface VERIFIED vs datasheet 200800064-E-00; schematic ERC 0-error. OPEN bench/layout items: off-axis flux 10-70mT at the IC; INL cal over -5..90 (AKM app support); ERROR push-pull vs open-drain; QFN24 EP left OPEN; wing pocket resize 3x3->4x4. Cost est. — verify AK7455 pricing. Supersedes MT6701 (rejected: on-axis) / AS5600 Rev Q. -HALL-RING-MAG,NdFeB ring magnet Ø22 OD x Ø10 ID x 2.5mm — Hall tilt-sensor rotor,Magnet,2,3,6,Amazon / K&J Magnetics,ring magnet 22x10x2.5mm NdFeB,2.00,4.00,Rev S: 1 per nacelle; rides the NON-FERROUS printed hub (PRINT-HALL-HUB) keyed to the rotating spar at the nacelle inboard face; presents the rotating field to SKIPPER-TILT-ENC-PCB (AKM AK7455) OFF-AXIS. Field at the IC must fall in the AK7455 off-axis window 10-70mT (low-flux alarm <~15mT) — magnetization (diametric vs radial) + exact air-gap/offset to be RE-VALIDATED on the bench for the AK7455 off-axis read (set sense plane via R_FIELDSEL; run INL cal). Ø10 ID keeps ≥1mm non-ferrous wall off the 8mm steel spar. OD Ø22 sized for the off-axis IC. _export_pivot_slab.scad nacelle_hall_ring_hub. -PRINT-HALL-HUB,nacelle_hall_ring_hub.stl — non-ferrous ring-magnet carrier hub keyed to tilt spar,Printed Part,2,3,6,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,Rev R2e: 1 per nacelle; OD 24mm (carries the Ø22 ring). CF-PETG is non-ferromagnetic (carbon fibre) — stands the ring magnet ID off the ferromagnetic 4130/17-4 spar and proud of the steel bearing to limit field distortion (docs §3.5 / EMI WBS §1.4.6). Keyed/bonded to the 8mm spar. 0.15mm/40%/4 walls. To be merged into nacelle_pod_50mm_tandem.scad. -HALL-SCR-M2-BRASS,M2 x 6mm brass pan-head screw — NON-FERROUS Hall-sensor PCB + hub fasteners,Hardware,8,0.3,2.4,Amazon / McMaster-Carr,M2 6mm brass machine screw,0.15,1.20,Rev R2c: 2 per sensor PCB + 2 spare per side; MUST be brass/316/nylon (NOT steel) within the ~10mm keep-out of the encoder IC — ferrous fasteners corrupt the angle read (docs §3.5 / EMI WBS §1.4.6). +Ref,Description,Category,Qty,Unit_Mass_g,Total_Mass_g,Supplier,Supplier_PN_or_Search,Est_Unit_Price_USD,Est_Total_Price_USD,Notes +EDF-50-6S,50mm EDF unit @ 6S (6- or 12-blade),Propulsion,4,70,280,AliExpress / Banggood,XFly Galaxy X5 50mm 12-blade 6S 3200KV (canonical) OR Surpass Hobby 2627 (legacy),28.00,112.00,"1240g thrust each (XFly Galaxy X5 canonical); 70g unit mass; verify CW vs CCW rotation before nacelle install; 2 per nacelle tandem with 11-fin stator (90% efficiency); Rev S1 positioning Z=22..72mm EDF1, Z=98..143mm EDF2" +EDF-55-6S,55mm EDF unit @ 6S — Phase 11 DEFERRED,Propulsion,0,95,0,HobbyKing / AliExpress,55mm 6S ducted fan EDF ~1500g thrust,45.00,0.00,"*** PHASE 11 DEFERRED — rear fuselage EDF; not installed in Phases 5-10 (CLAUDE.md: ""optional addition once everything else works""); ~1500g fan thrust; exhausts aft through fixed canonical elliptical nozzle (2.06x1.76 in); also feeds 4 RCS bleed jets (~15% flow); FORWARD (cruise) thrust only — not counted in hover T/W ***" +ESC-40A-6S,"40A 6S BLHeli32 ESC, BDSHOT600",ESC,4,25,100,AliExpress / HobbyKing,BLHeli32 40A 6S DSHOT600 ESC,18.00,72.00,One per 50mm EDF; mount in nacelle hub bore ID=20mm; 55A burst +ESC-50A-6S,50A 6S BLHeli32 ESC — Phase 11 DEFERRED,ESC,0,35,0,AliExpress / HobbyKing,BLHeli32 50A 6S ESC ~65A burst,22.00,0.00,*** PHASE 11 DEFERRED — not installed in Phases 5-10; for 55mm rear EDF only; ~65A burst; XT60; F_ESC5 = 60A MIDI fuse *** +SERVO-TILT,"Nacelle tilt servo — DS3225 converted with LibreServo_v4, 21-24.5 kgf·cm stall (4.8-6.8V), rotation-limit pin removed",Servo,2,60,120,"Amazon / AliExpress (servo) + github.com/Stab-Rabbit-coding/LibreServo_v4 (board, self-build)",DS3225 25kg digital servo metal gear,13.00,26.00,"2026-08-23 (Rev S1d, owner): DS3225 bodies + LibreServo_v4 PCB (TI MSPM0G3518-Q1 + OPTIGA Trust M). Supersedes DS3218 (same session) and the 2026-08-02 SPT5425LV+LibreServo v2. DIMENSIONS AUTHORITATIVE from avionics/datasheets/DS3225 datasheet.pdf (Dongguan City Dsservo): 40x20x40.5 mm, 60 g, 54.5 mm flange span, 49.5x10 mm bolt pattern, flange 27.7 mm above base, IP66, double bearing, 275:1 — DIMENSIONALLY IDENTICAL to the DS3218 datasheet, so the Rev S1d cargo-shell pads (61.5x27.0 mm at hull Z +98.89, bores 49.5x10) are unchanged by this swap. LibreServo_v4 keeps the stock case, so the external envelope is unchanged. ** TORQUE, still marginal ** datasheet stall 21 kgf·cm @5V / 24.5 @6.8V — the '25kg' in the product name is the marketing figure, the spec table maxes at 24.5. Against the >=25 kgf·cm (2.45 N·m) tilt requirement (docs/TILT_SPAR_ANALYSIS.md §2, from serenity-rev-r.jsx L383) that is 98% at 6.8V, ~92% at a 6V rail, 84% at 5V. Much closer than DS3218's 86%, but not cleared on datasheet figures alone. LibreServo_v4 re-drives the motor from 4.5-18V and may close it; no converted-unit figure exists. RESOLVED 2026-08-25 (docs/TILT_SPAR_ANALYSIS.md §2.1): the >=25 kgf·cm requirement was itself the stale artifact -- it is a spec pick (archives/serenity-rev-r.jsx L383), not a load derivation. Pivot-at-CG nulls gravity to within a 0.019 kgf·cm bound (two off-axis parts: spar crank + pushrod); inertia from the nacelle's own mass-moment table and the repo's only cited tilt-transition figure is ~1.78 kgf·cm ultimate. Grounded total ~1.80 kgf·cm = 7.3% of DS3225's cited 24.5 kgf·cm @ 6.8V -- wide margin. Aero moment not grounded (no nacelle Cd/frontal-area data in repo) -- explicit open item, not assumed zero. DS3225 STANDS, no part change. ** CURRENT ** stall 1.9A @5V / 2.3A @6.8V is the 6V servo bus figure (docs/POWER_DISTRIBUTION.md §3.3), now resized there to 2.3A/servo -- NOT RAIL-2 (RAIL-2/5V_OBS is the separate Observer/winch-servo rail; the 'RAIL-2' language previously here was a citation error, corrected 2026-08-25). See REFERENCES.md and airframe/wings-nacelles/WBS.md SPAR-02." +SERVO-RCS-VALVE,"RCS bleed-jet proportional valve servo — SG90 class, OpenServoCore control board — Phase 11 DEFERRED",Servo,0,9,0,"Amazon / AliExpress (servo) + github.com/OpenServoCore/open-servo-core (board, self-build)",SG90 9g micro servo 1.8kg,3.00,0.00,"*** PHASE 11 DEFERRED — 4 per aircraft; modulates the 4 EDF-fed RCS bleed jets for pitch/yaw attitude authority *** 2026-08-02: standardises on the OpenServoCore ""OSC SG90 M007"" swap board (REFERENCES.md REF-SENSOR-015) when this phase is implemented; inherits the pre-production-hardware caveat from SERVO-CARGO below." +SERVO-CARGO,"SG90 micro servo — cargo door actuation (1×) + payload release (1×), OpenServoCore control board",Cargo,2,9,18,"Amazon / AliExpress (servo) + github.com/OpenServoCore/open-servo-core (board, self-build)",SG90 9g micro servo 1.8kg cm,3.00,6.00,"Rev P new; Ch-A = door cam via DRV8833 H-bridge; Ch-B = latch release pull-wire; both on Cape-B GPIO PWM. 2026-08-02: control board = OpenServoCore ""OSC SG90 M007"" (REFERENCES.md REF-SENSOR-015), swap board replacing the SG90 factory PCB in place — same body envelope, no bracket change. Upstream hardware is pre-production (""nothing here is shippable yet""); do not procure in flight-article quantity until upstream reaches a shippable release." +BRG-MF104ZZ,MF104ZZ flanged bearing 4×10×4mm,Bearing,4,2,8,Amazon / AliExpress,MF104ZZ flanged ball bearing 4x10x4mm,1.50,6.00,2 per nacelle pivot housing; press-fit into clevis ear bore OD=16mm; Rev O: confirmed selection over 686ZZ +CF-ROD-4MM,4mm OD solid CF pivot rod (cut to length per pivot housing),Structural Hardware,2,8,16,Amazon / AliExpress,4mm solid carbon fiber rod 300mm,6.00,12.00,One per nacelle; cut length per pivot housing drawing; pivot at Z=83mm (CG) in Rev O +CF-ROD-8MM,8mm OD solid CF wing-root fwd tie-rod (bonded, cut to ~85mm per side),Structural Hardware,2,7,14,Amazon / AliExpress,8mm solid carbon fiber rod (same generic pultruded-CF-rod-stock as CF-ROD-4MM; not part-number-specific),7.00,14.00,"U5/KTD1 wing-root couple: forward rod, Ø8.2mm clearance bore (0.1mm/side), station 14.0mm from LE, 40mm wing-side embed + 41mm fuselage-side embed (West System 105/206 epoxy, docs/structural_analysis.md §6/§7); one per side (port+stbd)" +CF-ROD-6MM,6mm OD solid CF wing-root aft tie-rod (bonded, cut to ~90mm per side),Structural Hardware,2,4,8,Amazon / AliExpress,6mm solid carbon fiber rod (same generic pultruded-CF-rod-stock as CF-ROD-4MM; not part-number-specific),5.00,10.00,"U5/KTD1 wing-root couple: aft rod, Ø6.2mm clearance bore (0.1mm/side), station 62.0mm from LE (root-only embed, does not run to tip), 42mm wing-side embed + 42mm fuselage-side embed (West System 105/206 epoxy); one per side (port+stbd)" +PIN-3X18,3mm OD × 18mm stainless dowel pin — nacelle nozzle flap tangential hinge (Rev S),Hardware,16,0.9,14.4,McMaster-Carr / Amazon,"Stainless dowel pin 3mm x 18mm, McMaster 91585A476 or equiv",0.60,9.60,8 per nacelle × 2; tangential hinge for the Rev R2/S overlapping conical flaps (nacelle_nozzle_iris.scad). Rear nozzle is the fixed canonical elliptical exit (no petals) so it needs no hinge pins. +PIN-2X4,2mm OD × 4mm stainless dowel pin — nacelle nozzle flap cam follower (Rev S),Hardware,16,0.1,1.6,McMaster-Carr / Amazon,"Stainless dowel pin 2mm x 4mm, McMaster 91585A302 or equiv",0.40,6.40,8 per nacelle × 2; follower pin rides the unison-ring spiral face-cam slot that drives each flap — REPLACES the retired Rev R1 0.8mm piano-wire iris link ring (the Rev R2/S drive is a rotating spiral cam, no bent wire). +SECTOR-GEAR-M05,M0.5 sector gear R=22mm — SUPERSEDED in Rev O by SECTOR-M1-R22 (M=1.0); retain row for Rev N back-compat,Gear,0,5,0,AliExpress / Shapeways / in-house resin,M0.5 sector gear 22mm pitch radius — see SECTOR-M1-R22 for Rev O replacement,8.00,0.00,Rev O: replaced by SECTOR-M1-R22 (M=1.0 module). Qty=0 in Rev O/P build. +BEVEL-PAIR-M05,"M0.5 bevel gear pair 1:1, 90° axis redirect — SUPERSEDED in Rev O by BEVEL-M1-14T",Gear,0,3,0,AliExpress,M0.5 bevel gear pair 1:1 90 degree shaft — see BEVEL-M1-14T for Rev O replacement,10.00,0.00,Rev O: replaced by BEVEL-M1-14T (M=1.0). Qty=0 in Rev O/P build. +PINION-M05,M0.5 drive pinion R=6mm — SUPERSEDED in Rev O by PINION-A-M1-12T and CROWN-M1-12T,Gear,0,1,0,AliExpress / in-house resin,M0.5 spur pinion 6mm pitch radius — see PINION-A-M1-12T and CROWN-M1-12T for Rev O,5.00,0.00,Rev O: replaced by M=1.0 pinions. Qty=0 in Rev O/P build. +PB2-I-FC,"PocketBeagle 2 Industrial AM6254 — FC node, Cape-A",Avionics,4,13,52,BeagleBoard.org / DigiKey,PocketBeagle 2 Industrial (AM6254),51.03,204.12,FC node upper slot in bays A/B/D/E; runs ArduPilot / flight control stack +PB2-I-CN,"PocketBeagle 2 Industrial AM6254 — CN node, Cape-B",Avionics,4,13,52,BeagleBoard.org / DigiKey,PocketBeagle 2 Industrial (AM6254),51.03,204.12,CN node lower slot in bays A/B/D/E; comms + logging + payload control +CAPE-A,Cape-A PCB 55×35mm — Sensor + FC cape (tamper mesh on F.Cu/B.Cu nets TMESH_P/N),Avionics,0,0,0,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-A gerbers + BOM,0,0,ARCHIVED Rev Q 2026-06-05 — superseded by CAPE-A-2. +CAPE-B,Cape-B PCB 55×35mm — Comms + Logging + Payload cape (tamper mesh on F.Cu/B.Cu nets TMESH_P/N),Avionics,0,0,0,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-B gerbers + BOM,0,0,ARCHIVED Rev Q 2026-06-05 — superseded by CAPE-B-2. +RCRS-49,RCRS-49 sub-module PCB — 49 MHz TDDS RC,Avionics,0,0,0,JLCPCB (fab from project gerbers),RCRS-49 gerbers,0,0,ARCHIVED Rev Q 2026-06-05 — superseded by XCVR-49MHZ-2. +CAPE-A-2,Cape-A-2 PCB 55x35mm — EMI-hardened Cape-A: ISOW1044BDFMR 5kV CAN FD isolation + ADM2795EBRWZ 5kV RS-485 isolation + ADIN1300BCPZ 1000BASE-T PHY + 2x ISO7642FDWRR 6-ch digital isolators + Wurth 749010012A ETH transformer + JST GH 4P + SRF2012 CMC + PRTR5V0U2X TVS,Avionics,4,31,124,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-A-2 gerbers + BOM,68.00,272.00,Cape-A-2 PCB 55x35mm EMI-hardened — ALL 4 FC positions — Rev Q primary FC cape. ISOW1044BDFMR 5kV CAN FD + ADM2795EBRWZ 5kV RS-485 + ADIN1300BCPZ 1000BASE-T. Gerbers pending DRC. DTS: cape-a2.dts +CAPE-B-2,"Cape-B-2 PCB 55x35mm — EMI-hardened Cape-B: same CAN FD + RS-485 + Ethernet isolation stack as CAPE-A-2 plus Cape-B payload ICs (MAVLink, TI WL1837MOD WiFi/BT, SLB9672 TPM 2.0, ATF16V8BQL CPLD write-blocker, log microSD); P1+P2 passthrough socket rails on upper face for Commo XCVR stack (LoRa removed from XO — moved to Commo board Rev R1)",Avionics,4,40,160,JLCPCB (fab from project gerbers),serenity/kicad/ CAPE-B-2 gerbers + BOM,105.00,420.00,Cape-B-2 PCB 55x35mm EMI-hardened — ALL 4 CN positions — Rev R1: LoRa RFM95W removed (moved to Commo); P1+P2 passthrough rails added to upper face (Commo plugs onto River and Simon stacks; rails bare/capped on Shepherd and Inara stacks). PCB redesign required — see TODO §avionics. Gerbers pending DRC. DTS: cape-b2.dts +Commo,Commo XCVR sub-module PCB — EMI-hardened 49 MHz AX.25 XCVR + LoRa RFM95W 915 MHz: SRF2012-100Y CMC + PRTR5V0U2X TVS + X2Y cap + Wurth 742792512 ferrite on +5V; P1+P2 2×20-pin socket rails (replaces JST GH 6P); 55x35mm 4-layer PCB,Avionics,2,20,40,JLCPCB (fab from project gerbers),Commo gerbers (redesign pending — see TODO §avionics),32.00,64.00,Commo XCVR sub-module — River's Room + Simon's Medbay only (Rev R1). LoRa RFM95W added (moved from Cape-B-2); P1+P2 socket rails replace JST GH 6P for clean board-to-board stacking on XO passthrough rails. RF Z0=52.26Ohm PASS. PCB redesign required. Gerbers pending DRC. +MICROSD-LOG,64GB microSD — Cape-B write-blocked flight log,Avionics,4,1,4,Amazon,Samsung 64GB microSD Class 10 U3,12.00,48.00,Write-blocked; flight log storage; formatted FAT32 or ext4 per firmware +WIRE-49MHZ,49MHz top wire — 0.3mm stainless steel ~470mm dorsal spine,Avionics,1,3,3,Amazon / AliExpress,Stainless steel wire 0.3mm dia 1m spool,5.00,5.00,End-fed shortened wire; horizontal polarisation; cross-pol loss ~6-12dB at <=300m acceptable +POST-FWD-49,Forward wire post + base-loading coil — PETG post + 38uH coil + LC pi-net at dorsal hull ~120mm,Avionics,1,4,4,In-house / AliExpress,38uH air-core inductor + variable cap + PETG printed post,8.00,8.00,3mm clearance from GPS patch face; bench-test HDOP <=1.5 with XCVR TX before flight +POST-AFT-49,Aft wire post + ceramic bead insulator — top of rear nozzle cone ~600mm from nose,Avionics,1,2,2,AliExpress,Ceramic standoff insulator 3mm + PETG post,3.00,3.00,Strain-relief wire at aft post; open-circuit (insulated) end +BATT-6S-4000,6S 4000mAh LiPo — hover / high-endurance,Power,1,750,750,HobbyKing / GetFPV,Tattu or Gens Ace 4000mAh 6S 60C LiPo XT60,55.00,55.00,Primary flight battery; >=15C cont (~60A draw); AUW ~3608g with Rev P cargo hardware +BATT-6S-2800,6S 2800mAh LiPo — cargo delivery (lower mass),Power,1,525,525,HobbyKing / GetFPV,Tattu or Gens Ace 2800mAh 6S LiPo XT60,40.00,40.00,Use when payload <=250g; -225g AUW vs 4000mAh cell +Flight Engineer,Custom Power Distribution Board Rev A1 — 4-layer 90x65mm PCB; dual redundant 5V/10A BEC (TPS54620x2 diode-OR'd); 5V/3A dedicated servo BEC (TPS54620 third instance); 5x INA226 current monitors; BQ76930 6S cell monitor; 150A MAXI + 4x40A mini blade fuses; XT60 in / 4xXT30 out / Molex Nano-Fit BEC out,Power,1,75,75,JLCPCB (fab from project gerbers),avionics/kicad/ Flight Engineer gerbers + BOM,65.00,65.00,Rev A1: 6V/5A TPS54540 servo BEC removed; replaced with 5V/3A servo output from third TPS54620 instance sharing 5V rail (DS3218MG operates 4.8-7.4V; ~21 kg·cm at 5V vs 25 kg·cm at 6V — adequate for nacelle tilt loads with safety margin). Dual redundant 5V avionics SMPS retained. 5x INA226 current sense (0x40-0x44). BQ76930 cell monitor 0x08. 150A MAXI main fuse + 4x40A mini ESC fuses. PCB redesign required — see TODO §avionics. +FUSE-MAIN-150A,Littelfuse 0297150.ZXNV 150A MAXI blade automotive fuse — main battery bus protection,Power,1,8,8,DigiKey / Mouser,Littelfuse 0297150.ZXNV or 0297150.PXCN,1.50,1.50,Installed in Flight Engineer inline fuse holder on VBAT positive rail between XT60 and distribution outputs; clears AFTER 40A branch fuses on short-circuit +FUSE-ESC-40A,Littelfuse 0297040.WXNV 40A mini blade automotive fuse — per-ESC branch protection (4x),Power,4,2,8,DigiKey / Mouser,Littelfuse 0297040.WXNV,0.50,2.00,One per ESC output on Flight Engineer; coordinates with 10AWG wire (55A rated); clears first on ESC-side short; 4 included in Flight Engineer BOM +SHUNT-1MOHM,Bourns CSS2H-2512K-1L00F 1mΩ 3W Kelvin 4-terminal shunt resistor (5x),Power,5,2,10,DigiKey / Mouser,Bourns CSS2H-2512K-1L00F,2.50,12.50,5x on Flight Engineer: 4 for ESC current monitors (U_IS1-U_IS4) + 1 for main bus monitor (U_IS_MAIN); Kelvin 4-terminal connection required; 3W rating; at 40A: P=1.6W within rating +SPT5425LV-WINCH-LS2,"Cargo winch servo — SPT5425LV converted with LibreServo v2, rotation-limit pin removed, RS-485 bus, encoded continuous rotation",Cargo,1,60,60,"Amazon / AliExpress (servo) + github.com/Stab-Rabbit-coding/LibreServo_v2 (board, self-build)",SPT5425LV 25kg digital servo metal gear,13.00,13.00,"2026-08-02 (docs/CARGO_WINCH_SPECIFICATION.md Rev C): supersedes the retired N20-WINCH gearmotor (Rev P/Q/R) and the never-procured STS3215 (Rev B) — REFERENCES.md REF-SENSOR-012 (superseded), REF-SENSOR-013/014. Drives the both-ends-supported spool through a lost-motion dog coupler (torque only, no radial load); paired with HX711 for line tension and AK7455 for true spool position. Stall current not yet published — see REFERENCES.md Open Standards Verification Items." +SOL-CATCH-5V,"Pull solenoid, >=2.5 N @ 3 mm stroke, 5 V — winch ratchet catch actuator",Cargo,1,15,15,Amazon / AliExpress,5V pull-type linear solenoid 3mm stroke 2.5N,4.00,4.00,docs/CARGO_WINCH_SPECIFICATION.md §3.5; de-energised = catch engaged (fail-safe); driven by AO3400 N-FET + SS34 flyback +BRG-MR84ZZ,"MR84ZZ bearing, 4x8x3mm — winch spool hub, pressed in pairs",Bearing,2,1.5,3,Amazon / AliExpress,MR84ZZ miniature ball bearing 4x8x3mm,1.00,2.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.2/§3.3; static rating ~130N, FOS~13 at 10N/bearing" +SHAFT-SS-4MM,"4mm OD A2 stainless rod, 46mm — winch fixed spool axle",Structural Hardware,1,4.6,4.6,Amazon / AliExpress / McMaster-Carr,4mm A2 stainless steel rod 46mm,2.00,2.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.2; stationary, clamped at both pedestals; new stock item (project's stocked 3mm CF rod is unsuitable in a press-fit bearing race)" +SPRING-PAWL,"Compression spring, 1.0N +/-0.2N installed — winch ratchet pawl",Hardware,1,1,1,Amazon / AliExpress / McMaster-Carr,small stainless compression spring 1N,1.00,1.00,docs/CARGO_WINCH_SPECIFICATION.md §3.4; seated in a set-screw-adjustable seat in the starboard pedestal for bench trim of the slip threshold +DOWEL-M2-10,M2 x 10mm A2 stainless dowel — winch pawl pivot,Hardware,1,0.3,0.3,Amazon / AliExpress / McMaster-Carr,M2 x 10mm stainless dowel pin,0.50,0.50,docs/CARGO_WINCH_SPECIFICATION.md §3.4 +SLEEVE-HUB-STEEL,"Steel sleeve, 10mm OD x 8mm ID x 25mm — winch spool hub bearing race",Hardware,1,5.6,5.6,Amazon / AliExpress / McMaster-Carr,steel sleeve bushing 10mm OD 8mm ID,3.00,3.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM2 — bearings press into steel, not printed plastic; keeps fragments captive if the printed hub cracks" +CLIP-EXT-4MM,"External circlip, 4mm shaft — winch axle positive retention",Hardware,2,0.1,0.2,Amazon / AliExpress / McMaster-Carr,4mm external circlip retaining ring,0.30,0.60,docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM1 — positive axle retention outboard of each pedestal; the pinch screw is demoted to locating/anti-rotation only +KEEPER-WINCH,"Keeper bar, 1mm aluminium, pedestal-to-pedestal — winch independent secondary capture",Hardware,1,5,5,In-house fabrication / Amazon aluminium stock,1mm aluminium sheet/strap stock,2.00,2.00,docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM4 — holds the spool assembly captive even if FM1-FM3 all fail or a retainer is omitted at assembly +PLATE-PEDESTAL,"Aluminium backing plate, pedestal through-bolt — winch pedestal mounting",Hardware,2,2,4,In-house fabrication / Amazon aluminium stock,aluminium backing plate stock,1.50,3.00,docs/CARGO_WINCH_SPECIFICATION.md §3.10.3 FM3 — replaces heat-set-insert-only mounting for a flight-critical joint per root AGENTS.md §7 +ENC-AK7455-SPOOL,AKM AK7455 off-axis angle sensor + diametric magnet — winch spool position,Cargo,1,4,4,Mouser / Digi-Key,AKM AK7455 14-bit off-axis angle sensor QFN24,5.00,5.00,"docs/CARGO_WINCH_SPECIFICATION.md §3.7.3; REF-SENSOR-008, fleet-standard part already used for nacelle tilt (SKIPPER-TILT-ENC-PCB) — no new part number; mates the CAN-PERIPH-GW's existing J_ENC pigtail, no board change" +FET-AO3400,"AO3400 N-FET, SOT-23 — winch catch solenoid drive",Hardware,1,0.1,0.1,Mouser / Digi-Key,AO3400 N-channel MOSFET SOT-23,0.30,0.30,docs/CARGO_WINCH_SPECIFICATION.md §5.1; existing project-standard part (avionics/kicad/Observer/Observer.md Q1) +DIODE-SS34,SS34 flyback diode — across winch catch solenoid coil,Hardware,1,0.2,0.2,Mouser / Digi-Key,SS34 Schottky diode 3A 40V,0.30,0.30,docs/CARGO_WINCH_SPECIFICATION.md §5.1 +HX711-LC,HX711 24-bit load cell ADC module,Cargo,1,3,3,Amazon / AliExpress,HX711 load cell amplifier breakout module,4.00,4.00,Cargo weight monitoring; interfaces to Cape-B SPI/GPIO +DRV8833-CARGO,DRV8833 dual H-bridge motor driver breakout — cargo door + release servo controller,Cargo,1,3,3,Amazon / AliExpress,DRV8833 dual H-bridge motor driver breakout board,2.00,2.00,Rev P new; drives 2x SG90 cargo servos; over-current protection for door-jam scenario; mounts in cargo_drv8833_tray.stl; 2.7-10.8V supply +DYNEEMA-SK75,"Dyneema SK75 0.5mm braided line, 2m — cargo winch spool line",Cargo,1,3,3,Amazon / AliExpress,Dyneema SK75 0.5mm braided fishing line 100m spool,4.00,4.00,Rev P new; buy 100m spool cut to 2m; break strength ~300N; WLL ~60N (5:1 SF) >> 400g payload load of ~4N +FOAM-GASKET-CARGO,3M foam gasket tape 2×2mm — cargo door mating flange seal,Cargo,1,5,5,Amazon,3M foam double-sided tape 2mm wide closed-cell weatherseal,3.00,3.00,Rev P new; fills 2x2mm door flange groove in cargo_door_port/stbd.stl; dust and weather seal; replace if adhesion fails after door cycles +CF-BAR-6X3,CF flat bar 6x3mm — hull keel (TBD length + form),Structural,1,30,30,Amazon / AliExpress,6mm x 3mm carbon fiber flat bar 700mm,12.00,12.00,*** COMPLETE RE-EVALUATION REQUIRED (Rev R1) *** A continuous bow-to-stern keel is structurally justified, but the canonical Serenity hull geometry makes a straight flat bar infeasible: Head_Shell Z_min=+61.2mm vs Cargo Z_min=0mm (≈61mm vertical step at head/cargo joint); Middle_Shell horseshoe is open at −Z (no belly floor to bond to at Y=+130..+204mm). Keel form (straight / pre-bent / segmented-lap / tube / CF-tow-in-foam), cross-section, span (full 620mm or cargo-to-rear-only ≈455mm), Z routing, and RF counterpoise integration must all be re-evaluated against the baked canonical hull cross-sections. Datum marks (91/165/251/320/388mm from nose) are stale — tied to pre-Rev N ring plate stations. Mass and length TBD. BLOCKS keel fabrication + ring plate + foam pour — see TODO §1.1.1 keel re-evaluation task. +CF-TUBE-12MM,CF tube 12mm OD x 1.5mm wall x 350mm — wing spar — SUPERSEDED by SPAR-TILT-4130,Structural,0,35,0,Amazon / AliExpress,SUPERSEDED — see SPAR-TILT-4130,10.00,0.00,CARGO-02 (closed 2026-08-24): the fixed 12 mm CF tube through-spar is retired — wings_s1223_revo.scad Rev R2 (2026-07-18) replaced it with an 8 mm OD AISI 4130 rotating tilt-spar per side (SPAR-TILT-4130, already carried in this BOM), which is simultaneously the wing structural spar and the nacelle tilt axis and terminates at the fuselage wall on an F688ZZ bearing (REF-SENSOR-019) rather than crossing the fuselage. Qty=0; retained for traceability per this file's SUPERSEDED convention. Do not re-add a second spar line — SPAR-TILT-4130 is the single active row for this part. +CF-PLATE-2MM,2mm CF plate — ring/thwart profiles (3 stations: cargo Y=-40mm fore thwart, Y=+118mm aft thwart, rear Y=+290mm ring),Structural,3,21.4,64.2,Amazon / AliExpress,2mm carbon fiber sheet 200x300mm,20.00,40.00,SUPERSEDED 2026-08-25 (U4, SPAR-01, docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md): the cargo Y=+30mm ring (ring_cargo_Y30_plate_PROVISIONAL.dxf, 77.7 g) is RETIRED -- the wing spar no longer carries through the fuselage (SPAR-01) and this station's own bottom chord is cut away by the clamshell aperture, so it never closed the couple it was sized for; its DXF was already PROVISIONAL (blocked on the MESH-01 fragmented-mesh defect) so no finalized part is lost. Replaced by two CF thwarts (fore Y=-40mm, aft Y=+118mm), sized in tools/wing_spar_carrythrough.py report_thwart() at FOS 8.5/8.7 against the same 300 MPa cross-ply stand-in this file's ring analysis used (NOT a verified allowable -- ASTM D3039/D695 certificates required before fabrication, root TODO.md §0.8): 2mm x 25mm CF plate section, ~14 g each (28 g/0.062 lbm the pair)," locating-groove pockets cut in add_structural_features.py RING_POCKETS[""cargo_Yn40""]/[""cargo_Y118""] (same 4-slab pattern as the existing rings) and wired into merge_cargo_interior.py (the retired Y=+30 pocket is gated off via RING_Y30_ENABLED=False", not deleted). Rear Y=+290mm ring UNCHANGED from the original Rev R1 evaluation (docs/structural_analysis.md §5): ring_rear_Y290_plate.dxf, FINAL, net area 113.2 cm^2, mass 36.2 g @ rho=1.6 g/cm^3 (density per structural_analysis.md §5.6, verified precedent in this repo). Combined mass 64.2 g (Unit_Mass_g/Total_Mass_g are an average across three different-size parts," same convention this row has always used). Thwart DXF plate profiles not yet extracted/exported -- same ""not yet cut"" status the retired ring carried; do not procure until exported." +FOAM-PU-2LB,"Two-part closed-cell PU foam — 2 lb/ft³, 4x expansion",Structural,1,900,900,Amazon / Foam Factory,2 lb/cu ft two-part expanding foam kit (A+B),25.00,25.00,~0.7L mixed fill; place EPS void formers for avionics bays + cargo before pouring; do NOT foam nacelle or open cargo bay +WIRE-6AWG,6AWG silicone wire — battery XT60 to Flight Engineer XT60 (main bus),Wiring,1,60,60,Amazon / AliExpress,6AWG silicone wire red/black 200mm each,12.00,12.00,Rev R1: 4AWG→6AWG; main battery positive + negative; 200mm per polarity; 6AWG rated 120A continuous / 200A burst at this length; R=0.84 mΩ ΔV=0.13V at 160A peak — negligible; saves 30g vs 4AWG +WIRE-10AWG,10AWG silicone wire — Flight Engineer XT30 outputs to ESC inputs,Wiring,1,80,80,Amazon / AliExpress,10AWG silicone wire red/black 1m each,15.00,15.00,ESC branch wiring only (Flight Engineer XT30 to ESC XT30); 55A rated free air; 1 pair per ESC x4 = ~400mm per polarity total; NOT for main battery bus (use WIRE-4AWG) +WIRE-16AWG,16AWG silicone wire — ESC to EDF motor phase leads,Wiring,1,40,40,Amazon / AliExpress,16AWG silicone wire 3m assorted,10.00,10.00,5 ESCs x 3 phases x ~200mm each +WIRE-28AWG-STP,28AWG shielded twisted pair — servo signal + DSHOT leads,Wiring,1,20,20,DigiKey / Mouser,28AWG shielded twisted pair signal cable 5m,15.00,15.00,Minimise EMI near avionics bays; use shielded for DSHOT and servo signal runs +CONDUIT-PTFE,PTFE conduit 3mm ID — data bus run full hull length,Wiring,1,25,25,Amazon / AliExpress,PTFE tube 3mm ID 4mm OD 700mm,8.00,8.00,Houses CAN FD / RS-485 / 1553 / ETH data bus bundle; full hull length +FIL-PETG,PETG filament 1kg spool — hull shells and fairings,Filament,1,1000,1000,Amazon / Hatchbox / eSUN,Hatchbox or eSUN PETG 1kg 1.75mm,28.00,56.00,"~1460g required in Rev P (Rev O ~1400g + ~54g cargo prints); 2 spools; 0.20mm layer / 8% gyroid typical SUPERSEDED 2026-08-25 (owner-directed airframe-wide CF-PETG conversion): the four primary fuselage shells (head/middle/cargo/rear) and most other structural and semi-structural printed parts moved to 20% CF-PETG (FIL-CF-PETG) -- see that row's Notes for the full list and rationale. Only 4 printed parts still cite plain PETG, totaling ~65 g: PRINT-NACELLE-FLAP-MASTER/-SEAL (translucent-blue cosmetic requirement), PRINT-GPS-RETENTION (RF -- conductive material near a GPS antenna), PRINT-CARGO-WINCH-FAIRLEAD (CF surface would abrade the winch line). Qty dropped from 2 spools (2000 g) to 1 (1000 g) accordingly -- 1 spool is now far more than needed, kept at 1 (not fractional) since PETG is cheap and the spool is also the fallback stock for any future non-structural part." +FIL-CF-PETG,"CF-PETG filament 1kg spool — 20% chopped carbon fiber, structural airframe skins/shells/brackets",Filament,2,1000,2000,3D Maker Engineering,"3D Maker Engineering PETG-CF Pro Series, 20% chopped carbon fiber (verified), 1.75mm 1kg",19.99,39.98,"MATERIAL SPEC LOCKED 2026-08-25 (owner-directed): 20% chopped CF, not the previously-cited 3DXTech CarbonX PETG+CF, whose fiber fraction is not published by the manufacturer anywhere (confirmed via 3dxtech.com product page and web search, 2026-08-25) -- citing an unverified % would violate this repo's no-fabricated-spec rule (AGENTS.md SS4). 3D Maker Engineering's PETG-CF Pro Series explicitly states ""20% chopped Carbon Fiber"" on its own product page (verified by direct fetch, 2026-08-25). 20%, not 30%: a genuine 30%-CF-PETG filament is not a normal retail product -- REF-MAT-002's 30% sample was a custom twin-screw-extruder lab blend, and every commercial filament checked (SUNLU, SainSmart, Filamentive, ZYLtech) tops out around 15-20%; owner confirmed 20% as the target (2026-08-25) after this was flagged. 20% CF-PETG mechanical properties per REF-MAT-002 (docs/structural_analysis.md SS6.4): 77 MPa flexural strength / 6.67 GPa flexural modulus, ASTM D790 -- clears the rear skid nose-high-landing FOS target (4.75 vs the 4.0 target) once combined with the LG-26 rod-bore fix; plain PETG did not (3.47). Mass: 2000 g required (39 printed-part BOM rows now cite FIL-CF-PETG, totaling 1750 g -- was ~755 g before the 2026-08-25 airframe-wide PETG-to-CF-PETG conversion added the four primary fuselage shells [head/middle/cargo/rear] plus several smaller structural parts); 2 spools with margin, was 1 spool. Excluded from conversion, kept plain PETG, see their own BOM rows: PRINT-GPS-RETENTION (RF -- conductive material near a GPS antenna), PRINT-CARGO-WINCH-FAIRLEAD (CF surface would abrade the winch line), PRINT-NACELLE-FLAP-MASTER/-SEAL (translucent-blue cosmetic requirement, CF-PETG is opaque), dorsal_antenna_fin.stl (RF -- antenna structure). Requires hardened-steel nozzle (unchanged from the prior CF-PETG spec); 0.15mm layer / 25-40% gyroid typical for the newly-converted shells, matching the existing CF-PETG print convention." +FIL-TPU-95A,TPU 95A flexible filament 0.75kg — landing gear feet,Filament,1,250,250,Amazon / Polymaker,Polymaker PolyFlex TPU95 0.75kg 1.75mm,30.00,30.00,~100g required; 0.25mm layer / 40% infill +PRINT-HEAD-SHELL,head_shell24_2mm_repaired.stl — Cockpit / nose section (Blender-canonical),Printed Part,1,83,83,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"PRINT FROM: airframe/stls/fuselage/head_shell24_2mm_repaired.stl (baked hull-frame R1; 790036 tri; extents X -232.9..-103.5 / Y -305.7..-70.7 / Z +61.1..+201.5 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/head_shell24_2mm_repaired.stl. SCAD s_head_shell24.scad is secondary reference only. Rev R1: 0.20mm / 5% gyroid (reduced from 8%); saves ~12g. FABRICATION SPLIT at head/cargo joint hull Y≈−71mm — print-split for fabrication access MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product).", not a structural joint. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse reference model was a decorative display piece — no structural provision for UAV flight loads (bending, torsion, shear, vibration). Inter-section load paths must be designed from first principles. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss design task. Joint face requires minimum 2-wall contact annulus + positive-stop shoulder per CLAUDE.md once structural design is complete. +PRINT-MIDDLE-CANONICAL,middle_shell24_2mm_repaired.stl — Fuselage mid-section (Blender-canonical: horseshoe ring + inner neck — ONE piece),Printed Part,1,135,135,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"PRINT FROM: airframe/stls/fuselage/middle_shell24_2mm_repaired.stl (baked hull-frame R1; 855328 tri; extents X -258.5..-81.6 / Y +130.4..+203.6 / Z +1.3..+166.1 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/middle_shell24_2mm_repaired.stl. SCAD s_middle_canonical_shell24.scad superseded. GEOMETRY: ONE printed piece — (1) outer horseshoe ring (U-shaped exterior frame open at −Z/ventral); (2) inner neck (closed tube passing through horseshoe centre MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product).", connecting cargo bay interior to rear engine room interior). FLIGHT ENGINEER'S ROOM: the Flight Engineer PDB bay is located inside the inner neck, accessible through the open ventral face of the horseshoe. Mounting boss features for Flight Engineer must be added to the inner neck before printing — see TODO §1.1.1.3. PHASE 5-10: inner neck is a closed tube — aft EDF intake scoops (4 radial cuts for 120mm EDF) are DEFERRED to Phase 11. Print as-is with no intake modifications. 0.20mm / 8% gyroid. Rev R1 skid reinforcement: add 4.2mm bore CF rod channel running full length of each horseshoe-to-skid section (2 channels, coaxial with PRINT-REAR-NECK-INTAKE) — see TODO §1.1.5 skid task. FABRICATION SPLITS at cargo/middle hull Y≈+131mm (fwd face) and middle/rear hull Y≈+203mm (aft face) — print-splits for fabrication access only. Skids are integral extensions of this horseshoe ring; the middle/rear cut was for printability only. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse model was a decorative display piece — no structural provision for UAV flight loads. The inner neck and horseshoe ring cross-sections were not designed for bending, torsion, or shear. Inter-section and intra-section structural solutions must be designed from first principles. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss task. The 4mm CF skid rods address skid bending specifically; all other joint load paths remain open design items. +PRINT-CARGO-SECT,cargo_sect_shell24_2mm_repaired.stl — Cargo section (Blender-canonical; interior features pending merge),Printed Part,1,165,165,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"PRINT FROM: airframe/stls/fuselage/cargo/cargo_sect_shell24_2mm_repaired.stl (baked hull-frame R1; 1414068 tri; extents X -267.0..-72.7 / Y -71.5..+132.0 / Z 0.0..+163.2 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/cargo_sect_shell24_2mm_repaired.stl. SCAD cargo_sect_shell24.scad (Rev S3) is secondary — interior boss features (door opening MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product).", hinge blocks, servo pads, spar bore, avionics standoffs) from SCAD Rev S/S1/S2/S3 must be merged into the Blender mesh before printing; see TODO §1.1.1.2. FABRICATION SPLITS at head/cargo hull Y≈−71mm (fwd face) and cargo/middle hull Y≈+131mm (aft face) — print-splits for fabrication access, not structural joints. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse model was a decorative display piece — no structural provision for UAV flight loads. Inter-section load paths must be designed from first principles. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss task. Joint faces require minimum 2-wall contact annulus + positive-stop shoulder per CLAUDE.md once structural design is complete. +PRINT-REAR-NECK-INTAKE,rear_shell24_2mm_repaired.stl — Rear fuselage / engine bell (Blender-canonical; no EDF hardware Phases 5-10),Printed Part,1,200,200,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"PRINT FROM: airframe/stls/fuselage/rear_shell24_2mm_repaired.stl (baked hull-frame R1; 1095972 tri; extents X -246.1..-105.5 / Y +203.2..+384.3 / Z +3.3..+161.1 mm). BLENDER SOURCE: airframe/blender-scripts/files-hollowed-24in/rear_shell24_2mm_repaired.stl. SCAD s_rear_neck_intake_shell24.scad is secondary. NOTE: the ""neck"" in this part name refers to the rear section transition toward the aft EDF intake (deferred Phase 11) — the inner neck of the MIDDLE section is a separate feature of PRINT-MIDDLE-CANONICAL. PHASE 5-10: print as-is from baked canonical mesh; no EDF intake hardware MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product).", thrust tube, or petal nozzle. Rev R1: 0.20mm / 5% gyroid throughout. Skid reinforcement: skid arms are extensions of the PRINT-MIDDLE-CANONICAL horseshoe ring continuing through this section — the middle/rear print joint is a fabrication split for printability only. Add 4.2mm bore CF rod channels coaxially aligned with matching channels in PRINT-MIDDLE-CANONICAL; insert 4mm CF rod (~250mm per skid from CF-ROD-4MM stock) from aft; epoxy; rod provides skid bending stiffness and joint alignment. See TODO §1.1.5. FABRICATION SPLIT at middle/rear joint hull Y≈+203mm — print-split for fabrication access only. STRUCTURAL CONTINUITY REQUIRES ENGINEERING: the Thingiverse model was a decorative display piece — no structural provision for UAV flight loads. The rear cone geometry, skid arms, and dorsal pod were not designed for bending, torsion, landing impact, or vibration loads. Inter-section and local structural solutions must be designed from first principles. The 4mm CF skid rods address skid bending specifically; all other load paths remain open design items. See CF-BAR-6X3 keel re-evaluation, CF-PLATE-2MM ring plate re-evaluation, and TODO §1.1.1.0b joint boss task. +PRINT-HEAD-CARGO-COLLAR,head_cargo_splice_collar.stl — Internal head/cargo joint splice collar (Rev R1),Printed Part,1,14,14,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"0.15mm / 100% infill / 4 walls (thin 2mm ring). PRINT FROM airframe/stls/fuselage/head_cargo_splice_collar.stl (hull-frame, spans head/cargo joint Y -79..-63mm; ~13.4g; watertight). GENERATOR airframe/stls/fuselage/generate_head_cargo_splice_collar.py. FUNCTION: secures head (~0.59kg forward cantilever) to cargo — converts the peel-prone thin-shell butt joint into a SHEAR-loaded bonded double-lap with full-perimeter 2-wall contact annulus + anti-ovalisation ring, satisfying the CLAUDE.md joint standard. Joint is NOT strength-limited (worst-case 9g crash <1MPa); collar sized by handling/printability. BOND with West System 105/206 thickened with 406 colloidal silica (bridges the 1-2mm bondline); cure 24h before foam-fill. The 3 boss dowel pins (BOSS_PIN_BORES joint1) are retained for assembly registration only — re-roled from structural. See docs/structural_analysis.md section 4a, TODO 1.1.0." +PRINT-CARGO-MIDDLE-COLLAR,cargo_middle_splice_collar.stl — Internal cargo/middle joint splice collar (Rev R1),Printed Part,1,17,17,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"0.15mm / 100% infill / 4 walls (thin 2mm ring). PRINT FROM airframe/stls/fuselage/cargo_middle_splice_collar.stl (hull-frame, spans cargo/middle joint Y +123.1..+139.1mm; ~17.0g; watertight, 1 body). GENERATOR airframe/stls/fuselage/generate_cargo_middle_splice_collar.py. FUNCTION: secures cargo to middle — converts the peel-prone thin-shell butt joint into a SHEAR-loaded bonded double-lap with full-perimeter 2-wall contact annulus + anti-ovalisation ring, satisfying the CLAUDE.md joint standard. Profile taken from the MIDDLE inner wall at Y=+137mm (narrower/cleaner shell at this joint); fit-verified OK against middle over Y 133-139mm. Cargo-side fit checked only against the nearest clean cargo station (Y=+122mm) — the true cargo-side bonding span overlaps the documented cargo MESH-01 defect band; re-verify once that mesh defect is resolved. Joint is NOT strength-limited (real section modulus S_x=31984mm^3 from digitized middle profile; worst-case 9g crash ultimate load 20260 N*mm gives peak fibre stress 0.63MPa, well below the ~5MPa CF-PETG/epoxy allowable); collar sized by handling/printability. BOND with West System 105/206 thickened with 406 colloidal silica; cure 24h before foam-fill. The 3 boss dowel pins (BOSS_PIN_BORES joint2) are retained for assembly registration only. See docs/structural_analysis.md section 7.4, TODO 1.1.1.0b." +PRINT-MIDDLE-REAR-COLLAR,middle_rear_splice_collar.stl — Internal middle/rear joint splice collar (Rev R1),Printed Part,1,16,16,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,"0.15mm / 100% infill / 4 walls (thin 2mm ring). PRINT FROM airframe/stls/fuselage/middle_rear_splice_collar.stl (hull-frame, spans middle/rear joint Y +195.4..+211.4mm; ~15.9g; watertight, 1 body). GENERATOR airframe/stls/fuselage/generate_middle_rear_splice_collar.py. FUNCTION: secures middle to rear — converts the peel-prone thin-shell butt joint into a SHEAR-loaded bonded double-lap with full-perimeter 2-wall contact annulus + anti-ovalisation ring, satisfying the CLAUDE.md joint standard; complements (does not replace) the CF skid rods (FOS 205 in tension, structural_analysis.md section 6.2) which carry the skid-tip impact load path. Profile taken from the MIDDLE inner wall at Y=+195mm (narrower/cleaner shell at this joint; convex-hull-area ratio 0.96-1.00 confirms the section is still a single closed tube at the joint plane, so a FULL RING collar is feasible, not just a partial inner-neck sleeve); fit-verified OK against middle over Y 196-200mm. Rear-side fit checked only against the nearest clean rear station (Y=+233mm) — the true rear-side bonding span overlaps the documented rear MESH-01 defect band; re-verify once that mesh defect is resolved. Joint is NOT strength-limited (real section modulus S_x=27713mm^3 from digitized middle profile; worst-case 9g crash ultimate load 7362 N*mm gives peak fibre stress 0.27MPa, well below the ~5MPa CF-PETG/epoxy allowable); collar sized by handling/printability. BOND with West System 105/206 thickened with 406 colloidal silica; cure 24h before foam-fill. The 3 boss dowel pins (BOSS_PIN_BORES joint3) are retained for assembly registration only; CF skid-rod bores (SKID_ROD_BORES) are clear of the collar ring. See docs/structural_analysis.md section 7.5, TODO 1.1.1.0b." +PRINT-NECK-INTAKE-FRAME,s_neck_intake_frame.stl — CF-PETG structural intake frame ring (bonds into reduced-area scoop windows for 55mm EDF),Printed Part,1,85,85,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; SCAD: serenity/stl/s_neck_intake_frame.scad; REQUIRES REGEN for 55mm intake area (Rev R1); bond with West System 105/206; cure 24h before foam-fill +PRINT-AFT-PLENUM,s_aft_edf_plenum.stl — PETG plenum manifold (55mm EDF inlet + 4 RCS bleed taps) — Phase 11 DEFERRED,Printed Part,0,50,0,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"*** PHASE 11 DEFERRED — 55mm rear EDF plenum with 4 RCS bleed taps (~15% flow); REQUIRES REGEN (outlet 120mm->55mm + RCS taps MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product).", Rev R1); not printed/installed in Phases 5-10 *** +PRINT-EDF-MOTOR-MOUNT,s_edf_55_motor_mount.stl — CF-PETG 55mm EDF motor mount spider — Phase 11 DEFERRED,Printed Part,0,25,0,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 3-arm spider motor mount for 55mm rear EDF; REQUIRES REGEN (120mm->55mm, Rev R1); not printed in Phases 5-10 *** +PRINT-THRUST-TUBE,s_edf_55_thrust_tube.stl — PETG 55mm EDF thrust tube — Phase 11 DEFERRED,Printed Part,0,20,0,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"*** PHASE 11 DEFERRED — inner duct for 55mm rear EDF; REQUIRES REGEN (120mm->55mm MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product).", Rev R1); not printed in Phases 5-10 *** +PRINT-WINGS,s_wings_both_shell24.stl — Wing pair (SUPERSEDED by PRINT-WINGS-S1223 in Rev O),Printed Part,0,110,0,In-house 3D print,SUPERSEDED — see PRINT-WINGS-S1223,0.00,0.00,Retained for traceability; flat-plate cross-section replaced by Selig S1223 profile in Rev O +PRINT-WINGS-S1223,s_wing_port/stbd_s1223_revo.stl — Wing pair with Selig S1223 airfoil (Rev O),Printed Part,2,118,236,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; S1223 t/c=12.14% max camber=8.65%; SCAD: serenity/stl/s_wings_s1223_revo.scad; CL=1.55 at 3deg AoA +PRINT-NACELLE-PORT,s_eng_left_stator_shell24_revo.stl — Port nacelle + CW stator + nav-wire conduit + harness port (Rev O),Printed Part,1,132,132,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,0.15mm / 25% gyroid / 4 walls; SWIRL_DIR=+1 PYLON_SIDE=+1; SCAD: nacelle_pod_50mm_tandem.scad; pivot Z=83mm +PRINT-NACELLE-STBD,s_eng_right_stator_shell24_revo.stl — Stbd nacelle + CCW stator + nav-wire conduit + harness port (Rev O),Printed Part,1,132,132,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,0.15mm / 25% gyroid / 4 walls; SWIRL_DIR=-1 PYLON_SIDE=-1; SCAD: nacelle_pod_50mm_tandem.scad -D SWIRL_DIR=-1 +PRINT-PYLON,s_wing_nacelle_pylon_port/stbd_revo.stl — Integrated wing nacelle tilt pylon (Rev O),Printed Part,2,52,104,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,0.15mm / 40% gyroid / 4 walls; hollow harness channel; spar press-fit bore 3.98mm; 4x M2.5 sector insert + 4x M3 wing insert; SCAD: serenity/stl/s_wing_nacelle_pylon_revo.scad +PRINT-PIV-OUTER,s_eng_piv_outer_scaled24.stl — SUPERSEDED by PRINT-PYLON in Rev O,Printed Part,0,35,0,In-house 3D print,SUPERSEDED — see PRINT-PYLON,0.00,0.00,Retained for traceability; replaced by s_wing_nacelle_pylon_revo.scad +PRINT-PIV-PINS,s_eng_piv_pins_scaled24.stl — SUPERSEDED by PRINT-PYLON fold hinge CF pin in Rev O,Printed Part,0,12,0,In-house 3D print,SUPERSEDED — see SPAR-HINGE-CF4,0.00,0.00,Retained for traceability +PRINT-PISTONS,s_eng_pistons_scaled24.stl — Tilt piston linkage fairing,Printed Part,2,25,50,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"0.20mm / 20% gyroid; decorative fairing only MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product)." +PRINT-PIVOT-ARM,s_pivot_arm_a_scaled24.stl — SUPERSEDED by PRINT-PYLON in Rev O,Printed Part,0,20,0,In-house 3D print,SUPERSEDED — see PRINT-PYLON,0.00,0.00,Retained for traceability +SPAR-TILT-CF4,4mm OD solid CF rod — nacelle tilt spar (press-fit in pylon + MF104ZZ bearing in nacelle),Hardware,2,3,6,Amazon / AliExpress,4mm solid carbon fiber rod 300mm,5.00,10.00,120mm per nacelle; cut to length; press-fit in pylon bore OD 3.98mm; nacelle MF104ZZ bearing rotates on spar +LED-WS2812C-NAC,WS2812C-2020 RGB LED — nacelle tip nav lights (port RED / stbd GREEN),LED,4,0.05,0.2,AliExpress / Mouser,WS2812C-2020 addressable RGB LED,0.20,0.80,2 per nacelle: 1x tip cap LED + 1x spare; FAA 14 CFR 91.209 compliant: port=RED stbd=GREEN +WIRE-28AWG-NAC,28AWG 3-core silicone wire — nacelle nav light WS2812C signal lead,Hardware,1,8,8,Amazon / AliExpress,28AWG 3-core silicone wire 1m,2.50,2.50,VCC / GND / DATA; routed through nacelle D-conduit and pylon hollow body; ~500mm per nacelle run +INSERT-M25-BRASS,M2.5 brass heat-set insert (M2.5×L5 OD3.5mm) — sector gear mount,Hardware,8,0.2,1.6,Amazon / AliExpress,M2.5 brass heat-set threaded insert L5mm,0.10,0.80,4 per pylon sector gear mount × 2 pylons; installed with soldering iron 220°C into CF-PETG +INSERT-M3-WING,M3 brass heat-set insert (M3×L5 OD4.2mm) — wing attachment bolts,Hardware,8,0.3,2.4,Amazon / AliExpress,M3 brass heat-set threaded insert L5mm,0.12,0.96,4 per pylon wing block × 2 pylons; M3×16 SHCS bolt from wing side +PRINT-NACELLE-FLAP-MASTER,"nacelle_nozzle_flap.stl — Nacelle nozzle overlapping conical flap, MASTER — Rev T3 tangential-hinge flap",Printed Part,8,3.4,27.2,In-house 3D print,PETG body + translucent-blue PETG inner face — see FIL-PETG,0.00,0.00,4 per nacelle x 2 (Rev T3 splits the former 8-per-nacelle single flap into 4 master + 4 seal); print flat (concave/flow face down); tangential hinge (PIN-3X18) + spiral-cam follower (PIN-2X4); band r25.0-27.5 mm UNCHANGED from Rev S; mass 3.4g measured from rendered solid; supersedes the archived Rev O flat petal (nacelle_nozzle_petal.stl) +PRINT-NACELLE-FLAP-SEAL,"nacelle_nozzle_flap_seal.stl — Nacelle nozzle overlapping conical flap, SEAL — Rev T3 shingle",Printed Part,8,3.7,29.6,In-house 3D print,PETG body + translucent-blue PETG inner face — see FIL-PETG,0.00,0.00,"4 per nacelle x 2. NEW in Rev T3: alternates with the master flap, lapped 0.2mm radially outboard (band r27.7-30.2 mm); shares PIN-3X18/PIN-2X4 hardware with the master; mass 3.7g measured from rendered solid" +PRINT-NACELLE-THROAT,nacelle_nozzle_throat.stl — Nacelle nozzle fixed throat liner + housing — Rev S,Printed Part,2,20,40,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"0.15mm / 40% gyroid / 4 walls; fixed flow liner + outer shell carrying the 8 tangential hinge bosses and the idler-access slot; RENDER_PART=""throat"" of nacelle_nozzle_iris.scad" +PRINT-NACELLE-RING,nacelle_nozzle_ring.stl — Nacelle nozzle unison ring gear (72T M=1.0) + spiral cams — Rev S,Printed Part,2,18,36,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"0.15mm / 40% / 4 walls; full-circle 72T M=1.0 external ring gear R=36mm driven by the compound idler (NOT a rack); 8 spiral face-cam slots drive the flap follower pins (PIN-2X4); RENDER_PART=""ring"" of nacelle_nozzle_iris.scad" +PRINT-NACELLE-IDLER,nacelle_nozzle_idler.stl — Nacelle nozzle compound idler gear (44T/15T) — Rev S,Printed Part,2,4,8,In-house resin print,nacelle_nozzle_idler.scad,0.00,0.00,Crown-Pinion→ring-gear stage; Idler-In 44T meshes the Crown Pinion," Idler-Out 15T meshes the 72T unison ring; RENDER_PART=""gear""" +PRINT-NACELLE-IDLER-BKT,nacelle_nozzle_idler_bracket.stl — Nacelle nozzle idler bracket — Rev S,Printed Part,2,1,2,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"Two-boss mount for the idler gear shaft; RENDER_PART=""bracket"" of nacelle_nozzle_idler.scad" +PRINT-REAR-NOZZLE,rear_nozzle_canonical.stl — Fixed canonical elliptical tail nozzle (2.06x1.76 in exit) — Phase 11 DEFERRED,Printed Part,0,30,0,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — fixed canonical Serenity tail nozzle (52.3x44.7mm elliptical exit, ~1836 mm2); NO iris, NO servo; blends into hull outer mold line; REQUIRES GEN (Rev R1, supersedes old iris rear_nozzle_frame/petal); not printed in Phases 5-10 *** +PRINT-RCS-THRUSTER,rcs_thruster_nozzle.stl — RCS bleed-air jet nozzle — Phase 11 DEFERRED,Printed Part,0,8,0,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 4 per aircraft; EDF-fed bleed jet for pitch/yaw attitude; REQUIRES GEN (Rev R1); not printed in Phases 5-10 *** +PRINT-RCS-MANIFOLD,rcs_distribution_manifold.stl — 4-way RCS bleed manifold off EDF plenum — Phase 11 DEFERRED,Printed Part,0,25,0,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"*** PHASE 11 DEFERRED — splits ~15% EDF mass flow to the 4 RCS valves; REQUIRES GEN (Rev R1); not printed in Phases 5-10 *** MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product)." +PRINT-RCS-VALVE-BRACKET,rcs_valve_bracket.stl — SG90-class proportional valve mount — Phase 11 DEFERRED,Printed Part,0,10,0,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,*** PHASE 11 DEFERRED — 4 per aircraft; one per RCS bleed jet; REQUIRES GEN (Rev R1); not printed in Phases 5-10 *** +PRINT-FEET,s_feet_x_4_scaled24.stl — Landing gear feet x4,Printed Part,1,80,80,In-house 3D print,TPU 95A — see FIL-TPU-95A,0.00,0.00,0.25mm / 40%; flexible shock absorbers +PRINT-LEGS,s_legs_scaled24.stl — Landing gear legs,Printed Part,1,60,60,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,0.15mm / 30% +SECTOR-M1-R22,M=1.0 sector gear R=22mm — fixed to tilt bracket,Gear,2,8,16,In-house resin print,nacelle_sector_gear.scad,3.00,6.00,Fixed to bracket; nacelle Pinion A rolls along arc during tilt; print resin SLA at <=0.05mm +PINION-A-M1-12T,M=1.0 Drive Pinion A N=12T R=6mm on nacelle exterior,Gear,2,3,6,In-house resin print,nacelle_pinion.scad,2.00,4.00,MR63ZZ (3×6×2.5mm) × 2 per pinion; shaft = 3mm CF rod +BEVEL-M1-14T,M=1.0 bevel gear pair N=14T 45° pitch cone 1:1 90° redirect,Gear,4,4,16,SDP-SI or in-house resin,nacelle_bevel_pair.scad,8.00,32.00,2 per nacelle (Bevel A transverse + Bevel B longitudinal); resin SLA preferred +CROWN-M1-12T,M=1.0 Crown Pinion N=12T R=6mm — drives the compound idler which drives the 72T nozzle ring gear (Rev S),Gear,2,3,6,In-house resin print,nacelle_pinion.scad,2.00,4.00,MR63ZZ × 2 per crown; offset 10mm toward intake of the ring (CROWN_Z=NOZZLE_RING_Z-10) so the idler's two gear bands mesh both — see TODO §1.1.3.3 +BEVEL-HOUSING,Bevel gear housing block CF-PETG 24×14×20mm,Gear,2,12,24,In-house CF-PETG print,nacelle_bevel_housing.scad,0.00,0.00,Mounts to inboard nacelle boss posts via M2.5 screws +SHAFT-CF-3MM,3mm OD solid CF rod for gear shafts cut to length,Hardware,1,4,4,Amazon / AliExpress,3mm solid carbon fiber rod 300mm,6.00,6.00,2x 22mm transverse + 1x 52mm longitudinal per nacelle +BRG-MR63ZZ,MR63ZZ miniature ball bearing 3×6×2.5mm,Bearing,8,0.5,4,Amazon / AliExpress,MR63ZZ miniature ball bearing 3x6x2.5mm,0.80,6.40,2 per pinion/crown × 4 = 8 total +PTFE-SLEEVE-4MM,PTFE tube 4mm OD 3mm ID longitudinal shaft sleeve,Hardware,1,2,2,Amazon / AliExpress,PTFE tube 4mm OD 3mm ID 300mm,4.00,4.00,52mm per nacelle inside conduit; lubricates 3mm CF shaft +PRINT-CARGO-DOOR-PORT,"cargo_door_port.stl — Port clamshell cargo door, CF-PETG",Printed Part,1,45,45,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #22 2026-06-01); bilinear interp from belly faces; 8-barrel piano hinge tab; 3mm CF rod bore 3.15mm; 2x2mm foam gasket channel on inner mating flange; 0.15mm / 40% gyroid / 4 walls +PRINT-CARGO-DOOR-STBD,"cargo_door_stbd.stl — Starboard clamshell cargo door, CF-PETG",Printed Part,1,45,45,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #22 2026-06-01); mirror of cargo_door_port.stl; print with supports on hinge tab; 0.15mm / 40% gyroid / 4 walls +PRINT-CARGO-WINCH-PEDESTAL-PORT,"cargo_winch_pedestal_port.stl — Port axle clamp + bearing seat + SPT5425LV case cradle, CF-PETG",Printed Part,1,18,18,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3; supersedes cargo_winch_motor_mount.stl (N20 cantilever mount). Case cradle sized to SPT5425LV 40.5x20x40.5mm (REF-SENSOR-013). NOT YET GENERATED — generator implementation open. 0.15mm / 40% gyroid / 4 walls. +PRINT-CARGO-WINCH-PEDESTAL-STBD,"cargo_winch_pedestal_stbd.stl — Stbd axle clamp + bearing seat + pawl pivot boss + solenoid mount, CF-PETG",Printed Part,1,20,20,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3/§3.4/§3.5. NOT YET GENERATED. 0.15mm / 40% gyroid / 4 walls. +PRINT-CARGO-WINCH-SPOOL-R2,"cargo_winch_spool_r2.stl — Dyneema winch spool, CF-PETG, twin MR84ZZ bearing counterbores + integral 24-tooth ratchet ring, no anchor slot",Printed Part,1,16,16,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3; supersedes cargo_winch_spool.stl (PETG, N20 D-bore + anchor slot defeated the R5 line-shed requirement). Deliberate sacrificial/wear part (§3.8) — spare in the field kit. NOT YET GENERATED. 0.15mm / 40% gyroid." +PRINT-CARGO-WINCH-PAWL,"cargo_winch_pawl.stl — sawtooth ratchet pawl lever, CF-PETG",Printed Part,1,2,2,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.4. NOT YET GENERATED. 0.15mm / 40% gyroid / 4 walls. +PRINT-CARGO-WINCH-DOG-COUPLER,"cargo_winch_dog_coupler.stl — lost-motion servo-to-spool dog coupler, CF-PETG",Printed Part,1,3,3,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.2/§3.3; isolates the servo from radial load. NOT YET GENERATED. 0.15mm / 40% gyroid / 4 walls. +PRINT-CARGO-WINCH-FAIRLEAD,"cargo_winch_fairlead.stl — line exit guide, 10mm throat radius, PETG",Printed Part,1,3,3,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,docs/CARGO_WINCH_SPECIFICATION.md Rev C §3.3/§3.6; keeps a shed line clear of the flange. NOT YET GENERATED. 0.15mm / 25% gyroid. KEPT PLAIN PETG 2026-08-25 (owner-directed CF-PETG airframe sweep excluded this part on purpose): chopped carbon fiber at the surface is abrasive and would cut/fray the Dyneema line running over this fairlead. Do not convert. +PRINT-CARGO-DOOR-SERVO-BKT,"cargo_door_servo_bracket.stl — Port door SG90 servo bracket, CF-PETG",Printed Part,1,10,10,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); SG90 pocket + 2x M2 screws; 1mm music wire pushrod slot; 0.15mm / 40% gyroid / 4 walls +PRINT-CARGO-RELEASE-BKT,"cargo_release_servo_bracket.stl — Release SG90 servo bracket, CF-PETG",Printed Part,1,10,10,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); mirrors door servo bracket; drives cradle pull-wire release; 2mm PTFE guide tube for wire; 0.15mm / 40% gyroid / 4 walls +PRINT-DRV8833-TRAY,"cargo_drv8833_tray.stl — DRV8833 breakout tray, PETG",Printed Part,1,8,8,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"Rev P new (PR #21 2026-05-30); 23x19mm PCB pocket; 4x snap tabs; JST-PH 2mm cutout; 3mm thermal clearance; 0.20mm / 25% gyroid MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product)." +PRINT-CARGO-CRADLE,"cargo_cradle_autolatch.stl — Cargo auto-latch cradle, PETG",Printed Part,1,18,18,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"Rev P new (PR #21 2026-05-30); press-to-lock latch 5N hold; 0.5mm SS spring wire; pull-wire release from SERVO-CARGO Ch-B; 50x50x30mm+ payload footprint; 0.20mm / 40% gyroid MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product)." +PRINT-GPS-RETENTION,"cargo_gps_retention_ring.stl — GPS patch antenna retention ring, PETG",Printed Part,1,5,5,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,Rev P new (PR #21 2026-05-30); 25mm dia opening; 3mm lip catches GPS PCB edge; bonds to door inner face; 0.20mm / 20% gyroid RF-CRITICAL: GPS patch antenna retention ring -- KEPT PLAIN PETG 2026-08-25 (owner-directed CF-PETG airframe sweep excluded this part on purpose). Carbon fiber is electrically conductive; a conductive ring against/around the antenna's radiating element risks detuning or blocking GPS reception. Do not convert. +PRINT-FPV-BEZEL,"cargo_fpv_bezel.stl — FPV camera bezel, PETG, forward cargo bulkhead",Printed Part,1,8,8,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"Rev P new (PR #21 2026-05-30); 28mm FOV cutout for M12 FPV module; 4x M2 mounting screws; camera points down at payload; cable to Cape-B MIPI/USB; 0.20mm / 20% gyroid MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product)." +PRINT-BATT-TRAY,"battery_tray.stl — 6S LiPo battery tray, CF-PETG; interior 148×56×44mm; adjustable ±20mm keel rail",Printed Part,1,22,22,In-house 3D print,CF-PETG (20% CF) + hardened nozzle — see FIL-CF-PETG,0.00,0.00,Rev Q new; stations 60-130mm from nose; 3mm wall / 4mm floor; 4x strap anchor slots; 4x 8×2mm vent slots (stainless mesh); 14×10mm XT60/balance exit slot; forward stop rib 4mm; SCAD: battery_tray.scad; 0.15mm / 40% gyroid / 4 walls +PRINT-BELLY-PANEL,"belly_panel.stl — Battery bay belly access panel, PETG; 160×65mm; flush rebate fit",Printed Part,2,6,12,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,"Rev Q new; 2mm PETG; 1.5mm rebate locates flush with hull skin; 2x M3 coin-slot screws; EPDM foam tape seal; 1 per face (port+stbd); SCAD: belly_panel.scad; 0.20mm / 15% gyroid / 3 walls MATERIAL CHANGED 2026-08-25 (owner-directed): plain PETG -> 20% CF-PETG (was PETG — see FIL-PETG), per docs/structural_analysis.md SS6.4 nose-high skid re-derivation and REF-MAT-002 (20% CF-PETG: 77 MPa flexural / 6.67 GPa, verified commercial product)." +PRINT-DORSAL-ANTENNA-FIN,"dorsal_antenna_fin.stl — Dorsal antenna support fin, PETG",Printed Part,1,4,4,In-house 3D print,PETG — see FIL-PETG,0.00,0.00,"ADDED TO BOM 2026-08-25: this part existed as a published STL (imported by airframe/FreeCAD-scripts/serenity_assembly.py as Dorsal_Antenna_Fin) and was already repaired for mesh defects this session (4 degenerate zero-area fragments removed, winding corrected, 3 real bodies unioned into 1 -- see WBS.md), but had no BOM row at all until now -- found during the 2026-08-25 owner-directed airframe-wide PETG-to-CF-PETG material sweep. Mass estimated from the published mesh's solid volume (2800 mm^3 x 1.27 g/cm^3 PETG = 3.56 g), rounded up for typical wall/infill printing; not yet bench-weighed. KEPT PLAIN PETG (excluded from the CF-PETG conversion) 2026-08-25: this is a dorsal ANTENNA support structure -- carbon fiber is electrically conductive and converting an antenna's own supporting fin to CF-PETG risks detuning or blocking whichever antenna it carries. Function/which antenna this fin actually serves is not documented elsewhere in this repo as of this writing -- VERIFY before finalizing print settings." +BATT-STRAP-CAM,"16mm silicone cam-buckle strap, 50N rated — battery retention (2 per aircraft)",Hardware,2,8,16,Amazon / AliExpress,16mm silicone strap metal side-release cam buckle 50N,3.00,6.00,Rev Q new; two straps cross battery at 1/3 and 2/3 positions; route through tray anchor slots; 100N combined = 2.7x SF at 5G crash load per BATTERY_MOUNT.md §3.2 +BATT-FOAM-SILICONE,"3mm medium-density silicone foam sheet, Shore A 20-30 — battery tray lining",Hardware,1,10,10,Amazon / AliExpress,3mm closed-cell silicone foam sheet Shore A 20-30 200x200mm,5.00,5.00,Rev Q new; bond to tray floor + 4 side walls; pre-compresses ~1mm when strapped = locks vertical vibration; cut to fit tray interior 148×56×44mm +MESH-VENT-SS,"Stainless 0.5mm perforated mesh, 30×10mm strip — battery tray vent covers (4×)",Hardware,1,3,3,Amazon / AliExpress,Stainless perforated mesh sheet 0.5mm thick 1mm holes,4.00,4.00,Rev Q new; 4x 10×4mm strips covering 4 vent slots in tray floor; prevents debris ingestion; bond with CA adhesive to floor underside +SCREW-M3-8-BTN,M3×8mm stainless button-head cap screw — belly panel fasteners,Hardware,4,0.3,1.2,Amazon / McMaster-Carr,M3×8mm stainless button-head SHCS ISO 7380,0.20,0.80,Rev Q new; 2x per belly panel × 2 panels = 4 total; coin-slot drive in head; finger-tight + 1/4 turn max (PETG boss strips at >0.5 N·m) +SEAL-EPDM-2MM,2mm closed-cell EPDM foam tape — belly panel rebate dust seal,Hardware,1,2,2,Amazon / AliExpress,2mm closed-cell EPDM foam tape 10mm wide self-adhesive,3.00,3.00,Rev Q new; applied in 1.5mm rebate of belly panel; dust seal (not waterproof); replace if adhesion fails after repeated panel cycles +SKIPPER-PB2-I,PocketBeagle 2 Industrial (AM6254) — Skipper comms node,GCS,1,13,13,DigiKey,2820-100003007-ND,51.03,51.03,Rev Q1; USB CDC-ECM tether to host PC; same hardware as aircraft CN nodes; Cape-B-2 + Commo mounted; separate from aircraft nodes +SKIPPER-CAPE-B-2,Cape-B-2 (XO) Rev R1 PCB — Skipper radio+logging cape,GCS,1,34,34,JLCPCB (in-house fab),Order with aircraft Cape-B-2 batch,105.00,105.00,Rev R1: same PCB as aircraft CN (LoRa removed, P1+P2 passthrough rails added); Skipper does not mount Commo board; WiFi+SiK+MAVLink interfaces +SKIPPER-Commo,Commo 49 MHz XCVR sub-module — Skipper XCVR link,GCS,1,18,18,In-house fab,Order with aircraft Commo batch,32.00,32.00,Rev Q1; KISS AX.25; UART5; same sub-module as aircraft positions +SKIPPER-MICROSD-LOG,64 GB microSD — Skipper log storage (CPLD write-blocked),GCS,1,2,2,Amazon / Best Buy,Samsung 64GB Class 10 microSD,12.00,12.00,Rev Q1; CPLD enforces write-block on log partition; same spec as aircraft log cards +SKIPPER-ANT-915-OMNI,5 dBi 915 MHz omni rubber duck — bench and portable use (×2),GCS,2,28,56,Amazon / AliExpress,5dBi RP-SMA 915MHz rubber duck antenna,8.00,16.00,Rev Q1; one for SiK UART2 bench use; one for LoRa SPI1 bench use; field use switches to Yagi+splitter +SKIPPER-ANT-915-YAGI,9 dBi 915 MHz Yagi directional — shared SiK+LoRa via RF splitter,GCS,1,180,180,Amazon / Taoglas,9dBi RP-SMA 915MHz Yagi directional antenna ~1.2m boom,28.00,28.00,Rev Q1; shared via SKIPPER-RF-SPLITTER; only one link transmits at a time; gimbal-mounted; EIRP ≤27.5 dBm (FCC compliant) +SKIPPER-ANT-WIFI-PNL,14 dBi 5 GHz flat panel — WiFi directional antenna,GCS,1,220,220,Amazon / Alfa Network,14dBi 5GHz RP-SMA flat panel antenna,22.00,22.00,Rev Q1; MUST use with WL1837MOD Tx=17 dBm (1700 mBm) to stay ≤30 dBm EIRP (FCC Part 15 UNII-3); gimbal-mounted alongside Yagi +SKIPPER-ANT-49MHZ,49 MHz base-loaded ¼-wave whip with 4 ground radials,GCS,1,150,150,AliExpress / in-house cut,49MHz loaded whip SO-239 with ground radial kit,18.00,18.00,Rev Q1; ~0.94 m physical; 4 radials 1.5 m each; ERP ≤18 dBm (FCC Part 95 limit 20 dBm); tripod-mast mounted +SKIPPER-ANT-ZIGBEE,3 dBi 2.4 GHz rubber duck dipole — Zigbee link,GCS,1,15,15,Amazon / AliExpress,3dBi RP-SMA 2.4GHz rubber duck dipole,6.00,6.00,Rev Q1; Zigbee 2.4 GHz link on Cape-B-2; optional directional upgrade to 6 dBi panel in future +SKIPPER-ANT-GPS,u-blox ANN-MB-00 active GNSS patch — GCS operator position fix,GCS,1,20,20,Mouser / DigiKey,u-blox ANN-MB-00-00 or ANN-MB-01-00,12.00,12.00,Rev Q1; 3.3 V; SMA; provides GCS lat/lon/alt to tracker.py via /dev/gnss_gcs +SKIPPER-GPS-MODULE,u-blox M9N/M10Q GNSS breakout — operator position module,GCS,1,5,5,SparkFun / Mouser,SparkFun GPS-17285 M10Q or equiv u-blox M9N USB UART,38.00,38.00,Rev Q1; USB UART to host PC; NMEA GGA output at 10 Hz; symlinked to /dev/gnss_gcs via udev +SKIPPER-RF-SPLITTER,2-way 915 MHz RF splitter — SiK and LoRa share Yagi,GCS,1,25,25,Mini-Circuits / Amazon,Mini-Circuits ZFSC-2-1W-S+ or equiv SMA 2-way 900 MHz splitter,18.00,18.00,Rev Q1; ≥20 dB port-to-port isolation; 3.5 dB insertion loss; only one link transmits at a time; SMA connectors +SKIPPER-GIMBAL-SERVO,DS3218MG digital servo — pan axis and tilt axis,GCS,2,60,120,Amazon / AliExpress,DS3218MG 25kg.cm digital servo metal gear,14.00,28.00,Rev Q1; 25 kg·cm at 6 V; same model as aircraft nacelle tilt servos; pan stage and tilt stage of antenna gimbal +SKIPPER-GIMBAL-ENC,AS5600 12-bit magnetic encoder PCB breakout — pan and tilt axes,GCS,2,3,6,Amazon / AliExpress,AS5600 I2C magnetic encoder module 12-bit,4.00,8.00,Rev Q1; I²C addr 0x36 (fixed); requires TCA9548A mux SKIPPER-TCA9548A for dual-encoder; ANGLE reg 0x0E-0x0F; STATUS bit 5=MD +SKIPPER-GIMBAL-MAG,N42 diametrically magnetised disc magnet 6×2 mm — encoder rotor,GCS,2,1,2,Amazon / K&J Magnetics,N42 diametrically magnetized disc magnet 6mm dia 2mm thick,1.50,3.00,Rev Q1; one per encoder; epoxy to servo output shaft; must be diametric (not axial) for AS5600 +SKIPPER-TCA9548A,TCA9548A 1-to-8 I²C mux breakout — encoder address isolation,GCS,1,2,2,Amazon / Adafruit,Adafruit TCA9548A 1-to-8 I2C multiplexer breakout (ID 2717),3.50,3.50,Rev Q1; addr 0x70; pan encoder on ch.0; tilt encoder on ch.1; resolves AS5600 fixed-addr conflict on I²C2 bus +SKIPPER-BRG-6804,6804 thin-section bearing 20×32×7 mm — gimbal pan stage,GCS,1,12,12,Amazon / VXB Bearings,6804-2RS thin section bearing 20x32x7mm,8.00,8.00,Rev Q1; press-fit to pan turret housing; ABEC-3 or better; LubeNote: grease with Mobilux EP2; same OD/ID tolerance as nacelle bearing pockets +SKIPPER-ENCLOSURE,IP65 aluminum project box — Skipper field enclosure,GCS,1,280,280,Amazon / Hammond Mfg,Hammond 1455N1601 or equiv 145×90×65mm IP65 aluminum enclosure,28.00,28.00,Rev Q1; EPDM gasket; 40mm fan cutout; cable glands for USB/RF/power/servo; PCB standoffs at Cape-B-2 hole pattern 55×35mm +SKIPPER-TRIPOD,Heavy-duty camera tripod / antenna mast — GCS antenna support,GCS,1,1200,1200,Amazon / B&H,Heavy duty aluminum camera tripod 5kg rated 3/8-16 mount,45.00,45.00,"Rev Q1; minimum 5 kg load rating; ≥1.5 m extended height; 3/8""-16 × ¼""-20 adapter to gimbal pan base M6 tripod thread" +SKIPPER-PWR-5V-BEC,5V 5A DC-DC switching BEC — Skipper comms node 5V rail,GCS,1,30,30,Pololu,Pololu D24V50F5 5V 5A switching step-down,12.00,12.00,Rev Q1; supplies PB2-I + Cape-B-2 (560 mA typ; 1400 mA peak); input from SKIPPER-FIELD-BATTERY via XT30 +SKIPPER-PWR-6V-BEC,6V 2A DC-DC switching BEC — gimbal servo 6V rail,GCS,1,20,20,Pololu,Pololu D24V22F6 6V 2.2A switching step-down,8.00,8.00,Rev Q1; dedicated servo rail for 2× DS3218MG (200 mA typ; 1200 mA peak stall); input from SKIPPER-FIELD-BATTERY +SKIPPER-FIELD-BATTERY,4S 10000 mAh LiPo — Skipper field power pack,GCS,1,830,830,Amazon / HobbyKing,Tattu 4S 10000mAh 14.8V LiPo XT60 RC battery,65.00,65.00,Rev Q1; ~6.4 h endurance at 560 mA typical load; powers PB2-I + Cape-B-2 + servos + field electronics; XT60 output +FAR-CAGE-AV,Faraday cage assembly — avionics bay 0.1 mm Al foil (foam-bonded) + 0.8 mm lid channel + 0.5 mm lid 70×50×82 mm,EMC/Shielding,4,17,68,Local sheet metal shop / 3M distributor,0.1 mm 5052-H34 Al foil (5-wall liner bonded to VOID-FAR-CAGE foam cavity with 3M DP190 flexible epoxy); 0.8 mm 5052-H32 Al channel strip (lid perimeter / EMI gasket seat); 0.5 mm 5052-H32 Al removable lid; 0.8 mm brass insert strips at M3 fastener holes,25.00,100.00,Rev R new; one per bay (Shepherd/Inara/River/Simon); inner clear 66×46×79 mm; 4× M3 captive lid screws; 40 mm fan aperture on aft face; bottom 4× M3 standoff mounts. Construction: 5-wall 0.1 mm Al foil liner bonded into foam void — foam elastic foundation raises panel f₁ ≈ 810 Hz (above EDF shaft ~470 Hz at rated RPM); seam laps ≥25 mm with conductive adhesive; liner is non-removable (integral with airframe foam). Lid perimeter channel (0.8 mm) provides rigid EMI gasket seating surface. Lid (0.5 mm) is field-removable. Flexible adhesive accommodates Al/foam CTE mismatch. *** MASS NOTICE: Faraday aircraft system now 364 g (0.80 lbm) after ferrite/strap reduction; all changes in this commit bring cumulative T/W to ~1.19 without battery swap; battery swap to 2800mAh (BATT-6S-2800) brings T/W to ~1.25 *** +FAR-GASKET-AV,EMI spring-contact lid gasket — avionics cage 250 mm × 6 mm beryllium-Cu strip,EMC/Shielding,4,3,12,DigiKey / Mouser,Leader Tech F-100-B series or Laird Soft Shield 325,8.00,32.00,Rev R new; one per cage; seals all 4 lid sides ≥60 dB at 500 MHz; compress to 1 mm in lid rebate groove +FAR-FAN-40,40×40×10 mm axial fan 5 V DC 4.8 CFM — Faraday cage internal cooling,EMC/Shielding,4,17,68,DigiKey / Mouser,Sunon ME40101V1-000U-A99 or equiv 40mm 5V fan,6.00,24.00,Rev R new; one per cage; mounts on aft fan-face panel; inlet + outlet each covered by FAR-EMI-VENT-40; powered from Flight Engineer 5 V rail via FAR-FT-PANEL +FAR-EMI-VENT-40,40×40×6 mm aluminum honeycomb EMI vent panel — cage ventilation,EMC/Shielding,8,8,64,Laird Technologies / custom machined,Laird 1-600600 series or custom-cut Al honeycomb stock,12.00,96.00,Rev R new; two per cage (fan inlet + fan outlet); ~3 mm hexagonal cell 6 mm depth; L/d≈2.0 → ≥35 dB attenuation at 1 GHz (MIL-HDBK-419A §1.6) +FAR-BOND-STRAP,100 mm tinned-Cu braid bonding strap M3 lugs — cage chassis ground bond,EMC/Shielding,4,10,40,DigiKey / McMaster-Carr,Panduit GB-10 series or Keystone 3645 braid + M3 compression lugs,5.00,20.00,Rev R1: 1 per cage (down from 2); meets IEC 61000-5-2 bonding requirement; secondary bond path provided by M3 cage mounting screws through alodine Al to airframe; DC resistance ≤2.5 mΩ; 10 A fault-current rated +FAR-FT-PANEL,EMI-filtered signal feed-through panel PCB 55×35 mm — all cage cable penetrations,EMC/Shielding,4,8,32,JLCPCB (fab from project gerbers),FAR-FT-PANEL gerbers (design pending — see TODO §1.2),15.00,60.00,Rev R new; one per cage; 5 kV LC π-filter + TVS on all penetrations: CAN FD ×2 (JST-GH 4P) + RS-485 ×1 (JST-GH 3P) + Ethernet ×1 (RJ45 mag) + power ×1 (JST-GH 2P); continuous with Cape-A-2/B-2 5 kV isolation chain +FAR-FERRITE-4MM,Split ferrite clamp 4 mm bore type-31 NiZn — cable EMI at cage wall,EMC/Shielding,16,5,80,DigiKey / Mouser,Würth 742 716 1 series or Fair-Rite 0431167281,1.50,24.00,Rev R1: 4 per cage × 4 cages (reduced from 8); covers all primary cable penetrations: CAN FD ×2 + RS-485 + Ethernet; power and XCVR leads un-clamped (shorter runs inside foam void, low EM coupling risk); ~200 Ω impedance at 100 MHz +SKIPPER-FAR-FAN,40×40×10 mm axial fan 5 V DC — Skipper Hammond enclosure cooling,GCS,1,17,17,DigiKey / Mouser,Sunon ME40101V1-000U-A99 (same PN as FAR-FAN-40),6.00,6.00,Rev R new; mount in existing 40 mm fan cutout of Hammond 1455N1601; powered from SKIPPER-PWR-5V-BEC 5 V rail +SKIPPER-FAR-GASKET,EMI spring-contact gasket 470 mm × 8 mm — Skipper Hammond 1455N1601 lid seal,GCS,1,5,5,DigiKey / Mouser,Laird Soft Shield 325 or Leader Tech F-100-B wide grade,10.00,10.00,Rev R new; replaces EPDM weatherseal for RF attenuation at lid seam; 470 mm = 2×(145+90) mm perimeter; ≥50 dB attenuation at lid interface +SPAR-TILT-4130,8mm OD x 1.5mm wall AISI 4130 steel tube — rotating tilt spar (hollow 5mm ID for nav wires),Structural Hardware,2,48,96,McMaster-Carr / Aircraft Spruce,4130 chromoly tube 8mm OD 1.5mm wall,9.00,18.00,Rev R2: unified rotating tilt-spar (wing structural spar AND nacelle tilt axis); servo-driven from cargo bay, keyed to nacelle at CG; also carries the Option B nozzle pushrod crank. ~200mm/side. FOS ~13 bend / ~9 torsion (docs/TILT_SPAR_ANALYSIS.md). Hollow 5mm ID routes nav 3-core to outboard nav light. MATERIAL TRADE (docs §3.5): 4130 baseline REQUIRES corrosion finish (zinc/cadmium plate; journals ground — bare tube rusts at bearing journals); 17-4 PH H1075 is the qualified plating-free alternative (same section/mass/stiffness, higher FOS, higher cost/make-from-bar); 7075-T6 is the mass-critical life-limited fallback. FERROMAGNETIC (4130/17-4) — see Hall-sensor rows + EMI WBS §1.4.6. 4130/17-4/7075 allowables require MMPDS/AMS verification — REFERENCES.md / TODO §0.8. +BRG-F688ZZ,F688ZZ flanged/shielded ball bearing 8x16x5mm — tilt-spar ROOT (cargo) bearing,Bearing,2,5,10,Amazon / AliExpress,F688ZZ 8x16x5 flanged shielded,1.80,3.60,Rev R2d: 1 per side — the ROOT (cargo-bay) bearing only; carries the main structural reaction (~9.4 N; x2 dyn ~19 N). The rotating 8mm spar turns in it. Wingtip bearing downsized to BRG-MF128ZZ (see below). Replaces BRG-MF104ZZ. CARGO-01/CARGO-02 (closed 2026-08-24): seats in the cargo shell's re-cut bearing seat (merge_cargo_interior.py ROOT_BRG_*, boss WING_SPAR_BOSS_OD=27.7mm) which now terminates at the fuselage wall (X -100 port / -240 stbd) instead of the old full-span 12.3mm bore. Dimensions verified against REF-SENSOR-019 (SMB Bearings F688ZZ datasheet: bore 8mm/OD 16mm/width 5mm/flange OD 18mm/flange width 1.1mm). +BRG-MF128ZZ,MF128ZZ flanged/shielded ball bearing 8x12x3.5mm — tilt-spar WINGTIP bearing,Bearing,2,2,4,Amazon / AliExpress / VXB,MF128ZZ 8x12x3.5 flanged shielded,2.00,4.00,Rev R2d (2026-07-19): 1 per side — WINGTIP bearing. DOWNSIZED from F688ZZ: the Ø16 seat radius (7.975mm) exceeded the S1223 tip half-thickness (7.80mm) and broke through BOTH airfoil skins by ~0.21mm (wings_s1223_revo.scad TIP_BRG_*, docs/TILT_SPAR_ANALYSIS.md §8). MF128ZZ (Ø12, flange Ø13.5) seats with ~1.79mm skin margin. Wingtip radial reaction ~19 N (dyn) << MF128 dynamic capacity (~700 N) — load-safe. +PRINT-PUSHROD-CRANK,nacelle_pushrod_crank.stl — Option B nozzle-drive crank, clamps the 8mm tilt spar,Printed Part,2,3,6,In-house 3D print,CF-PETG — see FIL-CF-PETG,0.00,0.00,Rev T (2026-07-18): clamps the rotating 8mm spar (SPAR_OD), carries an M3 ball stud at CRANK_R=8.5mm; tilt directly strokes the nozzle unison-ring lever via the pushrod. nacelle_nozzle_pushrod.scad. 0.15mm/40%/4 walls. +PUSHROD-BALL-M3,M3 ball-link pushrod ~45mm (threaded rod + 2 ball cups) — nozzle drive,Hardware,2,3,6,Amazon / AliExpress,M3 ball link pushrod RC 45mm,2.00,4.00,Rev T: 1 per nacelle; connects the spar crank ball stud to the nozzle unison-ring lever ball stud (PUSHROD_LEN 45mm; ball-cup OD 7mm). Length trim at assembly for the -5deg..140 deg sweep. +BALLSTUD-M3,M3 ball stud, Ø3mm ball — pushrod ends (crank + ring lever),Hardware,4,1,4,Amazon / AliExpress,M3 ball stud 3mm ball RC,0.50,2.00,Rev T: 2 per nacelle (one on the spar crank, one on the nozzle ring lever); M3 shank into tapped 2.5mm pilot bores. +SKIPPER-TILT-ENC-PCB,Tilt-encoder PCB — AKM AK7455 off-axis magnetic angle IC (SPI) — wing/nacelle true-tilt feedback,Sensor,2,2,4,JLCPCB (fab) + Mouser/Digi-Key (AK7455),in-house 7x7mm PCB; AKM AK7455 14-bit angle sensor QFN24 4x4,6.00,12.00,Rev S (2026-07-19): 1 per nacelle joint; closes the tilt-servo loop on ACTUAL nacelle angle so it is independent of spar torsional wind-up (docs/TILT_SPAR_ANALYSIS.md §1/§3.5). SENSOR = AKM AK7455 (REF-SENSOR-008) — explicitly supports the OFF-AXIS (side-of-shaft) config the through-shaft spar requires (on-axis AS5600/MT6701 will NOT work) + anomaly-magnetic-field detection/reduction + EEPROM INL calibration (suits the ferromagnetic 4130/17-4 spar). 4-wire SPI + ERROR on a 7-wire direct-solder pigtail (GND/+3V3/SCLK/MOSI/MISO/CSN/ERROR); both nacelles SHARE the SPI bus via separate CSN (no I2C address conflict). Seats in the wing-tip pad pocket (wings_s1223_revo.scad wing_tip_hall_sensor_pocket). Pinout/interface VERIFIED vs datasheet 200800064-E-00; schematic ERC 0-error. OPEN bench/layout items: off-axis flux 10-70mT at the IC; INL cal over -5..90 (AKM app support); ERROR push-pull vs open-drain; QFN24 EP left OPEN; wing pocket resize 3x3->4x4. Cost est. — verify AK7455 pricing. Supersedes MT6701 (rejected: on-axis) / AS5600 Rev Q. +HALL-RING-MAG,NdFeB ring magnet Ø22 OD x Ø10 ID x 2.5mm — Hall tilt-sensor rotor,Magnet,2,3,6,Amazon / K&J Magnetics,ring magnet 22x10x2.5mm NdFeB,2.00,4.00,Rev S: 1 per nacelle; rides the NON-FERROUS printed hub (PRINT-HALL-HUB) keyed to the rotating spar at the nacelle inboard face; presents the rotating field to SKIPPER-TILT-ENC-PCB (AKM AK7455) OFF-AXIS. Field at the IC must fall in the AK7455 off-axis window 10-70mT (low-flux alarm <~15mT) — magnetization (diametric vs radial) + exact air-gap/offset to be RE-VALIDATED on the bench for the AK7455 off-axis read (set sense plane via R_FIELDSEL; run INL cal). Ø10 ID keeps ≥1mm non-ferrous wall off the 8mm steel spar. OD Ø22 sized for the off-axis IC. _export_pivot_slab.scad nacelle_hall_ring_hub. +PRINT-HALL-HUB,nacelle_hall_ring_hub.stl — non-ferrous ring-magnet carrier hub keyed to tilt spar,Printed Part,2,3,6,In-house 3D print,CF-PETG (20% CF) — see FIL-CF-PETG,0.00,0.00,Rev R2e: 1 per nacelle; OD 24mm (carries the Ø22 ring). CF-PETG is non-ferromagnetic (carbon fibre) — stands the ring magnet ID off the ferromagnetic 4130/17-4 spar and proud of the steel bearing to limit field distortion (docs §3.5 / EMI WBS §1.4.6). Keyed/bonded to the 8mm spar. 0.15mm/40%/4 walls. To be merged into nacelle_pod_50mm_tandem.scad. +HALL-SCR-M2-BRASS,M2 x 6mm brass pan-head screw — NON-FERROUS Hall-sensor PCB + hub fasteners,Hardware,8,0.3,2.4,Amazon / McMaster-Carr,M2 6mm brass machine screw,0.15,1.20,Rev R2c: 2 per sensor PCB + 2 spare per side; MUST be brass/316/nylon (NOT steel) within the ~10mm keep-out of the encoder IC — ferrous fasteners corrupt the angle read (docs §3.5 / EMI WBS §1.4.6). diff --git a/current-specification/bom_revS.json b/current-specification/bom_revS.json index df29d3f0..1d61d5af 100644 --- a/current-specification/bom_revS.json +++ b/current-specification/bom_revS.json @@ -66,7 +66,7 @@ "Supplier_PN_or_Search": "DS3225 25kg digital servo metal gear", "Est_Unit_Price_USD": "13.00", "Est_Total_Price_USD": "26.00", - "Notes": "2026-08-23 (Rev S1d, owner): DS3225 bodies + LibreServo_v4 PCB (TI MSPM0G3518-Q1 + OPTIGA Trust M). Supersedes DS3218 (same session) and the 2026-08-02 SPT5425LV+LibreServo v2. DIMENSIONS AUTHORITATIVE from avionics/datasheets/DS3225 datasheet.pdf (Dongguan City Dsservo): 40x20x40.5 mm, 60 g, 54.5 mm flange span, 49.5x10 mm bolt pattern, flange 27.7 mm above base, IP66, double bearing, 275:1 — DIMENSIONALLY IDENTICAL to the DS3218 datasheet, so the Rev S1d cargo-shell pads (61.5x27.0 mm at hull Z +98.89, bores 49.5x10) are unchanged by this swap. LibreServo_v4 keeps the stock case, so the external envelope is unchanged. ** TORQUE, still marginal ** datasheet stall 21 kgf·cm @5V / 24.5 @6.8V — the '25kg' in the product name is the marketing figure, the spec table maxes at 24.5. Against the >=25 kgf·cm (2.45 N·m) tilt requirement (docs/TILT_SPAR_ANALYSIS.md §2, from serenity-rev-r.jsx L383) that is 98% at 6.8V, ~92% at a 6V rail, 84% at 5V. Much closer than DS3218's 86%, but not cleared on datasheet figures alone. LibreServo_v4 re-drives the motor from 4.5-18V and may close it; no converted-unit figure exists. NOTE the requirement itself may be stale — the pivot is AT the nacelle CG (TILT_SPAR_ANALYSIS §2), so the gravity moment is nulled by design and only aero + inertia remain; re-derive before buying a bigger servo. ** CURRENT ** stall 1.9A @5V / 2.3A @6.8V vs the 1.2A placeholder RAIL-2 was sized on. See REFERENCES.md and airframe/wings-nacelles/WBS.md SPAR-02." + "Notes": "2026-08-23 (Rev S1d, owner): DS3225 bodies + LibreServo_v4 PCB (TI MSPM0G3518-Q1 + OPTIGA Trust M). Supersedes DS3218 (same session) and the 2026-08-02 SPT5425LV+LibreServo v2. DIMENSIONS AUTHORITATIVE from avionics/datasheets/DS3225 datasheet.pdf (Dongguan City Dsservo): 40x20x40.5 mm, 60 g, 54.5 mm flange span, 49.5x10 mm bolt pattern, flange 27.7 mm above base, IP66, double bearing, 275:1 — DIMENSIONALLY IDENTICAL to the DS3218 datasheet, so the Rev S1d cargo-shell pads (61.5x27.0 mm at hull Z +98.89, bores 49.5x10) are unchanged by this swap. LibreServo_v4 keeps the stock case, so the external envelope is unchanged. ** TORQUE, still marginal ** datasheet stall 21 kgf·cm @5V / 24.5 @6.8V — the '25kg' in the product name is the marketing figure, the spec table maxes at 24.5. Against the >=25 kgf·cm (2.45 N·m) tilt requirement (docs/TILT_SPAR_ANALYSIS.md §2, from serenity-rev-r.jsx L383) that is 98% at 6.8V, ~92% at a 6V rail, 84% at 5V. Much closer than DS3218's 86%, but not cleared on datasheet figures alone. LibreServo_v4 re-drives the motor from 4.5-18V and may close it; no converted-unit figure exists. RESOLVED 2026-08-25 (docs/TILT_SPAR_ANALYSIS.md §2.1): the >=25 kgf·cm requirement was itself the stale artifact -- it is a spec pick (archives/serenity-rev-r.jsx L383), not a load derivation. Pivot-at-CG nulls gravity to within a 0.019 kgf·cm bound (two off-axis parts: spar crank + pushrod); inertia from the nacelle's own mass-moment table and the repo's only cited tilt-transition figure is ~1.78 kgf·cm ultimate. Grounded total ~1.80 kgf·cm = 7.3% of DS3225's cited 24.5 kgf·cm @ 6.8V -- wide margin. Aero moment not grounded (no nacelle Cd/frontal-area data in repo) -- explicit open item, not assumed zero. DS3225 STANDS, no part change. ** CURRENT ** stall 1.9A @5V / 2.3A @6.8V is the 6V servo bus figure (docs/POWER_DISTRIBUTION.md §3.3), now resized there to 2.3A/servo -- NOT RAIL-2 (RAIL-2/5V_OBS is the separate Observer/winch-servo rail; the 'RAIL-2' language previously here was a citation error, corrected 2026-08-25). See REFERENCES.md and airframe/wings-nacelles/WBS.md SPAR-02." }, { "Ref": "SERVO-RCS-VALVE", diff --git a/docs/POWER_DISTRIBUTION.md b/docs/POWER_DISTRIBUTION.md index fd158c3a..fccffae3 100644 --- a/docs/POWER_DISTRIBUTION.md +++ b/docs/POWER_DISTRIBUTION.md @@ -170,20 +170,31 @@ margin and worsens single-fault brown-out) — not the flight configuration. | Load | Qty | Stall (mA) | Running (mA) | Total run (mA) | |------|-----|-----------|--------------|----------------| -| Nacelle tilt servos (SPT5425LV/LibreServo v2, 25-26 kgf·cm @ 6 V — was DS3218MG) ⚠ current not yet bench-verified, DS3218MG-era figure carried forward | 2 | 1 500 | 150 | 300 | +| Nacelle tilt servos (DS3225/LibreServo_v4, 21–24.5 kgf·cm — was DS3218MG, briefly SPT5425LV) ⚠ **not bench-verified**; sized here to DS3225's own datasheet-cited 2.3 A @ 6.8 V stall figure (`REFERENCES.md` "Open Standards Verification Items" DS3225 row; `current-specification/bom_revS.csv` SERVO-TILT), superseding the DS3218MG-era 1.5 A carried-forward placeholder. **This is the tilt-servo current rail — not `RAIL-2`, which is the separate `5V_OBS` Observer/winch rail (§3.2.1/§11.1); see the 2026-08-25 SPAR-02 correction note.** | 2 | 2 300 | 150 | 300 | | RCS proportional valve servos (SG90 class + OpenServoCore, Phase 11) | 4 | 700 | 70 | 280 | | Cargo door servo (SG90 + OpenServoCore) | 1 | 700 | 70 | 70 | | Cargo release servo (SG90 + OpenServoCore) | 1 | 700 | 70 | 70 | | **6 V subtotal (running)** | — | — | — | **720** | -| **6 V subtotal (all stalled simultaneously)** | — | — | — | **7 400** | - -All-servo stall is a transient; the BEC is sized for 5 A continuous (stall of 2×SPT5425LV -+ 3×SG90 ≈ 5.1 A, carrying forward the DS3218MG-era current figure — marginal; the 6 V BEC -is sized at 5 A with up to 7 A burst for ≤100 ms, which covers brief simultaneous stall -events). Re-check once the SPT5425LV is bench-measured (REFERENCES.md Open Standards -Verification Items). - -At 6 V / 22.2 V: 5.3 A × 6 V / 22.2 V ≈ **1.4 A from VBAT** at stall. +| **6 V subtotal (all stalled simultaneously)** | — | — | — | **8 800** | + +**2026-08-25 (SPAR-02 re-derivation, `docs/TILT_SPAR_ANALYSIS.md` §2.1):** the +tilt-servo stall figure above is resized from the DS3218MG-era 1.5 A placeholder +to DS3225's cited 2.3 A @ 6.8 V (2×2.3 A = 4.6 A tilt-servo contribution to the +all-stall total, up from the prior 3.0 A). **This pushes the all-servo +simultaneous-stall total to 8.8 A, exceeding the existing 6 V BEC's 7 A/≤100 ms +burst rating** (stated below) — this is a genuine finding, not previously +flagged, and needs owner attention: either confirm the ≤100 ms burst window and +worst-case simultaneous-stall probability remain acceptable, or increase BEC +burst capacity. All-servo stall is a transient (any single tilt servo hitting a +hard mechanical stop while the other servos are also stalled is the worst +case, not a sustained condition); the BEC is sized for 5 A continuous — now +**below** the 2×DS3225 + 3×SG90 stall sum (8.8 A) even before accounting for +burst headroom. Re-check once DS3225 is bench-measured (REFERENCES.md Open +Standards Verification Items; bench current may come in under the datasheet's +6.8 V figure at the project's actual servo-rail voltage). + +At 6 V / 22.2 V: 8.8 A × 6 V / 22.2 V ≈ **2.4 A from VBAT** at all-servo stall +(was 1.4 A before this resizing). ### 3.4 Total System Draw @@ -214,7 +225,7 @@ single conductor in free air, 60 °C ambient, 90 °C conductor temperature. | Battery to PDB main bus | 165 (peak) / 90 (cont.) | ≥ 4 AWG | **4 AWG silicone** | 125 A cont. | +39 % at cont. | | PDB to ESC1–ESC4 (each) | 55 (burst) / 28 (cont.) | ≥ 10 AWG | **10 AWG silicone** | 55 A | ≈ 0 % at burst | | PDB 5 V BEC output | 18 A (cont.) | ≥ 14 AWG | **12 AWG silicone** | 30 A | +67 % | -| PDB 6 V BEC output | 5.3 A (stall) | ≥ 18 AWG | **16 AWG silicone** | 13 A | +145 % | +| PDB 6 V BEC output | 8.8 A (all-servo stall, DS3225-resized 2026-08-25) | ≥ 16 AWG | **16 AWG silicone** | 13 A | +48 % | | Avionics bay intra-bay | 3 A/node | ≥ 22 AWG | **18 AWG shielded** | 7 A | +133 % | | ESC signal (DSHOT) | <100 mA | 28 AWG | **28 AWG STP** | 500 mA | ≫ | diff --git a/docs/TILT_SPAR_ANALYSIS.md b/docs/TILT_SPAR_ANALYSIS.md index 75cf25f5..7047ee64 100644 --- a/docs/TILT_SPAR_ANALYSIS.md +++ b/docs/TILT_SPAR_ANALYSIS.md @@ -15,6 +15,37 @@ SCAD is reworked. ## 1. Mechanism (as specified by user, 2026-07-18) +> **SUPERSEDED 2026-08-25 (SPAR-01, `airframe/wings-nacelles/WBS.md` §1.1.2; +> `docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md`).** The +> single-spar/single-servo/cargo-bay-root-bearing model below is retired. +> Each side now has its **own independent spar and servo** — the "servo +> stays inside the fuselage" part of the mechanism is unchanged, but it is +> now **two servos, one per port/stbd bulkhead**, not one servo in the +> cargo bay driving a spar that crosses the whole ship. The **root bearing +> moves from "inside the cargo bay" to in the fuselage SIDE WALL** (F688ZZ +> seat, terminating at X −100 port / −240 stbd) — the spar no longer +> crosses the bay at all, which is what closes CARGO-01. §3.2's torsion +> path is correspondingly short (bulkhead servo → wingtip), not +> cargo-bay-servo → wingtip. The nacelle-CG pivot, wingtip bearing, nozzle +> drive, and Hall tilt feedback below are **unchanged** — only the spar's +> inboard end and its drive servo's per-side count moved. +> +> - The **wing is fixed** to the fuselage and does **not** tilt. +> - **Two independent rotating spars** (one per side) run: fuselage wall +> bearing → wing → **nacelle CG pivot** (duct Z = 111.5 mm; Rev T CG +> re-derive 2026-07-19, was 104.5 mm), each **fixed (keyed) to its own +> nacelle**. +> - **One servo per side, mounted on the port/stbd bulkhead**, rotates its +> own spar → tilts its own nacelle. The spar *is* the drive shaft (no +> external pushrod/lever). +> - **Two bearings per side** carry wing/spar loads and allow rotation: +> - **Root bearing** — **in the fuselage side wall** (F688ZZ, spar ↔ +> fuselage), not free-floating inside the cargo bay. +> - **Wingtip bearing** — at the wingtip/nacelle joint (spar ↔ fixed wing). + +The mechanism as originally specified (2026-07-18), retained for the +record: + - The **wing is fixed** to the fuselage and does **not** tilt. - A **single rotating spar** runs: cargo bay → wing → **nacelle CG pivot** (duct Z = 111.5 mm; Rev T CG re-derive 2026-07-19, was 104.5 mm), and is @@ -58,6 +89,165 @@ SCAD is reworked. Nacelle spanwise half-width ≈ OD_X/2 = 30.25 mm; the duct axis (thrust resultant) sits ≈ 30 mm outboard of the wingtip bearing. Add ~5 mm mount gap → **cantilever arm a ≈ 35 mm (1.38 in)** from wingtip bearing to nacelle load line. +(Superseded for the exact figure by the measured `tools/wing_spar_carrythrough.py` +overhang `a` = 38.3 mm used in §2.1 below; kept here as the original hand estimate.) + +--- + +## 2.1 Torque Requirement Re-Derivation (2026-08-25, SPAR-02, KTD5) + +**Why re-derive.** The ≥ 25 kgf·cm figure in §2 above is cited only to +`serenity-rev-r.jsx` L383 (a spec-pick table: *"Servo, ≥25 kg·cm @ 6V digital +metal-gear, 2×, Fuselage-mounted, one per nacelle"*, `archives/serenity-rev-r.jsx` +line 383) — it carries no load derivation. Per the owner's direction +(`airframe/wings-nacelles/WBS.md` §1.1.2 SPAR-02), the tilt pivot is sited at the +nacelle CG specifically to null the gravity moment, so the true torque +requirement is aero + inertia only. This section re-derives it and compares +against DS3225's own cleared figure (24.5 kgf·cm at 6.8 V, `REFERENCES.md` +"Open Standards Verification Items" DS3225 row). + +**Load-factor convention (reused, not invented):** `docs/structural_analysis.md` +§3 — 4 g limit factor (3 g gust + 1 g maneuver) × 1.5 ultimate factor, the same +convention `tools/wing_spar_carrythrough.py` already applies to this exact +nacelle/pivot geometry. + +### 2.1.1 Gravity term — verify the nulling claim algebraically, not by assertion + +The tilt pivot is the spar's own axis: a line through the nacelle at duct +station `PIVOT_Z = 111.5 mm`, transverse offset `Y ≈ 0` +(`nacelle_pod_50mm_tandem.scad` header + line 243), running spanwise (the +repo's hull-frame X). Gravity produces zero moment about a line L if and only +if the body's CG lies *on* L (the position vector from any point on L to the +CG is then the zero vector, so `τ = r × F = 0` for any F, at any orientation of +the body about L — this holds for **all** tilt angles, not just the neutral +position, since rotating a zero vector about any axis is still zero). + +The nacelle assembly's own mass table (`nacelle_pod_50mm_tandem.scad` header, +Rev T, 11 components, 393.4 g) gives axial CG: + +```text +CG_Z = Σ(m_i · Z_i) / Σm_i = 43,879 g·mm / 393.4 g = 111.5 mm = PIVOT_Z +``` + +— exact by construction: `PIVOT_Z` was *set* to this computed CG_Z (line 383's +comment: "pivot axial centre = full-assembly CG station"), so the axial +(duct-length) coordinate is nulled by definition, not approximation, provided +the underlying 11-item mass/CG table is accurate. + +**Residual term — the transverse (Y) coordinate is not tabulated.** The mass +table only reports each component's axial (Z) position; it does not report a +transverse (Y) CG offset. Most components (both EDFs, ESC1/2, shell+stator, +nozzle throat/housing, unison ring, 8× flaps) are nominally axisymmetric about +the duct centerline, so their individual Y-contribution is ≈0 by geometry. Two +components are **not** axisymmetric — they exist at a single clock position to +drive the nozzle unison ring: the **spar crank (1.4 g)** and **pushrod +(3.6 g)**, both cited in the same mass table. Their exact transverse offset is +not measured in the repo. Bounding it conservatively at the full nacelle +half-width (`NACELLE_OD_X/2 = 37.7 mm`, `nacelle_pod_50mm_tandem.scad` line +~229) as a worst case: + +```text +M_residual ≤ (1.4 + 3.6) g × 9.80665 m/s² × 0.0377 m ≈ 0.00185 N·m (0.016 lbf·in) +``` + +This is ≈ 0.08 % of the DS3225's 6.8 V stall torque (2.402 N·m) — negligible, +but it is a **bound on an unmeasured offset, not a verified-zero figure**. The +"pivot at CG nulls gravity" claim holds to within this bound; the exact +transverse CG position is an open item (flag, not a fabricated coincidence). + +### 2.1.2 Inertia term — mass moment of inertia about the pivot, from the same table + +Treating each of the 11 mass-table items as a point mass at its axial offset +`r_i = |Z_i − PIVOT_Z|` from the pivot line (a lumped/point-mass +approximation — it omits each part's own moment of inertia about its own +centroid, which understates I for extended parts like the rotating spar span +and the 8× flap ring; conservative in the sense that it is the minimum bound +consistent with the tabulated masses and positions, not a full rigid-body +tensor): + +```text +I = Σ m_i · r_i² = 718,861 g·mm² = 7.189 × 10⁻⁴ kg·m² +``` + +(component-by-component: EDF1 70 g @ r=52.1mm, EDF2 70 g @ r=39.1mm, ESC1 +25 g @ r=52.1mm, ESC2 25 g @ r=39.1mm, shell/stator/cowl 130 g @ r=18.7mm, +nozzle throat/housing 21.4 g @ r=63.3mm, unison ring 6.7 g @ r=58.4mm, 8× +flaps 21.1 g @ r=86.7mm, spar crank 1.4 g @ r=0, pushrod 3.6 g @ r=29.3mm, +rotating spar span 19.2 g @ r=0 — spar crank and rotating spar span sit at the +pivot itself, r=0, contributing nothing to I about this axis). + +**Angular acceleration — no cited design profile exists.** The repo has two +tilt-rate figures, neither a design acceleration spec: a bench **monitoring** +rate (`docs/TILT_ENCODER_WIRING_EMI_SPEC.md` §7.3, "Nacelle sweep at 10°/s" +during a tethered-hover CAN-message-rate test — an instrumentation check, not +a commanded transition profile) and a **stale** Phase-3 build-guide test step +(`docs/REVN_BUILD_GUIDE_24IN.md` "Test servo response time (<500 ms slew)" +over the −5°→140° = 145° range, written against the pre-Rev-T DS3218MG/Z=83mm +pivot). Using the 145°/500 ms figure with a triangular (accelerate-then- +decelerate, no cruise) velocity-profile assumption — a standard kinematic +model applied to the repo's own cited angle/time pair, not a fabricated +physical constant — bounds the worst-case (highest-α) case: + +```text +θ = 145° = 2.531 rad, t = 0.5 s +α = θ / (t/2)² = 40.49 rad/s² (peak ω = 10.12 rad/s = 580°/s) +T_inertia = I·α = 7.189×10⁻⁴ kg·m² × 40.49 rad/s² = 0.0291 N·m (0.257 lbf·in) +``` + +At the repo's own 4 g / 1.5× ultimate convention applied as a margin multiplier +(×6): **T_inertia,ultimate ≈ 0.175 N·m (1.78 kgf·cm, 1.55 lbf·in)** — about +7 % of DS3225's 24.5 kgf·cm 6.8 V stall figure, and the α input itself is +already the *highest* cited tilt rate in the repo (the 10°/s bench-monitoring +rate would give an α roughly two orders of magnitude smaller). **This θ/t +figure is stale (pre-Rev-T geometry) and not a confirmed commanded design +profile — flag for owner confirmation of the actual intended transition +time**, but given the 14× margin already present, only a ~14× faster +transition would put inertia alone at risk of the requirement. + +### 2.1.3 Aero term — cannot be grounded; explicitly out of scope, not fabricated + +No nacelle drag coefficient, frontal area, or dynamic-pressure figure for the +tilting assembly exists anywhere in `docs/` or `airframe/` (searched for +`drag`, `Cd`, `dynamic pressure`, `frontal area` near "nacelle" — no hits +besides an unrelated wing-airfoil drag note). Per root `AGENTS.md` §4, this +term is **not fabricated**. It is left as an explicit open item: aero moment +about the tilt axis during a transition (cross-flow load on the duct's +frontal/side area, not the axial thrust component — thrust itself acts along +the duct centerline, which passes through the pivot point by the same +CG-pivot geometry, so it contributes ~zero moment about the tilt axis at the +static condition) requires real repo aero data (a wind-tunnel figure, a CFD +result once `tools/wing_cfd_openfoam.py` is unblocked, or a bench thrust-stand +measurement at an angled inflow) before it can be added to this derivation. +**This bounds the analysis to inertia + the residual gravity term only, per +the owner's Scope Boundaries direction** — it is not asserted that aero is +negligible, only that no repo data exists to quantify it. + +### 2.1.4 Comparison against DS3225 + +| Term | Value (ultimate, ×6 margin where applicable) | Basis | +|---|---|---| +| Gravity | ≤ 0.00185 N·m (0.019 kgf·cm) | §2.1.1, unmeasured-transverse-CG bound | +| Inertia | ≈ 0.175 N·m (1.78 kgf·cm) | §2.1.2, triangular-profile bound on stale 145°/500ms figure | +| Aero | **not grounded — open item** | §2.1.3 | +| **Grounded total** | **≈ 0.177 N·m (1.80 kgf·cm)** | sum of the two grounded terms | +| DS3225 stall (6.8 V, cited) | 24.5 kgf·cm (2.402 N·m) | REFERENCES.md DS3225 row | + +The grounded requirement (gravity + inertia) is **≈ 7.3 % of DS3225's cited +24.5 kgf·cm** — a wide margin, not the 98 % the uncorrected ≥25 kgf·cm spec +pick implied. **Conclusion: DS3225 stands.** The 2 % shortfall against the +old ≥25 kgf·cm figure that motivated the servo-swap conversation +(`airframe/wings-nacelles/WBS.md` §1.1.2) is not a real structural shortfall — +it was measured against an undermined requirement. No servo change is needed +on load grounds. The aero term remains an explicit, unquantified open item +(§2.1.3); if a future aero figure is obtained and is large enough to erode the +~14× margin above, this conclusion would need revisiting — but nothing in the +repo today supports assuming that. + +**Author's note:** this re-derivation reuses `docs/structural_analysis.md` §3's +load-factor convention and `tools/wing_spar_carrythrough.py`'s measured pivot/ +overhang geometry (run 2026-08-25: `L=86.7mm`, `a=38.3mm`, `d=126.3mm`) rather +than re-deriving them; those tools remain the source of record for the +underlying spar/overhang geometry. --- @@ -84,6 +274,13 @@ keyway); the 5 mm bore carries the nav-light harness (§5). ### 3.2 Torsion (servo drive) +**Re-checked 2026-08-25 (SPAR-01):** the torsion figures below are unaffected +by the root bearing's move from the cargo bay to the fuselage side wall — the +section (8 mm OD × 1.5 mm wall) and the applied torque are unchanged, and the +now-per-side bulkhead servo shortens the drive path (bulkhead → wingtip) +versus the original cargo-bay-servo → wingtip run, which can only reduce +wind-up, not increase it. This FOS stands. + - τ = T/Zp = 2,450 N·mm / 85.2 mm³ = **28.8 MPa (4.2 ksi)** - Shear yield ≈ 0.577 × 460 = 265 MPa → **FOS ≈ 9.2**. diff --git a/docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md b/docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md new file mode 100644 index 00000000..50ff48fd --- /dev/null +++ b/docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md @@ -0,0 +1,791 @@ +--- +title: "fix: Wing S1223 repair, root bearing-seat joint, and tenon fallback spar" +date: 2026-08-24 +plan_type: fix +artifact_contract: ce-unified-plan/v1 +artifact_readiness: implementation-ready +execution: code +product_contract_source: ce-plan-bootstrap +--- + +# fix: Wing S1223 repair, root bearing-seat joint, and tenon fallback spar + +**Target repo:** Serenity-UAV (this repo) + +--- + +## Summary + +Closes the remaining open items under `airframe/wings-nacelles/TODO.md` §1.1.2 +(Wings): the S1223 self-intersection blocker (WING-01), the spar-root +bearing-seat re-cut and CF thwart pair (SPAR-01), the DS3225 torque +re-derivation and RAIL-2 budget (SPAR-02), the tip-thickness/spar-station +canon check, and the two wing STL re-bakes. It also closes the paired +fuselage-side items that are the same joint: CARGO-01/CARGO-02 (bearing-seat +bore) and CARGO-03c (tenon structural sizing), per +`airframe/fuselage-mid/WBS.md` §1.1.1.2. + +**Most of the hard architecture is already owner-decided and dated +2026-08-23/24** (two-bearing overhung spar, CF thwart couple closure, tenon +vs. second-spar branch rule) — this plan is the implementation of those +decisions, not a re-derivation of them. Two forks that were still open were +confirmed for this plan: the CF thwart stations (Y −40 fore / Y +118 aft) and +the CARGO-03c branch (build the second-spar fallback now, since no CF-PETG +coupon data exists and the owner's own rule routes <15 MPa to that branch). + +## Problem Frame + +The wing subsystem has one true blocker and three coupled structural +redesigns, all interacting through the same wing-root joint: + +1. **WING-01 (blocker).** The tabulated `S1223_UPPER`/`S1223_LOWER` coordinate + tables produce a self-intersecting outline (surfaces cross at x/c 0.742, + thickness goes negative to −1.96/−2.05 mm before returning to zero at the + TE). `wing_solid()`'s OpenSCAD `hull()` loft masks this — the exported STL + is watertight because `hull()` takes the convex hull, which is 1.647× the + true outline's area (39.3% phantom material). This blocks fabrication, the + mass budget, and every aero claim. +2. **SPAR-01.** The 8 mm 4130 tilt spar cannot pass through the fuselage + centerline (the nacelles occupy it), and independent per-side rotation + rules out a rigid carry-through spar mechanically, not just structurally. + The owner-directed fix: each spar is a determinate overhung shaft on a + wingtip bearing (MF128ZZ) and a fuselage-wall bearing (F688ZZ), driven by + its own nacelle-side servo; the couple each side hands the wall (115.1 N, + 14.54 N·m at ultimate) is closed by two CF thwarts (fore Y −40, aft + Y +118) instead of a continuous member. The shell re-cut (bore → bearing + seat, terminate at the wall) is unbuilt; so are the thwarts. +3. **CARGO-03c.** The wing-root tenon is now a structural joint (spanwise + load terminates at the wall through it, not through a carry-through spar), + developing 10.14 MPa bearing at ultimate. The repository has no CF-PETG + bearing allowable — only a 5 MPa bond-limited figure, which fails. Per the + owner's decision rule, <15 MPa fusion strength routes to a second, + forward-of-main-spar rod (Ø8 mm at 14 mm from the LE) instead of growing + the tenon. That rod is fully sized in `airframe/fuselage-mid/WBS.md` + §1.1.1.2 but not yet geometried. +4. **SPAR-02.** The DS3225 tilt servo's own datasheet only clears the cited + ≥25 kgf·cm requirement to 98% (24.5 kgf·cm at 6.8 V), and that requirement + traces to a spec pick (`serenity-rev-r.jsx` L383), not a load derivation — + while the pivot is *at the nacelle CG*, which nulls the gravity moment by + design. RAIL-2's 1.2 A placeholder is also ~1.9× under the DS3225's cited + 2.3 A stall current. Needs an analytical re-derivation from the actual + aero+inertia loads before any part change is considered. + +Canon-checking tip thickness and spar station against the Serenity silhouette, +and re-baking both wing STLs, are the closing steps that depend on 1–3 above +being fixed first (the current bakes are stale against Rev S1b/S1c geometry +and, more fundamentally, against an invalid airfoil). + +## Requirements + +- **R1** — `S1223_UPPER`/`S1223_LOWER` are replaced with a validated + (non-self-intersecting) S1223 coordinate table, sourced from the UIUC + Airfoil Coordinates Database and cited in `REFERENCES.md` with a validated + URL. `tools/wing_airfoil_integrity.py` reaches PASS. +- **R2** — The wing loft method (`hull()` vs. a true swept/lofted solid) is + re-decided based on the corrected table's convexity ratio, per the existing + gate's tolerance. +- **R3** — Both wing STLs (`wing_nacelle_pylon_revo.stl`, + `wings_s1223_revo.stl`, port + starboard) are re-rendered and re-baked + against the corrected airfoil and current Rev S1b/S1c constants + (`THICKNESS_SCALE_TIP`, `SPAR_BORE_STATION`, Hall station). +- **R4** — The cargo shell's spar interface becomes a bearing seat (sized to + F688ZZ) that terminates at the fuselage wall (X −100 port / −240 stbd) + instead of a full-span Ø12.3 clearance bore. Closes CARGO-01 and CARGO-02 + together (same shell edit, per WBS.md sequencing). +- **R5** — Two CF thwarts (2 mm × 25 mm `CF-PLATE-2MM`, fore Y −40 / aft + Y +118) are authored as OpenSCAD parts with landing pads and merged into + the cargo shell, closing the couple SPAR-01 identifies. +- **R6** — The wing-root tenon's fallback second spar (Ø8 mm rod, 14 mm from + LE, 40 mm embed into the existing wall boss geometry) is authored in both + the wing SCAD (bore) and the cargo-shell SCAD (boss), parametrized so the + enlarged-tenon path remains a documented, flagged alternative if a future + coupon test clears ≥15 MPa. +- **R7** — The DS3225 torque requirement is re-derived analytically from the + wing's actual aero + inertia loads at the CG pivot (not the L383 spec + pick), and RAIL-2's current budget is resized to the DS3225's cited 2.3 A + stall figure per servo with margin. Bench-verified stall current stays an + explicit open item (cannot be fabricated) — see Scope Boundaries. +- **R8** — Tip thickness and spar station are canon-checked against the + Serenity reference silhouette (the existing `REF-CAD-002`/`REF-CAD-003` + hierarchy) using FreeCAD, and the result is recorded in WBS.md. +- **R9** — All re-verification gates re-run clean against the final geometry: + `wing_airfoil_integrity.py`, `wing_internal_clearance.py`, + `wing_root_deconflict.py`, `wing_spar_carrythrough.py`, + `cargo_bay_envelope.py`, `nacelle_servo_deconflict.py`, + `landing_gear_wing_clearance.py`, `validate_stls.py`. +- **R10** — `WBS.md` (root wings-nacelles and fuselage-mid), `TODO.md` + (wings-nacelles), and `REFERENCES.md` are updated per repo convention: + close resolved sub-items in WBS.md first, delete the corresponding TODO.md + lines, add new `REF-CAD-*`/`REF-MAT-*` entries with validated URLs (or mark + "requires verification" where a physical test is the only path). + +## Key Technical Decisions + +**KTD1 — Second-spar fallback is built now, as a bonded CF rod, not the +enlarged tenon.** +*(session-settled: user-directed — chosen over waiting for coupon data, and +refined 2026-08-24 from the WBS.md steel-press-fit-boss sizing to a bonded +CF rod: no CF-PETG bearing/fusion coupon test exists yet for the tenon's +mode, only a 5 MPa bond-limited figure (`docs/structural_analysis.md` §7.3) +that already fails the tenon at FOS 0.49; the owner's own 2026-08-23 decision +rule routes <15 MPa to the second-spar branch, and that branch is already +fully sized in `airframe/fuselage-mid/WBS.md` §1.1.1.2 CARGO-03c at 1.46 MPa +bearing — clearing the *existing* 5 MPa bond-limited figure at FOS 3.4 +without needing new coupon data at all.)* Governs R6. + +**Refinement (2026-08-24, user-directed):** build the rod as **CF, bonded**, +following the repo's own established pattern for CF-ROD tie-rods/boss pins +(`docs/structural_analysis.md` §6/§7: CF rod, 0.1 mm/side clearance bore, +West System 105/206 epoxy, cure 24 h before foam pour) rather than the +originally-sketched steel-in-a-press-fit-boss. This is a mass win (CF is +~1/5 the density of the 4130 the WBS.md table assumed — roughly 48 g/pair → +~10 g/pair) and reuses an already-precedented joint, not a new one. It is +**not** an escape from needing CF-PETG data: the socket wall the rod bears +against is still CF-PETG (the hull skin), so the governing allowable is +still the repo's existing cited 5 MPa bond-limited figure — the refinement's +value is that the load (1.46 MPa bearing at the sized station/embed) is low +enough to already clear that existing figure, not that it sidesteps needing +one. Do not re-derive this against a plain-PETG datasheet — that would be +citing the wrong material for the actual bore wall. + +The enlarged-tenon geometry stays documented but unbuilt, gated behind a +named OpenSCAD constant so it can be swapped in if a future coupon test +clears ≥15 MPa — do not delete the sizing table that supports it. + +**Further refinement (2026-08-24, user-directed): trade the tenon for a +second (aft) bonded CF rod — asymmetric diameter, not a mirror of the +forward rod.** A feasibility pass against the corrected S1223 geometry +found: (a) an aft rod matching the forward rod's Ø8.2 mm bore does not fit +anywhere — the main spar bore's aft edge (49.30 mm) and the Hall conduit's +fixed Rev S1c station (52.25–55.75 mm) leave no room, and any station past +that breaks the repo's 1.16 mm minimum wall standard by x≈60mm and breaks +through the skin entirely by x≈70mm; (b) a **smaller Ø6.2 mm bore** (6 mm CF +rod + 0.1 mm/side clearance) *does* clear, root-only (not full-span like the +main spar), at approximately **x = 60–62 mm from the LE** — 1.7–2.0 mm root +wall, some clearance margin to both the spar bore and the Hall conduit. +**User-directed 2026-08-24: build the Ø6.2 mm aft rod.** Its bearing stress +at Ø6×40mm embed is 1.95 MPa per the existing WBS.md CARGO-03c table, +clearing the cited 5 MPa bond-limited CF-PETG allowable at FOS ≈ 2.6 — lower +margin than the forward rod's FOS 3.4, but still a real pass against +existing cited data, no new coupon test required. + +This makes U5 a **two-rod system, asymmetric diameter** (Ø8.2 mm forward at +14 mm, Ø6.2 mm aft at ~60–62 mm, both root-only embeds except the forward +rod may be full-span if that's what the initial forward-rod build already +did — reconcile at implementation time, don't assume), reacting the root +couple as a true two-point system. **The tenon (`fuselage_root_tab()`) is +traded out of the structural load path entirely** — reduce it to a small +locating/index feature only, or remove it if the two rods alone provide +adequate radial location, and correct its stale "carries spanwise load" +comment either way. Recompute the couple-force split for a two-rod system +(not the single-rod method WBS.md's table used) before finalizing embed +depths — the separation from the main spar differs for each rod, so each +reacts a different share of the 14.60 N·m ultimate root moment. + +**KTD2 — CF thwart stations are Y −40 (fore) / Y +118 (aft).** +*(session-settled: user-directed — chosen over the alternative of holding +geometry work until a separate confirmation pass: these stations were already +the WBS.md recommendation, sited on measured-intact structure clear of both +landing-gear bays, splitting the couple 0.51/0.49.)* Governs R5. + +**KTD3 — WING-01's coordinate source is UIUC, not a repository restatement.** +Root `AGENTS.md` §4 forbids sourcing a coordinate table from memory. The +implementer must fetch the actual UIUC Airfoil Coordinates Database S1223 +entry (Selig), not approximate it from the comparison table already in +WBS.md (that table is explicitly a comparison, not a transcription source). + +**KTD4 — `hull()` vs. true loft is decided from the corrected geometry, not +assumed.** The current `hull()` masking (1.647× area) is a defect *of the +old broken table*; a valid S1223 table may or may not still convexify badly +under `hull()`. Re-run `wing_airfoil_variants.py`/the airfoil integrity gate's +convexity-ratio report against the corrected table before deciding whether a +true loft (e.g. `BOSL2` skin/loft or a manual `polyhedron()` between stations) +is required. Do not pre-commit to a loft rewrite if the corrected section +turns out convex enough. + +**KTD5 — SPAR-02 re-derives the requirement before any part change.** +Per the owner's direction: the pivot sits at the nacelle CG (nulling the +gravity moment by design), so ≥25 kgf·cm as cited is a spec pick, not a load +derivation. This plan re-derives the actual required torque from aero + +inertia loads only, using the same load factors as `docs/structural_analysis.md` +§3 and the geometry already measured in `tools/wing_spar_carrythrough.py`. If +the re-derived requirement is ≤24.5 kgf·cm, DS3225 stands and no part change +is needed. + +## High-Level Technical Design + +```mermaid +flowchart TD + A[UIUC S1223 coordinates] -->|R1| B[Replace S1223_UPPER/LOWER] + B -->|wing_airfoil_integrity.py| C{PASS?} + C -->|convexity ratio| D[KTD4: hull vs true loft] + D -->|R3| E[Re-render + re-bake both wing STLs] + + E --> F[wing_internal_clearance.py] + E --> G[wing_root_deconflict.py] + E --> H[wing_spar_carrythrough.py] + + subgraph Shell re-cut (R4/R5/R6) + I[Bearing-seat bore, terminate at wall] --> J[CF thwarts fore/aft] + I --> K[Second-spar rod boss, 14mm from LE] + end + + E --> I + F & G & H --> L[cargo_bay_envelope.py] + J & K --> L + L --> M[nacelle_servo_deconflict.py / landing_gear_wing_clearance.py] + M --> N[FreeCAD mating check: bearings, tenon/mortise, rod bores] + N --> O[Canon-check tip t/c + spar station vs silhouette] + O --> P[WBS.md / TODO.md / REFERENCES.md updates] + + Q[SPAR-02: re-derive torque + RAIL-2] --> P +``` + +## Implementation Units + +### U1. Source and validate a correct S1223 coordinate table + +**Goal:** Replace the self-intersecting `S1223_UPPER`/`S1223_LOWER` tables +with a validated Selig S1223 table from the UIUC Airfoil Coordinates +Database, and get `wing_airfoil_integrity.py` to PASS. + +**Requirements:** R1, R2 (KTD3, KTD4) + +**Dependencies:** none — this is the blocker everything else re-bakes +against. + +**Files:** +- `airframe/openscad/wings/wings_s1223_revo.scad` (or wherever + `S1223_UPPER`/`S1223_LOWER` are currently defined — confirm exact path at + implementation time, WBS.md references the file by function name only) +- `REFERENCES.md` (new `REF-CAD-*` entry: UIUC database URL, S1223 dataset, + retrieval date) +- `tools/wing_airfoil_integrity.py` (should not need changes — it is the + gate; only extend if it cannot report a convexity ratio for KTD4) +- `tools/wing_airfoil_variants.py` (reference for how camber/thickness + decomposition is currently done — reuse its decomposition, don't + reimplement it) + +**Approach:** +1. Fetch the actual S1223 dataset from the UIUC Airfoil Coordinates + Database (`https://m-selig.ae.illinois.edu/ads/coord_database.html`, + confirm exact file name/URL at fetch time — do not guess it from memory). +2. Add the `REF-CAD-*` entry to `REFERENCES.md` before using the data, per + root `AGENTS.md` workflow (look up by REF-ID first; this is new, so + assign the next unused `REF-CAD-NNN`). +3. Replace `S1223_UPPER`/`S1223_LOWER` with the validated table, preserving + the existing chordwise-station sampling convention the rest of the file + depends on (`midline_frac()`, `s1223_section()` camber/thickness + decomposition from the Rev S1b fix — do not reintroduce the pre-S1b bug + of scaling camber and thickness together). +4. Run `tools/wing_airfoil_integrity.py` — must PASS with no + self-intersection and non-negative thickness across the full chord. + +**Execution note:** Fetch real, quotable source data before writing any +table row — this is a hard fail-closed gate per `AGENTS.md` §4. If the +dataset cannot be retrieved, stop and report the blocker rather than +approximating. + +**Test scenarios:** +- `wing_airfoil_integrity.py` reports a valid simple polygon (no + self-intersection) for the corrected table. +- Thickness is non-negative at every sampled x/c from 0 to 1. +- The corrected table's t/c at x/c 0.60 and 0.975 stays consistent with the + built-wing measurements already on record in WBS.md (12.7 mm / 1.5 mm, + scaled to the current root/tip chords) — large deviation is a red flag, + not necessarily an error, but must be explained. + +**Verification:** `tools/wing_airfoil_integrity.py` exits PASS. + +--- + +### U2. Decide and (if needed) implement true loft vs. `hull()` + +**Goal:** Resolve KTD4 — determine whether `wing_solid()`'s `hull()` loft is +acceptable against the corrected table, or whether a true swept/lofted solid +is required. + +**Requirements:** R2 (KTD4) + +**Dependencies:** U1 + +**Files:** +- `airframe/openscad/wings/wings_s1223_revo.scad` (`wing_solid()`) +- `tools/wing_airfoil_integrity.py` (read its convexity-ratio tolerance/report + before deciding) + +**Approach:** +1. Run the airfoil integrity gate's convexity-ratio check against the + corrected U1 table (the gate is described in WBS.md as already reporting + this ratio for the old table — 1.647×). +2. If the ratio is within tolerance, keep `hull()` and document why in a + short comment plus a WBS.md note (do not silently keep it without + checking). +3. If not, replace the per-station `hull()` loft with a true loft between + sections — e.g. an OpenSCAD `polyhedron()` built from matched-vertex + station outlines, or a BOSL2 `skin()`/`sweep()` if the module set already + uses BOSL2 elsewhere in this repo (check before introducing a new + dependency). Keep the existing bore/cableway boolean operations working + against whichever solid results. + +**Execution note:** This is a real branch point — do not implement the loft +rewrite speculatively before U1's corrected table proves it's needed. + +**Test scenarios:** +- Convexity ratio report from the integrity gate, before/after, is recorded. +- If a true loft is built: the resulting solid is manifold + (`tools/validate_stls.py` reports 0 boundary, 0 non-manifold, 1 body) and + its cross-sectional area at 3+ stations matches the tabulated outline + within the gate's tolerance (not the old convex-hull area). + +**Verification:** `tools/wing_airfoil_integrity.py` convexity check passes +its tolerance; `tools/validate_stls.py` passes on the resulting STL. + +--- + +### U3. Bearing-seat spar-root re-cut (cargo shell) — closes CARGO-01/CARGO-02 + +**Goal:** Replace the cargo shell's full-span Ø12.3 mm clearance bore with a +bearing seat sized to F688ZZ, terminating at the fuselage wall (X −100 port / +−240 stbd), per SPAR-01/CARGO-02. + +**Requirements:** R4 (KTD1 does not apply here — this is the main spar, not +the fallback rod) + +**Dependencies:** none (independent of U1/U2 — this is fuselage-side +geometry); should land before U4/U5 which build on the same shell region. + +**Files:** +- `airframe/blender-scripts/merge_cargo_interior.py` (`WING_SPAR_BORE_D` + 12.3 → 8.3 is already-noted as wrong-diameter fix; `WING_SPAR_BOSS_OD` + re-derived from F688ZZ OD, not the retired Ø22 press-fit figure) +- `airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad` (or current + canonical cargo shell source — confirm path; WBS.md references + `cargo_sect_shell24.scad` Rev S1's spar bearing blocks as the feature to + revise) +- `current-specification/bom_revS.csv` (`CF-TUBE-12MM` row → 8 mm OD AISI + 4130 hollow spar; already flagged as stale in WBS.md CARGO-02) +- `REFERENCES.md` (F688ZZ bearing spec — confirm it already has a REF entry + from the wingtip/root bearing selection; add one if not, with a validated + vendor/datasheet URL — do not fabricate bearing dimensions) + +**Approach:** +1. Look up F688ZZ's actual OD/ID/width from a validated datasheet (the + bearing choice itself is already owner-settled per WBS.md — "Root bearing + stays F688ZZ" — this unit sources its dimensions, not its selection). +2. Re-derive `WING_SPAR_BOSS_OD` from the F688ZZ OD plus a press-fit/seat + allowance (do not reuse the retired Ø22 figure without checking it still + fits the new bearing). +3. Cut the bore as a bearing seat (not a through-bore) stopping at the wall + station (X −100 port / −240 stbd, per SPAR-01's measured stations). +4. Update `WING_SPAR_BORE_D` 12.3 → 8.3 mm alongside the seat change (same + shell edit, per WBS.md CARGO-02 sequencing note). +5. Update `bom_revS.csv` `CF-TUBE-12MM` row to the 8 mm OD AISI 4130 hollow + spar already specified in `wings_s1223_revo.scad`. +6. Re-run `merge_cargo_interior.py` to produce the merged cargo shell. + +**Patterns to follow:** the existing bearing-boss pattern already used for +the wingtip bearing (MF128ZZ) in the wing SCAD — mirror its +seat-sizing/clearance convention for consistency. + +**Test scenarios:** +- `tools/cargo_bay_envelope.py` reaches PASS (bay clear span X −240…−100 = + 140 mm at full height; the 4×3×3 in payload fits) — this is CARGO-01's + closing gate. +- The bearing seat bore diameter matches F688ZZ's actual OD (from the + sourced datasheet), not a placeholder. +- `tools/validate_stls.py` passes on the re-merged shell (watertight, 0 + boundary, 0 non-manifold, 1 body). +- `tools/landing_gear_wing_clearance.py` still reports CLEAR on all 4 checks + after the shell edit. + +**Verification:** `cargo_bay_envelope.py` and `validate_stls.py` both PASS on +the re-merged, published shell. + +--- + +### U4. CF thwart pair (fore/aft couple closure) + +**Goal:** Author the two CF thwarts (2 mm × 25 mm `CF-PLATE-2MM`) at the +confirmed stations (Y −40 fore, Y +118 aft) with landing pads, merged into +the cargo shell. + +**Requirements:** R5 (KTD2) + +**Dependencies:** U3 (same shell region; land after the bearing-seat re-cut +so the thwart pads reference the final wall geometry, not the retired +through-bore version) + +**Files:** +- new OpenSCAD source for the thwart parts (name per repo convention — + check `airframe/openscad/fuselage/cargo/` for the existing module-per-file + pattern before choosing a filename) +- `airframe/blender-scripts/merge_cargo_interior.py` (thwart pad + integration into the merged shell) +- `current-specification/bom_revS.csv` (retire/re-scope the provisional + `CF-PLATE-2MM` Y +30 ring line per WBS.md "Consequences to carry"; add the + two thwart line items) + +**Approach:** +1. Model each thwart as a flat CF plate spanning the belly-to-flank + structure at its station, sized 2 mm × 25 mm per the existing stock + (`CF-PLATE-2MM`), with landing pads sized to the intact structure bands + already measured in WBS.md (fore Y −66…−32, aft Y +110…+125 — confirm the + pad footprint stays inside those clear bands, clear of the gear bay + apertures at Y −26…+18 and Y +86…+106). +2. Integrate into `merge_cargo_interior.py`'s merge sequence. +3. Retire the provisional `CF-PLATE-2MM` Y +30 ring geometry/BOM line per + WBS.md's explicit instruction ("retire or re-scope... rather than + finalising its PROVISIONAL DXF"). + +**Test scenarios:** +- `tools/wing_spar_carrythrough.py` re-run against the final geometry + confirms both thwart FOS figures stay ≥ the target (WBS.md records 8.5/8.7 + against the conservative 300 MPa stand-in — re-verify these numbers hold + once the thwarts are real geometry, not just the analysis). +- `tools/validate_stls.py` passes on the shell with thwarts merged. +- Mass delta matches or beats the WBS.md estimate (≈28 g / 0.062 lbm pair, + net ≈50 g / 0.11 lbm saving vs. the retired ring) — record actual mass + from the merged STL, not the estimate, in the WBS.md update (U8). + +**Verification:** `wing_spar_carrythrough.py` and `validate_stls.py` both +PASS on the shell with both thwarts present. + +--- + +### U5. Second-spar fallback: bonded CF rod (CARGO-03c) + +**Goal:** Author the Ø8 mm fallback rod (14 mm from LE, 40 mm embed) as a +**bonded CF rod** — not a steel press-fit — as the default structural path +for the wing-root couple, per KTD1's 2026-08-24 refinement, with the +enlarged-tenon path left documented but flagged off. + +**Requirements:** R6 (KTD1) + +**Dependencies:** U3 (shares the wall boss region) + +**Files:** +- `airframe/openscad/wings/wings_s1223_revo.scad` (new Ø8.2 mm bore — 8 mm + CF rod + 0.1 mm/side clearance, per the `docs/structural_analysis.md` + §6/§7 CF-ROD bonding convention — at 14 mm from LE, clear of the Hall + conduit's 30 mm station per WBS.md's 11 mm margin figure) +- `airframe/openscad/fuselage/cargo/cargo_sect_shell24.scad` (matching + Ø8.2 mm wall bore, 40 mm embed, mirroring `PORT_INB`/`PORT_OUTB` pattern + already used for the main spar boss) +- `airframe/fuselage-mid/WBS.md` §1.1.1.2 (correct `fuselage_root_tab()`'s + stale comment — "The tab provides radial restraint; the CF spar carries + spanwise load" — per WBS.md's own note that this needs correcting once the + tenon/second-spar design lands; record the bearing-stress check against + the existing cited 5 MPa bond-limited CF-PETG figure, FOS 3.4, no new + coupon data required to close this item) +- `current-specification/bom_revS.csv` (2× CF rod, ≈8 mm OD × ~50 mm, + following the existing `CF-ROD-4MM` BOM line pattern — cite the same + pultruded-CF supplier data already used there per + `docs/structural_analysis.md` §1/§6; West System 105/206 epoxy per §7.1) +- A named OpenSCAD constant (e.g. `TENON_LOAD_PATH = "second_spar"` vs. + `"enlarged_tenon"`) gating which structural path is active — KTD1 requires + the enlarged-tenon geometry stay present but not default-active. + +**Approach:** +1. Cut the Ø8.2 mm bore (8 mm CF rod + 0.1 mm/side clearance, matching the + §6/§7 CF-ROD convention) through the wing at 14 mm from the LE (per + WBS.md's sizing table — this station gives the largest separation from + the main spar on a healthy 3.23 mm bore wall). +2. Cut the matching Ø8.2 mm, 40 mm-embed bore in the cargo shell wall, + mirroring the main spar boss's embed pattern (`PORT_INB` −100 to + `PORT_OUTB` −60). +3. Gate the enlarged-tenon geometry (from the existing `fuselage_root_tab()` + sizing) behind the named constant, defaulted to the second-spar path. +4. Correct the stale structural-role comment in the tenon module. +5. Record in WBS.md that the bearing stress at this station/embed + (1.46 MPa, from the existing WBS.md CARGO-03c table) already clears the + repo's cited 5 MPa bond-limited CF-PETG figure (`docs/structural_analysis.md` + §7.3) at FOS 3.4 — the socket wall is CF-PETG hull skin, not plain PETG, + so this is the correct allowable to cite, and no new coupon test is + required to close CARGO-03c under this branch (a coupon test still + matters for tightening the margin or enabling the enlarged-tenon + alternative, but is not a blocker here). + +**Patterns to follow:** the CF-ROD-4MM tie-rod/boss-pin joints in +`docs/structural_analysis.md` §6–§7 — same bonding convention (0.1 mm/side +clearance, West System 105/206, cure before foam pour) and the main spar +boss's embed geometry (`PORT_INB`/`PORT_OUTB`) for the boss parametrization. + +**Test scenarios:** +- `tools/wing_root_deconflict.py` reaches CLEAR with the second-spar bore + present — confirm it stays clear of the Hall conduit (11 mm margin at the + 30 mm Hall station) and the tenon region (2.50 mm clearance at 85 mm + station per WBS.md, not applicable at 14 mm but verify no other + interference). +- Bearing stress at the rod, recomputed by `wing_spar_carrythrough.py` + against the final 40 mm embed, matches or beats the WBS.md estimate + (1.46 MPa at Ø8×40mm) — FOS 4.0 needs ≤5.9 MPa allowable, well under even + the pessimistic 5 MPa bond-limited figure. +- The enlarged-tenon path, when the constant is flipped, still builds a + manifold solid (regression-proof the alternate path even though it is not + default-active). + +**Verification:** `tools/wing_root_deconflict.py` and +`tools/wing_spar_carrythrough.py` both PASS against the second-spar +configuration. + +--- + +### U6. Re-render and re-bake both wing STLs + +**Goal:** Produce final port + starboard STLs for `wing_nacelle_pylon_revo` +and `wings_s1223_revo` against the corrected airfoil (U1/U2) and current Rev +S1b/S1c constants. + +**Requirements:** R3 + +**Dependencies:** U1, U2 (must not bake against the still-broken airfoil or +an undecided loft method) + +**Files:** +- `airframe/openscad/wings/wings_s1223_revo.scad`, + `airframe/openscad/wings/wing_nacelle_pylon_revo.scad` (or current + canonical paths — confirm at implementation time) +- `tools/bake_hull_frame.py` (existing bake tool — reuse, do not + reimplement) +- STL outputs under the repo's existing STL output convention + +**Approach:** +1. Render both wing SCAD sources (port + starboard) with `openscad`. +2. `python3 tools/bake_hull_frame.py Wing_Port Wing_Stbd` (per the exact + invocation already recorded in WBS.md for the prior, now-stale bake). +3. Confirm the resulting envelope: Z max should still be set by the + (unchanged) root section; only the corrected-airfoil tip geometry moves. + +**Test scenarios:** +- `tools/validate_stls.py` passes on both baked wings (watertight, 0 + boundary, 0 non-manifold, 1 body). +- `tools/wing_internal_clearance.py` and `tools/wing_root_deconflict.py` + both PASS against the newly baked geometry. +- `tools/wing_spar_carrythrough.py` re-run confirms the FOS figures in + WBS.md still hold against the corrected-airfoil spar section (the spar is + steel tube, unaffected by the airfoil fix, but bearing-seat clearances in + the wing wall are section-dependent — re-verify, don't assume). + +**Verification:** `validate_stls.py`, `wing_internal_clearance.py`, +`wing_root_deconflict.py` all PASS on the final baked STLs. + +--- + +### U7. SPAR-02 torque re-derivation and RAIL-2 resizing + +**Goal:** Analytically re-derive the tilt-servo torque requirement from +actual aero+inertia loads at the CG pivot (not the L383 spec pick), and +resize RAIL-2's current budget to the DS3225's cited stall current. + +**Requirements:** R7 (KTD5) + +**Dependencies:** U6 (uses final wing mass/geometry for the inertia term) + +**Files:** +- `docs/TILT_SPAR_ANALYSIS.md` §2 (requirement derivation — supersede the + L383 spec-pick citation with the re-derived figure and its own load-case + table) +- `airframe/wings-nacelles/WBS.md` §1.1.2 SPAR-02 (record the re-derivation + result) +- RAIL-2 sizing location (search for `RAIL-2` — likely in a power-budget doc + or the avionics BOM; confirm exact file at implementation time) +- `REFERENCES.md` (the DS3225 stall-current figure is already cited; add a + "requires verification" row for bench-measured stall current if one does + not already exist under REF-SENSOR-013's entry — WBS.md notes this is + still open) + +**Approach:** +1. Using the same 4 g limit / 1.5× ultimate factor convention already + applied in `docs/structural_analysis.md` §3, and the pivot-at-CG geometry + already established in `docs/TILT_SPAR_ANALYSIS.md` §2, compute the + required tilt torque from aero moment + inertia moment only (gravity term + is nulled by the CG pivot, per the owner's stated reasoning — verify this + nulling explicitly in the derivation rather than asserting it). +2. Compare the re-derived requirement against DS3225's 24.5 kgf·cm at 6.8 V. + If the re-derived figure is ≤24.5 kgf·cm, DS3225 stands (no part change). + If it exceeds 24.5 kgf·cm, flag as a genuine blocker requiring owner + input on a servo change — do not silently pick a replacement part. +3. Resize RAIL-2's current budget to DS3225's cited 2.3 A stall current per + servo (× number of tilt servos, × any repo-standard margin factor used + elsewhere in the power budget), replacing the 1.2 A placeholder. +4. Record bench-verified stall current as still-open in `REFERENCES.md` + (cannot be fabricated — physical test, see Scope Boundaries). + +**Test scenarios:** +- The re-derivation's gravity-nulling claim is checked algebraically (pivot + at CG ⇒ zero moment arm for the weight vector at all tilt angles), not + just asserted. +- RAIL-2's resized budget is traced to a specific load case (2.3 A × N + servos, stated explicitly) rather than a round number. + +**Verification:** The re-derived torque requirement and its comparison +against DS3225 are recorded in both `TILT_SPAR_ANALYSIS.md` §2 and WBS.md +SPAR-02, with the pass/fail conclusion stated explicitly. + +--- + +### U8. Canon-check, FreeCAD mating verification, and doc closeout + +**Goal:** Canon-check tip thickness/spar station against the Serenity +silhouette, run a FreeCAD mating verification pass on the bearing seats and +rod bores, and close out WBS.md/TODO.md/REFERENCES.md. + +**Requirements:** R8, R9, R10 + +**Dependencies:** U1–U7 (this is the closing unit — needs final geometry +from all prior units) + +**Files:** +- FreeCAD verification script (new, under `tools/` following the existing + `tools/wing_*.py` naming convention — e.g. a script that imports both + final STLs plus bearing/rod stand-ins and reports interference/clearance, + mirroring how `wing_root_deconflict.py` already does this for other + features) +- `airframe/wings-nacelles/WBS.md` (close SPAR-01, SPAR-02, WING-01 + checkboxes and their open sub-steps; add the canon-check result) +- `airframe/wings-nacelles/TODO.md` (delete the now-closed lines per repo + convention — close in WBS.md first) +- `airframe/fuselage-mid/WBS.md` (close CARGO-01, CARGO-02, CARGO-03c; + correct the `fuselage_root_tab()` comment reference) +- root `TODO.md` §0.8 (add/update the CF-PETG bearing coupon and bench + stall-current items if not already tracked at LG-11) +- `REFERENCES.md` (finalize all new/updated REF-ID entries) + +**Approach:** +1. Canon-check: compare final tip thickness (t/c) and spar station against + the Serenity reference silhouette hierarchy already established in + `REFERENCES.md` (REF-CAD-002 Nick Henning renders, REF-CAD-003 QMx, in + that authority order) using FreeCAD's measurement tools against the + imported reference geometry (or existing profile PNGs if no reference + mesh is available — confirm what's actually on file before assuming a + 3D reference exists). +2. FreeCAD mating check: import final wing + cargo shell STLs, place bearing + stand-ins (F688ZZ, MF128ZZ) and the second-spar rod at their final + positions, and confirm zero interference / correct seat clearance at each + joint (spar bearing seats ×2, tenon/mortise, second-spar rod bore/boss). +3. Run the full re-verification gate list (R9) and record pass/fail for + each in the WBS.md closeout. +4. Update WBS.md (close resolved items, correct stale comments), delete + corresponding TODO.md lines, finalize REFERENCES.md entries. + +**Test scenarios:** +- FreeCAD mating check reports zero interference at all bearing/rod/tenon + joints, with clearance values recorded (not just pass/fail) — mirror the + numeric-clearance-table convention already used throughout WBS.md. +- Canon-check records actual measured tip t/c and spar station against the + reference, with the delta stated (even if the delta is zero/negligible — + do not omit the number). +- Every gate in R9 is re-run against final geometry and its result recorded. + +**Verification:** All R9 gates PASS; WBS.md/TODO.md/REFERENCES.md reflect +the final closed state with no stale checkboxes (per this repo's own +standing rule — every `[ ]` whose text says resolved gets closed +immediately). + +## Scope Boundaries + +**In scope:** all OpenSCAD/geometry, FreeCAD verification, gate-script +re-runs, and documentation closure listed in U1–U8. + +**Deferred to Follow-Up Work (not this plan):** +- CF-PETG bearing/fusion coupon testing (ASTM D695) for CARGO-03c — physical + test, tracked at root `TODO.md` §1.1.4 LG-11. This plan builds the + second-spar fallback so it does not block on the coupon result (KTD1); if + a future coupon clears ≥15 MPa, swapping to the enlarged-tenon path is a + follow-up unit, not part of this plan. +- CF plate bending allowable certification (ASTM D3039/D695) for the + thwarts — tracked at root `TODO.md` §0.8. The thwarts are built now against + the existing conservative 300 MPa stand-in (FOS 8.5/8.7); re-verification + against certified figures is follow-up. +- Bench-measured SPT5425LV/DS3225 stall current and MMPDS/AMS allowable + verification for 4130 — both explicitly "requires verification" physical + tests per `REFERENCES.md`, tracked at root `TODO.md` §0.8. +- OpenFOAM aerodynamic re-verification of the corrected S1223 section is + **not required** for this plan — `tools/wing_cfd_openfoam.py` is + independently blocked on mesh generation (committed WIP per WBS.md) and + the corrected-airfoil aero claim is a geometry-validity fix, not a new + aero regime. If mesh generation becomes unblocked separately, re-running + it is follow-up work, not a dependency of this plan. +- The `s1223_section()` camber/thickness decomposition itself (Rev S1b) is + already correct and out of scope — only the coordinate *table* is wrong. + +**Out of scope / not this plan's decision:** +- Any change to bearing part numbers already selected (F688ZZ, MF128ZZ) — + those are settled; this plan only sources their dimensions for the seat + cut. +- Payload/mission envelope changes (README.md steps 6/9) — CARGO-01's + resolution already avoided needing these per the owner-selected + resolution 1. + +## Risks & Dependencies + +- **UIUC dataset availability/format.** If the UIUC database's S1223 file + cannot be fetched or parsed cleanly, U1 blocks the entire plan (everything + downstream depends on a corrected airfoil). Mitigate by confirming fetch + access early, before starting other units in parallel. +- **`hull()` replacement risk (KTD4).** If a true loft is required, this is + the highest-uncertainty unit in the plan — OpenSCAD lofting between + dissimilar station outlines is nontrivial. Budget it as its own + checkpoint; do not assume it is a drop-in replacement for `hull()`. +- **SPAR-02 re-derivation could invalidate DS3225.** If the re-derived + torque exceeds 24.5 kgf·cm, this surfaces as a genuine blocker requiring + owner input (per KTD5) — do not silently substitute a larger servo, which + would cascade into the already-settled servo-pad geometry (SPT5425LV/ + DS3225 pad family). +- **Second-spar rod clearance is tight in places.** WBS.md's own table shows + aft stations going negative wall thickness — U5 must stay at the + identified 14 mm station and not drift aft during implementation. + +## Verification Contract + +- `tools/wing_airfoil_integrity.py` — PASS (U1, U2) +- `tools/wing_internal_clearance.py` — PASS (U6) +- `tools/wing_root_deconflict.py` — CLEAR (U5, U6) +- `tools/wing_spar_carrythrough.py` — FOS targets met, all cases (U4, U5, U6) +- `tools/cargo_bay_envelope.py` — PASS, 4×3×3 in payload fits (U3) +- `tools/nacelle_servo_deconflict.py` — CLEAR (U3, U4) +- `tools/landing_gear_wing_clearance.py --proud` — CLEAR, all 4 checks (U3, U4) +- `tools/validate_stls.py` — watertight, 0 boundary, 0 non-manifold, 1 body, + on every re-baked/re-merged STL (U3, U4, U5, U6) +- FreeCAD mating check (new script, U8) — zero interference at every + bearing/rod/tenon joint + +## Definition of Done + +- WING-01 is closed: corrected S1223 table cited in `REFERENCES.md`, gate + PASSES, both wings re-baked against it. +- SPAR-01 is closed: bearing-seat re-cut, CF thwarts built and verified, + `TILT_SPAR_ANALYSIS.md` and `structural_analysis.md` §5 updated per the + WBS.md instruction. +- SPAR-02's requirement is re-derived and recorded; RAIL-2 is resized; the + bench-verification gap is explicitly logged, not silently closed. +- CARGO-01/CARGO-02/CARGO-03c are closed in `airframe/fuselage-mid/WBS.md`. +- Tip thickness/spar station canon check is recorded with measured deltas. +- Every Verification Contract gate above PASSes against final, published + geometry (not against source scripts alone). +- `WBS.md` (both files), `TODO.md` (wings-nacelles), and `REFERENCES.md` are + updated per repo convention with no stale `[ ]` items whose own text + already says resolved. + +## Sources & Research + +- `airframe/wings-nacelles/TODO.md` §1.1.2/§1.1.3 (open-items index) +- `airframe/wings-nacelles/WBS.md` §1.1.2 (SPAR-01, SPAR-02, WING-01 full + detail, all owner-dated 2026-08-23/24) +- `airframe/fuselage-mid/WBS.md` §1.1.1.2 (CARGO-01, CARGO-02, CARGO-03, + CARGO-03b, CARGO-04 — the paired fuselage-side items) +- `REFERENCES.md` "requires verification" table (CF-PETG bearing/bond + allowables, 4130 MMPDS verification, SPT5425LV stall current — all + physical-test-gated items carried into Scope Boundaries) +- PR #189 (merged into `main`) — closed CARGO-03/03b/04 (mortise + penetration, tenon/mortise datum fix), gated (not fixed) WING-01 +- `tools/wing_spar_carrythrough.py`, `tools/wing_root_deconflict.py`, + `tools/wing_airfoil_integrity.py` (existing gates this plan re-runs, not + reimplements) +- External research was not run for this plan: the architecture + (bearing-seat termination, thwart couple closure, tenon-vs-second-spar + branch rule) is already owner-decided in-repo with load figures already + computed against repo-standard factors; the one external fact this plan + needs (validated S1223 coordinates) is sourced live during U1 from the + UIUC Airfoil Coordinates Database, not researched here. diff --git a/docs/plans/2026-08-25-001-finish-avionics-plan.md b/docs/plans/2026-08-25-001-finish-avionics-plan.md new file mode 100644 index 00000000..3d93ebd4 --- /dev/null +++ b/docs/plans/2026-08-25-001-finish-avionics-plan.md @@ -0,0 +1,653 @@ +--- +title: "plan: Close out avionics — CAN-FD/RS-485 actuator bus, SG90/OSC finalize, Observer pitot airspeed" +date: 2026-08-25 +plan_type: feature+fix +execution: hardware+firmware +deepened: 2026-08-25 +--- + +# plan: Close out avionics subsystem + +**Target repo:** Serenity-UAV (this repo) +**Scope:** `avionics/` (Pilot, XO, Commo, Observer, FlightEngineer, CAN-PERIPH-GW-1, +ENC-NACELLE-1, firmware) plus the three external companion repos this plan +assumes are backend-complete: `open-servo-core-secure`, `Open-Secure-ESC`, +`LibreServo_v4`. + +--- + +## Summary + +"Finish the avionics" is not one task — it is five separable work streams that +converge on the same six boards. This plan takes three backend assumptions as +**given** (per user direction, not re-derived here): + +1. All SG90-class servos run **open-servo-core-secure**: TTL bus, CMAC-authenticated + messages. +2. All nacelle ESCs are **Open-Secure-ESC 50A/6S `CAN_485_faraday`** builds: + CAN-FD + RS-485, host **and** message authentication. +3. Both nacelle tilt servos run **LibreServo_v4**: CAN-FD + RS-485 + OPTIGA Trust M + secure element. + +Taking these as given exposes a real problem: **the avionics hardware and firmware +that are supposed to talk to these actuators were designed against an older, PWM-based +interface.** Pilot's own field-connector table (`avionics/kicad/Pilot/Pilot.md` §14) +still lists `J_ESC` as 4-channel PWM/BDSHOT and `J_SERVO` as 4-channel PWM; the +firmware WBS's EDF governor (`avionics/firmware/WBS.md` §4.2) is scoped around +BDSHOT600 telemetry decode and EHRPWM throttle output — none of that exists on a +CAN-FD/RS-485 actuator. `REFERENCES.md` REF-SENSOR-014 also still names "LibreServo +v2" and documents an **unresolved RS-485 transceiver gap** on `CAN-PERIPH-GW-1`'s +`J_FLEX` (bare UART pair, no local transceiver) — that citation predates the v4 fork +and the gap it flags is exactly what nacelle-servo integration needs closed. Finally, +Pilot's own purpose statement claims an "airspeed sensor" that **does not exist +anywhere in the design** — no pitot connector, no sensor, no REF-ID. The user's +direction to put airspeed on **Observer** instead of Pilot is a deliberate +architecture correction, not an addition to a design that already had it. + +This plan is organized as nine implementation units (U1–U9) across four phases, +plus the pre-existing per-board ERC/DRC backlog that has to close before any board +ships gerbers. + +## Assumptions Taken As Given (not re-litigated by this plan) + +- Open-Secure-ESC, LibreServo_v4, and open-servo-core-secure firmware/hardware are + functionally complete on their own repos. This plan only covers **integration**: + bus wiring, message schemas, key provisioning, and the Serenity-side firmware that + talks to them. +- `REFERENCES.md` REF-SENSOR-015 already flags OpenServoCore upstream as "in active + development, nothing here is shippable yet" (verified only to hardware rev B) — + that flag is **not cleared by this plan**. U4 below re-checks it as a gate, not a + formality; if it's still true, flight-article SG90 procurement stays blocked + regardless of how much integration work lands. + +--- + +## Skills & Workflow Map + +None of these nine units close on acceptance-criteria checkboxes alone — each has +a project skill that either produces the artifact the checkbox demands or is the +gate that must pass before the checkbox can be marked done. This table is the +quick-reference; each unit below repeats its own row inline so an implementer +never has to cross-reference back here. + +| Unit | Producing skill(s) | Gating skill/workflow | What "gate passes" means | +|---|---|---|---| +| U1 | `pcb-designer` (bus-topology + connector rework guidance) | `kicad` | ERC/DRC on `Pilot.kicad_sch`/`.kicad_pcb` shows 0 new violations after the `J_ESC`/`J_SERVO` retarget | +| U2 | `pcb-designer` (RS-485 transceiver placement), `datasheets` (ADM2587E/ADM3055E extraction) | `kicad` | `CAN-PERIPH-GW-1` schematic ERC clean after the `J_FLEX` transceiver fix; datasheet extraction attached before REF-SENSOR-014 is renamed | +| U3 | `bom`/`datasheets` (Open-Secure-ESC `CAN_485_faraday` BOM/spec pull) | `secure-controller-assurance` | Host+message-auth message schema maps onto SCA's actuator-authentication controls with no unmapped 🔒 gate | +| U4 | — (protocol/firmware only) | `secure-controller-assurance` + explicit upstream-maturity re-check | CMAC framing maps onto an SCA control; REF-SENSOR-015 maturity flag is re-stated, not silently dropped | +| U5 | `datasheets` (sensor extraction), `bom` (sourcing), `pcb-designer` (I2C bus/pull-up sizing) | `kicad`, then `kidoc` | Datasheet extraction exists **before** any REFERENCES.md entry is written (hard order, not parallel); ERC clean on `J_PITOT`; Observer's `kidoc` HDD scaffold regenerates without a stale-data warning | +| U6 | — (architecture decision, no board edit) | `secure-controller-assurance` | Every new authenticated endpoint class (ESC, tilt servo, SG90) is mapped to an SCA control or overlay, not asserted informally | +| U7 | — (closeout only) | `kicad` (ERC/DRC/BOM/DFM), `emc` (pre-compliance) | Each board table row reaches `kicad` ERC=0/DRC=0-hard (or documented exception) **and** an `emc` pre-compliance pass/waiver, before gerbers are generated | +| U8 | `pcb-designer` (isolation/creepage reference), `emc` (shielding/radiated-emissions guidance) | `kicad` | DRC re-run shows the 13 `TMESH_P`/`TMESH_N` vs `GND2_*` violations resolved to ≥8mm creepage / ≥1.5mm clearance | +| U9 | `kidoc` (regenerate per-board status docs) | `project-overseer` | WBS/TODO federation check shows no stale checkbox and no orphaned open item across `avionics/TODO.md`, `avionics/WBS.md`, and root `TODO.md`/`WBS.md` | + +**Why `kicad` (not ad-hoc `kicad-cli`) is the gate, not just a tool call:** the +`kicad` skill's ERC/DRC analyzer produces a confidence-labeled, evidence-sourced +report (`trust_summary` rollup) rather than a bare pass/fail — that's what +`avionics/AGENTS.md`'s DRC Workflow policy ("document anything that cannot be +resolved... with the specific DRC rule and reason") actually needs to be +satisfiable. A bare `kicad-cli` exit code doesn't carry the reason text the +policy requires. + +**Why `secure-controller-assurance` gates U3/U4/U6 specifically:** those three +units are exactly where root `AGENTS.md`'s Zero Trust requirement stops being an +aspiration and becomes a wire-level claim (an ESC accepts a signed setpoint, an +SG90 accepts a CMAC frame). The skill's 96 controls + platform overlays are the +existing mechanism for turning "this is authenticated" into a checked control +rather than a sentence in a `.md` file. + +**Why `datasheets` gates the *order of operations* in U2/U5, not just informs +them:** root CLAUDE.md's Authenticity policy ("No fabricated... reference... +will ever be fabricated") is a standing constraint this plan cannot waive for +convenience. U5 in particular is the unit most at risk of a fabricated citation +— it is picking a **new** sensor with no prior art in the repo — so the datasheet +pull is sequenced as a hard prerequisite to writing anything into +`REFERENCES.md`, not a parallel nice-to-have. + +--- + +## Dependency Graph + +``` +U1 (Pilot ESC/servo interface: PWM → CAN-FD/RS-485) + ├─→ U2 (LibreServo_v4 nacelle-tilt bus integration) + ├─→ U3 (Open-Secure-ESC CAN-FD/RS-485 integration + governor rewrite) + └─→ U6 (fleet key provisioning / host+message auth wiring) +U4 (OSC SG90 TTL+CMAC bus finalize) ─────────────────→ U6 +U5 (Observer pitot airspeed sensor) ─────────────────→ U9 +U6 ─→ U7 (per-board ERC/DRC/gerber closeout) +U8 (tamper-mesh EMI blocker + Faraday/shielding) ─────→ U7 +U7 ─→ U9 (REFERENCES.md + WBS/TODO closeout, fab release gate) +``` + +U4 and U5 have no hardware dependency on U1–U3 and can run in parallel with them. +U8's tamper-mesh item is a **standing fab blocker on Pilot** (13 DRC violations, +0.125 mm measured vs 8 mm required creepage) independent of everything else here — +it must close before U7's Pilot pass regardless of schedule. + +--- + +## Phase A — Actuator bus reconciliation (U1–U3) + +### U1. Pilot ESC/servo interface: retire PWM, adopt CAN-FD/RS-485 trunk + +**Description:** Open-Secure-ESC's 50A/6S build and LibreServo_v4 both speak +CAN-FD + RS-485, not PWM. Pilot's `J_ESC` (PWM/BDSHOT, 4 ch) and `J_SERVO` (PWM, +4 ch) connectors in `Pilot.md` §14 are dead headers against this hardware. Retarget +actuator command/telemetry onto Pilot's existing isolated CAN-FD trunk (`J_CAN`, +ISOW1044BDFMR) and RS-485 trunk (`J_485`, pending its own ISOW1412 footprint swap — +already tracked in `TODO.md` §1.2a). Each nacelle's ESC and tilt servo become +addressed nodes on that trunk instead of point-to-point PWM wires. + +**Acceptance criteria:** +- [ ] `Pilot.md` §14 field-connector table updated: `J_ESC`/`J_SERVO` marked + removed-or-repurposed, with the CAN-FD/RS-485 trunk documented as the actuator + path; power-only conductors (if any survive, e.g. BEC 5V/6V feed) called out + separately from the retired signal pins. +- [ ] Bus topology decision recorded: point-to-point CAN-FD per nacelle vs. shared + trunk with node addressing (Open-Secure-ESC and LibreServo_v4 both support + multi-drop CAN-FD; confirm addressing scheme against both repos' protocol docs + before choosing). +- [ ] `avionics/firmware/WBS.md` §4.2 EDF governor item rewritten: BDSHOT600/PRU-ICSS + telemetry decode and EHRPWM output are removed from scope; replaced with a + CAN-FD message producer (throttle/tilt setpoint) and consumer (RPM/V/I/temp + telemetry, now sourced from the ESC's own authenticated telemetry frame instead + of PRU-decoded BDSHOT). +- [ ] `docs/POWER_DISTRIBUTION.md` and `FlightEngineer.md` power budget rows for + ESC/servo current draw re-checked against 50A-rated (not 40A, current text) ESC + capacity — confirm this is a rating headroom change, not an actual draw change. + +**Verification:** +- [ ] `kicad-cli sch erc` and `kicad-cli pcb drc` on `Pilot.kicad_sch`/`.kicad_pcb` + after the connector-table edit — no new violations introduced. +- [ ] Manual check: trace the retired `J_ESC`/`J_SERVO` nets end-to-end; confirm no + firmware code path still assumes EHRPWM output exists. + +**Skills / workflow gate:** Use `pcb-designer` (communication-interfaces.md, §CAN +reference) to work the point-to-point-vs-shared-trunk decision before touching the +schematic. The unit is not done until the `kicad` skill's ERC/DRC analyzer runs +against the edited `Pilot.kicad_sch`/`.kicad_pcb` and reports the confidence-labeled +`trust_summary` this doc's own DRC Workflow policy requires — a bare `kicad-cli` +exit code is not sufficient evidence for the "no new violations" acceptance +criterion above. + +**Dependencies:** None (this is the gating decision for U2/U3/U6). + +**Files likely touched:** `avionics/kicad/Pilot/Pilot.md`, `Pilot.kicad_sch`, +`avionics/firmware/WBS.md`, `docs/POWER_DISTRIBUTION.md`, +`avionics/kicad/FlightEngineer/FlightEngineer.md`. + +**Estimated scope:** L — touches schematic, board doc, firmware WBS, and power +budget together; if it grows further, split the connector-table/schematic edit from +the firmware-WBS rewrite. + +--- + +### U2. LibreServo_v4 nacelle-tilt bus integration + +**Description:** Close the gap `REFERENCES.md` REF-SENSOR-014 already documents: +`CAN-PERIPH-GW-1`'s `J_FLEX` exposes only a bare `FLEX_UART_TX/RX` pair, with no +local RS-485 transceiver for LibreServo's genuine differential daisy-chain bus. +That citation still says "LibreServo v2" — rename to v4 throughout and re-verify +the fork's current interface (ADM2587E RS-485 + ADM3055E CAN-FD, per +`LibreServo_v4/README.md`) matches what's cited. + +**Acceptance criteria:** +- [ ] Decide and document the gateway-side RS-485 transceiver approach: add one at + the wiring harness, or extend `CAN-PERIPH-GW-1`'s schematic with a dedicated + local-drop transceiver — do not leave `J_FLEX` as a bare UART pair feeding a + differential bus. +- [ ] `REFERENCES.md` REF-SENSOR-014 renamed/updated to LibreServo_v4, with the + ADM2587E/ADM3055E part numbers and CRC-16 framing cited from + `LibreServo_v4/README.md` (validated URL, per REFERENCES.md discipline — + no invented section numbers). +- [ ] Two nacelle tilt servos wired as addressed CAN-FD/RS-485 nodes per U1's bus + topology decision; AK7455 tilt-angle encoder feedback (already bus-published per + `project_fleet_trust_module` design) reconciled against the same trunk, not a + separate path. +- [ ] OPTIGA Trust M provisioning on LibreServo_v4 boards cross-checked against + `project_optiga_trust_m_firmware` constraints (default world-readable 0xE140 + requires mandatory pairing before flight-article use). + +**Verification:** +- [ ] DRC/ERC clean on any touched `CAN-PERIPH-GW-1` schematic changes. +- [ ] Bench check (when hardware available): LibreServo_v4 unit responds to an + addressed CAN-FD setpoint frame and returns authenticated position/current + telemetry over the same trunk. + +**Skills / workflow gate:** Run `datasheets` against the ADM2587E and ADM3055E +parts named in `LibreServo_v4/README.md` **before** editing REF-SENSOR-014 — the +rename to v4 must carry a pulled-and-cached extraction, not a copy of the README +prose, per root CLAUDE.md's citation-authenticity policy. Use `pcb-designer`'s +communication-interfaces.md RS-485 guidance (120Ω termination, fail-safe bias) to +size the new gateway-side transceiver. Gate: `kicad` ERC clean on the touched +`CAN-PERIPH-GW-1` schematic. + +**Dependencies:** U1 (bus topology/addressing decision). + +**Files likely touched:** `avionics/kicad/CAN-PERIPH-GW-1/*`, `REFERENCES.md`, +`avionics/kicad/FlightEngineer/FlightEngineer.md` (6V servo rail row still says +"LibreServo v2"). + +**Estimated scope:** M. + +--- + +### U3. Open-Secure-ESC 50A/6S integration + PID governor rewrite + +**Description:** Wire the `CAN_485_faraday` build variant onto Pilot's CAN-FD trunk +per U1's decision, define the message schema (throttle setpoint, arm/disarm, +telemetry readback), and rewrite the EDF PID governor firmware around it. + +**Acceptance criteria:** +- [ ] Message schema defined: setpoint frame (throttle %, direction if applicable), + telemetry frame (RPM, voltage, current, temperature, fault flags), arm/disarm/ + e-stop frame — each carrying the host+message authentication Open-Secure-ESC + already implements (this plan does not re-derive that crypto, only wires to it). +- [ ] PID governor firmware ported from PRU-ICSS/EHRPWM to CAN-FD message I/O; + existing targets preserved (settle <200ms, overshoot <5%, |RPM_FWD−RPM_AFT| + <100 RPM, fault latch on overtemp/overcurrent with no auto-recovery). +- [ ] Fault-latch behavior re-verified: does Open-Secure-ESC's own fault reporting + satisfy "GCS ack required, no auto-recovery," or does Pilot firmware need to + enforce that on top of the ESC's authenticated fault frame? +- [ ] New `REFERENCES.md` entry for Open-Secure-ESC (repo URL, `CAN_485_faraday` + build path, protocol doc) — do not cite it informally in code comments without + a REF-ID per root CLAUDE.md citation policy. + +**Verification:** +- [ ] `governor_cal.py` bench-test re-run against the new CAN-FD path once hardware + is available; confirm settle/overshoot/equalization targets still hold. +- [ ] CAN-FD cross-node RPM sync (fwd/aft pairing across River/Simon stacks, per + firmware WBS §4.2) re-verified over the new bus. + +**Skills / workflow gate:** Pull the `CAN_485_faraday` build's own protocol doc +and BOM via `bom`/`datasheets` before freezing the message schema — do not derive +frame layout from the generic README description alone. The governing gate is +`secure-controller-assurance`: run it against the new setpoint/telemetry/arm- +disarm frame set and confirm each maps to an existing SCA actuator-authentication +control (or is flagged as a new 🔒 gate to add) before this unit is considered +closed — this is the unit where Zero Trust stops being a sentence in `AGENTS.md` +and becomes a wire-level claim. + +**Dependencies:** U1. + +**Files likely touched:** `avionics/firmware/` (governor source), `REFERENCES.md`, +`avionics/kicad/Pilot/Pilot.md`. + +**Estimated scope:** L — firmware rewrite is the bulk of it; split the message- +schema definition from the governor port if it runs long. + +--- + +## Phase B — SG90/OSC and Observer sensing (U4–U5, parallel to Phase A) + +### U4. OpenServoCore (SG90) TTL+CMAC bus finalize + +**Description:** `avionics/firmware/WBS.md` §"Cargo control" already scopes a +DRV8833/HX711/SG90 state machine (IDLE→DEPLOY→DELIVERED→RETRACT→LATCHED) but +predates the CMAC-authenticated open-servo-core-secure backend. Finalize which +node hosts the TTL bus master (FlightEngineer, per the existing 6V-servo-rail +co-location in `FlightEngineer.md`, is the natural host — confirm rather than +assume) and update the firmware state machine to speak the authenticated +osc-native protocol instead of raw PWM. + +**Acceptance criteria:** +- [ ] Host node for the SG90 TTL bus confirmed and documented (FlightEngineer vs. + Pilot vs. a dedicated node) — this is a real open decision, not implied by + existing docs. +- [ ] Cargo door + release servo state machine rewritten against osc-native + protocol framing (break-framed, CMAC-authenticated) instead of PWM duty cycle. +- [ ] Nozzle-actuation SG90s (RCS proportional valve servos, `POWER_DISTRIBUTION.md` + line ~174) get the same bus/protocol treatment — confirm they share the host + node or need a separate drop. +- [ ] **Gate check, not a formality:** re-verify `github.com/OpenServoCore/open-servo-core` + (and the `-secure` fork) hardware-maturity status against REF-SENSOR-015's "not + shippable yet, validated to rev B" flag before any flight-article SG90+OSC + procurement. If still true, note it explicitly in this unit's closeout — do not + silently drop the gate because integration work is done. +- [ ] New `REFERENCES.md` entry for the `-secure` (CMAC) fork specifically, since + REF-SENSOR-015 currently cites only the upstream, non-secure OpenServoCore. + +**Verification:** +- [ ] ERC clean on whichever node's schematic carries the TTL bus master pins. +- [ ] Firmware state machine unit-tested against a simulated CMAC-authenticated + frame sequence (or bench-tested if hardware is available). + +**Skills / workflow gate:** The upstream-maturity re-check is a literal step, not +a note — actually query `github.com/OpenServoCore/open-servo-core` and the +`-secure` fork's current state before closing this unit; do not reuse the +REF-SENSOR-015 text from a prior pass. Run `secure-controller-assurance` against +the CMAC framing to confirm it maps to an SG90/actuator-class control in the same +way U3/U6 map the ESC and fleet-auth wiring — a servo class exception here would +be a silent Zero Trust gap. No `kicad` gate is required unless the host-node +decision changes that board's schematic (see Files below). + +**Dependencies:** None (parallel to Phase A). + +**Files likely touched:** `avionics/firmware/WBS.md`, `REFERENCES.md`, +`docs/CARGO_WINCH_SPECIFICATION.md`, whichever board hosts the TTL bus. + +**Estimated scope:** M. + +--- + +### U5. Observer pitot-tube airspeed sensor + +**Description:** No board in the current design has a pitot/airspeed sensor — +Pilot's purpose text claims one but no connector, IC, or REF-ID exists anywhere +(confirmed by repo-wide search). Add it to **Observer** per user direction, and +correct Pilot's stale claim. + +**Acceptance criteria:** +- [ ] Sensor selection: a differential-pressure airspeed IC (I2C is the natural + fit for Observer's MSPM0G3507, which already runs I2C for other peripherals) + — candidate parts to evaluate via the `datasheets`/`bom` skills, not assumed: + e.g. TE Connectivity MS4525DO or Sensirion SDP3x family. **Do not commit a part + number to `REFERENCES.md` without pulling and citing its actual datasheet** — + mark as "requires verification" per root CLAUDE.md policy until then. +- [ ] MSPM0G3507 peripheral allocation checked for conflicts: Observer already + uses UART1 (TFmini-S ToF), SPI (KSZ9477 mgmt + TPM), and I2C for its own PMIC/ + regulator monitoring if any — confirm a free I2C or spare UART exists before + committing to a bus. +- [ ] New `J_PITOT` connector added to Observer's field-connector set (JST-GH, + matching the board's existing connector family), wired to the chosen bus, with + pull-ups sized per the sensor's I2C spec if I2C is chosen. +- [ ] Firmware driver added to Observer's MSPM0G3507 firmware scope (or wherever + Observer's application logic lives) publishing airspeed onto the same CAN-FD + trunk Observer already uses, so Pilot's flight-control loop can consume it + cross-node instead of hosting the sensor itself. +- [ ] `avionics/AGENTS.md` and `Pilot.md` purpose text corrected: remove the + unbacked "airspeed sensor" claim from Pilot's sensor list, and add Observer as + the airspeed source in the architecture description. +- [ ] Mechanical coordination flagged (not solved here): a pitot tube needs an + external-airflow mounting point — check whether the bow sensor pod location + (Observer's nose install) has room for a forward-facing pitot mast, or whether + this needs a dedicated mount design task handed to the airframe subsystem. + +**Verification:** +- [ ] ERC clean on the new `J_PITOT` connector and its bus wiring. +- [ ] Manual check: confirm the chosen bus doesn't collide with an existing + Observer peripheral (cross-reference `OBSERVER_SOM_NETMAP.md`/pinmap CSV). + +**Skills / workflow gate — strict order, not parallel steps:** + +1. `datasheets` pulls and caches the candidate sensor's actual datasheet (MS4525DO + or SDP3x family) — **this must complete before any `REFERENCES.md` edit**, per + root CLAUDE.md's no-fabrication policy; U5 is the highest citation-risk unit in + this plan because it introduces a part with zero prior art in the repo. +2. `bom` confirms sourcing/availability for the selected part. +3. `pcb-designer` (§6.3 I2C bus pattern, §3 pull-up sizing) informs the `J_PITOT` + connector and bus design. +4. `kicad` ERC gate on the new connector and its wiring. +5. `kidoc` regenerates Observer's HDD scaffold once wired — if the scaffold's + auto-run `kicad` analysis still shows the sensor as absent, the unit is not + done, regardless of what the `.md` prose claims. + +**Dependencies:** None (parallel to Phase A); feeds U9 documentation closeout. + +**Files likely touched:** `avionics/kicad/Observer/Observer.md`, +`Observer.kicad_sch`/pinmap CSV, `REFERENCES.md`, `avionics/AGENTS.md`, +`avionics/kicad/Pilot/Pilot.md`. + +**Estimated scope:** M — sensor selection + connector/bus wiring is S/M; if the +mechanical pitot-mast question turns into real geometry work, that's a separate +airframe-subsystem task, not part of this unit's scope. + +--- + +## Phase C — Fleet security wiring (U6) + +### U6. Host + message authentication wiring across ESC/servo/SG90 endpoints + +**Description:** Root `AGENTS.md`'s Zero Trust requirement ("every message ... +authenticated ... every node state change") now has three new authenticated +endpoint classes (ESC, nacelle servo, SG90) that need key provisioning tied into +the existing TPM/OPTIGA fleet architecture (`project_fleet_trust_module`, +`project_optiga_trust_m_swap`, `project_optiga_trust_m_firmware` memory). + +**Acceptance criteria:** +- [ ] Key provisioning path documented for each endpoint class: does Pilot's own + TPM sign/verify CAN-FD frames to/from the ESC and tilt servo, or does each + endpoint's own secure element (Open-Secure-ESC's, LibreServo_v4's OPTIGA Trust + M, OSC's CMAC key) operate independently with Pilot only relaying? + This is a real architecture decision — do not assume "it just works" because + each repo independently implements auth. +- [ ] Pairing/provisioning step identified for LibreServo_v4's OPTIGA Trust M + (mandatory pairing against default world-readable 0xE140, per + `project_optiga_trust_m_firmware` memory) as a production/flight-article gate, + not a dev-time skip. +- [ ] Failure-mode behavior specified: what happens on an authentication failure + from an ESC or servo frame mid-flight (reject + fault-latch vs. fail-safe + default) — ties into U3's fault-latch acceptance criterion. + +**Verification:** +- [ ] Design review checklist item: every new bus frame type introduced by + U1–U4 has an explicit auth field and a documented verification path. + +**Skills / workflow gate:** `secure-controller-assurance` is the governing skill +for this entire unit, not an optional cross-check — its 96 controls across the +5 platform overlays are the mechanism for answering the "does Pilot's TPM relay +or does each endpoint self-authenticate" architecture question with a control +mapping instead of a guess. Run it once per endpoint class (ESC, nacelle tilt +servo, SG90) and record which overlay applies to each; an endpoint class with no +mapped control is an open gap, not a pass. + +**Dependencies:** U1, U2, U3, U4. + +**Files likely touched:** `avionics/AGENTS.md`, board `.md` files touched above, +possibly a new `docs/FLEET_AUTHENTICATION.md` if this doesn't fit cleanly +elsewhere. + +**Estimated scope:** M. + +--- + +## Phase D — Closeout (U7–U9) + +### U7. Per-board ERC/DRC/gerber closeout + +**Description:** Independent of the actuator-bus work above, every avionics board +already carries a known ERC/DRC backlog (from `avionics/TODO.md`, current as of +this plan's date): + +| Board | Known backlog | +|---|---| +| Pilot | 48 ERC + 76 DRC hard; PB2-P2 header fully-unwired defect (unresolved root cause); tamper-mesh creepage violation (13 DRC, blocks fab — see U8) | +| XO | 219 ERC + 154 DRC hard; TPM footprint wrong land size (4×4/0.4mm → needs 5×5/0.5mm); Zigbee RF chain never added (scope gap) | +| Commo | TPM/R/C not yet routed to SPI1/TPM_IRQN/TPM_RSTN nets; FCC Part 15 §15.235 pre-compliance checklist open | +| Flight Engineer | 213 DRC hard; full resync to trust-module schematic needed | +| Observer | 124 DRC; RS-485/§H section never reached layout | +| CAN-PERIPH-GW-1 | 47/296 nets still unrouted; OPTIGA Trust M swap pending | + +**Acceptance criteria:** +- [ ] Each board above reaches 0 ERC errors / 0 DRC hard violations, or every + remaining violation is documented in `TODO.md` with the specific DRC rule and + reason (per `avionics/AGENTS.md` DRC Workflow policy) — no silent skips. +- [ ] Gerbers generated for every board that reaches clean DRC, per root + `AGENTS.md` §7 production-completeness bar. +- [ ] This unit runs **after** U1/U2/U3/U5's hardware edits land on the affected + boards (Pilot, CAN-PERIPH-GW-1, Observer) — DRC-cleaning a connector table + that's about to be re-edited is wasted effort. + +**Verification:** +- [ ] `kicad-cli sch erc` / `kicad-cli pcb drc` output attached or referenced per + board in that board's `.md` status file. + +**Skills / workflow gate (per board):** Run the `kicad` skill's full analyzer +(ERC, DRC, DFM, BOM extraction) rather than raw `kicad-cli` — the analyzer's +confidence-labeled findings are what let a residual violation be "documented in +`TODO.md` with the specific DRC rule and reason" per `avionics/AGENTS.md`, versus +a bare pass/fail. Follow each board's `kicad` pass with an `emc` pre-compliance +check before generating gerbers — Pilot and Observer both carry explicit EMC +compliance targets (IEC 61000-4-2/4/5, MIL-STD-461G) in their own `.md` files that +a DRC-clean board does not automatically satisfy. A board is not ready for +gerbers on DRC-clean alone if its `.md` file states EMC targets and no `emc` pass +has been run against it. + +**Dependencies:** U1, U2, U3, U5 (for the boards each touches); U8 (Pilot +specifically, tamper-mesh blocker). + +**Files likely touched:** all `avionics/kicad//*.kicad_sch`/`.kicad_pcb`. + +**Estimated scope:** XL overall — treat as one task per board (6 boards), each +S–M once the upstream hardware edits are stable. + +--- + +### U8. Tamper-mesh EMI blocker + Faraday/shielding closeout + +**Description:** Pilot's per-domain tamper-detect mesh currently routes through +the isolated `GND2_CAN`/`GND2_ETH` domains at measured spacing as low as 0.125 mm +— a hard fab blocker (needs ≥8 mm creepage per IEC 62368-1 Annex G, already cited +as REF-IEC-001 §5.5.2). This is pre-existing, tracked, and orthogonal to the +actuator-bus work, but must close before Pilot's U7 pass. + +**Acceptance criteria:** +- [ ] Tamper mesh redesigned as a per-domain (not cross-domain) anti-tamper mesh + per the existing TODO.md item ("Redesign the tamper mesh as a per-domain + anti-tamper mesh (all bays)"). +- [ ] Tamper signal carried over the link for TPM-less boards (existing open item). +- [ ] Faraday cage / box design for all PCBs, and the shielded/twisted-pair wiring + spec for inter-bay harnesses — both currently unstarted per `TODO.md`. +- [ ] Per-footprint repositioning required by this fix is **referred to the user** + per `avionics/AGENTS.md` footprint-placement policy — this unit should surface + the specific moves needed, not silently execute them. + +**Verification:** +- [ ] DRC re-run confirms the 13 cross-domain violations are resolved (0.125mm → + ≥8mm creepage / ≥1.5mm clearance). + +**Skills / workflow gate:** Use `pcb-designer`'s protection-reliability.md +isolation guidance to redesign the per-domain mesh, and `emc`'s shielding +guidance for the Faraday-cage/twisted-pair harness spec (both currently +unstarted per `TODO.md`). Gate: `kicad` DRC confirms the creepage/clearance fix +numerically — this unit's own acceptance criterion is a measured distance, not a +design intent, so the gate has to be the analyzer's measured output, not a +visual review of the new mesh geometry. + +**Dependencies:** None — can start immediately, independent of Phase A–C. + +**Files likely touched:** `avionics/kicad/Pilot/Pilot.kicad_pcb`, EMI hardening +docs under `avionics/emi-hardening/`. + +**Estimated scope:** L. + +--- + +### U9. Documentation, REFERENCES.md, and WBS/TODO closeout + +**Description:** Propagate every closed item above into the federated WBS/TODO +structure per root CLAUDE.md instructions, and reconcile all new/changed +citations. + +**Acceptance criteria:** +- [ ] `REFERENCES.md` updated: new entries for Open-Secure-ESC and the + open-servo-core-secure fork; REF-SENSOR-014 renamed to LibreServo_v4 with + current part numbers; pitot sensor entry added once selected (U5), marked + "requires verification" if not yet datasheet-confirmed. + Any citation that cannot be traced to a validated URL is marked + "requires verification" with a TODO §0.x item — never invented. +- [ ] `avionics/TODO.md` and `avionics/WBS.md` updated: close every item this + plan resolves, add any newly-discovered sub-items (e.g., U6's endpoint-auth + architecture decision) as proper WBS entries. +- [ ] Root `TODO.md`/`WBS.md` cross-references updated where they index avionics + items. +- [ ] `avionics/AGENTS.md` architecture summary corrected for the actuator-bus + change (PWM references removed) and the Observer-airspeed correction. +- [ ] Final production-readiness sign-off: every board in U7's table either ships + gerbers or has its residual gap explicitly documented as deferred, with a + reason. + +**Skills / workflow gate:** Regenerate each touched board's status doc with +`kidoc` (`kidoc_scaffold.py --type hdd` or `design_review`) rather than +hand-editing prose — the scaffold's auto-run `kicad`/`emc` analyses are the +mechanism that keeps the `.md` files from drifting out of sync with the boards +again, which is exactly the failure mode `avionics/kicad/Pilot/Pilot.md`'s own +"known divergence" note (schematic vs. as-placed PCB) already shows happened +once. The final gate is `project-overseer`: run its WBS/TODO consistency check +across `avionics/TODO.md`, `avionics/WBS.md`, and root `TODO.md`/`WBS.md` to +confirm no checkbox is left unchecked once its own text says resolved (the +project's standing rule) and no item this plan closes is orphaned in one file +but not the other. + +**Dependencies:** U7 (and effectively everything else, since this is the closeout +pass). + +**Files likely touched:** `REFERENCES.md`, `avionics/TODO.md`, `avionics/WBS.md`, +root `TODO.md`, root `WBS.md`, `avionics/AGENTS.md`. + +**Estimated scope:** M. + +--- + +## Checkpoint: After Phase A (U1–U3) + +- [ ] Pilot's connector table and firmware WBS no longer reference PWM/BDSHOT for + ESC or nacelle-servo control. +- [ ] Bus topology/addressing decision is written down somewhere durable (not just + this plan) before U2/U3 implementation proceeds independently. + +## Checkpoint: After Phase B (U4–U5) + +- [ ] OSC hardware-maturity gate re-checked and its status stated plainly, whatever + it is. +- [ ] Pitot sensor is either selected-and-cited or explicitly deferred with a + reason; Pilot's stale airspeed claim is corrected either way. + +## Checkpoint: After Phase C (U6) + +- [ ] Every new authenticated bus frame type has a documented key-provisioning + path and failure-mode behavior — no "trust me, the sub-repo handles it" gaps. + +## Checkpoint: After Phase D (U7–U9) + +- [ ] Every avionics board is at 0 ERC/0 DRC-hard or has documented exceptions, + each backed by a `kicad` skill run (not raw `kicad-cli`) and, where the board + states EMC targets, an `emc` pre-compliance pass. +- [ ] `REFERENCES.md` has no fabricated or stale citations touching this plan's + scope — every new/changed entry traces to a `datasheets` extraction. +- [ ] WBS/TODO federation reflects reality — no checkbox left unchecked once its + own text says resolved (standing project rule), verified by a `project-overseer` + consistency pass, not by visual scan. + +--- + +## Risks & Dependencies + +| Risk | Impact | Mitigation | +|---|---|---| +| OpenServoCore upstream still not shippable (REF-SENSOR-015) | Blocks flight-article SG90 procurement even after integration work is done | U4 treats this as a live gate, re-checked at closeout, not assumed cleared | +| Bus topology decision (U1) made informally and not written down | U2/U3 diverge on addressing scheme, rework later | Checkpoint after Phase A explicitly requires a durable record | +| PB2-P2 unwired-header defect (Pilot, pre-existing) turns out to sit on the same net group as the new CAN-FD trunk wiring | Could compound with U1's connector-table rework | Investigate the PB2-P2 defect before or alongside U1, not after | +| Pitot sensor selection invents a part/spec to move fast | Violates root CLAUDE.md no-fabrication policy | U5 explicitly requires datasheet pull via `datasheets`/`bom` skills before REFERENCES.md entry | +| Tamper-mesh redesign (U8) requires footprint moves | `avionics/AGENTS.md` requires referring footprint repositioning to the user | U8 acceptance criterion calls this out explicitly | + +## Definition of Done + +- All nine units' acceptance criteria checked. +- All four phase checkpoints passed. +- Every board in the U7 table ships gerbers or has a documented, reasoned + deferral. +- No PWM references remain in any document describing ESC or nacelle-tilt-servo + control paths. +- Observer supports the pitot-tube airspeed sensor; Pilot's stale claim is gone. +- `REFERENCES.md`, `avionics/TODO.md`, `avionics/WBS.md`, and root `TODO.md`/`WBS.md` + all reflect the closed state — no stale checkboxes. +- Every authenticated endpoint class introduced by this plan (ESC, nacelle tilt + servo, SG90) has a `secure-controller-assurance` control mapping on record, not + an assumed-authenticated note. +- Every board shipping gerbers has a `kicad`-skill analyzer report and, where + the board states EMC targets, an `emc`-skill pre-compliance pass on record — + see the Skills & Workflow Map above. + +## Sources & Research + +- `avionics/AGENTS.md`, `avionics/TODO.md`, `avionics/WBS.md` (current open-item state) +- `avionics/kicad/Pilot/Pilot.md` (connector table, EMC targets, PB2-P2 defect) +- `avionics/kicad/Observer/Observer.md` (architecture, MCU peripheral allocation, no pitot found) +- `avionics/firmware/WBS.md` §4.2, §"Cargo control" (current PWM/BDSHOT governor scope, SG90 state machine) +- `REFERENCES.md` REF-SENSOR-013/014/015 (servo fleet citations, LibreServo v2→v4 staleness, OSC maturity flag) +- `docs/POWER_DISTRIBUTION.md`, `avionics/kicad/FlightEngineer/FlightEngineer.md` (power budget rows for ESC/servo) +- `LibreServo_v4/README.md`, `Open-Secure-ESC/README.md`, `open-servo-core-secure/README.md` (backend protocol confirmation) +- Repo-wide grep confirming no existing pitot/airspeed/MS4525/SDP3 references anywhere in the codebase diff --git a/docs/plans/2026-08-25-002-finish-airframe-components-plan.md b/docs/plans/2026-08-25-002-finish-airframe-components-plan.md new file mode 100644 index 00000000..f9a66df1 --- /dev/null +++ b/docs/plans/2026-08-25-002-finish-airframe-components-plan.md @@ -0,0 +1,609 @@ +--- +title: "plan: Finish remaining airframe components (Phase 5 first flight, then Phase 6/7/9/11)" +date: 2026-08-25 +plan_type: feature+fix +execution: geometry+hardware +--- + +# plan: Finish remaining airframe components + +**Target repo:** Serenity-UAV (this repo) +**Scope:** `airframe/` (fuselage, wings, nacelles, landing gear) STL/SCAD geometry +and the physical hardware it carries. Organized by build phase per +`docs/FIRST_FLIGHT_READINESS.md`'s own framing: **Phase 5 = "Minimum Viable +Flyer," the first-flight gate** (4-node VTOL hover, no cargo winch fitted, no +Observer vision, no rear EDF); Phase 6 = remaining avionics nodes + Observer +vision; Phase 7 = cargo mission equipment; Phase 9 = flight-test tuning +(mostly non-geometry); Phase 11 = full system with rear EDF. + +*"I aim to misbehave." — Malcolm Reynolds* + +--- + +## Summary + +This plan closes out the airframe geometry work still open after this +session's wing-root/thwart/LG-25/FreeCAD-tilt fixes. It was assembled from a +fresh audit (not from `docs/FIRST_FLIGHT_READINESS.md`, which is explicitly +self-disclaimed stale for the nacelle mechanism — it still describes the +deleted gear-train, pre-dates the Rev T pushrod redesign, and was never +regenerated) cross-referenced against the actual STL files on disk, the BOM, +and what `airframe/FreeCAD-scripts/serenity_assembly.py` actually imports. + +Two findings drive the owner's explicit direction for this plan: + +1. **Cargo doors and their closing mechanism are a first-flight item**, not a + Phase 7 item — the winch/cargo-handling *equipment* is Phase 7, but the + airframe needs a way to close the cargo bay opening regardless of whether + the winch is fitted, and the doors on disk were fit to the pre-CARGO-01/02 + Rev-O belly shape, before this session's wing-spar/shell rework. +2. **The canonical forward cargo door is currently unresolved geometry, not a + feature** — Serenity's canon front cargo ramp (`docs/references/ + The_Official_Serenity_Blueprints_Reference_Pack.pdf`, Sheet One "Detail of + Cargo Ramp" / Sheet Five ventral view) has no working equivalent in this + 24 in build and isn't meant to get one (the belly winch hatch is the real + cargo access). It must be closed off as a fixed, non-opening, correctly- + shaped exterior panel so the hull reads as canonical Serenity from + outside — not left as whatever the current geometry happens to do there. + +## Problem Frame + +Three independent audits this session (STL-existence cross-check against +`serenity_assembly.py` and the BOM; a direct geometric probe of the skid-rod +bores; and a re-read of `docs/LANDING_GEAR_ANALYSIS.md`/`airframe/fuselage- +mid/WBS.md`) surfaced the following open items with real geometry +consequences, none of which are reflected as closed in `TODO.md`/`WBS.md`: + +- **Nozzle tilt-drive linkage has no STL.** The petals are supposed to be + passively driven by nacelle tilt (`AGENTS.md` "Nacelle Nozzle Drive"), but + the only SCAD for it (`nacelle_nozzle_pushrod.scad`) implements the + spar-clamp-crank design that its own WBS.md entry says cannot work (the + spar is keyed to the nacelle, so a crank on it shares the ring's rotating + frame — zero relative motion). The replacement ("wing-referenced sync gear + + geared bellcrank") is only a first-pass analysis overlay in + `port_tilt_spar_assembly.scad` §6, an admittedly unsolved spatial RSSR + linkage. Nothing renders to STL. +- **Cargo clamshell doors are fit to stale geometry.** `cargo_door_port.stl` + / `cargo_door_stbd.stl` exist and are wired into the BOM, but + `airframe/fuselage-mid/WBS.md` line 694 ("Clamshell door halves") is still + open — they were generated by `generate_cargo_doors.py` against the + Rev-O belly shape, which predates this session's CARGO-01/CARGO-02 shell + re-cut (bearing seat, thwarts) entirely. The closing mechanism (hinge + retention exists; latch/release servo bracket exists) has an open + sub-item too: "Add SG90 bell-crank boss to inner face of each door panel." +- **The canonical forward cargo ramp has no resolved treatment.** Owner + confirmed (2026-08-09, `docs/LANDING_GEAR_ANALYSIS.md`) the hull already + carries "the rectangular canonical cargo door in the center" as a named + geometric feature of the lower-front cargo section, used as a siting + reference for the landing-gear sponsons. What it does NOT have is a + resolved, canon-correct, sealed exterior treatment — the current geometry + there was never verified against the actual ramp shape in the blueprint + reference, and per owner direction it must be a fixed fairing, not a + functional door. +- **Inara/River avionics access covers are stale and unwired.** + `inara_access_cover.stl` / `river_access_cover.stl` exist but are dated + July 12 — before the Rev S2/S3 dorsal-boss repositioning + (`merge_cargo_interior.py` `INARA_X`/`INARA_Y`). No `.scad` source exists + for either (violates this repo's SCAD-sourced-part convention). Neither is + referenced in `serenity_assembly.py` or the BOM. `airframe/fuselage-mid/ + WBS.md` line 726 is still open and explicitly calls for a rebuild. +- **Rear skid-rod bores are correctly rendered, but the reinforcement they + carry is not verified for the load case that matters.** Direct probe of + the published `middle_shell24_2mm_repaired.stl` / `rear_shell24_2mm_ + repaired.stl` confirms a clean 2.09 mm bore radius (spec: 4 mm rod + 0.1 + mm/side) continuously present at both skid stations across the full 60 mm + joint span — **not a missing-STL gap**. But `docs/structural_analysis.md` + §6.2 only analyzes a symmetric, flat 2.5 g landing (load split evenly + across both skids), under which the rod itself already fails in pure + bending (FOS 0.40–0.58) — the analysis falls back to an unverified + "PETG skin carries 99.8% of stiffness" argument, checked only in tension + (FOS 205), and no analysis anywhere covers an asymmetric/nose-high strike, + which would load the skid differently and is exactly the scenario these + skids are positioned to take first. +- **TODO.md/WBS.md carry a working set of stale entries** from before the + Blender-hollowing pipeline replaced the SCAD-only one (bare `head_shell24. + stl`/`cargo_sect_shell24.stl` names, "Cargo gondola shell," "Regenerate + cargo_sect_shell24.stl") — the canonical files already exist under + different names and are already wired in. These need reconciling, not + reimplementing, but left unreconciled they will keep resurfacing as false + "missing STL" findings in future audits (as several already did this + session before being run down). + +## Requirements + +- **R1** — The tilt-to-nozzle drive is redesigned as a buildable, printable + mechanism (or the wing-referenced sync-gear+bellcrank concept is proven out + and rendered to STL), verified to sweep the documented 0°→90° tilt to + 0°→23.75° ring range without binding, and wired into + `serenity_assembly.py`. +- **R2** — Both cargo clamshell doors are regenerated (or re-fit) against the + current, post-CARGO-01/02 cargo shell, with a working hinge + latch/release + mechanism (SG90 bell-crank boss included), verified to close flush and + clear the winch/interior geometry through their full swing. +- **R3** — The canonical forward cargo ramp location is sealed as a fixed, + non-opening exterior panel whose outer surface is shaped to read as the + real ship's cargo ramp from outside, sourced from + `docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf` + (Sheet One/Five) per this repo's no-fabricated-geometry rule — not + invented from memory of the show. +- **R4** — `inara_access_cover.scad` / `river_access_cover.scad` (or one + parametric file) are authored against current bay geometry, exported, and + wired into `serenity_assembly.py` and the BOM. +- **R5** — The skid-rod reinforcement is re-verified (or redesigned) against + a nose-high/asymmetric landing case, not just the existing symmetric 2.5 g + case, with the PETG-skin-stiffness claim checked against actual current + shell geometry rather than the existing approximate box-shell hand-calc. +- **R6** — Stale airframe TODO.md/WBS.md entries identified in this plan (and + any others found while executing it) are reconciled: closed in the owning + subsystem WBS.md with a dated note, then deleted from TODO.md, per this + repo's own standing convention. +- **R7** — Phase 6/7/9/11 follow-on geometry work is captured as scoped, + ordered units so it doesn't block Phase 5 but also doesn't get lost (see + Phase 6/7/9/11 sections below) — these are captured at the depth this + session's audit actually reached, not re-derived from scratch. + +## Key Technical Decisions + +**KTD1 — The forward cargo ramp is sealed, not built.** *(owner-directed, +this plan)* The 24 in build's real cargo access is the belly winch hatch; the +canon front ramp is not going to be a working mechanism on this airframe. It +gets a fixed fairing matching the closed-ramp exterior silhouette from the +blueprint reference. Do not scope a functional front ramp under this +decision — that would be a different, much larger plan than what was asked +for. + +**KTD2 — Cargo doors are first-flight scope; the winch mechanism they seal +against is not.** The doors themselves (hull closure, aerodynamic fairing, +flight safety) gate Phase 5. The internal winch/cradle/cargo-handling +hardware they were originally sized around is Phase 7 per +`docs/FIRST_FLIGHT_READINESS.md`'s own framing (cargo = Phase 7, not a +first-flight gate) and is unaffected by this decision — the doors must close +and seal the bay whether or not the winch is installed yet. + +**KTD3 — Nozzle drive gets a fresh design pass, not a repair of the existing +SCAD.** The existing `nacelle_nozzle_pushrod.scad` implements a design +already proven not to work (zero relative motion). Patching it is not an +option; U3 below starts from the kinematic requirement (0–90° tilt → +0–23.75° ring, RSSR-class spatial linkage) and the wing-referenced +sync-gear+bellcrank concept already sketched in `port_tilt_spar_assembly. +scad` §6, not from the pushrod file. + +**KTD4 — Skid reinforcement gets re-analyzed before it gets redesigned.** +Do not assume the existing rod/bore is inadequate and jump to a redesign; +`structural_analysis.md` §6.2's own numbers may or may not survive an actual +nose-high load case once computed properly. U5 computes the case first. + +## Implementation Units — Phase 5 (First Flight) + +### U1. Re-fit cargo clamshell doors to current shell geometry + +**Goal:** Regenerate `cargo_door_port.stl`/`cargo_door_stbd.stl` against the +current (post-U3/U4 wing-repair-plan) cargo shell, confirm hinge + latch fit. + +**Files:** +- `airframe/blender-scripts/generate_cargo_doors.py` (or current equivalent — + confirm exact generator at implementation time; WBS.md cites this by name + but the file may have moved during the Blender-pipeline migration) +- `airframe/stls/fuselage/cargo/cargo_door_port.stl`, `cargo_door_stbd.stl` +- `airframe/stls/fuselage/cargo/cargo_hinge_retention.stl` (hinge; verify fit + only, likely unchanged) +- `airframe/stls/fuselage/cargo/cargo_door_servo_bracket.stl`, + `cargo_release_servo_bracket.stl` (latch/release; add the open SG90 + bell-crank boss sub-item here) +- `current-specification/bom_revS.csv` (PRINT-CARGO-DOOR-* rows) + +**Approach:** +1. Confirm exactly what changed in the belly surface since Rev-O (this + session's U3 bearing-seat re-cut touched the wing-spar wall region, not + the belly aperture directly — verify whether the doors are actually + mis-fit or just unverified-since; do not assume without measuring). +2. Regenerate both door STLs from the current published cargo shell. +3. Add the SG90 bell-crank boss to each door panel's inner face. +4. Verify: doors close flush against the frame lip, swing to 180° without + fouling the winch/cradle envelope or the wing-root structure, hinge pin + bore (3.15 mm) still aligns with `cargo_hinge_retention.stl`. + +**Verification:** `tools/validate_stls.py` passes on both doors; +a trimesh-based clearance check (new or reused from `landing_gear_wing_ +clearance.py`'s pattern) confirms 0 mm³ overlap between the door swing +envelope and interior structure through the full 0°→180° sweep. + +--- + +### U2. Seal the canonical forward cargo ramp + +**Goal:** Close the forward cargo-ramp location as a fixed, canon-correct +exterior fairing. + +**Files:** +- `docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf` + (Sheet One "Detail of Cargo Ramp," Sheet Five ventral plan — read at full + resolution for this unit; the pack's own summary pages are thumbnail-only) +- The cargo shell's fore-lower region (confirm exact SCAD/Blender source at + implementation time — `docs/LANDING_GEAR_ANALYSIS.md`'s "rectangular + canonical cargo door in the center" note is the geometric anchor) +- `REFERENCES.md` (this reference pack should already be catalogued as + REF-CAD-003 per this session's earlier work; confirm the citation covers + Sheet One/Five specifically, or add sub-page detail) + +**Approach:** +1. **Measure first.** Determine whether the current mesh at this location is + already a sealed flat panel (as `LANDING_GEAR_ANALYSIS.md` implies) or a + genuine open void (as the owner's note for this plan states) — these + require different fixes. Use a `tools/validate_stls.py`-style watertight + check plus a direct boundary-edge count at that region; the shells + currently publish fully watertight (62/61 checked this session), so if a + void exists it is likely in an unmerged intermediate chunk + (`_export_cargo_port_root_chunk.scad`, `cargo_spar_drive.scad`) rather + than the final published STL — confirm which. +2. Read the blueprint reference sheets at full resolution (not the summary + thumbnails) for the ramp's exterior panel lines, proportions, and any + visible seam/hinge detail in the closed position. +3. Model a fixed fairing panel matching that silhouette — recessed panel + lines only, no functional hinge or latch geometry, sized to the + `LANDING_GEAR_ANALYSIS.md`-measured rectangular opening. +4. Re-merge into the cargo shell; re-verify watertight + the LG-10.4/LG-25 + clearance gates from this session still pass (this region is adjacent to + the sponson geometry those gates check). + +**Verification:** `tools/validate_stls.py` passes; `tools/landing_gear_wing_ +clearance.py` and `tools/cargo_bay_envelope.py` both still pass after the +re-merge (the fairing must not intrude on the payload envelope or the +sponson). + +--- + +### U3. Design and render the tilt-to-nozzle drive linkage + +**Goal:** A buildable, STL-rendered mechanism connecting nacelle tilt to +nozzle petal state, replacing the disproven spar-clamp-crank design. + +**Files:** +- `airframe/openscad/nacelles/nacelle_nozzle_pushrod.scad` (rewrite, not + patch — see KTD3) +- `airframe/openscad/wings/port_tilt_spar_assembly.scad` §6 (the existing + sync-gear+bellcrank analysis overlay — starting point for the kinematics, + not yet a printable part) +- `airframe/openscad/nacelles/nacelle_nozzle_iris.scad` (`unison_ring()`'s + ring-lever ear — the driven end of this linkage) +- `docs/NOZZLE_DRIVE_TRADE.md` (trade history; do not re-litigate Option A + vs B, the pushrod/bellcrank family is already the owner's chosen path) + +**Approach:** +1. Restate the kinematic requirement precisely: 0°→90° nacelle tilt (about + hull X, at the CG pivot) must drive the unison ring 0°→23.75° (about the + duct local Z), monotonically, without binding, across the full range — + this is what `serenity_assembly.py`'s `nozzle_iris_stl()` picks between + discretely today (see this session's earlier fix); U3 is what should + eventually make that continuous. +2. Solve the spatial RSSR linkage `port_tilt_spar_assembly.scad` §6 flags as + unsolved: crank radius, ball-stud 3-D positions, rod length, ring-lever + ear position — verify monotonicity and no binding across the full sweep + before committing to a printable part (a spreadsheet or script check, not + eyeballing). +3. Render the sync gear (wing-fixed) and driven pinion (nacelle-side) plus + the bellcrank/pushrod as printable parts; wire into `serenity_assembly.py` + alongside the existing EDF sleeves/nozzle iris for that side, using the + same per-side tilt rotation this session's `apply_tilt_to_rows()` already + provides. +4. Re-run `tools/wing_root_deconflict.py` and `tools/wing_spar_carrythrough.py` + to confirm the new gear/pinion doesn't reopen any clearance or bearing + finding from this session's wing-repair work. + +**Verification:** A motion-study script (new, following this repo's +measured-not-assumed convention) confirms monotonic 0–90°→0–23.75° mapping +with no binding at any sampled tilt angle; `tools/validate_stls.py` passes +on all new parts; `tools/wing_root_deconflict.py` stays CLEAR. + +**Risk:** This is the highest-uncertainty unit in the plan — a genuinely +unsolved spatial linkage synthesis, not a geometry cleanup. Budget it as its +own checkpoint; do not assume a first attempt closes it. + +--- + +### U4. Rebuild Inara/River avionics access covers + +**Goal:** Current, parametric, SCAD-sourced EMI covers for both MVP avionics +bays, wired into the assembly and BOM. + +**Files:** +- New `airframe/openscad/fuselage/inara_river_access_covers.scad` (single + parametric file per `airframe/fuselage-mid/WBS.md` line 727's own + suggestion) — or two files if the port/stbd asymmetry (GPS bore Z-offset + differs: Inara −13.3 mm, River +0.7 mm) makes one file awkward +- `airframe/blender-scripts/merge_cargo_interior.py` (`INARA_X`/`INARA_Y` + current boss positions — source of truth for cover footprint placement) +- `airframe/stls/fuselage/inara_access_cover.stl`, `river_access_cover.stl` + (regenerate, replacing the July 12 stale files) +- `airframe/FreeCAD-scripts/serenity_assembly.py` (add both to `COMPONENTS`) +- `current-specification/bom_revS.csv` (add BOM rows — currently absent) + +**Approach:** Follow `airframe/fuselage-mid/WBS.md` line 726's spec directly: +105×75 mm footprint, 5 mm shoulder lip on a 95×65 mm opening, Ø38 mm GPS +clearance bore at the stated per-bay Z offset, 4× M2 captive screws at +±40×±25 mm. Cite `FARADAY_*` parameters in `cargo_sect_shell24.scad` Rev S3 +for the opening's real current position — do not re-derive from the stale +STLs' own (wrong) placement. + +**Verification:** `tools/validate_stls.py` passes; cover footprint measured +against the current shell's boss positions shows the 4 screw bores landing +on the bosses (0 mm offset, or within a stated fastener-clearance budget). + +--- + +### U5. Nose-high skid-strike structural check + +**Goal:** Determine whether the rear skid reinforcement (rod + bore, +confirmed correctly rendered this session) survives a nose-high/asymmetric +landing, not just the existing symmetric 2.5 g case. + +**Files:** +- `docs/structural_analysis.md` §6 (extend, don't replace — the symmetric + case stays valid for its own scenario) +- `tools/wing_spar_carrythrough.py`-style new script (or extend an existing + one) to measure the current skid arm's actual PETG cross-section from the + published STL, replacing §6.2's "approx 76×23 mm²" box-shell estimate + +**Approach:** +1. Define the load case precisely before computing anything: what pitch + angle / vertical speed / mass fraction constitutes "nose-high" for this + airframe (tie to `docs/flight_envelope.md`'s existing landing-attitude + figures if any exist there; do not invent a bound without a citation). +2. Re-derive the PETG skin's actual second moment of area from the published + `rear_shell24_2mm_repaired.stl` cross-section at the skid station + (measured, not the existing "approx" estimate) — this is the load-bearing + member per §6.2's own conclusion, so it is the one that actually needs a + real number. +3. Compute the asymmetric case: full landing load reacted by one skid alone + (or whatever fraction the defined nose-high attitude actually puts on the + leading skid), check against both the rod (tension/shear) and the + re-measured skin section (bending). +4. If it fails: this becomes its own follow-up unit (skid reinforcement + redesign) — do not silently upsize the rod without re-running U5's own + numbers to confirm the new size actually closes the gap. + +**DONE 2026-08-25 — computed, and it surfaced a second, more fundamental +problem than the load case itself.** Full re-derivation in +`docs/structural_analysis.md` §6.4 (AUW basis: Phase 11, 4,273 g, per owner +direction, so this doesn't need re-deriving again at final configuration). +Summary: + +- Real geometry, corrected mass, correct allowable (see below): symmetric + flat-landing case (§6.2's own case) now shows **FOS 6.53 — PASS**, better + than believed (the old "approx 76×23mm²" cross-section was ~3× too wide; + corrected to a measured ~24×23mm). +- **Nose-high, single-skid-first case: FOS 3.27 — below this repo's 4.0 + target.** Real positive margin, not a snap failure, but short of the bar. +- **Independent finding, more consequential than the FOS number:** tracking + the skid tube's actual centerline continuously (Y=204 to 384) found the CF + rod's bore is cut through the **main horseshoe ring's own wall**, not the + discrete skid tube — a ~13–22 mm miss over the entire span where the bore + actually lives (Y 173–233, the region of maximum bending moment). The rod + is not currently mechanically coupled to the structure it's meant to + reinforce, independent of which load case is applied. Tracked as + **LG-26** (`airframe/landing-gear/WBS.md`); LG-03 closed as superseded by + it (LG-03 assumed the channel was simply missing — it exists, just in the + wrong place). +- Checked against the `3d-print-design` skill and a full re-read of + REF-MAT-001 (the tensile-allowable source first used here): it has no + flexural test of its own, only tensile/compression. A second paper the + owner supplied afterward, **REF-MAT-002** (`REFERENCES.md`), does report a + genuine ASTM D790 flexural strength for unreinforced PETG (54 MPa) — the + correct test type for this failure mode — and now supersedes the tensile + proxy above (FOS figures updated accordingly: 6.53/3.27, was + 5.85/2.93 under the proxy). Neither source provides print-orientation + data, so that caveat stands: the FOS figures remain upper bounds pending + confirmation the skid tube's bending axis sees the tested (in-plane) + direction, and a coupon of the actual tube geometry rather than a bulk bar. + +**Not fixed here — surfaced as findings for an owner decision, per this +unit's own step 4.** The natural fix order is: re-site `SKID_ROD_BORES` to +track the tube's real centerline first (LG-26) and re-run the FOS calc +before considering a rod upsize — a correctly-coupled rod may close most or +all of the 2.93→4.0 gap on its own, since the current FOS was computed with +the rod contributing nothing (it isn't touching the tube). Also still open: +whether the middle/rear print-split joint (Y≈203, a bonded splice collar, +not continuous printed material, sitting at the same station as the peak +moment) needs its own bonded-joint check — flagged, not computed. + +**Follow-up, same day — LG-26 fix applied and gap closed.** LG-26's rod +re-siting (above) was actually implemented, not just found: +`SKID_ROD_BORES` corrected in `add_structural_features.py`, both shells +regenerated and re-verified (`tools/validate_stls.py` 61/61 PASS). Re-running +§6.4 with the rod now geometrically coupled (parallel-EI split, not assumed +at 0%) found the rod's own contribution small (a solid 4 mm CF rod is too +slender to meaningfully stiffen this thin shell) — nose-high FOS moves only +3.27 → 3.47, still short of 4.0. Closing the remaining gap required a +material decision, resolved by the owner as **20% CF-PETG** (not the +initially-proposed 30% — a genuine 30%-CF retail filament could not be +verified to exist, while 20% is a real, verified commercial product; see +`REFERENCES.md` REF-MAT-002 Table 4 for the fiber-fraction flexural data, +which also shows 10% CF-PETG is *worse* than plain PETG). Final: nose-high +FOS **4.75 — PASS** at 20% CF-PETG (77 MPa / 6.67 GPa flexural). + +**Verification:** A documented FOS ≥ this repo's standard 4.0 structural +target (`docs/structural_analysis.md` §3 convention) for the defined +nose-high case, computed from measured (not approximated) current geometry +— **MET**: FOS 4.75 with the LG-26 rod fix + 20% CF-PETG skin material, both +applied (not just proposed). + +--- + +### U6. Reconcile stale airframe TODO.md/WBS.md entries + +**Goal:** Close out the bookkeeping debt this plan's own audit found, so it +doesn't keep resurfacing as false "missing" findings. + +**Approach:** For each of the following, confirm the canonical file already +exists and is wired into `serenity_assembly.py`/the BOM, then close in the +owning WBS.md with a dated note and delete from TODO.md (this repo's +standing convention, applied identically to WING-01/SPAR-01/CARGO-01/02 +earlier this session): +- `head_shell24.stl` / `cargo_sect_shell24.stl` bare-name lines (superseded + by `*_2mm_repaired.stl`) +- "Cargo gondola shell" / "Regenerate cargo_sect_shell24.stl" (superseded by + the Blender-merge pipeline) +- "Rear skid reinforcement — SCAD update (TWO files)" / "LG-03 CF rod + channel" — **do not close these until U5 confirms the reinforcement is + actually adequate**, not just present; if U5 finds a real gap, re-scope + these lines to point at U5's follow-up instead of closing them. + +**Verification:** No `[ ]` checkbox remains whose own text says resolved +(this repo's standing rule); `TODO.md` line count for `airframe/` sections +drops by exactly the reconciled items, no more, no less. + +--- + +## Phase 6 — Remaining Avionics Nodes + Observer Vision + +*(Captured at the depth this session's audit reached — not independently +re-derived. Re-verify before starting; this session's audit was airframe- +geometry-focused and did not deep-dive avionics placement.)* + +- Observer vision board mounts (nose/cargo camera bosses) — cross-check + against `docs/references/nick-henning/` and the Jayne/Observer board work + referenced in project memory; confirm current mounting geometry exists. +- "Avionics-bay interior name marks" (deferred per its own TODO.md note, + 2026-06-13) — cosmetic, low priority. +- Remaining 4 avionics nodes' mounting/access geometry — audit similarly to + U4 above (Inara/River) once those two are closed, since the same + stale-STL pattern may repeat for the other bays. + +## Phase 7 — Cargo Mission Equipment + +Six BOM rows are explicitly marked **NOT YET GENERATED** (found this +session, `current-specification/bom_revS.csv`): + +- `cargo_winch_pedestal_port.stl` (PRINT-CARGO-WINCH-PEDESTAL-PORT) +- `cargo_winch_pedestal_stbd.stl` (PRINT-CARGO-WINCH-PEDESTAL-STBD) +- `cargo_winch_spool_r2.stl` (PRINT-CARGO-WINCH-SPOOL-R2) +- `cargo_winch_pawl.stl` (PRINT-CARGO-WINCH-PAWL) +- `cargo_winch_dog_coupler.stl` (PRINT-CARGO-WINCH-DOG-COUPLER) +- `cargo_winch_fairlead.stl` (PRINT-CARGO-WINCH-FAIRLEAD) + +Each has a generator spec cited in its own BOM row (`docs/ +CARGO_WINCH_SPECIFICATION.md` Rev C, per-part section). None of these block +Phase 5 (KTD2) — the cargo doors from U1 close and seal the bay whether or +not this hardware is installed. Sequence after Phase 5 closes. Also in this +phase: "Winch pedestal M3 boss stations in cargo_sect_shell24.scad" (a shell +feature addition, do alongside the pedestal parts since they're the same +interface). + +## Phase 9 — Flight-Test Tuning + +Mostly non-geometry (thrust-stand calibration, T/W measurement, crosswind +envelope validation per `docs/flight_envelope.md`). The one airframe-geometry +item flagged this session: **VERIFY mass/CG impact of the Rev T3 flap +shingle** (+24.8 g total, +12.4 g per nacelle, all aft/outboard of the tilt +pivot) against the Rev T CG band (≈109–112 mm) and tilt-servo torque margin +— re-check once U3's linkage mass is known too, since both land in the same +CG band. + +## Phase 11 — Full System (Rear EDF) + +Explicitly out of scope for Phase 5 (KTD2's framing extends here too). Known +open items, not scoped further by this plan: + +- Aft EDF intake scoop cuts (4 radial cuts for 120 mm EDF) in the middle + section's inner neck +- `neck_intake_frame.stl`, `aft_edf_plenum.stl` +- Rear nozzle petal parts (the old Rev R1 axial-hinge design is archived; + no Rev-T-equivalent rear nozzle exists yet — confirm whether the rear EDF + even uses a variable nozzle or a fixed elliptical exit per the BOM's + PIN-3X18 note "Rear nozzle is the fixed canonical elliptical exit (no + petals)," which would mean no work is needed here at all — resolve this + contradiction before scoping) +- Dual-EDF nacelle pod upgrade (`nacelle_pod_dual_80mm.stl`, + `docs/PHASED_BUILD_GUIDE.md` line 147 calls this "Phase 7 fit" — a + numbering conflict with this plan's Phase 11 framing for rear-EDF work; + reconcile which document's phase numbering is current before scheduling) + +## Scope Boundaries + +**In scope:** Phase 5 units U1–U6 (full implementation); Phase 6/7/9/11 +(capture and light triage only, not implementation, per the owner's request +for a plan covering "the rest of the airframe components"). + +**Deferred to follow-up work (not this plan):** +- Actually implementing any Phase 6/7/9/11 unit — those sections exist so + the work isn't lost, not as a commitment to build them now. +- CF-PETG bearing/bending coupon testing (already tracked, root `TODO.md` + §0.8/§1.1.4) — independent of this plan's geometry work. +- U3's linkage design, if it proves genuinely unsolvable as a passive + mechanism within the available envelope, may surface a need to revisit + whether the nozzle should be actively (servo) driven instead of passively + tilt-coupled — that would be a KTD-level decision for the owner, not a + unilateral pivot inside U3. + +**Out of scope / not this plan's decision:** +- Any change to the belly winch hatch's role as primary cargo access (KTD1 + assumes it stays primary). +- Rear EDF variable-nozzle-vs-fixed-exit resolution (Phase 11 item above) — + flagged as a contradiction to resolve, not resolved here. + +## Risks & Dependencies + +- **U3 (nozzle drive linkage) is the plan's highest-risk unit** — a genuinely + unsolved spatial linkage, not a cleanup. If it doesn't close cleanly, it + could cascade into re-opening whether Rev T's pushrod/bellcrank family is + viable at all, which would be a real trade-study reopening, not a small + patch. +- **U2 (forward ramp seal) depends on locating full-resolution blueprint + imagery.** The reference pack's own summary pages are thumbnails; if the + full-resolution sheets aren't extractable at useful detail, the panel-line + fidelity target in R3 may need to relax to "correct proportions and + location," not "matches published line art exactly." +- **U5 (skid nose-high check) may find the existing reinforcement genuinely + inadequate**, which would open a redesign not currently scoped in detail + (see Scope Boundaries). Flag to the owner immediately if so, rather than + silently upsizing. +- **U1 and U2 share the same cargo-shell region** (belly doors are aft of + the forward ramp panel, per `LANDING_GEAR_ANALYSIS.md`'s station table) — + sequence U2 before U1's final re-verification pass so U1's clearance gates + run against the final, ramp-sealed shell, not an intermediate one. + +## Verification Contract + +- `tools/validate_stls.py` — PASS on every new/regenerated STL (U1, U2, U3, + U4) +- `tools/cargo_bay_envelope.py` — PASS after U1/U2 (payload envelope + unaffected by the door re-fit or the ramp seal) +- `tools/landing_gear_wing_clearance.py --proud` — CLEAR, 4/4, after U2 + (ramp seal is adjacent to the sponson region this gate checks) +- `tools/wing_root_deconflict.py`, `tools/wing_spar_carrythrough.py` — CLEAR + / FOS targets met, after U3 (new gear/pinion must not reopen this + session's wing-repair findings) +- A documented FOS ≥ 4.0 for the U5 nose-high case, or an explicit, + owner-flagged blocker if it cannot be met with the current rod/bore + +## Definition of Done + +- Phase 5 (U1–U6) fully implemented, verified, and closed out in + `airframe/fuselage-mid/WBS.md`, `airframe/wings-nacelles/WBS.md`, and root + `WBS.md`/`TODO.md` per this repo's convention. +- Phase 6/7/9/11 sections reviewed by the owner and either accepted as + future-work capture or corrected/expanded before this plan is filed as + closed. +- No `[ ]` TODO.md line remains for any item this plan's audit found already + done (U6). +- Every Verification Contract gate above passes against final, published + geometry — not against source scripts alone. + +## Sources & Research + +- This session's own findings (2026-08-25): U4/U8 wing-repair-plan closeout, + LG-25 fix, FreeCAD tilt-config + nozzle-petal-state wiring, mesh-defect + repair (sleeve/fin STLs), and this plan's own fresh Phase-5 audit. +- `docs/FIRST_FLIGHT_READINESS.md` — used only for its Phase framing + ("First flight = Phase 5"); explicitly NOT used for its Phase 2/3 part + lists, which it self-disclaims as describing the deleted gear-train + mechanism. +- `airframe/fuselage-mid/WBS.md`, `docs/LANDING_GEAR_ANALYSIS.md`, + `docs/structural_analysis.md` §6, `current-specification/bom_revS.csv`, + `airframe/FreeCAD-scripts/serenity_assembly.py` — cross-referenced + directly, not summarized from memory. +- `docs/references/The_Official_Serenity_Blueprints_Reference_Pack.pdf` — + read at summary/thumbnail resolution for this plan (pages 1–20, the + pack's own overview); U2's implementer must re-read Sheet One/Five at full + resolution before cutting any geometry, per `AGENTS.md` §4's + no-fabricated-reference rule. diff --git a/docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md b/docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md new file mode 100644 index 00000000..c0212d91 --- /dev/null +++ b/docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md @@ -0,0 +1,579 @@ +--- +title: "plan: EMI/RF Design and Test Plan (gate-driven, whole-project lifecycle)" +date: 2026-08-25 +plan_type: feat +execution: docs+process +--- + +# plan: EMI/RF Design and Test Plan + +**Target repo:** Serenity-UAV (this repo) +**Scope:** A phased EMI/RF design-and-test process spanning schematic capture, +PCB layout, mechanical integration, and flight test — for every RF system +(telemetry/C2 links, GPS, FPV/vision, Wi-Fi) and every EMI-sensitive or +EMI-generating subsystem (avionics capes, AK7455 tilt encoder, OPTIGA Trust M, +EDF motor drives/ESCs, switching BECs, servo PWM). This plan does **not** +redesign hardware — it defines *when* EMI/RF analysis happens, *what* gets +checked at each gate, *which* standards apply, and *what* the pass/fail +criteria and deliverables are. Hardware fixes surfaced by running this plan's +gates land in the existing `avionics/emi-hardening/WBS.md` §1.4 checklist, not +here. + +*"We're just too far out. I can't hail 'em." — Wash, on comms range* / +*"We are just too old and busted for that trick." — Kaylee, on the plan not +duplicating existing hardening work* + +--- + +## Summary + +The repo already has real EMI/RF infrastructure: a documented 500 W/m² +(≈434 V/m) design objective that exceeds MIL-STD-461G RS103 +[REF-NIST-002 §6.2.5], RE102/CE102 limits applied to Pilot/XO/Flight Engineer +[REF-MIL-002], FCC Part 15 band citations for all four external radios +[REF-FCC-001, REF-FCC-002, REF-FCC-003], IEC 61000-4-2/4/5 immunity targets +[REF-IEC-003, REF-IEC-004, REF-IEC-005], a 0.20 mm copper-to-edge design floor +[IPC-2221 §4], and a hardware task list in `avionics/emi-hardening/WBS.md` +§1.4 (Faraday enclosures, chokes, antenna placement). What's missing is a +**process**: EMI/RF issues are currently found late (e.g. the IEC 62368-1 +isolation-mesh violations in `avionics/emi-hardening/WBS.md` §0.6 were only +caught by a DRC run after layout was largely complete) and there is no +standing schedule of design-review gates that re-checks EMI/RF risk as the +design changes. + +This plan creates that process: a new standing document, +`avionics/emi-hardening/EMI_RF_TEST_PLAN.md`, defining gates from component +selection through post-flight-test closeout, each with required +analyses/tools (including the repo's own `emc` skill), pass/fail criteria, +and a deliverable. Per the owner's direction, MIL-STD-461G stays a **design-to** +standard verified by bench self-test — no accredited-lab qualification is +scoped here (matches the existing "qualification testing deferred" posture in +[REF-MIL-002]). + +## Problem Frame + +- **Requirement source:** root `AGENTS.md` §1 "EMI hardening: design objective + is correct operation in a 500 W/m² RF field" is a non-negotiable, and + `avionics/AGENTS.md` requires every radio link to be regulation-compliant + and every board to meet MIL-STD-461G RE102/CE102 targets. Neither document + says *when in the build process* these get verified. +- **Evidence of the gap:** `avionics/emi-hardening/WBS.md` §0.6 shows IEC + 62368-1 isolation-mesh clearance violations (down to 0.0 mm — direct + contact — between `TMESH_P/N` and isolated ground domains) discovered by a + DRC run well after Pilot/XO layout was substantially complete, requiring + layout rework referred back to the user. This is the class of finding an + earlier gate should catch before routing is 80% done. +- **Scope-defining decisions** (both confirmed by the project owner this + session — see Requirements Traceability): + 1. MIL-STD-461G stays **design-to / self-test**, not accredited + qualification. + 2. This plan is a **new standalone document** with WBS/TODO hooks, not an + in-place expansion of `avionics/emi-hardening/WBS.md`. +- **Non-goal:** re-deriving or re-justifying the 500 W/m² design objective, or + redesigning any specific circuit. Those live in `avionics/AGENTS.md` and + `avionics/emi-hardening/WBS.md` respectively. + +## Requirements Traceability + +| ID | Requirement | Source | +|---|---|---| +| R1 | EMI/RF risk must be checked at component-selection/schematic time, before layout is committed | User request; gap evidenced by §0.6 late-catch | +| R2 | Every RF system (telemetry/C2, GPS, FPV/vision, Wi-Fi) gets a link/coexistence review | User request; `avionics/AGENTS.md` external comms list | +| R3 | Every EMI-sensitive subsystem (AK7455 tilt encoder, OPTIGA Trust M, avionics capes) gets a susceptibility review relative to on-airframe noise sources | User request | +| R4 | Every high-noise source (EDF motor drives/ESCs, switching BECs, servo PWM) gets an emissions review | User request | +| R5 | Shielding/grounding/filtering strategy is defined and checked, not just aspirational | User request; existing Faraday-enclosure tasks in §1.4.1 | +| R6 | Gates continue through PCB layout, mechanical integration, and flight test — not a single end-of-project test | User request | +| R7 | The repo's `emc` skill is invoked at defined gates as a tool, with its scope and limits stated | User request | +| R8 | Applicable standards are vetted per root `AGENTS.md` §"Standards Vetting Policy" — FCC Part 15, CISPR 32/25 where applicable, MIL-STD-461G at design-to rigor (KTD1) | User request; `docs/attribution_and_licensing.md` policy | +| R9 | The plan integrates with existing governance — `AGENTS.md`, `WBS.md`, `TODO.md` — rather than existing as an orphan document | Root `CLAUDE.md`/`AGENTS.md` governance federation requirement | + +## Key Technical Decisions + +**KTD1 — MIL-STD-461G rigor: design-to + bench self-test, not accredited qualification.** +*(session-settled: user-directed — chosen over "plan toward accredited +qualification": matches the existing REFERENCES.md posture that qualification +testing is deferred pending airframe integration, and avoids scoping lab cost +this plan cannot commit the project to.)* Gates in this plan verify RE102/ +CE102/RS103-*equivalent* margins using bench instruments (spectrum analyzer, +near-field H/E probes, a TEM cell or GTEM if available, and the `emc` skill's +analytical models) against the MIL-STD-461G *limit lines* as design targets. +No test happens at an accredited EMC lab under this plan. If the owner later +wants a qualification data package (e.g. for a customer or airworthiness +approval), that is a new, separate plan. + +**KTD2 — New standalone document, not an in-place WBS.md expansion.** +*(session-settled: user-directed — chosen over folding gates into +`avionics/emi-hardening/WBS.md` directly: keeps the repeatable *process* +document separate from the one-time hardware task checklist, so the process +survives after §1.4's tasks are checked off.)* The new document is +`avionics/emi-hardening/EMI_RF_TEST_PLAN.md` (co-located with the existing +`avionics/emi-hardening/WBS.md`/`TODO.md` detail pair, same directory, +same license/authorship header convention). Root `WBS.md` and `TODO.md` get +short pointer entries into it, matching the existing `→ detail:` convention +used for `avionics/emi-hardening/WBS.md` §1.4. + +**KTD3 — Gate numbering follows the project's existing Phase0–Phase12 build +phases**, not an independent numbering scheme, so a reader already oriented +by root `WBS.md` §3.0 "Physical Build" can place each EMI/RF gate against a +build milestone they already know (Phase0 print/CF-cut, Phase1 hull +structure, Phase2 nacelle assembly, Phase5 first flight, etc.) rather than +learning a second phase vocabulary. + +**KTD4 — The `emc` skill is scoped honestly as a risk-reducer, not a +compliance oracle.** Its own SKILL.md states "~70% of common EMC design +mistakes... cannot guarantee FCC/CISPR compliance." Every gate that invokes it +records that scope limit alongside the result, so a clean `emc` run is never +mistaken for a pass/fail compliance determination. + +--- + +## Standards Applicability Matrix + +| Standard | Applies to | Applicability call | Reference | +|---|---|---|---| +| FCC Part 15 §15.235 (49 MHz) | Commo transceiver | Mandatory — unlicensed intentional radiator, requires eventual FCC cert (§2.803/§15.19) before any transmission off a test bench | [REF-FCC-003] | +| FCC Part 15 §15.247 (915 MHz SiK, 2.4 GHz Zigbee) | XO radios | Mandatory | [REF-FCC-001] | +| FCC Part 15 Subpart E §15.407 (5 GHz Wi-Fi) | XO Wi-Fi (WL1837MOD) | Mandatory | [REF-FCC-002] | +| FCC Part 15 Subpart B (unintentional radiators) | Every digital board (Pilot, XO, Flight Engineer, Observer, Commo digital section) | Applicable — Class B limits are the relevant civilian baseline for a small UAV; used here as the *unintentional-emissions* pre-compliance target the `emc` skill's FCC Part 15 model checks against | New — add to REFERENCES.md (§ Workflow Note below) | +| CISPR 32 | Same boards, as the international-harmonized equivalent of FCC Part 15B | Informational cross-check only — no dual-market compliance program is in scope; the `emc` skill already supports it, so it's free to note where CISPR 32 Class B would be tighter than FCC Class B | New — add to REFERENCES.md | +| CISPR 25 (automotive-grade conducted/radiated) | Not applicable as a compliance target | Referenced only as a *design stress-test*: CISPR 25's tighter conducted-emission limits on switching regulators are a useful design margin check for the EDF ESC/BEC noise sources, given the 500 W/m² objective already exceeds civilian norms | New — add to REFERENCES.md, marked "design margin reference only" | +| MIL-STD-461G RE102/CE102/RS103 | Pilot, XO, Flight Engineer (per existing REFERENCES.md scope) | Design-to + bench self-test per KTD1 | [REF-MIL-002] | +| IEC 61000-4-2/4/5 (ESD/EFT/Surge immunity) | All boards, connectors | Design-to, Level 4 target already recorded | [REF-IEC-003, REF-IEC-004, REF-IEC-005] | +| IEC 62368-1 Annex G (creepage/clearance) | Isolation domains (CAN/RS-485/Ethernet galvanic isolation, tamper mesh) | Mandatory, currently **failing** per §0.6 — Gate 2 (below) re-verifies after each layout rework | [REF-IEC-001] | +| IPC-2221 §4 (EMI/RFI PCB design rules) | All board stackups/edge clearance | Mandatory, 0.20 mm floor already set | Cited in REFERENCES.md line 843 area | + +**Workflow note (Standards Vetting Policy compliance):** FCC Part 15 Subpart B +and CISPR 32 are cited above as *newly applicable* to this plan's Gate 3/4/6 +unintentional-emissions checks but do not yet have REF-IDs in +`REFERENCES.md`. Per root `AGENTS.md` §4 and `CLAUDE.md` Standards Vetting +Policy, Implementation Unit U1 adds them with validated URLs and specific +section citations before any gate cites them by REF-ID. Do not invoke a +REF-ID for these until U1 lands. + +--- + +## High-Level Technical Design + +```mermaid +flowchart TD + G1["Gate 1 — Component/Schematic Selection\n(pre-layout)"] --> G2["Gate 2 — Schematic Review\n(EMC skill, pre-DRC)"] + G2 --> G3["Gate 3 — PCB Layout Review\n(EMC skill, post-route)"] + G3 --> G4["Gate 4 — Pre-Fab Sign-off\n(re-run EMC + DRC/ERC)"] + G4 --> G5["Gate 5 — Bench Bring-up\n(near-field probe survey per board)"] + G5 --> G6["Gate 6 — Mechanical Integration\n(Faraday enclosures, cable routing, bonding)"] + G6 --> G7["Gate 7 — Ground/Range RF Test\n(link margin, coexistence, spectrum survey)"] + G7 --> G8["Gate 8 — Flight Test EMI/RF Validation\n(Phase5 first flight onward)"] + G8 --> G9["Gate 9 — Post-Flight-Test Closeout\n(as-built EMI/RF record)"] + + style G1 fill:#2b6cb0,color:#fff + style G2 fill:#2b6cb0,color:#fff + style G3 fill:#2b6cb0,color:#fff + style G4 fill:#805ad5,color:#fff + style G5 fill:#805ad5,color:#fff + style G6 fill:#c05621,color:#fff + style G7 fill:#c05621,color:#fff + style G8 fill:#38a169,color:#fff + style G9 fill:#38a169,color:#fff +``` + +Color grouping: blue = design-time (schematic/layout), purple = per-board +bench verification, orange = integration/range, green = flight/closeout — +matching the "as early as possible, then follow up throughout" requirement: +the earliest gates are cheapest to act on (a schematic change), the latest +are the most expensive to discover a problem at (a flight anomaly). + +--- + +## Output Structure + +``` +avionics/emi-hardening/ +├── AGENTS.md (new — pointer stub, see U5) +├── EMI_RF_TEST_PLAN.md (new — this plan's primary deliverable, U2-U4) +├── WBS.md (existing — hardware task detail, unchanged in structure) +└── TODO.md (existing — compact index, gets new pointer line, U6) +``` + +--- + +## Scope Boundaries + +**In scope:** +- The gate definitions, required analyses, tools, pass/fail criteria, and + deliverables for Gates 1–9 above. +- REFERENCES.md additions for FCC Part 15B and CISPR 32 (as design-margin + references) needed to cite them honestly in the gates. +- WBS.md/TODO.md pointer entries so the plan is discoverable from root + governance. +- Defining *what* the `emc` skill checks at each applicable gate and what its + output does and does not prove. + +**Out of scope (do here, not deferred — these are existing WBS items the +gates will re-use, not redo):** +- Actually fixing the §0.6 isolation-mesh violations — that's existing + `avionics/emi-hardening/WBS.md` §0.6 work; Gate 2/3 of this plan re-runs + verification against it, doesn't perform the fix. +- Building the Faraday enclosures — existing §1.4.1 hardware task. +- Redesigning any filter, choke, or PDN — existing hardware work this plan's + gates flag, not implement. + +### Deferred to Follow-Up Work +- **Accredited MIL-STD-461G qualification test package** — explicitly + deferred by KTD1; would be a separate plan if/when the owner decides to + pursue it. +- **FCC equipment certification filing (TCB submission)** for the 49 MHz + Commo link — Gate 7/8 verify the link meets §15.235 emission limits on + bench/range instruments, but the actual TCB certification paperwork is + root `WBS.md` §5.1 territory, not this plan's. +- **A dedicated RF anechoic/OATS test campaign** — Gate 7 uses an open-area + ground range with a calibrated antenna and spectrum analyzer as a + practical stand-in; a formal OATS/chamber campaign is deferred with + accredited qualification. + +--- + +## Implementation Units + +### U1. Standards Vetting — Add FCC Part 15 Subpart B and CISPR 32 to REFERENCES.md + +**Goal:** Close the Standards Vetting Policy gap identified above before any +gate cites these standards by REF-ID. + +**Requirements:** R8 + +**Dependencies:** None + +**Files:** +- `REFERENCES.md` — add `REF-FCC-005: 47 CFR Part 15 Subpart B — Unintentional Radiators` (or next unused REF-FCC number) with validated URL (ecfr.gov), the specific §15.109 (radiated) / §15.107 (conducted) Class B limit tables applied, and a note distinguishing it from the existing intentional-radiator REF-FCC-001/002/003 entries. +- `REFERENCES.md` — add `REF-CISPR-001: CISPR 32:2015 — Electromagnetic compatibility of multimedia equipment` with validated URL/access note (IEC webstore listing at minimum, since CISPR standards are not free), explicitly marked "design-margin reference only, not a compliance target" per the Standards Applicability Matrix above. + +**Approach:** +1. Look up the current FCC Part 15 Subpart B section numbers on ecfr.gov (§15.107, §15.109) — do not guess; if a section can't be verified, mark "requires verification" and add a TODO item per root `CLAUDE.md` Workflow Notes. +2. Add both entries following the exact table format of adjacent `REF-FCC-*` entries (Issuing authority / Edition / Official URL / applied sections table). +3. Update the REFERENCES.md table of contents entries for both new REF-IDs. + +**Patterns to follow:** Existing `REF-FCC-001`/`REF-FCC-002`/`REF-FCC-003` entries (REFERENCES.md lines ~300–410) for table shape and citation granularity. + +**Test scenarios:** +- Test expectation: none — documentation-only unit; verification is that both REF-IDs resolve to a validated URL and a specific section citation, not a placeholder. + +**Verification:** Both REF-IDs appear in REFERENCES.md's table of contents and body with a real URL and specific section/edition; no "TBD" or fabricated section number. + +--- + +### U2. Author `avionics/emi-hardening/EMI_RF_TEST_PLAN.md` — Gates 1–4 (Design-Time) + +**Goal:** Write the design-time portion of the standing test-plan document: +Gate 1 (component/schematic selection) through Gate 4 (pre-fab sign-off). +These are the gates that directly satisfy "catch issues as early as possible." + +**Requirements:** R1, R2, R3, R4, R5, R7, R9; governed by KTD1–KTD4 + +**Dependencies:** U1 (needs the new REF-IDs to cite correctly) + +**Files:** +- `avionics/emi-hardening/EMI_RF_TEST_PLAN.md` (new) + +**Approach:** +1. Open with the same author/license header convention as + `avionics/emi-hardening/WBS.md` (CC BY-SA 4.0, author line, "detail-holder" + framing — but framed as a *process* document, not a task checklist). +2. **Gate 1 — Component/Schematic Selection (pre-layout).** For every new or + changed component in a schematic touching RF or high-noise/sensitive + nets: check datasheet EMI figures (radiated/conducted emission curves for + switching regulators; RF module spurious-emission and receiver + selectivity specs for radios; SPI/I2C bus speed vs. AK7455/OPTIGA Trust M + susceptibility). Deliverable: a per-board "EMI component risk note" added + to that board's own `.md` file (e.g. `avionics/kicad/Pilot/Pilot.md`), + not duplicated here. Pass criterion: every RF, switching, or + crypto/sensor-adjacent component on the schematic has a one-line EMI + risk call-out (even if "low risk, standard part"). +3. **Gate 2 — Schematic Review (pre-DRC).** Run the `kicad` skill's + `analyze_schematic.py`, then the `emc` skill's `analyze_emc.py` against + the schematic-only JSON (PDN topology, decoupling presence, filter + placement intent) before layout exists. Pass criterion: no P1/P2 `emc` + finding in categories that are schematic-fixable (missing decoupling cap + values, missing input filter on a switching net, no differential pair + assignment for a high-speed net) — cite finding IDs from the tool output, + not paraphrases. +4. **Gate 3 — PCB Layout Review (post-route, pre-fab).** Run `kicad` + `analyze_pcb.py --full` then `emc` `analyze_emc.py --full` against the + routed board. Cross-check against the existing IEC 62368-1 isolation + findings in `avionics/emi-hardening/WBS.md` §0.6 — this gate is the one + that would have caught the tamper-mesh clearance violation before it + reached "layout largely complete." Pass criterion: zero + `ISOLATION`-netclass DRC violations (ties to §0.6 closure) AND no new P1 + `emc` finding since Gate 2. +5. **Gate 4 — Pre-Fab Sign-off.** Re-run Gate 3's tool pair one final time + against the fab-candidate Gerbers/pos files, plus a manual edge-clearance + spot check against the 0.20 mm IPC-2221 floor. Deliverable: a short + sign-off note appended to the board's `.md` file with tool versions, run + date, and finding counts (matching the existing "verified 2026-06-22 via + `kicad-cli pcb drc`..." evidentiary style already used in + `avionics/emi-hardening/WBS.md` §0.6). +6. For every gate, state explicitly: "The `emc` skill is a risk-reducer + (~70% of common EMI mistakes per its own scope statement), not a + compliance predictor — see KTD4." + +**Patterns to follow:** The evidentiary citation style in +`avionics/emi-hardening/WBS.md` §0.6 (tool name, version, exact command, +dated, quantified result) — every gate's pass/fail record in the new +document should read the same way, not as a vaguer checklist tick. + +**Test scenarios:** +- Test expectation: none — this is a process document; its "test" is the + dry-run below. +- Dry-run scenario: pick one already-existing board (Pilot or XO) and + manually walk Gate 2/Gate 3 against its current `.kicad_sch`/`.kicad_pcb` + as a worked example embedded in the document, so the gate isn't purely + theoretical prose — this doubles as evidence the gate criteria are + actually checkable with tools present in this repo. + +**Verification:** Document exists, Gates 1–4 each specify tool + command + +pass/fail criterion + deliverable location, and the Pilot/XO worked example +runs successfully (or documents a real finding, per the dry-run scenario). + +--- + +### U3. Author `EMI_RF_TEST_PLAN.md` — Gates 5–7 (Bench, Integration, Range) + +**Goal:** Write the bench-bring-up, mechanical-integration, and ground/range +RF test gates. + +**Requirements:** R2, R3, R4, R5, R6, R8; governed by KTD1, KTD3 + +**Dependencies:** U2 (continues the same document) + +**Files:** +- `avionics/emi-hardening/EMI_RF_TEST_PLAN.md` (append) + +**Approach:** +1. **Gate 5 — Bench Bring-up (per board, powered, pre-integration).** Near- + field H-probe/E-probe survey around each populated board with EDF/ESC + simulated load (bench PSU + dummy load, not a spinning motor yet) to spot + local hot spots (switching regulator, PWM driver, high-speed digital). + Cross-reference hot-spot frequencies against the AK7455 SPI clock and + OPTIGA Trust M I2C/SPI clock to flag coupling risk before those parts are + even near the noise source physically. Pass criterion: no near-field + reading that (via free-space approximation at the actual planned + component spacing) projects above the MIL-STD-461G RS103-equivalent + design floor at the sensitive component's location — this is a bench + *design-to* check per KTD1, not a chamber measurement. +2. **Gate 6 — Mechanical Integration.** Verify against the `avionics/ + emi-hardening/WBS.md` §1.4.1 Faraday-enclosure constraints (bonding + without loops, cut-out feedthroughs, no direct RF leakage slot at + fan/vent) as each enclosure is actually installed in the airframe — + this gate is a physical-inspection checklist cross-referencing §1.4.1's + existing design constraints, not new constraints. Include: antenna + feedline routing clear of the EDF/ESC bay, single-point chassis bonding + verified with a continuity/low-resistance check, no ground loop between + enclosures sharing a bonding strap. +3. **Gate 7 — Ground/Range RF Test.** With the airframe powered and EDFs + spinning (tethered/bench-restrained, not in flight): (a) link-margin + check for each active radio (49 MHz Commo, 915 MHz SiK, 2.4 GHz Zigbee, + 5 GHz Wi-Fi) — transmit a known test pattern, measure received signal + strength at a fixed range with motors off vs. motors on, record the + delta; (b) spectrum survey with a handheld/USB spectrum analyzer across + all active bands plus known EDF/ESC switching harmonics, looking for + spurs landing in-band on any receiver; (c) FCC Part 15 §15.235/§15.247/ + §15.407 field-strength spot-check at 3 m using a calibrated antenna, + compared against the limits already tabulated in REFERENCES.md (e.g. + REF-FCC-003's 10,000 µV/m at 3 m for the 49 MHz link) — this is a + pre-compliance bench check, not a certification measurement (KTD1 + scope note applies equally to FCC pre-compliance, not just MIL-461). + Pass criterion: motors-on link-margin degradation stays within the + link budget's designed margin (cite the relevant radio's link-budget + doc if one exists; otherwise flag as an open question — see Open + Questions below); no spur within 6 dB of a receiver's sensitivity + floor in its own operating band. + +**Patterns to follow:** REFERENCES.md's existing field-strength limit table +for REF-FCC-003 (line ~364) as the format for recording Gate 7's measured +vs. limit values. + +**Test scenarios:** +- Test expectation: none — physical test procedure, not code; the + "scenarios" are the procedure steps enumerated above, each with a named + input (frequency/band), action (measurement), and expected outcome + (limit or margin) as required by this plan's own quality bar. + +**Verification:** Gates 5–7 each specify the instrument, procedure steps, +pass/fail numeric criterion, and where the result gets recorded (which +board's `.md` file, or a new "Gate 7 log" table in the plan document +itself for range results that don't belong to one board). + +--- + +### U4. Author `EMI_RF_TEST_PLAN.md` — Gates 8–9 (Flight Test, Closeout) + Front Matter + +**Goal:** Write the flight-test EMI/RF validation gate, the post-flight-test +closeout gate, and the document's front matter (purpose, how it relates to +`avionics/emi-hardening/WBS.md`, how to invoke the `emc` skill, revision +history). + +**Requirements:** R6, R7, R9; governed by KTD3, KTD4 + +**Dependencies:** U2, U3 (front matter references gate numbering established there) + +**Files:** +- `avionics/emi-hardening/EMI_RF_TEST_PLAN.md` (finish) + +**Approach:** +1. **Gate 8 — Flight Test EMI/RF Validation**, tied to root `WBS.md` Phase5 + "Minimum Viable Flyer ★ FIRST FLIGHT" onward (KTD3): repeat Gate 7's + link-margin and spectrum-survey procedure in actual flight (in-flight + telemetry link-quality logging, if the firmware already logs RSSI/LQ — + cross-reference `avionics/AGENTS.md` firmware logging requirements; if + not yet logged, flag as an Open Question, don't invent a new logging + requirement here) at first flight, then re-run at each subsequent phase + that adds a new radio or a new noise source (Phase6 full 8-node + + Observer vision, Phase7 cargo system, Phase11 aft EDF). +2. **Gate 9 — Post-Flight-Test Closeout.** After each flight-test EMI/RF + pass (Gate 8 instance), append a dated entry to the plan document's + "As-Built EMI/RF Record" table: what was tested, what changed since the + last gate, pass/fail, any hardware follow-up filed back into + `avionics/emi-hardening/WBS.md` §1.4. This closes the loop the Problem + Frame identifies as missing — a standing record that accumulates instead + of a one-shot pre-flight check. +3. Front matter: state plainly that this document is the *process* + (when/how to check), while `avionics/emi-hardening/WBS.md` remains the + *task list* (what hardware still needs building) — cross-link both + directions. +4. Add a short "How to invoke the `emc` skill for this plan's gates" + subsection with the exact two-step command pattern (`analyze_schematic.py` + → `analyze_emc.py`, or the PCB equivalent) so a future session doesn't + have to re-derive it from the skill's own SKILL.md each time. + +**Patterns to follow:** `avionics/emi-hardening/WBS.md`'s own document header +(license, author, "detail-holder for the root WBS" framing, italicized +in-universe epigraph) for stylistic consistency across the two sibling files. + +**Test scenarios:** +- Test expectation: none — documentation. + +**Verification:** Gates 8–9 specify the Phase tie-in, the log source for +in-flight RSSI/LQ data (or an explicit Open Question if none exists yet), and +the As-Built EMI/RF Record table exists with at least a header row ready for +the first real Gate 8 entry at Phase5 first flight. + +--- + +### U5. Add `avionics/emi-hardening/AGENTS.md` Pointer Stub + +**Goal:** Satisfy the root `CLAUDE.md` "Repository Architecture" requirement +that first-level subdirectories carry a CLAUDE.md/AGENTS.md pointer, and that +IDEs/other AI agents are directed to the authoritative file — this +subdirectory currently has no such stub. + +**Requirements:** R9 + +**Dependencies:** U2 (needs the new file's name to point to) + +**Files:** +- `avionics/emi-hardening/AGENTS.md` (new) +- `avionics/emi-hardening/CLAUDE.md` (new, one-line pointer to AGENTS.md, matching root convention) + +**Approach:** +1. Follow the exact pattern of root `CLAUDE.md` → `AGENTS.md` (one line: + "See `AGENTS.md` — authoritative..."). +2. `avionics/emi-hardening/AGENTS.md` body: scope statement ("EMI/RF design + process and hardware task tracking for the 500 W/m² design objective"), + pointer to `EMI_RF_TEST_PLAN.md` (process) and `WBS.md` (tasks), and a + cross-reference up to `avionics/AGENTS.md` and root `AGENTS.md` §1 for the + originating requirement — mirroring the federation style already used by + `airframe/AGENTS.md`/`avionics/AGENTS.md` pointing back to root. + +**Test scenarios:** +- Test expectation: none — documentation scaffold. + +**Verification:** Both files exist; `AGENTS.md` correctly cross-references +`EMI_RF_TEST_PLAN.md`, `WBS.md`, and the parent `avionics/AGENTS.md`. + +--- + +### U6. Wire Root `WBS.md` / `TODO.md` Pointer Entries + +**Goal:** Make the new plan discoverable from root governance, per the +existing `→ detail:` convention, so a future session or agent finds it +without being told the path. + +**Requirements:** R9 + +**Dependencies:** U2, U5 + +**Files:** +- `WBS.md` — add a subsection under `## 1.0 — Design Artifacts` or extend + existing `### 1.4 — EMI Hardening Beyond the PCBs` header line to also + point at the new process doc (do not duplicate §1.4's task list; just add + a second `→ detail:` line: `→ process: avionics/emi-hardening/EMI_RF_TEST_PLAN.md`). +- `TODO.md` — add the corresponding compact index entries per root + `AGENTS.md` "TODO.md ... formal Work Breakdown Structure" requirement: + one checkbox line per gate (`[ ] Gate 1 — Component/Schematic Selection + process defined`, etc.), all unchecked until U2–U4 land, then checked as + part of this plan's own closeout. + +**Approach:** +1. Match the exact existing line format: `→ detail: avionics/emi-hardening/WBS.md §1.4` becomes a sibling `→ process: avionics/emi-hardening/EMI_RF_TEST_PLAN.md`. +2. TODO.md entries stay ≤70 chars per root `AGENTS.md`, matching the compact-index rule already enforced elsewhere in that file. + +**Test scenarios:** +- Test expectation: none — documentation/index update. + +**Verification:** `grep -n "EMI_RF_TEST_PLAN" WBS.md TODO.md` returns at +least one hit in each file; existing §1.4 task list content is unchanged +(diff shows only additions). + +--- + +## Open Questions + +- **In-flight RSSI/LQ logging availability** (affects Gate 8, U4): does + current Pilot/XO firmware already log per-radio link-quality telemetry, or + does this plan's Gate 8 surface a new firmware logging requirement? + Deferred to implementation — U4 should record whichever answer it finds + rather than assume; if logging doesn't exist, file it as a new item under + root `WBS.md` §4.0 Firmware, not invent it silently inside this plan. +- **Link-budget documentation for each radio** (affects Gate 7 pass + criterion, U3): if no existing link-budget calculation exists for the + 49 MHz/915 MHz/2.4 GHz/5 GHz links, Gate 7's "designed margin" criterion + has nothing to compare against on first run. U3 should note this + explicitly in the gate text as "establish baseline on first run" rather + than assume a budget exists. +- **Instrument availability** (affects Gates 5–7): the plan assumes access + to a near-field probe set, a spectrum analyzer, and a calibrated antenna. + If these aren't currently owned, U3/U4 should note the minimum viable + substitute (e.g. an SDR dongle + open-source spectrum tool) rather than + block the gate definitions on procurement. + +## Risks + +- **Process document without enforcement drifts stale**, the same way + `docs/FIRST_FLIGHT_READINESS.md` is flagged elsewhere in this repo as + self-disclosed stale. Mitigation: U6's WBS/TODO hooks make each gate a + checkable item, and U4's As-Built EMI/RF Record table forces a dated entry + per real gate execution — a document with an empty record table after + Phase5 first flight is a visible, auditable failure to follow the process. +- **`emc` skill scope creep** — a future session could start treating a + clean `emc` run as "EMC compliant." Mitigation: KTD4 and the explicit + scope-limit line required in every gate (U2 step 6). +- **MIL-461 rigor decision (KTD1) could be revisited** if the project later + needs a formal compliance record (e.g. for a defense customer). This plan + doesn't block that — Deferred to Follow-Up Work — but a future re-scoping + should re-read KTD1's rationale before assuming self-test was always the + intended end-state. + +## Definition of Done + +- [ ] U1: REF-FCC-005 and REF-CISPR-001 exist in `REFERENCES.md` with + validated URLs and specific sections. +- [ ] U2: `EMI_RF_TEST_PLAN.md` created with Gates 1–4 fully specified, + including the Pilot/XO worked-example dry-run. +- [ ] U3: Gates 5–7 appended, each with instrument/procedure/pass-criterion/ + record-location. +- [ ] U4: Gates 8–9 and front matter appended; As-Built EMI/RF Record table + present with header row. +- [ ] U5: `avionics/emi-hardening/AGENTS.md` and `CLAUDE.md` stub created. +- [ ] U6: `WBS.md` and `TODO.md` carry discoverable pointers; existing §1.4 + content unmodified aside from the added pointer line. +- [ ] All new standards citations pass the Standards Vetting Policy (no + "TBD" section numbers). diff --git a/docs/structural_analysis.md b/docs/structural_analysis.md index 6988eefc..25c81a52 100644 --- a/docs/structural_analysis.md +++ b/docs/structural_analysis.md @@ -275,15 +275,41 @@ See §7 for the exact cutter geometry applied to each shell. ### 5.6 BOM and Build Guide (Step 5) +**SUPERSEDED 2026-08-25 (U4, SPAR-01) — the cargo Y=+30 ring is retired, not +finalized.** §1 and §5.1's own load-station table already anticipated this +station's job (anti-ovalisation at the spar pin), but the wing-root repair +plan (`docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md`) found +the load itself had changed: the spar no longer carries through the +fuselage (SPAR-01, `airframe/wings-nacelles/WBS.md` §1.1.2), and this +station's own bottom chord is cut away by the clamshell aperture (a +three-sided frame, not a ring — see that WBS.md's SPAR-01 finding 3), so it +never actually closed the couple it was sized for. Two new CF thwarts (fore +Y −40, aft Y +118, same 2 mm CF-PLATE-2MM stock and locating-groove pattern +as this section) replace it — sized and re-verified in +`tools/wing_spar_carrythrough.py`'s `report_thwart()` (FOS 8.5/8.7 against +the same conservative 300 MPa stand-in this section used) and cut in +`add_structural_features.py` `RING_POCKETS["cargo_Yn40"]`/`["cargo_Y118"]`. +The cargo_Y30 pocket is gated off in `merge_cargo_interior.py` +(`RING_Y30_ENABLED = False`), not deleted — its own DXF was already +PROVISIONAL (§5.4, blocked on the MESH-01 fragmented-mesh defect), so no +finalized part is lost by retiring it. + CF-PLATE-2MM notes update: -- Station count: 2 (down from 5 estimated pre-Rev N) -- Hull-Y positions: +30 mm (cargo, wing spar zone), +290 mm (rear, landing zone) -- Ring types: both full closed rings -- Estimated mass: 2 × (176 × 158 × 2 mm³ × 1.6 g/cm³ × 0.85 fill factor) ≈ 2 × 150 g = **300 g (10.6 oz)** - (fill factor 0.85 accounts for outer profile vs bounding rectangle) + +- Station count: 3 total tracked (2 active + 1 retired) — active: cargo + Y −40 mm (fore thwart) and Y +118 mm (aft thwart); retired: cargo Y +30 mm + (superseded above); unchanged: rear Y +290 mm (landing zone, still active) +- Ring types: rear Y +290 remains a full closed ring; the two thwarts are + narrower bands (2 × 25 mm CF plate section, not a full-profile plate) — + see `wing_spar_carrythrough.py` `report_thwart()`, not the §5.2/§5.3 + full-ring-profile method (that method still applies unchanged to Y +290) +- Estimated mass: thwart pair ≈ 28 g (0.062 lbm) combined (2 × 14 g, + `wing_spar_carrythrough.py`), replacing the retired Y +30 ring's + ~78 g estimate (§5.1/WBS.md SPAR-01) — a net saving of ≈50 g (0.11 lbm) +- Y +290 rear ring: unchanged from this section's original figures `REVN_BUILD_GUIDE_24IN.md` keel datum table: replace stale 91/165/251/320/388 mm -stations with the new hull-Y ring stations +30 mm and +290 mm. +stations with the new hull-Y ring/thwart stations −40 mm, +118 mm, and +290 mm. --- @@ -374,6 +400,128 @@ Bore centers (hull frame, Y-axis aligned): Bore diameter: 4.2 mm (CF rod 4.0 mm OD + 0.1 mm clearance each side). +### 6.4 Re-derivation against a nose-high/asymmetric strike (2026-08-25) + +*(Owner-directed: "canonically [the skids are] part of the propulsion +system, not landing gear, but they'll be the first things hitting if the +aircraft lands nose high." §6.2's own case is symmetric-only — both skids +sharing the load, wings level — and never covered a single-skid-first +touchdown. This unit re-derives §6.2 with the corrected AUW first, since +§2's own 2026-08-22 note already flags every number in §3–§7 as computed +from a stale, doubled mass budget, then adds the case §6.2 never had.)* + +**Mass basis:** the owner directed using the **Phase 11 (full system) AUW, +4,273 g (9.42 lbm, `README.md`)** for this re-derivation specifically, so it +does not need re-deriving again once the aircraft reaches its final, +heaviest configuration. Total weight W = 4.273 kg × 9.80665 m/s² = **41.90 N**. +This supersedes §2's own Phase 5–10 corrected figure (36.8 N) *for this +section only* — §2 stays as the Phase 5–10 basis for the rest of this +document; do not silently propagate the Phase 11 figure elsewhere. + +**Geometry re-measured directly from the published STL, not assumed.** §6.1's +"low-Z vertices" survey and §6.2's "approx 76 × 23 mm²" box-shell estimate +both predate this re-derivation and are **superseded by direct measurement** +below — they were never geometrically verified against a specific cross- +section, and the direct measurement found meaningful discrepancies with +both. + +Sectioning `rear_shell24_2mm_repaired.stl` at 8 mm Y-intervals from the +middle/rear joint (Y = 204) to the tip (Y = 384) and identifying the two +discrete inner/outer loop pairs (not the whole-hull cross-section, which +also spans this X range and can be mistaken for the skid at a glance): + +- The skid arm is a genuinely separate, thin-walled cantilevered tube only + from roughly **Y ≈ 250 onward** to the tip — consistent with §6.2's + 177 mm moment-arm assumption (tip-to-joint), which this re-derivation + therefore keeps. +- Measured outer cross-section near the tip: **≈ 24 mm (X) × 23 mm (Z)**, + wall thickness ≈ 2 mm, material (annulus) area ≈ 138 mm² — matching + independently via both a direct polygon slice and a `trimesh.split()` + body-area check. **This is roughly 3× narrower than §6.2's assumed + 76 mm width** (76 was never a measurement; the "approx" in §6.2's own + text was accurate self-disclosure). +- Approximated as a thin rectangular tube (24 × 23 mm outer, 2 mm wall) for + a bending second moment of area about the horizontal (X) axis: + `I = (24×23³ - 20×19³)/12 ≈ 12,900 mm⁴` — this **replaces** §6.2's + `I_PETG ≈ 438,080 mm⁴` box-shell estimate, which used the wrong width. + +**Independent finding, FIXED 2026-08-25 — the CF rod did not run through the +measured skid tube.** Probing `X = -202, Z = 18` (the previously documented/ +bored station, §6.3) against the sectioned loops at Y = 210 (inside the +bore's own Y-range, 173–233): the nearest material was the **main horseshoe +ring's own wall**, 2.09–3.46 mm away — the discrete skid tube (centered ≈ +X = -224 at this Y) was 13.17 mm away, outside the bore's clearance +entirely. **Root cause found and corrected** (`LG-26`, +`airframe/landing-gear/WBS.md`): the tube's own hollow-cavity centerline was +re-measured continuously across its full span (`middle_shell24_2mm_ +repaired.stl` Y=188–202, `rear_shell24_2mm_repaired.stl` Y=208–233 — it is +not yet a separate feature below Y≈188), and `SKID_ROD_BORES` in +`add_structural_features.py` re-sited to it: port moved to (-223.7, 18.5), +stbd to a deliberate compromise center (-122.0, 19.0) since stbd's measured +centerline has a genuine ~10 mm discontinuity at the print-split joint too +large for one straight rod to stay centered on both sides. Both shells +re-verified: `tools/validate_stls.py` 61/61 PASS, and the bore's nearest +material at 8 sampled stations per side is now 2.09–7.03 mm (was 13+ mm +everywhere) — the bore is inside the tube's cavity, not the ring wall, at +every checked station. The stbd compromise is a real improvement, not a +perfect fit; a slicer/test-fit check before fabrication is still warranted, +and building the rod as two independently-anchored segments (rather than one +straight rod) remains an option if the compromise proves inadequate — see +LG-26. + +**Allowable:** **54 MPa (ASTM D790 three-point flexural strength, unreinforced +PETG, REF-MAT-002)** — superseding this section's initial use of REF-MAT-001's +48.41 MPa tensile strength as a bending proxy. REF-MAT-002 (added 2026-08-25, +`REFERENCES.md`) is a genuine flexural test (the correct test type for this +failure mode), not a proxy, and its 50 MPa ANSYS FEA cross-check for pure +PETG (7.4% error vs. the 54 MPa experimental figure) supports citing it with +confidence. **What it does not resolve:** no print-orientation-specific data +(loading axis vs. layer-stack axis) exists in this source either — its own +conclusions cite "anisotropic fibre orientation" as a source of nonlinearity +but give no interlayer/Z-axis strength figure, and this repo has no record of +the rear shell's actual print orientation. Treat the FOS figures below as +upper bounds pending (a) confirmation the skid tube's bending axis sees the +tested (in-plane) direction rather than the weaker interlayer direction, and +(b) a coupon test of the actual tube geometry, not a bulk bar/dog-bone. + +**Load cases** (2.5 g factor per §3's existing "hard landing (vertical)" +convention — kept, not re-derived, since no bound on nose-high pitch angle +or sink rate exists anywhere in this repo's flight-envelope docs to justify +a different factor). With the rod now geometrically coupled to the tube (the +fix above), its stiffness share is credited via a simple parallel-EI split +(`EI_skin = E·I_skin`, `EI_rod = 135,000 MPa × 12.57 mm⁴` for the solid +4 mm CF rod) instead of assuming it carries zero load: + +| Case | Skin material (flexural) | F | M = F × 177 mm | Skin share of M | σ = M·c/I (c = 11.5 mm) | FOS | +| --- | --- | --- | --- | --- | --- | --- | +| Symmetric flat landing | plain PETG, 54 MPa / 2.76 GPa | 52.4 N | 9,275 N·mm | 94.1% | 7.78 MPa | **6.94 — PASS** | +| Nose-high, single skid | plain PETG, 54 MPa / 2.76 GPa | 104.75 N | 18,541 N·mm | 94.1% | 15.55 MPa | **3.47 — still below the 4.0 target** | +| Nose-high, single skid | **20% CF-PETG, 77 MPa / 6.67 GPa (REF-MAT-002 Table 4)** | 104.75 N | 18,541 N·mm | 98.1% | 16.20 MPa | **4.75 — PASS** | +| Symmetric flat landing | 20% CF-PETG, 77 MPa / 6.67 GPa | 52.4 N | 9,275 N·mm | 98.1% | 8.11 MPa | **9.49 — PASS** | + +**Conclusion.** The rod-siting fix alone is not enough to close the nose-high +gap: a solid 4 mm CF rod is too slender to meaningfully stiffen even this +thin shell (it carries only ~2–6% of the moment once actually coupled), so +correcting its position improves plain-PETG FOS only from 3.27 to 3.47 — +real, but short of the 4.0 target. **What closes it is the material switch** +(owner-directed, 2026-08-25): specifying 20% CF-PETG for the rear (and +middle) fuselage skin, per REF-MAT-002's measured 77 MPa flexural strength / +6.67 GPa flexural modulus at that fiber fraction, gets to FOS 4.75. This is +fiber-fraction-specific — REF-MAT-002's own data shows **10% CF-PETG is +*worse* than plain PETG** (43 MPa flexural, likely poor fiber-matrix cohesion +at low loading) and that a nominal 30% blend (80 MPa/7.01 GPa) was the +paper's own custom lab specimen, not a normal retail product — so the BOM +and every citation must say **20% CF**, not a bare "CF-PETG" that could be +read as any fraction. 20% was selected over the paper's stronger 30% figure +specifically because a genuine, explicitly-labeled 20%-CF filament is a real, +verifiable commercial product ("3D Maker Engineering" PETG-CF Pro Series, +confirmed via direct vendor-page quote), whereas a true 30%-CF retail +filament could not be verified to exist. See the BOM/material-spec update +this drove (`current-specification/bom_revS.csv`, `REFERENCES.md` +REF-MAT-002). The symmetric case was never actually a concern (FOS 6.94–9.49 +across all variants checked here) — it's included for completeness, not +because it was ever in doubt. + --- ## 7. Section Joint Boss Design @@ -470,8 +618,13 @@ hull Y = −71, arm to head CG = 86 mm, ultimate = limit × joint-FOS 4.0: The joint ring (perimeter ≈ 350 mm, t = 2 mm) has S_x ≈ 7 000–10 000 mm³, so even the 9 g crash moment gives a peak fiber stress **M/S ≈ 0.7 MPa** — far below the CF-PETG and -epoxy allowables (≈ 5 MPa for the PETG-bond-limited case). **The joint is not -strength-limited.** What is actually required is peel resistance, alignment, and +epoxy allowables (≈ 5 MPa for the PETG-bond-limited case; this figure predates any cited +source and is carried here as the repository's conservative working placeholder for a +bonded/adhesive-limited joint — **REF-MAT-001** (`REFERENCES.md`) now provides a real, +peer-reviewed ASTM D695 *bulk compressive* figure for 20 %-CF-PETG, ≈47–60 MPa, an order +of magnitude above this placeholder, but bulk compression is not the bond/peel mode this +figure is meant to bound, so it does not replace it here — see REF-MAT-001's own entry for +what it does and does not cover). **The joint is not strength-limited.** What is actually required is peel resistance, alignment, and anti-ovalisation of the thin section, plus the AGENTS.md fabrication standard's "minimum 2-wall contact annulus and positive-stop shoulder." diff --git a/tools/cargo_bay_envelope.py b/tools/cargo_bay_envelope.py index 26867293..6e4f7c05 100644 --- a/tools/cargo_bay_envelope.py +++ b/tools/cargo_bay_envelope.py @@ -31,21 +31,35 @@ ---------------- `README.md` mission steps 6 and 9 require a 4 in x 3 in x 3 in (101.6 mm x 76.2 mm x 76.2 mm) payload to be winched up through the clamshell -aperture and into the bay. The wing spar crosses the bay laterally at the -Rev S1b station, so the payload's vertical path is obstructed unless it can -pass either under the spar or entirely forward/aft of it. This tool measures -all three clearances and fails if none admits the payload. +aperture and into the bay. + +CARGO-01, closed 2026-08-24: the wing spar used to cross the bay laterally at +the Rev S1b station, obstructing the payload's vertical path unless it passed +under, forward of, or aft of it. Per SPAR-01 (owner, 2026-08-23, +`airframe/wings-nacelles/WBS.md` SS1.1.2), each spar now terminates at the +fuselage wall on its own bearing instead of crossing the fuselage, so it is no +longer present anywhere inside the bay's clear span -- there is no longer an +analytical spar obstruction to check the payload's path against. What DOES +still bound the payload is the shell's own real interior envelope at the +former spar station (the bearing boss now sits OUTSIDE the clear span, at the +wall -- X <= -240 stbd / X >= -100 port), so this tool now measures that +envelope directly off the published mesh (`station_envelope()`) rather than +computing clearance around an analytical spar position, and fails if the +measured X width or Z height at that station cannot admit the payload. A second finding this tool reports: the cargo shell and the wing disagree on the spar DIAMETER. `airframe/openscad/wings/wings_s1223_revo.scad` (Rev R2, 2026-07-18) states "the 12 mm fixed CF tube is retired" and carries `SPAR_BORE_OD = 8.3` for an 8 mm rotating AISI 4130 tilt-spar that is both the -wing structural spar and the nacelle tilt axis. `merge_cargo_interior.py` still -cuts `WING_SPAR_BORE_D = 12.3` with Ø22 bearing bosses, and `bom_revS.csv` still -lists `CF-TUBE-12MM`. Rev S1b reconciled the spar STATION across those two -files but not its diameter, so the same class of defect remains open. The -payload gate below is evaluated against the wing's 8 mm spar, which is the -larger clearance of the two and therefore the generous case. +wing structural spar and the nacelle tilt axis. CARGO-01/CARGO-02, closed +2026-08-24: `merge_cargo_interior.py` now cuts `WING_SPAR_BORE_D = 8.3` (the +same rotating clearance) inside an F688ZZ bearing seat (REF-SENSOR-019, +Ø27.7 boss) that TERMINATES at the fuselage wall (X −100 port / −240 stbd, +per SPAR-01) instead of crossing the bay, and `bom_revS.csv` lists the 8 mm +OD AISI 4130 hollow spar in place of the retired `CF-TUBE-12MM`. The +payload gate below is evaluated against the wing's 8 mm spar figure, but with +the bay geometry re-cut the spar no longer crosses the bay at all -- the gate +now measures the bearing-seat boss's own footprint, not a full-span bore. Geometry sources (single-sourced -- this tool derives nothing on its own): airframe/blender-scripts/merge_cargo_interior.py @@ -98,7 +112,7 @@ WING_SCAD = os.path.join( REPO_ROOT, "airframe", "openscad", "wings", "wings_s1223_revo.scad" ) -SHELL_BORE_D = mci.WING_SPAR_BORE_D # 12.3 mm, as the cargo shell still cuts it +SHELL_BORE_D = mci.WING_SPAR_BORE_D # 8.3 mm rotating clearance (CARGO-02, closed 2026-08-24) # Mission payload, README.md steps 6 and 9. PAYLOAD_L = 101.6 # 4.00 in @@ -212,47 +226,78 @@ def door_top(meshes): return max(float(m.bounds[1][2]) for m in meshes) -def payload_gate(floor_z, spar_od): - """Check every path the mission payload could take into the bay. +def payload_gate(mesh, floor_z): + """Check whether the mission payload fits in the bay's real interior + envelope, measured off the published mesh at the former spar station. - `spar_od` is the wing's rotating tilt-spar outside diameter -- the generous - case, since the cargo shell's stale bore is wider still. + CARGO-01 (closed 2026-08-24): the spar terminates at the fuselage wall + (SPAR-01) and no longer crosses the bay, so this no longer checks + clearance around an analytical spar position -- it measures the actual + shell interior at `mci.WING_SPAR_Y` (the station the spar/bearing boss + used to obstruct) via `station_envelope()`, the same mesh-sectioning + machinery `--stations` already uses elsewhere in this file. The bearing + boss itself now sits OUTSIDE this span, at the wall (X <= STBD_INB + / X >= PORT_INB), so a bounded, sufficiently large envelope here is + exactly CARGO-01's closing condition ("bay clear span X -240..-100 = + 140 mm at full bay height"). Returns (ok, findings) where `findings` is a list of printable lines. """ - spar_under = SPAR_Z - spar_od / 2.0 - spar_fwd = SPAR_Y - spar_od / 2.0 - spar_aft = SPAR_Y + spar_od / 2.0 - - under_h = spar_under - floor_z - fwd_span = spar_fwd - APERTURE[2] - aft_span = APERTURE[3] - spar_aft - - # The payload may present either 76.2 mm face to the spar, but never less. - smallest = min(PAYLOAD_W, PAYLOAD_H) - + env = station_envelope(mesh, mci.WING_SPAR_Y, z_floor=floor_z) findings = [ - f" bay floor (closed doors) Z {floor_z:+7.2f}", - f" wing spar axis Y {SPAR_Y:+7.2f} Z {SPAR_Z:+7.2f}" - f" spar OD {spar_od:.1f} (wing SCAD)", - f" spar underside Z {spar_under:+7.2f}", + f" bay floor (closed doors) Z {floor_z:+7.2f}", + f" station probed (former spar Y) Y {mci.WING_SPAR_Y:+7.2f}", + f" design wall stations (SPAR-01) X port >= {mci.PORT_INB:+.1f}" + f" X stbd <= {mci.STBD_INB:+.1f}" + f" (design clear span {mci.PORT_INB - mci.STBD_INB:.1f} mm)", + ] + if env is None: + findings.append( + " MEASUREMENT FAILED - the probe found no bounded interior at " + "this station (bay axis obstructed or the mesh has an opening " + "here); cannot confirm the payload fits." + ) + return False, findings + + x_lo, x_hi, z_lo, z_hi = env + x_span = x_hi - x_lo + z_span = z_hi - z_lo + y_span = APERTURE[3] - APERTURE[2] # clamshell aperture Y extent + + findings += [ + f" measured X interior X {x_lo:8.1f}..{x_hi:8.1f}" + f" width {x_span:7.1f} mm", + f" measured Z interior Z {z_lo:8.1f}..{z_hi:8.1f}" + f" height {z_span:7.1f} mm", + f" clamshell aperture Y span " + f"width {y_span:7.1f} mm", "", - f" path 1 - under the spar {under_h:6.1f} mm clear " - f"({under_h / 25.4:.2f} in) need {smallest:.1f} mm", - f" path 2 - forward of the spar {fwd_span:6.1f} mm clear " - f"({fwd_span / 25.4:.2f} in) need {smallest:.1f} mm", - f" path 3 - aft of the spar {aft_span:6.1f} mm clear " - f"({aft_span / 25.4:.2f} in) need {smallest:.1f} mm", ] - ok = max(under_h, fwd_span, aft_span) >= smallest + + # The payload must present some permutation of its three dimensions to + # (X width, Z height, Y span). Its two smaller dims are numerically + # equal (76.2 mm), so there are only two distinct orientations to check: + # the 101.6 mm dim along X or along Y (Z always takes one of the 76.2 mm + # faces, since Z is the most constrained axis here). + dims_ok = [] + for x_dim, y_dim, z_dim in ( + (PAYLOAD_L, PAYLOAD_W, PAYLOAD_H), + (PAYLOAD_W, PAYLOAD_L, PAYLOAD_H), + ): + dims_ok.append(x_dim <= x_span and y_dim <= y_span and z_dim <= z_span) + ok = any(dims_ok) + + findings.append( + f" payload {PAYLOAD_L:.1f} x {PAYLOAD_W:.1f} x {PAYLOAD_H:.1f} mm " + f"(README.md mission steps 6, 9): {'FITS' if ok else 'DOES NOT FIT'} " + f"(need <= {x_span:.1f} mm X, <= {y_span:.1f} mm Y, <= {z_span:.1f} mm Z)" + ) if not ok: - shortfall = smallest - max(under_h, fwd_span, aft_span) findings += [ "", - f" BLOCKED - best path is {shortfall:.1f} mm short. The " - f"{PAYLOAD_L:.1f} x {PAYLOAD_W:.1f} x {PAYLOAD_H:.1f} mm payload", - " (README.md mission steps 6 and 9) cannot be winched into the bay", - " past the wing spar in any orientation.", + " BLOCKED - no permutation of the payload's dimensions fits the " + "measured envelope", + " at the former spar station.", ] return ok, findings @@ -286,16 +331,16 @@ def main(): print(" these two files but not its DIAMETER. Tracked as CARGO-02.") floor_z = door_top(doors) - print("\nMission payload gate (README.md steps 6, 9)") - ok, findings = payload_gate(floor_z, spar_od) + print("\nMission payload gate (README.md steps 6, 9) -- CARGO-01, closed 2026-08-24") + ok, findings = payload_gate(mesh, floor_z) for line in findings: print(line) print() if not ok: - print(" RESULT: FAIL - cargo payload path obstructed by the wing spar") + print(" RESULT: FAIL - cargo payload does not fit the measured bay envelope") sys.exit(1) - print(" RESULT: PASS - the payload has a clear path into the bay") + print(" RESULT: PASS - the payload fits the measured bay envelope") if __name__ == "__main__": diff --git a/tools/index_tags.json b/tools/index_tags.json index d599b0cd..15a6a24d 100644 --- a/tools/index_tags.json +++ b/tools/index_tags.json @@ -1,5 +1,5 @@ { - "generated": "2026-08-24", + "generated": "2026-08-25", "files": { ".clang-format": { "description": "clang-format configuration for the Serenity UAV firmware sources.", @@ -346,7 +346,6 @@ "description": "Python script", "tags": [ "cad-mesh", - "security", "structural" ], "archived": false @@ -684,7 +683,7 @@ "archived": false }, "airframe/blender-scripts/merge_cargo_interior.py": { - "description": "Python script", + "description": "merge_cargo_interior.py \u2014 Rev R1 (2026-06-30)", "tags": [ "cad-mesh", "structural" @@ -2075,7 +2074,7 @@ "archived": false }, "airframe/stls/fuselage/dorsal_antenna_fin.stl": { - "description": "STL mesh (ASCII): dorsal_antenna_fin", + "description": "STL mesh (binary)", "tags": [ "cad-mesh", "structural" @@ -2106,7 +2105,7 @@ "archived": false }, "airframe/stls/fuselage/head_shell24_2mm_repaired.stl": { - "description": "STL mesh \u2014 header: SerenityUAV HULL-FRAME R1 Head_Shell mating-face-open 2026-07-27", + "description": "STL mesh \u2014 header: SerenityUAV HULL-FRAME R1 Head_Shell structural-features 2026-06-14", "tags": [ "cad-mesh", "structural" @@ -2291,7 +2290,7 @@ "archived": false }, "airframe/stls/fuselage/middle_shell24_2mm_repaired.stl": { - "description": "STL mesh \u2014 header: SerenityUAV HULL-FRAME R1 Middle_Shell mating-face-open 2026-07-26", + "description": "STL mesh \u2014 header: SerenityUAV HULL-FRAME R1 Middle_Shell structural-features 2026-06-14", "tags": [ "cad-mesh", "structural" @@ -2315,7 +2314,7 @@ "archived": false }, "airframe/stls/nacelles/edf_aft_spider_sleeve.stl": { - "description": "STL mesh (ASCII): OpenSCAD_Model", + "description": "STL mesh (binary)", "tags": [ "cad-mesh", "propulsion", @@ -2324,7 +2323,7 @@ "archived": false }, "airframe/stls/nacelles/edf_stator_sleeve.stl": { - "description": "STL mesh (ASCII): OpenSCAD_Model", + "description": "STL mesh (binary)", "tags": [ "cad-mesh", "propulsion", @@ -2413,15 +2412,6 @@ ], "archived": false }, - "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl": { - "description": "STL mesh (ASCII): OpenSCAD_Model", - "tags": [ - "cad-mesh", - "propulsion", - "structural" - ], - "archived": false - }, "airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl": { "description": "STL mesh (ASCII): OpenSCAD_Model", "tags": [ @@ -3412,6 +3402,15 @@ ], "archived": true }, + "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl": { + "description": "STL mesh (ASCII): OpenSCAD_Model", + "tags": [ + "archive", + "cad-mesh", + "propulsion" + ], + "archived": true + }, "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl": { "description": "STL mesh (binary)", "tags": [ @@ -6389,6 +6388,13 @@ ], "archived": false }, + "avionics/datasheets/mechanics-of-advanced-composite-structures.pdf": { + "description": "PDF document", + "tags": [ + "avionics-hardware" + ], + "archived": false + }, "avionics/datasheets/mspm0g3507-q1.pdf": { "description": "PDF document", "tags": [ @@ -9426,7 +9432,7 @@ "archived": false }, "current-specification/bom_revS.csv": { - "description": "Bill of materials, CSV (168 items)", + "description": "Bill of materials, CSV (171 items)", "tags": [ "bom", "specification" @@ -9847,7 +9853,6 @@ "description": "Serenity UAV \u2014 Power Distribution & Battery Management", "tags": [ "documentation", - "emi-hardening", "power", "security" ], @@ -10053,6 +10058,38 @@ ], "archived": false }, + "docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md": { + "description": "fix: Wing S1223 repair, root bearing-seat joint, and tenon fallback spar", + "tags": [ + "documentation" + ], + "archived": false + }, + "docs/plans/2026-08-25-001-finish-avionics-plan.md": { + "description": "plan: Close out avionics subsystem", + "tags": [ + "documentation", + "emi-hardening", + "security" + ], + "archived": false + }, + "docs/plans/2026-08-25-002-finish-airframe-components-plan.md": { + "description": "plan: Finish remaining airframe components", + "tags": [ + "documentation" + ], + "archived": false + }, + "docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md": { + "description": "plan: EMI/RF Design and Test Plan", + "tags": [ + "documentation", + "emi-hardening", + "security" + ], + "archived": false + }, "docs/references/108090023_STS3215-C001_Datasheet.pdf": { "description": "PDF document", "tags": [ @@ -12760,7 +12797,8 @@ "tools/wing_spar_carrythrough.py": { "description": "Does the rotating wing spar have to span the fuselage? First-principles check.", "tags": [ - "build-tooling" + "build-tooling", + "security" ], "archived": false }, @@ -12915,6 +12953,10 @@ "docs/img/transparent-nacelle.png", "docs/img/wing_rev_r1a_sections.png", "docs/img/wing_rev_s1c_sections.png", + "docs/plans/2026-08-24-001-fix-wing-repair-root-joint-plan.md", + "docs/plans/2026-08-25-001-finish-avionics-plan.md", + "docs/plans/2026-08-25-002-finish-airframe-components-plan.md", + "docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md", "docs/references/108090023_STS3215-C001_Datasheet.pdf", "docs/references/Bus_servo_control_circuit.pdf", "docs/references/CERN_OHL_rationale.pdf", @@ -13122,13 +13164,14 @@ "docs/FIRST_FLIGHT_READINESS.md", "docs/OBSERVER_MANUFACTURING_READINESS.md", "docs/PHASED_BUILD_GUIDE.md", - "docs/POWER_DISTRIBUTION.md", "docs/README.md", "docs/REVN_BUILD_GUIDE_24IN.md", "docs/TILT_ENCODER_WIRING_EMI_SPEC.md", "docs/TILT_SPAR_ANALYSIS.md", "docs/WBS_FEDERATION.md", "docs/electrical_fault_margins.md", + "docs/plans/2026-08-25-001-finish-avionics-plan.md", + "docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md", "gcs/skipper/firmware/pb2i/dts/k3-am6254-pocketbeagle2-skipper-cape-b2.dts", "graphical-build-guide/flight-phases/WBS.md", "tools/TOOL_REFERENCE.md", @@ -13183,7 +13226,6 @@ "airframe/FreeCAD-scripts/serenity_assembly.py", "airframe/README.md", "airframe/SPEC_VERIFICATION_0.6.1.md", - "airframe/blender-scripts/add_structural_features.py", "airframe/fuselage-joints/WBS.md", "airframe/landing-gear/WBS.md", "airframe/openscad/fuselage/cargo/cargo_spar_drive.scad", @@ -13270,6 +13312,8 @@ "docs/TODO_1_1_0_COMPLETION_SUMMARY.md", "docs/VERIFY_PLACEMENT_WORKFLOW.md", "docs/WBS.md", + "docs/plans/2026-08-25-001-finish-avionics-plan.md", + "docs/plans/2026-08-25-003-feat-emi-rf-design-test-plan-plan.md", "docs/solutions/design-patterns/reducing-token-cost-of-federated-agents-md.md", "gcs/AGENTS.md", "gcs/README.md", @@ -13297,7 +13341,8 @@ "tools/open_mating_faces.py", "tools/precommit_index.py", "tools/wing_internal_clearance.py", - "tools/wing_root_deconflict.py" + "tools/wing_root_deconflict.py", + "tools/wing_spar_carrythrough.py" ], "licensing": [ "LICENSE", @@ -13757,7 +13802,6 @@ "airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl", - "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl", "airframe/stls/wings/wing_port_s1223_revo.stl", @@ -13995,7 +14039,6 @@ "airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl", - "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl", "airframe/stls/wings/wing_port_s1223_revo.stl", @@ -14106,6 +14149,7 @@ "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl", + "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl", @@ -14270,7 +14314,6 @@ "airframe/stls/nacelles/nozzles/nacelle_nozzle_flap_seal.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-closed.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris-open.stl", - "airframe/stls/nacelles/nozzles/nacelle_nozzle_iris.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_ring.stl", "airframe/stls/nacelles/nozzles/nacelle_nozzle_throat.stl", "airframe/wings-nacelles/TODO.md", @@ -14302,6 +14345,7 @@ "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl", + "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl", @@ -14743,6 +14787,7 @@ "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_closed_asm_repaired.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_idler_bracket.stl", + "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_iris.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/nacelle_nozzle_petal_repaired.stl", "archives/airframe-archives/archive/stls/nacelles/nozzles/rear_nozzle_petal_repaired.stl", @@ -15582,6 +15627,7 @@ "avionics/datasheets/iso6442.pdf", "avionics/datasheets/isow1044.pdf", "avionics/datasheets/isow1412.pdf", + "avionics/datasheets/mechanics-of-advanced-composite-structures.pdf", "avionics/datasheets/mspm0g3507-q1.pdf", "avionics/datasheets/mspm0g3507.pdf", "avionics/datasheets/mspm0g3518-q1.pdf", diff --git a/tools/landing_gear_wing_clearance.py b/tools/landing_gear_wing_clearance.py index b44883bf..28315b08 100644 --- a/tools/landing_gear_wing_clearance.py +++ b/tools/landing_gear_wing_clearance.py @@ -35,9 +35,23 @@ ---------- The bay solids are themselves boolean results (they are trimmed against the keep-outs), so a subtracted face pair leaves sub-micron slivers behind. -`EPS_MM3` is that residue floor -- 1e-3 mm^3 is a cube 0.1 mm on a side, four -orders of magnitude below the smallest defect this tool has ever found -(2.7 mm^3), so nothing real hides under it. +`EPS_MM3` is that residue floor. + +U6 (2026-08-25): raised 1e-3 -> 1e-2 mm^3. Re-running check 1 against the +U5/KTD1 wing-root tie-rod bosses (added after this tool's floor was last +calibrated) found "fore-port aperture x rod fwd boss port" at 0.0033 mm^3 -- +above the old floor, so it FOULed. Inspecting it (bounding boxes of the +aperture cutter and the rod boss, and of their intersection) showed the +overlap spans almost the boss's full cross-section in Y/Z while totalling +only thousandths of a mm^3: a razor-thin film along a boundary the two +features are DESIGNED to meet at (the boss sits right at the bay aperture's +edge), not a real interpenetration -- the same "two solids that merely share +a face plane... is not a defect" class of artifact +`tools/wing_root_deconflict.py` already documents for its own checks, just +without that tool's flush-detection logic to filter it automatically. +1e-2 mm^3 is a cube 0.22 mm on a side -- still nearly three orders of +magnitude below the smallest REAL defect this tool has ever found +(2.7 mm^3), so nothing real hides under it either. One overlap is ACCEPTED rather than eliminated: the bay's 16 M3 bolt bores are deliberately not trimmed, because a blocked bolt bore is a hard assembly @@ -74,7 +88,7 @@ sys.path.insert(0, MERGE_DIR) # Boolean-residue floor -- see "Tolerances" above. -EPS_MM3 = 1e-3 +EPS_MM3 = 1e-2 # Accepted nick a single bay bolt bore may take out of a servo pad edge. # Measured worst at adoption (2026-08-16): 14.482 mm^3. BORE_PAD_BUDGET_MM3 = 20.0 diff --git a/tools/wing_airfoil_integrity.py b/tools/wing_airfoil_integrity.py index 2c16ce49..5852685e 100644 --- a/tools/wing_airfoil_integrity.py +++ b/tools/wing_airfoil_integrity.py @@ -107,8 +107,26 @@ def check_polygon(upper, lower): return poly +def wing_solid_uses_hull(src): + """True if wing_solid() still lofts with hull() rather than a true loft. + + Rev S1d (KTD4, 2026-08-24) replaced the hull()-based loft with a manual + polyhedron() built from s1223_scaled_pts() -- the SAME point list/order + check 2 validates as a polygon() -- so root and tip cross-sections in the + built solid are the tabulated outline exactly, not its convex hull. This + check reads wing_solid()'s own source rather than assuming either + implementation, so it stays correct across a future revert either way. + """ + start = src.find("module wing_solid()") + if start == -1: + return None # can't locate the module; caller decides how to treat this + end = src.find("\nmodule ", start + 1) + body = src[start:end if end != -1 else len(src)] + return "hull(" in body + + def main(): - upper, lower, _src = load_tables() + upper, lower, src = load_tables() dump = "--table" in sys.argv print("=== wing_airfoil_integrity.py ===") @@ -138,28 +156,40 @@ def main(): else: print(" ok") + uses_hull = wing_solid_uses_hull(src) print("\n3. hull() is not reshaping the section") - hull = poly.convex_hull - ratio = hull.area / poly.area if poly.area else float("inf") - print(f" outline area {poly.area:.6f} convex hull {hull.area:.6f}" - f" ratio {ratio:.3f}") - if ratio > HULL_AREA_TOLERANCE: - print(f" FAIL -- hull() adds {(hull.area - poly.area) / hull.area * 100:.1f}% " - f"area (tolerance {HULL_AREA_TOLERANCE:.2f}x)") - print(" wing_solid() lofts with hull(), so THIS is the shape that gets") - print(" built -- not the tabulated section the analysis assumes.") - failures.append("hull() materially reshapes the section") + if uses_hull is None: + print(" FAIL -- could not locate module wing_solid() to check") + failures.append("wing_solid() not found in source") + elif uses_hull: + hull = poly.convex_hull + ratio = hull.area / poly.area if poly.area else float("inf") + print(f" outline area {poly.area:.6f} convex hull {hull.area:.6f}" + f" ratio {ratio:.3f}") + if ratio > HULL_AREA_TOLERANCE: + print(f" FAIL -- hull() adds {(hull.area - poly.area) / hull.area * 100:.1f}% " + f"area (tolerance {HULL_AREA_TOLERANCE:.2f}x)") + print(" wing_solid() lofts with hull(), so THIS is the shape that gets") + print(" built -- not the tabulated section the analysis assumes.") + failures.append("hull() materially reshapes the section") + else: + print(" ok") else: - print(" ok") + print(" n/a -- wing_solid() no longer calls hull() (Rev S1d, KTD4):") + print(" it lofts a manual polyhedron() built directly from the same") + print(" s1223_scaled_pts() list check 2 already validated, so the") + print(" built cross-section IS the tabulated outline, not a convex") + print(" approximation of it. No area-ratio check applies.") print() if failures: print(" RESULT: FAIL") for f in failures: print(f" - {f}") - print("\n The exported STL is NOT evidence against this: hull() convexifies") - print(" each section, so a self-intersecting outline still yields a") - print(" watertight solid and validate_stls.py passes.") + if uses_hull: + print("\n The exported STL is NOT evidence against this: hull() convexifies") + print(" each section, so a self-intersecting outline still yields a") + print(" watertight solid and validate_stls.py passes.") sys.exit(1) print(" RESULT: PASS -- the tabulated section is a valid closed airfoil") diff --git a/tools/wing_root_deconflict.py b/tools/wing_root_deconflict.py index 10195466..cf7c490a 100644 --- a/tools/wing_root_deconflict.py +++ b/tools/wing_root_deconflict.py @@ -63,6 +63,7 @@ """ import os +import re import sys import numpy as np @@ -91,6 +92,18 @@ WING_CHORD_LINE_Z = 58.01 # hull Z of the wing chord line at the root GAP_BUDGET = 3.0 # mm, minimum acceptable edge-to-edge clearance + +# U6 (2026-08-25): boolean/mesh noise tolerance for intersection-volume tests. +# The published shell round-trips through a float32 binary STL (repair_exported +# in merge_cargo_interior.py), so a coincident boolean seam that is genuinely +# open can still report a sub-1e-5 mm^3 sliver on reload -- observed directly +# on the spar-bore route check post-U6-rebake (port 1.4e-06, stbd 1.0e-05 +# mm^3). `check_bulkhead_penetration()` already carries this exact tolerance +# (1.0 mm^3, "far below the ~1700 mm^3 an uncut wall leaves, and far above the +# noise"); `check_routes()`'s old bare `> 1e-6` had no such margin and flagged +# those slivers as BLOCKED. One constant for both keeps them from disagreeing +# on what counts as noise. +BOOL_NOISE_TOL = 1.0 # mm^3, see note above X_CL = -169.9 # cargo centreline PAYLOAD_W = 101.6 # mission payload width, CARGO-01 @@ -163,13 +176,28 @@ def route_stations(): # bores do not share a midline: at 22.75 and 32.25 mm the S1223 camber line # differs by ~0.8 mm. Evaluating one midline for the pair puts both bores # off the shell's matching harness ports and reports phantom blockage. - return [ + out = [ ("EDF ESC conduit (40 A feeds)", [((cable_stn - cable_sep / 2) / chord, cable_d), ((cable_stn + cable_sep / 2) / chord, cable_d)]), ("Hall/encoder conduit", [(hall_stn / chord, hall_d)]), ("spar bore / nav-light 3-core", [(spar_stn / chord, spar_bore)]), ] + # U5/KTD1 two-rod couple: both rod clearance bores are camber-centred at + # their own station exactly like the bores above (see + # wing_root_tie_rod_fwd_bore()/_aft_bore() in the wing SCAD). Root-only + # embeds (40/42 mm), shorter than the PORT_INB..PORT_OUTB span this + # reuses for the probe cylinder -- checking the wider span is the + # conservative direction (more territory probed, never less). + m = re.search(r'^TENON_LOAD_PATH\s*=\s*"([^"]+)"\s*;', src, re.M) + if m and m.group(1) == "two_rod": + rod_fwd_d = wsf.scad_scalar(src, "ROD_FWD_D") + rod_fwd_stn = wsf.scad_scalar(src, "ROD_FWD_STATION") + rod_aft_d = wsf.scad_scalar(src, "ROD_AFT_D") + rod_aft_stn = wsf.scad_scalar(src, "ROD_AFT_STATION") + out.append(("fwd tie-rod bore", [(rod_fwd_stn / chord, rod_fwd_d)])) + out.append(("aft tie-rod bore", [(rod_aft_stn / chord, rod_aft_d)])) + return out def routes(side): @@ -178,13 +206,28 @@ def routes(side): inb = mci.PORT_INB if side == "port" else mci.STBD_INB outb = mci.PORT_OUTB if side == "port" else mci.STBD_OUTB lo, hi = min(inb, outb), max(inb, outb) + # U5/KTD1: the tie-rods are ROOT-ONLY embeds, shorter than the main + # spar's PORT_INB..PORT_OUTB span -- probing the wider span reads solid + # wall beyond each rod's own embed as a false BLOCKED. Use each rod's + # actual fuselage-side embed span instead (mci.ROD_*_*_INB/OUTB). + rod_span = { + "fwd tie-rod bore": (mci.ROD_FWD_PORT_INB, mci.ROD_FWD_PORT_OUTB) if side == "port" + else (mci.ROD_FWD_STBD_INB, mci.ROD_FWD_STBD_OUTB), + "aft tie-rod bore": (mci.ROD_AFT_PORT_INB, mci.ROD_AFT_PORT_OUTB) if side == "port" + else (mci.ROD_AFT_STBD_INB, mci.ROD_AFT_STBD_OUTB), + } out = [] for label, bores in route_stations(): for i, (xfr, d) in enumerate(bores): z = WING_CHORD_LINE_Z + mid(xfr) y = mci.WING_LE_ROOT_Y + xfr * mci.WING_ROOT_CHORD tag = label if len(bores) == 1 else f"{label} #{i + 1}" - out.append((tag, xcyl(y, z, lo - 12.0, hi + 12.0, d / 2.0))) + if label in rod_span: + x0, x1 = rod_span[label] + span_lo, span_hi = min(x0, x1), max(x0, x1) + else: + span_lo, span_hi = lo - 12.0, hi + 12.0 + out.append((tag, xcyl(y, z, span_lo, span_hi, d / 2.0))) return out @@ -195,12 +238,21 @@ def tenon_params(): LINE), Z = spanwise. `fuselage_root_tab()` centres the tenon at 50 % root chord and at local Y = 0 -- i.e. on the chord line, NOT on `WING_ROOT_Z`. That distinction is the whole point of the fit check below. + + U5/KTD1 (2026-08-24): `WING_ROOT_TAB_W/H/L` are now a + `TENON_LOAD_PATH`-conditional expression in the SCAD (locating-only under + the default "two_rod" path, the original structural size under + "enlarged_tenon"), not a plain literal `wsf.scad_scalar()` can parse. + Read whichever branch's `_LOCATING`/`_ENLARGED` constants are actually + active instead. """ with open(wsf.WING_SCAD, encoding="utf-8") as fh: src = fh.read() - return (wsf.scad_scalar(src, "WING_ROOT_TAB_W"), # chordwise -> hull Y - wsf.scad_scalar(src, "WING_ROOT_TAB_H"), # thickness -> hull Z - wsf.scad_scalar(src, "WING_ROOT_TAB_L")) # insertion -> hull X + m = re.search(r'^TENON_LOAD_PATH\s*=\s*"([^"]+)"\s*;', src, re.M) + suffix = "_LOCATING" if (m and m.group(1) == "two_rod") else "_ENLARGED" + return (wsf.scad_scalar(src, "WING_ROOT_TAB_W" + suffix), # chordwise -> hull Y + wsf.scad_scalar(src, "WING_ROOT_TAB_H" + suffix), # thickness -> hull Z + wsf.scad_scalar(src, "WING_ROOT_TAB_L" + suffix)) # insertion -> hull X def tenon(side): @@ -448,17 +500,27 @@ def penetration_check(shell_man, findings): box(-130.0, -60.0, y0, y1, z0, z1)), ("wing root mortise, stbd", (mci.STBD_OUTB + 8.0, mci.STBD_INB - 1.0), box(-280.0, -210.0, y0, y1, z0, z1)), - ("spar bore, port", (-270.0, -70.0), + # Print labels below MUST match the swept-corridor bounds actually + # passed to xcyl() just beneath them. They used to both read the + # copy-pasted placeholder (-270.0, -70.0) -- identical for port AND + # stbd, and matching neither the per-side sweep nor PORT_INB/OUTB / + # STBD_INB/OUTB (-100/-60 and -240/-278). That was purely a label + # bug (the sweep itself always used the real -130..-55 / -285..-210 + # bounds below), but a stale label defeats the whole point of + # printing the cut span for a human to sanity-check against the + # wall brackets, so it is corrected to the real sweep bounds here. + ("spar bore, port", (-130.0, -55.0), xcyl(mci.WING_SPAR_Y, mci.WING_SPAR_Z, -130.0, -55.0, mci.WING_SPAR_BORE_D / 2.0)), - ("spar bore, stbd", (-270.0, -70.0), + ("spar bore, stbd", (-285.0, -210.0), xcyl(mci.WING_SPAR_Y, mci.WING_SPAR_Z, -285.0, -210.0, mci.WING_SPAR_BORE_D / 2.0)), ] # Boolean noise on a ~900 k-face shell leaves sub-mm^3 slivers in a corridor # that is genuinely open, so a hard zero is the wrong test. 1 mm^3 is far # below the ~1700 mm^3 an uncut 2 mm wall leaves, and far above the noise. - open_tol = 1.0 + # Same constant check_routes() uses, so the two checks can't disagree. + open_tol = BOOL_NOISE_TOL for label, (cx0, cx1), corridor in cases: left = volume_of(to_man(corridor) ^ shell_man) verdict = "THROUGH" if left <= open_tol else "BLIND -- wall not cut" @@ -531,7 +593,7 @@ def check_routes(side, findings, shell_man): if olabel == "rotating spar tube" and rlabel.startswith("spar bore"): continue # the spar is supposed to be in its own bore inter = volume_of(rman ^ oman) - if inter > 1e-6: + if inter > BOOL_NOISE_TOL: verdict = "BLOCKED" findings.append((side, f"{olabel} blocks {rlabel}", inter)) else: diff --git a/tools/wing_spar_carrythrough.py b/tools/wing_spar_carrythrough.py index ea315d7b..0515e484 100644 --- a/tools/wing_spar_carrythrough.py +++ b/tools/wing_spar_carrythrough.py @@ -191,19 +191,21 @@ def report_couple(geom, limit, ultimate): def report_root_joint(geom, limit, ultimate): - """Split the wing-root reaction between the tenon and the spar bearing. + """Wing-root joint: two-rod couple (U5/KTD1 default) or enlarged tenon. Owner, 2026-08-23: "that mortise/tenon joint provides part of the structural - joint at the wing root, since the wings don't rotate with the nacelles." That - is a load-path statement, and it contradicts `fuselage_root_tab()`'s own - comment ("The tab provides radial restraint; the CF spar carries spanwise - load") -- with SPAR-01 the spar no longer carries through, so spanwise load - terminates at the wall and the tenon is part of how it gets there. - - The wing is supported at two points: the root tenon and the wingtip bearing on - the spar. Whatever the spar hands the wing at the tip, the tenon reacts at the - root, and the spar's own fuselage-side bearing pushes back the other way. The - two are a couple, not a shared load. + joint at the wing root, since the wings don't rotate with the nacelles." + That started the CARGO-03c investigation, which found the tenon + under-strength as a structural joint (FOS 0.49 against the repo's only + CF-PETG figure) and, per the owner's <15 MPa decision rule, routed the + load to bonded CF rods instead. A further 2026-08-24 refinement found a + single rod insufficient (an aft rod matching the forward rod's diameter + does not fit anywhere) and settled on a TWO-ROD couple, asymmetric + diameter, with the tenon traded OUT of the load path entirely and + restored to its original locating-only role. This function now reports + that two-rod couple under `TENON_LOAD_PATH = "two_rod"` (the wing SCAD's + default), and falls back to the superseded single-tenon sizing sweep + under `"enlarged_tenon"` so that alternate path stays reportable too. """ import re wing_scad = os.path.join(REPO_ROOT, "airframe", "openscad", "wings", @@ -215,55 +217,158 @@ def scad(name): m = re.search(rf"^{name}\s*=\s*(-?[\d.]+)\s*;", src, re.M) return float(m.group(1)) - tab_w, tab_h, tab_l = (scad("WING_ROOT_TAB_W"), scad("WING_ROOT_TAB_H"), - scad("WING_ROOT_TAB_L")) + def scad_str(name): + m = re.search(rf'^{name}\s*=\s*"([^"]+)"\s*;', src, re.M) + return m.group(1) + + load_path = scad_str("TENON_LOAD_PATH") arm = geom["wing_tip_x"] - geom["wall_x"] # tip bearing -> root face - print("\nWing root joint -- how the reaction splits (per side)") - print(f" tenon {tab_w:.0f} (Y) x {tab_h:.0f} (Z) x {tab_l:.0f} (insertion) mm" - f" [all three still marked VERIFY in the wing SCAD]") + print("\nWing root joint (per side)") + print(f" TENON_LOAD_PATH = \"{load_path}\"") print(f" tip bearing to root face {arm:6.1f} mm") - print(f"\n{'case':>10s} {'R_tip N':>9s} {'tenon V N':>10s} " - f"{'tenon M N.m':>12s} {'bearing MPa':>12s} {'FOS vs 5':>9s}") + print(f"\n{'case':>10s} {'R_tip N':>9s} {'root M N.m':>11s}") for tag, f in (("limit", limit), ("ultimate", ultimate)): - r_tip, r_fus, _m, _s = spar_case(f, geom) - m_tenon = r_tip * arm / 1000.0 - # Moment reacted as a couple on the tenon's top/bottom faces over the - # insertion depth; effective arm taken as 2/3 of the depth (triangular - # bearing distribution), bearing area = width x half the depth. - couple_arm = (2.0 / 3.0) * tab_l / 1000.0 - f_bear = m_tenon / couple_arm - area = tab_w * (tab_l / 2.0) # mm^2 - sigma = f_bear / area - print(f"{tag:>10s} {r_tip:9.1f} {r_tip:10.1f} {m_tenon:12.2f} " - f"{sigma:12.2f} {5.0 / sigma:9.2f}") - - print("\n The 5 MPa column is the repository's own BOND-limited CF-PETG/epoxy") - print(" allowable (structural_analysis.md SS7.3). A CF-PETG **bearing**") - print(" allowable is NOT established anywhere in this repository, and bearing") - print(" is the mode that governs a tenon in a slot -- so treat the FOS column") - print(" as an order-of-magnitude screen, not a margin. structural_analysis.md") - print(" SS3 sets the joint FOS target at 4.0 (design-team judgment; no published") - print(" FDM knockdown standard exists for CF-PETG).") - - # Invert the sizing so the answer does not depend on inventing an allowable: - # bearing stress falls as 1/depth^2 (the couple arm and the bearing area both - # grow with depth), so the depth needed for FOS 4.0 follows from whatever - # allowable the coupon test eventually returns. - r_tip, _rf, _m, _s = spar_case(ultimate, geom) - sigma_ult = (r_tip * arm / 1000.0) / ((2.0 / 3.0) * tab_l / 1000.0) \ - / (tab_w * tab_l / 2.0) - need = 4.0 * sigma_ult + r_tip, _rf, _m, _s = spar_case(f, geom) + m_root = r_tip * arm / 1000.0 + print(f"{tag:>10s} {r_tip:9.1f} {m_root:11.2f}") + + r_tip_ult, _rf, _m, _s = spar_case(ultimate, geom) + m_ult = r_tip_ult * arm / 1000.0 # N.m, ultimate root moment + + if load_path == "two_rod": + report_two_rod_couple(src, m_ult) + return + + report_enlarged_tenon(src, scad, m_ult) + + +def report_two_rod_couple(src, m_ult): + """U5/KTD1 default: two bonded CF rods react the root moment as a couple. + + Each rod is idealised as a simple bonded PIN -- shear-transferring only, + no moment restraint credited (conservative; the bond's rotational + stiffness at the wing root is not characterised). The main spar bearing + does NOT participate in this reaction: the wing rides on a rotating + CLEARANCE bore around the tilt spar there (wing_tip_spar_through_bore()/ + the fuselage-side spar clearance bore), so it transmits no moment back to + the wing about this axis. The only two reaction points for the applied + moment are therefore the forward and aft rods. + + Pure statics for a moment M reacted by exactly two point forces (no + third reaction, pin supports only) requires the forces to be EQUAL in + magnitude and opposite in sign, regardless of where either rod sits + relative to the main spar: + + F_fwd + F_aft = 0 (sum of forces = 0) + M + F_aft . (x_aft - x_fwd) = 0 (sum of moments = 0, about x_fwd) + => |F_fwd| = |F_aft| = M / (x_aft - x_fwd) + + This supersedes the single-rod method (`couple force = M / separation + from the main spar`) that WBS.md's CARGO-03c first-pass table used: that + formula implicitly treated the SPAR ITSELF as the second reaction point + for a lone rod. With two dedicated rods and a spar that does not react + this moment, the spar drops out of the force balance entirely and the + two rods alone carry it, in equal and opposite shares -- not a 50/50 + split by "share of the moment" (bearing stress still differs sharply + between the two, because the rods differ in diameter and embed), but an + equal split of FORCE, which is what the physics actually gives for two + pin reactions. + """ + import re + + def scad(name): + m = re.search(rf"^{name}\s*=\s*(-?[\d.]+)\s*;", src, re.M) + return float(m.group(1)) + + x_fwd, d_fwd, l_fwd = (scad("ROD_FWD_STATION"), scad("ROD_FWD_D"), + scad("ROD_FWD_EMBED")) + x_aft, d_aft, l_aft = (scad("ROD_AFT_STATION"), scad("ROD_AFT_D"), + scad("ROD_AFT_EMBED")) + x_spar = scad("SPAR_BORE_STATION") + sep = x_aft - x_fwd # mm, rod-to-rod lever arm + + print("\nTwo-rod couple (bonded CF tie rods, U5/KTD1) -- ultimate case") + print(f" forward rod: station {x_fwd:.1f} mm from LE, D {d_fwd:.1f} mm " + f"(nominal {d_fwd - 0.2:.0f} mm CF rod), embed {l_fwd:.1f} mm") + print(f" aft rod: station {x_aft:.1f} mm from LE, D {d_aft:.1f} mm " + f"(nominal {d_aft - 0.2:.0f} mm CF rod), embed {l_aft:.1f} mm") + print(f" main spar station {x_spar:.2f} mm (reference only -- the spar " + f"bearing does not react this moment, see docstring)") + print(f" rod-to-rod separation (couple lever arm) {sep:.2f} mm") + + m_ult_mm = m_ult * 1000.0 # N.mm + f_couple = m_ult_mm / sep # N, equal at both rods + + print(f"\n ultimate root moment M = {m_ult:.2f} N.m") + print(f" F = M / separation = {m_ult_mm:.0f} / {sep:.2f} " + f"= {f_couple:.1f} N (equal magnitude, both rods)") + + # Bearing stress = force / projected bearing area (diameter x embed), + # using the NOMINAL rod OD (the actual bearing surface), not the + # clearance bore. Matches the WBS.md CARGO-03c table's own convention + # (verified: 469 N / (8 mm x 40 mm) = 1.47 MPa there). + allow = 5.0 # MPa, structural_analysis.md SS7.3 bond-limited CF-PETG/epoxy + target_fos = 4.0 # structural_analysis.md SS3 joint FOS target + print(f"\n{'rod':>6s} {'D nom':>6s} {'embed':>7s} {'F N':>8s} " + f"{'sigma MPa':>10s} {'FOS vs {:.0f} MPa'.format(allow):>14s} verdict") + for tag, d, embed in (("fwd", d_fwd - 0.2, l_fwd), ("aft", d_aft - 0.2, l_aft)): + sigma = f_couple / (d * embed) + fos = allow / sigma + verdict = "PASS" if fos >= target_fos else "MARGINAL/FAIL" + print(f"{tag:>6s} {d:6.1f} {embed:7.1f} {f_couple:8.1f} " + f"{sigma:10.3f} {fos:14.2f} {verdict} " + f"(target FOS {target_fos:.1f})") + + print("\n Both figures use the projected-bearing convention sigma = F / (D . L),") + print(" the repo's own CARGO-03c method, against the cited 5 MPa bond-limited") + print(" CF-PETG/epoxy allowable (structural_analysis.md SS7.3) -- the socket") + print(" wall is CF-PETG hull skin, so this is the correct allowable to cite,") + print(" not a plain-PETG datasheet figure.") + + f_single = m_ult_mm / (x_spar - x_fwd) + print("\n Sanity check vs. the superseded single-rod method (rod alone reacting") + print(" the full moment against the spar, F = M / (spar - rod station)): that") + print(f" gives F = {f_single:.1f} N at the forward station alone -- the two-rod") + print(f" couple's shared {f_couple:.1f} N is lower, as expected once a second") + print(" rod actually shares the load instead of being checked in isolation.") + + +def report_enlarged_tenon(src, scad, m_ult): + """Superseded path: TENON_LOAD_PATH = "enlarged_tenon". + + Preserves the original CARGO-03c single-tenon sizing sweep (couple + reacted internally on the tenon's own top/bottom faces over its + insertion depth) so the alternate, coupon-gated path stays reportable, + per KTD1 ("keep the enlarged-tenon sizing documented/available, not + deleted"). + """ + # WING_ROOT_TAB_W/H/L are now a TENON_LOAD_PATH-conditional expression in + # the SCAD, not a plain literal -- read the underlying "_ENLARGED" values + # this path actually resolves to instead. + tab_w, tab_h, tab_l = (scad("WING_ROOT_TAB_W_ENLARGED"), + scad("WING_ROOT_TAB_H_ENLARGED"), + scad("WING_ROOT_TAB_L_ENLARGED")) + + print("\nEnlarged-tenon path (superseded default; coupon-gated, >= 15 MPa)") + print(f" tenon {tab_w:.0f} (Y) x {tab_h:.0f} (Z) x {tab_l:.0f} (insertion) mm") + + m_tenon = m_ult + couple_arm = (2.0 / 3.0) * tab_l / 1000.0 + f_bear = m_tenon / couple_arm + area = tab_w * (tab_l / 2.0) + sigma = f_bear / area + print(f" ultimate: M {m_tenon:.2f} N.m bearing {sigma:.2f} MPa " + f"FOS vs 5 MPa {5.0 / sigma:.2f}") + + need = 4.0 * sigma print(f"\n For the SS3 FOS 4.0 target at the present {tab_l:.0f} mm insertion the") print(f" bearing allowable would have to be >= {need:.1f} MPa.") - # Bearing stress goes as 1/(W . L^2): depth is a QUADRATIC lever, width only a - # linear one. Both are capped by what the airframe will physically accept -- - # measured, not assumed, by wing_root_deconflict.max_tenon_envelope(). sys.path.insert(0, os.path.join(REPO_ROOT, "tools")) import wing_root_deconflict as wrd max_w, max_l, notes = wrd.max_tenon_envelope() - k = need * tab_w * tab_l ** 2 # = 4 * 3000 * M, the sizing constant + k = need * tab_w * tab_l ** 2 print("\n Airframe limits on the tenon (measured, port side):") print(f" max width {max_w:5.1f} mm (forward face is capped by the spar bore --")