- russh = "0.65", default-features off, aws-lc-rs only (ADR-002: no flate2, no rsa; tree RC-free except the recorded ssh-key 0.7.0-rc.11 pin riding the russh keys path) - alkcall 0.10, alkvault 0.1 version-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 — features gate nothing yet (wave-2 decline core is the first consumer) - task w1-manifest completed; notes/summary filled Verified: cargo tree (no rsa/pkcs1/flate2), cargo test, cargo test --all-features, cargo clippy --all-targets -- -D warnings (default + all-features), cargo fmt --check, taskgraph validate
101 lines
4.5 KiB
Markdown
101 lines
4.5 KiB
Markdown
---
|
||
id: w1-manifest
|
||
name: Wave 1 — manifest landing (russh pin + the feature graph)
|
||
status: completed
|
||
depends_on: []
|
||
scope: moderate
|
||
risk: medium
|
||
impact: project
|
||
level: implementation
|
||
---
|
||
|
||
## Description
|
||
|
||
Land the implementation dependency set and the ADR-003 feature graph —
|
||
the first commit of wave 1; everything else lands 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"]` — the family crypto posture
|
||
(decision 2), **no `flate2`** (decision 3), **no `rsa`** (decision 4:
|
||
ed25519-only; the tree must drop `rsa`/`pkcs1` RC deps entirely —
|
||
`ssh-key =0.7.0-rc.11` riding the russh keys path is 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-005 `Zeroizing` wrap).
|
||
- **`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 = []` — flat,
|
||
independent, no feature implies another. Features gate nothing yet
|
||
(the wave-2 decline core is their first consumer); the per-feature
|
||
sibling deps (`alktty` under `session`, `alktunnels` under `tunnel`,
|
||
`alkgit` under `git`) 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 — a blocking issue,
|
||
not something to work around.
|
||
|
||
## Acceptance Criteria
|
||
|
||
- [x] Manifest declares russh 0.65 with `aws-lc-rs` only;
|
||
`cargo tree` shows no `rsa`/`pkcs1` packages and no `flate2`
|
||
(the `ssh-key` RC pin excepted, recorded)
|
||
- [x] `alkcall 0.10` and `alkvault 0.1` pinned by version; no path
|
||
deps anywhere
|
||
- [x] Features `session`/`git`/`tunnel`/`sftp` declared, `default =
|
||
[]`; `cargo test --all-features` passes (features gate nothing
|
||
yet)
|
||
- [x] `edition = "2024"`, `rust-version = "1.89"` set
|
||
- [x] `cargo test`, `cargo clippy --all-targets -- -D warnings`,
|
||
`cargo fmt --check` pass
|
||
|
||
## 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 info` confirmed `russh 0.65.0`,
|
||
> `alkcall 0.10.0`, and `alkvault 0.1.0` all published on crates.io —
|
||
> no blocking issue. `alkcall` pinned 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`/`alkgit`
|
||
> sibling deps deliberately not added — 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 — must not be re-enabled
|
||
> by a future editor) and the fail-closed feature-graph note (ADR-003).
|
||
|
||
## Summary
|
||
|
||
> Manifest landed: `russh = "0.65"` with
|
||
> `default-features = false, features = ["aws-lc-rs"]`; `alkcall 0.10`
|
||
> and `alkvault 0.1` version-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 tree` contains no `rsa`, `pkcs1`, or
|
||
> `flate2` — only the recorded `ssh-key 0.7.0-rc.11` exception riding
|
||
> the russh keys path; `cargo test`, `cargo test --all-features`,
|
||
> `cargo clippy --all-targets -- -D warnings` (default and
|
||
> all-features), and `cargo fmt --check` all pass. `taskgraph
|
||
> validate` clean. |