You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 801d2f4
Browse filesBrowse the repository at this point in the historyBrowse files
|`HubContractTests.cs`| No direct Hub-URL references; Hub clients only inside the named adapters (ADR-0034). |
124
-
|`DomainGenericTests.cs`|`Core_Modules_HaveNo_DomainSpecific_Names`, no `Verticals/`. |
125
-
|`DaprDirectInjectionTests.cs`| No `IConnectionMultiplexer` / `KafkaProducer` / `VaultClient` in modules. |
126
-
|`ConventionTests.cs`| Strongly-typed ids in commands, validator pairing, etc. |
127
-
128
-
If your rule doesn't fit any file, create a new file with a focused name.
118
+
|`ModuleDependencyTests.cs`| Dependency direction between module packages, plus a planted-violation meta test that proves the scanner still detects one. |
119
+
|`PersistenceConventionTests.cs`|`row_version` mapping, ambient-unit-of-work enlistment, the Docker trait, and the `migrate` recipe's chain coverage and credential redaction. |
120
+
|`TenancyConventionTests.cs`| The ADR-0036 **request-edge** rules — what may read a host, where the effective host and `app.resolving_host` are computed, and the assertion budget's independence from `ICacheService`. Source scans, because three of the four banned inputs appear only as string literals. |
121
+
|`TenantScopingTests.cs`| The correspondence between the `[TenantOwned]` / `[OrganizationScoped]` markers, the EF global query filters, and the Row Level Security policies. |
122
+
|`TenantContextConstructionTests.cs`| How a tenant context comes into existence and who may write it: the factory's single entry point, the constructor's one call site, the enumerated accessor writers, and the composite-key organization read. |
|`CrossCuttingFoundationTests.cs`| Pipeline order, `Result<T>` returns, topic naming, and the direct-reference bans (Sentry, `DeploymentMode`, `IEventBus`, provider SDK exceptions). |
125
+
|`RequestSurfaceTests.cs`| What the step-4 authority ceiling admits: the two request markers, their permitted sets, the shape of the attributes themselves, and the ban on request shapes MediatR runs with no pipeline. |
126
+
|`PlatformAdminScopeConventionTests.cs`| The single sanctioned `BYPASSRLS` path: who may resolve the keyed platform data source, where connection strings are read, the entry gate, and what the scope must not touch. |
127
+
|`RepositoryLayoutTests.cs`|`No_Source_Folder_Named_Verticals` and the single-frontend-app rule. |
128
+
129
+
Rules for surfaces no file covers yet — audit, permissions, entitlement, event bus,
130
+
Hub contract — are **Registered** in
131
+
[the catalogue](../../../docs/standards/21-architecture-tests-catalogue.md) against
132
+
the phase that ships the code they inspect. Check its Status line before assuming a
133
+
net is under you, and create a new file only when your rule's subject is not one of
134
+
the ten above.
135
+
136
+
> **The tenancy rules live in three files, and the split is by subject, not by ADR.**
137
+
> All three cite ADR-0036, so "put it with the other ADR-0036 rules" is not a usable
138
+
> instruction. Ask what the rule is *about*: the request edge and what may be read from
139
+
> it (`TenancyConventionTests`), the marker-to-filter-to-policy correspondence
140
+
> (`TenantScopingTests`), or the construction and writing of the context itself
141
+
> (`TenantContextConstructionTests`).
129
142
130
143
### Step 5: Stability of the test
131
144
@@ -141,8 +154,9 @@ Architecture tests are **non-skippable**. That means:
141
154
When the rule is about migration content (RLS, partition):
142
155
143
156
```csharp
157
+
/// <summary>A migration-scan sketch. NOT the shipped rule — see the note below.</summary>
0 commit comments