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 64310f8
Browse filesBrowse the repository at this point in the historyBrowse files
docs: close Packet 7 against what actually merged (#16)
* docs: close Packet 7 against what actually merged
The delivery record was written at packet close, and fifteen commits landed after
it from the pull request's own review rounds — including the sharpest defect of
the packet. A record that stopped before them would be a false account, so it now
carries a § What the pull-request review found: the shipped invariant that did
not hold (PromoteDefault's order is not EF's, and this packet's PR description
cited it as the migration's safety rationale), the canonical template that
admitted an organization-scoped session to tenant-wide rows, three credential and
transaction gaps, two architecture rules with escapes, three ADR edits made
outside the rules that govern them, and two findings the measurement refuted.
The measured total moves with it: 1208, counted from a run.
Three architecture rules the review added were never registered —
Every_Write_Port_Is_Countable_Or_Enumerated, which closes the census's blind spot
for ports that do not derive; Out_Of_Band_Setters_Open_Read_Only_Transactions,
which a behavioural test cannot express; and
Registering_The_Pipeline_Twice_Registers_It_Once, which pins a property MediatR
provides and the repository depends on.
Database Standards now names ADR-0003 Amendment 4 in its Derives from header,
because the template it carries is what that amendment corrects.
ADR: 0003, 0042
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(decisions): renumber a colliding amendment, widen a rule
ADR-0003 already had an Amendment 4 — the 2026-08-29 note that its Phase 02a
table list had gone stale — and the write-guard amendment was appended with the
same number. An erratum inside the same file says "Recorded in Amendment 4" and
now pointed at two of them. It becomes Amendment 5, takes the file's own `##`
heading shape, and every carrier that named the wrong number follows: Database
Standards, the delivery record, the schema test and the migration's remarks.
The Status header listed Amendments 1-3 only, so a reader following the
authority metadata could not tell either Amendment 4 or 5 was part of the record.
Both are named now.
Every_Write_Port_Is_Countable_Or_Enumerated claimed to find interfaces taking a
domain type and checked the parameter's own assembly, so IEnumerable<Course>
answered System.Private.CoreLib and escaped — which is how a bulk write port is
written. It unwraps generic arguments, array elements and by-ref transitively
now, the same shape the IEventBus rule uses, and a probe bulk port is caught.
Out_Of_Band_Setters_Open_Read_Only_Transactions is a source scan that orders
SET TRANSACTION against the first set_config, and the catalogue described it as
ordering against the first statement. PostgreSQL refuses SET TRANSACTION after
any statement, so a setter that ran a SELECT in between would satisfy the rule
and fail at runtime. The entry now says what the comparison measures and what it
therefore does not catch — loudly, since that failure is immediate rather than
silent, and parsing every command execution is the expensive alternative.
ADR: 0003, 0042
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: backend/src/Modules/Tenancy/LearnStack.Modules.Tenancy.Infrastructure/Persistence/Migrations/20260903213832_tenant_settings_org_write_guard.cs
-**Asserts:** both arms of the `DbCommandInterceptor` guard. A command a module `DbContext` issues on a transaction no sanctioned setter announced throws `TenantContextMissingException`; the same command on an announced transaction runs. One arm is not the rule: a guard keyed on `TransactionBehavior` instead of on the marker passes the first arm and rejects the writes the idempotency store and the audit store legitimately make on their own short transactions.
0 commit comments