ref:8d911092f9500ed95f5a81fd8368ad4daee2f718

Fix plan review issues: gradle props, mods.toml deps, resolveBackend, command ordering

- Add maven_group/archives_base_name to rename scope - Add [[dependencies.alacrittymc]] table headers to mods.toml rename - Fix resolveBackend() to respect defaultBackend config - Fix Task 13 to not reference AuditCommand before it exists - Add enableOnServers enforcement to server-side permission check - Add log prefix, temp dir, JNI test file renames Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SHA: 8d911092f9500ed95f5a81fd8368ad4daee2f718
Author: Cole Christensen <cole.christensen@macmillan.com>
Date: 2026-03-20 19:40
Parents: 1c0f8e5
1 files changed +39 -9
Type
docs/superpowers/plans/2026-03-20-huorn-distribution-admin.md +39 −9
@@ -210,7 +210,25 @@
Change `mod_id=alacrittymc` to `mod_id=huorn`.
Change `mod_name=Alacritty Minecraft` to `mod_name=Huorn`.
Change `maven_group=io.fangorn.alacrittymc` to `maven_group=io.fangorn.huorn`.
Change `archives_base_name=alacritty-minecraft` to `archives_base_name=huorn-minecraft`.
- [ ] **Step 4a: Rename log message prefixes**
Replace `[AlacrittyMC]` with `[Huorn]` in all Java and Rust files:
```bash
find . -name "*.java" -exec sed -i '' 's/\[AlacrittyMC\]/[Huorn]/g' {} +
find . -name "*.rs" -exec sed -i '' 's/\[AlacrittyMC\]/[Huorn]/g' {} +
```
- [ ] **Step 4b: Rename NativeLoader temp directory**
In `NativeLoader.java`, change `"alacrittymc-natives"` to `"huorn-natives"`.
- [ ] **Step 4c: Rename JNI test files in rust/tests/java/**
Rename `rust/tests/java/io/fangorn/alacrittymc/` to `rust/tests/java/io/fangorn/huorn/` and update package declarations and `System.loadLibrary` calls within.
- [ ] **Step 5: Commit**
```bash
@@ -261,6 +279,6 @@
- [ ] **Step 4: Update mods.toml**
Change: `modId="alacrittymc"` -> `modId="huorn"`, `displayName="Alacritty Minecraft"` -> `displayName="Huorn"`.
Change: `modId="alacrittymc"` -> `modId="huorn"`, `displayName="Alacritty Minecraft"` -> `displayName="Huorn"`. Also rename all `[[dependencies.alacrittymc]]` table headers to `[[dependencies.huorn]]`.
- [ ] **Step 5: Update common/build.gradle access widener reference**
@@ -718,8 +736,15 @@
return InteractionResult.SUCCESS; // Client: optimistic, let server decide
}
// Server-side permission check
// Server-side: block on dedicated servers if not enabled
if (player instanceof ServerPlayer serverPlayer) {
if (serverPlayer.getServer().isDedicatedServer()
&& !HuornConfig.getInstance().server.enableOnServers) {
serverPlayer.sendSystemMessage(Component.literal("Terminals are disabled on this server."));
return InteractionResult.FAIL;
}
// Permission check
if (!HuornPermissions.hasPermission(serverPlayer, HuornPermissions.USE)) {
serverPlayer.sendSystemMessage(Component.literal("You don't have permission to use terminals."));
return InteractionResult.FAIL;
@@ -876,12 +901,10 @@
public class HuornCommand {
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
// Start with just ReloadCommand. ListCommand, KillCommand, StatusCommand
// added in Task 14. AuditCommand added in Task 15.
dispatcher.register(Commands.literal("huorn")
.then(ReloadCommand.register())
.then(ListCommand.register())
.then(KillCommand.register())
.then(StatusCommand.register())
.then(AuditCommand.register())
);
}
}
@@ -1692,16 +1715,23 @@
```java
private String resolveBackend(ServerPlayer player) {
HuornConfig config = HuornConfig.getInstance();
String preferred = config.server.defaultBackend; // "plain" or "docker"
// If player has docker permission and docker is enabled, use docker
if (config.backends.docker.enabled
// If default is docker: use it only if enabled AND player has permission
if ("docker".equals(preferred) && config.backends.docker.enabled
&& HuornPermissions.hasPermission(player, HuornPermissions.USE_DOCKER)) {
return "docker";
}
// If default is plain (or docker wasn't available): use plain if enabled
// Fall back to plain if enabled
if (config.backends.plain.enabled) {
return "plain";
}
// Last resort: try docker if enabled and player has permission
if (config.backends.docker.enabled
&& HuornPermissions.hasPermission(player, HuornPermissions.USE_DOCKER)) {
return "docker";
}
// No backend available