Files
glm-5.3-flash f4b5f896b4 docs: sweep em dashes from all markdown prose
Renames the written-usage rule into practice across the contract surface:
docs/ (architecture, research, plans, sdd), tasks/ (all 43 task files,
taskgraph validate passes), AGENTS.md, README.md, CHANGELOG.md, and the
.opencode/agents/ prompts. Every replacement is a sense-preserving
rewrite (colons, semicolons, commas, parentheses, sentence splits, varied),
never a mechanical swap; no spaced hyphens were substituted. Enum fields,
frontmatter, tables, wire data, and cited identifiers survive verbatim;
en dashes inside numeric ranges keep their meaning.

Verification: taskgraph validate (43 tasks), repo grep clean (single
exempt hit: the verification command's own search pattern in AGENTS.md),
cargo test, clippy --all-targets -D warnings, fmt --check, doc all green.
2026-11-04 20:28:00 +00:00

13 KiB
Raw Permalink Blame History

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
w5-decline-matrix
w5-e2e-server
w5-e2e-client
w5-fuzz-harness
w5-release-readiness
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, which is 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, reading the coverage-audit table 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, reading both directions' real-tool rows: 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-sshd client-direction rows verified against the reverse-runner shape.
  • The fuzz corpus gate, reading the sidecar's layout 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 across 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, checking 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-publish executes immediately after this gate.
  • The plan's closure conditions, verifying 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, with 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 test per build + --all-features, clippy ×2 -D warnings, fmt, cargo doc --no-deps, the fuzz corpus gate)
  • taskgraph validate clean
  • Verdict recorded; w5-publish unblocked 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), and 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, with 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 including the gap-closed pty row, then 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, so 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 ✓, with 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, covering a tool absent or short, spawn refusal, and (client fixture) never-listening with the server's -e log tail, so 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), and the matrix log carries the real-tool rows green, no skip prints fired.

The fuzz sidecar ✓, with the convention held and 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, with its fully public ingress) plus 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 with exit 0 and 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 that no bump is needed), 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, i.e. 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, where 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: plus 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 plus 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, with 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, and no set_identity-style surface appeared in src/ through the release), and mapping.md's correlation-miss event-vocabulary nuance.
  • The wave-5 fuzz finding's ssh-key PPK parse-echo ask, recorded in w5-fuzz-harness.md as 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, with 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, so 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, and this is the plan's last review; w5-publish (tag alkssh-v0.1.0, the verification set, the publish, the plan closure) closes it.