Tracking: craftanything branch — modularization completion #29

Closed
opened 2026-11-02 04:35:08 +00:00 by muse-lantern · 1 comment
Member

Tracking: craftanything branch — how much of the modularization work is done?

Branch: upstream craftanything, tip c64b8bd, on main b9e7cd73.
No PR yet; nothing here is in main. This issue exists so the branch's
coverage is measured in one place instead of across #27, #3, #25, #4.

Verified on the branch (lantern-vm, Godot 4.6.3): clean double import,
module_check + modloader_check + the full headless suite list PASS.
Note for context: in main today, modularization is only PR #28 (open,
unmerged) — so main itself is at ~0% landed; everything below is
branch state.

Scorecard (estimate, from branch evidence — re-weight freely)

  • Framework core: ~done. Manifest parsing + validation with named
    errors, typed registry (frozen after boot), loader discovery
    (res://modules, user://modules, .pck), dependency ordering with
    SemVer ranges, cycle + tie errors naming both sides, replaces
    redirects, entrypoints + hooks + ModApi/api.deadair, boot wiring
    (ModHost.boot() from Game._ready, MODULE ERRORS on the menu
    sign), spawner path, docs/modding.md + example mod.
  • Content migrated to modules: ~half. Solid: items (ItemSpec
    shared by GenericItem/ItemDefinition, grip poses + markers as
    validated data, firearms, world items, inventory/save bridging),
    rules/tuning/story text (GameRules, data/rules/gameplay.json,
    wired in game.gd), rig elements. Partial: levels (spec +
    LevelElement exist, no consumer wiring found), UI (UiFactory /
    UiRegistry / UiSpec / UiElement exist, zero usages in
    src/ or scenes), interactables (spec/factory/registry/element
    exist, wiring in progress). Element types: 14 declared; ~8
    behavior-bearing, 6 data-validated-only (dialogue, entity,
    loot_table, mission, strings, trader — schema + required
    fields via DataElement, no behaviour yet).
  • Modder tooling: mostly missing. Docs + example + dev-folder
    loading only. No spawn button, no pck enforcement (a zip containing
    modules/ still loads — convention, not enforced), no data reload
    (registry frozen by design), no manager/packager.
  • Design questions: answered in-branch, need Zach's blessing.
    Tribe = hybrid manifest + script entrypoints. Load order =
    dependency order. Ties = errors. GenericItem = third answer
    (both classes remain, sharing ItemSpec). Soft-fail = errors shown
    on the menu, game still boots (not per-module disable).

Overall, if "done" means framework + content fully module-driven +
tooling for modders to build and ship: roughly 60% — framework
~95%, content ~50%, tooling ~25%, all of it on an unmerged branch.

What's left (checklist)

  • PR for craftanything + merge decision (on merge, #28 closes
    as superseded)
  • #27 remainders: spawn button, pck enforcement, data reload,
    manager/packager, soft-fail stance, GenericItem ruling
  • #25 remainder: bridge grab simulation (#26 — no input
    injection, force grab, or grab_state yet), headset feel check,
    blessing the hand-rolled interactor over the planned
    DAFunctionPickup adapter
  • Levels wired to modules (spec exists, no consumer found)
  • UI wired to modules (factory/registry/spec/element exist,
    zero usages)
  • Behaviour for the 6 data-only element types (dialogue, entity,
    loot_table, mission, strings, trader)
  • Untouched elsewhere: #24 bake tool, #7 Terrain3D, #11
    traversal, #20 arms IK in substance, #12 vocabulary
  • Branch fix (DEFERRED per Zach, fix later, not now): restore
    opencode.json — see below

Branch fix deferred: opencode.json

The branch deleted the repo's opencode.json (the shared debug-bridge
MCP config from main) and added /opencode.json to .gitignore
with the comment "OpenCode local session config (paths/MCPs vary by
machine)". That treated a shared project file as local session
config — unintentional. Fix later: restore the file AND remove the
/opencode.json gitignore line (restoring the file alone leaves it
ignored and untracked).

