aero-agent-roles 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +18 -0
- package/README.md +49 -0
- package/bin/aero-agent-roles.js +127 -0
- package/lib/catalog.js +97 -0
- package/lib/install.js +48 -0
- package/lib/mcp.js +199 -0
- package/manifest.json +516 -0
- package/package.json +44 -0
- package/roles/aerodynamics-engineer/ROLE.md +153 -0
- package/roles/aerodynamics-engineer/SOURCES.md +12 -0
- package/roles/aerodynamics-engineer/cli.py +143 -0
- package/roles/aerodynamics-engineer/core/aerodynamics_core.py +1218 -0
- package/roles/aerodynamics-engineer/templates/aero-design-report-template.md +72 -0
- package/roles/aerodynamics-engineer/tests/test_aerodynamics_core.py +227 -0
- package/roles/aerodynamics-engineer/tests/test_role_aerodynamics.py +94 -0
- package/roles/aircraft-design-engineer/ROLE.md +138 -0
- package/roles/aircraft-design-engineer/SOURCES.md +12 -0
- package/roles/aircraft-design-engineer/cli.py +152 -0
- package/roles/aircraft-design-engineer/core/aircraft_design_core.py +1278 -0
- package/roles/aircraft-design-engineer/templates/concept-design-template.md +99 -0
- package/roles/aircraft-design-engineer/tests/test_aircraft_design_core.py +269 -0
- package/roles/aircraft-design-engineer/tests/test_role_aircraft_design_engineer.py +106 -0
- package/roles/airworthiness-compliance-engineer/ROLE.md +122 -0
- package/roles/airworthiness-compliance-engineer/SOURCES.md +16 -0
- package/roles/airworthiness-compliance-engineer/cli.py +146 -0
- package/roles/airworthiness-compliance-engineer/core/airworthiness_core.py +894 -0
- package/roles/airworthiness-compliance-engineer/templates/compliance-matrix-template.md +46 -0
- package/roles/airworthiness-compliance-engineer/tests/test_airworthiness_core.py +224 -0
- package/roles/airworthiness-compliance-engineer/tests/test_role_airworthiness.py +85 -0
- package/roles/as9100-quality-auditor/ROLE.md +128 -0
- package/roles/as9100-quality-auditor/SOURCES.md +16 -0
- package/roles/as9100-quality-auditor/cli.py +136 -0
- package/roles/as9100-quality-auditor/core/as9100_core.py +857 -0
- package/roles/as9100-quality-auditor/templates/findings-report-template.md +119 -0
- package/roles/as9100-quality-auditor/tests/test_as9100_cli_profile.py +105 -0
- package/roles/as9100-quality-auditor/tests/test_as9100_core.py +204 -0
- package/roles/as9100-quality-auditor/tests/test_role_as9100.py +90 -0
- package/roles/data-bus-avionics-engineer/ROLE.md +146 -0
- package/roles/data-bus-avionics-engineer/SOURCES.md +23 -0
- package/roles/data-bus-avionics-engineer/cli.py +311 -0
- package/roles/data-bus-avionics-engineer/core/data_bus_avionics_core.py +1121 -0
- package/roles/data-bus-avionics-engineer/templates/bus-assessment-template.md +134 -0
- package/roles/data-bus-avionics-engineer/tests/test_bundle_protocol.py +137 -0
- package/roles/data-bus-avionics-engineer/tests/test_data_bus_avionics_core.py +261 -0
- package/roles/data-bus-avionics-engineer/tests/test_role_data_bus_avionics_engineer.py +121 -0
- package/roles/do160-environmental-engineer/ROLE.md +136 -0
- package/roles/do160-environmental-engineer/SOURCES.md +30 -0
- package/roles/do160-environmental-engineer/cli.py +147 -0
- package/roles/do160-environmental-engineer/core/do160_environmental_core.py +1246 -0
- package/roles/do160-environmental-engineer/templates/environmental-qualification-plan-template.md +114 -0
- package/roles/do160-environmental-engineer/tests/test_do160_environmental_core.py +312 -0
- package/roles/do160-environmental-engineer/tests/test_role_do160_environmental_engineer.py +281 -0
- package/roles/do178c-cert-engineer/ROLE.md +120 -0
- package/roles/do178c-cert-engineer/SOURCES.md +16 -0
- package/roles/do178c-cert-engineer/cli.py +129 -0
- package/roles/do178c-cert-engineer/core/do178c_core.py +411 -0
- package/roles/do178c-cert-engineer/templates/psac-template.md +74 -0
- package/roles/do178c-cert-engineer/tests/test_do178c_cert_engineer_core.py +91 -0
- package/roles/do178c-cert-engineer/tests/test_role_do178c.py +109 -0
- package/roles/do254-hardware-engineer/ROLE.md +127 -0
- package/roles/do254-hardware-engineer/SOURCES.md +19 -0
- package/roles/do254-hardware-engineer/cli.py +308 -0
- package/roles/do254-hardware-engineer/core/do254_hardware_core.py +761 -0
- package/roles/do254-hardware-engineer/templates/phac-template.md +87 -0
- package/roles/do254-hardware-engineer/tests/test_do254_bundle_profile.py +152 -0
- package/roles/do254-hardware-engineer/tests/test_do254_hardware_core.py +200 -0
- package/roles/do254-hardware-engineer/tests/test_role_do254_hardware.py +108 -0
- package/roles/engineering-analysis-engineer/ROLE.md +154 -0
- package/roles/engineering-analysis-engineer/SOURCES.md +15 -0
- package/roles/engineering-analysis-engineer/cli.py +151 -0
- package/roles/engineering-analysis-engineer/core/engineering_analysis_engineer_core.py +866 -0
- package/roles/engineering-analysis-engineer/templates/analysis-memo-template.md +73 -0
- package/roles/engineering-analysis-engineer/tests/test_engineering_analysis_engineer_core.py +367 -0
- package/roles/engineering-analysis-engineer/tests/test_role_engineering_analysis_engineer.py +113 -0
- package/roles/flight-management-engineer/ROLE.md +160 -0
- package/roles/flight-management-engineer/SOURCES.md +30 -0
- package/roles/flight-management-engineer/cli.py +258 -0
- package/roles/flight-management-engineer/core/flight_management_core.py +1473 -0
- package/roles/flight-management-engineer/templates/route-assessment-template.md +94 -0
- package/roles/flight-management-engineer/tests/test_flight_management_core.py +437 -0
- package/roles/flight-management-engineer/tests/test_role_flight_management_engineer.py +123 -0
- package/roles/flight-mechanics-engineer/ROLE.md +162 -0
- package/roles/flight-mechanics-engineer/SOURCES.md +51 -0
- package/roles/flight-mechanics-engineer/cli.py +149 -0
- package/roles/flight-mechanics-engineer/core/flight_mechanics_core.py +1507 -0
- package/roles/flight-mechanics-engineer/templates/perf-sc-report-template.md +82 -0
- package/roles/flight-mechanics-engineer/tests/test_flight_mechanics_core.py +277 -0
- package/roles/flight-mechanics-engineer/tests/test_role_flight_mechanics_engineer.py +141 -0
- package/roles/flight-test-engineer/ROLE.md +137 -0
- package/roles/flight-test-engineer/SOURCES.md +24 -0
- package/roles/flight-test-engineer/cli.py +135 -0
- package/roles/flight-test-engineer/core/flight_test_core.py +931 -0
- package/roles/flight-test-engineer/templates/flight-test-template.md +143 -0
- package/roles/flight-test-engineer/tests/test_flight_test_engineer_core.py +227 -0
- package/roles/flight-test-engineer/tests/test_role_flight_test_engineer.py +150 -0
- package/roles/flight-test-performance-engineer/ROLE.md +165 -0
- package/roles/flight-test-performance-engineer/SOURCES.md +20 -0
- package/roles/flight-test-performance-engineer/cli.py +319 -0
- package/roles/flight-test-performance-engineer/core/flight_test_performance_core.py +1398 -0
- package/roles/flight-test-performance-engineer/templates/performance-report-template.md +105 -0
- package/roles/flight-test-performance-engineer/tests/test_flight_test_performance_engineer_core.py +308 -0
- package/roles/flight-test-performance-engineer/tests/test_role_flight_test_performance_engineer.py +165 -0
- package/roles/gnc-engineer/ROLE.md +141 -0
- package/roles/gnc-engineer/SOURCES.md +35 -0
- package/roles/gnc-engineer/cli.py +141 -0
- package/roles/gnc-engineer/core/gnc_core.py +1074 -0
- package/roles/gnc-engineer/templates/gnc-report-template.md +105 -0
- package/roles/gnc-engineer/tests/test_gnc_engineer_core.py +238 -0
- package/roles/gnc-engineer/tests/test_role_gnc_engineer.py +142 -0
- package/roles/guidance-engineer/ROLE.md +156 -0
- package/roles/guidance-engineer/SOURCES.md +43 -0
- package/roles/guidance-engineer/cli.py +280 -0
- package/roles/guidance-engineer/core/guidance_core.py +820 -0
- package/roles/guidance-engineer/templates/guidance-report-template.md +70 -0
- package/roles/guidance-engineer/tests/test_guidance_engineer_core.py +269 -0
- package/roles/guidance-engineer/tests/test_role_guidance_engineer.py +146 -0
- package/roles/high-speed-aerodynamics-engineer/ROLE.md +161 -0
- package/roles/high-speed-aerodynamics-engineer/SOURCES.md +18 -0
- package/roles/high-speed-aerodynamics-engineer/cli.py +282 -0
- package/roles/high-speed-aerodynamics-engineer/core/high_speed_aero_core.py +1566 -0
- package/roles/high-speed-aerodynamics-engineer/templates/high-speed-memo-template.md +75 -0
- package/roles/high-speed-aerodynamics-engineer/tests/test_bundle_protocol.py +103 -0
- package/roles/high-speed-aerodynamics-engineer/tests/test_high_speed_aero_core.py +280 -0
- package/roles/high-speed-aerodynamics-engineer/tests/test_role_high_speed_aerodynamics.py +125 -0
- package/roles/ndt-engineer/ROLE.md +157 -0
- package/roles/ndt-engineer/SOURCES.md +18 -0
- package/roles/ndt-engineer/cli.py +316 -0
- package/roles/ndt-engineer/core/ndt_core.py +1590 -0
- package/roles/ndt-engineer/templates/ndt-plan-template.md +109 -0
- package/roles/ndt-engineer/tests/test_ndt_cli_bundle.py +183 -0
- package/roles/ndt-engineer/tests/test_ndt_core.py +437 -0
- package/roles/ndt-engineer/tests/test_role_ndt_engineer.py +148 -0
- package/roles/numerical-analysis-engineer/ROLE.md +158 -0
- package/roles/numerical-analysis-engineer/SOURCES.md +19 -0
- package/roles/numerical-analysis-engineer/cli.py +414 -0
- package/roles/numerical-analysis-engineer/core/numerical_analysis_core.py +1220 -0
- package/roles/numerical-analysis-engineer/templates/verification-memo-template.md +120 -0
- package/roles/numerical-analysis-engineer/tests/test_bundle_protocol.py +157 -0
- package/roles/numerical-analysis-engineer/tests/test_numerical_analysis_core.py +337 -0
- package/roles/numerical-analysis-engineer/tests/test_role_numerical_analysis_engineer.py +117 -0
- package/roles/propulsion-engineer/ROLE.md +163 -0
- package/roles/propulsion-engineer/SOURCES.md +15 -0
- package/roles/propulsion-engineer/cli.py +168 -0
- package/roles/propulsion-engineer/core/propulsion_core.py +1291 -0
- package/roles/propulsion-engineer/templates/propulsion-report-template.md +92 -0
- package/roles/propulsion-engineer/tests/test_propulsion_engineer_core.py +294 -0
- package/roles/propulsion-engineer/tests/test_role_propulsion_engineer.py +106 -0
- package/roles/space-systems-engineer/ROLE.md +161 -0
- package/roles/space-systems-engineer/SOURCES.md +49 -0
- package/roles/space-systems-engineer/cli.py +173 -0
- package/roles/space-systems-engineer/core/space_systems_core.py +980 -0
- package/roles/space-systems-engineer/templates/space-systems-template.md +88 -0
- package/roles/space-systems-engineer/tests/test_role_space_systems_engineer.py +117 -0
- package/roles/space-systems-engineer/tests/test_space_systems_engineer_core.py +247 -0
- package/roles/state-estimation-engineer/ROLE.md +154 -0
- package/roles/state-estimation-engineer/SOURCES.md +27 -0
- package/roles/state-estimation-engineer/cli.py +326 -0
- package/roles/state-estimation-engineer/core/state_estimation_core.py +958 -0
- package/roles/state-estimation-engineer/templates/nav-state-estimator-design-template.md +76 -0
- package/roles/state-estimation-engineer/tests/test_bundle_protocol.py +110 -0
- package/roles/state-estimation-engineer/tests/test_role_state_estimation_engineer.py +127 -0
- package/roles/state-estimation-engineer/tests/test_state_estimation_engineer_core.py +231 -0
- package/roles/structures-loads-engineer/ROLE.md +171 -0
- package/roles/structures-loads-engineer/SOURCES.md +44 -0
- package/roles/structures-loads-engineer/cli.py +219 -0
- package/roles/structures-loads-engineer/core/structures_loads_core.py +1112 -0
- package/roles/structures-loads-engineer/templates/loads-strength-report-template.md +96 -0
- package/roles/structures-loads-engineer/tests/test_bundle_protocol.py +101 -0
- package/roles/structures-loads-engineer/tests/test_role_structures_loads_engineer.py +147 -0
- package/roles/structures-loads-engineer/tests/test_structures_loads_core.py +261 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: role
|
|
3
|
+
name: flight-mechanics-engineer
|
|
4
|
+
title: "Flight Mechanics Engineer"
|
|
5
|
+
status: draft
|
|
6
|
+
domain: flight-mechanics
|
|
7
|
+
deliverable_type: "performance + stability and control analysis report"
|
|
8
|
+
standards_bound:
|
|
9
|
+
- id: far-25
|
|
10
|
+
tier: TIER-1
|
|
11
|
+
reference-only: false
|
|
12
|
+
- id: mil-std-1797a
|
|
13
|
+
tier: TIER-1
|
|
14
|
+
reference-only: false
|
|
15
|
+
skills_bound:
|
|
16
|
+
- flight-mechanics/performance/breguet-range
|
|
17
|
+
- flight-mechanics/performance/breguet-endurance
|
|
18
|
+
- flight-mechanics/performance/specific-range
|
|
19
|
+
- flight-mechanics/performance/climb-performance
|
|
20
|
+
- flight-mechanics/performance/descent-performance
|
|
21
|
+
- flight-mechanics/performance/glide-performance
|
|
22
|
+
- flight-mechanics/performance/takeoff-performance
|
|
23
|
+
- flight-mechanics/performance/landing-performance
|
|
24
|
+
- flight-mechanics/performance/turn-performance
|
|
25
|
+
- flight-mechanics/performance/thrust-required
|
|
26
|
+
- flight-mechanics/performance/oei-climb-gradient
|
|
27
|
+
- flight-mechanics/performance/energy-height
|
|
28
|
+
- flight-mechanics/performance/speed-stability
|
|
29
|
+
- flight-mechanics/performance/wind-effects
|
|
30
|
+
- flight-mechanics/performance/windshear-analysis
|
|
31
|
+
- flight-mechanics/performance/rotorcraft-hover-performance
|
|
32
|
+
- flight-mechanics/performance/rotorcraft-forward-flight-performance
|
|
33
|
+
- flight-mechanics/performance/rotorcraft-blade-element-hover-performance
|
|
34
|
+
- flight-mechanics/performance/rotorcraft-autorotative-descent
|
|
35
|
+
- flight-mechanics/performance/rotorcraft-tail-rotor-sizing
|
|
36
|
+
- flight-mechanics/performance/rotorcraft-vertical-climb-performance
|
|
37
|
+
- flight-mechanics/stability-control/longitudinal-stability
|
|
38
|
+
- flight-mechanics/stability-control/lateral-directional-stability
|
|
39
|
+
- flight-mechanics/stability-control/dynamic-stability
|
|
40
|
+
- flight-mechanics/stability-control/short-period-mode-analysis
|
|
41
|
+
- flight-mechanics/stability-control/phugoid-mode-analysis
|
|
42
|
+
- flight-mechanics/stability-control/trim-analysis
|
|
43
|
+
- flight-mechanics/stability-control/stability-derivatives-avl
|
|
44
|
+
- flight-mechanics/stability-control/control-surface-effectiveness
|
|
45
|
+
- flight-mechanics/stability-control/aileron-reversal
|
|
46
|
+
- flight-mechanics/stability-control/deep-stall-analysis
|
|
47
|
+
- flight-mechanics/stability-control/spin-recovery
|
|
48
|
+
- flight-mechanics/handling-qualities/cooper-harper-rating
|
|
49
|
+
- flight-mechanics/handling-qualities/mil-std-1797a
|
|
50
|
+
- flight-mechanics/handling-qualities/pilot-induced-oscillation
|
|
51
|
+
- flight-mechanics/handling-qualities/pitch-bandwidth-criteria
|
|
52
|
+
- flight-mechanics/flight-dynamics-sim/point-mass-trajectory
|
|
53
|
+
- flight-mechanics/flight-dynamics-sim/six-dof-simulation
|
|
54
|
+
tools_allowed: [stdlib, offline-file-processing, avl-cli, jsbsim-cli]
|
|
55
|
+
forbidden:
|
|
56
|
+
- "claim certification approval"
|
|
57
|
+
- "declare a compliance finding"
|
|
58
|
+
- "reproduce proprietary standard text"
|
|
59
|
+
sign_off_required: true
|
|
60
|
+
license: Apache-2.0
|
|
61
|
+
compatibility: "agentskills.io ROLE.md; any SKILL.md host"
|
|
62
|
+
metadata:
|
|
63
|
+
version: 0.1.0
|
|
64
|
+
author: Aero Agent Roles
|
|
65
|
+
skills_release: "v1.3.0+"
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
# Flight Mechanics Engineer
|
|
69
|
+
|
|
70
|
+
## Role identity
|
|
71
|
+
|
|
72
|
+
Owns aircraft performance and stability/control analysis: range,
|
|
73
|
+
endurance, climb, takeoff/landing, turn, OEI gradients, static/dynamic
|
|
74
|
+
stability, mode characteristics, handling qualities, and trajectory
|
|
75
|
+
simulation (fixed-wing and rotorcraft). Use when a vehicle must show it
|
|
76
|
+
can meet performance requirements and behave acceptably across the
|
|
77
|
+
envelope. Do NOT use for control LAW design (GNC role), aero shape
|
|
78
|
+
(aero role), or loads (structures role).
|
|
79
|
+
|
|
80
|
+
## Deliverable contract
|
|
81
|
+
|
|
82
|
+
1. **Performance + S&C report** - mission performance numbers, stability
|
|
83
|
+
derivatives, mode characteristics, handling qualities assessment,
|
|
84
|
+
trim conditions, and trajectory results. The worked example
|
|
85
|
+
(templates/perf-sc-report-template.md) is the complete generated
|
|
86
|
+
deliverable for the example transport: range, endurance, ROC,
|
|
87
|
+
takeoff/landing field, static margin, and short-period/phugoid/Dutch
|
|
88
|
+
roll mode numbers all computed from real domain rules with their
|
|
89
|
+
input basis stated.
|
|
90
|
+
2. **Analysis evidence set** - the calculations, derivative builds, and
|
|
91
|
+
simulation runs behind the results (per-section equations and input
|
|
92
|
+
basis in the report; open items name the deeper bound-skill stages).
|
|
93
|
+
|
|
94
|
+
## Workflow (stages -> bound skills)
|
|
95
|
+
|
|
96
|
+
| Stage | Loads skill | Produces |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| 1. Range/endurance | breguet-range + breguet-endurance + specific-range | range/endurance vs payload |
|
|
99
|
+
| 2. Mission performance | climb-performance + descent-performance + glide-performance + takeoff-performance + landing-performance + turn-performance + thrust-required | segment performance |
|
|
100
|
+
| 3. Safety performance | oei-climb-gradient + energy-height + speed-stability + wind-effects + windshear-analysis | OEI/climb margins |
|
|
101
|
+
| 4. Rotorcraft performance | rotorcraft-hover-performance + rotorcraft-forward-flight-performance + rotorcraft-blade-element-hover-performance + rotorcraft-autorotative-descent + rotorcraft-tail-rotor-sizing + rotorcraft-vertical-climb-performance | rotorcraft numbers |
|
|
102
|
+
| 5. Static stability | longitudinal-stability + lateral-directional-stability + trim-analysis + stability-derivatives-avl | static margins, derivatives |
|
|
103
|
+
| 6. Dynamic stability | dynamic-stability + short-period-mode-analysis + phugoid-mode-analysis | mode frequencies/damping |
|
|
104
|
+
| 7. Control effectiveness | control-surface-effectiveness + aileron-reversal + deep-stall-analysis + spin-recovery | control checks |
|
|
105
|
+
| 8. Handling qualities | cooper-harper-rating + mil-std-1797a + pilot-induced-oscillation + pitch-bandwidth-criteria | HQR assessment |
|
|
106
|
+
| 9. Simulation | point-mass-trajectory + six-dof-simulation | trajectory/6DOF runs |
|
|
107
|
+
| 10. Report | (all above) | the performance + S&C report |
|
|
108
|
+
|
|
109
|
+
## Evidence gates
|
|
110
|
+
|
|
111
|
+
- Stage 1 done = range/endurance with the Breguet assumptions stated.
|
|
112
|
+
- Stage 6 done = short-period/phugoid damping within MIL-STD/FAR
|
|
113
|
+
context or with a stated rationale.
|
|
114
|
+
- FINAL = every result has a stated input basis (mass, CG, altitude);
|
|
115
|
+
the computed numbers are present (range, ROC, takeoff field, static
|
|
116
|
+
margin, mode damping) and the document is marked draft, not approval.
|
|
117
|
+
The core `check_*` functions verify all of this on the deliverable.
|
|
118
|
+
|
|
119
|
+
## Boundary / forbidden
|
|
120
|
+
|
|
121
|
+
- NEVER claim certification approval or compliance findings.
|
|
122
|
+
- Handling qualities conclusions are assessments (HQR scale), not
|
|
123
|
+
certification findings.
|
|
124
|
+
- Derivatives come from AVL or stated data; never invent stability data
|
|
125
|
+
without a source.
|
|
126
|
+
- The rendered deliverable ALWAYS carries the DRAFT + human-review +
|
|
127
|
+
not-an-approval marker (enforced by the core renderer and gate checks).
|
|
128
|
+
|
|
129
|
+
## Verification
|
|
130
|
+
|
|
131
|
+
The role runs STANDALONE: `core/flight_mechanics_core.py` is an
|
|
132
|
+
executable engine that encodes the domain rules from the bound
|
|
133
|
+
flight-mechanics leaves (Breguet range/endurance, specific range,
|
|
134
|
+
ROC/time-to-climb, takeoff/landing field estimates, static margin and
|
|
135
|
+
neutral point, short period / phugoid / Dutch roll / spiral / roll
|
|
136
|
+
modes, MIL-STD-1797A summary level bands), computes the example
|
|
137
|
+
transport numbers, BUILDS the report, and gate-checks deliverables.
|
|
138
|
+
No AeroSkills checkout required (`AEROSKILLS_DEV=/nonexistent` works).
|
|
139
|
+
|
|
140
|
+
Run the role:
|
|
141
|
+
```bash
|
|
142
|
+
python3 cli.py build --out perf-sc-report.md # build the example report
|
|
143
|
+
python3 cli.py check --file perf-sc-report.md # gate-check a report
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Tests:
|
|
147
|
+
- tests/test_flight_mechanics_core.py (34 tests): domain rules +
|
|
148
|
+
builder + gates + standalone (no skills repo)
|
|
149
|
+
- tests/test_role_flight_mechanics_engineer.py: bound-skill resolution
|
|
150
|
+
(skips if the skills repo is absent) + workflow + filled template +
|
|
151
|
+
boundaries + core/cli presence
|
|
152
|
+
|
|
153
|
+
Bound skills in Aero Agent Skills deepen individual stages when the
|
|
154
|
+
library is present (per the workflow table); the core engine does not
|
|
155
|
+
depend on them.
|
|
156
|
+
|
|
157
|
+
## Compliance
|
|
158
|
+
|
|
159
|
+
- far-25 + mil-std-1797a TIER-1 context (quotable with citation);
|
|
160
|
+
standards-map summary only, no verbatim regulation text.
|
|
161
|
+
- SOURCES.md records the standards and the bound leaves whose rules the
|
|
162
|
+
core encodes.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# SOURCES.md - Flight Mechanics Engineer
|
|
2
|
+
|
|
3
|
+
Summary-not-copy per STANDARDS.md. The core (core/flight_mechanics_core.py)
|
|
4
|
+
encodes the equations of the bound AeroSkills leaves below (paraphrase of
|
|
5
|
+
common flight-mechanics practice); every number in the generated report
|
|
6
|
+
traces to one of these rules or to the stated example input basis.
|
|
7
|
+
|
|
8
|
+
## Standards / regulations referenced (context, quotable with citation)
|
|
9
|
+
|
|
10
|
+
| Source | Role use | Gated |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| 14 CFR Part 25 (FAR/CS 25.121, 25.125, 25.181) | minimum climb gradients; landing field length factor; dynamic stability context | true (gradients, landing factor, heavy-damping context) |
|
|
13
|
+
| MIL-STD-1797A | flying qualities levels, mode criteria tables (summary paraphrase) | true (level bands used by the gates) |
|
|
14
|
+
| MIL-F-8785C style level-1 bands (as summarized by the short-period leaf) | short-period damping/frequency bands | true |
|
|
15
|
+
| ISA atmosphere (public standard model) | density/temperature/speed of sound at altitude | false |
|
|
16
|
+
|
|
17
|
+
## Bound AeroSkills leaves whose rules the core encodes
|
|
18
|
+
|
|
19
|
+
| Leaf (rule the core encodes) | Role use | Gated |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| flight-mechanics/performance/breguet-range | R = (V/(TSFC*g))*(L/D)*ln(m0/m1) | true |
|
|
22
|
+
| flight-mechanics/performance/breguet-endurance | jet loiter endurance | true |
|
|
23
|
+
| flight-mechanics/performance/specific-range | SAR = V*(L/D)/(TSFC*W) | false |
|
|
24
|
+
| flight-mechanics/performance/climb-performance | ROC=(T-D)V/W; gradient; time to climb; service ceiling | true |
|
|
25
|
+
| flight-mechanics/performance/takeoff-performance | Vs, V_LOF=1.2*Vs, ground roll | true |
|
|
26
|
+
| flight-mechanics/performance/landing-performance | Vref=1.3*Vs, air distance, ground roll, 1.67 factor | true |
|
|
27
|
+
| flight-mechanics/performance/glide-performance | glide ratio/angle/sink | false |
|
|
28
|
+
| flight-mechanics/performance/turn-performance | n=1/cos(phi), rate, radius | false |
|
|
29
|
+
| flight-mechanics/performance/oei-climb-gradient | T_oei derate; FAR 25.121 gradients | true |
|
|
30
|
+
| flight-mechanics/performance/energy-height | h_e, kinetic height, Ps | false |
|
|
31
|
+
| flight-mechanics/performance/wind-effects | wind triangle/groundspeed | false |
|
|
32
|
+
| flight-mechanics/stability-control/longitudinal-stability | neutral point, static margin | true |
|
|
33
|
+
| flight-mechanics/stability-control/dynamic-stability | short period/phugoid/lateral mode formulas, criteria | true |
|
|
34
|
+
| flight-mechanics/stability-control/short-period-mode-analysis | SP frequency/damping, level bands | true |
|
|
35
|
+
| flight-mechanics/stability-control/phugoid-mode-analysis | Lanchester phugoid characteristics | true |
|
|
36
|
+
| flight-mechanics/stability-control/lateral-directional-stability | fin/dihedral derivative build, DR/roll/spiral | true |
|
|
37
|
+
| flight-mechanics/stability-control/trim-analysis | CL_trim, elevator to trim | false |
|
|
38
|
+
| flight-mechanics/handling-qualities/mil-std-1797a | category/class/level mode criteria tables | true |
|
|
39
|
+
| flight-mechanics/handling-qualities/cooper-harper-rating | HQR decision tree (flight-test campaign) | false |
|
|
40
|
+
|
|
41
|
+
## Reference books (method context for the derivative builds)
|
|
42
|
+
|
|
43
|
+
| Source | Role use | Gated |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| Stevens & Lewis, Aircraft Control and Simulation | dynamics/derivative conventions | false |
|
|
46
|
+
| Roskam, Airplane Flight Dynamics | S&C methods, class-range derivative data | false |
|
|
47
|
+
|
|
48
|
+
Example-configuration data (mass, geometry, thrust, polar, derivative
|
|
49
|
+
coefficients) are stated per-run inputs in the class range of a 150-seat
|
|
50
|
+
twin-engine transport and are flagged in the report as open items pending
|
|
51
|
+
project data and the AVL derivative build.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""cli.py - run the Flight Mechanics Engineer role.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
python3 cli.py build [--out <file.md>] [--bundle] [--profile <file.json>]
|
|
6
|
+
# build the Performance + S&C report for the example transport
|
|
7
|
+
# --bundle also emit evidence/{model,gates,provenance}.json (PROTOCOL.md)
|
|
8
|
+
# --profile program profile JSON for customer tailoring
|
|
9
|
+
# (docs/PROFILE-SCHEMA.md) -> prepended context header
|
|
10
|
+
python3 cli.py check --file <file.md> # gate-check an existing report
|
|
11
|
+
|
|
12
|
+
The role ENGINE (core/flight_mechanics_core.py) does the work standalone
|
|
13
|
+
(real domain rules -> real numbers); bound flight-mechanics skills in Aero
|
|
14
|
+
Agent Skills deepen individual stages when present.
|
|
15
|
+
"""
|
|
16
|
+
import argparse
|
|
17
|
+
import dataclasses
|
|
18
|
+
import os
|
|
19
|
+
import sys
|
|
20
|
+
|
|
21
|
+
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
|
22
|
+
"core"))
|
|
23
|
+
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
|
24
|
+
"..", "..", "scripts"))
|
|
25
|
+
import flight_mechanics_core as core # noqa: E402
|
|
26
|
+
import evidence # noqa: E402
|
|
27
|
+
|
|
28
|
+
ROLE_SLUG = "flight-mechanics-engineer"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _jsonable(obj):
|
|
32
|
+
"""Recursively convert the content model to plain JSON types.
|
|
33
|
+
|
|
34
|
+
The model embeds the ExampleTransport configuration dataclass inside
|
|
35
|
+
results['aircraft']; the evidence bundle (PROTOCOL.md v1) requires
|
|
36
|
+
plain JSON that round-trips, so dataclass instances become dicts.
|
|
37
|
+
"""
|
|
38
|
+
if dataclasses.is_dataclass(obj) and not isinstance(obj, type):
|
|
39
|
+
return _jsonable(dataclasses.asdict(obj))
|
|
40
|
+
if isinstance(obj, dict):
|
|
41
|
+
return {k: _jsonable(v) for k, v in obj.items()}
|
|
42
|
+
if isinstance(obj, (list, tuple)):
|
|
43
|
+
return [_jsonable(v) for v in obj]
|
|
44
|
+
return obj
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _provenance():
|
|
48
|
+
"""Provenance for the bundle: role core, no skill dispatch in this
|
|
49
|
+
role yet (core ran standalone), same honesty boundary as the report."""
|
|
50
|
+
return {
|
|
51
|
+
"role": ROLE_SLUG,
|
|
52
|
+
"core": {
|
|
53
|
+
"file": "core/flight_mechanics_core.py",
|
|
54
|
+
"functions": ["analyze_vehicle", "build_report",
|
|
55
|
+
"check_report", "render_report_markdown"],
|
|
56
|
+
"version": "0.1.0",
|
|
57
|
+
},
|
|
58
|
+
"skills": [],
|
|
59
|
+
"cross_checked": False,
|
|
60
|
+
"disclaimer": "DRAFT for human review. Not an approval document.",
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def cmd_build(args):
|
|
65
|
+
results = core.analyze_vehicle(core.example_vehicle())
|
|
66
|
+
model = core.build_report(core.example_vehicle(), results)
|
|
67
|
+
md = core.render_report_markdown(model)
|
|
68
|
+
|
|
69
|
+
# program profile (customer tailoring): load + apply context header
|
|
70
|
+
profile = None
|
|
71
|
+
try:
|
|
72
|
+
profile = evidence.load_profile(args.profile)
|
|
73
|
+
except ValueError as e:
|
|
74
|
+
print(f"error: bad profile: {e}")
|
|
75
|
+
return 1
|
|
76
|
+
if profile:
|
|
77
|
+
model["profile"] = {
|
|
78
|
+
"customer": profile.get("customer"),
|
|
79
|
+
"program": profile.get("program"),
|
|
80
|
+
"basis": profile.get("basis"),
|
|
81
|
+
"authority": profile.get("authority"),
|
|
82
|
+
"der": profile.get("der"),
|
|
83
|
+
"document_prefix": profile.get("document_prefix"),
|
|
84
|
+
"revision": profile.get("revision"),
|
|
85
|
+
}
|
|
86
|
+
md = evidence.profile_header_block(profile) + md
|
|
87
|
+
|
|
88
|
+
gates = core.check_report(results)
|
|
89
|
+
if args.out:
|
|
90
|
+
with open(args.out, "w") as f:
|
|
91
|
+
f.write(md)
|
|
92
|
+
print(f"built Performance + S&C report for {model['aircraft']} "
|
|
93
|
+
f"-> {args.out}")
|
|
94
|
+
if profile:
|
|
95
|
+
print(f"profile: {profile.get('customer')} / "
|
|
96
|
+
f"{profile.get('program')}")
|
|
97
|
+
print(f"gates: all_pass={gates['all_pass']} {gates}")
|
|
98
|
+
if args.bundle:
|
|
99
|
+
paths = evidence.write_bundle(
|
|
100
|
+
args.out, ROLE_SLUG, "Performance and S&C Analysis Report",
|
|
101
|
+
_jsonable(model), gates, _provenance())
|
|
102
|
+
print(f"bundle: model={paths['model']}")
|
|
103
|
+
print(f" gates={paths['gates']}")
|
|
104
|
+
print(f" provenance={paths['provenance']}")
|
|
105
|
+
else:
|
|
106
|
+
print(md)
|
|
107
|
+
return 0 if gates["all_pass"] else 1
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def cmd_check(args):
|
|
111
|
+
if not os.path.exists(args.file):
|
|
112
|
+
print(f"file not found: {args.file}")
|
|
113
|
+
return 1
|
|
114
|
+
md = open(args.file).read()
|
|
115
|
+
gates = core.check_report_markdown(md)
|
|
116
|
+
for name, ok in gates.items():
|
|
117
|
+
if name != "all_pass":
|
|
118
|
+
print(f"{'PASS' if ok else 'FAIL'} {name}")
|
|
119
|
+
print(f"RESULT: {'PASS' if gates['all_pass'] else 'FAIL'}")
|
|
120
|
+
return 0 if gates["all_pass"] else 1
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def main():
|
|
124
|
+
p = argparse.ArgumentParser(
|
|
125
|
+
description="Flight Mechanics Engineer role: performance + S&C "
|
|
126
|
+
"analysis report")
|
|
127
|
+
sub = p.add_subparsers(dest="cmd", required=True)
|
|
128
|
+
|
|
129
|
+
b = sub.add_parser("build")
|
|
130
|
+
b.add_argument("--out", default="",
|
|
131
|
+
help="output file (default: stdout)")
|
|
132
|
+
b.add_argument("--bundle", action="store_true",
|
|
133
|
+
help="emit evidence/{model,gates,provenance}.json")
|
|
134
|
+
b.add_argument("--profile", default="",
|
|
135
|
+
help="program profile JSON (customer tailoring, "
|
|
136
|
+
"docs/PROFILE-SCHEMA.md)")
|
|
137
|
+
b.set_defaults(fn=cmd_build)
|
|
138
|
+
|
|
139
|
+
c = sub.add_parser("check")
|
|
140
|
+
c.add_argument("--file", required=True,
|
|
141
|
+
help="Performance + S&C report markdown to gate-check")
|
|
142
|
+
c.set_defaults(fn=cmd_check)
|
|
143
|
+
|
|
144
|
+
args = p.parse_args()
|
|
145
|
+
sys.exit(args.fn(args))
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
if __name__ == "__main__":
|
|
149
|
+
main()
|