Native topdata migration summary - Replaced the legacy 2dabuilder runtime path with the native topdata builder. - Native build, validate, compare, and convert flows now cover the canonical topdata pipeline. - compare-topdata is now a native self-check; legacy reference-builder runtime usage was removed. - Parts generation follows the native asset-scan contract and uses sow-assets via project asset resolution. - Generated feat families, class-feat injects, masterfeat/successor expansion, and dataset-derived feat generation were brought to parity and regression-covered. - Remaining mirrored datasets were migrated into native-owned canonical data while preserving lock IDs. - normalize-topdata bridge behavior and migration-era ownership markers were removed. - Documentation was rewritten around the native workflow and active contracts were cleaned up. - Final hardening pass removed stale validator assumptions and cleaned ignored/generated artifacts for PR readiness. Reviewed-on: https://gitea.westgate.pw/ShadowsOverWestgate/sow-tools/pulls/2 Co-authored-by: vickydotbat <vickydotbat@tutamail.com> Co-committed-by: vickydotbat <vickydotbat@tutamail.com>
71 lines
1.5 KiB
Markdown
71 lines
1.5 KiB
Markdown
# `masterfeats` Canonical Contract
|
|
|
|
`masterfeats` is a stable native canonical family consumed directly by `feat`
|
|
generation, class-feat expansion, and inheritance/ref resolution.
|
|
|
|
Current canonical scope:
|
|
|
|
- dataset root: `topdata/data/masterfeats/`
|
|
- required files:
|
|
- `base.json`
|
|
- `lock.json`
|
|
- generated output:
|
|
- `masterfeats.2da`
|
|
|
|
## `base.json`
|
|
|
|
Canonical shape:
|
|
|
|
```json
|
|
{
|
|
"output": "masterfeats.2da",
|
|
"columns": ["LABEL", "STRREF", "DESCRIPTION", "..."],
|
|
"rows": [
|
|
{
|
|
"id": 0,
|
|
"key": "masterfeats:weaponfocus",
|
|
"LABEL": "WeaponFocus",
|
|
"STRREF": "6490",
|
|
"DESCRIPTION": "436"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
Rules:
|
|
|
|
- `output` must be exactly `masterfeats.2da`
|
|
- `columns` must include `LABEL`, `STRREF`, and `DESCRIPTION`
|
|
- every canonical row must have a non-empty `key`
|
|
- row keys must start with `masterfeats:`
|
|
- inline TLK payloads are allowed in `STRREF` and `DESCRIPTION`
|
|
- numeric/text references are both allowed where the native TLK compiler already supports them
|
|
|
|
## `lock.json`
|
|
|
|
Canonical shape:
|
|
|
|
```json
|
|
{
|
|
"masterfeats:weaponfocus": 0
|
|
}
|
|
```
|
|
|
|
Rules:
|
|
|
|
- every key must start with `masterfeats:`
|
|
- every value must be numeric
|
|
- the lockfile remains the canonical stable id source for authored keys
|
|
|
|
## Module contributions
|
|
|
|
This family continues to support the shared canonical module shapes already used by native
|
|
datasets:
|
|
|
|
- `entries`
|
|
- `overrides`
|
|
- `rows`
|
|
|
|
Those shapes are validated generically in `topdata.go`; this contract only adds the
|
|
family-specific guarantees for `masterfeats`.
|