crucible build parity #14

Merged
archvillainette merged 10 commits from crucible-build-parity into main 2026-06-21 13:17:58 +00:00
10 Commits
Author SHA1 Message Date
archvillainetteandClaude Sonnet 4.6 f833f979ea fix(project): exempt cdn_channel consumers from released-source validation; review polish
build-binaries / build-binaries (pull_request) Successful in 2m24s
test-image / build-image (pull_request) Successful in 50s
test / test (pull_request) Successful in 1m34s
- Extend ValidateLayout exemption so cdn_channel consumers skip root/include/
  derive/manifest requirements (they resolve entirely from Source.* at runtime).
- Add TestValidateLayoutAcceptsCDNChannelConsumerWithoutReleasedSourceFields.
- Fix inverted precedence comment in CDN-base resolution block (autogen.go:325).
- Add broken-YAML subtest to TestResolveCDNChannelHardFail.
- Add assumption comment to autogenConsumerManagedLockKeyMatcher re folder_name+preserve.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 15:09:12 +02:00
archvillainetteandClaude Sonnet 4.6 e674f5cad9 test(topdata): parity guard — cdn_channel yields accessory rows with no wrapper/env
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 15:01:03 +02:00
archvillainette 17f23a5686 docs(contract): add wrapper parity rules; state crucible image is deployment-only 2026-06-21 14:58:51 +02:00
archvillainette 91bb9a6613 chore(crucible): drop dead NWN_ROOT rule; auto-detect is the forward rule 2026-06-21 14:57:20 +02:00
archvillainetteandClaude Sonnet 4.6 d2c3b7c719 fix(topdata): drop misleading SkipLFS option field; --skip-lfs sets env directly
CRUCIBLE_SKIP_LFS env is the single skip mechanism; BuildAndPackageOptions
had a dead SkipLFS field that implied the option propagated through the build
API but was only ever env-bridged in the CLI run functions. Replace the struct
field with a local buildTopDataArgs wrapper and set the env at the CLI entry
point directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 14:54:45 +02:00
archvillainetteandClaude Sonnet 4.6 bdac6f29f0 feat(topdata): materialize Git-LFS asset bytes inside Crucible before packing
Adds materializeAssetLFS + hasLFSPointerStubs helpers to top_package.go.
Called at the top of packageBuiltTopData so bare CI checkouts never ship
~130-byte LFS pointer stubs. Opt-out via CRUCIBLE_SKIP_LFS env or the new
--skip-lfs flag on build-topdata / build-top-package.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 14:50:47 +02:00
archvillainette 945204ce50 feat(topdata): anchor autogen lock identity on model path with cutover remap
Lock identity for accessory VFX rows is now the model source path
(dataset:group/subgroup/file.mdl) rather than the config-derived
presentation key. Config-only edits (key_format, delimiter, case,
strip_prefixes) no longer reshuffle row IDs.

Adds: accessoryVisualeffectLockKey, hasKey helper, stale pruning loop
(managed keys with no live entry are freed), and one-time cutover remap
(old config-derived key in historical lock → new model-path key, with
the old key pruned). autogenConsumerManagedLockKeyMatcher is now
config-independent (dataset prefix + first path segment ∈ policy groups).

Updates autogen_manifest_file_test.go and topdata_test.go lock-key
assertions to match the new model-path scheme.
2026-06-21 14:43:38 +02:00
archvillainette 62bc152edc feat(topdata): resolve accessory VFX from cdn_channel inside Crucible 2026-06-21 14:35:19 +02:00
archvillainette f6e2110518 feat(project): add cdn_channel AutogenSourceConfig + validation 2026-06-21 14:30:16 +02:00
archvillainette 77603af9bb spec 2026-06-21 13:13:16 +02:00