Files
gps-denied-onboard/.cursor/skills/decompose/steps/01-5_module-layout.md
T
Oleksandr Bezdieniezhnykh 6044a33197 chore: WIP pre-implement
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>
2026-05-21 13:14:11 +03:00

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

  1. Detect the target language from DOCUMENT_DIR/architecture.md and the bootstrap structure plan produced in Step 1.
  2. 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>/ with index.ts barrel
    • Go → internal/<component>/ or pkg/<component>/
  3. Each component owns ONE top-level directory. Shared code goes under <root>/shared/ (or language equivalent).
  4. 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.
  5. 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).
  6. ADR cross-check: if _docs/02_document/adr/ exists, read every Status: Accepted ADR. For each, confirm the proposed module layout does not contradict the ADR's Decision (e.g., an ADR mandating an event-bus boundary between two components must show up as a Imports from exclusion 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 layout section of module-layout.md with See 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.
  7. Write _docs/02_document/module-layout.md using templates/module-layout.md format. 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 from list 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.