- 2026-11-12 -- Removed:
AppInstaller's retiredlocation="temp"(core_utils/app_installer.py) andTempArtifacts' legacy flat-temp window (file_utils/temp_artifacts.py,core_utils/test_sandbox.py); fixed: every deprecation window is judged on the UTC date (core_utils/deprecation.pynewDeprecation.today).- The legacy flat-temp window is closed (opened 2026-10-13 for one release, its schedule test now due). A store no longer sweeps its prefix's leftovers flat in the system temp dir,
TestSandboxno longer sweeps old roots there, andTempArtifacts.containsreads the root alone: a path in the system temp dir outside the root is not the store's. location="temp"is gone (noticed 2026-10-13, due in 0.16.0; its 30-day window closed 2026-11-12). Pass"cache";"temp"now raisesValueErrorlike any unknown location. Nothing in the ecosystem passed it.- One day for every gate.
window_expireddefaulted to the machine's local date and CI judges in UTC, so between local and UTC midnightcheck_api_surface.py --checkin CI called this retirement overdue while the local--semvergate held it, and no tree could release.Deprecation.todayis the UTC date; the rule andcheck_api_surface.pyboth read it. - Test(s): red first, then green:
test_deprecation.pynewtest_the_window_is_judged_on_the_utc_date(AttributeErrorbefore);test_app_installer.pyloses the retired spelling's test;test_temp_artifacts.pylosesTestLegacyFlatSweep, andtest_contains_reads_the_root_aloneholds a flat temp entry outside;test_deprecation,test_app_installer,test_temp_artifacts,test_test_sandbox,test_material_record,test_script_run341 passed.
- The legacy flat-temp window is closed (opened 2026-10-13 for one release, its schedule test now due). A store no longer sweeps its prefix's leftovers flat in the system temp dir,
- 2026-11-11 -- Fixed: an export's report says why a scene record failed, and names LOD groups sharing a name (
core_utils/engines/scene_export/export_snapshot.pyExportSnapshot.assemble;file_utils/lod_chain.pyLodChain.record_groupsnewnote=).- A failed record says why. A producer's exception went to this module's log alone, so the export's report said only "materials (FAILED, left as stored)". It is noted now (
ctx.note, the exception's type and message), with the traceback kept at debug level. On a production scene the reason was one material's missing map. - LOD groups sharing a name are said. A reader binds the
lodsrecord by group name, so it binds none of two groups named alike; the record's producers now say so in the export's report. Unity's importer refused two such groups on a production delivery. - Test(s): red first, then green:
test_scene_records.pynewtest_a_failed_record_says_why_in_the_report;test_lod_chain.pynewtest_groups_sharing_a_name_are_said;test_scene_records,test_lod_chain,test_export_snapshot,test_glb_lods315 passed.
- A failed record says why. A producer's exception went to this module's log alone, so the export's report said only "materials (FAILED, left as stored)". It is noted now (