docs(tasks): close the wave-1 review gate — verdict green

Review task record: the line-by-line ADR/OQ gate reading, the three
flagged interpretations confirmed (sibling-dep timing, vault-double
shape, policy verdict type), the minor inline fixes, and the green
verification summary. Wave 2 decomposition unblocked.
This commit is contained in:
glm-5.3-flash committed 2026-10-28 07:22:24 +00:00
1 parent 1bd2588788
commit a19cdc4832
1 file changed
+104 -6
+104 -6
View File
@@ -1,7 +1,7 @@
---
id: review-wave-1
name: Wave 1 gate — the foundations review
status: pending
status: completed
depends_on: [w1-manifest, w1-error-model, w1-key-sources, w1-host-key-policy, w1-fingerprint, w1-config, w1-test-doubles]
scope: narrow
risk: low
@@ -46,13 +46,13 @@ booked (remediation before wave 2 decomposes).
## Acceptance Criteria
- [ ] Every ADR/OQ surface above read and confirmed (or corrected
- [x] Every ADR/OQ surface above read and confirmed (or corrected
with the correction landed)
- [ ] The recorded interpretations confirmed or fixed (sibling-dep
- [x] The recorded interpretations confirmed or fixed (sibling-dep
timing; the vault-double shape; the policy verdict type)
- [ ] Full verification set green (`cargo test`, `--all-features`,
- [x] Full verification set green (`cargo test`, `--all-features`,
clippy, fmt)
- [ ] Verdict recorded; wave 2 decomposition unblocked or findings
- [x] Verdict recorded; wave 2 decomposition unblocked or findings
booked
## References
@@ -64,6 +64,104 @@ booked (remediation before wave 2 decomposes).
> To be filled by implementation agent
### Gate reading (line by line, 2026-10-28)
- **ADR-002** ✓ — `Cargo.toml` carries `russh = { version = "0.65",
default-features = false, features = ["aws-lc-rs"] }`; edition 2024,
`rust-version = "1.89"`; `cargo tree -e normal` confirms **no
`rsa`, no `flate2`, no `ring`**, and the recorded
`ssh-key =0.7.0-rc.11` RC exception riding the russh keys path is
present exactly as ADR-002 records it.
- **ADR-003** ✓ — `session`/`git`/`tunnel`/`sftp` declared, flat,
`default = []`, nothing implied; the per-feature sibling deps
(`alktty`/`alktunnels`/`alkgit`) are **not** in the manifest — the
recorded interpretation (they land with their first consuming wave)
confirmed as recorded.
- **ADR-004** ✓ — `src/fingerprint.rs` is the single fingerprint path;
both parity suites (`tests/fingerprint_parity.rs`,
`tests/doubles.rs` fixture rows) are green against the
`ssh-keygen -lf`-recorded manifest; `Limits::max_auth_attempts`
defaults to 10 with the decision-6 rationale in its doc.
- **ADR-005** ✓ — the custody chain is in code: one
`vault.decrypt` → `Zeroizing<String>` wrap at the adapter seam →
one-time `decode_secret_key`; the vault's taxonomy reshaped to the
five distinct variants (no re-export, no collapse); `EncryptedData`
opaque in crate code (tests mutate fields only to *tamper*); host
keys decrypt-at-construction via `VaultHostKeySource` (empty set →
`Absent`, locked → no key material); rotation-preservation tested;
no plaintext persistence anywhere. The known-gap (vault's plain
`String` return) is documented as the ADR-005 decision-3 contract,
not silently absorbed.
- **OQ-05** ✓ — `HostKeyPolicy` seam with `RejectAll` fail-closed
default; **no accept-all built-in** (the permissive posture exists
only as the double's explicit `with_default(true)` choice in tests —
correct posture); the crate is policy-blind.
- **OQ-08/09** ✓ — `shell_argv`/`exec_wrapper_argv` are `Option` with
unset→decline semantics in the type docs; no construction-time
validation, no config-error type (the recorded interpretation
confirmed — none was needed); `session_cwd`/`session_env` are
assembly-supplied, never wire-derived; `channel_client` absent →
tunnel rows decline even under the feature.
- **Error model** ✓ — five closed variants, no catch-all; the
dispositions-not-errors contract (auth declines, wire declines,
config validation) is written into `error.rs`'s module docs.
- **Docs honesty** ✓ — every module's docs state what is deliberately
not here yet (russh `Config` construction and the dispatch are
wave-2; dial wiring is wave-4; the grammar is wave-3).
### Interpretations (flagged for this gate) — all confirmed
1. Sibling-dep timing — confirmed (see ADR-003 above).
2. Vault-double shape — confirmed: `TestVault` wraps alkvault 0.1's
own in-memory construction (`VaultServiceHandle::new()` +
`unlock_new`) rather than re-implementing behind the source trait,
so the real error taxonomy and GCM behavior ride every row (the
decision is recorded in `tests/common/mod.rs`'s module docs).
3. Policy verdict type — confirmed: accept/reject `bool`, pinned to
the russh 0.65 `check_server_key → Result<bool, E>` hook shape,
with the `Err` channel held for wire/IO failures (recorded in
`host_key.rs`'s module docs).
### Minor issues found and fixed inline (in this session, same commit set)
Small doc/polish findings; each is a one-to-few-line fix:
- `cargo doc --no-deps` emitted 2 rustdoc warnings (ambiguous
`[`async_trait`]` intra-doc links — crate and attribute-macro share
the name) in `key_source.rs` and `host_key.rs` → resolved as plain
code spans. The crates' verification set does not run rustdoc, so
these had gone unnoticed — worth remembering at wave 5's
"public-API rustdoc warning-free" gate.
- `key_source.rs` `HostKeySource` docs: stray `)` typo ("on host
*pin*) trust").
- `lib.rs` crate docs: stale line ("the dependency surface and
feature graph land with implementation start") — now landed;
rewritten to state the landed/future split honestly.
- Two redundant test lines removed (a discarded pre-probe
`try_sign` in `key_source.rs`'s usability helper; a redundant
`None` re-assignment in `config.rs`'s independent-flip row).
Nothing found rose to the level of a booked finding — no shape error
in the config types, the error taxonomy, or the key-source seam.
### Verification (all green)
`cargo test` 47/47 · `cargo test --all-features` 47/47 ·
`cargo clippy --all-targets -- -D warnings` ✓ ·
`cargo clippy --all-features --all-targets -- -D warnings` ✓ ·
`cargo fmt --check` ✓ · `cargo doc --no-deps` 0 warnings.
## Summary
> To be filled on completion
> To be filled on completion
**Verdict: green.** The wave-1 foundations read clean against
ADR-002/003/004/005 and the OQ-05/08/09 resolutions, line by line;
all three recorded interpretations (sibling-dep timing, vault-double
shape, policy verdict type) were confirmed as recorded. Only minor
doc/polish findings surfaced — fixed inline (rustdoc link
disambiguation, a doc typo, a stale crate-doc line, two redundant
test lines), recorded above. No shape errors in the one-way-door
surfaces. Wave 2 decomposition is unblocked; it should absorb the
rustdoc-hygiene lesson (run `cargo doc --no-deps` on gates) — no fix
tasks needed.