# The algo records whose domain is Architectural Rules

This index as JSON: https://banes-lab.com/json/api/facets/algo/domain/architectural-rules

## Entries

- [Constraints Over Shortcuts](https://banes-lab.com/records/algo/no-shortcuts.md): Replace a debt-incurring shortcut with an encoded constraint that makes the invalid state unrepresentable, so the rule holds without relying on discipline.
- [Forward Compatibility Over Backward Compatibility](https://banes-lab.com/records/algo/no-backward-compat.md): Replace accreted legacy input shapes with one forward-compatible envelope that carries extensions, so evolution compounds instead of branching.
- [Fail-Fast Over Fallback](https://banes-lab.com/records/algo/no-fallback.md): Replace a silent fallback default with a required input that halts loudly when absent, so missing configuration surfaces at the boundary.
- [Explicit Removal Over Deprecation](https://banes-lab.com/records/algo/no-deprecation.md): Replace a deprecated alias kept for compatibility with outright removal, so the single current name is the only path.
- [Greenfield Over Legacy](https://banes-lab.com/records/algo/no-legacy.md): Replace a legacy-mode branch with one current algorithm, deleting the old path rather than gating it behind a flag.
- [Single-Path Determinism Over Dual-Path](https://banes-lab.com/records/algo/no-dual-path.md): Collapse a flag-selected dual path into one deterministic path, removing the branch and the flag that caused ambiguity.
- [Immediacy Over Deferring](https://banes-lab.com/records/algo/no-deferring.md): Replace a deferred follow-up with an atomic action that completes every coupled effect now, so nothing is forgotten.
- [Mandatory Over Optional](https://banes-lab.com/records/algo/no-optional.md): Replace an optional dependency with a mandatory one, removing the null-guarded branch so behavior is system-defined not caller-defined.
- [Now Over For-Now](https://banes-lab.com/records/algo/no-for-now.md): Replace a temporary in-memory placeholder with the real durable implementation immediately, so the stopgap never ossifies.
- [Observed Execution Over Unobserved](https://banes-lab.com/records/algo/no-unobserved.md): Wrap an unobserved effect in structured telemetry so every execution emits a learnable signal on success and failure.
- [Compression Over Repetition](https://banes-lab.com/records/algo/no-uncompressed.md): Extract a repeated pattern into one parameterized form, so the behavior lives once and duplication cannot drift.
- [Approved Evolution Over Unapproved](https://banes-lab.com/records/algo/no-unapproved.md): Gate a structural dependency behind a recorded architecture decision, so evolution proceeds only through approved boundaries.
- [Enforced Feedback Over Ignored](https://banes-lab.com/records/algo/no-ignored-feedback.md): Turn a logged-and-ignored warning into an enforced result, so negative feedback changes control flow instead of scrolling past.
- [Single Owner Over Shared Ownership](https://banes-lab.com/records/algo/no-shared-ownership.md): Give one service authority over a piece of state and propagate to others by event, removing multi-writer ambiguity.
- [Bounded Lifetime Over Unbounded](https://banes-lab.com/records/algo/no-unbounded.md): Replace an unbounded cache with a capacity-bounded structure that evicts and clears, so memory release is deterministic.
- [Enforced Symmetry Over Asymmetric Lifecycle](https://banes-lab.com/records/algo/no-asymmetric.md): Pair every acquire with a guaranteed release via try/finally, so a fault mid-use cannot leak the resource.
- [Explicit Retention Over Implicit](https://banes-lab.com/records/algo/no-implicit-retention.md): Replace an anonymous listener push with an explicit retention token that names its owner and exposes release.
- [Structural Release Over Discipline](https://banes-lab.com/records/algo/no-discipline-release.md): Replace manual release calls with a language disposal scope, so cleanup is enforced structurally, not by the developer's memory.
- [Immutable Data Over Mutable State](https://banes-lab.com/records/algo/no-mutable.md): Replace in-place mutation with a pure transform returning new data, so state transitions are reproducible.
- [Errors As Language Over Silent Errors](https://banes-lab.com/records/algo/no-silent.md): Replace a null-on-failure return with a typed result union, so failure is machine-processable rather than swallowed.
- [Explicit Invalidity Over Hidden](https://banes-lab.com/records/algo/no-hidden-invalidity.md): Model invalid state as an explicit variant rather than coercing to a plausible default that hides uncertainty.
- [Event Emission Over Parent Callbacks](https://banes-lab.com/records/algo/no-callbacks.md): Replace a parent-supplied callback with an emitted event, decoupling the producer from its consumers.
- [Monotonic Growth Over Retraction](https://banes-lab.com/records/algo/no-retraction.md): Replace destructive deletion with an append-only removal event, so history is monotonic and projectable.
- [Semantic Addressing Over Location Addressing](https://banes-lab.com/records/algo/no-location.md): Replace positional path addressing with a semantic identity reference, so references survive structural change.
- [Ordinal Time Over Timestamps](https://banes-lab.com/records/algo/no-timestamps.md): Replace wall-clock ordering with an ordinal sequence, so event order is logical and clock-independent.
- [Homoiconicity Over Separation](https://banes-lab.com/records/algo/no-separation.md): Fuse behavior and its separate metadata into one homoiconic data structure that is both the rule and its description.
- [Bounded Complexity Over Unlimited](https://banes-lab.com/records/algo/no-unlimited.md): Constrain an open-ended rule surface to a bounded grammar with depth and fan-out limits, capping cognitive load.
- [Computed Health Over Metric Health](https://banes-lab.com/records/algo/no-metrics.md): Replace threshold-on-metrics health with a symbolic diagnosis that names the causes of an unready state.
- [Secret Store Over Hardcoded Secrets](https://banes-lab.com/records/algo/no-hardcoded-secrets.md): Replace an inline secret with a resolved read from a secret store that fails fast when the secret is absent.
- [Boundary Validation Over Unvalidated Input](https://banes-lab.com/records/algo/no-unvalidated-input.md): Parse and validate untrusted input at the boundary into a typed shape, failing fast on malformed data.
- [Least Privilege Over Broad Privilege](https://banes-lab.com/records/algo/no-broad-privilege.md): Narrow a broad capability to the minimal typed interface a task needs, shrinking the blast radius.
- [Config Externalization Over Env Fallback](https://banes-lab.com/records/algo/no-env-fallback.md): Replace env-var-or-default reads with a validated config loaded at boot that fails fast on missing values.
- [Profile-First Over Unmeasured Optimization](https://banes-lab.com/records/algo/no-unmeasured-optimization.md): Gate any optimization behind a measured profile, so effort is evidence-driven rather than speculative.
- [Rule As Code Over Convention](https://banes-lab.com/records/algo/no-convention-enforcement.md): Replace a written convention with an automated gate, so the invariant is enforced by code not by memory.
- [Design By Contract Over Implicit Contract](https://banes-lab.com/records/algo/no-implicit-contract.md): State pre-conditions, post-conditions, and invariants explicitly, so a boundary's contract is checkable not assumed.
- [Versioned Evolution Over Breaking Change](https://banes-lab.com/records/algo/no-breaking-change.md): Introduce change behind a version so existing consumers keep a stable contract while new ones adopt the new shape.
- [Schema-Validated Boundary Over Untyped](https://banes-lab.com/records/algo/no-untyped-boundary.md): Type and schema-validate every boundary crossing, so invalid state cannot enter the typed core.
- [Atomic Boundary Over Partial Commit](https://banes-lab.com/records/algo/no-partial-commit.md): Wrap coupled writes in an all-or-nothing boundary, so a fault cannot leave state half-applied.
- [Saga Compensation Over Distributed 2PC](https://banes-lab.com/records/algo/no-distributed-2pc.md): Replace a cross-service two-phase commit with a saga of compensable steps, preserving service autonomy.
- [Async Events Over Synchronous Cross-Boundary](https://banes-lab.com/records/algo/no-sync-cross-boundary.md): Replace a synchronous call across an autonomy boundary with an asynchronous event, decoupling in time.
- [Observable Signals Over Opaque Runtime](https://banes-lab.com/records/algo/no-opaque-runtime.md): Emit structured signals around runtime behavior, so operation is observable rather than blind.
- [Injected Dependency Over Hidden](https://banes-lab.com/records/algo/no-hidden-dependency.md): Surface a concealed dependency as a constructor parameter, inverting control and revealing coupling.
- [Convention Discovery Over Hardcoded Wiring](https://banes-lab.com/records/algo/no-hardcoded-wiring.md): Replace enumerated wiring with convention-based discovery, so new components register without editing a central list.
- [Declarative Config Over Imperative](https://banes-lab.com/records/algo/no-imperative-config.md): Replace imperative setup steps with declarative configuration describing the desired state.
- [Anti-Corruption Layer Over Cross-Context Leak](https://banes-lab.com/records/algo/no-leaky-context.md): Insert an anti-corruption layer at a context boundary, so a foreign model cannot corrupt the local one.
- [Injected Nondeterminism Over Hidden](https://banes-lab.com/records/algo/no-hidden-nondeterminism.md): Inject clocks, randomness, and IO so the core is deterministic and testable, isolating nondeterminism at the edge.
- [Pattern By Fit Over Speculative Pattern](https://banes-lab.com/records/algo/no-speculative-pattern.md): Introduce a pattern only when a present force demands it, avoiding accidental complexity from anticipated needs.
