aero-agent-roles 1.0.0 → 1.2.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/lib/mcp.js +130 -6
- package/manifest.json +311 -11
- package/package.json +5 -3
- package/roles/adcs-engineer/ROLE.md +156 -0
- package/roles/adcs-engineer/SOURCES.md +22 -0
- package/roles/adcs-engineer/cli.py +344 -0
- package/roles/adcs-engineer/core/adcs_core.py +1390 -0
- package/roles/adcs-engineer/templates/adcs-subsystem-report-template.md +114 -0
- package/roles/adcs-engineer/tests/test_adcs_engineer_core.py +314 -0
- package/roles/adcs-engineer/tests/test_role_adcs.py +187 -0
- package/roles/aircraft-performance-engineer/ROLE.md +187 -0
- package/roles/aircraft-performance-engineer/SOURCES.md +41 -0
- package/roles/aircraft-performance-engineer/cli.py +350 -0
- package/roles/aircraft-performance-engineer/core/aircraft_performance_core.py +2327 -0
- package/roles/aircraft-performance-engineer/templates/performance-analysis-report-template.md +190 -0
- package/roles/aircraft-performance-engineer/tests/test_aircraft_performance_bundle.py +184 -0
- package/roles/aircraft-performance-engineer/tests/test_aircraft_performance_core.py +573 -0
- package/roles/aircraft-performance-engineer/tests/test_role_aircraft_performance.py +143 -0
- package/roles/aircraft-systems-sizing-engineer/ROLE.md +171 -0
- package/roles/aircraft-systems-sizing-engineer/SOURCES.md +17 -0
- package/roles/aircraft-systems-sizing-engineer/cli.py +391 -0
- package/roles/aircraft-systems-sizing-engineer/core/aircraft_systems_sizing_core.py +1669 -0
- package/roles/aircraft-systems-sizing-engineer/templates/systems-sizing-report-template.md +109 -0
- package/roles/aircraft-systems-sizing-engineer/tests/test_aircraft_systems_sizing_core.py +181 -0
- package/roles/aircraft-systems-sizing-engineer/tests/test_bundle_protocol.py +116 -0
- package/roles/aircraft-systems-sizing-engineer/tests/test_role_aircraft_systems_sizing_engineer.py +140 -0
- package/roles/autopilot-control-engineer/ROLE.md +173 -0
- package/roles/autopilot-control-engineer/SOURCES.md +38 -0
- package/roles/autopilot-control-engineer/cli.py +147 -0
- package/roles/autopilot-control-engineer/core/autopilot_control_engineer_core.py +1450 -0
- package/roles/autopilot-control-engineer/templates/autopilot-control-law-package-template.md +139 -0
- package/roles/autopilot-control-engineer/tests/test_autopilot_control_engineer_core.py +302 -0
- package/roles/autopilot-control-engineer/tests/test_role_autopilot_control_engineer.py +189 -0
- package/roles/boundary-layer-engineer/ROLE.md +180 -0
- package/roles/boundary-layer-engineer/SOURCES.md +31 -0
- package/roles/boundary-layer-engineer/cli.py +261 -0
- package/roles/boundary-layer-engineer/core/boundary_layer_engineer_core.py +1412 -0
- package/roles/boundary-layer-engineer/templates/boundary-layer-analysis-report-template.md +99 -0
- package/roles/boundary-layer-engineer/tests/test_boundary_layer_engineer_core.py +208 -0
- package/roles/boundary-layer-engineer/tests/test_role_boundary_layer_engineer.py +139 -0
- package/roles/composites-structures-engineer/ROLE.md +155 -0
- package/roles/composites-structures-engineer/SOURCES.md +29 -0
- package/roles/composites-structures-engineer/cli.py +348 -0
- package/roles/composites-structures-engineer/core/composites_structures_core.py +1024 -0
- package/roles/composites-structures-engineer/templates/composite-analysis-report-template.md +88 -0
- package/roles/composites-structures-engineer/tests/test_composites_structures_core.py +269 -0
- package/roles/composites-structures-engineer/tests/test_role_composites_structures_engineer.py +169 -0
- package/roles/do178c-cert-engineer/ROLE.md +6 -0
- package/roles/fem-analysis-engineer/ROLE.md +150 -0
- package/roles/fem-analysis-engineer/SOURCES.md +24 -0
- package/roles/fem-analysis-engineer/cli.py +257 -0
- package/roles/fem-analysis-engineer/core/fem_analysis_core.py +1659 -0
- package/roles/fem-analysis-engineer/templates/fem-report-template.md +114 -0
- package/roles/fem-analysis-engineer/tests/test_fem_analysis_core.py +236 -0
- package/roles/fem-analysis-engineer/tests/test_role_fem_analysis.py +129 -0
- package/roles/flight-software-engineer/ROLE.md +158 -0
- package/roles/flight-software-engineer/SOURCES.md +30 -0
- package/roles/flight-software-engineer/cli.py +502 -0
- package/roles/flight-software-engineer/core/flight_software_core.py +1841 -0
- package/roles/flight-software-engineer/templates/flight-sw-plan-template.md +149 -0
- package/roles/flight-software-engineer/tests/test_flight_software_bundle.py +160 -0
- package/roles/flight-software-engineer/tests/test_flight_software_core.py +376 -0
- package/roles/flight-software-engineer/tests/test_role_flight_software.py +153 -0
- package/roles/flight-test-planning-engineer/ROLE.md +177 -0
- package/roles/flight-test-planning-engineer/SOURCES.md +37 -0
- package/roles/flight-test-planning-engineer/cli.py +349 -0
- package/roles/flight-test-planning-engineer/core/flight_test_planning_core.py +2294 -0
- package/roles/flight-test-planning-engineer/templates/flight-test-plan-template.md +296 -0
- package/roles/flight-test-planning-engineer/tests/test_flight_test_planning_bundle.py +174 -0
- package/roles/flight-test-planning-engineer/tests/test_flight_test_planning_core.py +437 -0
- package/roles/flight-test-planning-engineer/tests/test_role_flight_test_planning.py +178 -0
- package/roles/mbse-modeling-engineer/ROLE.md +154 -0
- package/roles/mbse-modeling-engineer/SOURCES.md +20 -0
- package/roles/mbse-modeling-engineer/cli.py +263 -0
- package/roles/mbse-modeling-engineer/core/mbse_modeling_core.py +1348 -0
- package/roles/mbse-modeling-engineer/templates/mbse-plan-template.md +147 -0
- package/roles/mbse-modeling-engineer/tests/test_mbse_cli_bundle.py +180 -0
- package/roles/mbse-modeling-engineer/tests/test_mbse_modeling_engineer_core.py +321 -0
- package/roles/mbse-modeling-engineer/tests/test_role_mbse_modeling_engineer.py +140 -0
- package/roles/navigation-engineer/ROLE.md +175 -0
- package/roles/navigation-engineer/SOURCES.md +35 -0
- package/roles/navigation-engineer/cli.py +142 -0
- package/roles/navigation-engineer/core/navigation_engineer_core.py +1386 -0
- package/roles/navigation-engineer/templates/navigation-analysis-report-template.md +94 -0
- package/roles/navigation-engineer/tests/test_navigation_engineer_core.py +313 -0
- package/roles/navigation-engineer/tests/test_role_navigation_engineer.py +153 -0
- package/roles/numerical-analysis-engineer/templates/verification-memo-template.md +1 -1
- package/roles/numerical-analysis-engineer/tests/test_numerical_analysis_core.py +3 -2
- package/roles/quality-management-engineer/ROLE.md +161 -0
- package/roles/quality-management-engineer/SOURCES.md +36 -0
- package/roles/quality-management-engineer/cli.py +366 -0
- package/roles/quality-management-engineer/core/quality_management_core.py +1915 -0
- package/roles/quality-management-engineer/templates/qms-audit-report-template.md +230 -0
- package/roles/quality-management-engineer/tests/test_quality_management_cli_profile.py +127 -0
- package/roles/quality-management-engineer/tests/test_quality_management_core.py +245 -0
- package/roles/quality-management-engineer/tests/test_role_quality_management_engineer.py +133 -0
- package/roles/rocket-propulsion-engineer/ROLE.md +177 -0
- package/roles/rocket-propulsion-engineer/SOURCES.md +18 -0
- package/roles/rocket-propulsion-engineer/cli.py +284 -0
- package/roles/rocket-propulsion-engineer/core/rocket_propulsion_core.py +2205 -0
- package/roles/rocket-propulsion-engineer/templates/rocket-propulsion-report-template.md +141 -0
- package/roles/rocket-propulsion-engineer/tests/test_rocket_propulsion_cli_profile.py +147 -0
- package/roles/rocket-propulsion-engineer/tests/test_rocket_propulsion_core.py +221 -0
- package/roles/rocket-propulsion-engineer/tests/test_role_rocket_propulsion_engineer.py +179 -0
- package/roles/safety-assessment-engineer/ROLE.md +169 -0
- package/roles/safety-assessment-engineer/SOURCES.md +20 -0
- package/roles/safety-assessment-engineer/cli.py +345 -0
- package/roles/safety-assessment-engineer/core/safety_assessment_core.py +1348 -0
- package/roles/safety-assessment-engineer/templates/ssa-report-template.md +126 -0
- package/roles/safety-assessment-engineer/tests/test_role_safety_assessment.py +137 -0
- package/roles/safety-assessment-engineer/tests/test_safety_assessment_bundle.py +136 -0
- package/roles/safety-assessment-engineer/tests/test_safety_assessment_core.py +293 -0
- package/roles/stability-control-flight-test-engineer/ROLE.md +165 -0
- package/roles/stability-control-flight-test-engineer/SOURCES.md +40 -0
- package/roles/stability-control-flight-test-engineer/cli.py +439 -0
- package/roles/stability-control-flight-test-engineer/core/stability_control_flight_test_core.py +1596 -0
- package/roles/stability-control-flight-test-engineer/templates/stability-control-report-template.md +98 -0
- package/roles/stability-control-flight-test-engineer/tests/test_role_stability_control_flight_test.py +145 -0
- package/roles/stability-control-flight-test-engineer/tests/test_stability_control_flight_test_bundle.py +146 -0
- package/roles/stability-control-flight-test-engineer/tests/test_stability_control_flight_test_core.py +405 -0
- package/roles/systems-integration-engineer/ROLE.md +160 -0
- package/roles/systems-integration-engineer/SOURCES.md +22 -0
- package/roles/systems-integration-engineer/cli.py +315 -0
- package/roles/systems-integration-engineer/core/systems_integration_core.py +1310 -0
- package/roles/systems-integration-engineer/templates/sdai-plan-template.md +133 -0
- package/roles/systems-integration-engineer/tests/test_role_systems_integration_engineer.py +162 -0
- package/roles/systems-integration-engineer/tests/test_systems_integration_bundle.py +132 -0
- package/roles/systems-integration-engineer/tests/test_systems_integration_engineer_core.py +247 -0
package/lib/mcp.js
CHANGED
|
@@ -2,12 +2,44 @@
|
|
|
2
2
|
// Same wire protocol and host-config shape as Aero Agent Skills' MCP
|
|
3
3
|
// server (JetBrains AI Assistant/Junie, Claude Desktop, VS Code, Cursor,
|
|
4
4
|
// Windsurf all speak this identically) — implements initialize, ping,
|
|
5
|
-
// tools/list, tools/call
|
|
6
|
-
//
|
|
7
|
-
//
|
|
5
|
+
// tools/list, tools/call, plus the SEP-2640 resources model
|
|
6
|
+
// (resources/list, resources/read over role:// URIs) so roles are
|
|
7
|
+
// discoverable as resources, not only through tool calls. Anything else
|
|
8
|
+
// gets -32601, and requests without an id are notifications and never
|
|
9
|
+
// answered. Offline: every answer comes from the bundled manifest — no
|
|
10
|
+
// network, ever.
|
|
8
11
|
'use strict';
|
|
9
12
|
|
|
10
|
-
const { Catalog, version } = require('./catalog');
|
|
13
|
+
const { Catalog, tokens, version } = require('./catalog');
|
|
14
|
+
const fs = require('fs');
|
|
15
|
+
const path = require('path');
|
|
16
|
+
|
|
17
|
+
/* Reverse binding index: skill leaf path -> [role slugs that bind it].
|
|
18
|
+
Built once from ROLE.md frontmatter (skills_bound), cached. Lets a host
|
|
19
|
+
answer "which role owns the deliverable for this skill?" offline. */
|
|
20
|
+
let _reverseCache = null;
|
|
21
|
+
function reverseIndex(catalog) {
|
|
22
|
+
if (_reverseCache) return _reverseCache;
|
|
23
|
+
const inv = new Map();
|
|
24
|
+
const root = catalog.root; // roles tree (repo checkout or bundled)
|
|
25
|
+
for (const r of catalog.roles) {
|
|
26
|
+
const roleMd = path.join(root, r.slug, 'ROLE.md');
|
|
27
|
+
let text = '';
|
|
28
|
+
try { text = fs.readFileSync(roleMd, 'utf8'); } catch (e) { continue; }
|
|
29
|
+
const m = text.match(/^---\n([\s\S]*?)\n---/);
|
|
30
|
+
if (!m) continue;
|
|
31
|
+
const fm = m[1];
|
|
32
|
+
const block = fm.match(/^skills_bound:([\s\S]*?)(?=^[a-z_]+:|\Z)/m);
|
|
33
|
+
if (!block) continue;
|
|
34
|
+
for (const lm of block[1].matchAll(/^\s+-\s+([a-z0-9\-/]+)/gm)) {
|
|
35
|
+
const leaf = lm[1];
|
|
36
|
+
if (!inv.has(leaf)) inv.set(leaf, []);
|
|
37
|
+
inv.get(leaf).push(r.slug);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
_reverseCache = inv;
|
|
41
|
+
return _reverseCache;
|
|
42
|
+
}
|
|
11
43
|
|
|
12
44
|
const TOOLS = [
|
|
13
45
|
{
|
|
@@ -73,6 +105,21 @@ const TOOLS = [
|
|
|
73
105
|
additionalProperties: false,
|
|
74
106
|
},
|
|
75
107
|
},
|
|
108
|
+
{
|
|
109
|
+
name: 'suggest_role',
|
|
110
|
+
description: 'Reverse binding: given a bound skill leaf path (e.g. avionics/do178c/planning) '
|
|
111
|
+
+ 'or a task in plain words, return the role(s) that own the end-to-end deliverable for it. '
|
|
112
|
+
+ 'Use when a loaded skill says "who executes this method?" — the role pulls the skill '
|
|
113
|
+
+ 'forward; this tool inverts the map. For a task query it ranks roles by title/domain overlap.',
|
|
114
|
+
inputSchema: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
properties: {
|
|
117
|
+
skill: { type: 'string', description: 'Bound skill leaf path (family/pack/skill).' },
|
|
118
|
+
task: { type: 'string', description: 'Plain-words task to rank roles for (alternative to skill).' },
|
|
119
|
+
},
|
|
120
|
+
additionalProperties: false,
|
|
121
|
+
},
|
|
122
|
+
},
|
|
76
123
|
];
|
|
77
124
|
|
|
78
125
|
function text(t) {
|
|
@@ -134,11 +181,71 @@ function callTool(catalog, name, args) {
|
|
|
134
181
|
`${s.id}: ${s.name}\n publisher: ${s.publisher}${s.gated ? ' (gated: no verbatim text)' : ''}\n roles: ${s.roles.join(', ')}`)
|
|
135
182
|
.join('\n\n'));
|
|
136
183
|
}
|
|
184
|
+
case 'suggest_role': {
|
|
185
|
+
const inv = reverseIndex(catalog);
|
|
186
|
+
if (args.skill) {
|
|
187
|
+
const skill = String(args.skill).replace(/\/+$/, '');
|
|
188
|
+
const roles = inv.get(skill) || [];
|
|
189
|
+
if (roles.length === 0) {
|
|
190
|
+
const prefixHits = [...inv.entries()].filter(([p]) => p.startsWith(skill + '/')).slice(0, 10);
|
|
191
|
+
if (prefixHits.length === 0) return toolError(`no role binds skill '${skill}' (unbound leaf — wave candidate).`);
|
|
192
|
+
return text(`leaves under ${skill} bound by roles:\n` + prefixHits.map(([p, rs]) => `${p}: ${rs.join(', ')}`).join('\n'));
|
|
193
|
+
}
|
|
194
|
+
return text(`${skill}\n bound by roles:\n` + roles.map((r) => ` -> roles/${r}/ROLE.md`).join('\n'));
|
|
195
|
+
}
|
|
196
|
+
if (args.task) {
|
|
197
|
+
const q = new Set(tokens(String(args.task)));
|
|
198
|
+
const scored = catalog.roles.map((r) => {
|
|
199
|
+
const hay = new Set(tokens(`${r.title} ${r.deliverable_type} ${r.domain} ${r.slug}`));
|
|
200
|
+
let s = 0; for (const w of q) if (hay.has(w)) s += 1;
|
|
201
|
+
return { r, s };
|
|
202
|
+
}).filter((x) => x.s > 0).sort((a, b) => b.s - a.s || (a.r.slug < b.r.slug ? -1 : 1)).slice(0, 8);
|
|
203
|
+
if (scored.length === 0) return toolError('no role matches that task. Call list_domains to browse.');
|
|
204
|
+
return text(scored.map(({ r, s }) => `${r.slug} (score ${s}): ${r.title} — ${r.deliverable_type}`).join('\n'));
|
|
205
|
+
}
|
|
206
|
+
return toolError('suggest_role needs a skill leaf path or a task query.');
|
|
207
|
+
}
|
|
137
208
|
default:
|
|
138
209
|
return toolError(`unknown tool '${name}'`);
|
|
139
210
|
}
|
|
140
211
|
}
|
|
141
212
|
|
|
213
|
+
function resourcesList(catalog) {
|
|
214
|
+
// SEP-2640: roles are resources under the role:// namespace. Every role
|
|
215
|
+
// is listed so hosts can enumerate without guessing slugs; domains are
|
|
216
|
+
// collection URIs.
|
|
217
|
+
const out = [];
|
|
218
|
+
const seen = new Set();
|
|
219
|
+
const push = (uri, name, kind) => {
|
|
220
|
+
if (seen.has(uri)) return;
|
|
221
|
+
seen.add(uri);
|
|
222
|
+
out.push({ uri, name, mimeType: 'text/markdown', description: `${kind} — ${name}` });
|
|
223
|
+
};
|
|
224
|
+
for (const r of catalog.roles) {
|
|
225
|
+
push(`role://${r.slug}`, r.slug, 'role');
|
|
226
|
+
push(`role://${r.domain}`, r.domain, 'role domain');
|
|
227
|
+
}
|
|
228
|
+
push('role://', 'role bank root', 'role');
|
|
229
|
+
return out;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function readResource(catalog, uri) {
|
|
233
|
+
const u = String(uri || '');
|
|
234
|
+
if (u === 'role://' || u === 'role:') {
|
|
235
|
+
return text(`Aero Agent Roles — resource root\n\nDomains:\n${domainsSummary(catalog)}\n\nLoad a domain or role with role://<domain> or role://<slug>\n`);
|
|
236
|
+
}
|
|
237
|
+
if (!u.startsWith('role://')) return toolError(`unknown resource uri '${uri}' (expected role://…)`);
|
|
238
|
+
const path = u.slice('role://'.length).replace(/\/+$/, '');
|
|
239
|
+
if (!path) return text(`Aero Agent Roles — resource root\n\n${domainsSummary(catalog)}\n`);
|
|
240
|
+
const role = catalog.find(path);
|
|
241
|
+
if (role) return text(catalog.readRoleMd(role.slug));
|
|
242
|
+
const inDomain = catalog.roles.filter((r) => r.domain === path);
|
|
243
|
+
if (inDomain.length > 0) {
|
|
244
|
+
return text(`${path} — ${inDomain.length} roles\n` + inDomain.map((r) => `${r.slug}: ${r.title} — ${r.deliverable_type}`).join('\n'));
|
|
245
|
+
}
|
|
246
|
+
return toolError(`no role or domain '${path}'. Closest: ${catalog.search(path.replace(/-/g, ' '), 3).map((h) => h.role.slug).join(', ') || 'none'}`);
|
|
247
|
+
}
|
|
248
|
+
|
|
142
249
|
function serve() {
|
|
143
250
|
const catalog = new Catalog();
|
|
144
251
|
let buffer = '';
|
|
@@ -156,7 +263,10 @@ function serve() {
|
|
|
156
263
|
case 'initialize':
|
|
157
264
|
return reply(req.id, {
|
|
158
265
|
protocolVersion: (req.params && req.params.protocolVersion) || '2025-06-18',
|
|
159
|
-
capabilities: {
|
|
266
|
+
capabilities: {
|
|
267
|
+
tools: { listChanged: false },
|
|
268
|
+
resources: { subscribe: false, listChanged: false },
|
|
269
|
+
},
|
|
160
270
|
serverInfo: { name: 'aero-agent-roles', version: version() },
|
|
161
271
|
});
|
|
162
272
|
case 'ping':
|
|
@@ -169,6 +279,20 @@ function serve() {
|
|
|
169
279
|
} catch (e) {
|
|
170
280
|
return reply(req.id, toolError(`tool failed: ${e.message}`));
|
|
171
281
|
}
|
|
282
|
+
case 'resources/list':
|
|
283
|
+
try {
|
|
284
|
+
return reply(req.id, { resources: resourcesList(catalog) });
|
|
285
|
+
} catch (e) {
|
|
286
|
+
return reply(req.id, undefined, { code: -32603, message: `resources/list failed: ${e.message}` });
|
|
287
|
+
}
|
|
288
|
+
case 'resources/read':
|
|
289
|
+
try {
|
|
290
|
+
const uri = req.params && req.params.uri;
|
|
291
|
+
const res = readResource(catalog, uri);
|
|
292
|
+
return reply(req.id, { contents: [{ uri, mimeType: 'text/markdown', text: res.content[0].text }] });
|
|
293
|
+
} catch (e) {
|
|
294
|
+
return reply(req.id, undefined, { code: -32603, message: `resources/read failed: ${e.message}` });
|
|
295
|
+
}
|
|
172
296
|
default:
|
|
173
297
|
if (isNotification) return undefined;
|
|
174
298
|
return reply(req.id, undefined, { code: -32601, message: `method not found: ${req.method}` });
|
|
@@ -196,4 +320,4 @@ function serve() {
|
|
|
196
320
|
process.stdin.on('end', () => process.exit(0));
|
|
197
321
|
}
|
|
198
322
|
|
|
199
|
-
module.exports = { serve, callTool, TOOLS };
|
|
323
|
+
module.exports = { serve, callTool, TOOLS, resourcesList, readResource };
|
package/manifest.json
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "aero-agent-roles/manifest@1",
|
|
3
3
|
"counts": {
|
|
4
|
-
"roles":
|
|
4
|
+
"roles": 38,
|
|
5
5
|
"domains": 12,
|
|
6
|
-
"skills_bound":
|
|
7
|
-
"tests":
|
|
8
|
-
"standards":
|
|
6
|
+
"skills_bound": 597,
|
|
7
|
+
"tests": 1519,
|
|
8
|
+
"standards": 27
|
|
9
9
|
},
|
|
10
10
|
"roles": [
|
|
11
|
+
{
|
|
12
|
+
"slug": "adcs-engineer",
|
|
13
|
+
"title": "ADCS Engineer",
|
|
14
|
+
"domain": "space-systems",
|
|
15
|
+
"deliverable_type": "Attitude Determination and Control Subsystem Report",
|
|
16
|
+
"status": "draft",
|
|
17
|
+
"standards": [
|
|
18
|
+
"ecss"
|
|
19
|
+
],
|
|
20
|
+
"skills_bound": 14,
|
|
21
|
+
"tests": 46,
|
|
22
|
+
"stage_preview": "adcs/pointing-error-budget -> adcs/environmental-disturbance-tor -> adcs/gravity-gradient-stabilizatio -> adcs/star-tracker -> adcs/magnetometer-calibration"
|
|
23
|
+
},
|
|
11
24
|
{
|
|
12
25
|
"slug": "aerodynamics-engineer",
|
|
13
26
|
"title": "Aerodynamics Engineer",
|
|
@@ -34,6 +47,34 @@
|
|
|
34
47
|
"tests": 27,
|
|
35
48
|
"stage_preview": "constraint-analysis -> sizing-mission-profile -> openvsp-geometry -> ws-tw-trade -> weight-estimation + tow-estimation"
|
|
36
49
|
},
|
|
50
|
+
{
|
|
51
|
+
"slug": "aircraft-performance-engineer",
|
|
52
|
+
"title": "Aircraft Performance Engineer",
|
|
53
|
+
"domain": "flight-mechanics",
|
|
54
|
+
"deliverable_type": "Aircraft Performance Analysis Report",
|
|
55
|
+
"status": "draft",
|
|
56
|
+
"standards": [
|
|
57
|
+
"far-25",
|
|
58
|
+
"far-29"
|
|
59
|
+
],
|
|
60
|
+
"skills_bound": 9,
|
|
61
|
+
"tests": 73,
|
|
62
|
+
"stage_preview": "(workbook planning) -> flight-mechanics/performance/balan -> flight-mechanics/performance/prope -> flight-mechanics/performance/rotor -> flight-mechanics/performance/rotor"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"slug": "aircraft-systems-sizing-engineer",
|
|
66
|
+
"title": "Aircraft Systems Sizing Engineer",
|
|
67
|
+
"domain": "vehicle-design",
|
|
68
|
+
"deliverable_type": "Aircraft System Sizing Report",
|
|
69
|
+
"status": "draft",
|
|
70
|
+
"standards": [
|
|
71
|
+
"far-25",
|
|
72
|
+
"cs-25"
|
|
73
|
+
],
|
|
74
|
+
"skills_bound": 14,
|
|
75
|
+
"tests": 30,
|
|
76
|
+
"stage_preview": "sizing/aircraft-electrical-load-an -> sizing/air-cycle-machine-sizing -> sizing/avionics-bay-cooling-sizing -> sizing/aircraft-oxygen-system-sizi -> sizing/brake-energy-sizing, sizing"
|
|
77
|
+
},
|
|
37
78
|
{
|
|
38
79
|
"slug": "airworthiness-compliance-engineer",
|
|
39
80
|
"title": "Airworthiness Compliance Engineer",
|
|
@@ -61,6 +102,46 @@
|
|
|
61
102
|
"tests": 32,
|
|
62
103
|
"stage_preview": "as9100/internal-quality-audit -> as9100/document-control -> as9100/management-review -> as9100/risk-management + quality -> as9100/nonconformance-control + co"
|
|
63
104
|
},
|
|
105
|
+
{
|
|
106
|
+
"slug": "autopilot-control-engineer",
|
|
107
|
+
"title": "Autopilot Control Engineer",
|
|
108
|
+
"domain": "gnc-autonomy",
|
|
109
|
+
"deliverable_type": "autopilot control law design package",
|
|
110
|
+
"status": "draft",
|
|
111
|
+
"standards": [
|
|
112
|
+
"mil-std-1797a"
|
|
113
|
+
],
|
|
114
|
+
"skills_bound": 12,
|
|
115
|
+
"tests": 46,
|
|
116
|
+
"stage_preview": "gnc-autonomy/control/state-space-a -> gnc-autonomy/control/pid-control-d -> gnc-autonomy/control/frequency-res -> gnc-autonomy/control/root-locus-de -> gnc-autonomy/control/frequency-res"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"slug": "boundary-layer-engineer",
|
|
120
|
+
"title": "Boundary-Layer Engineer",
|
|
121
|
+
"domain": "aerodynamics",
|
|
122
|
+
"deliverable_type": "boundary-layer and viscous drag analysis report",
|
|
123
|
+
"status": "draft",
|
|
124
|
+
"standards": [
|
|
125
|
+
"naca-tr-824"
|
|
126
|
+
],
|
|
127
|
+
"skills_bound": 10,
|
|
128
|
+
"tests": 27,
|
|
129
|
+
"stage_preview": "aerodynamics/boundary-layer/bounda -> aerodynamics/boundary-layer/squire -> aerodynamics/boundary-layer/mangle -> aerodynamics/boundary-layer/lamina -> aerodynamics/boundary-layer/rough-"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"slug": "composites-structures-engineer",
|
|
133
|
+
"title": "Composite Structures Engineer (Analysis + Certification Evidence)",
|
|
134
|
+
"domain": "structures",
|
|
135
|
+
"deliverable_type": "composite structure analysis + certification report",
|
|
136
|
+
"status": "draft",
|
|
137
|
+
"standards": [
|
|
138
|
+
"far-25",
|
|
139
|
+
"cmh-17"
|
|
140
|
+
],
|
|
141
|
+
"skills_bound": 12,
|
|
142
|
+
"tests": 36,
|
|
143
|
+
"stage_preview": "cmh17-allowables -> laminate-stiffness, laminate-first -> failure-criteria, laminate-first-p -> laminate-hygrothermal-response -> laminate-plate-buckling"
|
|
144
|
+
},
|
|
64
145
|
{
|
|
65
146
|
"slug": "data-bus-avionics-engineer",
|
|
66
147
|
"title": "Data Bus / Avionics Network Engineer",
|
|
@@ -129,6 +210,21 @@
|
|
|
129
210
|
"tests": 41,
|
|
130
211
|
"stage_preview": "isa-atmosphere + density-altitude -> finite-difference-derivatives + nu -> least-squares-regression + optimiz -> eigenvalue-decomposition + singula -> fast-fourier-transform + fir-filte"
|
|
131
212
|
},
|
|
213
|
+
{
|
|
214
|
+
"slug": "fem-analysis-engineer",
|
|
215
|
+
"title": "Finite Element Analysis Engineer",
|
|
216
|
+
"domain": "structures",
|
|
217
|
+
"deliverable_type": "Finite Element Analysis Report",
|
|
218
|
+
"status": "draft",
|
|
219
|
+
"standards": [
|
|
220
|
+
"far-25",
|
|
221
|
+
"cs-25",
|
|
222
|
+
"mmpsd"
|
|
223
|
+
],
|
|
224
|
+
"skills_bound": 8,
|
|
225
|
+
"tests": 27,
|
|
226
|
+
"stage_preview": "structures/fem/truss-analysis -> structures/fem/beam-frame-analysis -> structures/fem/beam-column-analysi -> structures/fem/buckling-analysis -> structures/fem/beam-vibration"
|
|
227
|
+
},
|
|
132
228
|
{
|
|
133
229
|
"slug": "flight-management-engineer",
|
|
134
230
|
"title": "Flight Management Engineer",
|
|
@@ -158,6 +254,19 @@
|
|
|
158
254
|
"tests": 42,
|
|
159
255
|
"stage_preview": "breguet-range + breguet-endurance -> climb-performance + descent-perfor -> oei-climb-gradient + energy-height -> rotorcraft-hover-performance + rot -> longitudinal-stability + lateral-d"
|
|
160
256
|
},
|
|
257
|
+
{
|
|
258
|
+
"slug": "flight-software-engineer",
|
|
259
|
+
"title": "Flight Software Engineer",
|
|
260
|
+
"domain": "avionics",
|
|
261
|
+
"deliverable_type": "Flight Software Design and Verification Plan",
|
|
262
|
+
"status": "draft",
|
|
263
|
+
"standards": [
|
|
264
|
+
"do-178c"
|
|
265
|
+
],
|
|
266
|
+
"skills_bound": 4,
|
|
267
|
+
"tests": 54,
|
|
268
|
+
"stage_preview": "avionics/fsw/cfs-architecture -> avionics/fsw/fprime-component -> avionics/fsw/fprime-component -> avionics/fsw/cfs-architecture -> avionics/fsw/real-time-scheduling"
|
|
269
|
+
},
|
|
161
270
|
{
|
|
162
271
|
"slug": "flight-test-engineer",
|
|
163
272
|
"title": "Flight Test Engineer",
|
|
@@ -186,6 +295,20 @@
|
|
|
186
295
|
"tests": 45,
|
|
187
296
|
"stage_preview": "flight-test-data-reduction -> (ISA physics, climb leaf method) -> takeoff-distance-determination + e -> landing-distance-determination -> level-acceleration-test + engine-f"
|
|
188
297
|
},
|
|
298
|
+
{
|
|
299
|
+
"slug": "flight-test-planning-engineer",
|
|
300
|
+
"title": "Flight Test Planning Engineer",
|
|
301
|
+
"domain": "flight-test-operations",
|
|
302
|
+
"deliverable_type": "Flight Test Plan and Requirements Traceability",
|
|
303
|
+
"status": "draft",
|
|
304
|
+
"standards": [
|
|
305
|
+
"far-25",
|
|
306
|
+
"cs-25"
|
|
307
|
+
],
|
|
308
|
+
"skills_bound": 7,
|
|
309
|
+
"tests": 54,
|
|
310
|
+
"stage_preview": "role core (standalone traceability -> flight-test-operations/planning/te -> flight-test-operations/planning/fl -> flight-test-operations/planning/te -> flight-test-operations/planning/pc"
|
|
311
|
+
},
|
|
189
312
|
{
|
|
190
313
|
"slug": "gnc-engineer",
|
|
191
314
|
"title": "Guidance, Navigation and Control (GNC) Engineer",
|
|
@@ -227,6 +350,35 @@
|
|
|
227
350
|
"tests": 35,
|
|
228
351
|
"stage_preview": "(ISA, offline) -> isentropic-flow-relations -> transonic-similarity + swept-wing- -> normal-shock + oblique-shock + reg -> prandtl-meyer"
|
|
229
352
|
},
|
|
353
|
+
{
|
|
354
|
+
"slug": "mbse-modeling-engineer",
|
|
355
|
+
"title": "MBSE Modeling Engineer",
|
|
356
|
+
"domain": "systems-engineering-safety",
|
|
357
|
+
"deliverable_type": "system model architecture + MBSE plan",
|
|
358
|
+
"status": "draft",
|
|
359
|
+
"standards": [
|
|
360
|
+
"arp4754a",
|
|
361
|
+
"arp4761a"
|
|
362
|
+
],
|
|
363
|
+
"skills_bound": 6,
|
|
364
|
+
"tests": 49,
|
|
365
|
+
"stage_preview": "mbse/requirements-modeling -> mbse/systems-engineering -> mbse/sysml-modeling -> mbse/systems-engineering -> mbse/trade-study-analysis, mbse/sy"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"slug": "navigation-engineer",
|
|
369
|
+
"title": "Navigation Engineer",
|
|
370
|
+
"domain": "gnc-autonomy",
|
|
371
|
+
"deliverable_type": "navigation architecture and position error analysis report",
|
|
372
|
+
"status": "draft",
|
|
373
|
+
"standards": [
|
|
374
|
+
"do-229",
|
|
375
|
+
"do-208",
|
|
376
|
+
"icao-annex-10"
|
|
377
|
+
],
|
|
378
|
+
"skills_bound": 13,
|
|
379
|
+
"tests": 27,
|
|
380
|
+
"stage_preview": "navigation-frames -> inertial-navigation -> gnss-pseudorange-positioning + dil -> gnss-raim-fde -> gnss-carrier-smoothing + gnss-dopp"
|
|
381
|
+
},
|
|
230
382
|
{
|
|
231
383
|
"slug": "ndt-engineer",
|
|
232
384
|
"title": "NDT Engineer",
|
|
@@ -267,6 +419,48 @@
|
|
|
267
419
|
"tests": 31,
|
|
268
420
|
"stage_preview": "gas-turbine-cycle + real-cycle-eff -> bypass-ratio-trade + regenerative- -> turbofan-off-design -> compressor-map + multi-stage-compr -> turbine-blade-cooling"
|
|
269
421
|
},
|
|
422
|
+
{
|
|
423
|
+
"slug": "quality-management-engineer",
|
|
424
|
+
"title": "AS9100 Quality Management Engineer",
|
|
425
|
+
"domain": "manufacturing-quality",
|
|
426
|
+
"deliverable_type": "AS9100 quality management system audit report",
|
|
427
|
+
"status": "draft",
|
|
428
|
+
"standards": [
|
|
429
|
+
"as9100"
|
|
430
|
+
],
|
|
431
|
+
"skills_bound": 10,
|
|
432
|
+
"tests": 42,
|
|
433
|
+
"stage_preview": "manufacturing-quality/as9100/gage- -> manufacturing-quality/as9100/gage- -> manufacturing-quality/as9100/attri -> manufacturing-quality/as9100/stati -> manufacturing-quality/as9100/indiv"
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"slug": "rocket-propulsion-engineer",
|
|
437
|
+
"title": "Rocket Propulsion Engineer",
|
|
438
|
+
"domain": "propulsion",
|
|
439
|
+
"deliverable_type": "rocket propulsion system design report",
|
|
440
|
+
"status": "draft",
|
|
441
|
+
"standards": [
|
|
442
|
+
"ecss"
|
|
443
|
+
],
|
|
444
|
+
"skills_bound": 14,
|
|
445
|
+
"tests": 38,
|
|
446
|
+
"stage_preview": "propulsion/rocket/propellant-selec -> propulsion/rocket/rocket-sizing, r -> propulsion/rocket/rocket-gravity-l -> propulsion/rocket/rocket-engine-cy -> propulsion/rocket/combustion-chamb"
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"slug": "safety-assessment-engineer",
|
|
450
|
+
"title": "Safety Assessment Engineer (ARP4761A)",
|
|
451
|
+
"domain": "systems-engineering-safety",
|
|
452
|
+
"deliverable_type": "Aircraft/System Safety Assessment Report (ARP4761A)",
|
|
453
|
+
"status": "draft",
|
|
454
|
+
"standards": [
|
|
455
|
+
"arp4761a",
|
|
456
|
+
"arp4754a",
|
|
457
|
+
"far-25",
|
|
458
|
+
"cs-25"
|
|
459
|
+
],
|
|
460
|
+
"skills_bound": 20,
|
|
461
|
+
"tests": 47,
|
|
462
|
+
"stage_preview": "arp4761a/safety-assessment -> arp4761a/functional-hazard-assessm -> arp4761a/preliminary-system-safety -> arp4761a/fta-fmea -> arp4761a/fault-tree-importance-mea"
|
|
463
|
+
},
|
|
270
464
|
{
|
|
271
465
|
"slug": "space-systems-engineer",
|
|
272
466
|
"title": "Space Systems Engineer",
|
|
@@ -280,6 +474,20 @@
|
|
|
280
474
|
"tests": 33,
|
|
281
475
|
"stage_preview": "mission-delta-v-budget + keplerian -> hohmann-transfer + bi-elliptic-tra -> launch-window-analysis + c3-depart -> satellite-coverage + walker-delta- -> eclipse-time + orbital-perturbatio"
|
|
282
476
|
},
|
|
477
|
+
{
|
|
478
|
+
"slug": "stability-control-flight-test-engineer",
|
|
479
|
+
"title": "Stability and Control Flight Test Engineer",
|
|
480
|
+
"domain": "flight-test-operations",
|
|
481
|
+
"deliverable_type": "Stability and Control Flight Test Report",
|
|
482
|
+
"status": "draft",
|
|
483
|
+
"standards": [
|
|
484
|
+
"far-25",
|
|
485
|
+
"cs-25"
|
|
486
|
+
],
|
|
487
|
+
"skills_bound": 4,
|
|
488
|
+
"tests": 53,
|
|
489
|
+
"stage_preview": "(item facts; no leaf) -> flight-test-operations/stability/s -> flight-test-operations/stability/d -> flight-test-operations/stability/l -> flight-test-operations/stability/c"
|
|
490
|
+
},
|
|
283
491
|
{
|
|
284
492
|
"slug": "state-estimation-engineer",
|
|
285
493
|
"title": "State Estimation Engineer",
|
|
@@ -306,6 +514,20 @@
|
|
|
306
514
|
"skills_bound": 38,
|
|
307
515
|
"tests": 37,
|
|
308
516
|
"stage_preview": "gust-maneuver-loads + landing-grou -> beam-frame-analysis + truss-analys -> calculix-nonlinear + buckling-anal -> lug-joint-analysis + contact-analy -> modal-analysis + beam-vibration"
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
"slug": "systems-integration-engineer",
|
|
520
|
+
"title": "Systems Integration Engineer",
|
|
521
|
+
"domain": "systems-engineering-safety",
|
|
522
|
+
"deliverable_type": "System Development Assurance and Integration Plan (ARP4754A)",
|
|
523
|
+
"status": "draft",
|
|
524
|
+
"standards": [
|
|
525
|
+
"arp4754a",
|
|
526
|
+
"arp4761a"
|
|
527
|
+
],
|
|
528
|
+
"skills_bound": 8,
|
|
529
|
+
"tests": 41,
|
|
530
|
+
"stage_preview": "arp4754a/systems-planning -> arp4754a/development-assurance-lev -> arp4754a/requirements-allocation -> arp4754a/requirements-traceability -> arp4754a/derived-requirements"
|
|
309
531
|
}
|
|
310
532
|
],
|
|
311
533
|
"standards": [
|
|
@@ -344,7 +566,21 @@
|
|
|
344
566
|
"roles": [
|
|
345
567
|
"do254-hardware-engineer",
|
|
346
568
|
"guidance-engineer",
|
|
347
|
-
"
|
|
569
|
+
"mbse-modeling-engineer",
|
|
570
|
+
"safety-assessment-engineer",
|
|
571
|
+
"state-estimation-engineer",
|
|
572
|
+
"systems-integration-engineer"
|
|
573
|
+
]
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
"id": "arp4761a",
|
|
577
|
+
"name": "SAE ARP4761A, Guidelines and Methods for Conducting the Safety Assessment Process on Civil Airborne Systems and Equipment",
|
|
578
|
+
"publisher": "SAE",
|
|
579
|
+
"gated": true,
|
|
580
|
+
"roles": [
|
|
581
|
+
"mbse-modeling-engineer",
|
|
582
|
+
"safety-assessment-engineer",
|
|
583
|
+
"systems-integration-engineer"
|
|
348
584
|
]
|
|
349
585
|
},
|
|
350
586
|
{
|
|
@@ -354,7 +590,8 @@
|
|
|
354
590
|
"gated": true,
|
|
355
591
|
"roles": [
|
|
356
592
|
"as9100-quality-auditor",
|
|
357
|
-
"ndt-engineer"
|
|
593
|
+
"ndt-engineer",
|
|
594
|
+
"quality-management-engineer"
|
|
358
595
|
]
|
|
359
596
|
},
|
|
360
597
|
{
|
|
@@ -375,15 +612,29 @@
|
|
|
375
612
|
"engineering-analysis-engineer"
|
|
376
613
|
]
|
|
377
614
|
},
|
|
615
|
+
{
|
|
616
|
+
"id": "cmh-17",
|
|
617
|
+
"name": "cmh-17",
|
|
618
|
+
"publisher": "unknown",
|
|
619
|
+
"gated": true,
|
|
620
|
+
"roles": [
|
|
621
|
+
"composites-structures-engineer"
|
|
622
|
+
]
|
|
623
|
+
},
|
|
378
624
|
{
|
|
379
625
|
"id": "cs-25",
|
|
380
626
|
"name": "EASA CS-25, Certification Specifications",
|
|
381
627
|
"publisher": "EASA",
|
|
382
|
-
"gated":
|
|
628
|
+
"gated": true,
|
|
383
629
|
"roles": [
|
|
630
|
+
"aircraft-systems-sizing-engineer",
|
|
384
631
|
"airworthiness-compliance-engineer",
|
|
632
|
+
"fem-analysis-engineer",
|
|
385
633
|
"flight-test-performance-engineer",
|
|
386
|
-
"
|
|
634
|
+
"flight-test-planning-engineer",
|
|
635
|
+
"guidance-engineer",
|
|
636
|
+
"safety-assessment-engineer",
|
|
637
|
+
"stability-control-flight-test-engineer"
|
|
387
638
|
]
|
|
388
639
|
},
|
|
389
640
|
{
|
|
@@ -401,7 +652,26 @@
|
|
|
401
652
|
"publisher": "RTCA/EUROCAE",
|
|
402
653
|
"gated": true,
|
|
403
654
|
"roles": [
|
|
404
|
-
"do178c-cert-engineer"
|
|
655
|
+
"do178c-cert-engineer",
|
|
656
|
+
"flight-software-engineer"
|
|
657
|
+
]
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"id": "do-208",
|
|
661
|
+
"name": "RTCA DO-208, Minimum Operational Performance Standards for Airborne Supplemental Navigation Equipment Using GPS",
|
|
662
|
+
"publisher": "RTCA",
|
|
663
|
+
"gated": true,
|
|
664
|
+
"roles": [
|
|
665
|
+
"navigation-engineer"
|
|
666
|
+
]
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"id": "do-229",
|
|
670
|
+
"name": "RTCA DO-229, Minimum Operational Performance Standards for GPS/WAAS Airborne Equipment",
|
|
671
|
+
"publisher": "RTCA",
|
|
672
|
+
"gated": true,
|
|
673
|
+
"roles": [
|
|
674
|
+
"navigation-engineer"
|
|
405
675
|
]
|
|
406
676
|
},
|
|
407
677
|
{
|
|
@@ -437,6 +707,8 @@
|
|
|
437
707
|
"publisher": "ECSS",
|
|
438
708
|
"gated": true,
|
|
439
709
|
"roles": [
|
|
710
|
+
"adcs-engineer",
|
|
711
|
+
"rocket-propulsion-engineer",
|
|
440
712
|
"space-systems-engineer"
|
|
441
713
|
]
|
|
442
714
|
},
|
|
@@ -444,18 +716,34 @@
|
|
|
444
716
|
"id": "far-25",
|
|
445
717
|
"name": "14 CFR Part 25, Airworthiness Standards: Transport Category Airplanes",
|
|
446
718
|
"publisher": "FAA",
|
|
447
|
-
"gated":
|
|
719
|
+
"gated": true,
|
|
448
720
|
"roles": [
|
|
449
721
|
"aerodynamics-engineer",
|
|
450
722
|
"aircraft-design-engineer",
|
|
723
|
+
"aircraft-performance-engineer",
|
|
724
|
+
"aircraft-systems-sizing-engineer",
|
|
451
725
|
"airworthiness-compliance-engineer",
|
|
726
|
+
"composites-structures-engineer",
|
|
727
|
+
"fem-analysis-engineer",
|
|
452
728
|
"flight-mechanics-engineer",
|
|
453
729
|
"flight-test-engineer",
|
|
454
730
|
"flight-test-performance-engineer",
|
|
731
|
+
"flight-test-planning-engineer",
|
|
455
732
|
"guidance-engineer",
|
|
733
|
+
"safety-assessment-engineer",
|
|
734
|
+
"stability-control-flight-test-engineer",
|
|
456
735
|
"structures-loads-engineer"
|
|
457
736
|
]
|
|
458
737
|
},
|
|
738
|
+
{
|
|
739
|
+
"id": "far-29",
|
|
740
|
+
"name": "far-29",
|
|
741
|
+
"publisher": "unknown",
|
|
742
|
+
"gated": true,
|
|
743
|
+
"roles": [
|
|
744
|
+
"aircraft-performance-engineer"
|
|
745
|
+
]
|
|
746
|
+
},
|
|
459
747
|
{
|
|
460
748
|
"id": "far-33",
|
|
461
749
|
"name": "14 CFR Part 33, Airworthiness Standards: Aircraft Engines",
|
|
@@ -465,6 +753,15 @@
|
|
|
465
753
|
"propulsion-engineer"
|
|
466
754
|
]
|
|
467
755
|
},
|
|
756
|
+
{
|
|
757
|
+
"id": "icao-annex-10",
|
|
758
|
+
"name": "ICAO Annex 10, Aeronautical Telecommunications (Vol I: Radio Navigation Aids)",
|
|
759
|
+
"publisher": "ICAO",
|
|
760
|
+
"gated": true,
|
|
761
|
+
"roles": [
|
|
762
|
+
"navigation-engineer"
|
|
763
|
+
]
|
|
764
|
+
},
|
|
468
765
|
{
|
|
469
766
|
"id": "mil-std-1553",
|
|
470
767
|
"name": "MIL-STD-1553B, Digital Time Division Command/Response Multiplex Data Bus",
|
|
@@ -478,8 +775,9 @@
|
|
|
478
775
|
"id": "mil-std-1797a",
|
|
479
776
|
"name": "MIL-STD-1797A, Flying Qualities of Piloted Aircraft",
|
|
480
777
|
"publisher": "US DoD",
|
|
481
|
-
"gated":
|
|
778
|
+
"gated": true,
|
|
482
779
|
"roles": [
|
|
780
|
+
"autopilot-control-engineer",
|
|
483
781
|
"flight-mechanics-engineer",
|
|
484
782
|
"flight-test-engineer",
|
|
485
783
|
"gnc-engineer"
|
|
@@ -491,6 +789,7 @@
|
|
|
491
789
|
"publisher": "Battelle / FAA",
|
|
492
790
|
"gated": true,
|
|
493
791
|
"roles": [
|
|
792
|
+
"fem-analysis-engineer",
|
|
494
793
|
"structures-loads-engineer"
|
|
495
794
|
]
|
|
496
795
|
},
|
|
@@ -500,6 +799,7 @@
|
|
|
500
799
|
"publisher": "NACA/NASA (public domain)",
|
|
501
800
|
"gated": true,
|
|
502
801
|
"roles": [
|
|
802
|
+
"boundary-layer-engineer",
|
|
503
803
|
"high-speed-aerodynamics-engineer"
|
|
504
804
|
]
|
|
505
805
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aero-agent-roles",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "The role layer for aerospace engineering agents: professional roles that bind verified Aero Agent Skills into end-to-end deliverables, with evidence gates and a human sign-off. A CLI and an MCP server. By Ashforde OU.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Ashforde OU <contact@ashforde.org> (https://ashforde.org)",
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
],
|
|
23
23
|
"scripts": {
|
|
24
24
|
"prepack": "node scripts/prepack.js",
|
|
25
|
-
"test": "node test/smoke.mjs"
|
|
25
|
+
"test": "node test/smoke.mjs",
|
|
26
|
+
"mcp": "node bin/aero-agent-roles.js mcp",
|
|
27
|
+
"mcp:verify": "node test/smoke.mjs"
|
|
26
28
|
},
|
|
27
29
|
"engines": {
|
|
28
30
|
"node": ">=18"
|
|
@@ -41,4 +43,4 @@
|
|
|
41
43
|
"systems-engineering",
|
|
42
44
|
"skills-library"
|
|
43
45
|
]
|
|
44
|
-
}
|
|
46
|
+
}
|