# TopData Rebuild Handoff - 2026-04-02 ## Current State This handoff captures the first implementation milestone of the topdata rebuild. The migration direction is: - Python `2dabuilder` in `sow-dev` remains authoritative - `sow-toolkit` now owns the new topdata command surface - `sow-module` is the new long-term source home for migrated topdata content - wiki generation, wiki deploy, and tophak packaging are still deferred Relevant commits from this milestone: - `sow-tools`: `d67b6e3` `Add topdata bridge commands and handoff` - `sow-module`: `dfb7fd2` `Add topdata migration roots and wrappers` ## Implemented In This Milestone ### New `sow-toolkit` commands - `validate-topdata` - `build-topdata` - `compare-topdata` Current behavior: - `validate-topdata` validates the new `topdata/` source root in `sow-module` - `build-topdata` currently uses the Python builder as a reference backend and writes outputs into `build/topdata/` - `compare-topdata` rebuilds fresh reference output from Python and compares it against `build/topdata/` This is an intentional bridge: it preserves current production behavior while the deeper merge/build rules are audited and ported. Important implementation detail: - the Python builder is run from a copied temporary workspace, not in place from `sow-dev` - this prevents the reference bridge from mutating repo-tracked state in `sow-dev` - the copied bridge rewrites its default asset/staging roots to temp-local paths before running - this was necessary because the Python builder also compiles `sow_top.hak` as a side effect of its normal build flow ### New `sow-module` layout Recommended migration root now exists: ```text topdata/ data/ tlk/ base_dialog.json ``` Generated outputs are expected under: ```text build/topdata/ 2da/ tlk/ ``` Current `sow-module` config now points at: - `topdata.source = "topdata"` - `topdata.build = "build/topdata"` - `topdata.reference_builder = "../sow-dev/tools/2dabuilder"` ### Canonical compatibility validation The new validator already recognizes the current family of authoring shapes: - dataset `base.json` with `columns` + `rows` - lockfiles as object maps of key -> numeric id - module files using `entries` - module files using `overrides` - plain row files using `rows` - TLK files with `entries` It is intentionally permissive for now: - legacy parseable shapes can still load - warnings are used where a file is parseable but not canonical yet - this keeps migration practical while still nudging toward a formal schema It does **not** yet rewrite or normalize files on disk. This milestone is validation and bridge-first, not migration automation. ## What Was Verified The new bridge was verified on the real project, not only on unit tests. Verified successfully: - `go test ./...` in `sow-tools` - `sow-toolkit validate-topdata` - `sow-toolkit build-topdata` - `sow-toolkit compare-topdata` Observed real output: - `build/topdata/2da` produced `113` generated `.2da` files - `build/topdata/tlk` produced `1` TLK output - `compare-topdata` passed against a fresh Python reference build This means the first milestone is not just scaffolding; it already gives `sow-module` a working topdata command surface backed by the authoritative Python builder. ## Important Rules Captured So Far These behaviors are considered core and must be preserved in the eventual native compiler: - base fallback from `base.json` - TLK fallback from `base_dialog.json` / TLK base data - snippet files and grouped files both being valid - grouped dataset families and plain tables both being valid - lockfile-backed IDs - ID allocation when a key has no existing lock entry - “only override what we intentionally touch” - deterministic output and deterministic compare behavior - grouped dataset families such as `classes` - plain-table handling alongside base+module datasets - compatibility with both snippet files and grouped files ## Current Rough Edges These are known limitations of the bridge and should be expected when resuming: - `build-topdata` and `compare-topdata` are slower than the future native implementation - they currently create a temporary copied Python builder workspace - they install the Python requirements into a temporary venv each run - the bridge still mirrors the Python builder’s semantics, including the tophak side-effect path, but now safely sandboxed in temp space - canonical schema validation is only partial so far - enough to validate root shape families and obvious errors - not enough yet to encode all dataset-specific rules - migrated data has not actually been moved into `sow-module/topdata` yet beyond the new root placeholders ## What Is Still Deferred - native Go merge/build parity for current Python rules - shorthand expansion porting - dataset-specific rule porting - parity fixtures checked into `sow-tools` - schema documentation for the canonical topdata JSON contract - local wiki generation - wiki deploy - tophak packaging - canonical normalize/export command ## Suggested Next Steps 1. Audit the current Python rules dataset-by-dataset, especially: - `classes` - `feat` - `itemprops` - TLK merge behavior 2. Write the canonical topdata JSON contract down explicitly. - root object families - row/entry/override forms - keyed refs - TLK refs - lockfile expectations 3. Capture representative parity fixtures from the Python builder. 4. Replace the reference-backed `build-topdata` bridge with native Go build logic one dataset family at a time. 5. Add a normalize/migrate command once the canonical JSON contract is nailed down. 6. Only migrate wiki generation after compiler parity is stable. ## Resume Commands From `sow-module`: ```bash ../sow-tools/tools/sow-toolkit validate-topdata ../sow-tools/tools/sow-toolkit build-topdata ../sow-tools/tools/sow-toolkit compare-topdata ``` Or via the repo wrappers: ```bash ./validate-topdata.sh ./build-topdata.sh ./compare-topdata.sh ``` Expected success output today: - `validate-topdata` prints `topdata validation: ok` - `build-topdata` prints `mode: reference` and output directories under `build/topdata` - `compare-topdata` prints `topdata compare: ok` ## Related UX State Separate from topdata, the content repos already have: - auto-installing `sow-toolkit` wrappers - Linux/macOS shell wrappers - Windows PowerShell and `.cmd` wrappers - simplified `START-HERE.md` docs in `sow-module` and `sow-assets` Windows still needs a real smoke test from an actual Windows machine.