docs: step-3 rewrites — OQ-39/40 resolved, C-08 closed, channel-operations.md put/control/resources contracts, review 010/011 closed with the S-01 sketch corrected

- open-questions.md: OQ-39 → ADR-052, OQ-40 → ADR-053 (resolutions replace
  the deferred-until-needed posture)
- channel-operations.md: the put contract (initiator allocates + streams,
  reserved input key, one response, acks-in-result sentence), the control
  routing (ADR-052), the enumerator aggregation (ADR-053), the
  connection-owner paragraph's pub-era correction, the ADR table rows
- ADR-051 §6: PubTypedOpen → the put translation; ADR-047's 2026-09-06
  amendment records its era honestly (the dynamic half is now ADR-053)
- review 010: all four findings resolved (with the S-01 sketch correction
  so the published record stops carrying the wrong-graph reading)
- review 011: closed (all seven pins implemented + gates landed)
- review 001 C-08: resolved note (odd/even + adopt, implemented)
- AGENTS.md: the 'Stub Guard' section — the not_implemented grep is part
  of cargo test; the registration invariants and the implement-or-stop
  ruling are release-blocking

Verified: cargo test (696+guard), clippy -D warnings, fmt, doc clean.
This commit is contained in:
glm-5.3-flash committed 2026-10-13 09:04:13 +00:00
1 parent 944c300c17
commit 3317ea0963
10 files changed
+205 -43

No files matched your search

+22
View File
@@ -213,6 +213,28 @@ cargo clippy --target wasm32-unknown-unknown -- -D warnings
cargo semver-checks check-release # before a release
```
## Stub Guard (release-blocking)
Four registered-but-always-failing stubs shipped across nine published
versions (reviews 010/011). This class is now release-blocking in both
directions:
1. **Test guard**: `cargo test --test stub_guard` (part of `cargo
test`) fails if the string `not_implemented` appears anywhere in
`src/`. A "loud failure" stub is still a stub.
2. **Registration-time invariants** (ADR-047 amendment 4 §4.8): a
marked (`channel_open`) spec refuses the generic registration path
(`OperationRegistry::register`, `CallConnection::register_imported`,
`op/register`) and refuses `publish_schema`; the sanctioned
registrations are the channel wrapper family
(`register_openable*`, `register_pub_openable`,
`register_relay_openable`).
3. **The ruling**: implement-or-stop-advertising before any publish.
The only permitted deferral statement is "not this session" — never
"next version", "not v1", or any bucket that parks a decision on an
unknown future release. Every handler that registers on a
discoverable surface must be capable of succeeding.
## Architecture Context
- `docs/architecture/` — the authoritative spec. Read it before