Phase V1-A of the Engineering V1 Completion Plan. Scope was kept tight
per the plan: a single Q-001 shape fix and an integration test that
proves the four pillar queries work end-to-end against one seed graph.
Code change:
- subsystem_contents() in src/atocore/engineering/queries.py returns
{subsystem, contains: [{id, type, entity_type, name, status}]} by
walking inbound part_of edges (the inverse of CONTAINS), filtered
to active children. `type` matches the catalog spec; `entity_type`
preserves parity with the rest of this module's response shape.
- GET /entities/Subsystem/{id}?expand=contains route in routes.py
matches the Q-001 spec invocation verbatim; 400 on unsupported
expand, 404 on missing-or-wrong-type.
- Aliased under /v1.
- The existing project-wide /engineering/projects/{name}/systems
route stays as-is for Q-004 (whole-project tree).
V1-A acceptance test (tests/test_v1_a_pillar_queries.py):
- Q-001 subsystem-scoped: Optics → Primary Mirror + Diverger Lens
- Q-005 requirements_for: Primary Mirror has its single satisfied req
- Q-006 orphan_requirements: orphan surfaces, satisfied does not
- Q-017 evidence_chain: supported claim has the FEA result via
'supports'; unsupported claim does not
- Q-009 risky_decisions / Q-011 unsupported_claims also asserted
against the same seed (Codex P2: don't seed data you don't assert)
Plus targeted tests for the Q-001 helper: missing id, wrong type,
nested child subsystems, inactive-child filtering, real /v1 GET
behavior.
Reviewed by Codex twice: GO WITH CONDITIONS at b575773, GO at 0e83525
after the dual-key emit + Q-009/Q-011 + /v1-behavior + nested/inactive
amends folded in.
Tests: 596 -> 605 (+9). Full local suite green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>