v0.1.1: track the hax-hooks-lib -> foundry-hooks-lib rename

User callout: 'Hax' is Kaysser's nickname, drop it from module
names. hooks-lib v0.3.0 renamed its module id; this commit
follows:

- relationships.modules[0].id: hax-hooks-lib -> foundry-hooks-lib
- relationships.modules[0].compatibility.minimum: 0.2.0 -> 0.3.0
  (we now require the renamed version)
- module.json: version 0.1.0 -> 0.1.1, download URL updated
- README.md, scripts/main.js, tests/PLAN.md, tests/test-helpers.mjs:
  branding text updates
- .gitignore: un-ignore the new 0.1.1 zip

Verification: 75/75 smoke assertions pass, no logic change.

Module title is now 'It's Achievable' (dropped the
'Hax's Tools' umbrella prefix per the same callout). 2 module
text changes are non-functional; pure branding.
This commit is contained in:
2026-06-20 16:55:29 -04:00
parent f2ef1ef4f3
commit 888790e5ff
8 changed files with 21 additions and 20 deletions

1
.gitignore vendored
View File

@@ -28,3 +28,4 @@ scripts/session-prompts.js
# versioned so future rebuilds don't accidentally overwrite a released version.
its-achievable-*.zip
!its-achievable-0.1.0.zip
!its-achievable-0.1.1.zip

View File

