docs: the pg LISTEN identifier-truncation wake-collision note (review 004 item 13)
deployment.md's Postgres co-tenancy paragraph and engine-postgres.md's connection-architecture wake-substrate section now carry the 63-byte identifier-truncation collision note as dated annotations: two names longer than 63 bytes sharing a 63-byte prefix silently register the same server-side wake channel; pg_notify (the parameter path, untrun- cated, rejecting >= 64-byte channels) is unaffected, so the collapse is on the registration side. Mitigation: keep mechanism names at most 63 bytes (byte count). The naming contract's deliberate no-cap verdict is untouched. Discharges review 004 'findings recorded, not fixed' item 13 (task docs-pg-identifier-truncation-note).
This commit is contained in:
1 parent
f2f5e03d7c
commit
6a6ffd68de
3 files changed
+82
-9
No files matched your search
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: docs-pg-identifier-truncation-note
|
||||
name: Document the pg identifier-truncation collision in the release text (review 004 item 13)
|
||||
status: pending
|
||||
status: completed
|
||||
depends_on: []
|
||||
scope: single
|
||||
risk: trivial
|
||||
@@ -32,12 +32,12 @@ annotation per the family's convention.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
- [ ] `deployment.md` carries the truncation-collision note with a
|
||||
- [x] `deployment.md` carries the truncation-collision note with a
|
||||
dated annotation (mechanism + mitigation, honestly worded)
|
||||
- [ ] `engine-postgres.md` carries it too if a wake-channel section
|
||||
- [x] `engine-postgres.md` carries it too if a wake-channel section
|
||||
exists there (or the absence recorded in Notes)
|
||||
- [ ] The validation contract's no-cap verdict untouched
|
||||
- [ ] Doc gate green
|
||||
- [x] The validation contract's no-cap verdict untouched
|
||||
- [x] Doc gate green
|
||||
|
||||
## References
|
||||
|
||||
@@ -51,8 +51,33 @@ annotation per the family's convention.
|
||||
|
||||
## Notes
|
||||
|
||||
> To be filled by implementation agent
|
||||
Deployment matrix note: `deployment.md` has no standalone wake-channel
|
||||
section — the landing site is the Postgres engine's co-tenancy
|
||||
paragraph under "Connection budgets" (the one place the matrix
|
||||
discusses naming), as a dated amendment annotation per the family
|
||||
convention. `engine-postgres.md` has no dedicated wake-channel section
|
||||
either; the note landed at the end of "Connection architecture" (the
|
||||
wake substrate lives there) with a cross-reference to the
|
||||
deployment-matrix statement. Accuracy sharpening beyond the review's
|
||||
text (verified against Postgres master `commands/async.c`):
|
||||
`pg_notify` does not merely escape identifier truncation — the server
|
||||
*rejects* channels of 64 bytes or more there ("channel name too
|
||||
long", an error), while quoted identifiers on the `LISTEN` side
|
||||
truncate to 63 bytes silently (a `NOTICE`); the notes state the
|
||||
collapse is on the registration side. The mitigation is phrased as a
|
||||
consumer obligation (names at most 63 bytes; a byte count, not a
|
||||
character count) — no validation contract change, per the task
|
||||
description.
|
||||
|
||||
## Summary
|
||||
|
||||
> To be filled on completion
|
||||
Landed the pg identifier-truncation collision note in
|
||||
`docs/architecture/deployment.md` (dated annotation, Postgres engine
|
||||
section) and `docs/architecture/engine-postgres.md` (connection
|
||||
architecture, wake-substrate section) — mechanism, honest send-vs-
|
||||
registration-side statement, and the keep-names-under-63-bytes
|
||||
mitigation. Frontmatter `last_updated` of both files carried forward.
|
||||
Verified: `RUSTDOCFLAGS="-D warnings" cargo doc --no-deps` green,
|
||||
`cargo fmt --check` green, `cargo clippy --all-targets -- -D warnings`
|
||||
green; `core-contract.md`'s no-cap naming verdict untouched (diff
|
||||
touching only the two doc files).
|
||||
Reference in new issue
Block a user