Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1779 commits
Select commit Hold shift + click to select a range
f0a3057
docs(readiness): MOD-295 record the SDK state-validation route and th…
Krilliac Sep 30, 2026
71da3f7
wip(SEC-120): RTS snapshot target and policy registrations
Krilliac Sep 30, 2026
99248e7
test(modding): pin the SEC3Gameplay family to its per-platform count
Krilliac Sep 30, 2026
e242835
feat(rhi): RHI-230 Linux tone-mapping post pass on OpenGL and Vulkan
Krilliac Sep 30, 2026
2d2766a
fix(governance): SBOM reconcile keeps working with GOV-400 font rules…
Krilliac Sep 30, 2026
5873b1b
fix(SEC-120): decode subnormal character stats; pin RTS corpus bytes
Krilliac Sep 30, 2026
fdb64ce
chore(supply-chain): re-pin ThirdParty/Licenses after the embedded-fo…
Krilliac Sep 30, 2026
e4367c0
fix(sdk): MOD-295 keep state rules a module adds before the host dete…
Krilliac Sep 30, 2026
c6320e3
refactor(rhi): keep the Linux tone-mapping pass setup beside the pass…
Krilliac Sep 30, 2026
5c95219
docs: regenerate generated indexes and counts after merging the 16 Co…
Krilliac Sep 30, 2026
0d3fb10
chore(SEC-120): record the fuzz batch in the tidy budget and inventories
Krilliac Sep 30, 2026
651919a
chore(buildmatrix): regenerate the inventory for the SEC3Gameplay cou…
Krilliac Sep 30, 2026
32550f2
fix(SEC-120): build the RTS fuzz target; split the MMO persistence ro…
Krilliac Sep 30, 2026
9c6fb6c
merge: PR head d07f26191 (Wave 8 bld100-gov400 notice-gate hardening)…
Krilliac Sep 30, 2026
ec21fa5
merge: r3/gov400-fonts (GOV-400 embedded fonts; merged with the Wave …
Krilliac Sep 30, 2026
ac59895
fix(SEC-120): link the RTS snapshot fuzz target without the live systems
Krilliac Sep 30, 2026
2b30397
fix(rhi): include LogMacros where the Linux tone-mapping pass logs
Krilliac Sep 30, 2026
c6e2660
chore(SEC-120): lower the RTS tidy budget entries the validator move …
Krilliac Sep 30, 2026
a8ae026
test(modules): MOD-295 give the SparkGame host test contexts the SDK …
Krilliac Sep 30, 2026
76f3f25
docs(SEC-120): record the save, store and daemon state fuzz targets
Krilliac Sep 30, 2026
bba11b2
docs(readiness): RHI-230 notes for the Linux Vulkan forward and tone-…
Krilliac Sep 30, 2026
ad21a88
merge: r3/tf120-travel (reviewed round-3 item)
Krilliac Sep 30, 2026
6c994e5
merge: r3/mod-json-swap-race (reviewed round-3 item)
Krilliac Sep 30, 2026
17233a0
fix(ci): explicit unsigned long for DWORD format arguments; lock the …
Krilliac Sep 30, 2026
d12efb6
fix(modules): MOD-295 keep the SparkGame OnLoad line LinuxSDLConsoleB…
Krilliac Sep 30, 2026
7fd417b
docs(SEC-120): record the rerun campaign counts for the six batch tar…
Krilliac Sep 30, 2026
990f839
fix(governance): GOV-400 closed-world rule covers macOS game-module d…
Krilliac Sep 30, 2026
ad91e0c
test(net-100): wait for every flood reject instead of one non-blockin…
Krilliac Sep 30, 2026
a907560
fix(ci): CI-110 split documented commands on shell operators outside …
Krilliac Sep 30, 2026
22deb0b
fix(build): declare SEC-120 fuzz-replay targets literally so the buil…
Krilliac Sep 30, 2026
b26581e
merge: ci5-win (CI fixes for the 5c9521923 hosted run: documented-com…
Krilliac Sep 30, 2026
f951ba3
fix(fuzz): SEC-120 track the TF-120 terrain parser move to TFTerrainM…
Krilliac Sep 30, 2026
1857b60
fix(SEC-120): pin the SEC2 persistence family at 14 tests
Krilliac Sep 30, 2026
7e677b4
perf(docs): read a bounded file one byte past its size, not maximum + 1
Krilliac Sep 30, 2026
7fab018
merge: ci5-mac (macOS dylib notice rule, flood-reject wait, bounded d…
Krilliac Sep 30, 2026
82d0749
chore(sec120): regenerate the fuzz-policy evidence for the three MOD-…
Krilliac Sep 30, 2026
304e07a
fix(ci): give docs-health 25 minutes; a slow runner cancelled it at 1…
Krilliac Sep 30, 2026
115b83c
docs: regenerate the symbol indexes so no source line anchor points p…
Krilliac Sep 30, 2026
6194bc5
merge: r3/rhi230-vulkan-passes (Linux tone-mapping pass on OpenGL and…
Krilliac Oct 1, 2026
5af0682
test(ci): generate the site runtime bundle once and run its Node file…
Krilliac Oct 1, 2026
4902620
fix(ci): keep CTest progress when a documented selection times out
Krilliac Oct 1, 2026
ca5339a
perf(security): cut PBKDF2 cost under sanitizers without changing the…
Krilliac Oct 1, 2026
dc11e33
perf(physics): resolve the context body interface once per step, not …
Krilliac Oct 1, 2026
1d3f995
fix(sdk): MOD-295 Shutdown drops rules added before start; document p…
Krilliac Oct 1, 2026
51fd72a
perf(rts): flat loops for the per-tick fog clear and fog-grid state hash
Krilliac Oct 1, 2026
8eeb141
merge: r3/mod295-prototype-infra (SDK v9 state-validation route; part…
Krilliac Oct 1, 2026
f7bdd42
fix(tf120): fail the terrain load on a non-finite or malformed tf* value
Krilliac Oct 1, 2026
5713dfc
fix(SEC-120): keep apostrophe names readable; refuse a journal the re…
Krilliac Oct 1, 2026
25b1171
merge: r3/sec120-fuzz-batch (six production fuzz targets; Codex-revie…
Krilliac Oct 1, 2026
f7bddd7
ci(asan): link the ASan lane's executables non-PIE
Krilliac Oct 1, 2026
57a52db
perf(physics): read back every body's post-step pose under one multi-…
Krilliac Oct 1, 2026
6050238
fix(test): bound the experimental module lifecycle run by wall time, …
Krilliac Oct 1, 2026
57c006f
merge: ci5-linux (CI-110 unit selection, sanitizer/coverage runtime, …
Krilliac Oct 1, 2026
f85a781
fix(test): restore the BoundModuleLogIsNullSafe closing brace lost in…
Krilliac Oct 1, 2026
bcfd644
feat(readiness): RDY-000 numeric-claim check covers wiki and status p…
Krilliac Oct 1, 2026
af33cdb
merge: s2/rdy000-claims (RDY-000 wiki and status claim coverage)
Krilliac Oct 1, 2026
079b991
docs: regenerate generated indexes and counts after the round-3 and C…
Krilliac Oct 1, 2026
9d8445f
fix(ci): initialise the ImGui submodule in the wiki workflow's Tools-…
Krilliac Oct 1, 2026
026d84a
feat(BLD-100): prove MSVC switch tables and resolve Shipping ISA resi…
Krilliac Oct 1, 2026
a9a9998
build(BLD-100): re-apply enforced Windows Shipping PE ISA scans
Krilliac Oct 1, 2026
8a06bb1
test(BLD-100): account for the ISA step in the build-matrix parity ch…
Krilliac Oct 1, 2026
642c6a9
docs(BLD-100): record resolved Shipping ISA residuals and remaining gaps
Krilliac Oct 1, 2026
1ea4d89
fix(SEC-120): split five untrusted readers into their own units; fix …
Krilliac Oct 1, 2026
f6538a2
test(SEC-120): fuzz eight more production parsers (58 of 137 fuzzed)
Krilliac Oct 1, 2026
b36e8be
fix(governance): GOV-400 embedded-font scan covers the whole-program-…
Krilliac Oct 1, 2026
4f9d112
fix(ops-100): never hand DbgHelp the caller's exception context
Krilliac Oct 1, 2026
67d5b79
ci(ci-110): TSan 120 min / 3000 s and Coverage 60 min budgets (OD-29)
Krilliac Oct 1, 2026
e072805
merge: s2/crashdump-hosted (never hand DbgHelp the caller's exception…
Krilliac Oct 1, 2026
a7b6222
fix(tidy): brace the statements the CI-fix and SEC-120 merges added; …
Krilliac Oct 1, 2026
047deed
fix(SEC-120): read VFS files through the opened handle, not the check…
Krilliac Oct 1, 2026
d227e0e
ci(analysis): print each NEW finding's line and message
Krilliac Oct 1, 2026
f0347d5
merge: s2/sec120-batch2 (eight more production fuzz targets, three de…
Krilliac Oct 1, 2026
3f7c3df
fix(test): write CrashArtifactSandboxProbe output through std::format…
Krilliac Oct 1, 2026
d37894a
fix(perf): NullRHI soak leak slope is Theil-Sen, not least squares
Krilliac Oct 1, 2026
c505aa8
fix(test): format the probe's filesystem paths through wstring()
Krilliac Oct 1, 2026
5160c60
fix(BLD-100): harden the ISA scanner against the independent review
Krilliac Oct 1, 2026
6a95b68
docs: regenerate generated indexes and counts after the round-3 and C…
Krilliac Oct 1, 2026
d3bf23d
fix(BLD-100): pin toolset provenance and resolve computed control flow
Krilliac Oct 1, 2026
8c84864
ci(ci100): controlled-failure rehearsal — patches, driver, evidence s…
Krilliac Oct 1, 2026
5bf82d6
docs(BLD-100): scope the ISA scan claim to first-party images with bu…
Krilliac Oct 1, 2026
5d3888a
merge: s2/bld100-isa (BLD-100 Windows Shipping ISA scan re-enforced; …
Krilliac Oct 1, 2026
b4c97f7
fix(test): let the oversized-blob test lift the sanitizer file cap; j…
Krilliac Oct 1, 2026
4dd5aaf
docs: regenerate generated indexes and counts after the round-3 and C…
Krilliac Oct 1, 2026
0cec6e3
feat(tf-110): advisory terrafront-multiclient job, forged-fire and fr…
Krilliac Oct 1, 2026
7b9da96
fix(tf-110): fail-closed selection pins for the terrafront job; parit…
Krilliac Oct 1, 2026
d999ac6
feat(net-100): SHA-256 and HMAC-SHA256 for PasswordHash and Terrafron…
Krilliac Oct 1, 2026
5a12a38
feat(inst-130): transactional SparkInstaller updates with staged buil…
Krilliac Oct 1, 2026
123d22a
feat(save-230,sdk-240,ops-100): migration/rollback/interruption/diagn…
Krilliac Oct 1, 2026
bd6c78d
feat(readiness): site-data contract, docs-currentness and module-evid…
Krilliac Oct 1, 2026
30f0a31
feat(sec-120): fatal UBSan in every fuzz smoke, strict build bindings…
Krilliac Oct 1, 2026
3d466f0
feat(release): release tooling hardening from the P0 audit
Krilliac Oct 1, 2026
12b030a
feat(ci-100): MinGW/Wine CPU-rendering path for GPU-less servers and …
Krilliac Oct 1, 2026
4c705da
fix(site-data): track workflow_ownership.py under tools/, not Tools/
Krilliac Oct 1, 2026
69d82d3
feat(SEC-110): every raw CI/script download must match a reviewed URL…
Krilliac Oct 1, 2026
d80ee55
feat(BLD-100): below-floor startup refusal runs under Intel SDE in bo…
Krilliac Oct 1, 2026
1d18163
Merge branch 's4/supply-chain' into s4/bld100-sde
Krilliac Oct 1, 2026
5d24220
fix(CI-100): rehearsal driver attributes each failure to its own PR r…
Krilliac Oct 1, 2026
9776742
feat(packaging): Windows MSI qualification drills, package runtime pr…
Krilliac Oct 1, 2026
991b4ac
feat(SEC-120): editor fuzz batch 3 - eight production editor readers …
Krilliac Oct 1, 2026
a803e92
feat(DOC-400): site-data publication status is bound to exact CI evid…
Krilliac Oct 1, 2026
662a8e1
fix(site-data): a rejected bundle rejects the refresh under a blocked…
Krilliac Oct 1, 2026
fc39cb7
fix(mingw): the toolchain's ABI probe preprocesses /dev/null, not CMa…
Krilliac Oct 1, 2026
a66e492
feat(SEC-120): engine fuzz batch 3 - eight engine and tool parsers un…
Krilliac Oct 1, 2026
82936cf
feat(RHI-210): D3D11 golden capture plans for primary, pass, frame, s…
Krilliac Oct 1, 2026
f6f4590
fix(test): RHI-210 live-object count builds under MinGW
Krilliac Oct 1, 2026
5643291
fix(supply-chain): submodule-link tests pass on Windows; absolute tar…
Krilliac Oct 1, 2026
ac6c58b
docs(skill): GPU-less MinGW + Wine CPU-render recipe for the engine a…
Krilliac Oct 1, 2026
7d78ea1
merge: claude/fix-supply-chain-symlink-windows (supply-chain symlink …
Krilliac Oct 1, 2026
eb182fc
merge: s4/bld100-sde (BLD-100[3] SDE below-floor refusal in both requ…
Krilliac Oct 1, 2026
93c9fcf
merge: s4/crypto-libsodium (SEC crypto on libsodium primitives)
Krilliac Oct 1, 2026
814d798
merge: s4/installer-transactional (transactional installer)
Krilliac Oct 1, 2026
8bce74f
merge: s4/release-tooling (release tooling)
Krilliac Oct 1, 2026
e47f7ae
merge: s4/fuzz-infra (fuzz infrastructure)
Krilliac Oct 1, 2026
5b072b3
merge: s4/engine-evidence-a (engine evidence lane A)
Krilliac Oct 1, 2026
cbd31ff
merge: s4/sitedata-contract (site-data contract, docs-currentness and…
Krilliac Oct 1, 2026
5703658
merge: s4/site-publish (DOC-400 publication status bound to exact CI …
Krilliac Oct 1, 2026
60d16cb
fix(test): installer-ownership mutation expects the detached-owner di…
Krilliac Oct 1, 2026
1f5cdea
merge: s3/ci100-controlled-failure (CI-100 controlled-failure rehears…
Krilliac Oct 1, 2026
839a42e
merge: s4/terrafront-ci (TF advisory multiclient CI job)
Krilliac Oct 1, 2026
b5bce6f
merge: s4/windows-package (Windows MSI qualification drills and packa…
Krilliac Oct 1, 2026
4f1bcb4
merge: s4/mingw-wine (CI-100[2] MinGW/Wine CPU-rendering path, OD-30)
Krilliac Oct 1, 2026
9994f9f
merge: s3/windows-certification (RHI-210 D3D11 golden capture plans)
Krilliac Oct 1, 2026
42f6dc1
merge: s3/sec120-editor (SEC-120 editor fuzz batch 3)
Krilliac Oct 1, 2026
33d508e
merge: s3/sec120-engine (SEC-120 engine fuzz batch 3)
Krilliac Oct 1, 2026
aa3f2d5
fix(supply-chain): MinGW/Wine downloads pass the raw-download gate; D…
Krilliac Oct 1, 2026
2e6a783
fix(test): module-evidence B37/B38 restore the shared fixture they ex…
Krilliac Oct 1, 2026
ea3c647
chore(security): owned fixture exception for the Terrafront CI test c…
Krilliac Oct 1, 2026
c909ca0
fix(ci): aggregate job verifies TSan evidence against the 3000 s proc…
Krilliac Oct 1, 2026
3f7f0f5
fix(BLD-100): the ISA scan CTest is a static check, not a behavioural…
Krilliac Oct 1, 2026
1637a64
fix(test): the embedded-NUL launcher test really puts a NUL in the ma…
Krilliac Oct 1, 2026
8e56a5f
feat(ENG-200/LIFE-200): engine-owned script runtime, launcher headles…
Krilliac Oct 1, 2026
8b9a253
ci(coverage): 75-minute job budget (owner decision, OD-29 amended)
Krilliac Oct 1, 2026
e837287
merge: s4/engine-evidence-b (ENG-200/LIFE-200 engine-owned script run…
Krilliac Oct 1, 2026
8793127
docs: regenerate generated indexes and counts after the round-4 lane …
Krilliac Oct 1, 2026
fd06c50
fix(release): release_package_reconciliation.py lives under tools/, a…
Krilliac Oct 1, 2026
b566cbd
fix(installer): the claims checker follows the sibling-build update s…
Krilliac Oct 1, 2026
43b61ba
fix(test): RHI-210 golden tests include the manifest header they use
Krilliac Oct 1, 2026
e357261
fix(test): the installed-SDK consumer installs runtime with sdk and t…
Krilliac Oct 1, 2026
791eb06
chore(supply-chain): DXVK 2.5.3 pin confirmed by the first download
Krilliac Oct 1, 2026
93a3974
fix(asset-pipeline): cook error messages never throw on a non-ANSI path
Krilliac Oct 1, 2026
ec8b9b4
docs: regenerate generated indexes and counts after the integration f…
Krilliac Oct 1, 2026
7ed9f10
fix(graphics): GPUTimestampQuery never abandons an unread disjoint query
Krilliac Oct 1, 2026
55ace82
fix(test): device-loss tests reload the mesh after recovery, as the c…
Krilliac Oct 1, 2026
acbe96b
test(RHI-210): register the pending frame/FPS/world/primary goldens D…
Krilliac Oct 1, 2026
69f60e8
fix(SEC-120): the editor scene JSON fuzz harness compiles again
Krilliac Oct 1, 2026
c78e358
fix(supply-chain): the GitHub API exemption checks where $api_url points
Krilliac Oct 1, 2026
fe930d7
fix(ui): the one-way template binding no longer collides with UIFacto…
Krilliac Oct 1, 2026
0bae942
fix(BLD-100): the ISA scan proves Release/LTCG images and finishes wi…
Krilliac Oct 1, 2026
ed0fd6e
fix(launcher): template manifests are parsed, not scanned for the fir…
Krilliac Oct 1, 2026
544c339
fix(SEC-120): batch-3 fuzz targets that parse JSON link the logger
Krilliac Oct 1, 2026
0955769
fix(cmake): ImGui consumers skip cleanly when a build has no SDL2
Krilliac Oct 1, 2026
e10a2c2
fix(test): classify the ENG-200 audio skips the skip-reason policy re…
Krilliac Oct 1, 2026
17c8c8d
perf(site-data): validation walks the document tree once per catalog,…
Krilliac Oct 1, 2026
939f393
fix(SEC-120): shallow engine checkouts skip only the fix-commit histo…
Krilliac Oct 1, 2026
0a0553d
fix(ci): update DXVK smoke and VisualScript startup expectation
Krilliac Oct 2, 2026
b656f43
fix(ci): refresh exact inventory and test fixture contracts
Krilliac Oct 2, 2026
bc9a9a0
test(ci): align nightly evidence and Windows cleanup fixtures
Krilliac Oct 2, 2026
4e19349
fix(gameplay): own rules-file cleanup with shared scope guard
Krilliac Oct 2, 2026
0d2d430
docs(gameplay): ratchet measured event-response tidy counts
Krilliac Oct 2, 2026
a443249
fix(crash): keep Linux fatal reports on the bounded signal path
Krilliac Oct 2, 2026
58f8d08
ci: add isolated signal-ci diagnostic qualification
Krilliac Oct 2, 2026
371a499
integration: combine qualified fixes and require SDK runtime evidence
Krilliac Oct 2, 2026
766076d
ci: bound diagnostics and preserve qualification contracts
Krilliac Oct 2, 2026
487a09e
ci: qualify reliability fixes without native rebuilds
Krilliac Oct 2, 2026
858978d
fix: preserve Primary control assertion evidence and dependencies
Krilliac Oct 2, 2026
cd08a3b
ci: qualify exact Primary native captures within existing limits
Krilliac Oct 3, 2026
42db0cf
ci: keep diagnostic cache save and restore keys consistent
Krilliac Oct 3, 2026
f92d280
test: add final installed-host ABI rejection driver
Krilliac Oct 3, 2026
643d3e8
ci: qualify exact installed MinSizeRel SDK and package boundaries
Krilliac Oct 3, 2026
45034e4
ci: contain qualification processes within existing deadlines
Krilliac Oct 3, 2026
2b14035
test: generate the requested installed SDK consumer configuration
Krilliac Oct 3, 2026
616a271
ci: qualify corrected MinSizeRel SDK consumer source
Krilliac Oct 3, 2026
388c125
test: hand atomic save interruption tests to their dedicated lane
Krilliac Oct 3, 2026
d90b86e
ci: reconcile readiness candidate and complete Windows evidence
Krilliac Oct 3, 2026
3a298fc
ci: pin combined Windows qualification to reconciled product
Krilliac Oct 3, 2026
3f46432
ci: diagnose pinned SDE extraction with bounded Python stream
Krilliac Oct 3, 2026
c5a879f
test: bind each arena observation before Release qualification
Krilliac Oct 3, 2026
b9162eb
ci: pin full Release qualification to reconciled arena source
Krilliac Oct 3, 2026
0a77b06
ci: preserve qualified product for Release continuation
Krilliac Oct 3, 2026
73e5eca
ci: collect bounded evidence for isolated ISA scan failure
Krilliac Oct 3, 2026
6d3d5c8
fix: exclude unreachable data branches from ISA bootstrap proof
Krilliac Oct 3, 2026
4678928
test: retain complete proof and improve opt-in crash diagnostics
Krilliac Oct 3, 2026
89d1b90
ci: qualify corrected Release with bounded complete CPU evidence
Krilliac Oct 3, 2026
229ca13
feat: load editor startup scenes in FPS and expose save controls
Krilliac Oct 3, 2026
56afb9d
docs: include newly tracked FPS lineage source in generated indexes
Krilliac Oct 3, 2026
9f16a18
ci: qualify installed editor FPS lineage on pinned product
Krilliac Oct 3, 2026
1ea9f14
fix: keep runtime source pin out of configure cache
Krilliac Oct 3, 2026
7962de0
feat: expose weather and state validation through public SDK services
Krilliac Oct 3, 2026
5118cf1
feat: verify FPS persistence input and preserve authored spawn points
Krilliac Oct 3, 2026
25548f7
fix: disambiguate reflected scene JSON array indices
Krilliac Oct 3, 2026
0a26782
ci: qualify pinned ABI10 weather and owned FPS input
Krilliac Oct 3, 2026
db5398d
fix(ci): unblock installed native qualification and readiness validation
Krilliac Oct 4, 2026
8d5e1d1
style(test): satisfy mainline formatting for installed FPS lineage
Krilliac Oct 4, 2026
d12c435
ci: qualify the repaired installed ABI10 candidate
Krilliac Oct 4, 2026
fe68814
fix(fps): reject active weather calls off the game thread
Krilliac Oct 4, 2026
7696a2f
ci: pin weather qualification to the thread-policy repair
Krilliac Oct 4, 2026
8d99cd9
fix(ci): stream the pinned SDE archive in Windows Release
Krilliac Oct 4, 2026
c69267a
fix(ci): classify reflected gameplay scene input under SEC-120
Krilliac Oct 4, 2026
a41cb37
fix(test): serialize the owned save receipt with the vendored JSON API
Krilliac Oct 4, 2026
a2ed0cb
fix(test): rebuild reflected scene fixtures with the vendored JSON API
Krilliac Oct 4, 2026
8ef2f4c
ci: qualify the vendored JSON test compatibility repairs
Krilliac Oct 4, 2026
cc20077
fix(test): use an explicit JSON byte-count type on macOS
Krilliac Oct 4, 2026
33ca7da
ci: pin installed qualification to the portable receipt repair
Krilliac Oct 4, 2026
7361ee4
fix(ci): bind Windows CTest tool case aliases by physical identity
Krilliac Oct 4, 2026
38dd8e4
Fix runtime and cross-platform qualification blockers
Krilliac Oct 4, 2026
d1b920e
ci: qualify the corrected runtime and platform candidate
Krilliac Oct 4, 2026
89e1910
ci: initialize pinned crypto sources for Wiki tooling tests
Krilliac Oct 4, 2026
5e8523f
ci: bind installed qualification to complete source dependencies
Krilliac Oct 4, 2026
356401e
fix: close release qualification blockers
Krilliac Oct 4, 2026
30ad35f
ci: qualify final release candidate
Krilliac Oct 4, 2026
4231360
docs: refresh module source inventory
Krilliac Oct 4, 2026
ced069f
ci: qualify refreshed module inventory
Krilliac Oct 4, 2026
69fb222
docs: refresh fuzz policy source census
Krilliac Oct 5, 2026
14e9878
ci: qualify refreshed fuzz policy evidence
Krilliac Oct 5, 2026
002e29b
test: isolate parallel asset fixtures
Krilliac Oct 5, 2026
6a163ab
ci: qualify isolated asset fixtures
Krilliac Oct 5, 2026
9a928fe
docs: refresh release indexes
Krilliac Oct 5, 2026
3ddff57
fix: recover editor and Windows input qualification repairs
Krilliac Oct 5, 2026
a480893
fix(docs): preserve tracked casing in Windows snapshot checks
Krilliac Oct 5, 2026
873f62b
ci: qualify reconstructed Windows readiness product
Krilliac Oct 5, 2026
b53332c
fix(build): enforce Windows CPU floor with compiler target identity
Krilliac Oct 5, 2026
a518090
ci: qualify Windows CPU floor repairs at exact product revision
Krilliac Oct 5, 2026
4980f8e
fix(editor): apply declared panel sizes on first use
Krilliac Oct 5, 2026
361779d
ci: qualify first-use editor panel repair at exact product revision
Krilliac Oct 5, 2026
029b332
fix(console): emit prompts only when awaiting a command
Krilliac Oct 5, 2026
98f2454
ci: qualify console prompt repair at exact product revision
Krilliac Oct 5, 2026
1ca34d7
fix(installer): preserve per-user scope in native MSI commands
Krilliac Oct 5, 2026
b166a34
ci: qualify per-user MSI and console repairs
Krilliac Oct 5, 2026
3c2c9d2
style(console): align pipe prompt helper declarations
Krilliac Oct 5, 2026
cf36420
fix(editor): save first materials with native paths and checked writes
Krilliac Oct 5, 2026
d51d3bc
ci: qualify material persistence repair
Krilliac Oct 5, 2026
ab21c16
fix: restore readiness tests and editor exit status
Krilliac Oct 6, 2026
938eb6f
ci: qualify restored readiness product revision
Krilliac Oct 6, 2026
a81c1ab
ci: preserve isolated sequential determinism checks
Krilliac Oct 6, 2026
75f6449
ci: bind sequential readiness qualification revision
Krilliac Oct 6, 2026
40b4423
ci: declare CMake download and refresh matrix inventory
Krilliac Oct 6, 2026
b0b2f4f
ci: bind declared-tool qualification revision
Krilliac Oct 6, 2026
8ac9f7a
fix(editor): preserve authored material values on reopen
Krilliac Oct 6, 2026
5c228b2
ci: bind material reload qualification revision
Krilliac Oct 6, 2026
3e4c296
fix(editor): route and fuzz material asset loading
Krilliac Oct 6, 2026
ca2b3eb
ci: bind material dispatch qualification revision
Krilliac Oct 6, 2026
3d0f72d
test: include editor material fuzz target in policy inventory
Krilliac Oct 6, 2026
146d317
ci: canonicalize Shipping repro build paths
Krilliac Oct 6, 2026
dc7628c
ci: remove Shipping drive alias reliably in Git Bash
Krilliac Oct 6, 2026
6707de6
ci: stage Shipping checkouts at one real build path
Krilliac Oct 6, 2026
cbe6527
test: use source roots and ephemeral network ports
Krilliac Oct 6, 2026
7a07294
fix(editor): keep material size arithmetic wide
Krilliac Oct 6, 2026
eea5484
ci: bind parser revision and restore TSan validation
Krilliac Oct 6, 2026
aed904c
ci: preserve Windows test coverage and writable MSI transform staging
Krilliac Oct 6, 2026
1a8dfbd
ci: refresh build matrix inventory after test lane split
Krilliac Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
6 changes: 0 additions & 6 deletions .bloat-baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ GameModules/SparkGameFPS/Source/Game/HUDSystem.h
GameModules/SparkGameFPS/Source/Game/InteractiveObject.cpp
GameModules/SparkGameFPS/Source/Game/InteractiveObject.h
GameModules/SparkGameFPS/Source/Game/InventorySystem.h
GameModules/SparkGameFPS/Source/Game/MultiplayerSystem.cpp
GameModules/SparkGameFPS/Source/Game/MultiplayerSystem.h
GameModules/SparkGameFPS/Source/Game/Player.cpp
GameModules/SparkGameFPS/Source/Game/Player.h
Expand Down Expand Up @@ -49,8 +48,6 @@ SparkEditor/Source/AssetPipeline/AssetProcessors.cpp
SparkEditor/Source/CommandHistory.h
SparkEditor/Source/Communication/CollaborativeEditSession.cpp
SparkEditor/Source/Communication/CollaborativeEditSession.h
SparkEditor/Source/Communication/EngineInterface.cpp
SparkEditor/Source/Communication/EngineInterface.h
SparkEditor/Source/Core/EditorCrashHandler.cpp
SparkEditor/Source/Core/EditorLayoutManager.cpp
SparkEditor/Source/Core/EditorLogger.h
Expand Down Expand Up @@ -237,7 +234,6 @@ SparkEngine/Source/Graphics/FastNoiseLite.h
SparkEngine/Source/Graphics/FoliageImpostorBaker.h
SparkEngine/Source/Graphics/FoliageRenderer.h
SparkEngine/Source/Graphics/FrustumCulling.h
SparkEngine/Source/Graphics/GLTFStaticMeshLoader.cpp
SparkEngine/Source/Graphics/GPUDebugMarkers.h
SparkEngine/Source/Graphics/GPUSceneBuffer.h
SparkEngine/Source/Graphics/GPUTimestampQuery.h
Expand Down Expand Up @@ -283,7 +279,6 @@ SparkEngine/Source/Graphics/RenderGraph/RenderGraphBuilder.h
SparkEngine/Source/Graphics/RenderGraphTypes.h
SparkEngine/Source/Graphics/RenderTarget.h
SparkEngine/Source/Graphics/RenderTargetPool.h
SparkEngine/Source/Graphics/SVGRenderer.h
SparkEngine/Source/Graphics/ScreenCapture.h
SparkEngine/Source/Graphics/ScreenSpaceEffects.h
SparkEngine/Source/Graphics/Shader.h
Expand Down Expand Up @@ -325,7 +320,6 @@ SparkEngine/Source/Utils/ConfigParser.h
SparkEngine/Source/Utils/ConsoleVariable.h
SparkEngine/Source/Utils/CpuDebugger.h
SparkEngine/Source/Utils/CrashHandler.cpp
SparkEngine/Source/Utils/CrashReportUploader.cpp
SparkEngine/Source/Utils/DaemonFraming.h
SparkEngine/Source/Utils/DebugDraw.h
SparkEngine/Source/Utils/DebugHookManager.h
Expand Down
23 changes: 11 additions & 12 deletions .claude/skills/sparkengine-architecture-contract/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,12 @@ silent Release-only correctness bug.
**How to add a subsystem correctly:**
1. Add the owning `std::unique_ptr<T>` field to `EngineRuntime` (feature-gated
systems get an `#ifdef` guard like `physics`).
2. Create it on the startup path and register it with dependency-aware
registration:
`ctx.RegisterSubsystem<T>(ptr, DependsOn<Dep1, Dep2>{}, initFn, shutdownFn)`
so `InitializeAll()`/`ShutdownAll()` order it topologically. Follow the
existing wiring in `Core/EngineSetup.h` (e.g.
`RegisterSubsystem<Spark::UI::UISystem>(ui, DependsOn<Timer, Spark::EventBus>{})`).
Plain `RegisterSystem<T>(ptr)` is only for systems with no init/deps.
2. Create and initialize it in the `LifecycleCompositionRoot` stage that owns
its phase (`Core/Lifecycle/`), tear it down in that stage's `Shutdown()`,
and publish it with `ctx.RegisterSystem<T>(ptr)` (or the named setter);
null the registration before the owner is destroyed. `EngineContext` has
no init/shutdown ordering of its own (`InitializeAll`/`ShutdownAll` were
deleted by OD-01).
3. Never store the pointer in a file-scope global. Fetch via
`EngineContext::Get()->GetSystem<T>()` at the call site.
4. Wire its `Update()` into the real loop in the same change (Invariant 4).
Expand Down Expand Up @@ -307,9 +306,9 @@ CI.
## Quick self-check before committing an architecture-touching change

- [ ] No new `g_*` file-scope subsystem global (Invariant 1).
- [ ] New subsystem: owned in `EngineRuntime`, registered via
`RegisterSubsystem<T>(..., DependsOn<...>{}, ...)`, fetched via
`EngineContext::Get()` (Invariant 1).
- [ ] New subsystem: owned in `EngineRuntime`, created and torn down in a
`LifecycleCompositionRoot` stage, published via `RegisterSystem<T>` /
named setter, fetched via `EngineContext::Get()` (Invariant 1).
- [ ] Did not add `const` to `GetTypeId<T>()`'s `static char id` (Invariant 1).
- [ ] Module-side access uses `EngineContext::Get()`; no new per-module
`static T instance;` singleton (Invariant 2).
Expand Down Expand Up @@ -346,8 +345,8 @@ one-liners (run from the repo root):
grep -n "unique_ptr\|GetEngineRuntime" SparkEngine/Source/Core/EngineRuntime.h
# Invariant 1 — type-id must stay non-const; registry lock
grep -n "static char id\|shared_mutex" SparkEngine/Source/Core/EngineContext.h
# Invariant 1 — dependency-aware registration in use
grep -n "RegisterSubsystem<" SparkEngine/Source/Core/EngineSetup.h | head
# Invariant 1 — lifecycle owned by EngineRuntime + LifecycleCompositionRoot stages
grep -rn "GetEngineRuntime\|RegisterSystem<" SparkEngine/Source/Core/Lifecycle | head
# Invariant 2 — Get() prefers injected pointer; export + host consumption
grep -n "g_injectedContext\|SetInjected" SparkEngine/Source/Core/EngineContext.cpp
grep -n "SparkModuleInjectEngineContext" SparkSDK/Include/Spark/ModuleDllMain.h SparkEngine/Source/Core/ModuleManager.cpp
Expand Down
18 changes: 13 additions & 5 deletions .claude/skills/sparkengine-build-ci-and-dependencies/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,11 +344,19 @@ Advisory (job-level `continue-on-error: true`; never block merges):
advisory, but configure/compile failures block). Canonical required-vs-advisory
fine print: `sparkengine-validation-and-qa` §10.

**Shipping symbols:** `windows-shipping` (MinSizeRel) links **without** `/DEBUG`, so it emits no PDB
and no PDB path, and `linux-shipping` links with `-s`. Runtime `SymFromAddr` symbolication and
post-mortem minidump analysis of a shipping build change accordingly, and `SparkCrashReporter`
output for a shipping build is address-only. The `SPARK_STRIP_DEBUG_SYMBOLS` compile definition was
removed (zero remaining source references) — external tooling keying on it must stop.
**Shipping symbols (BLD-100):** `STRIP_DEBUG_SYMBOLS=ON` keeps symbols out of the runtime
*package*, not out of the build. MSVC always links `/DEBUG` (`/PDBALTPATH:$<TARGET_PDB_FILE_NAME:...>` outside
Debug: the image records only the PDB name plus GUID/age; never the linker's `%_PDB%` macro, which
the Visual Studio generator escapes into a literal `%%%<name>.pdb%%%`). ELF images link `-Wl,--build-id=sha1`; with the
option on everything compiles `-g`; only `SPARK_SHIPPED_IMAGE_TARGETS` get
`cmake/SparkSplitDebugLink.cmake` as their per-target `LINKER_LAUNCHER`, which splits
`<image>.debug` off and strips the image at link time, before any `POST_BUILD` step. Every other
image (SparkTests, probes) links `-g0 -Wl,--strip-all` outside Debug, so no `.debug` is produced. PDBs and
`.debug` files install only into the `symbols` component (never in `CPACK_COMPONENTS_ALL`);
`tools/shipping_symbol_manifest.py` proves each staged image maps to exactly one symbol file. A new
installed image target must be added to `SPARK_SHIPPED_IMAGE_TARGETS` (root CMakeLists.txt) —
`ShippingManifest_SymbolManifestTool` fails otherwise. The `SPARK_STRIP_DEBUG_SYMBOLS` compile
definition was removed (zero remaining source references) — external tooling keying on it must stop.

**Windows installers are opt-in:** `SPARK_REQUIRE_WINDOWS_INSTALLERS` (set ON by `release.yml`)
makes the NSIS/WiX generators mandatory. Without it a developer `cpack` on Windows produces a ZIP
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,10 @@ Work-item schema (every field required by `validate.py`): `id`, `title`, `priori
`rationale`, `sourceContext`, `entryPoints`, `implementationScope`, `acceptanceCriteria`,
`commands`, `testSelectors`, `requiredCiJobs`, `performanceBudgets`,
`documentationUpdates`, `readinessChanges`, `websiteImpact`, `risks`, `outOfScope`,
`definitionOfDone`. Validation is fail-closed: every referenced path must exist unless
listed in `FUTURE_ACCEPTANCE_PATHS` inside `validate.py` (deliberate outputs of
unfinished items).
`definitionOfDone`. Validation is fail-closed: every `entryPoints`,
`documentationUpdates`, `sourceContext` and docs-catalog path must exist, for open and
done items alike. A planned output is referenced only after it lands; use
`plannedTestSelectors` / `plannedCiJobs` for tests and jobs that do not exist yet.

**`plannedCiJobs` / `plannedTestSelectors` — the honest way to reference something that does not
exist yet.** `requiredCiJobs` must name a job that really exists in `.github/workflows/`, and
Expand Down Expand Up @@ -214,8 +215,8 @@ Checklist per new/changed system:

- [ ] **Caller** — `Initialize()` invoked in the startup path (`SparkEngine.cpp` /
`EngineContext` / `EditorApplication`), not just defined.
- [ ] **Registration** — registered via `EngineContext` `RegisterSystem<T>()` /
`RegisterSubsystem<T>()`; panels in `EditorPanelFactory`; tests in `Tests/CMakeLists.txt`.
- [ ] **Registration** — published via `EngineContext` `RegisterSystem<T>()` / named
setter (owned in `EngineRuntime`, created in a `LifecycleCompositionRoot` stage); panels in `EditorPanelFactory`; tests in `Tests/CMakeLists.txt`.
- [ ] **Tick** — `Update()`/`ProcessCommands()` appears in the main loop.
- [ ] **Teardown** — shutdown/unload path is real. Clean module/resource teardown is
gate `G10` territory and tracked as open item `LIFE-200` — if your teardown is
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,16 +180,18 @@ thin wrapper over one `entt::registry`. `EntityID = entt::entity`
first, so the callback may safely enqueue new items (processed next flush)
and exceptions in the callback are caught and logged, not propagated.
`DeferredQueue` is **not thread-safe** — synchronize externally.
- Production examples: `LifecycleSystem` (death), `DecalSystem` (expiry),
`ProjectileSystem` (expiry) each keep a persistent member queue to avoid
per-frame heap allocation.

**Lifecycle events:** `LifecycleSystem` fires its `DeathCallback` once per
entity per `HealthComponent::isDead == true` detection; the callback (single
slot, last-set wins) is responsible for destroying the entity or clearing the
flag, otherwise it fires again next frame. Registration:
`lifecycleSys->SetDeathCallback(...)` via
`GetPhaseSystemManagerImpl().GetSystem("LifecycleSystem")`.
- Production examples: `DecalSystem` (expiry) and `ProjectileSystem` (expiry)
each keep a persistent member queue to avoid per-frame heap allocation.

**Lifecycle events:** `LifecycleSystem` has no death callback (one existed but
production never registered it, so it was removed). It only latches
`HealthComponent::deathProcessed` the first frame it sees `isDead == true`.
The death response and `Spark::EntityKilledEvent` belong to the gameplay system
that dealt the lethal damage (`AbilitySystem` publishes it for ability kills);
subscribe on the EventBus. Anything that revives an entity must clear both
flags: `HealthComponent::Revive()`, or `HealthComponent::SetHealth()` for an
authoritative write (snapshot, respawn); otherwise the next death is never
latched and `InvalidStateDetector` reports `deathProcessed=true but isDead=false`.

**Hierarchy:** `Transform.parent` (`entt::null` = root) + `children` vector.
Origin rebasing (§5) shifts **root transforms only**; children inherit.
Expand Down
27 changes: 17 additions & 10 deletions .claude/skills/sparkengine-editor-scenes-and-reflection/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ loader rejects the other's files cleanly.
| Code | `SparkEngine/Source/SceneManager/ReflectedSceneSerializer.{h,cpp}` (`Spark::SaveWorld/LoadWorld/SerializeWorld/DeserializeInto`) | `SparkEditor/Source/SceneSystem/SceneSerializer.{h,cpp}` + `JSONSceneSerializer.cpp` + `SceneComponentCodec.{h,cpp}` |
| Document type | live ECS `World` | `SparkEditor::SceneFile` |
| Top-level shape | `{"version": 1, "entities": [...]}` | `{"version": 2, "objects": [...], "components": [...], "environment": {...}, ...}` |
| Version gate | `"version": 1` is **written but not checked** on load; load only requires an `entities` array | `version` must appear **exactly once** and equal `SCENE_FILE_VERSION` (= 2) or the load fails closed |
| Version gate | `"version": 1` (or legacy `"sceneVersion": 1`, exactly one of them) must equal 1 **exactly**; no N-1 window, and any other value fails with a bare `false` and no versioned diagnostic (OD-03 gap tracked under SAVE-230) | `version` must appear **exactly once** and be 2 (N) or 1 (N-1, migrated in memory) or the load fails closed with a versioned error |
| Per-component schema | Fields serialized **as strings** via reflection (`TypeRegistry`/`ComponentFactory`); only fields with `serialized == true`; unknown component types are **skipped with a warning** | Non-marker components require `data: {"schema": 1, "fields": {...}}` where 1 = `SCENE_COMPONENT_SCHEMA_VERSION`; unknown types, wrong schema, or malformed payloads **reject the whole file** |
| Who uses it in the running editor | **File → Open / Save** (`EditorUI::OpenScene` / `EditorUI::SaveCurrentScene` in `SparkEditor/Source/Core/EditorUI.cpp`, "full-fidelity scene round-trip (C4)") | SceneFile-backed panels (legacy Hierarchy/Inspector fallback path, Physics2D/3D, Tilemap, PostProcessing panels, PrefabManager) and `SceneManager` |
| Tests | `Tests/TestReflectedScene.cpp`, `Tests/TestReflectedSceneEmissiveHierarchy.cpp` | `Tests/TestSceneSerializer.cpp`, `Tests/TestSceneSerializerReal.cpp` |
Expand Down Expand Up @@ -78,15 +78,22 @@ schema-design task, not a bug fix — do not delete the guards.

| Constant | Value | Where | Load behavior on mismatch |
|---|---|---|---|
| `SCENE_FILE_VERSION` | 2 | `SceneSystem/SceneFileTypes.h` | Exact match required, field must appear exactly once → whole-file rejection: "Scene file version is unsupported; legacy raw-memory scene payloads must be resaved by a trusted build" |
| `SCENE_FILE_VERSION` / `SCENE_FILE_OLDEST_READABLE_VERSION` | 2 / 1 | `SceneSystem/SceneFileTypes.h` | Field must appear exactly once and be 1 or 2 (v1 migrates in memory; raw v1 payloads fail closed) → otherwise whole-file rejection with a versioned error naming the window |
| `SCENE_COMPONENT_SCHEMA_VERSION` | 1 | `SceneSystem/SceneComponentCodec.h` | Per-component `data.schema` must equal 1, `data` must contain exactly `schema` + `fields` → whole-file rejection |
| Reflected-World `"version"` | 1 | `SceneManager/ReflectedSceneSerializer.cpp` (`root["version"] = 1`) | Written on save, **not validated on load** (only `entities` is required) — labeled `open`: a future v2 has no gate yet |
| Reflected-World `"version"` | 1 | `SceneManager/ReflectedSceneSerializer.cpp` (`root["version"] = 1`) | Written on save; load requires `version` (or legacy `sceneVersion`) == 1 exactly (`ReflectedSceneSerializer.cpp` `LoadWorld`/`ValidateStrictRecoveryDocument`) and rejects anything else with a bare `false` — `open`: no N-1 window or versioned diagnostic yet (SAVE-230) |
| `TypeInfo::version` (`SPARK_REFLECT_VERSION`) | per-type | `SparkEngine/Source/Core/Reflection.h` | Reflection schema version for save-file migration; migration mechanics belong to sparkengine-persistence-save-and-migrations |

There is **no scene migration path**: `SceneSerializer::HandleVersionCompatibility`
rejects any `fileVersion != 2` with a warning; it never upgrades. Old files must be
resaved by a build that wrote them. (Verified: `TestSceneSerializerReal.cpp` feeds
`{"version":3}` and a header with `SCENE_FILE_VERSION + 1` and expects rejection.)
**Scene migration window (OD-03): read v2 (N) and v1 (N-1), write v2.**
`SceneSerializer::HandleVersionCompatibility` accepts
`SCENE_FILE_OLDEST_READABLE_VERSION..SCENE_FILE_VERSION` (1..2), upgrades a v1 document
in memory (header, objects, hierarchy, marker components, environment, camera, asset
references) and adds a "migrated in memory" warning; the file is untouched until saved.
A v1 component carrying a raw object-image `data` hex string (or any non-marker v1
component) fails closed: "Scene file version 1 component <Type> carries a raw
object-image payload that cannot be migrated to version 2". Any other version fails
with "Scene file version X is unsupported: this build reads scene versions 1-2 and
writes version 2; ...". Fixtures: `Tests/Fixtures/Compatibility/SceneFile/` (real v1
writer output); tests: `SceneMigration_*` (CTest `SparkSceneCompatibilityTests`).

### Dialect B hardening behaviors (all verified in `JSONSceneSerializer.cpp`)

Expand Down Expand Up @@ -213,7 +220,7 @@ conditional visibility.

| Symptom | Cause / where to look |
|---|---|
| "Scene file version is unsupported; legacy raw-memory scene payloads must be resaved…" | Dialect B loader saw `version` ≠ 2, duplicated, or missing. No migration exists — resave from a trusted build. |
| "Scene file version X is unsupported: this build reads scene versions 1-2…" / "Scene file must declare exactly one \"version\" field" | Dialect B loader saw a version outside 1..2, or a duplicated/missing version. Newer: open with the newer build. Older: convert with an older build first. |
| "Scene component requires a registered schema-tagged data object" / "data schema is invalid" | Component `data` missing `{"schema":1,"fields":{}}` shape, or type has no codec (`HasSceneComponentPayloadCodec` in `SceneComponentCodec.cpp`). |
| "Marker-only scene component must not contain data" | `TRANSFORM`/`SPRITE_ANIMATOR` entry carries a `data` object — remove it. |
| File → Open fails, console: "Failed to open scene (Spark::LoadWorld)" | Wrong dialect (no `entities` array), unparseable JSON, or unreadable path. Current document is untouched by design. |
Expand All @@ -232,7 +239,7 @@ conditional visibility.
| Reflected-World round trip (transform, mesh, enums/masks, hierarchy) | Implemented + tested (`TestReflectedScene.cpp`, `TestReflectedSceneEmissiveHierarchy.cpp`, registered) + CI-enforced |
| Undo/redo stack, merge, saved-sequence dirty tracking | Implemented + tested (`TestUndoRedoManager.cpp`, `TestCommandHistory.cpp`, registered) + CI-enforced |
| SwapWorld history-clear ordering (UAF prevention) | Implemented; enforced by code structure + debugging-playbook check; no dedicated automated test found — treat as code-reviewed, not test-proven |
| Reflected-World load-time version gate | `open` — version written, never checked |
| Reflected-World load-time version gate | Exact-match gate (== 1) implemented; OD-03 N-1 window and versioned diagnostic `open` (SAVE-230) |
| World-backed Inspector undo support | `open` — edits bypass CommandHistory |
| Blocking unsaved-changes exit prompt | `open` — log-only today |
| `SparkEditor::SceneManager` (`SceneSystem/SceneManager.{h,cpp}`) | `candidate` — compiled but **no instantiation found anywhere** in editor/engine/tests (the `SceneManager` built in game modules is the engine class, a different type). Per the project's wire-in-or-delete rule, wire it or delete it before building on it. |
Expand Down Expand Up @@ -284,7 +291,7 @@ ls SparkEditor/Source/Gizmos
grep -n "SCENE_FILE_VERSION = " SparkEditor/Source/SceneSystem/SceneFileTypes.h
grep -n "SCENE_COMPONENT_SCHEMA_VERSION = " SparkEditor/Source/SceneSystem/SceneComponentCodec.h
# Fail-closed gates still in place
grep -n "version is unsupported" SparkEditor/Source/SceneSystem/JSONSceneSerializer.cpp
grep -n "is unsupported: " SparkEditor/Source/SceneSystem/SceneSerializer.cpp
grep -n "Refusing unsupported binary scene" SparkEditor/Source/SceneSystem/BinarySceneSerializer.cpp
# Reflected dialect still writes version 1 and requires "entities"
grep -n "root\[\"version\"\] = 1\|contains(\"entities\")" SparkEngine/Source/SceneManager/ReflectedSceneSerializer.cpp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ protection each of those steps really gives you.
- **Injection hook** — an `extern "C" __declspec(dllexport)` function the host resolves via
`GetProcAddress` right after `LoadLibrary` and calls to point the DLL's per-image globals at
host-owned objects. Windows-only (`#if defined(_WIN32)`).
- **SDK version** — `SPARK_SDK_VERSION` (currently **2**) in `SparkSDK/Include/Spark/Version.h`.
- **SDK version** — `SPARK_SDK_VERSION` (currently **5**) in `SparkSDK/Include/Spark/Version.h`.
An integer ABI stamp baked into each module at compile time via `ModuleInfo::sdkVersion`.
- **Game vs Addon** — `Spark::ModuleKind` in `SparkSDK/Include/Spark/IModule.h`. Exactly one
`Game` module per process (game modules own the simulation); `Addon` modules coexist freely.
Expand Down
Loading
Loading