@@ -1,8 +1,8 @@
# Hax's Tools — It's Achievable (`its-achievable`)
# It's Achievable (`its-achievable`)
Foundry VTT module: achievements engine, custom rules, rewards,
achievement wall, and combat HUD. Consumes the generic Foundry hook
facade from `hax-hooks-lib` and the encounter state from `battle-focus`.
facade from `foundry-hooks-lib` and the encounter state from `battle-focus`.
## Status
@@ -11,7 +11,7 @@ v0.1.0 — first release as a standalone repo. Sourced from
custom-achievements-app.js, hud.js, achievement-rules.js}` at
`battle-focus` v0.5.0-alpha.12 (`99cf757` on Gitea).
Stage 2 of the Hax's Tools split. The achievement code is now an
Stage 2 of the Foundry module split. The achievement code is now an
independent module with its own:
- Settings namespace (`its-achievable.*`)
- Module id (`its-achievable`, lowercase kebab)
@@ -25,7 +25,7 @@ as a soft dependency of battle-focus).
## Dependencies
- **`hax-hooks-lib`** (≥0.2.0) — provides the Foundry event stream via
- **`foundry-hooks-lib`** (≥0.2.0) — provides the Foundry event stream via
the generic `{ts, hook, args}` envelope facade. See
`hooks-lib/docs/HOOK_CONTRACT.md`.
- **`battle-focus`** (soft) — provides the encounter singleton via
@@ -87,7 +87,7 @@ in Stage 3 and the existing E2E suite exercises the moved code.
## Architecture notes
- **Hooks-lib first.** its-achievable subscribes to
`hax-hooks-lib`'s envelope stream. Combat lifecycle, document CRUD,
`foundry-hooks-lib`'s envelope stream. Combat lifecycle, document CRUD,
dnd5e rolls — all via `hooksLib.api.subscribeMany({...})`. No direct
`Hooks.on(...)` calls.
- **Encounter via battle-focus's API.** its-achievable does not import

BIN
its-achievable-0.1.1.zip Normal file

Binary file not shown.

View File

@@ -1,8 +1,8 @@
{
"id": "its-achievable",
"title": "Hax's Tools — It's Achievable",
"description": "Foundry VTT module: achievements engine, custom rules, rewards, achievement wall, and combat HUD. Consumes the generic Foundry hook facade from hax-hooks-lib and the encounter state from battle-focus.",
"version": "0.1.0",
"title": "It's Achievable",
"description": "Foundry VTT module: achievements engine, custom rules, rewards, achievement wall, and combat HUD. Consumes the generic Foundry hook facade from foundry-hooks-lib and the encounter state from battle-focus.",
"version": "0.1.1",
"library": false,
"manifestPlusVersion": "1.2.0",
"authors": [
@@ -19,11 +19,11 @@
"systems": [],
"modules": [
{
"id": "hax-hooks-lib",
"id": "foundry-hooks-lib",
"type": "module",
"manifest": "https://git.homelab.local/kaykayyali/hooks-lib/raw/branch/main/module.json",
"compatibility": {
"minimum": "0.2.0"
"minimum": "0.3.0"
}
}
],
@@ -32,7 +32,7 @@
"esmodules": ["scripts/main.js"],
"url": "https://git.homelab.local/kaykayyali/its-achievable",
"manifest": "https://git.homelab.local/kaykayyali/its-achievable/raw/branch/main/module.json",
"download": "https://git.homelab.local/kaykayyali/its-achievable/raw/branch/main/its-achievable-0.1.0.zip",
"download": "https://git.homelab.local/kaykayyali/its-achievable/raw/branch/main/its-achievable-0.1.1.zip",
"readme": "https://git.homelab.local/kaykayyali/its-achievable/blob/main/README.md",
"changelog": "https://git.homelab.local/kaykayyali/its-achievable/commits/main",
"bugs": "https://git.homelab.local/kaykayyali/its-achievable/issues",

View File

@@ -2,7 +2,7 @@
"name": "its-achievable",
"version": "0.1.0",
"private": true,
"description": "Foundry VTT module: achievements, custom rules, rewards, achievement wall, and combat HUD. Depends on hax-hooks-lib (event stream) and battle-focus (encounter state).",
"description": "Foundry VTT module: achievements, custom rules, rewards, achievement wall, and combat HUD. Depends on foundry-hooks-lib (event stream) and battle-focus (encounter state).",
"main": "scripts/main.js",
"type": "module",
"scripts": {
@@ -16,6 +16,6 @@
"license": "UNLICENSED",
"comment": "This package.json is for test/CI tooling only — Foundry VTT modules are loaded by Foundry, not by npm.",
"dependencies": {
"hax-hooks-lib": "^0.2.0"
"foundry-hooks-lib": "^0.2.0"
}
}

View File

@@ -1,7 +1,7 @@
// its-achievable — module entry point (v0.1.0).
//
// Achievements engine, custom rules, rewards, achievement wall, combat
// HUD. Stage 2 of the Hax's Tools split.
// HUD. Stage 2 of the Foundry module split.
//
// Stage 2 wiring:
// - The HUD listens to battle-focus's `battle-focus:hud-update` and

View File

@@ -54,14 +54,14 @@ Test asserts: catalog is an array, length ≥ 24, every entry has
its-achievable's `ready` hook subscribes to hooks-lib's envelope stream.
Smoke test stubs both `Hooks` (for Foundry init/ready) and
`hax-hooks-lib`'s `mod.api` (for subscribe) and asserts:
`foundry-hooks-lib`'s `mod.api` (for subscribe) and asserts:
- `subscribeMany` is called with at least the combat + actor update +
token update + dnd5e roll hooks listed in
`.hermes/plans/2026-06-20_080000-hax-tools-stage2-achievable-v2.md` D4.
- If `hax-hooks-lib` is not installed, its-achievable logs a warning
- If `foundry-hooks-lib` is not installed, its-achievable logs a warning
and continues (graceful degradation).
- If `hax-hooks-lib` is installed but `battle-focus` is not, the
- If `foundry-hooks-lib` is installed but `battle-focus` is not, the
HUD's `getActiveEncounter()` returns null and the HUD skips
rendering.

View File

@@ -94,11 +94,11 @@ export function installStubs(opts = {}) {
if (withHooksLib) {
const _hooksLibSubscribers = new Map();
const _hooksLibOnce = new WeakMap();
_modules.set("hax-hooks-lib", {
id: "hax-hooks-lib",
_modules.set("foundry-hooks-lib", {
id: "foundry-hooks-lib",
active: true,
api: {
MODULE_ID: "hax-hooks-lib",
MODULE_ID: "foundry-hooks-lib",
version: "0.2.0",
REGISTERED_HOOKS: ["combatStart", "combatEnd", "updateActor", "createToken", "dnd5e.rollAttackV2", "dnd5e.rollDamageV2", "preUpdateActor", "updateToken", "preUpdateToken"],
subscribe(hookName, fn) {