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.
143 lines
7.1 KiB
Markdown
143 lines
7.1 KiB
Markdown
---
|
||
id: w5-publish
|
||
name: "Wave 5: the publish of alkssh 0.1"
|
||
status: completed
|
||
depends_on: [review-wave-5]
|
||
scope: narrow
|
||
risk: medium
|
||
impact: project
|
||
level: implementation
|
||
---
|
||
|
||
## Description
|
||
|
||
The publish, which is the plan's closing act (`docs/plans/implementation.md`
|
||
§Wave 5: "then **the publish of `alkssh 0.1`**, the gate review that
|
||
closes the plan"; the alkgit pattern: the gate stays a pure review,
|
||
the publish is its own task executing only over a green verdict).
|
||
The checklist:
|
||
|
||
- **Manifest sanity**, covering version 0.1.0 (already the manifest value, so
|
||
verify, no bump needed), `rust-version` 1.89, edition 2024, the
|
||
license files present, the dependency pins as ADR-002 records them
|
||
(russh 0.65 / aws-lc-rs, alkcall 0.10, alkvault 0.1, the
|
||
per-feature siblings), the package-policy `exclude` list, the
|
||
feature graph exactly ADR-003's.
|
||
- **The full verification set**: `cargo test` per build +
|
||
`--all-features`, clippy ×2 `-D warnings`, fmt,
|
||
`cargo doc --no-deps`, the fuzz corpus gate, the matrix runner,
|
||
all green at the publish commit.
|
||
- **The dry-run**: `cargo publish --dry-run --allow-dirty` clean at
|
||
the publish commit (the packaged file list spot-checked once more).
|
||
- **The tag**: the crate-qualified `alkssh-v0.1.0` (the alkgit
|
||
convention: crate-qualified tags, a bare `v0.1.0` would be
|
||
ambiguous across the family's multi-crate repos).
|
||
- **The publish**: `cargo publish`; the published version verified
|
||
resolvable on crates.io after (a fresh `cargo add`/`cargo search`
|
||
or the index check). **If the publish credential is unavailable,
|
||
the task stops and books it, never silently skipping**; everything
|
||
before the credential step still lands (tag + records).
|
||
- **The plan's closure recorded**: `docs/plans/implementation.md`
|
||
updated (the wave-5 row + the closure note: the plan closed at the
|
||
publish commit; the freeze inventory's surfaces are one-way from
|
||
here: the mapping contracts, the honest-advertisement posture,
|
||
the decline-matrix behavior, the fingerprint format, the russh
|
||
pin's wire posture; further wire-relevant change is a new ADR + a
|
||
semver event).
|
||
|
||
## Acceptance Criteria
|
||
|
||
- [x] Manifest sanity verified and recorded (no version bump needed,
|
||
0.1.0 is the manifest value)
|
||
- [x] The full verification set green at the publish commit
|
||
- [x] The dry-run clean at the publish commit
|
||
- [x] The `alkssh-v0.1.0` tag on the publish commit
|
||
- [x] `cargo publish` executed; the published 0.1.0 verified
|
||
resolvable on crates.io (or the credential absence booked,
|
||
never a silent skip)
|
||
- [x] The plan's closure recorded in
|
||
`docs/plans/implementation.md`
|
||
|
||
## References
|
||
|
||
- docs/plans/implementation.md §Wave 5 (the publish bullet), §Scope
|
||
authority (v0.1.0 publishes the crate)
|
||
- docs/architecture/decisions/002-russh-pin.md (the pin the manifest
|
||
records), docs/architecture/decisions/001-alkssh-alpn-pin.md (the
|
||
ledger entry the publish makes load-bearing)
|
||
- /workspace/@alkdev/alkgit tasks (the `core/w5-publish` shape this
|
||
mirrors: manifest sanity, verification, dry-run, the
|
||
crate-qualified tag, `cargo publish`)
|
||
|
||
## Notes
|
||
|
||
Filled by the implementation agent (2026-10-30), executing over the
|
||
green `review-wave-5` verdict at `9383e95`.
|
||
|
||
- **No findings in the checklist itself**, unlike the alkgit
|
||
publish (which had to land missing LICENSE files), the wave-5
|
||
release readiness already landed every artifact; this task only
|
||
verified.
|
||
- **Manifest sanity verified** (no bump, since 0.1.0 is the manifest
|
||
value): version 0.1.0, edition 2024, `rust-version` 1.89,
|
||
`license = "MIT OR Apache-2.0"` with `LICENSE-MIT` +
|
||
`LICENSE-APACHE` present, 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 alktty 0.8.1 / alkgit
|
||
0.1.0 / alktunnels 0.4.1), the package-policy `exclude` list in
|
||
place, the feature graph exactly ADR-003's flat shape
|
||
(`default = []`, no implies).
|
||
- **The full verification set green at the gate commit** (the tree
|
||
was clean, so gate commit == publish base): `scripts/matrix.sh` all
|
||
six builds' `cargo test` + clippy ×2 (`--all-targets -D warnings`,
|
||
with and without `--all-features`) + `cargo fmt --check` +
|
||
`cargo doc --no-deps` (doctests included, with the two `no_run`
|
||
usage doctests compile-checked per build); the fuzz corpus gate
|
||
`cargo test --manifest-path fuzz/shared/Cargo.toml` 11/11.
|
||
- **The dry-run clean**: `cargo publish --dry-run --allow-dirty`:
|
||
76 files packaged, the packaged tree compiled (verification
|
||
compile passed), upload aborted by dry run as expected;
|
||
`cargo package --list` spot-checked against the package policy:
|
||
exactly `src/` (20), `tests/` (+ `common/` + `vectors/`), the
|
||
architecture docs (`docs/architecture/`), `README.md`,
|
||
`CHANGELOG.md`, both licenses, the manifests, and
|
||
`scripts/matrix.sh`; none of the excluded surface appears
|
||
(`AGENTS.md`, `.opencode/`, `docs/plans|reviews|research/`,
|
||
`docs/sdd_process.md`, `tasks/`, `fuzz/`).
|
||
- **The publish credential is present in this environment**, so the
|
||
publish executes live, no operator handover, no silent skip.
|
||
- **The closure records ride the publish commit**: the plan file's
|
||
status → `closed`, the wave-5 row → `published`, and the §Plan
|
||
closure note (the freeze inventory one-way; the still-booked
|
||
upstream asks) land in the tagged commit.
|
||
- **The publish-commit dry-run rider**: the closure edits touch only
|
||
package-excluded paths (`docs/plans/`, `tasks/`), but the dry-run
|
||
was nonetheless re-executed at the publish commit itself (`e59ef79`),
|
||
and was clean again with the same 76-file package.
|
||
|
||
## Summary
|
||
|
||
**`alkssh 0.1.0` published to crates.io on 2026-10-30.** Publish commit
|
||
`e59ef79`, tagged **`alkssh-v0.1.0`** (crate-qualified, the alkgit
|
||
tag convention), pushed to `origin/main` with the tag. The checklist
|
||
ran in order over the green `review-wave-5` verdict at `9383e95`:
|
||
manifest sanity verified (no bump, 0.1.0 being the manifest value;
|
||
edition 2024; `rust-version` 1.89; both license files; the pins
|
||
exactly as ADR-002 records them; the package-policy `exclude` list;
|
||
the feature graph exactly ADR-003's); the full verification set green
|
||
(`scripts/matrix.sh`: six builds' `cargo test`, clippy ×2 -D
|
||
warnings, fmt, doc with the doctests compile-checked; the fuzz
|
||
corpus gate 11/11); `cargo publish --dry-run --allow-dirty` clean
|
||
twice (76 files, packaged-compile verified, once pre-commit and once
|
||
at `e59ef79`; the package list against policy, where architecture docs
|
||
ship, process surface and `fuzz/` do not). `cargo publish` completed
|
||
live (`Published alkssh v0.1.0 at registry crates-io`; the
|
||
environment carried the credentials, no operator handover, no silent
|
||
skip). Resolvability verified post-publish: `cargo search alkssh`
|
||
lists `alkssh = "0.1.0"` and a fresh `cargo add alkssh` in a clean
|
||
scratch project resolved it off the index. The plan's closure is
|
||
recorded in `docs/plans/implementation.md` (§Plan closure) on the
|
||
publish commit: the freeze inventory (mapping contracts, honest
|
||
advertisement, decline-matrix behavior, fingerprint format, the
|
||
russh pin's wire posture) is one-way from here; the upstream asks
|
||
stay booked with their owners. **The implementation plan is closed.** |