design(mechanical): rigorous observatory mechanical-design proof-out - #105
Merged
Conversation
… torque proof First slice of the mechanical-design proof-out. Establishes the single-source-of- truth parameter set (params.py) with sourced/derived/assumed provenance tags, the SI units layer, the common BudgetResult type, and the exemplar axis-torque budget. The torque proof already lands the boldest result: MN78 counterweight-FREE needs 49.9 Nm at RA vs the CSF-32 127 Nm rating (SF 2.5) and 26.5 Nm at DEC vs 70 Nm (SF 2.6) — deleting the ~9 kg of counterweights is quantitatively feasible, the same principle the ZWO AM5 / RST-135 exploit. 5/5 tests green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SKZMQ755R7q38SKqJsCQsg
…nerated report Completes the rigorous mechanical-design proof-out. Turns the repo's asserted-but- uncomputed design into 11 first-principles budgets (torque, stiffness, dynamics, encoder tracking, balance, bearings, wind, pier, thermal, enclosure, power), each a calc module + pytest asserting its margin. A weighted-Pugh trade study runs the selection permutations with a sensitivity pass, parametric OpenSCAD + an SVG preview fill the empty CAD appendix, and report.py generates MECHANICAL_DESIGN.md from the calculator (a diff-test forbids drift). 121/121 tests green. Honest tally: 6 PASS / 5 FAIL — the FAILs are real findings the repo's prose hid: - stiffness 43.5" vs 5": the deep-groove 6008/6006 bearings (not the walls) are 98% of the error -> angular-contact 7008/7006 pairs required. - tracking: baseline dual-encoder chain 5.02" RMS vs 1" -> on-axis high-res absolute encoder REQUIRED (proposed ring reaches 0.54"). - survival wind: 9.2 kN roof uplift, SF 0.19 -> hold-down anchors mandatory (unspecced). - thermal: 22 K diurnal swing walks focus ~10x depth-of-focus -> temp-comp focuser. - off-grid power: 12 V pack 3.3 h vs 10 h night -> 48 V pack (13.4 h) or DGX duty-cycle. Selected build banks two won bold picks (counterweight-FREE GEM, active-thermal roof) plus the mandatory on-axis encoder; keeps baselines where they already pass. Every input tagged sourced/derived/assumed; the three governing voids the repo omits (survival wind, snow, seismic) are filled as labelled assumptions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SKZMQ755R7q38SKqJsCQsg
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Turns the repo's documented-but-unproven mechanical design (
NIGHTWATCH_Build_Package.md+ thepos/expert-persona reviews) into a rigorous, reproducible, self-consistent engineering proof-out under a newdesign/mechanical/tree. It runs the selection permutations as a weighted trade study, proves out every choice with first-principles calculations carrying stated assumptions and margins, makes and defends the bold choices the numbers justify, and fills the CAD and environmental-load voids. 121/121 tests green.Type of Change
Changes Made
design/mechanical/calc/params.py— single source of truth for every mechanical parameter,sourced/derived/assumedtagged; resolves 7 cross-file contradictions (MN76 vs MN78 mass, 2048 vs 8192 PPR, temp units, site coords, deep-groove-vs-angular-contact bearings) in one place.evaluate() -> BudgetResult+ a pytest asserting its margin: torque, stiffness, dynamics, encoder tracking, balance, bearings, wind, pier, thermal, enclosure, power.design/mechanical/tradestudy/— morphological (Zwicky) + weighted-Pugh matrices with a precision/cost sensitivity pass; a pass/fail gate on the 1″ tracking target disqualifies the baseline encoder a naive weighted sum would have kept.design/mechanical/cad/— parametric OpenSCAD (RA/DEC housings, pier adapter, counterweight shaft, assembly) + a zero-dependency SVG elevation previewer, filling the empty "all.stepPending" appendix.design/mechanical/MECHANICAL_DESIGN.md— generated byreport.pyfrom the calculator;test_report.pybyte-compares so it can never drift from the code.Results — 6 PASS / 5 FAIL (the FAILs are the value)
Safety Checklist
Testing
python3 -m pytest design/mechanical/tests/ -q→ 121 passed.scadcarries its render commandDocumentation
design/mechanical/MECHANICAL_DESIGN.md(generated, 780 lines) — resolved-contradiction & filled-void tables, 11 proofs, provenance ledger, trade study, CAD, selected-config + cost-delta + roadmap, risk register.Additional Notes
Every input is labelled
Sourced /Derived /Assumed — nothing is measured field data; the observatory has never been built. The three governing structural loads the repo omits (survival wind, snow, seismic) are added as clearly-labelled assumptions. Left as a draft for your review; thedesign/tree is isolated from the runtime code and from CI'sservices/ voice/ nightwatch/lint/type scope.🤖 Generated with Claude Code