mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 09:01:14 +00:00
6044a33197
Bundled hygiene commit before cycle-3 /implement (AZ-776, AZ-777). Mixes two concerns by user choice (autodev option B): - Cycle-3 autodev artifacts not yet committed by Step 9 (new-task): task specs for AZ-776 / AZ-777 under _docs/02_tasks/todo/ and the updated _docs/02_tasks/_dependencies_table.md. - Accumulated skill / rule tooling maintenance under .cursor/ (skills: autodev, code-review, decompose, deploy, implement, new-task, plan, refactor, retrospective, test-spec; rules: coderule, cursor-meta, meta-rule, testing; new release skill scaffolding). - Autodev bootstrap state: _docs/_autodev_state.md (step 10 in_progress) and _docs/_process_leftovers/2026-05-11_d_cross_cve_1_opencv_pin_deferred.md (replay timestamp refreshed; gtsam 4.2 still numpy<2-only). Co-authored-by: Cursor <cursoragent@cursor.com>
3.3 KiB
3.3 KiB
Step 1.5: Module Layout (default mode only)
Role: Professional software architect
Goal: Produce _docs/02_document/module-layout.md — the authoritative file-ownership map used by the implement skill. Separates behavioral task specs (no file paths) from structural file mapping (no behavior).
Constraints: Follow the target language's standard project-layout conventions. Do not invent non-standard directory structures.
Steps
- Detect the target language from
DOCUMENT_DIR/architecture.mdand the bootstrap structure plan produced in Step 1. - Apply the language's conventional layout (see table in
templates/module-layout.md):- Python →
src/<pkg>/<component>/ - C# →
src/<Component>/ - Rust →
crates/<component>/ - TypeScript / React →
src/<component>/withindex.tsbarrel - Go →
internal/<component>/orpkg/<component>/
- Python →
- Each component owns ONE top-level directory. Shared code goes under
<root>/shared/(or language equivalent). - Public API surface = files in the layout's
public:list for each component; everything else is internal and MUST NOT be imported from other components. - Cross-cutting concerns (logging, error handling, config, telemetry, auth middleware, feature flags, i18n) each get ONE entry under Shared / Cross-Cutting; per-component tasks consume them (see Step 2 cross-cutting rule).
- ADR cross-check: if
_docs/02_document/adr/exists, read everyStatus: AcceptedADR. For each, confirm the proposed module layout does not contradict the ADR'sDecision(e.g., an ADR mandating an event-bus boundary between two components must show up as aImports fromexclusion in the layout; an ADR locking a layering style must show up in the Layering table). If an ADR conflicts with the language-conventional layout from step 2, the ADR wins — record the conflict in a## ADR-driven exceptions to the conventional layoutsection ofmodule-layout.mdwithSee ADR NNN_<slug>references. If the ADR conflict is irreconcilable (the ADR demands something the language genuinely cannot express), STOP and ask the user A/B/C: (A) update the ADR via plan Step 4.5 supersede flow, (B) accept a layered exception with documented rationale, (C) re-open architecture. - Write
_docs/02_document/module-layout.mdusingtemplates/module-layout.mdformat. Each Per-Component Mapping entry that is governed by an ADR includes a trailing> See ADR NNN_<slug>line.
Self-verification
- Every component in
DOCUMENT_DIR/components/has a Per-Component Mapping entry - Every shared / cross-cutting concern has a Shared section entry
- Layering table covers every component (shared at the bottom)
- No component's
Imports fromlist points at a higher layer - Paths follow the detected language's convention
- No two components own overlapping paths
- If
_docs/02_document/adr/exists with Accepted ADRs, every layout decision that an ADR governs has a trailing> See ADR NNN_<slug>reference - No Accepted ADR is contradicted by the layout without a documented exception
Save action
Write _docs/02_document/module-layout.md.
Blocking
BLOCKING: Present layout summary to user. Do NOT proceed to Step 2 until user confirms. The implement skill depends on this file; inconsistencies here cause file-ownership conflicts at batch time.