Architecture Decisions

The decisions below are recovered from code. The rationale — why each was chosen over alternatives — could not be recovered, so each ADR has status Accepted (inferred) and its Pugh Matrix marks team-judgment cells with ?. The full ADRs are in the register at ../../adrs/.

ADR Index

ADR Title Status

ADR-001

Hexagonal Ports and Adapters

Accepted (inferred)

ADR-002

Pluggable LLM Backend Abstraction

Accepted (inferred)

ADR-003

Conversation Middleware Pipeline

Accepted (inferred)

ADR-004

File-based Session Persistence

Accepted (inferred)

Summary

ADR-001 — Hexagonal Ports and Adapters. The engine isolates the domain behind *_port.py interfaces with adapters at the edges [AGENTS.md:13-23]. Concretised in [section-concepts] (Configuration, Observability).

ADR-002 — Pluggable LLM Backend Abstraction. BACKEND_FACTORY maps a provider enum to a backend, and API-style adapters cover OpenAI, Anthropic and Vertex shapes [vibe/core/llm/backend/factory.py:7, vibe/core/llm/format.py:58-185]. Concretised by the Compatibility goal in [section-solution-strategy].

ADR-003 — Conversation Middleware Pipeline. A before_turn pipeline enforces turn/price limits, auto-compaction and read-only agent modes [vibe/core/middleware.py:218-247]. Concretised by the Security and Reliability mechanisms in [section-concepts].

ADR-004 — File-based Session Persistence. Sessions persist as a folder of meta.json + messages.jsonl, with a v1→v2 migration in code [vibe/core/session/session_logger.py:62-97, vibe/core/session/session_migration.py:16-41].

Note

The "why" behind all four decisions is deferred to the Architect (see OPEN_QUESTIONS.adoc). Until answered, the inferred status and the ? cells in each Pugh Matrix must not be read as confirmed rationale.