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.
4.6 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level |
|---|---|---|---|---|---|---|---|
| w1-manifest | Wave 1: manifest landing (russh pin + the feature graph) | completed | moderate | medium | project | implementation |
Description
Land the implementation dependency set and the ADR-003 feature graph:
the first commit of wave 1, with everything else landing inside it.
Per
ADR-002 decision 6 ("manifest lands with the dependency") and
overview.md §lifecycle note:
russh = "0.65"(caret stops at the minor),default-features = false, features = ["aws-lc-rs"]per the family crypto posture (decision 2), noflate2(decision 3), norsa(decision 4: ed25519-only; the tree must droprsa/pkcs1RC deps entirely, withssh-key =0.7.0-rc.11riding the russh keys path as the recorded exception).alkcall 0.10(identity/ACL types at the wire layer:IdentityProvider,Identity,AccessControl),alkvault 0.1(the ADR-005 custody model). Both pinned by version, never sibling-checkout paths.- Standing toolkit:
tokio,thiserror,tracing,parking_lot,zeroize(the ADR-005Zeroizingwrap). edition = "2024",rust-version = "1.89"(supersedes the current 1.88/2021 manifest).- The ADR-003 feature graph declared from the first commit:
session,git,tunnel,sftp,default = []; the graph is flat, independent, and no feature implies another. Features gate nothing yet (the wave-2 decline core is their first consumer); the per-feature sibling deps (alkttyundersession,alktunnelsundertunnel,alkgitundergit) land with their first consuming wave, not as dead manifest entries (recorded interpretation, flagged for the wave-1 gate). - Update the manifest comments (the current "deliberately empty until implementation start" notes are superseded); keep comments to the non-obvious-constraint class only.
Pre-flight: verify every pin exists on crates.io at the declared
version (russh 0.65, alkcall 0.10, alkvault 0.1); if a
crate/version is not published, stop and escalate, since a missing
pin is a blocking issue, not something to work around.
Acceptance Criteria
- Manifest declares russh 0.65 with
aws-lc-rsonly;cargo treeshows norsa/pkcs1packages and noflate2(thessh-keyRC pin excepted, recorded) alkcall 0.10andalkvault 0.1pinned by version; no path deps anywhere- Features
session/git/tunnel/sftpdeclared,default = [];cargo test --all-featurespasses (features gate nothing yet) edition = "2024",rust-version = "1.89"setcargo test,cargo clippy --all-targets -- -D warnings,cargo fmt --checkpass
References
- docs/architecture/decisions/002-russh-pin.md (decisions 1–6)
- docs/architecture/decisions/003-feature-graph.md (decision 1, §2)
- docs/architecture/overview.md §lifecycle note, §bounded-resources
- docs/research/russh.md (the 2026-10-26 re-verification section: feature names, tree inventory, MSRV)
Notes
Pre-flight executed:
cargo infoconfirmedrussh 0.65.0,alkcall 0.10.0, andalkvault 0.1.0all published on crates.io, so there is no blocking issue.alkcallpinned as"0.10"(latest in-range is 0.10.1; the caret stops at the minor, matching the ADR-002-russh convention for family pins). Toolkit versions:thiserror 2.0,tracing 0.1,parking_lot 0.12,zeroize 1.9,tokio 1.54(as already pinned).alktty/alktunnels/alkgitsibling deps deliberately not added, as they land with their first consuming wave (recorded interpretation, flagged for the wave-1 gate as the task states; no dead manifest entries). Manifest comments trimmed to the non-obvious-constraint class: the russh/default-features posture (ADR-002, which must not be re-enabled by a future editor) and the fail-closed feature-graph note (ADR-003).
Summary
Manifest landed:
russh = "0.65"withdefault-features = false, features = ["aws-lc-rs"];alkcall 0.10andalkvault 0.1version-pinned (no path deps); standing toolkit (tokio,thiserror,tracing,parking_lot,zeroize);edition = "2024",rust-version = "1.89"; ADR-003 feature graph (session/git/tunnel/sftp,default = [], flat and independent). Verified:cargo treecontains norsa,pkcs1, orflate2(only the recordedssh-key 0.7.0-rc.11exception riding the russh keys path);cargo test,cargo test --all-features,cargo clippy --all-targets -- -D warnings(default and all-features), andcargo fmt --checkall pass.taskgraph validateclean.