Agent Lifecycle Kit

0001. Hexagonal + DDD + vertical slices as the default stack

Agent Lifecycle Kit steers product teams (and coding agents) toward a single architectural language. Without a recorded default, agents invent ad-hoc layering or force heavy DDD onto throwaway code. We need an irreversible-enough default that still allows documented exceptions.

Context and Problem Statement

Agent Lifecycle Kit steers product teams (and coding agents) toward a single architectural language. Without a recorded default, agents invent ad-hoc layering or force heavy DDD onto throwaway code. We need an irreversible-enough default that still allows documented exceptions.

Decision Drivers

  • Shared vocabulary across languages and frameworks
  • Dependency direction that keeps domain logic testable without frameworks
  • Feature delivery that avoids shotgun surgery across technical layers
  • Escape hatch so small/CRUD/spike work is not over-architected

Considered Options

  • **Option A:** Mandate hexagonal + DDD + vertical slices for all code always
  • **Option B:** Soft guidance only; no default stack
  • **Option C:** Default stack for product codebases, with explicit applicability and ADR opt-out

Decision Outcome

Chosen option: "**Option C**", because a strong default improves agent routing and review quality, while CODING_PHILOSOPHY.md applicability criteria prevent force-fitting the full stack onto scripts and short-lived CRUD.

Consequences

  • Good, because skills, evals, and audits share one expected shape
  • Bad, because newcomers may over-apply ports/aggregates until they read applicability
  • Follow-up: keep ADRs sparse; use opt-out notes for one-off exceptions

Architecture sketch

flowchart LR
  UI[Driving adapter] --> PortIn[Inbound port]
  PortIn --> Domain[Domain / use case]
  Domain --> PortOut[Outbound port]
  PortOut --> Infra[Driven adapter]

Links