docs: streams upgraded to in-scope (operator-authority record)

The inventory graded streams absent because no paused consumer document
names it; the operator correction: type-filtered event watching from
several places (e.g. repo-change subscriptions in a git app at
gitea/gitlab scale) is a basic reactivity requirement — and notify
(fire-and-forget, no replay) cannot serve subscriptions honestly.
The wanters are applications above the paused crates, which is why the
docs don't carry the row.

Inventory: streams row recorded on operator authority (the REQ-2
recording convention from alkblobs requirements.md), confidence system
gains the operator-authority grade; rate-limits becomes the sole
first-cut candidate. phase-0: OQ-ST-01 summary and OQ-ST-04's
contract-candidates updated to match.
This commit is contained in:
glm-5.3-flash committed 2026-10-04 08:47:19 +00:00
1 parent d44dfb5a08
commit f4e24f321d
2 files changed
+50 -24

No files matched your search

+36 -17
View File
@@ -1,9 +1,10 @@
---
status: draft
last_updated: 2026-10-04 (initial draft — synthesized from the paused
consumers' written artifacts, not from any running consumer. Evidence
quality varies per row and is marked. Rows with weaker evidence are
marked as candidates-for-cut rather than silently included.)
last_updated: 2026-10-04 (streams corrected to documented/in-scope —
operator-authority record: type-filtered event watching from multiple
places, e.g. repo-change subscriptions in a git app. No consumer doc
carries the row yet; applications above the paused crates are the
wanters. rate-limits + result-storage remain the keep-with-flag rows.)
---
# alkstore — consumer-driven scope inventory
@@ -31,6 +32,11 @@ need for it, quote the need, and grade the evidence. Confidence grades:
design has leaned on it yet.
- **recalled** — named in research/summary prose as intended, no
architecture written against it yet.
- **operator-authority** — the operator records a need the paused
documents don't carry yet (the REQ-2 recording convention from
alkblobs requirements.md), dated; expected where the wanter is an
*application above* the paused crates. Upgrades equivalent to
**documented**.
- **absent** — no consumer document names a need. Included by default
per the working posture, flagged for cut-at-implementation instead of
silently carried.
@@ -129,17 +135,25 @@ feature.
| Consumer | Evidence | Need | Confidence |
|---|---|---|---|
| (none pinned) | — | — | **absent** |
| family-wide (reactivity requirement) | user/planning record, 2026-10-04 (operator's authority — the REQ-2 recording convention) | watching for specific event *types* from several different places at once. Concrete example: a git app at gitea/gitlab scale — users and other apps subscribe to changes on a repo. Many cases along these lines. | **documented** (operator-authority record; no consumer doc has grown the section yet) |
Verdict: **in scope per the working posture, flagged for
cut-at-implementation.** No consumer document names streams. The known
near-need is the *shape* (durable, replayable event log with explicit
offsets) rather than the feature: if alkfs's sync posture (OQ-FS-14)
grows a real multi-node story, or alkblobs' fleet gossip needs a
durable change-log rather than fire-and-forget notify, streams become
load-bearing — and `pg_notify`-plus-table (the pgboss-family pattern)
gives it on the Postgres side almost for free once queues exist. Keep
it, honest about cost, revisit before implementation.
Verdict: **in scope, first-class.** Corrected 2026-10-04 — the initial
draft (earlier the same day) graded this **absent** because no consumer
document names it; that was a fact about the paused documents, not
about the need, and the operator's correction supersedes it. The
reactivity reasoning: notify is fire-and-forget — no replay, no
durability (honker's own split: "streams are the durable cousin") — so
*subscriptions* cannot be built on it honestly. A repo-change
subscription must survive the subscriber being offline at event time
(durable log + per-consumer offset + replay-on-attach is exactly
honker's stream model). Why the paused docs missed it: the consumers
that want it (a git app's subscription surface, cross-app event
watching) are *applications above* the current paused crates, so
nothing written down yet carries the row — which is expected, not
suspicious. Design note for OQ-ST-04: on the Postgres side this is a
NOTIFY-triggered durable event table with per-consumer cursors (the
pg-boss-family shape); the per-consumer offset contract, not the
storage shape, is the seam to pin.
### rate limits
@@ -151,7 +165,8 @@ Verdict: **weak candidate — first cut candidate.** No document needs
*store-level* rate limiting; alkgit's budgets are enforced above the
storage seam with its own mechanism. Keep listed because honker's
default set includes it and the machinery is trivial next to queues,
but it is the least-needful row after streams.
but it is now the least-needful row (streams outranked it as of the
2026-10-04 correction).
### result storage (`save_result` / `get_result` / `sweep_results`)
@@ -200,6 +215,10 @@ none of them yet.
platform), a row gets added here *before* it is assumed into a scope
decision — the same discipline as alkblobs' requirements.md ("when a
consumer fact changes, it changes here first").
- Absence of evidence is marked, not overruled: streams/rate-limits/
- Absence of evidence is marked, not overruled: rate limits and
result storage stay on the list with their flags visible, per the
working posture, rather than being cut by this document alone.
working posture, rather than being cut by this document alone.
Corrections run the other way too: an operator-authority record (the
2026-10-04 streams correction) upgrades a row without waiting for a
consumer document to grow one — recorded here first, per the
requirements-change convention.