Skip to content

release: v1.20.0 — plugin installs never replace project files, kernel gate checks only the floor - #189

Merged
hakeemRash merged 1 commit into
mainfrom
release/v1.20.0
Oct 16, 2026
Merged

hakeemRash merged 1 commit into
mainfrom
release/v1.20.0

Conversation

@hakeemRash

Copy link
Copy Markdown
Contributor

Summary

  • hkm plugins install/enable/update never replace a file the project already has. When a plugin's copy of a published file (config, migration, view, layout, translation) differs, the project's file is kept and the plugin's version is written beside it as <file>.updated. Before, a file still exactly as it was last published was refreshed in place, so hkm plugins install --latest rewrote configuration, views and layouts a project had built on. --overwrite still replaces them for one update run.
  • The side copy is now <file>.updated (was <file>.plugin-new); a leftover .plugin-new is removed once the file matches the plugin again.
  • install lists every kept file with its .updated suggestion, and counts only the assets it actually wrote.
  • The kernel gate refuses a plugin only when the running kernel is older than the plugin's floor. A kernel above the plugin's range (~1.17 on 1.19, ^1.13 on 2.0) installs it with a warning instead of blocking it.

Test plan

  • zig build test with the pinned toolchain (0.17.0-dev.657+2faf8debf): 8/8 steps, all tests pass, including new decideAsset and meetsFloor cases
  • zig build --release=small for x86_64-linux-gnu, x86_64-windows-gnu, aarch64-macos, x86_64-macos
  • hkm plugins update --dry-run on a real project (hkmvote): its layout, translations and an applied migration are reported as kept with *.updated suggestions; nothing is refreshed and no file changes
  • A real install against a plugin whose kernel range excludes the running kernel (not run)

…l gate checks only the floor

hkm plugins install/enable/update no longer overwrite a published file the
project already has. When the plugin's copy differs, the project's file is
kept and the plugin's version is written beside it as <file>.updated. Before,
a file still exactly as last published was refreshed in place, so
`install --latest` rewrote configuration, views and layouts. --overwrite still
replaces them for one update run. install now lists every kept file and counts
only the assets it actually wrote.

The plugin kernel gate refuses a plugin only when the running kernel is older
than the plugin's floor. A kernel above the plugin's range installs it with a
warning instead of blocking a plugin that would have run.
@hakeemRash
hakeemRash merged commit 6e1a309 into main Oct 16, 2026
11 checks passed
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.

2 participants