The principles below document approved Phase 0A direction. They do not implement the architecture.
Workspace, Run, Job, and Attempt have separate responsibilities, identifiers, states, and history.
Workspace isolation must be enforced by scoped services, repositories, storage ownership, constraints, files, and tests. A tab or selected screen does not establish isolation.
Workspaces remain editable; Runs execute immutable snapshots. Historical runs are not rewritten by later edits.
Durable job state resides in persistent storage. In-memory queues, thread state, and UI state are projections or execution aids.
Each workspace has logical work and policy boundaries, while global execution capacity, physical account health, quotas, and provider limits are coordinated centrally.
A bounded global engine and provider-specific executors serve multiple workspace-scoped logical queues. UI views do not own thread pools.
Providers declare capabilities and limitations. Core logic must not assume uniform support for drafts, multiple recipients, scheduling, idempotency, status lookup, or error semantics.
When an external result cannot be proven, the system records an unknown/needs-review state and reconciles before retry.
Throughput control may apply globally, by provider, physical account, endpoint, operation, workspace, and run. User choices cannot disable provider or safety limits.
Databases store credential references and non-secret metadata. Secure secret material belongs to an approved operating-system credential vault.
The standard experience is organized around choosing a service, connecting accounts, adding customers, preparing invoices, reviewing, testing, and sending or scheduling.
Advanced controls are revealed in context rather than implemented as a separate incompatible application mode. Diagnostics remain separate.
Workers publish structured application events; the UI consumes them on the UI thread. Direct worker-to-widget calls are prohibited.
Provider calls carry stable operation context, persist attempts, classify errors, and support reconciliation where possible.
The target direction is a global control.db plus one isolated database per workspace, with explicit reservation and reconciliation rather than assumed cross-database atomicity.
Critical boundaries must become architecture fitness tests. New decisions use ADRs; changes to approved baseline use ACRs.
Third-party libraries must not become domain architecture. They are selected for approved needs and confined to adapters or infrastructure layers.
Correct durable state, idempotency, shutdown, and reconciliation take priority over maximum send speed.