Architecture Decision Records для ARNO проекта.
Назначение
ADR — формальный артефакт major architectural decisions. Каждый ADR fixates:
- Context — почему решение нужно сейчас
- Decision — что выбрали
- Consequences — последствия (плюсы, минусы, trade-offs)
- Alternatives — что отвергли и почему
Per Rules.md §governance: major architecture changes требуют ADR перед изменением master spec.
Когда создавать ADR
Triggers:
- Vendor migration (Liveblocks → self-hosted Yjs, Cloudflare → AWS, etc.)
- Replace core dependency (Auth.js → Lucia, react-flow → alternative)
- Switch backend/frontend runtime
- Microservice extraction из monolith
- Major schema redesign
- Crypto algorithm changes (§0.5)
- New architectural principle добавить в §0.3
NOT triggers (minor):
- Refactoring within module
- Library version bumps
- Bug fixes
- New endpoints в existing API contract
Naming convention
NNNN-short-title-lowercase.md где NNNN — 4-digit sequential (0001-, 0002-, ...).
Template
См. README.md — full ADR template + process.
Active ADRs
{/* AUTOGEN:adr-index START */}
Auto-generated by
scripts/gen-adr-index.tson 2026-09-08. Do not edit by hand — regenerate viapnpm docs:adr-index.
Core ARNO
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0001 | Static export now, edge adapter when Auth/API land | Accepted | 2026-05-20 | 0 → 8 |
| 0002 | Module-level stores + useSyncExternalStore | Accepted | 2026-05-20 | 2 → 7 |
| 0003 | Design-system source: local snapshot → GitHub API | Accepted (replaces interim local snapshot) | 2026-05-20 | 5 |
| 0004 | Render adapter postMessage protocol | Accepted (v1) | 2026-05-20 | 6 → 7 |
| 0005 | Dedicated Worker для API, не Pages Functions | Accepted | 2026-05-21 | 8 |
| 0006 | Backend-driven GitHub OAuth, не Auth.js на Pages | Accepted | 2026-05-21 | 9 |
| 0021 | Scale target: 30K MAU as design ceiling | Accepted | 2026-05-25 | — |
| 0022 | Environments + branching model (trunk-based, ephemeral previews) | Accepted (v2.0). Supersedes the v1.0 env-branch model below. | 2026-05-25 (v1.0) · 2026-05-29 (v2.0 — supersedes v1.0) | — |
| 0023 | Deploy pipeline (project → connected repo) | Accepted | 2026-05-26 | — |
| 0024 | Storybook design system catalog (replaces design-system.html) | Accepted | 2026-05-26 | — |
| 0027 | Composition zones unification + deploy mutex | Accepted | 2026-05-27 | — |
| 0028 | Deploy JSON consumer | Resolved — decision is to defer. Not pending work. The ADR 0027 open question ("who reads pages/{id}.layout.json?") is answered: no consumer is built until a user demands a public render URL. Today the artifact is audit-and-restore only. This is a deliberate, final decision per YAGNI — re-open only when a trigger below fires. | 2026-05-27 | — |
| 0029 | Auto-apply migrations в CI для solo-dev workflow | Accepted (deviation от master spec §III.2.5; revisit when team > 1) | 2026-05-27 | — |
| 0030 | Page reconstruction: decompose capture → distribute → reassemble | Accepted (B1–B6 implemented; commercial-gate Tranco lookup deferred) | 2026-05-28 | — |
| 0031 | Workflow tab redesign: unified Figma-style canvas | Proposed (awaiting implementation kickoff) | 2026-05-31 | — |
| 0032 | Reassembly rendering: iframe+bridge now, Shadow DOM later | Proposed | 2026-06-03 | — |
| 0033 | Extension crawl-mode: capture the whole site, not one page | Accepted | 2026-06-03 (Phase 2 deviation noted 2026-06-04) | — |
| 0034 | Design-system-first capture as the primary path | — | — | — |
| 0035 | Onion-layered design paradigm: unified canvas with rule-locked DS cascade | Accepted (paradigm direction locked; mechanics in design — see Open engineering questions) | 2026-06-04 | — |
| 0036 | Foundation v1: default project starter + 50-component library + 100-icon set + WCAG-locked rule cascade | Accepted (paradigm direction); component-level specs frozen for v1 | 2026-06-04 | — |
| 0037 | WCAG override storage + audit | Accepted | 2026-06-06 | — |
| 0038 | Brand layer persistence | Accepted | 2026-06-06 | — |
| 0039 | Foundation upgrade path (v1 → v2 → v3) | Accepted | 2026-06-06 | — |
| 0040 | RTL icon opt-out | Accepted | 2026-06-06 | — |
| 0041 | User-added custom icons | Accepted | 2026-06-06 | — |
| 0042 | SSR / SSG theme inlining (no-flash) | Accepted | 2026-06-06 | — |
| 0043 | Inter subset coverage (Vietnamese / SEA + extended Latin / Greek) | Accepted (documents current behavior + locks the policy) | 2026-06-06 | — |
| 0044 | Component variant API UX | Accepted | 2026-06-06 | — |
| 0045 | Composite typography: live refs, not frozen snapshots | Accepted | 2026-06-06 | — |
| 0046 | Icon set v2 roadmap: 7 → 100 → 300 | Accepted | 2026-06-06 | — |
| 0047 | Foundation icons sourced from Phosphor (amends ADR 0036 §4 / ADR 0046) | Accepted | 2026-06-06 | — |
| 0048 | Colors raison d'être: Foundation as default brand, mentor at every narrow place | Accepted | 2026-06-07 | — |
| 0049 | Arno Sorgente: ARNO self-hosts its own UI (test project → main) | Proposed (design spec, not yet implemented) | 2026-06-07 | — |
| 0050 | Arno Foundation evolution via its own self-hosting project | Proposed (design spec) | 2026-06-07 | — |
| 0051 | Workflow tab inside Arno Sorgente shows the live ARNO product tree | Proposed (design spec, separate session work) | 2026-06-07 | — |
| 0052 | Arno Sorgente: shared-DB architecture (supersedes 0049's implementation approach) | Accepted — amended 2026-07-03 (storage location, see Amendment below) | 2026-06-08 | — |
| 0053 | Sorgente architecture onto Foundation rules | Accepted | 2026-06-08 | — |
| 0054 | Sorgente as a Library surface | Accepted | 2026-06-09 | — |
| 0055 | Sorgente layout overrides + context menu | Accepted | 2026-06-09 | — |
| 0056 | Studio layout tree (drag-rearrangeable Sorgente surfaces) | Accepted | 2026-06-09 | Sorgente Studio |
| 0057 | Sorgente component contract | Accepted | 2026-06-10 | — |
| 0058 | Studio tools documentation pattern (11-file canonical set) | Accepted (codifies existing convention; now load-bearing) | 2026-06-18 | — |
| 0059 | Italian / Renaissance naming chord for Studio tools and product surfaces | Accepted (codifies existing convention; now load-bearing) | 2026-06-18 | — |
| 0060 | Documentation lives under docs/, code under apps/ and packages/ — separation by convention | Accepted (codifies existing convention; rejects collocation alternatives) | 2026-06-18 | — |
| 0061 | layerTypeOf(node) as the single layer-type dispatch authority across Studio | Accepted (codifies existing convention; load-bearing cross-tool contract) | 2026-06-18 | — |
| 0062 | Carrier contract: data-arno-box-id as the single positioning anchor across Studio | Accepted (codifies existing convention; load-bearing cross-tool contract) | 2026-06-18 | — |
| 0063 | Studio tools as per-tool reusable packages over a shared ponte kernel | Accepted | 2026-07-12 | — |
| 0066 | Server persistence for Workflow composition artboards | Accepted | 2026-07-14 | — |
| 0067 | Workflow section: two header tabs (Workflow + Screen), Screen as an adaptive canvas | Accepted — §Decision.2 & invariant W2 superseded by ADR 0069 (2026-07-14; Workflow tab is the artboard Studio editor, Tela present on both tabs) | 2026-07-14 | — |
| 0068 | Save artboard box → project Component Library (Copy) | Accepted | 2026-07-14 | — |
| 0069 | Workflow tab hosts the artboard Studio editor (supersedes ADR 0067 §Decision.2 + W2) | Accepted; §Decision.2 + W2 (below) superseded 2026-07-27 by the | 2026-07-14 | — |
| 0071 | Sorgente gets a real project row for Workflow/Screen persistence | Accepted | 2026-07-16 | — |
| 0072 | Server persistence for Workflow artboard prototype links (tavola) | Accepted | 2026-07-16 | — |
| 0073 | Generic entity-link connector (tavola supersedes artboard-only) | Accepted | 2026-07-17 | — |
| 0074 | StepBack: one back/forward (undo/redo) module | — | — | — |
| 0075 | Terminology split: filo (connector) vs tavola (artboard+tree domain) | Accepted | 2026-07-17 | — |
| 0076 | Albero (artboard tree toggle) and Rotta (connection-arrow overlay) | Accepted | 2026-07-17 | — |
| 0077 | @arno/compasso: consolidating ruler + zoom/pan into one reusable package | Accepted | 2026-07-20 | — |
| 0078 | Punta blocks + variants | Accepted — all 8 blocks extracted + sidebars thinned; central-registry inversion deliberately deferred (see Migration) | 2026-07-27 | — |
| 0079 | @arno/compasso owns fit-to-screen and the --artboard-zoom world-zoom contract | Accepted | 2026-07-29 | — |
| 0080 | Marca: the brandbook-PDF import module (naming + code↔UI split) | Accepted | 2026-08-05 | — |
| 0081 | Sorgente as upstream: one-way, override-preserving project inheritance | Proposed (design spec — architecture-first; no code shipped this run) | 2026-08-06 | — |
| 0082 | Per-project repo hosting under Arno's org + monetized developer-share (reseller model) | Proposed (design spec — architecture-first; no code, gated on maintainer-provisioned infra) | 2026-08-06 | — |
| 0083 | px-canon storage, rem-emit contract, and root-preview as a verifier | Accepted | 2026-08-08 | — |
| 0084 | Garzone: the in-Studio AI assistant (provider-agnostic, tree-acting) | — | — | — |
| 0085 | 0085. Garzone agent loop runs in the browser client; the Worker is a per-turn proxy | — | — | — |
| 0086 | 0086. Garzone is grounded in the project's design tokens by a client-composed prompt + a role-aware guard | — | — | — |
| 0087 | Component Model integration (Property/State/Behaviour/Proof + tokens) | Accepted (design). Execution phased Ф0–Ф7. | 2026-08-20 | — |
| 0089 | Merge queue for the shared Studio trunk | Accepted | 2026-09-07 | — |
Feature: Cross-cutting perf pattern для /app/* route changes
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0026 | Navigation performance paradigm | Accepted | 2026-05-27 | Cross-cutting perf pattern для /app/* route changes |
Feature: Layout Grid Engine
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0020 | Layout Grid: recursive Container/Content tree as foundation for all Arno pages | Accepted | 2026-05-25 | Layout Grid Engine (product-level core) |
Feature: Phase 3 Layout Grid
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0025 | Adaptive overrides + Tokens publish flow | Accepted | 2026-05-26 | Phase 3 Layout Grid (ADR 0020) |
Feature: Responsive Columns
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0064 | Columns (Switcher) responsive to Tela width | Accepted | 2026-07-14 | Responsive Columns |
Feature: Responsive primitives
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0065 | Generalize per-width primitive overrides (propsAt) | Accepted | 2026-07-14 | Responsive primitives (Tela-width overrides) |
Feature: Tela viewport / responsive primitives
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0070 | Per-project Tela default viewport | Accepted | 2026-07-14 | Tela viewport / responsive primitives |
Feature: URL-import
| # | Title | Status | Date | Phase / Feature |
|---|---|---|---|---|
| 0007 | URL-import: code-first, не vision-first | Accepted | 2026-05-22 | URL-import (unparks §V "Small-company path / ARNO Studio") |
| 0008 | Hybrid stack: schema-driven priority chains + reactive vision | Accepted | 2026-05-22 | URL-import |
| 0009 | Acceptance gate: 3 эмпирических bool, не weighted scores | Accepted | 2026-05-22 | URL-import |
| 0010 | Completeness: матрица combinations, не point check | Accepted | 2026-05-22 | URL-import |
| 0011 | Vision activation: reactive, не predictive | Accepted | 2026-05-22 | URL-import |
| 0012 | Uniqueness: user decides, не algorithm | Accepted | 2026-05-22 | URL-import |
| 0013 | "Чем дольше живём — тем меньше платим" как hard requirement | Accepted | 2026-05-22 | URL-import |
| 0014 | Legal-clean distillation: Qwen teacher, не Anthropic/OpenAI | Accepted | 2026-05-22 | URL-import (data flywheel — ADR 0013) |
| 0015 | Explicit non-use of Claude API в URL-import stack | Accepted | 2026-05-22 | URL-import |
| 0016 | V1 staging area вместо direct git commit | Accepted | 2026-05-22 | URL-import |
| 0017 | Shadow data: ToS-based disclosure, не registration checkbox | Accepted | 2026-05-22 | URL-import (data flywheel — ADR 0013) |
| 0018 | Atom embeddings: E5-small text, не DINOv2 visual | Accepted | 2026-05-22 | URL-import (atoms — cache L3) |
| 0019 | Extension capture path: Camp 1 persistence + multi-provider auth + 5-phase roadmap | Accepted | 2026-05-24 | URL-import (Extension MVP — §V «Small-company path / ARNO Studio» continuation) |
{/* AUTOGEN:adr-index END */}
Lifecycle
- Proposed → drafted, не reviewed
- Accepted → reviewed, applied к master spec
- Deprecated → no longer relevant но preserved для history
- Superseded by ADR-XXXX → replaced by newer decision
ADRs никогда не удаляются — history immutable. Status changes reflect evolution.
Связь с master spec
После acceptance ADR:
- Master spec
_index.mdupdated (version bump, changelog entry с ADR reference) - Affected sections rewritten
- Parking list updated если applicable
- ADR remains canonical "почему" для решения; master spec — canonical "что" сейчас