## Tracking: `craftanything` branch — how much of the modularization work is done? Branch: upstream `craftanything`, tip `c64b8bd`, on main `b9e7cd73`. No PR yet; nothing here is in main. This issue exists so the branch's coverage is measured in one place instead of across #27, #3, #25, #4. Verified on the branch (lantern-vm, Godot 4.6.3): clean double import, `module_check` + `modloader_check` + the full headless suite list PASS. Note for context: in main today, modularization is only PR #28 (open, unmerged) — so main itself is at ~0% landed; everything below is branch state. ## Scorecard (estimate, from branch evidence — re-weight freely) - **Framework core: ~done.** Manifest parsing + validation with named errors, typed registry (frozen after boot), loader discovery (`res://modules`, `user://modules`, `.pck`), dependency ordering with SemVer ranges, cycle + tie errors naming both sides, `replaces` redirects, entrypoints + hooks + `ModApi`/`api.deadair`, boot wiring (`ModHost.boot()` from `Game._ready`, MODULE ERRORS on the menu sign), spawner path, `docs/modding.md` + example mod. - **Content migrated to modules: ~half.** Solid: items (`ItemSpec` shared by `GenericItem`/`ItemDefinition`, grip poses + markers as validated data, firearms, world items, inventory/save bridging), rules/tuning/story text (`GameRules`, `data/rules/gameplay.json`, wired in `game.gd`), rig elements. Partial: levels (spec + `LevelElement` exist, no consumer wiring found), UI (`UiFactory` / `UiRegistry` / `UiSpec` / `UiElement` exist, zero usages in `src/` or scenes), interactables (spec/factory/registry/element exist, wiring in progress). Element types: 14 declared; ~8 behavior-bearing, 6 data-validated-only (`dialogue`, `entity`, `loot_table`, `mission`, `strings`, `trader` — schema + required fields via `DataElement`, no behaviour yet). - **Modder tooling: mostly missing.** Docs + example + dev-folder loading only. No spawn button, no pck enforcement (a zip containing `modules/` still loads — convention, not enforced), no data reload (registry frozen by design), no manager/packager. - **Design questions: answered in-branch, need Zach's blessing.** Tribe = hybrid manifest + script entrypoints. Load order = dependency order. Ties = errors. `GenericItem` = third answer (both classes remain, sharing `ItemSpec`). Soft-fail = errors shown on the menu, game still boots (not per-module disable). Overall, if "done" means framework + content fully module-driven + tooling for modders to build and ship: **roughly 60%** — framework ~95%, content ~50%, tooling ~25%, all of it on an unmerged branch. ## What's left (checklist) - [ ] PR for `craftanything` + merge decision (on merge, #28 closes as superseded) - [ ] #27 remainders: spawn button, pck enforcement, data reload, manager/packager, soft-fail stance, `GenericItem` ruling - [ ] #25 remainder: bridge grab simulation (#26 — no input injection, force grab, or grab_state yet), headset feel check, blessing the hand-rolled interactor over the planned `DAFunctionPickup` adapter - [ ] Levels wired to modules (spec exists, no consumer found) - [ ] UI wired to modules (factory/registry/spec/element exist, zero usages) - [ ] Behaviour for the 6 data-only element types (dialogue, entity, loot_table, mission, strings, trader) - [ ] Untouched elsewhere: #24 bake tool, #7 Terrain3D, #11 traversal, #20 arms IK in substance, #12 vocabulary - [ ] Branch fix (DEFERRED per Zach, fix later, not now): restore `opencode.json` — see below ## Branch fix deferred: `opencode.json` The branch deleted the repo's `opencode.json` (the shared debug-bridge MCP config from main) and added `/opencode.json` to `.gitignore` with the comment "OpenCode local session config (paths/MCPs vary by machine)". That treated a shared project file as local session config — unintentional. Fix later: restore the file AND remove the `/opencode.json` gitignore line (restoring the file alone leaves it ignored and untracked).
Author
Member

Closing: the craftanything modularization tracked here landed via PR #30 (merged 2026-11-06, merge commit 94bb04078). This tracking issue is superseded by that merge.

Closing: the craftanything modularization tracked here landed via PR #30 (merged 2026-11-06, merge commit `94bb04078`). This tracking issue is superseded by that merge.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
dead-air/engine#29
No description provided.