Skip to content

fix: hook reload local aliases when individual aliases changes#107

Merged
sassman merged 3 commits into
mainfrom
fix/local-alias-reload
Apr 22, 2026
Merged

fix: hook reload local aliases when individual aliases changes#107
sassman merged 3 commits into
mainfrom
fix/local-alias-reload

Conversation

@sassman

@sassman sassman commented Apr 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • The cd hook compared only alias name sets to skip reload — overwriting an existing local alias (am add -l t "new cmd") was silently ignored because the name didn't change
  • Replace name-only comparison with per-alias 7-char blake3 content hashes stored in _AM_PROJECT_ALIASES (name|shorthash,...)
  • Hook now diffs at the individual alias level: added / removed / changed / unchanged — only unloads+reloads what actually changed
  • Fresh cd-in still shows the full alias listing; incremental changes show a compact summary (am: .aliases changed (1 updated))
  • Backward compatible with old name,name,... format (entries without hash always trigger reload)
  • Closes Overwriting a local alias does not reload the new value in the shell #105

…ction

- add compute_short_hash() to trust.rs (7-char blake3 prefix)
- change _AM_PROJECT_ALIASES format from "b,t" to "b|hash,t|hash"
- rewrite hook change detection to diff at individual alias level:
  removed = unload, added = load, changed = unload+reload, unchanged = skip
- show incremental message ("1 added, 2 updated") on alias changes
  instead of full load message (which is kept for fresh cd-into-project)
- backward compat: old format entries (no |) trigger a full reload
- add regression test for overwriting an alias value (the original bug)
- update snapshot tests for new env var format
@sassman sassman changed the title fix(hook): reload local aliases when value changes fix: hook reload local aliases when value changes Apr 22, 2026
@sassman sassman changed the title fix: hook reload local aliases when value changes fix: hook reload local aliases when individual aliases changes Apr 22, 2026
@codecov-commenter

codecov-commenter commented Apr 22, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.57785% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 74.62%. Comparing base (8b09bec) to head (b2dc942).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
crates/am/src/hook.rs 97.41% 0 Missing and 7 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #107      +/-   ##
==========================================
+ Coverage   74.13%   74.62%   +0.48%     
==========================================
  Files          45       45              
  Lines       11856    12093     +237     
  Branches    11856    12093     +237     
==========================================
+ Hits         8790     9024     +234     
  Misses       2886     2886              
- Partials      180      183       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

sassman added 2 commits April 22, 2026 13:25
Signed-off-by: Sven Kanoldt <sven@d34dl0ck.me>
@sassman sassman merged commit 8628f17 into main Apr 22, 2026
22 of 23 checks passed
@sassman sassman deleted the fix/local-alias-reload branch April 22, 2026 11:47
@github-actions github-actions Bot mentioned this pull request Apr 22, 2026
sassman pushed a commit that referenced this pull request Apr 27, 2026
## 🤖 New release

* `amoxide`: 0.7.0 -> 0.8.0 (⚠ API breaking changes)
* `amoxide-tui`: 0.7.0 -> 0.8.0

### ⚠ `amoxide` breaking changes

