13 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| review-wave-5 | Wave 5 gate — the release review | completed |
|
narrow | low | phase | review |
Description
The wave-5 review gate — the release review that closes the plan
(docs/plans/implementation.md §Wave 5: "then the publish of
alkssh 0.1 — the gate review that closes the plan"). The gate
stays a pure review; the publish is its own task (w5-publish)
executing only over a green verdict. The gate reads:
- The decline-matrix suite — the coverage-audit table read
against
mapping.md's matrix table cell by cell: every row × every build it can appear in × both directions pinned; the sftp placeholder rows and the never-features explicit in every build; the matrix runner in the verification list. - The e2e postures — both directions' real-tool rows read:
nothing silently green (every skip reasoned with the tool/version
cause), every e2e finding discharged or explicitly booked with an
owner (never absorbed); the real-
sshdclient-direction rows verified against the reverse-runner shape. - The fuzz corpus gate — the sidecar's layout read against the
alkgit convention (detached runner, committed seeds + no-op-diff
generator, the shared-library corpus replay in the verification
list); the campaign logs read (no unresolved crash/OOM/timeout);
the exposure shape read (no non-
doc(hidden)surface growth). - Release readiness — rustdoc warning-free × builds; README/
CHANGELOG read for honesty; the packaged file list against the
package policy; the manifest sanity; the freeze inventory read
against the landed code — the list of surfaces the publish makes
one-way (the mapping contracts, the honest-advertisement posture,
the decline-matrix behavior, the fingerprint format, the russh
pin's wire posture) confirmed accurate, because
w5-publishexecutes immediately after this gate. - The plan's closure conditions — the scope-authority checklist (the complete two-direction door shipped; the assembly out; no binary; single crate) verified against the landed state; the upstream asks (the wave-3 gate's item 5 lineage) verified still booked with their owners — nothing absorbed silently through the release.
Verdict: green (w5-publish unblocked) or findings booked
(remediation; the publish waits).
Acceptance Criteria
- The matrix audit table verified cell by cell against
mapping.md; the runner in the verification list - Both e2e postures verified (nothing silently green; findings discharged or booked)
- The fuzz corpus gate + campaign logs read clean; the sidecar convention held
- Release readiness verified (docs × builds, README/CHANGELOG, package policy, manifest, dry-run)
- The freeze inventory verified accurate against the landed code
- Full verification set green (
cargo testper build +--all-features, clippy ×2-D warnings, fmt,cargo doc --no-deps, the fuzz corpus gate) taskgraph validateclean- Verdict recorded;
w5-publishunblocked or findings booked
References
- docs/plans/implementation.md §Wave 5 (the bullets this gate reads)
- docs/architecture/mapping.md §Decline matrix, docs/architecture/client.md (the two-direction contract the publish freezes)
- tasks/implementation/w5-*.md (the wave's tasks + their records)
- /workspace/@alkdev/alkgit/docs/plans/implementation.md §Wave 5 (the release-gate pattern: pure review, publish as its own task)
Notes
Verdict: green. w5-publish is unblocked. Every gate read was
re-executed live at this commit (2026-10-30, post-ab5236e) — nothing
was taken solely from the task records. No blocking issues; no code
findings; nothing rose to booked-remediation level. Notes below.
The matrix suite ✓
Every test name the coverage audit pins resolves in its binary (the
full inventory grep-verified this session — all 26 dispatch_core
rows / all 8 tunnel_mapping + git_mapping + client-side rows
named in the audit table exist), and mapping.md §Decline matrix
traces cell by cell onto audit rows: the none build declines
everything (every_channel_open_declines_in_a_default_build + the
shared x11/agent/cancel/listen rows); the git build's declines
(pty/shell — the gap-closed pty row, plain exec, tunnel opens,
unreachable session requests, subsystems, unknown services) and its
one serve (git-parseable exec); the session build's symmetric shape
(git-parseable exec declines, wrapper-unset declines, seam-unset
pty/shell); the tunnel build's serve/decline split incl. the seam-unset
listen forms and the ConnectFailed fabric reject; the sftp slot's
unchanged-underlying-build row (the subsystem row can't appear where
session channels decline at open — the audit row 8's reasoning holds;
the client-side placeholder pins every build); the never-features
pinned in every build both directions, with the auth-agent open's
pin-bound-unreachable record read and accepted (the russh-0.65
pre-handler decline is part of the pin per ADR-002). The runner
(scripts/matrix.sh, the script vehicle decided + recorded) is in
AGENTS.md's verification list.
Both e2e postures ✓ — nothing silently green
tests/e2e_server.rs (12 rows) and tests/e2e_client.rs (7 rows)
both read: every real-tool row is check-gated with
support::skip(row, reason) prints — tool absent/short, spawn
refusal, and (client fixture) never-listening with the server's -e
log tail — never a silent pass; every row is deadline-bounded end to
end; every decline row additionally pins the door-side decline
event (the e2e_server rows). The task records' findings are all
e2e-graph-local flake hardening (per-row workdirs, the monotonic
port allocator, the fabric settle, the event poll) — corroborated by
the 10-consecutive-run claims and this session's full-matrix run.
The e2e_client fixture/gating decisions (tunnel+session gating for
the stays-usable row, every-build rows for the feature-free ops) are
recorded in the task and read honest. On this host every row ran
(OpenSSH 9.6p1, git 2.43, curl 8.5, sftp present) — the matrix log
carries the real-tool rows green, no skip prints fired.
The fuzz sidecar ✓ — convention held, logs clean
Layout matches the alkgit convention (fuzz/README.md: thin
fuzz_target! wrappers, the stable-clean shared/ library, the
detached runner, the nightly pin inside fuzz/, committed seeds +
the deterministic generator, grown corpora/artifacts/coverage
gitignored). gen_fuzz_seeds.py re-run this session was a no-op
diff on the committed set. The corpus gate re-ran green (11/11,
exit 0). The four final campaign logs read clean — oom/timeout/ crash: 0/0/0, exiting: 0 (exec_parse 43M+ execs / fingerprint
12M+ / key_decode 5M+ / terminal_params 9M+); the two first-campaign
crash logs (exec_parse exit 77, key_decode exit 77) are exactly the
recorded in-task findings — the harness oracle's double-/ strip
(harness-side, fixed) and the ssh-key PPK header echo (the real
finding: decode_key_arm now carries a crate-owned fixed message;
re-ran clean). The exposure shape matches the record: one
no-exposure target (fingerprint — fully public ingress) + three
#[doc(hidden)] production-surface re-exports; the root crate's
package excludes the sidecar (verified in the package list) and the
root workspace excludes it (workspace + package excludes in
Cargo.toml).
Release readiness ✓
cargo doc --no-deps warning-free on the default build (matrix run)
and --all-features — re-run this session, exit 0, zero
warnings. README (feature graph + fail-closed posture + custody
summary + the doctest-mirrored examples) and the CHANGELOG 0.1.0
founding entry both read honest and match the landed surface. The
publish dry-run re-ran clean (76 files packaged, verification
compile passed, upload aborted by dry run); cargo package --list
re-verified against the package policy — exactly src/ (20),
tests/ (+common +vectors), docs/architecture/ (the full
contract: the four spec docs + ADRs 001–006 + README + the tracker),
README, CHANGELOG, both licenses, the manifests, and
scripts/matrix.sh; none of the excluded surface (AGENTS.md,
.opencode/, plans/research/reviews/sdd_process, tasks/, fuzz/)
appears. Manifest sanity: version 0.1.0 (the manifest value —
w5-publish verifies, no bump), edition 2024, rust-version 1.89,
license + both files, the pins exactly as ADR-002 records them
(russh 0.65 default-features = false + aws-lc-rs; alkcall 0.10;
alkvault 0.1; the optional siblings 0.8.1 / 0.1.0 / 0.4.1), the
feature graph exactly ADR-003's flat shape, default = [].
The freeze inventory ✓ — accurate against the landed code
Item by item: (1) the mapping contracts — the route-1 bridge,
exec-only grammar + verdicts, parse-only dispatch +
decline-before-alloc, translation bridge + exit rules 1–6, the client
planes — as executed in dispatch.rs/tty_map.rs/git_map.rs/
tunnel_map.rs/client_ops.rs and line-by-line read green at the
wave-3/4 gates; (2) the honest-advertisement posture — MethodSet
exactly {PublicKey} at the adapter's Config construction
(adapter.rs:135), verified by its own unit row; (3) the
decline-matrix behavior — the OpenDeclineReason vocabulary and
decline shapes as pinned by the matrix suite; (4) the fingerprint
format — SHA256: + unpadded base64 via HashAlg::Sha256
(fingerprint.rs:29), the single path both the auth bridge and the
policy pin consume; (5) the russh pin's wire posture — 0.65.0 +
aws-lc-rs, des/dsa never, per Cargo.toml. The inventory as
recorded in w5-release-readiness.md matches the landed code; the
publish freezes exactly those surfaces.
The plan's closure conditions ✓
The complete two-direction door shipped (server stack + all four
mapping rows + the decline placeholder; dial + op rows + the -R
leg + lifecycle primitives); the assembly stays out (no
identity/ACL/fabric policy owned by the crate — seams only); no
binary (no [[bin]] target; the package ships one lib); single
crate (single-member workspace, no tracks); nothing absorbed
silently — the upstream-ask inventory verified still booked with its
owners:
- wave-3 gate item 5 (two asks): the alktunnels/alkcall
non-detaching post-construction identity seam (the door keeps the
no-detach posture — no
set_identity-style surface appeared insrc/through the release), and mapping.md's correlation-miss event-vocabulary nuance. - The wave-5 fuzz finding's
ssh-keyPPK parse-echo ask — recorded inw5-fuzz-harness.mdas booked with the russh/ssh-key owners; the actual tracker filing is owner-territory and stays listed here so it cannot be absorbed at the publish.
Observations (non-blocking, no action required)
- The packaged file list includes
tests/vectors/alpha.key— the committed ed25519 test-fixture private key. Intentional (wave 1's fixtures, public test material, no custody posture applies) and consistent across the family's sibling crates; noted here so the published package's content is consciously accounted for. w5-publish's tag + plan-closure steps are the only remaining work; the ssh-key ask filing may ride with it if the owners want it in-flight before the release notes name the fix's provenance.
Verification (re-run at this commit, all green, 2026-10-30)
scripts/matrix.sh: cargo test × 6 builds (none / git / session /
tunnel / sftp-only / --all-features — 151 / 195 / 210 / 201 / 151 /
281 tests passed, 0 failed; all integration binaries + doctests
included) · clippy (--all-targets -D warnings) ✓ · clippy
(--all-features --all-targets -D warnings) ✓ · cargo fmt --check
✓ · cargo doc --no-deps ✓ (plus --all-features re-run ✓) · the
fuzz corpus gate cargo test --manifest-path fuzz/shared/Cargo.toml
✓ (11/11) · cargo publish --dry-run --allow-dirty ✓ ·
taskgraph validate ✓ (42 tasks, no orphan tasks after the wave-5
completion statuses).
Summary
Verdict: green — w5-publish unblocked. The wave-5 release gate
re-executed every read live at the gate commit: the coverage audit
traced cell by cell onto mapping.md's decline-matrix table with
every pinned test resolving in its binary and the sftp
no-op-feature fact + never-features verified in every build both
directions; both e2e binaries read with nothing silently green (the
whole suite ran on this host — no skips fired); the fuzz sidecar
held the alkgit convention with the seeds no-op, the corpus gate
green, and all four final campaigns clean (the two first-campaign
crashes exactly the recorded fixed findings); release readiness
verified (docs warning-free × builds, README/CHANGELOG honest, the
package list against policy, the dry-run clean, manifest sanity);
the freeze inventory confirmed accurate against the landed code, to
become one-way at the publish; the plan's closure conditions
verified (two-direction door, assembly out, no binary, single
crate, upstream asks still booked). One real code fix was already
discharged in-task (the ssh-key PPK echo → crate-owned decode
message). No blocking issues and no findings — this is the plan's
last review; w5-publish (tag alkssh-v0.1.0, the verification
set, the publish, the plan closure) closes it.