… banner
Phase G of v0.1.0 hardening (parallel-code-review items 6, 16):
- feat(analytics): attach `RollingFileAppender` (daily rotation,
JSON, INFO+) to the `Registry` alongside console and OTLP layers.
Previously the file layer existed in
`observability::logging::init_minimal_logging` but that function
was never invoked from main.rs, so `~/.jarvy/logs/jarvy.log` was
always empty and `jarvy ticket create` shipped a hollow log file
to support. One subscriber now owns all sinks (review #1).
- feat(analytics): drop hard-coded `LevelFilter::ERROR` on the OTLP
bridge; default to `info`, override via `JARVY_OTLP_LEVEL`.
`tool.installed`, `setup.inventory`, `hook.completed` events
actually export now (review #2).
- feat(setup_cmd): generate per-invocation `run_id` (uuid v7) and
hold an `info_span!("setup", run_id)` for the entire `run_setup`
call. Every event in the file log / OTLP backend now carries
`run_id` so support can stitch parallel install threads back
together (review #6).
- feat(setup_cmd): emit `setup.start` event with version, os, arch,
config_source (local/remote), config_path, ci_provider, jobs,
dry_run — the first five questions support asks. Was buried in
scattered `eprintln!`s before (review #11).
- feat(setup_cmd): rayon worker threads re-enter the parent setup
span via `parent_span.enter()` inside `pool.install`. Without
this, every event from a parallel-install worker was
span-orphaned in traces (review #7). Each tool gets its own
`install_tool` span keyed by name+version.
Outstanding from item 6 (deferred):
- Extending `tool_failed`/`hook_failed` signature with
pm/exit_code/stderr_redacted/os fields (touches every caller).
- Promoting these from warn to error.
Outstanding from item 16 (deferred):
- Reconciling `duration_ms` event field vs `with_unit("s")`
histogram to one canonical unit (touches ~5 telemetry events
and any consuming dashboards).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Updates the requirements on heck to permit the latest version.
Changelog
Sourced from heck's changelog.
Commits
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)