```text
--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field Config.logging in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/config.rs:30
  field Config.logging in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/config.rs:30

--- failure derive_trait_impl_removed: built-in derived trait no longer implemented ---

Description:
A public type has stopped deriving one or more traits. This can break downstream code that depends on those types implementing those traits.
        ref: https://doc.rust-lang.org/reference/attributes/derive.html#derive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/derive_trait_impl_removed.ron

Failed in:
  type Effect no longer derives Clone, in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/effects.rs:35
  type Effect no longer derives Clone, in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/effects.rs:35

--- failure enum_struct_variant_changed_kind: An enum struct variant changed kind ---

Description:
A pub enum's struct variant with at least one pub field has changed to a different kind of enum variant, breaking access to its pub fields.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_struct_variant_changed_kind.ron

Failed in:
  variant ProfileAction::Use in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/cli.rs:162
  variant Commands::Use in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/cli.rs:94

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_added.ron

Failed in:
  variant Commands:Sync in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/cli.rs:125
  variant Effect:PrintLines in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/effects.rs:55
  variant Effect:RenderSync in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/effects.rs:56
  variant Effect:PrintLines in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/effects.rs:55
  variant Effect:RenderSync in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/effects.rs:56
  variant Message:Sync in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/messages.rs:38
  variant Message:EnableProfiles in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/messages.rs:41
  variant Message:DeactivateProfiles in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/messages.rs:42
  variant Message:Sync in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/messages.rs:38
  variant Message:EnableProfiles in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/messages.rs:41
  variant Message:DeactivateProfiles in /tmp/.tmpZfglXO/amoxide-rs/crates/am/src/messages.rs:42

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/enum_variant_missing.ron

Failed in:
  variant Message::Hook, previously in file /tmp/.tmpcLonDb/amoxide/src/messages.rs:38
  variant Message::Reload, previously in file /tmp/.tmpcLonDb/amoxide/src/messages.rs:39
  variant Message::Hook, previously in file /tmp/.tmpcLonDb/amoxide/src/messages.rs:38
  variant Message::Reload, previously in file /tmp/.tmpcLonDb/amoxide/src/messages.rs:39
  variant Commands::Hook, previously in file /tmp/.tmpcLonDb/amoxide/src/cli.rs:133
  variant Commands::Reload, previously in file /tmp/.tmpcLonDb/amoxide/src/cli.rs:142

--- failure function_missing: pub fn removed or renamed ---

Description:
A publicly-visible function cannot be imported by its prior path. A `pub use` may have been removed, or the function itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/function_missing.ron

Failed in:
  function amoxide::init::generate_force_init, previously in file /tmp/.tmpcLonDb/amoxide/src/init.rs:102
  function amoxide::hook::generate_hook, previously in file /tmp/.tmpcLonDb/amoxide/src/hook.rs:13
  function amoxide::trust::render_unload_message, previously in file /tmp/.tmpcLonDb/amoxide/src/trust.rs:88
  function amoxide::subcommand::group_by_program, previously in file /tmp/.tmpcLonDb/amoxide/src/subcommand.rs:93
  function amoxide::group_by_program, previously in file /tmp/.tmpcLonDb/amoxide/src/subcommand.rs:93
  function amoxide::init::generate_reload, previously in file /tmp/.tmpcLonDb/amoxide/src/init.rs:134
  function amoxide::trust::render_load_message, previously in file /tmp/.tmpcLonDb/amoxide/src/trust.rs:54
  function amoxide::hook::generate_hook_with_security, previously in file /tmp/.tmpcLonDb/amoxide/src/hook.rs:37

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/inherent_method_missing.ron

Failed in:
  SecurityConfig::save, previously in file /tmp/.tmpcLonDb/amoxide/src/security.rs:67
  Session::save, previously in file /tmp/.tmpcLonDb/amoxide/src/session.rs:38
  Session::save, previously in file /tmp/.tmpcLonDb/amoxide/src/session.rs:38
  ProfileConfig::save, previously in file /tmp/.tmpcLonDb/amoxide/src/profile.rs:174
  ProfileConfig::save, previously in file /tmp/.tmpcLonDb/amoxide/src/profile.rs:174
  Config::save, previously in file /tmp/.tmpcLonDb/amoxide/src/config.rs:56
  Config::save, previously in file /tmp/.tmpcLonDb/amoxide/src/config.rs:56

--- failure module_missing: pub module removed or renamed ---

Description:
A publicly-visible module cannot be imported by its prior path. A `pub use` may have been removed, or the module may have been renamed, removed, or made non-public.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/module_missing.ron

Failed in:
  mod amoxide::hook, previously in file /tmp/.tmpcLonDb/amoxide/src/hook.rs:1

--- failure pub_module_level_const_missing: pub module-level const is missing ---

Description:
A public const is missing or renamed
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.46.0/src/lints/pub_module_level_const_missing.ron

Failed in:
  AM_PROJECT_ALIASES in file /tmp/.tmpcLonDb/amoxide/src/env_vars.rs:7
  AM_PROFILE_ALIASES_LEGACY in file /tmp/.tmpcLonDb/amoxide/src/env_vars.rs:21
```

<details><summary><i><b>Changelog</b></i></summary><p>

## `amoxide`

<blockquote>

##
[0.8.0](v0.7.0...v0.8.0) -
2026-04-27

### Bug Fixes

- Apply_import was overwriting the user's real config on every cargo
test ([#111](#111))
- Hook reload local aliases when individual aliases changes
([#107](#107))

### Features

- Add explicit enable/disable flags to am use
([#115](#115))
- Make shell logging on navigation events configurable
([#113](#113))
- Precedence engine with unified am sync, replaces am hook/reload
([#108](#108))

### Miscellaneous Tasks

- Bump clap from 4.6.0 to 4.6.1
([#104](#104))
</blockquote>

## `amoxide-tui`

<blockquote>

##
[0.8.0](v0.7.0...v0.8.0) -
2026-04-27

### Bug Fixes

- Apply_import was overwriting the user's real config on every cargo
test ([#111](#111))
- Hook reload local aliases when individual aliases changes
([#107](#107))

### Features

- Precedence engine with unified am sync, replaces am hook/reload
([#108](#108))
- Add explicit enable/disable flags to am use
([#115](#115))
- Make shell logging on navigation events configurable
([#113](#113))

### Miscellaneous Tasks

- Bump clap from 4.6.0 to 4.6.1
([#104](#104))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Overwriting a local alias does not reload the new value in the shell

2 participants