# anti-patterns

> Every principle in this category is listed as a record.

Page: Ontology · Principles
Canonical: https://banes-lab.com/ontology#arch-category-anti-patterns

Every principle in this category is listed as a record. Each record carries its kind, its severity, the scopes it applies at and the layer it lives in, then the edge relations that join it to other records, the records that point back at it, the contracts that answer to it and the tensions it takes part in. The descriptors say how it is violated, detected, measured, repaired and enforced. Where the record carries one, an exemplar shows the shape before and after the principle is applied.

Relations diagram

The relations inside this category.

```mermaid
flowchart LR
n_big_ball_of_mud["Big Ball of Mud"]
n_god_object["God Object"]
n_concrete_coupling["Concrete Coupling"]
n_schema_drift["Schema Drift"]
n_implicit_contract["Implicit Contract"]
n_hardcoded_configuration["Hardcoded Configuration"]
n_shared_mutable_state["Shared Mutable State"]
n_boundary_leakage["Boundary Leakage"]
n_manual_only_governance["Manual-Only Governance"]
n_opaque_runtime_behavior["Opaque Runtime Behavior"]
n_unowned_risk["Unowned Risk"]
n_unobservable_failure["Unobservable Failure"]
n_unversioned_breaking_change["Unversioned Breaking Change"]
n_distributed_monolith["Distributed Monolith"]
n_shotgun_surgery["Shotgun Surgery"]
n_divergent_change["Divergent Change"]
n_feature_envy["Feature Envy"]
n_inappropriate_intimacy["Inappropriate Intimacy"]
n_message_chain["Message Chain"]
n_middle_man["Middle Man"]
n_data_clumps["Data Clumps"]
n_primitive_obsession["Primitive Obsession"]
n_stringly_typed_programming["Stringly Typed Programming"]
n_boolean_trap["Boolean Trap"]
n_long_parameter_list["Long Parameter List"]
n_magic_value["Magic Value"]
n_speculative_generality["Speculative Generality"]
n_premature_abstraction["Premature Abstraction"]
n_over_abstraction["Over-Abstraction"]
n_golden_hammer["Golden Hammer"]
n_pattern_cargo_cult["Pattern Cargo Cult"]
n_lava_flow["Lava Flow"]
n_zombie_code["Zombie Code"]
n_temporal_coupling["Temporal Coupling"]
n_hidden_side_effect["Hidden Side Effect"]
n_action_at_a_distance["Action at a Distance"]
n_ambient_context["Ambient Context"]
n_inconsistent_error_model["Inconsistent Error Model"]
n_exception_control_flow["Exception Control Flow"]
n_null_semantics_drift["Null Semantics Drift"]
n_anemic_domain_model["Anemic Domain Model"]
n_transaction_script_sprawl["Transaction Script Sprawl"]
n_fat_controller["Fat Controller"]
n_repository_dump["Repository Dump"]
n_utility_dump["Utility Dump"]
n_framework_leakage["Framework Leakage"]
n_vendor_lock_in_leakage["Vendor Lock-In Leakage"]
n_circular_dependency["Circular Dependency"]
n_cyclic_deployment_dependency["Cyclic Deployment Dependency"]
n_synchronous_chain_trap["Synchronous Chain Trap"]
n_chatty_interface["Chatty Interface"]
n_n_plus_one_query["N Plus One Query"]
n_cache_poisoning_by_design["Cache Poisoning by Design"]
n_retry_storm["Retry Storm"]
n_timeout_omission["Timeout Omission"]
n_missing_backpressure["Missing Backpressure"]
n_silent_data_corruption["Silent Data Corruption"]
n_lost_update["Lost Update"]
n_dual_write["Dual Write"]
n_read_your_writes_violation["Read-Your-Writes Violation"]
n_security_theater["Security Theater"]
n_authorization_scattering["Authorization Scattering"]
n_secret_sprawl["Secret Sprawl"]
n_personal_data_oversharing["Personal Data Oversharing"]
n_observability_noise["Observability Noise"]
n_log_as_control_flow["Log-as-Control-Flow"]
n_manual_runbook_dependency["Manual Runbook Dependency"]
n_big_bang_release["Big-Bang Release"]
n_irreversible_migration["Irreversible Migration"]
n_big_upfront_frozen_architecture["Big-Upfront Frozen Architecture"]
n_architecture_astronaut["Architecture Astronaut"]
n_feature_only_design["Feature-Only Design"]
n_test_pyramid_inversion["Test Pyramid Inversion"]
n_mock_mirage["Mock Mirage"]
n_flaky_test_normalization["Flaky Test Normalization"]
n_prompt_sprawl["Prompt Sprawl"]
n_ungrounded_content["Ungrounded Content"]
n_model_version_ambiguity["Model Version Ambiguity"]
```

