Commit Graph
100 Commits
Author SHA1 Message Date
archvillainette f003c0a347 Merge branch 'main' into chore/direnv-use-flake
build-binaries / build-binaries (pull_request) Successful in 2m12s
test-image / build-image (pull_request) Successful in 45s
test / test (pull_request) Successful in 1m26s
2026-06-25 07:00:45 +00:00
archvillainette eefe00ebc5 chore: add tea to flake (#18)
build-binaries / build-binaries (push) Has been cancelled
test / test (push) Has been cancelled
Reviewed-on: #18
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-25 06:55:32 +00:00
archvillainette eb5d15061c fix(pipeline): make the full module build work for module-only projects (#17)
test / test (push) Successful in 1m23s
build-binaries / build-binaries (push) Successful in 2m9s
build-image / publish (push) Successful in 52s
`crucible module build` runs the full pipeline (module + HAK producer +
topdata). A module-only project consumes prebuilt HAKs and has no
`paths.assets`, so the HAK stage crashed on the unset assets dir: the
music-credits walk hit `filepath.WalkDir("")` (`lstat : no such file or
directory`) and asset collection hit `filepath.Rel(root, "")`.

Guard both on an unset `AssetsDir()`: an absent assets tree simply means
no authored credits and no asset files to collect, so the HAK stage
no-ops cleanly while topdata generated-2DA assets still build. Honors
spec Decision 3 (canonical `crucible module build`, no `build-module`).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Reviewed-on: #17
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-24 15:32:01 +00:00
archvillainette 5c46824ebd fix depot cdn url (#16)
build-binaries / build-binaries (push) Successful in 2m10s
test / test (push) Successful in 1m23s
build-image / publish (push) Successful in 55s
Reviewed-on: #16
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-22 12:34:12 +00:00
archvillainette 2ea7959693 paths.build fix (#15)
test / test (push) Successful in 1m27s
build-binaries / build-binaries (push) Successful in 2m8s
build-image / publish (push) Successful in 52s
Reviewed-on: #15
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-21 18:33:45 +00:00
archvillainette 3315f8b7eb crucible build parity (#14)
build-binaries / build-binaries (push) Successful in 2m16s
test / test (push) Successful in 1m31s
build-image / publish (push) Successful in 57s
forces build parity with crucible = local builds and CI/CD builds use different tools.

Reviewed-on: #14
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-21 13:17:58 +00:00
archvillainette faee2cde95 fix failing checks + cosmetic renames (#13)
test / test (push) Successful in 1m23s
build-binaries / build-binaries (push) Successful in 2m7s
build-image / publish (push) Successful in 52s
Reviewed-on: #13
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-21 07:40:46 +00:00
archvillainette d2f7c420ba autogen activation (#12)
test / test (push) Successful in 1m25s
build-binaries / build-binaries (push) Successful in 2m14s
build-image / publish (push) Successful in 1m12s
re-activates VFX accessory autogen

Reviewed-on: #12
Reviewed-by: xtul <mpiasecki720@protonmail.com>
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-21 07:16:58 +00:00
archvillainette 97f4c00393 bot token (#11)
build-binaries / build-binaries (push) Successful in 2m8s
test / test (push) Successful in 1m23s
Reviewed-on: #11
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-20 19:33:10 +00:00
archvillainette 4bab09412d workflow cleanups (#10)
build-binaries / build-binaries (push) Successful in 2m13s
test / test (push) Successful in 1m24s
Reviewed-on: #10
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-20 15:41:33 +00:00
archvillainette 13c8ced5e8 clean brittle tests (#9)
build-binaries / build-binaries (push) Successful in 2m7s
test-image / build-image (push) Successful in 43s
test / test (push) Successful in 1m26s
Reviewed-on: #9
Reviewed-by: xtul <mpiasecki720@protonmail.com>
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-20 10:32:20 +00:00
archvillainette f1fd03ee83 pipeline: reject resref collisions when chunking; document erf post-write hashing (#8)
test-image / build-image (push) Successful in 47s
test / test (push) Successful in 1m27s
build-binaries / build-binaries (push) Successful in 2m14s
build-image / publish (push) Successful in 13s
## What

Two correctness fixes surfaced in review of the direct-depot HAK artifact work.

### Reject resref+type collisions in `chunksFromManifest`

A manifest can name two distinct source paths that collapse to the same
`resref+type` (e.g. `creature/foo.tga` and `placeable/foo.tga` — resref is the
lowercase basename minus extension). The ERF writer keys resources on
`Name:Type`, so the second silently shadowed the first: an asset would vanish
from the packed HAK with no error.

`chunksFromManifest` now runs `ensureUniqueChunkResources` per chunk and fails
the build on a duplicate. This guards **both** build paths — the legacy
`--source-manifest` flow and the direct content-addressed flow
(`chunksFromSourceManifest` → `chunksFromManifest`).

### Document erf post-write hash coupling

`writeResourceData` streams the source into the output while hashing, so
size/SHA mismatches are only detected *after* the bytes are written. A non-nil
return therefore means the writer holds partial, unverified output and the
caller must discard it. Added a comment making that contract explicit;
`writeHAKArchive` already honours it (writes to a temp file, removes on any
Write error, never renames a bad archive into place).

## Tests

- `TestChunksFromManifestRejectsResrefCollision`: collision → error, distinct
  resrefs → clean. Asserts only error presence/absence — silent asset loss is
  the contract, not any specific wording.
- `go vet ./internal/erf/ ./internal/pipeline/` clean.
- `go test ./internal/erf/ ./internal/pipeline/` green.

## Follow-up

A new crucible release must be cut after this merges so the guard ships in the
binary `sow-assets-manifest` pins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Reviewed-on: #8
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-20 07:53:04 +00:00
archvillainette cdbbba3181 add content-addressed hak source mode (#7)
test-image / build-image (push) Successful in 46s
test / test (push) Successful in 1m26s
build-binaries / build-binaries (push) Successful in 2m20s
build-image / publish (push) Successful in 31s
Reviewed-on: #7
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-19 20:56:36 +00:00
archvillainette 223b9831c5 Always Gitkeep Cache (#6)
build-binaries / build-binaries (push) Successful in 2m2s
test-image / build-image (push) Successful in 43s
test / test (push) Successful in 1m20s
Reviewed-on: #6
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-18 07:29:09 +00:00
archvillainette 16d5586587 Crucible: Fix Formatting Churn (#5)
test-image / build-image (push) Successful in 43s
test / test (push) Successful in 1m21s
build-binaries / build-binaries (push) Successful in 2m2s
build-image / publish (push) Successful in 13s
RC#1 — build wrote 2-space instead of .editorconfig's 4-space
- editorconfig_format.go: the glob translator escaped {/} as literals, so [*.{json,jsonc}]→indent_size=4 never matched any file and formatting fell back to [*]→2. Implemented real editorconfig brace expansion — {a,b,c} alternation and {n..m} numeric ranges. Nothing is hardcoded; saveLockfile already read .editorconfig, it just got the wrong section.

RC#2 — validate wrote a lockfile (it must be read-only)
- The three registry collectors persisted lockfiles as a side effect of collection; ValidateProject calls collection outside its snapshot guard, so the write leaked. Threaded a persistLocks bool through collectGeneratedRegistryDatasets and the damagetypes/itemprops/racialtypes collectors. Only buildNativeUnchecked (the real build allocator) passes true; validate, discovery, packaging queries, and wiki discovery pass false.

Tests added: editorconfig_glob_test.go (brace match + 4-space via brace glob), registry_readonly_test.go (read-only writes nothing; persist writes allocations).

Reviewed-on: #5
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-17 07:57:54 +00:00
archvillainette b7c0f43064 Fix autogen to fail-open on missing asset manifests (#4)
test-image / build-image (push) Successful in 45s
test / test (push) Successful in 1m22s
build-binaries / build-binaries (push) Successful in 2m2s
build-image / publish (push) Successful in 13s
Reviewed-on: #4
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-16 21:50:45 +00:00
archvillainette d45bd84bc6 feat: crucible wrapper sync (#3)
test / test (push) Successful in 1m21s
test-image / build-image (push) Successful in 44s
build-binaries / build-binaries (push) Successful in 2m3s
build-image / publish (push) Successful in 12s
Reviewed-on: #3
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-16 15:38:58 +00:00
archvillainette 93433e3f53 Cross-Platform Crucible (#2)
test / test (push) Successful in 1m20s
build-binaries / build-binaries (push) Successful in 2m0s
test-image / build-image (push) Successful in 44s
build-image / publish (push) Successful in 12s
Crucible groundwork for cross-platform compatibility.

Reviewed-on: #2
Reviewed-by: xtul <mpiasecki720@protonmail.com>
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-16 13:52:19 +00:00
archvillainette e9d82816b7 Release workflow revision (#1)
test-image / build-image (push) Successful in 46s
test / test (push) Successful in 1m20s
Adds a manual release workflow and ensures images are only published on v* tags

Reviewed-on: #1
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-06-16 13:08:10 +00:00
archvillainette f3211f0d45 docs: up to date
build-image / build-image (push) Successful in 50s
test / test (push) Successful in 1m18s
2026-06-14 08:44:29 +02:00
archvillainetteandClaude Opus 4.8 8344a02d7a ci: publish crucible image under deployment/ namespace
build-image / build-image (push) Successful in 57s
release / release (push) Failing after 36s
test / test (push) Successful in 1m21s
registry.westgate.pw/sow/crucible -> /deployment/crucible across build-image
+ release workflows, flake.nix image name, Dockerfile, docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 07:50:38 +02:00
archvillainette d9e751025d nix-native builds 2026-06-13 21:02:08 +02:00
archvillainetteandClaude Opus 4.8 bdae9d18e4 fix(topdata): target git.westgate.pw and stub released parts manifest in tests
The reprovision retired gitea.westgate.pw in favour of git.westgate.pw, but
internal/topdata still defaulted to the old host and made a live API call
during the native buildability check, so once CI checkout was fixed the
parts tests failed (DNS, then HTTP 404).

- defaultGiteaBaseURL -> https://git.westgate.pw; normalize git-ssh. -> git.
- Add stubEmptyPartsManifest (stub_test.go) and call it from the 2 non-optional
  parts tests so they exercise the build offline. Per-test (t.Setenv) on
  purpose: a global TestMain SOW_ASSETS_SERVER_URL would override the
  git-remote-derived server other tests configure. VFX tests already pass
  (optional consumer ignores HTTP 404).

make check + make smoke green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 20:24:57 +02:00
archvillainette 472d4a58bc fix: nix-docker workflow 2026-06-13 19:59:36 +02:00
archvillainette 74b221a6bb fix: runner ovh-main -> nix-docker 2026-06-13 18:03:46 +02:00
archvillainette 19ce9efa76 fix: runner docker -> ovh-main 2026-06-13 17:47:09 +02:00
archvillainette 56c67132f3 claude: fold in old sow-tools 2026-06-13 09:49:29 +02:00
archvillainette d4a435883b skills: fallow 2026-06-12 10:14:38 +02:00
archvillainette 11541a53b2 review: code simplification and cleanup 2026-06-11 22:50:02 +02:00
archvillainette 5a101e94c3 gitea.westgate -> git.westgate 2026-06-11 22:47:22 +02:00
archvillainette 4d7515d22a feat(ci): emit release-manifest fragment artifact (H3) 2026-06-11 22:02:29 +02:00
archvillainette 97f8427c4b Phase 5: scaffold Crucible (sow-tools) — dispatcher + builder shims, container, PR-first CI, fail-closed (D11, D19). 2026-06-11 20:36:13 +02:00
archvillainette ff264f0d7c fix: collision prevent 2026-06-09 20:20:34 +02:00
archvillainette dd7c13fc5f fix: wiki deploy retry fix 2026-06-09 18:30:26 +02:00
archvillainette f3ed13ce19 feat: remove NWScript compiler support 2026-06-09 17:57:57 +02:00
archvillainette de7e99c55c docs: update AGENTS.md 2026-06-09 14:30:02 +02:00
archvillainetteandClaude Sonnet 4.6 3e8af0d388 fix: skip global.json in wiki table loader
global.json uses position/injections format, not rows. The wiki
loadWikiTables WalkDir was processing it as a 2DA table file and
failing the rows-must-be-array check. global.json is handled by
the native topdata path (native.go) after modules are applied.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 23:10:03 +02:00
archvillainette 9704760ab1 workflow fix: add more dependencies 2026-06-08 21:47:05 +02:00
archvillainette 8f9322c4de fix: go pull 2026-06-08 20:05:37 +02:00
archvillainette 92e5ef13d3 ssh to https: release fix 2026-06-08 20:03:55 +02:00
archvillainette 59d139537c configure ssh 2026-06-08 19:45:31 +02:00
archvillainette 85c5c59eae gitea clone step 2026-06-08 19:43:24 +02:00
archvillainette 1a33c4e102 fix: png now 2080 2026-06-08 19:39:27 +02:00
archvillainette 55322dc7bf Respect editorconfig formatting 2026-06-06 16:21:38 +02:00
archvillainette dfdc47c2dc Global json adjustments 2026-06-05 16:35:14 +02:00
archvillainette c672a1ff33 Support for global.json files 2026-06-05 10:36:47 +02:00
archvillainette d0e065536c sow-head-vfx -> sow-accessory-vfx 2026-05-31 15:40:45 +02:00
archvillainette 39f329343b Change head_visualeffects to accessory_visualeffects 2026-05-31 15:24:50 +02:00
archvillainette 3e169276f7 Categories with underscore 2026-05-31 14:49:52 +02:00
archvillainette c57b2e21a2 Autogen categories 2026-05-31 14:25:28 +02:00
archvillainette aa47532ef1 VFX Category Label Generation 2026-05-31 13:47:14 +02:00
archvillainette 67c03fa6bd Fix alignment/ids output 2026-05-31 08:17:41 +02:00
archvillainette 7eeb32927d Nix shell 2026-05-30 20:34:11 +02:00
archvillainette a5dbad4ff9 Autogen configuration enabled 2026-05-29 22:13:17 +02:00
archvillainette 311bb8a3d0 Accessories unhardcoded 2026-05-28 09:58:35 +02:00
archvillainette c7dc81b80f Fixed plain datasets generating lock ids when not necessary 2026-05-27 23:51:49 +02:00
archvillainette a2d9820f8d Spellcasting expansion 2026-05-27 10:28:44 +02:00
archvillainette bd9d2c6da0 Class wiki page refactors 2026-05-27 09:50:22 +02:00
archvillainette fd83d96c3a Support skill list generation with used attribute 2026-05-27 09:22:18 +02:00
archvillainette 981288f09e Manually-authored class notes 2026-05-27 08:45:45 +02:00
archvillainette 89508b3c03 Expose template options 2026-05-27 08:26:14 +02:00
archvillainette 59c8e407e9 feature/class-wiki-spell-progression (#13)
Reviewed-on: https://gitea.westgate.pw/ShadowsOverWestgate/sow-tools/pulls/13
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-05-26 20:35:54 +02:00
archvillainette 88be9e95d3 Automatic spellknown/spellgain null-filling (#12)
Implemented on branches `feature/topdata-row-extensions` in both `toolkit` and `module`.

**Scope Audited**
- Toolkit native topdata collection/build path.
- Project config/effective config validation.
- Module `nwn-tool.yaml` topdata config and topdata README.

**Changes Made**
- Added `topdata.row_extensions` config with `repeat_last` support.
- Added glob dataset matching and build-time row extension for plain native datasets in [native.go](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/topdata/native.go:641).
- Extension copies emitted columns from the highest authored `Level`, increments `Level`, and assigns sequential `id`s through target level.
- Enabled rules for `classes/spellsgained/*` and `classes/spellsknown/*` to level 60 in [nwn-tool.yaml](/home/vicky/Projects/nwnee-shadowsoverwestgate/module/nwn-tool.yaml:90).
- Updated toolkit/module docs.

**Configuration / Compatibility**
- New public config type: `TopDataRowExtensionConfig` in [project.go](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/project/project.go:233).
- Existing behavior is unchanged unless a repo opts into `topdata.row_extensions`.
- Source JSON and lockfiles are not updated for generated extension rows.

**Tests / Validation**
- Added project config tests for loading and validation.
- Added native topdata tests for extension behavior, glob application, preserving manually authored rows, unmatched datasets, and failure cases.
- Ran:
  - `go test ./internal/project ./internal/topdata`
  - `go test ./internal/topdata -run TestBuildNativeKeepsGeneratedIDsStableAcrossRepeatedBuilds`
  - `/tmp/sow-toolkit-rowext config validate` in `module`
  - `/tmp/sow-toolkit-rowext validate-topdata` in `module`
  - `/tmp/sow-toolkit-rowext build-topdata --force`, then inspected generated rows: `cls_spgn_acolyte.2da` now reaches row `59` / level `60`.

**Remaining Notes**
- `validate-topdata` still reports the pre-existing portrait lock warnings for `cotbl/cotbl_` and `lantern/lantern_`.
- `build-topdata --force` briefly rewrote three spellbook JSON files as a side effect; I reverted those, leaving only the intended YAML/docs changes in `module`.

Reviewed-on: https://gitea.westgate.pw/ShadowsOverWestgate/sow-tools/pulls/12
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-05-26 19:54:48 +02:00
archvillainette b7587cfd05 Warn when circumventing class spellbooks 2026-05-26 18:37:59 +02:00
archvillainette 16ed4fe47d Spellbook lists 2026-05-26 18:25:58 +02:00
archvillainette c5a18df730 Sidecar generation 2026-05-26 16:11:45 +02:00
archvillainette 28d487565a Fix alignment/id encoding 2026-05-26 14:18:04 +02:00
archvillainette 22e3fabbbb ID List Support expansion
**Scope Audited**
- Topdata configured value encoders in [native.go](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/topdata/native.go:3894)
- Config validation in [project.go](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/project/project.go:799)
- Wiki alignment formatting
- Module topdata config/docs and authored `PreferredAlignments` / `ProficiencyFeats` files

**Changes Made**
- Added generic `id_hex_list` support. It works for any configured dataset/column and emits packed hex row IDs from `ids`.
- Updated alignment encoding to accept explicit `alignments`; legacy `list` still works.
- Kept numeric packed lists on `list` / `all_except`.
- Configured `baseitems.ProficiencyFeats` in [nwn-tool.yaml](/home/vicky/Projects/nwnee-shadowsoverwestgate/module/nwn-tool.yaml:73).
- Migrated module proficiency authoring to `ids` and racial alignment authoring to `alignments`.
- Updated docs in [module/topdata/README.md](/home/vicky/Projects/nwnee-shadowsoverwestgate/module/topdata/README.md:157).

**Configuration / Schema Impact**
- New `topdata.value_encodings[].mode`: `id_hex_list`.
- `id_hex_list` accepts:
  - `"feat:some_key"`
  - `{ "id": "feat:some_key" }`
  - numeric IDs, still range-checked by `min`, `max`, `hex_width`.

**Compatibility Impact**
- Existing numeric packed lists are unchanged.
- Existing alignment `{ "list": [...] }` remains accepted, but docs and module data now prefer `{ "alignments": [...] }`.
- ID-list behavior is config-driven, not hardcoded to proficiencies.

**Tests Added / Updated**
- Added build test for generic `id_hex_list`.
- Added validation test for unknown ID references.
- Updated alignment tests to use `alignments`.
- Updated wiki alignment tests for explicit `alignments` plus legacy `list`.

**Validation Performed**
- `go test ./internal/topdata` passed.
- `go test ./internal/project` passed.
- `go test ./...` passed.
- `SOW_TOOLS_DEV_BINARY=../toolkit/tools/sow-toolkit ./scripts/run-nwn-tool.sh config validate` passed in `module/`.

**Remaining Risk**
- `./validate-topdata.sh` in `module/` is currently blocked by existing staged module authored-content changes: generated feat/baseitems validation reports `dataset baseitems: override must specify id or key` from `topdata/data/feat/generated`. I did not try to repair that unrelated staged work.
2026-05-26 13:39:07 +02:00
archvillainette 37db91314b Minimum row 2026-05-25 14:50:01 +02:00
archvillainette a646c905e4 Topdata wiki alignment links 2026-05-25 10:31:07 +02:00
archvillainette 7714c068fe Unhardcode 2026-05-25 10:23:42 +02:00
archvillainette e6fffdf041 Fix tail rows in portrait generation 2026-05-25 10:06:40 +02:00
archvillainette 01ddcf8735 "first_null_row" configuration option 2026-05-25 09:47:36 +02:00
archvillainette 34692fa9b4 Skill focus identity resolution 2026-05-24 20:44:52 +02:00
archvillainette b2a58cb011 Class feat injections moved to yaml 2026-05-24 20:23:08 +02:00
archvillainette 5fa5246e9f Alignment links 2026-05-24 18:06:28 +02:00
archvillainette a0c3c89049 ECL, default scale, and preferred alignment entries 2026-05-24 17:58:33 +02:00
archvillainette cc9996cd69 More racial template entries 2026-05-24 17:21:30 +02:00
archvillainette 6707edfccf Reverse allowlist 2026-05-24 15:48:37 +02:00
archvillainette 0e1ebf552d List/range support 2026-05-24 14:11:15 +02:00
archvillainette 91ab34ddff Fix validator screaming about new columns 2026-05-24 12:06:47 +02:00
archvillainette 334cd427c0 Targeted stale wiki cache reuse fix
**Scope Audited**
`module/` release/wiki wrapper flow and `toolkit/` wiki generation cache logic.

**Changes Made**
Root cause was stale wiki cache reuse. The generator cache considered digest + page count, but not generator version, so a restored VPS cache with old generated output could skip regeneration.

Changed [wiki_native.go](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/topdata/wiki_native.go:29) to bump the wiki generator to `nodebb-tiptap-html-v3`, and changed [wiki_native.go](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/topdata/wiki_native.go:268) so cached pages are current only when `state.version` matches.

**Configuration/Schema Impact**
No YAML/config/schema changes. Existing `.cache/wiki/state.json` files with `nodebb-tiptap-html-v2` will be invalidated and regenerated.

**Compatibility Impact**
This is compatible with existing caches; it only forces one regeneration when the new toolkit runs. After that, normal digest-based skipping resumes.

**Tests Added**
Added [TestBuildWikiRegeneratesOldGeneratorCache](/home/vicky/Projects/nwnee-shadowsoverwestgate/toolkit/internal/topdata/wiki_native_test.go:183), which simulates a `v2` cache and verifies `build-wiki` regenerates it.

**Validation Performed**
- Confirmed new test failed before the fix with `wiki status "skipped"`.
- `go test ./internal/topdata -count=1` passes.
- `./build-tool.sh` succeeds.
- `SOW_TOOLS_DEV_BINARY=../toolkit/tools/sow-toolkit ./build-wiki.sh` now reports:
  - `wiki pages: 1163`
  - `wiki status: generated`
- Local generated race pages: `17`.

**Remaining Risk / VPS Next Step**
The VPS release job must use this rebuilt/published toolkit. On the next run, you should see the wiki build regenerate once before deploy, and deploy should load `1163` local pages instead of `1092`, including `races:*` pages.
2026-05-24 10:13:52 +02:00
archvillainette 153f46fbc8 Fix race pages deploy 2026-05-24 09:45:57 +02:00
archvillainette 58b8955e07 Pagination deploy fix 2026-05-24 09:25:11 +02:00
archvillainette 6ac18e36c8 Wipe metadata 2026-05-24 08:22:32 +02:00
archvillainette 89d2da6f11 Formatting fix? 2026-05-24 07:52:33 +02:00
archvillainette 418cd2fa69 Goodbye legacy DokuWiki translators... 2026-05-24 07:32:56 +02:00
archvillainette 025995815d Dry runs? Pls... 2026-05-23 22:11:36 +02:00
archvillainette e275422b91 Deploy cursor fix? 2026-05-23 21:40:56 +02:00
archvillainette 3d42fc70bc Fixing release queue 2026-05-23 21:28:52 +02:00
archvillainette ed2ad4f9a0 BAB tables 2026-05-23 20:53:58 +02:00
archvillainette 3f36ed529a Class skillls/list splitting 2026-05-23 20:10:01 +02:00
archvillainette 22d7fa5e6f Add managed namespace wiki reset deploy 2026-05-23 17:51:27 +02:00
archvillainette 1221156084 Fix wiki deploy stale purge ordering 2026-05-23 16:59:28 +02:00
archvillainette 7288d7e2b7 Fix topdata lock file generation 2026-05-23 00:52:16 +02:00
archvillainette 44e6fab372 Asset-owned topdata 2026-05-23 00:29:04 +02:00
archvillainette 82bd075ae4 autogen cached models 2026-05-23 00:24:47 +02:00
archvillainette a17477cff1 Page generation to use title instead of key 2026-05-22 13:21:08 +02:00
archvillainette 835d1153f0 Canonical path adherence (#10)
Reviewed-on: https://gitea.westgate.pw/ShadowsOverWestgate/sow-tools/pulls/10
Co-authored-by: vickydotbat <vickydotbat@tutamail.com>
Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
2026-05-22 12:37:00 +02:00
archvillainette f4d92a9766 Fix Wiki Generation Not Running 2026-05-22 09:38:46 +02:00