Skip to content

Commit 41b51cc

Browse files
committed
docs: land the boundary scrub across the corpus
The repository is public. Three passages named a repository that is not, and the name alone discloses that the project exists. The boundary each one drew is the content that matters; the name was only the mechanism for drawing it. Each of the three is rewritten by capability rather than deleted. a03 hands batch design, transaction behavior, and the atomic setting to migration operations and lock behavior; a08 and a10 hand the lease, the retry, the dead-letter design, and the outbox dispatcher to queue delivery and retry mechanics. The seam and its direction survive intact -- what the file owns, and where the reader's question goes instead -- so a reader who never sees the name loses nothing but the pointer. No substitute label replaces a removed name. "A sibling skill" or "another skill in this suite" would disclose the same set membership the name did, so each rewrite names a capability and stops. The README changelog rows for v1.48.0 and v1.49.0 carried two more. Those rows are historical and are otherwise untouched: the edit removes the two names and the one word that stopped making sense without one, so "a named handoff" becomes "a handoff". No date, number, claim, or verdict in either row moves. Two seams the final checkpoint reported as unmarked now carry a sentence each. The process-model material in deployment-and-runtime.md sat against deploy sequencing, process supervision, and rollback behavior with no boundary stated at all, and the N+1 material in graphql-and-alternative-api-surfaces.md sat against query count, batching, and plan work the same way. Each gets one sentence in the section that owns the subject, naming what the file owns and what is outside its scope. Neither becomes a section, and neither enters the router. No version bump, no changelog row, and no tag. This is a scrub rather than a release, and a later session releases it together with its own work by reading the real diff from the last tag.
1 parent 94d174e commit 41b51cc

6 files changed

Lines changed: 23 additions & 15 deletions

README.md

Lines changed: 2 additions & 2 deletions
Large diffs are not rendered by default.

references/a03-software-supply-chain.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -667,10 +667,9 @@ access for one deployment window is still an access-control vulnerability.
667667
A large backfill runs in batches. The batch boundary is where the invariant
668668
breaks. Never sacrifice the invariant to make the operation resumable. A batch
669669
that leaves rows at a permissive default widens access for that window. Batch
670-
design, transaction behavior, and the `atomic` setting belong to the
671-
`django-migration-safety` skill, which is authoritative on migration
672-
operations. This file owns one thing only: the access rule holds at every
673-
batch boundary.
670+
design, transaction behavior, and the `atomic` setting belong to migration
671+
operations and lock behavior, which this file does not cover. This file owns
672+
one thing only: the access rule holds at every batch boundary.
674673

675674
Use `schema_editor.connection.alias` with `.using(alias)` for every query. A
676675
query that ignores the router writes to the wrong database, which defeats

references/a08-integrity-and-deserialization.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -627,9 +627,9 @@ between the commit and the enqueue, or a broker outage at `.delay`, leaves a
627627
`RECEIVED` row that no worker claimed. A periodic sweep re-enqueues the
628628
`RECEIVED` records older than a small threshold, so a lost wake-up delays the
629629
work instead of dropping it. The lease, the retry, and the dead-letter design
630-
of that worker belong to the `django-async-jobs` skill, which is authoritative
631-
on delivery mechanics. This file owns one thing only: the verified event
632-
survives the acknowledgment.
630+
of that worker belong to queue delivery and retry mechanics, which this file
631+
does not cover. This file owns one thing only: the verified event survives the
632+
acknowledgment.
633633

634634
`csrf_exempt` belongs on this route and nowhere else, and it is only safe
635635
because the MAC replaces what CSRF was protecting. A CSRF-exempt webhook route

references/a10-exceptional-conditions.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -340,12 +340,13 @@ with transaction.atomic():
340340
enqueue itself is lost when the process dies between the commit and the
341341
callback, so `on_commit` orders the work without making it durable. Where
342342
the record must not be lost, use the transactional outbox in
343-
`a09-logging-and-alerting.md`, "Lifecycle hooks and audit guarantees". Let
344-
`django-async-jobs` own the dispatcher that drains it. Past the broker, a
345-
worker that finishes the work and dies before acknowledging causes a
346-
redelivery. Every task must therefore be safe to run twice. Re-check the
347-
state before you act, rather than assuming the first run did not happen.
348-
That is the same design as the next section, applied to a worker.
343+
`a09-logging-and-alerting.md`, "Lifecycle hooks and audit guarantees". The
344+
dispatcher that drains it belongs to queue delivery and retry mechanics,
345+
which this file does not cover. Past the broker, a worker that finishes the
346+
work and dies before acknowledging causes a redelivery. Every task must
347+
therefore be safe to run twice. Re-check the state before you act, rather
348+
than assuming the first run did not happen. That is the same design as the
349+
next section, applied to a worker.
349350
- Two tasks enqueued in order are not guaranteed to execute in order or on the
350351
same worker. Never let task B assume it can see task A's effect; have it
351352
check.

references/deployment-and-runtime.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,10 @@ console or Debug Toolbar, medium for metrics and health disclosure.
409409
(default 100), and `--limit-request-field-size` (default 8190) bound the
410410
request line and headers before any Django code runs.
411411

412+
This file owns the finding on whether a setting or a runtime posture is unsafe.
413+
Deploy sequencing, process supervision, and rollback behavior are outside its
414+
scope.
415+
412416
## systemd hardening
413417

414418
Restrict the service unit:

references/graphql-and-alternative-api-surfaces.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,10 @@ against query counts under a realistic nested document rather than trusting
479479
that the optimizer engaged. The pool-side consequence and its limits are in
480480
`data-layer-and-database.md`, "Connection exhaustion and query timeouts".
481481

482+
This file owns the finding when an unbounded query becomes a
483+
denial-of-service surface or a scope bypass. Query count, batching, and plan
484+
work are outside its scope.
485+
482486
## Persisted queries and operation allowlists
483487

484488
Where the API serves only first-party clients — which is most Django GraphQL

0 commit comments

Comments
 (0)