### Big Ball of Mud

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Component-Based Architecture](https://banes-lab.com/records/arch/component-based-architecture.md), [Modularity](https://banes-lab.com/records/arch/modularity.md)

Violated by
Allow boundaries to remain implicit, permit unrestricted dependencies, mix concerns freely, share mutable state broadly, and accumulate changes without architectural segmentation.

Detected by
[cyclic_dependencies](https://banes-lab.com/records/lex/cyclic-dependencies.md), high_graph_density, unowned_modules, cross_layer_imports, large_change_blast_radius

Measured by
none

Refactored by
define_boundaries, split_modules, enforce_dependency_rules, assign_ownership, add_fitness_functions

Enforced by
none

Before

```typescript
function handle(req) {
const foo = db.query(req.body.sql);
render(foo); email(foo); audit(foo); cache(foo);
}
```

After

```typescript
class CreateFoo {
constructor(private readonly foos: FooRepository, private readonly events: EventPublisher) {}
execute(input: CreateFooInput) { const foo = Foo.create(input); this.foos.save(foo); this.events.publish(fooCreated(foo)); }
}
```

### God Object

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [semantic_consistency](https://banes-lab.com/records/force/semantic-consistency.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md), [control_coordination](https://banes-lab.com/records/force/control-coordination.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md), [High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md)

Violated by
Centralize unrelated responsibilities into one object, route unrelated behavior through it, accumulate state and dependencies, and make the object the default modification point.

Detected by
large_class, many_unrelated_methods, many_dependencies, high_fan_in, multiple_reasons_to_change

Measured by
none

Refactored by
extract_class, split_responsibilities, move_method, extract_domain_service, introduce_facade_only_if_boundary_needed

Enforced by
none

Before

```typescript
class FooManager {
createFoo() {} priceFoo() {} renderFoo() {} emailFoo() {} auditFoo() {} shipFoo() {}
}
```

After

```typescript
class FooFactory { create(input: CreateFooInput): Foo {} }
class FooPricer { price(foo: Foo): Money {} }
class FooShipper { ship(foo: Foo): void {} }
```

### Concrete Coupling

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md), [Abstraction](https://banes-lab.com/records/arch/abstraction.md), [Replaceability](https://banes-lab.com/records/arch/replaceability.md)

Violated by
Let high-level policy depend directly on low-level implementations, vendor APIs, framework classes, or concrete constructors, then spread those concrete assumptions across the core.

Detected by
domain_imports_infrastructure, vendor_sdk_in_core, new_dependency_inside_business_logic, missing_interface_boundary

Measured by
none

Refactored by
extract_interface, introduce_port, extract_adapter, inject_dependency, apply_DIP

Enforced by
none

Before

```typescript
class FooService {
private readonly store = new SqlFooStore();
}
```

After

```typescript
class FooService {
constructor(private readonly store: FooStore) {}
}
```

### Schema Drift

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [security_governance](https://banes-lab.com/records/force/security-governance.md), [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Data Contract](https://banes-lab.com/records/arch/data-contract.md), [Canonical Schema](https://banes-lab.com/records/arch/canonical-schema.md)

Violated by
Allow producers, consumers, storage models, and documentation to evolve independently without versioned schema governance, then let payload meaning diverge over time.

Detected by
schema_diff_failure, missing_schema_registry, consumer_parse_errors, undocumented_field_changes, nullability_mismatch

Measured by
none

Refactored by
define_schema_contract, version_schema, add_compatibility_tests, centralize_schema_registry, validate_payloads

Enforced by
none

Before

```typescript
type FooApi = { id: string; label: string };
type FooDb = { id: string; name: string; extra: string };
```

After

```typescript
const FooSchema = schema({ id: fooIdSchema, name: nonEmptyString });
type Foo = Infer<typeof FooSchema>;
fooApi.use(FooSchema);
fooDb.use(FooSchema);
```

### Implicit Contract

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [causality_ordering](https://banes-lab.com/records/force/causality-ordering.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md)

Violated by
Encode assumptions in code behavior, naming, [ordering](https://banes-lab.com/records/lex/ordering.md), timing, [side effects](https://banes-lab.com/records/lex/side-effects.md), or undocumented payload shapes instead of declaring them as explicit contracts.

Detected by
public_API_without_schema, undocumented_side_effect, dynamic_map_boundary, tests_depend_on_internal_behavior, tribal_knowledge_required

Measured by
none

Refactored by
add_explicit_contract, define_preconditions, define_postconditions, add_schema, add_contract_tests

Enforced by
none

Before

```typescript
function saveFoo(foo) { return db.insert(foo); }
```

After

```typescript
interface Foo { id: FooId; name: NonEmptyString; }
function saveFoo(foo: Foo): Promise<void> { return fooStore.save(foo); }
```

### Hardcoded Configuration

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [semantic_consistency](https://banes-lab.com/records/force/semantic-consistency.md), [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Declarative Configuration](https://banes-lab.com/records/arch/declarative-configuration.md), [Configuration Externalization](https://banes-lab.com/records/arch/configuration-externalization.md)

Violated by
Embed environment, path, credential, feature, service endpoint, or policy values directly into code, then duplicate those assumptions across runtime contexts.

Detected by
hardcoded_URL, hardcoded_path, hardcoded_secret, environment_branching_in_code, duplicated_config_literal

Measured by
none

Refactored by
externalize_configuration, add_config_schema, centralize_config_source, validate_environment, remove_secret_from_code

Enforced by
none

Before

```typescript
const client = new FooClient("https://foo.prod.example", "sk_live_abc123");
```

After

```typescript
const config = FooConfigSchema.parse({ url: process.env.FOO_URL, key: process.env.FOO_KEY });
const client = new FooClient(config);
```

### Shared Mutable State

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Immutability](https://banes-lab.com/records/arch/immutability.md), [State Isolation](https://banes-lab.com/records/arch/state-isolation.md)

Violated by
Expose writable state across modules, allow multiple actors to mutate it, omit ownership and synchronization, and let behavior depend on mutation order.

Detected by
global_mutable_object, public_mutable_fields, shared_cache_without_policy, race_condition, order_dependent_tests

Measured by
none

Refactored by
encapsulate_state, assign_owner, make_immutable, add_transaction_boundary, apply_concurrency_control

Enforced by
none

Before

```typescript
let currentFoo = null;
function setFoo(f) { currentFoo = f; }
function useFoo() { return currentFoo.name; }
```

After

```typescript
class FooContext {
constructor(private readonly foo: Foo) {}
name() { return this.foo.name; }
}
```

### Boundary Leakage

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md)

Violated by
Permit internal models, infrastructure types, persistence structures, or private module APIs to cross intended architectural boundaries.

Detected by
internal_package_imported_externally, database_entity_exposed_as_API, vendor_type_in_domain, private_module_used_by_other_module

Measured by
none

Refactored by
restrict_exports, introduce_DTO, add_adapter, add_facade, enforce_import_rules

Enforced by
none

Before

```typescript
app.get("/foo/:id", async (req, res) => res.json(await ormFoo.findByPk(req.params.id)));
```

After

```typescript
app.get("/foo/:id", async (req, res) => res.json(toFooDto(await getFoo.execute(req.params.id))));
```

### Manual-Only Governance

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [security_governance](https://banes-lab.com/records/force/security-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Policy as Code](https://banes-lab.com/records/arch/policy-as-code.md)

Violated by
Encode architecture rules in documents, meetings, or reviewer memory without executable checks, [metrics](https://banes-lab.com/records/lex/metrics.md), or automated enforcement.

Detected by
rule_exists_only_in_docs, no_CI_gate, reviewer_specific_enforcement, repeated_same_violation, missing_fitness_function

Measured by
none

Refactored by
create_fitness_function, add_static_check, add_policy_as_code, add_architecture_test, track_rule_metrics

Enforced by
none

Before

```typescript
const CONVENTION = "remember to prefix every foo id with foo_";
```

After

```typescript
export const rule = { id: "valid-foo-id", check: (id: string) => id.startsWith("foo_") };
```

### Opaque Runtime Behavior

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [runtime_extensibility](https://banes-lab.com/records/force/runtime-extensibility.md), [metaprogramming_modeling](https://banes-lab.com/records/force/metaprogramming-modeling.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Introspection](https://banes-lab.com/records/arch/introspection.md)

Violated by
Let runtime behavior emerge from hidden reflection, implicit registration, undocumented configuration, [side effects](https://banes-lab.com/records/lex/side-effects.md), or untraced dynamic binding.

Detected by
dynamic_binding_without_manifest, missing_startup_report, unlogged_plugin_loading, implicit_reflection_scan, untraceable_side_effect

Measured by
none

Refactored by
add_manifest, log_binding_decisions, emit_runtime_topology, add_capability_declaration, add_discovery_validation

Enforced by
none

Before

```typescript
function processFoo(foo) { doWork(foo); }
```

After

```typescript
function processFoo(foo: Foo) {
logger.info("foo.process.start", { fooId: foo.id });
const result = doWork(foo);
logger.info("foo.process.done", { fooId: foo.id, outcome: result.status });
}
```

### Unowned Risk

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Risk Management](https://banes-lab.com/records/arch/risk-management.md)

Violated by
Identify a risk without assigning owner, severity, [mitigation](https://banes-lab.com/records/lex/mitigation.md), review date, acceptance status, or escalation path.

Detected by
risk_without_owner, ADR_missing_consequence_owner, security_finding_unassigned, known_gap_without_due_date, accepted_risk_without_expiry

Measured by
none

Refactored by
assign_owner, classify_severity, define_mitigation, record_acceptance, schedule_review

Enforced by
none

Before

```typescript
await payment.charge(foo);
```

After

```typescript
const outcome = await payment.charge(foo);
if (!outcome.ok) { logger.error("foo.charge.failed", outcome); throw new ChargeFailedError(foo.id); }
```

### Unobservable Failure

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Observability](https://banes-lab.com/records/arch/observability.md)

Violated by
Permit operations to fail without structured logs, [metrics](https://banes-lab.com/records/lex/metrics.md), alerts, [traces](https://banes-lab.com/records/lex/traces.md), audit records, or user-visible error contracts.

Detected by
empty_catch, swallowed_exception, missing_error_log, no_alert_on_critical_path, missing_trace_span, missing_audit_record

Measured by
none

Refactored by
add_error_boundary, emit_structured_log, add_metric, add_alert, add_trace_span, add_audit_log

Enforced by
none

Before

```typescript
try { await ship(foo); } catch { }
```

After

```typescript
try { await ship(foo); } catch (error) { logger.error("foo.ship.failed", error); metrics.increment("foo.ship.failure"); throw new ShipFailedError(foo.id); }
```

### Unversioned Breaking Change

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [event_messaging](https://banes-lab.com/records/force/event-messaging.md), [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Consumer-Driven Contracts](https://banes-lab.com/records/arch/consumer-driven-contracts.md)

Violated by
Change a public API, [schema](https://banes-lab.com/records/lex/schema.md), event, protocol, behavior, or package contract incompatibly without version bump, deprecation path, compatibility test, or migration notice.

Detected by
API_diff_breaking, schema_field_removed, type_narrowed, event_semantics_changed, no_version_bump, no_deprecation_window

Measured by
none

Refactored by
bump_version, add_compatibility_adapter, deprecate_gradually, add_contract_tests, publish_migration_guide

Enforced by
none

Before

```typescript
app.get("/foo", () => ({ label: foo.name }));
```

After

```typescript
app.get("/v2/foo", () => ({ name: foo.name }));
app.get("/v1/foo", () => ({ label: foo.name }));
```

### Distributed Monolith

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Microservices](https://banes-lab.com/records/arch/microservices.md)

Violated by
Split deployment units without splitting data ownership, transaction boundaries, [failure isolation](https://banes-lab.com/records/lex/failure-isolation.md), [contracts](https://banes-lab.com/records/lex/contracts.md), or autonomous release capability.

Detected by
[shared_database](https://banes-lab.com/records/lex/shared-database.md), cross_service_transactions, lockstep_deployments, deep_sync_call_chain, shared_business_logic_package, consumer_breakage_on_service_change

Measured by
none

Refactored by
own_data_per_service, define_service_contracts, introduce_events, add_outbox, split_bounded_context, enable_independent_deployment

Enforced by
none

Before

```typescript
async function createFoo(foo) {
await http.post("bar-service/validate", foo);
await http.post("baz-service/price", foo);
await http.post("qux-service/save", foo);
}
```

After

```typescript
async function createFoo(input: CreateFooInput) {
const foo = Foo.create(input);
await fooStore.save(foo);
await outbox.append(fooCreated(foo));
}
```

### Shotgun Surgery

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md)

Violated by
Scatter one conceptual responsibility across many files so one change requires many coordinated edits.

Detected by
same_change_touches_many_files, repeated_commit_cochanges, duplicated_rule_fragments

Measured by
none

Refactored by
centralize_rule, extract_module, move_behavior_to_owner, add_single_source_of_truth

Enforced by
none

Before

```typescript
const taxA = value * 0.2;
const taxB = other * 0.2;
const taxC = more * 0.2;
```

After

```typescript
const FOO_TAX_RATE = 0.2;
function taxFoo(value: number) { return value * FOO_TAX_RATE; }
```

### Divergent Change

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md)

Violated by
Place unrelated responsibilities in the same module so unrelated change reasons repeatedly modify one artifact.

Detected by
unrelated_commits_touch_same_file, mixed_methods, mixed_dependencies

Measured by
none

Refactored by
split_module, extract_class, separate_concerns, move_method

Enforced by
none

Before

```typescript
class Foo {
renderHtml() {} saveToSql() {} sendEmail() {} parseCsv() {}
}
```

After

```typescript
class Foo {}
class FooView { render(foo: Foo): string {} }
class FooStore { save(foo: Foo): Promise<void> {} }
```

### Feature Envy

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)

Violated by
Let one module repeatedly inspect or manipulate another module’s data instead of moving behavior to the data owner.

Detected by
many_getters_from_other_object, logic_using_foreign_fields, domain_rule_outside_owner

Measured by
none

Refactored by
move_method, encapsulate_state, add_domain_behavior, introduce_service_boundary

Enforced by
none

Before

```typescript
function totalFoo(bar: Bar) { return bar.items.reduce((s, i) => s + i.price * i.qty, 0); }
```

After

```typescript
class Bar { total(): Money { return this.items.reduce((s, i) => s + i.subtotal(), 0); } }
```

### Inappropriate Intimacy

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)

Violated by
Allow modules or classes to rely on each other’s internals, private structure, lifecycle, or undocumented state.

Detected by
friend-like access, private API usage, tests_reach_internals, internal_package_import

Measured by
none

Refactored by
hide_internal, introduce_public_contract, add_facade, restrict_exports

Enforced by
none

Before

```typescript
bar.foo._internalState.status = "ready";
```

After

```typescript
bar.foo.markReady();
```

### Message Chain

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [event_messaging](https://banes-lab.com/records/force/event-messaging.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)

Violated by
Require clients to traverse a chain of objects to reach behavior or data, exposing internal object graph structure.

Detected by
a.getB().getC().doX, deep_property_access, repeated_navigation_paths

Measured by
none

Refactored by
hide_delegate, introduce_facade_method, move_behavior_to_owner

Enforced by
none

Before

```typescript
const city = foo.getOwner().getAddress().getCity().getName();
```

After

```typescript
const city = foo.ownerCityName();
```

### Middle Man

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [control_coordination](https://banes-lab.com/records/force/control-coordination.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Abstraction](https://banes-lab.com/records/arch/abstraction.md)

Violated by
Insert a module that delegates almost everything without adding policy, [abstraction](https://banes-lab.com/records/reason/mode-abstraction.md), [validation](https://banes-lab.com/records/arch/validation.md), [orchestration](https://banes-lab.com/records/arch/orchestration.md), or simplification.

Detected by
thin_methods_only_delegate, low_logic_density, one_to_one_wrapper_methods

Measured by
none

Refactored by
remove_layer, inline_delegate, promote_to_real_facade_if_boundary_needed

Enforced by
none

Before

```typescript
class FooService {
save(foo: Foo) { return this.store.save(foo); }
find(id: FooId) { return this.store.find(id); }
}
```

After

```typescript
const fooStore: FooStore = new SqlFooStore();
```

### Data Clumps

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Value Object](https://banes-lab.com/records/arch/value-object.md)

Violated by
Pass the same group of fields together repeatedly without naming the group as a value object or contract.

Detected by
same_parameters_repeated, same_fields_appear_together, DTO_shape_duplicated

Measured by
none

Refactored by
introduce_value_object, add_DTO, name_concept, validate_as_group

Enforced by
none

Before

```typescript
function shipFoo(street: string, city: string, zip: string, country: string) {}
```

After

```typescript
interface Address { street: string; city: string; zip: string; country: string; }
function shipFoo(address: Address) {}
```

### Primitive Obsession

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Value Object](https://banes-lab.com/records/arch/value-object.md)

Violated by
Represent meaningful domain concepts as raw strings, numbers, booleans, or maps without type, [validation](https://banes-lab.com/records/arch/validation.md), or behavior.

Detected by
many_string_ids, repeated_validation, boolean_flags, magic_values

Measured by
none

Refactored by
introduce_value_object, narrow_type, add_enum, encapsulate_validation

Enforced by
none

Before

```typescript
function transfer(fooId: string, amount: number, currency: string) {}
```

After

```typescript
class Money { constructor(readonly amount: number, readonly currency: Currency) {} }
function transfer(fooId: FooId, money: Money) {}
```

### Stringly Typed Programming

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Type Safety](https://banes-lab.com/records/arch/type-safety.md)

Violated by
Encode behavior, types, states, permissions, or protocols as unchecked strings.

Detected by
string_mode_switch, repeated_string_constants, string_permissions, string_status_values

Measured by
none

Refactored by
add_enum, add_discriminated_union, centralize_constants, schema_validate

Enforced by
none

Before

```typescript
if (foo.status === "reddy") ship(foo);
```

After

```typescript
enum FooStatus { Ready, Shipped }
if (foo.status === FooStatus.Ready) ship(foo);
```

### Boolean Trap

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Intent-Revealing Interface](https://banes-lab.com/records/arch/intent-revealing-interface.md)

Violated by
Use boolean parameters or flags that hide intent and create ambiguous call sites or combinatorial behavior.

Detected by
method(true, false), multiple_boolean_params, flag_argument_controls_behavior

Measured by
none

Refactored by
replace_boolean_with_enum, split_method, introduce_options_object, name_intent

Enforced by
none

Before

```typescript
createFoo(true, false, true);
```

After

```typescript
createFoo({ active: true, archived: false, notify: true });
```

### Long Parameter List

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [object_creation](https://banes-lab.com/records/force/object-creation.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Value Object](https://banes-lab.com/records/arch/value-object.md)

Violated by
Grow function or constructor signatures until related inputs, optional modes, and dependencies become hard to understand or validate.

Detected by
arity_above_threshold, repeated_parameter_groups, many_optional_params

Measured by
none

Refactored by
introduce_parameter_object, builder, [value_object](https://banes-lab.com/records/arch/value-object.md), dependency_container

Enforced by
none

Before

```typescript
function makeFoo(a, b, c, d, e, f, g) {}
```

After

```typescript
interface MakeFooInput { a: A; b: B; c: C; d: D; e: E; f: F; g: G; }
function makeFoo(input: MakeFooInput) {}
```

### Magic Value

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Single Source of Truth](https://banes-lab.com/records/arch/single-source-of-truth.md)

Violated by
Encode policy, [thresholds](https://banes-lab.com/records/lex/thresholds.md), status, timing, permissions, or domain rules as unexplained literals.

Detected by
repeated_number_literal, unexplained_string_literal, inline_threshold, hidden_timeout

Measured by
none

Refactored by
name_constant, centralize_rule, externalize_config_if_runtime_variable, document_semantics

Enforced by
none

Before

```typescript
if (foo.retries > 3) fail(foo);
```

After

```typescript
const MAX_FOO_RETRIES = 3;
if (foo.retries > MAX_FOO_RETRIES) fail(foo);
```

### Speculative Generality

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [runtime_extensibility](https://banes-lab.com/records/force/runtime-extensibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Minimum Viable Architecture](https://banes-lab.com/records/arch/minimum-viable-architecture.md)

Violated by
Build abstractions, [extension points](https://banes-lab.com/records/arch/extension-points.md), layers, or configuration for variation that has no evidence of existing or near-term need.

Detected by
single_implementation_interface, unused_extension_point, config_never_varies, abstract_base_without_variants

Measured by
none

Refactored by
inline_abstraction, remove_unused_extension, defer_generalization, apply_minimum_viable_architecture

Enforced by
none

Before

```typescript
abstract class AbstractFooProviderFactoryBase<T> { abstract create(): T; }
```

After

```typescript
function createFoo(input: CreateFooInput): Foo { return Foo.create(input); }
```

### Premature Abstraction

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)

Violated by
Extract a shared abstraction before variation is understood, causing the abstraction to fit no use case well.

Detected by
many_flags_in_shared_abstraction, subclasses_override_most_behavior, callers_work_around_abstraction

Measured by
none

Refactored by
duplicate_until_pattern_stabilizes, split_abstraction, extract_later_from_evidence

Enforced by
none

Before

```typescript
interface FooStrategy { run(): void; }
class OnlyFooStrategy implements FooStrategy { run() {} }
```

After

```typescript
function runFoo() {}
```

### Over-Abstraction

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Minimum Viable Architecture](https://banes-lab.com/records/arch/minimum-viable-architecture.md)

Violated by
Add too many interfaces, layers, factories, [adapters](https://banes-lab.com/records/lex/adapters.md), or generic types relative to actual variability.

Detected by
deep_call_stack_for_simple_task, one_method_interfaces, factory_of_factory, abstraction_ratio_too_high

Measured by
none

Refactored by
collapse_layers, inline_interface, remove_unused_indirection, preserve_only_real_boundaries

Enforced by
none

Before

```typescript
const foo = fooFactoryProvider.getFactory().createBuilder().build();
```

After

```typescript
const foo = Foo.create(input);
```

### Golden Hammer

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[First-Principles Design](https://banes-lab.com/records/arch/first-principles-design.md)

Violated by
Apply a familiar pattern, framework, architecture style, or technology to problems regardless of fit.

Detected by
same_pattern_everywhere, solution_precedes_problem, ADR_missing_alternatives, high_workaround_count

Measured by
none

Refactored by
force_analysis, tradeoff_matrix, ADR_with_alternatives, contextual_pattern_selection

Enforced by
none

Before

```typescript
const config = parseFooConfig(runRegexOverEverything(rawYaml));
```

After

```typescript
const config = FooConfigSchema.parse(yaml.load(rawYaml));
```

### Pattern Cargo Cult

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[First-Principles Design](https://banes-lab.com/records/arch/first-principles-design.md)

Violated by
Copy named patterns or architecture styles without implementing their required forces, [contracts](https://banes-lab.com/records/lex/contracts.md), constraints, or validation gates.

Detected by
ports_without_boundary_rules, plugins_without_contracts, events_without_idempotency, microservices_without_autonomy

Measured by
none

Refactored by
validate_required_forces, add_missing_contracts, rename_if_not_pattern, remove_pattern_shell

Enforced by
none

Before

```typescript
class FooSingletonFactoryObserverProxy {}
```

After

```typescript
class FooService { constructor(private readonly store: FooStore) {} }
```

### Lava Flow

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)

Violated by
Preserve obsolete, half-migrated, or unexplained code paths because no record says whether they are still needed.

Detected by
old_paths_never_called, deprecated_code_without_removal_date, feature_flags_stuck_on_or_off, comments_say_do_not_touch

Measured by
none

Refactored by
usage_instrumentation, owner_assignment, deprecation_plan, delete_after_evidence

Enforced by
none

Before

```typescript
function saveFoo(foo) {
legacySaveV1(foo);
if (false) legacySaveV2(foo);
newSave(foo);
}
```

After

```typescript
function saveFoo(foo: Foo) { return fooStore.save(foo); }
```

### Zombie Code

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)

Violated by
Leave unreachable, unused, or disabled code in the system where it keeps misleading the developer and the model, and can be reactivated by accident.

Detected by
unused_exports, unreachable_branches, dead_feature_flags, zero_runtime_hits

Measured by
none

Refactored by
delete_code, archive_reference, remove_exports, add_dead_code_check

Enforced by
none

Before

```typescript
function computeFoo() {}
function computeFooOld() {}
function computeFooDeprecated() {}
```

After

```typescript
function computeFoo() {}
```

### Temporal Coupling

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [causality_ordering](https://banes-lab.com/records/force/causality-ordering.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Statelessness](https://banes-lab.com/records/arch/statelessness.md)

Violated by
Require operations to be called in a specific undocumented order for correctness.

Detected by
must_call_initialize_first, method_fails_before_setup, order_dependent_tests, state_machine_hidden_in_calls

Measured by
none

Refactored by
encode_state_machine, constructor_valid_state, make_order_explicit, add_precondition

Enforced by
none

Before

```typescript
foo.init();
foo.configure();
foo.start();
```

After

```typescript
const foo = Foo.start(config);
```

### Hidden Side Effect

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [event_messaging](https://banes-lab.com/records/force/event-messaging.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Controlled Side Effects](https://banes-lab.com/records/arch/controlled-side-effects.md)

Violated by
Make an operation appear like a query or pure function while it mutates state, performs I/O, emits events, or changes global context.

Detected by
getter_mutates_state, query_writes, function_emits_event_unexpectedly, global_context_modified

Measured by
none

Refactored by
rename_command, separate_query_from_command, make_effect_explicit, move_to_effect_boundary

Enforced by
none

Before

```typescript
function getFoo(id: FooId) { audit.log(id); return fooStore.find(id); }
```

After

```typescript
function getFoo(id: FooId) { return fooStore.find(id); }
function auditFooAccess(id: FooId) { audit.log(id); }
```

### Action at a Distance

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [event_messaging](https://banes-lab.com/records/force/event-messaging.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Controlled Side Effects](https://banes-lab.com/records/arch/controlled-side-effects.md)

Violated by
Let one part of the system change behavior far away through globals, monkey patches, shared registries, [ambient context](https://banes-lab.com/records/arch/ambient-context.md), or implicit event listeners.

Detected by
monkey_patch, global_registry_mutation, ambient_context_write, implicit_subscriber_side_effect

Measured by
none

Refactored by
explicit_dependency, localize_effect, trace_causation, restrict_global_mutation

Enforced by
none

Before

```typescript
globalThis.fooFlag = true;
function runFoo() { if (globalThis.fooFlag) go(); }
```

After

```typescript
function runFoo(options: { enabled: boolean }) { if (options.enabled) go(); }
```

### Ambient Context

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md)

Violated by
Read user, tenant, locale, transaction, permissions, or request state from implicit global context instead of explicit parameters or scoped context objects.

Detected by
global_current_user, thread_local_business_data, implicit_tenant_lookup, hidden_transaction_context

Measured by
none

Refactored by
pass_context_explicitly, scope_context_object, inject_request_context, limit_ambient_use_to_infrastructure

Enforced by
none

Before

```typescript
function saveFoo(foo) { return CurrentTenant.get().db.save(foo); }
```

After

```typescript
function saveFoo(foo: Foo, tenant: Tenant) { return tenant.db.save(foo); }
```

### Inconsistent Error Model

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md)

Violated by
Mix exceptions, nulls, booleans, strings, partial objects, console logging, and silent failure for the same error class.

Detected by
same_error_returns_null_or_throws, mixed_error_shapes, string_errors, partial_success_without_contract

Measured by
none

Refactored by
typed_result, standard_error_contract, [error_boundary](https://banes-lab.com/records/algo/error-boundary.md), normalize_failure_modes

Enforced by
none

Before

```typescript
function a() { return null; }
function b() { throw "bad"; }
function c() { return { error: true }; }
```

After

```typescript
function a(): Result<Foo, FooError> {}
function b(): Result<Bar, FooError> {}
function c(): Result<Baz, FooError> {}
```

### Exception Control Flow

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Error Handling](https://banes-lab.com/records/arch/error-handling.md)

Violated by
Use exceptions for expected branching, normal absence, validation alternatives, or loop control.

Detected by
try_catch_for_lookup_absence, exceptions_in_hot_loop, catch_chooses_normal_path

Measured by
none

Refactored by
return_result_type, use_option_type, validate_before_call, branch_explicitly

Enforced by
none

Before

```typescript
try {
return await fooStore.find(id);
} catch (notFound) {
return fooStore.create(id);
}
```

After

```typescript
const foo = await fooStore.find(id);
return foo ?? fooStore.create(id);
```

### Null Semantics Drift

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [semantic_consistency](https://banes-lab.com/records/force/semantic-consistency.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Null Object Pattern](https://banes-lab.com/records/arch/null-object-pattern.md)

Violated by
Use null, undefined, empty string, zero, false, missing field, and empty collection interchangeably.

Detected by
null_and_empty_string_same_field, optional_field_without_semantics, truthy_checks_for_domain_state

Measured by
none

Refactored by
define_absence_semantics, use_option_result, schema_nullability, normalize_input

Enforced by
none

Before

```typescript
const foo = find(id);
if (foo) use(foo);
```

After

```typescript
const foo = find(id) ?? Foo.none();
foo.use();
```

### Anemic Domain Model

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [semantic_consistency](https://banes-lab.com/records/force/semantic-consistency.md), [model_governance](https://banes-lab.com/records/force/model-governance.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Aggregate](https://banes-lab.com/records/arch/aggregate.md), [Entity](https://banes-lab.com/records/arch/entity.md)

Violated by
Store domain data in passive objects while business rules live in services, controllers, handlers, or scripts.

Detected by
entities_with_getters_setters_only, services_contain_all_rules, validation_outside_aggregate

Measured by
none

Refactored by
move_behavior_to_domain, add_value_object, add_aggregate_invariant, encapsulate_state

Enforced by
none

Before

```typescript
class Foo { status: string; }
function shipFoo(foo: Foo) { if (foo.status === "ready") foo.status = "shipped"; }
```

After

```typescript
class Foo {
private status = FooStatus.Ready;
ship() { if (this.status !== FooStatus.Ready) throw new NotReadyError(); this.status = FooStatus.Shipped; }
}
```

### Transaction Script Sprawl

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [state_transaction](https://banes-lab.com/records/force/state-transaction.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md), [control_coordination](https://banes-lab.com/records/force/control-coordination.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Domain Service](https://banes-lab.com/records/arch/domain-service.md)

Violated by
Encode business processes as procedural scripts that directly coordinate validation, persistence, external calls, and domain decisions.

Detected by
large_service_method, business_rules_in_controller, repeated_procedure_blocks

Measured by
none

Refactored by
extract_domain_model, extract_use_case, separate_ports, move_rules_to_domain

Enforced by
none

Before

```typescript
function createFooHandler(req) {
validate(req); price(req); tax(req); persist(req); notify(req);
}
```

After

```typescript
class CreateFoo {
constructor(private readonly foos: FooRepository) {}
execute(input: CreateFooInput) { const foo = Foo.create(input); return this.foos.save(foo); }
}
```

### Fat Controller

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [security_governance](https://banes-lab.com/records/force/security-governance.md), [control_coordination](https://banes-lab.com/records/force/control-coordination.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Domain Service](https://banes-lab.com/records/arch/domain-service.md)

Violated by
Put validation, business rules, persistence orchestration, mapping, [authorization](https://banes-lab.com/records/arch/authorization.md), and response formatting in the controller layer.

Detected by
controller_method_too_large, repository_calls_plus_business_rules, domain_logic_in_route_handler

Measured by
none

Refactored by
extract_use_case, move_domain_logic, add_request_mapper, add_application_service

Enforced by
none

Before

```typescript
class FooController {
create(req) { const foo = { ...req.body }; if (!foo.name) throw 0; db.insert(foo); email(foo); }
}
```

After

```typescript
class FooController {
constructor(private readonly createFoo: CreateFoo) {}
create(req: Request) { return this.createFoo.execute(req.body); }
}
```

### Repository Dump

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md), [control_coordination](https://banes-lab.com/records/force/control-coordination.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)

Violated by
Place business-specific querying, [orchestration](https://banes-lab.com/records/arch/orchestration.md), mapping, [caching](https://banes-lab.com/records/arch/caching.md), [validation](https://banes-lab.com/records/arch/validation.md), and policy into a repository until it becomes a second service layer.

Detected by
repository_methods_encode_business_process, authorization_in_repository, repository_calls_external_services

Measured by
none

Refactored by
extract_query_service, move_policy_to_domain_or_use_case, split_repository, define_persistence_contract

Enforced by
none

Before

```typescript
class FooRepository { findActiveFoosForBarInRegionSortedByBaz() {} }
```

After

```typescript
class FooRepository { find(spec: FooSpecification): Foo[] { return this.query(spec.toQuery()); } }
```

### Utility Dump

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md)

Violated by
Accumulate unrelated helper functions in generic utility modules without ownership, cohesion, or domain language.

Detected by
utils_file_growth, unrelated_helpers, many_modules_import_same_dump, generic_names

Measured by
none

Refactored by
move_helper_to_owner, split_by_domain, extract_value_object, name_concept

Enforced by
none

Before

```typescript
export function formatFoo() {}
export function parseBar() {}
export function hashBaz() {}
```

After

```typescript
export const fooFormatter = { format(foo: Foo): string {} };
export const barParser = { parse(raw: string): Bar {} };
```

### Framework Leakage

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Ports and Adapters Architecture](https://banes-lab.com/records/arch/ports-and-adapters-architecture.md)

Violated by
Let framework classes, decorators, lifecycle assumptions, request objects, ORM entities, or infrastructure annotations enter core domain logic.

Detected by
request_object_in_domain, ORM_entity_as_domain, framework_annotation_in_core, container_lookup_in_business_logic

Measured by
none

Refactored by
add_adapter, map_to_domain_model, introduce_port, move_framework_outward

Enforced by
none

Before

```typescript
class Foo { @Column() name: string; @OneToMany() bars: Bar[]; }
```

After

```typescript
class Foo { constructor(readonly name: string, readonly bars: readonly Bar[]) {} }
class FooEntity { @Column() name: string; }
```

### Vendor Lock-In Leakage

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [model_governance](https://banes-lab.com/records/force/model-governance.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Anti-Corruption Layer](https://banes-lab.com/records/arch/anti-corruption-layer.md)

Violated by
Spread vendor-specific APIs, models, exceptions, identifiers, or configuration throughout application and domain code.

Detected by
vendor_imports_outside_adapter, vendor_error_types_in_domain, vendor_schema_as_canonical_model

Measured by
none

Refactored by
extract_vendor_adapter, define_port, translate_errors, own_canonical_model

Enforced by
none

Before

```typescript
import { BlobStore } from "acme-blob-sdk";
function saveFoo(foo) { return new BlobStore().putObject(foo); }
```

After

```typescript
interface FooBlobStore { put(foo: Foo): Promise<void>; }
function saveFoo(foo: Foo, store: FooBlobStore) { return store.put(foo); }
```

### Circular Dependency

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Directed Acyclic Graph (DAG)](https://banes-lab.com/records/arch/directed-acyclic-graph.md)

Violated by
Allow modules to depend on each other directly or indirectly until no module can change, test, deploy, or initialize independently.

Detected by
dependency_cycle, mutual_imports, bootstrap_order_hacks, bidirectional_service_calls

Measured by
none

Refactored by
invert_dependency, extract_interface, split_shared_contract, introduce_event_or_mediator

Enforced by
none

Before

```typescript
import { bar } from "./bar";
export const foo = () => bar();
import { foo } from "./foo";
export const bar = () => foo();
```

After

```typescript
export const foo = (run: () => void) => run();
export const bar = () => {};
foo(bar);
```

### Cyclic Deployment Dependency

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Service Autonomy](https://banes-lab.com/records/arch/service-autonomy.md)

Violated by
Require two or more services or packages to deploy in lockstep because each depends on the other’s current behavior.

Detected by
coordinated_release_required, consumer_breaks_without_provider_release, mutual_contract_change

Measured by
none

Refactored by
version_contract, backward_compatible_change, consumer_driven_contract_tests, adapter_phase_migration

Enforced by
none

Before

```typescript
fooService.callsAtStartup(barService);
barService.callsAtStartup(fooService);
```

After

```typescript
fooService.publishes(fooReady);
barService.subscribes(fooReady);
```

### Synchronous Chain Trap

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Asynchronous Communication](https://banes-lab.com/records/arch/asynchronous-communication.md)

Violated by
Build deep request-time chains across services or modules, making latency, [availability](https://banes-lab.com/records/lex/availability.md), and failure behavior multiplicative.

Detected by
sync_depth_above_threshold, request_path_many_remote_calls, cascading_timeout

Measured by
none

Refactored by
collapse_reads, introduce_async_event, cache_read_model, apply_timeout_bulkhead

Enforced by
none

Before

```typescript
const foo = await a();
const bar = await b(foo);
const baz = await c(bar);
return slowSyncCall(a, b, c);
```

After

```typescript
const [foo, bar, baz] = await Promise.all([a(), b(), c()]);
```

### Chatty Interface

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Uniform Interface](https://banes-lab.com/records/arch/uniform-interface.md)

Violated by
Require many small remote calls to complete one user or business operation.

Detected by
N_plus_1_API_calls, many_calls_per_screen, loop_contains_remote_call

Measured by
none

Refactored by
coarse_grained_endpoint, batch_api, query_projection, data_loader

Enforced by
none

Before

```typescript
const results = [];
for (const id of fooIds) results.push(await fooApi.get(id));
```

After

```typescript
const results = await fooApi.getMany(fooIds);
```

### N Plus One Query

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Algorithmic Efficiency](https://banes-lab.com/records/arch/algorithmic-efficiency.md)

Violated by
Fetch a collection, then issue one query or remote call per item rather than fetching required related data intentionally.

Detected by
query_inside_loop, remote_call_inside_loop, query_count_scales_with_rows

Measured by
none

Refactored by
batch_fetch, join_or_include, preload, cache_projection

Enforced by
none

Before

```typescript
const foos = await fooStore.all();
for (const foo of foos) foo.bar = await barStore.find(foo.barId);
```

After

```typescript
const foos = await fooStore.all();
const bars = await barStore.findMany(foos.map(f => f.barId));
```

### Cache Poisoning by Design

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [security_governance](https://banes-lab.com/records/force/security-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Caching](https://banes-lab.com/records/arch/caching.md)

Violated by
Cache data without key correctness, tenant isolation, authorization context, freshness, invalidation, or schema version.

Detected by
cache_key_missing_user_or_tenant, cache_without_version, no_invalidation, authorization_not_in_cache_key

Measured by
none

Refactored by
define_cache_contract, include_context_in_key, add_invalidation, add_ttl_and_version

Enforced by
none

Before

```typescript
fooCache.set(request.path, response);
```

After

```typescript
if (response.ok && response.cacheable) {
fooCache.set(cacheKey(request.identity, request.path), response, { ttlMs: 60_000 });
}
```

### Retry Storm

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [resilience_recovery](https://banes-lab.com/records/force/resilience-recovery.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Circuit Breaker Pattern](https://banes-lab.com/records/arch/circuit-breaker-pattern.md)

Violated by
Allow many clients or workers to retry failed dependencies aggressively and synchronously, increasing pressure on the failing system.

Detected by
no_backoff, no_jitter, unbounded_retries, retry_on_non_idempotent_operation

Measured by
none

Refactored by
bounded_retry, exponential_backoff, jitter, circuit_breaker, idempotency_key

Enforced by
none

Before

```typescript
while (true) { try { return await call(); } catch { } }
```

After

```typescript
return retry(call, { attempts: 5, backoff: exponentialJitter(), giveUp: dlq });
```

### Timeout Omission

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [resilience_recovery](https://banes-lab.com/records/force/resilience-recovery.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Timeout Pattern](https://banes-lab.com/records/arch/timeout-pattern.md)

Violated by
Call external systems without explicit timeouts, cancellation, or deadline propagation.

Detected by
HTTP_call_without_timeout, DB_query_without_timeout, missing_cancellation_token, no_deadline_propagation

Measured by
none

Refactored by
add_timeout, propagate_deadline, add_cancellation, fallback_or_failfast

Enforced by
none

Before

```typescript
const foo = await fetch(fooUrl);
```

After

```typescript
const foo = await fetch(fooUrl, { signal: AbortSignal.timeout(5000) });
```

### Missing Backpressure

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [resilience_recovery](https://banes-lab.com/records/force/resilience-recovery.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Backpressure](https://banes-lab.com/records/arch/backpressure.md)

Violated by
Accept work faster than the system can process it without queue limits, admission control, rate limits, or shedding.

Detected by
unbounded_queue, no_rate_limit, no_admission_control, memory_grows_with_load

Measured by
none

Refactored by
bounded_queue, rate_limit, load_shed, apply_backpressure_signal

Enforced by
none

Before

```typescript
stream.on("data", d => queue.push(process(d)));
```

After

```typescript
stream.pipe(new BoundedFooProcessor({ highWaterMark: 100 }));
```

### Silent Data Corruption

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Fail Fast](https://banes-lab.com/records/arch/fail-fast.md)

Violated by
Accept, transform, or persist invalid data without validation, checksums, [invariants](https://banes-lab.com/records/arch/invariants.md), [reconciliation](https://banes-lab.com/records/lex/reconciliation.md), or audit.

Detected by
missing_boundary_validation, no_invariant_check, impossible_state_in_database, reconciliation_failures

Measured by
none

Refactored by
validate_at_boundary, add_invariants, add_reconciliation, audit_data_changes

Enforced by
none

Before

```typescript
const total = Number(a) + Number(b);
save(total);
```

After

```typescript
const total = Money.add(Money.parse(a), Money.parse(b));
save(total);
```

### Lost Update

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Concurrency Control](https://banes-lab.com/records/arch/concurrency-control.md)

Violated by
Allow concurrent writers to overwrite each other without version checks, locks, compare-and-swap, or transaction isolation.

Detected by
last_write_wins_without_version, no_optimistic_lock, concurrent_update_defects

Measured by
none

Refactored by
[optimistic_locking](https://banes-lab.com/records/arch/optimistic-locking.md), [pessimistic_locking](https://banes-lab.com/records/arch/pessimistic-locking.md), merge_policy, transaction_isolation

Enforced by
none

Before

```typescript
const foo = await load(id);
foo.count += 1;
await save(foo);
```

After

```typescript
await fooStore.update(id, { count: increment(1) }, { expectedVersion: foo.version });
```

### Dual Write

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [event_messaging](https://banes-lab.com/records/force/event-messaging.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Outbox Pattern](https://banes-lab.com/records/arch/outbox-pattern.md)

Violated by
Write related state to two systems without atomicity, outbox, [saga](https://banes-lab.com/records/lex/saga.md), [reconciliation](https://banes-lab.com/records/lex/reconciliation.md), or compensation.

Detected by
database_write_then_message_publish, two_databases_updated_without_transaction_or_outbox, manual_repair_needed

Measured by
none

Refactored by
transactional_outbox, [saga](https://banes-lab.com/records/lex/saga.md), [idempotent_consumer](https://banes-lab.com/records/arch/idempotent-consumer.md), reconciliation_job

Enforced by
none

Before

```typescript
await db.save(foo);
await searchIndex.add(foo);
```

After

```typescript
await db.save(foo);
await outbox.append(fooCreatedEvent(foo));
```

### Read-Your-Writes Violation

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Causal Consistency](https://banes-lab.com/records/arch/causal-consistency.md)

Violated by
Let users or processes perform a write and then read from a stale replica, cache, projection, or eventually consistent view without explicit consistency contract.

Detected by
write_then_stale_read_defect, cache_not_invalidated_after_write, replica_read_after_write

Measured by
none

Refactored by
read_from_primary_after_write, invalidate_cache, show_pending_state, define_consistency_contract

Enforced by
none

Before

```typescript
await primaryDb.write(foo);
const view = await replicaDb.read(foo.id);
```

After

```typescript
await primaryDb.write(foo);
const view = await readAfterWrite(foo.id, { consistency: "read-your-writes" });
```

### Security Theater

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [security_governance](https://banes-lab.com/records/force/security-governance.md), [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Threat Modeling](https://banes-lab.com/records/arch/threat-modeling.md)

Violated by
Add visible security controls that do not reduce the actual threat model or can be bypassed by alternate paths.

Detected by
control_not_linked_to_threat, bypass_endpoint, client_only_security, audit_passes_but_attack_succeeds

Measured by
none

Refactored by
threat_model, server_side_enforcement, penetration_test, [policy_as_code](https://banes-lab.com/records/arch/policy-as-code.md)

Enforced by
none

Before

```typescript
if (password.length > 0) grantFooAccess(user);
```

After

```typescript
const verified = await verifyPassword(password, user.passwordHash);
if (!verified) throw new UnauthorizedError();
grantFooAccess(user);
```

### Authorization Scattering

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [security_governance](https://banes-lab.com/records/force/security-governance.md), [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Authorization](https://banes-lab.com/records/arch/authorization.md)

Violated by
Spread authorization checks across controllers, services, repositories, UI, and ad hoc conditionals without a central policy model.

Detected by
repeated_role_checks, missing_policy_engine, endpoint_without_authz, inconsistent_resource_access

Measured by
none

Refactored by
centralize_policy, [policy_as_code](https://banes-lab.com/records/arch/policy-as-code.md), ABAC_or_RBAC_model, authorization_tests

Enforced by
none

Before

```typescript
if (user.role === "admin") deleteFoo();
if (user.role === "admin" || user.id === foo.owner) editFoo();
```

After

```typescript
if (policy.can(user, "delete", foo)) deleteFoo();
if (policy.can(user, "edit", foo)) editFoo();
```

### Secret Sprawl

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [modularity](https://banes-lab.com/records/force/modularity.md), [security_governance](https://banes-lab.com/records/force/security-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Secrets Management](https://banes-lab.com/records/arch/secrets-management.md)

Violated by
Store credentials, tokens, keys, certificates, or sensitive configuration across code, config files, [logs](https://banes-lab.com/records/lex/logs.md), tickets, and local environments.

Detected by
secret_in_repo, secret_in_log, shared_static_token, manual_secret_distribution

Measured by
none

Refactored by
secret_manager, rotate_secret, scan_repository, least_privilege_credential

Enforced by
none

Before

```typescript
const key = "sk_live_abc123";
const dbPass = "hunter2";
```

After

```typescript
const key = await secrets.get("foo.api.key");
const dbPass = await secrets.get("foo.db.password");
```

### Personal Data Oversharing

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Privacy by Design](https://banes-lab.com/records/arch/privacy-by-design.md)

Violated by
Collect, store, log, transmit, or expose more personal data than needed for the declared purpose.

Detected by
personal_data_in_logs, unused_sensitive_fields, broad_export, missing_data_minimization

Measured by
none

Refactored by
[data_minimization](https://banes-lab.com/records/lex/data-minimization.md), field_redaction, purpose_binding, retention_policy

Enforced by
none

Before

```typescript
logger.info("created foo", { email: user.email, ssn: user.ssn });
```

After

```typescript
logger.info("created foo", { userId: user.id });
```

### Observability Noise

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [observability_traceability](https://banes-lab.com/records/force/observability-traceability.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Alerting](https://banes-lab.com/records/arch/alerting.md)

Violated by
Emit excessive, low-signal logs, [metrics](https://banes-lab.com/records/lex/metrics.md), [traces](https://banes-lab.com/records/lex/traces.md), or alerts without severity, [ownership](https://banes-lab.com/records/lex/ownership.md), cardinality control, or actionability.

Detected by
high_alert_ack_without_action, high_cardinality_metrics, logs_without_context, duplicate_alerts

Measured by
none

Refactored by
define_signal_quality, reduce_cardinality, add_runbook_owner, sample_or_aggregate

Enforced by
none

Before

```typescript
logger.info("entering loop");
for (const f of foos) logger.info("iter", f);
```

After

```typescript
logger.info("foo.batch.processed", { count: foos.length, durationMs });
```

### Log-as-Control-Flow

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [resilience_recovery](https://banes-lab.com/records/force/resilience-recovery.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Logging](https://banes-lab.com/records/arch/logging.md)

Violated by
Log errors or warnings as if logging itself handles the failure, while the system continues without recovery, propagation, or safe fallback.

Detected by
catch_log_continue, logged_error_without_return_or_throw, critical_log_no_alert

Measured by
none

Refactored by
return_typed_error, fail_fast_or_fallback, add_recovery_policy, alert_critical_failure

Enforced by
none

Before

```typescript
if (lastFooLogLine.includes("FooReady")) startBarProcessor();
```

After

```typescript
fooEvents.on("FooReady", startBarProcessor);
```

### Manual Runbook Dependency

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [resilience_recovery](https://banes-lab.com/records/force/resilience-recovery.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Auto-Remediation](https://banes-lab.com/records/arch/auto-remediation.md)

Violated by
Perform by hand the repeatable operational actions during incidents, deploys, migrations, or recovery.

Detected by
same_manual_incident_steps, manual_migration_sequence, operator_specific_knowledge

Measured by
none

Refactored by
automate_runbook, add_guardrails, validate_preconditions, record_execution_log

Enforced by
none

Before

```typescript
const RUNBOOK = "on failure, ssh in and run restart-foo.sh";
```

After

```typescript
health.onUnhealthy(() => orchestrator.restart("foo"));
```

### Big-Bang Release

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Canary Deployment](https://banes-lab.com/records/arch/canary-deployment.md)

Violated by
Ship a large, irreversible, all-user change without staged rollout, feature flags, canary, [rollback](https://banes-lab.com/records/arch/rollback.md), or blast-radius control.

Detected by
no_canary, no_feature_flag, no_rollback_plan, large_release_batch

Measured by
none

Refactored by
feature_flag, canary_deploy, blue_green, rollback_plan, small_batch_release

Enforced by
none

Before

```typescript
deployEverything("foo", "bar", "baz");
```

After

```typescript
release("foo", { strategy: canary(0.1) });
```

### Irreversible Migration

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Rollback](https://banes-lab.com/records/arch/rollback.md)

Violated by
Apply schema, data, or infrastructure changes that cannot safely run alongside old versions or be rolled back.

Detected by
drop_column_before_consumers_removed, destructive_data_transform_no_backup, no_backward_compatible_phase

Measured by
none

Refactored by
expand_contract_migration, backup, dual_read_write_temporarily, rollback_test

Enforced by
none

Before

```typescript
await db.exec("ALTER TABLE foo DROP COLUMN legacy_name");
```

After

```typescript
await migrate({ up: addFooName, down: restoreFooName });
```

### Big-Upfront Frozen Architecture

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)

Violated by
Lock in major architectural decisions before validating domain forces, [quality attributes](https://banes-lab.com/records/arch/quality-attributes.md), operational realities, and change vectors.

Detected by
heavy_architecture_before_usage, ADR_without_evidence, future-proofing_without_feedback

Measured by
none

Refactored by
[minimum_viable_architecture](https://banes-lab.com/records/arch/minimum-viable-architecture.md), [evolutionary_architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md), [fitness_functions](https://banes-lab.com/records/arch/fitness-functions.md), decision_review

Enforced by
none

Before

```typescript
const ARCHITECTURE = designAllModulesForNextFiveYears();
```

After

```typescript
const foo = defineModule("foo", { exports: { createFoo } });
registry.add(foo);
```

### Architecture Astronaut

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [model_governance](https://banes-lab.com/records/force/model-governance.md), [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Minimum Viable Architecture](https://banes-lab.com/records/arch/minimum-viable-architecture.md)

Violated by
Prefer abstract frameworks, taxonomies, meta-models, and generic engines over concrete user, domain, and operational needs.

Detected by
generic_platform_before_product_need, few_real_consumers, high_framework_workaround_count

Measured by
none

Refactored by
anchor_to_use_cases, prove_with_vertical_slice, delete_unused_generality, measure_delivery_cost

Enforced by
none

Before

```typescript
class AbstractFooMetaStrategyOrchestrationEngineFactory {}
```

After

```typescript
class CreateFoo { execute(input: CreateFooInput): Foo {} }
```

### Feature-Only Design

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [security_governance](https://banes-lab.com/records/force/security-governance.md), [performance_scaling](https://banes-lab.com/records/force/performance-scaling.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Quality Attributes](https://banes-lab.com/records/arch/quality-attributes.md)

Violated by
Optimize architecture for immediate feature delivery while ignoring quality attributes such as security, [operability](https://banes-lab.com/records/lex/operability.md), [scalability](https://banes-lab.com/records/arch/scalability.md), [maintainability](https://banes-lab.com/records/lex/maintainability.md), and evolvability.

Detected by
no_SLOs, no_security_review, no_operability_requirements, quality_attribute_absent_from_ADR

Measured by
none

Refactored by
define_quality_scenarios, add_fitness_functions, [architecture_review](https://banes-lab.com/records/arch/architecture-review.md), risk_register

Enforced by
none

Before

```typescript
function addFooFeature() { hack(); patch(); bypassLint(); }
```

After

```typescript
function addFooFeature(input: CreateFooInput) { return createFoo.execute(input); }
```

### Test Pyramid Inversion

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Testability](https://banes-lab.com/records/arch/testability.md)

Violated by
Rely mainly on slow, brittle end-to-end tests while unit, [contract](https://banes-lab.com/records/lex/contracts.md), component, and property tests are sparse.

Detected by
high_E2E_ratio, slow_CI, flaky_integration_tests, low_unit_contract_coverage

Measured by
none

Refactored by
add_unit_tests, contract_tests, component_tests, property_tests, reduce_E2E_scope

Enforced by
none

Before

```typescript
test.e2e("create foo", fullBrowserFlow);
test.e2e("rename foo", fullBrowserFlow);
test.e2e("delete foo", fullBrowserFlow);
```

After

```typescript
test.unit("FooValidator rejects an empty name", () => expect(() => validateFoo({ name: "" })).toThrow());
test.integration("FooRepository persists a Foo", async () => {
await fooRepository.save(foo);
expect(await fooRepository.find(foo.id)).toEqual(foo);
});
test.e2e("the critical signup path", criticalPathOnly);
```

### Mock Mirage

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md), [observability_traceability](https://banes-lab.com/records/force/observability-traceability.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Specification-Based Testing](https://banes-lab.com/records/arch/specification-based-testing.md)

Violated by
Overuse mocks so tests verify internal calls rather than observable behavior or contracts.

Detected by
tests_fail_on_refactor_without_behavior_change, assert_called_everywhere, no_contract_tests

Measured by
none

Refactored by
test_observable_behavior, contract_test, use_fake_at_boundary, reduce_internal_mocks

Enforced by
none

Before

```typescript
const store = { save: fn(), find: fn().returns(foo) };
```

After

```typescript
const store = new InMemoryFooStore();
runFooStoreContract(store);
```

### Flaky Test Normalization

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [semantic_consistency](https://banes-lab.com/records/force/semantic-consistency.md), [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Reproducibility](https://banes-lab.com/records/arch/reproducibility.md)

Violated by
Accept intermittent test failures as normal and rerun until green instead of fixing nondeterminism or isolation defects.

Detected by
rerun_to_pass, quarantined_tests_never_fixed, time_order_random_test_failures

Measured by
none

Refactored by
isolate_state, control_time_randomness, fix_race, remove_external_dependency

Enforced by
none

Before

```typescript
test.retry(5)("foo works sometimes", async () => { await sleep(random()); expect(await getFoo()).toBeTruthy(); });
```

After

```typescript
test("foo is created deterministically", async () => { const foo = await createFoo.execute(input); expect(foo.id).toBe(expectedId); });
```

### Prompt Sprawl

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md), [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Prompt Engineering](https://banes-lab.com/records/arch/prompt-engineering.md)

Violated by
Scatter prompts, retrieval rules, model parameters, safety instructions, and output schemas across code without versioning, [evaluation](https://banes-lab.com/records/lex/evaluation.md), or ownership.

Detected by
prompt_literals_in_many_files, no_prompt_registry, no_eval_for_prompt_change, model_params_scattered

Measured by
none

Refactored by
prompt_registry, version_prompt, add_eval_suite, centralize_model_config

Enforced by
none

Before

```typescript
const a = model.run("summarize this foo: " + foo);
const b = model.run("pls summarize foo " + foo);
```

After

```typescript
const summary = model.run(FOO_PROMPTS.summarize({ foo }));
```

### Ungrounded Content

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Agentic Architecture](https://banes-lab.com/records/arch/agentic-architecture.md)

Violated by
Generate answers, classifications, plans, or decisions without evidence retrieval, source references, confidence limits, or unsupported-claim handling.

Detected by
answer_without_sources_when_sources_required, no_retrieval_trace, unsupported_claims, confidence_not_disclosed

Measured by
none

Refactored by
RAG_boundary, evidence_citation, claim_validation, abstain_or_disclose_uncertainty

Enforced by
none

Before

```typescript
const answer = await model.run(question);
return answer;
```

After

```typescript
const context = await retrieve(question);
const answer = await model.run(FOO_PROMPTS.answer({ question, context }));
return withCitations(answer, context);
```

### Model Version Ambiguity

- Kind: [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- Severity: discouraged
- Scope: [model_governance](https://banes-lab.com/records/force/model-governance.md)
- Layer: [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)

Details

Requires
none

Reinforces
none

Enables
none

In tension with
none

Conflicts with
none

Referenced by
[Model Governance](https://banes-lab.com/records/arch/model-governance.md)

Violated by
Use models, [embeddings](https://banes-lab.com/records/lex/embeddings.md), prompts, or evaluation artifacts without recording version, configuration, [dataset](https://banes-lab.com/records/lex/dataset.md), or inference context.

Detected by
model_name_missing_version, embedding_index_unversioned, eval_results_without_config, prompt_not_versioned

Measured by
none

Refactored by
[model_registry](https://banes-lab.com/records/lex/model-registry.md), version_prompt_dataset_index, record_inference_context, governance_log

Enforced by
none

Before

```typescript
const result = await model.run(prompt);
```

After

```typescript
const result = await model.run(prompt, { model: "foo-llm-2024-06", temperature: 0 });
logger.info("foo.inference", { model: result.model });
```

## Links to

- [anti-pattern](https://banes-lab.com/records/kind/anti-pattern.md)
- [modularity](https://banes-lab.com/records/force/modularity.md)
- [state_transaction](https://banes-lab.com/records/force/state-transaction.md)
- [Enforcement Core](https://banes-lab.com/records/layer/enforcement-core.md)
- [Component-Based Architecture](https://banes-lab.com/records/arch/component-based-architecture.md)
- [Modularity](https://banes-lab.com/records/arch/modularity.md)
- [Cyclic Dependencies](https://banes-lab.com/records/lex/cyclic-dependencies.md)
- [semantic_consistency](https://banes-lab.com/records/force/semantic-consistency.md)
- [domain_boundary](https://banes-lab.com/records/force/domain-boundary.md)
- [control_coordination](https://banes-lab.com/records/force/control-coordination.md)
- [Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md)
- [High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md)
- [Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md)
- [Abstraction](https://banes-lab.com/records/arch/abstraction.md)
- [Replaceability](https://banes-lab.com/records/arch/replaceability.md)
- [contract_compatibility](https://banes-lab.com/records/force/contract-compatibility.md)
- [security_governance](https://banes-lab.com/records/force/security-governance.md)
- [model_governance](https://banes-lab.com/records/force/model-governance.md)
- [Data Contract](https://banes-lab.com/records/arch/data-contract.md)
- [Canonical Schema](https://banes-lab.com/records/arch/canonical-schema.md)
- [causality_ordering](https://banes-lab.com/records/force/causality-ordering.md)
- [Explicit Contracts](https://banes-lab.com/records/arch/explicit-contracts.md)
- [Ordering](https://banes-lab.com/records/lex/ordering.md)
- [Side Effects](https://banes-lab.com/records/lex/side-effects.md)
- [Declarative Configuration](https://banes-lab.com/records/arch/declarative-configuration.md)
- [Configuration Externalization](https://banes-lab.com/records/arch/configuration-externalization.md)
- [Immutability](https://banes-lab.com/records/arch/immutability.md)
- [State Isolation](https://banes-lab.com/records/arch/state-isolation.md)
- [Explicit Boundaries](https://banes-lab.com/records/arch/explicit-boundaries.md)
- [correctness_verification](https://banes-lab.com/records/force/correctness-verification.md)
- [Policy as Code](https://banes-lab.com/records/arch/policy-as-code.md)
- [Metrics](https://banes-lab.com/records/lex/metrics.md)
- [runtime_extensibility](https://banes-lab.com/records/force/runtime-extensibility.md)
- [metaprogramming_modeling](https://banes-lab.com/records/force/metaprogramming-modeling.md)
- [Introspection](https://banes-lab.com/records/arch/introspection.md)
- [architecture_evolution](https://banes-lab.com/records/force/architecture-evolution.md)
- [Risk Management](https://banes-lab.com/records/arch/risk-management.md)
- [Mitigation](https://banes-lab.com/records/lex/mitigation.md)
- [Observability](https://banes-lab.com/records/arch/observability.md)
- [Traces](https://banes-lab.com/records/lex/traces.md)
- [event_messaging](https://banes-lab.com/records/force/event-messaging.md)
- [Consumer-Driven Contracts](https://banes-lab.com/records/arch/consumer-driven-contracts.md)
- [Schema](https://banes-lab.com/records/lex/schema.md)
- [Microservices](https://banes-lab.com/records/arch/microservices.md)
- [Failure Isolation](https://banes-lab.com/records/lex/failure-isolation.md)
- [Contracts](https://banes-lab.com/records/lex/contracts.md)
- [Shared Database](https://banes-lab.com/records/lex/shared-database.md)
- [Encapsulation](https://banes-lab.com/records/arch/encapsulation.md)
- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)
- [Abstraction](https://banes-lab.com/records/reason/mode-abstraction.md)
- [Validation](https://banes-lab.com/records/arch/validation.md)
- [Orchestration](https://banes-lab.com/records/arch/orchestration.md)
- [Value Object](https://banes-lab.com/records/arch/value-object.md)
- [Type Safety](https://banes-lab.com/records/arch/type-safety.md)
- [Intent-Revealing Interface](https://banes-lab.com/records/arch/intent-revealing-interface.md)
- [object_creation](https://banes-lab.com/records/force/object-creation.md)
- [Single Source of Truth](https://banes-lab.com/records/arch/single-source-of-truth.md)
- [Thresholds](https://banes-lab.com/records/lex/thresholds.md)
- [Minimum Viable Architecture](https://banes-lab.com/records/arch/minimum-viable-architecture.md)
- [Extension Points](https://banes-lab.com/records/arch/extension-points.md)
- [Evolutionary Architecture](https://banes-lab.com/records/arch/evolutionary-architecture.md)
- [Adapters](https://banes-lab.com/records/lex/adapters.md)
- [First-Principles Design](https://banes-lab.com/records/arch/first-principles-design.md)
- [Statelessness](https://banes-lab.com/records/arch/statelessness.md)
- [Controlled Side Effects](https://banes-lab.com/records/arch/controlled-side-effects.md)
- [Ambient Context](https://banes-lab.com/records/arch/ambient-context.md)
- [Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md)
- [Semantic Consistency](https://banes-lab.com/records/arch/semantic-consistency.md)
- [Error Boundary](https://banes-lab.com/records/algo/error-boundary.md)
- [Error Handling](https://banes-lab.com/records/arch/error-handling.md)
- [Null Object Pattern](https://banes-lab.com/records/arch/null-object-pattern.md)
- [Aggregate](https://banes-lab.com/records/arch/aggregate.md)
- [Entity](https://banes-lab.com/records/arch/entity.md)
- [Domain Service](https://banes-lab.com/records/arch/domain-service.md)
- [Authorization](https://banes-lab.com/records/arch/authorization.md)
- [Interface Segregation Principle (ISP)](https://banes-lab.com/records/arch/interface-segregation.md)
- [Caching](https://banes-lab.com/records/arch/caching.md)
- [Ports and Adapters Architecture](https://banes-lab.com/records/arch/ports-and-adapters-architecture.md)
- [Anti-Corruption Layer](https://banes-lab.com/records/arch/anti-corruption-layer.md)
- [Directed Acyclic Graph (DAG)](https://banes-lab.com/records/arch/directed-acyclic-graph.md)
- [Service Autonomy](https://banes-lab.com/records/arch/service-autonomy.md)
- [Asynchronous Communication](https://banes-lab.com/records/arch/asynchronous-communication.md)
- [Availability](https://banes-lab.com/records/lex/availability.md)
- [Uniform Interface](https://banes-lab.com/records/arch/uniform-interface.md)
- [Algorithmic Efficiency](https://banes-lab.com/records/arch/algorithmic-efficiency.md)
- [resilience_recovery](https://banes-lab.com/records/force/resilience-recovery.md)
- [Circuit Breaker Pattern](https://banes-lab.com/records/arch/circuit-breaker-pattern.md)
- [Timeout Pattern](https://banes-lab.com/records/arch/timeout-pattern.md)
- [Backpressure](https://banes-lab.com/records/arch/backpressure.md)
- [Fail Fast](https://banes-lab.com/records/arch/fail-fast.md)
- [Invariants](https://banes-lab.com/records/arch/invariants.md)
- [Reconciliation](https://banes-lab.com/records/lex/reconciliation.md)
- [Concurrency Control](https://banes-lab.com/records/arch/concurrency-control.md)
- [Optimistic Locking](https://banes-lab.com/records/arch/optimistic-locking.md)
- [Pessimistic Locking](https://banes-lab.com/records/arch/pessimistic-locking.md)
- [Outbox Pattern](https://banes-lab.com/records/arch/outbox-pattern.md)
- [Saga](https://banes-lab.com/records/lex/saga.md)
- [Idempotent Consumer](https://banes-lab.com/records/arch/idempotent-consumer.md)
- [Causal Consistency](https://banes-lab.com/records/arch/causal-consistency.md)
- [Threat Modeling](https://banes-lab.com/records/arch/threat-modeling.md)
- [Secrets Management](https://banes-lab.com/records/arch/secrets-management.md)
- [Logs](https://banes-lab.com/records/lex/logs.md)
- [Privacy by Design](https://banes-lab.com/records/arch/privacy-by-design.md)
- [Data Minimization](https://banes-lab.com/records/lex/data-minimization.md)
- [observability_traceability](https://banes-lab.com/records/force/observability-traceability.md)
- [Alerting](https://banes-lab.com/records/arch/alerting.md)
- [Ownership](https://banes-lab.com/records/lex/ownership.md)
- [Logging](https://banes-lab.com/records/arch/logging.md)
- [Auto-Remediation](https://banes-lab.com/records/arch/auto-remediation.md)
- [Canary Deployment](https://banes-lab.com/records/arch/canary-deployment.md)
- [Rollback](https://banes-lab.com/records/arch/rollback.md)
- [Quality Attributes](https://banes-lab.com/records/arch/quality-attributes.md)
- [Fitness Functions](https://banes-lab.com/records/arch/fitness-functions.md)
- [performance_scaling](https://banes-lab.com/records/force/performance-scaling.md)
- [Operability](https://banes-lab.com/records/lex/operability.md)
- [Scalability](https://banes-lab.com/records/arch/scalability.md)
- [Maintainability](https://banes-lab.com/records/lex/maintainability.md)
- [Architecture Review](https://banes-lab.com/records/arch/architecture-review.md)
- [Testability](https://banes-lab.com/records/arch/testability.md)
- [Specification-Based Testing](https://banes-lab.com/records/arch/specification-based-testing.md)
- [Reproducibility](https://banes-lab.com/records/arch/reproducibility.md)
- [Prompt Engineering](https://banes-lab.com/records/arch/prompt-engineering.md)
- [Evaluation](https://banes-lab.com/records/lex/evaluation.md)
- [Agentic Architecture](https://banes-lab.com/records/arch/agentic-architecture.md)
- [Model Governance](https://banes-lab.com/records/arch/model-governance.md)
- [Embeddings](https://banes-lab.com/records/lex/embeddings.md)
- [Dataset](https://banes-lab.com/records/lex/dataset.md)
- [Model Registry](https://banes-lab.com/records/lex/model-registry.md)

## Linked from

- [The layer topology](https://banes-lab.com/ontology/schema/the-layer-topology.md)
- [The membership](https://banes-lab.com/ontology/schema/the-membership.md)
