Skip to content

Commit 746ae4b

Browse files
chore(release): anvil-ssh 0.6.0 — M15 partial (tracing infra + FR-66 instrumentation) (#21)
Bumps anvil-ssh from 0.5.0 to 0.6.0 to publish the M15.1 + M15.2 work as a single crates.io release. M15 is a multi-PR milestone (PRD §5.8.4 — `-vv`/`-vvv`/JSONL debug, FR-65..FR-69); this release ships the library-side scaffold (categories + `tracing-log` bridge + FR-66 instrumentation across session/auth/resolver/proxy modules) and the Gitway-side flag wiring (FR-65, FR-67, FR-68, FR-69) lands in M15.4 + M15.5 against this 0.6.0. Highlights (full text in CHANGELOG.md): - new public module `anvil_ssh::log` with category constants (CAT_KEX, CAT_AUTH, CAT_CHANNEL, CAT_CONFIG) and the `install_log_bridge()` entry point that wraps `tracing_log::LogTracer::init()`; - structured `tracing::*!` events across the host-key / authentication / ssh_config-resolution / proxy-jump paths. Every applied `~/.ssh/config` directive emits a `(file, line, directive, value)` event under CAT_CONFIG; every check_server_key outcome emits a same-shaped `{host, fp, verdict, ...}` event under CAT_KEX/CAT_AUTH so JSONL consumers can group/count; - `log::*!` call sites preserved verbatim — the bridge funnels them through the consumer's tracing subscriber so M15.4 sees one event stream regardless of macro flavor. Anvil does NOT install a subscriber — that policy belongs to the consumer (Gitway CLI in M15.4). The bridge stays in place permanently for russh and other reverse-deps that stay on `log`. Public-API additions only. Existing `log::*!` consumers keep working unchanged. Lib tests: 207 passed, 5 ignored (pre-existing). Integration tests: 4 (test_known_hosts_cert.rs). Plan: M15.3 of anvil-gitway-milestone-plan.md. Stacked after M15.1 (#19), M15.2 (#20), both merged to main. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3818e3d commit 746ae4b

3 files changed

Lines changed: 21 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,25 @@
22

33
All notable changes to Anvil are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow [SemVer](https://semver.org/).
44

5+
## [0.6.0] — 2026-05-04
6+
7+
### Added
8+
9+
- **`tracing` infrastructure for the M15 verbose / JSONL debug surface** — the M15 chapter of [Gitway PRD §5.8.4](https://github.com/Steelbore/Gitway/blob/main/Gitway-PRD-v1.0.md). Anvil now emits structured `tracing::*!` events at per-category targets so a downstream consumer (Gitway CLI, integration tests, log aggregators) can install one [`tracing_subscriber::EnvFilter`] and get exactly the depth they want in each category — without scraping log lines.
10+
- **New `anvil_ssh::log` module** — public surface: `pub const CAT_KEX = "anvil_ssh::kex"` (and `CAT_AUTH`, `CAT_CHANNEL`, `CAT_CONFIG`); `pub const CATEGORIES: &[&str]` for downstream input validation; `pub fn install_log_bridge() -> Result<(), tracing_log::log_tracer::SetLoggerError>` wraps `tracing_log::LogTracer::init()` with documented idempotency + ordering semantics. The bridge funnels every existing `log::*!` call (Anvil, russh, ssh-key) through the consumer's `tracing` subscriber, so M15.4 (Gitway CLI) sees one event stream regardless of macro flavor. Anvil itself does not install a subscriber — that policy belongs to the consumer.
11+
- **FR-66 instrumentation across `session.rs`, `auth.rs`, `ssh_config/resolver.rs`, `proxy/jump.rs`, `hostkey.rs`** — every host-key check, every authentication attempt, every applied `~/.ssh/config` directive (with `(file, line, directive, value)`), and every ProxyJump hop now emits a structured `tracing::*!` event. Same `{host, fp, verdict, …}` shape across all five `check_server_key` outcome paths so a JSONL consumer can group / count.
12+
13+
### Changed
14+
15+
- **`anvil-ssh` minor bump** 0.5.0 → 0.6.0 to signal the new `anvil_ssh::log` module + new public dependency on `tracing` and `tracing-log`. Pre-1.0 SemVer: 0.5.x consumers must explicitly opt in.
16+
- **New transitive deps**`tracing = "0.1"`, `tracing-log = "0.2"`. Both are MSRV-1.88-clean.
17+
18+
### Notes
19+
20+
- **No subscriber is installed by the library.** The consumer (Gitway CLI in M15.4) builds an `EnvFilter` from its `-v`/`-vv`/`-vvv` count + `--debug-format` + `--debug-categories` flags and chooses the layer (`fmt::layer()` for human, `fmt::layer().json()` for JSONL). Library users in test contexts can install `tracing_subscriber::fmt::init()` for a default human formatter.
21+
- **Existing `log::*!` call sites preserved verbatim.** ~59 sites across Anvil + russh + ssh-key keep working through the bridge; rewriting them to native `tracing::*!` macros is post-1.0 housekeeping, not an M15 concern.
22+
- **Public-API additions only** — no breaking changes from 0.5.x.
23+
524
## [0.5.0] — 2026-05-04
625

726
### Added

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-3.0-or-later
22
[package]
33
name = "anvil-ssh"
4-
version = "0.5.0"
4+
version = "0.6.0"
55
edition = "2021"
66
license = "GPL-3.0-or-later"
77
authors = ["Mohamed Hammad <MJ@S3cure.me>"]

0 commit comments

Comments
 (0)