openhands
944527e078
Gitea Actions Runner Test / test-job (push) Successful in 1s
CI / check (push) Successful in 36s
CI / tests-integration (push) Successful in 1m58s
CI / tests-unit (push) Successful in 2m16s
CI / tests-ui (push) Successful in 3m8s
CI / preflight (push) Skipped
CI / deploy (push) Failing after 2m30s
feat(nitro-cleanup): dedupe FurnitureData and clean dangling figure entries
...
Add a gamedata cleanup to the Nitro Cleanup panel: a read-only preview
plus an apply run that dedupes FurnitureData classnames and removes
rows and figure entries that reference nothing.
Three passes run in a fixed order, because cleanFigureMap has to precede
cleanFigureData: dropping the part that points at a set is what makes
that set unreferenced.
A pass refuses to write when it would delete more than maxRemovals rows
(default 500) and reports the reason, a wrong asset directory otherwise
turns every row into an orphan and one call would empty the file. Passes
that would act on empty input (no libraries, no sets) treat that as a
missing file rather than as a reason to delete everything. Every write
copies the file to a timestamped backup first, so a pass that turns out
to be wrong can be undone by hand.
The plan reads FurnitureData once and hands the parsed copy to both
furniture passes; the file is tens of megabytes in a real deployment.
2026-09-27 17:14:30 +02:00
..
2026-09-17 21:02:57 +02:00
2026-09-25 18:26:45 +02:00
2026-07-13 21:57:41 +02:00
2026-09-13 19:24:43 +02:00
2026-09-27 17:14:30 +02:00
2026-09-13 19:24:43 +02:00
2026-09-27 17:13:52 +02:00
2026-08-25 22:26:05 +02:00
2026-09-11 00:36:55 +02:00
2026-09-13 19:24:43 +02:00
2026-09-21 18:37:39 +02:00
2026-07-26 20:28:11 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-08-02 11:46:43 +02:00
2026-07-26 20:28:11 +02:00
2026-08-30 21:31:34 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 20:08:19 +02:00
2026-09-21 18:37:39 +02:00
2026-09-20 12:29:01 +02:00
2026-09-21 18:37:39 +02:00
2026-09-06 17:25:04 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 21:14:10 +02:00
2026-09-21 18:37:39 +02:00
2026-09-06 17:17:30 +02:00
2026-09-22 22:22:51 +02:00
2026-09-23 13:03:19 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 19:24:43 +02:00
2026-09-25 19:47:10 +02:00
2026-09-25 19:47:10 +02:00
2026-09-25 18:42:23 +02:00
2026-09-25 18:42:23 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 19:36:15 +02:00
2026-09-09 19:36:15 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 00:36:55 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 18:33:45 +02:00
2026-07-18 20:31:18 +02:00
2026-09-17 15:26:25 +02:00
2026-09-21 18:37:39 +02:00
2026-08-01 15:07:54 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 19:53:09 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:55:33 +02:00
2026-09-25 18:55:33 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-21 18:37:39 +02:00
2026-08-02 14:22:05 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 23:28:22 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-22 22:22:51 +02:00
2026-09-22 22:22:51 +02:00
2026-09-22 22:22:51 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-08-29 20:54:06 +02:00
2026-09-22 23:31:41 +02:00
2026-09-22 23:27:15 +02:00
2026-09-22 22:22:51 +02:00
2026-09-22 22:22:51 +02:00
2026-09-06 17:55:11 +02:00
2026-09-21 18:37:39 +02:00
2026-09-06 17:55:11 +02:00
2026-09-23 14:45:35 +02:00
2026-09-23 15:06:16 +02:00
2026-09-23 15:06:16 +02:00
2026-09-24 18:08:18 +02:00
2026-09-24 18:08:18 +02:00
2026-09-23 15:06:16 +02:00
2026-09-23 15:06:16 +02:00
2026-09-23 15:06:16 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 19:24:43 +02:00
2026-09-21 18:37:39 +02:00
2026-07-31 14:11:03 +02:00
2026-09-17 21:02:57 +02:00
2026-09-22 23:27:15 +02:00
2026-09-24 19:19:22 +02:00
2026-09-24 19:19:22 +02:00
2026-09-22 21:57:09 +02:00
2026-09-22 21:57:09 +02:00
2026-09-12 17:28:01 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 21:57:56 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 20:25:03 +02:00
2026-09-21 18:37:39 +02:00
2026-09-09 19:36:15 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 08:58:10 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 23:27:02 +02:00
2026-09-21 18:37:39 +02:00
2026-09-20 12:58:55 +02:00
2026-09-21 18:37:39 +02:00
2026-08-02 14:22:05 +02:00
2026-08-27 16:42:12 +02:00
2026-09-25 18:26:45 +02:00
2026-09-25 18:26:45 +02:00
2026-09-21 18:37:39 +02:00
2026-09-25 18:55:33 +02:00
2026-09-25 18:55:33 +02:00
2026-09-24 23:34:54 +02:00
2026-09-14 17:35:36 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 00:34:49 +02:00
2026-09-05 20:58:42 +02:00
2026-08-25 22:19:59 +02:00
2026-07-28 18:49:25 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-18 12:57:52 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 10:49:08 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 10:49:08 +02:00
2026-09-20 12:29:01 +02:00
2026-09-17 21:02:57 +02:00
2026-09-24 23:22:28 +02:00
2026-09-24 23:22:28 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 10:49:08 +02:00
2026-09-11 00:39:53 +02:00
2026-09-21 18:37:39 +02:00
2026-09-11 00:36:55 +02:00
2026-09-21 18:37:39 +02:00
2026-09-13 19:24:43 +02:00
2026-09-25 18:26:45 +02:00
2026-08-12 14:34:29 +02:00
2026-09-05 19:53:09 +02:00
2026-09-21 18:37:39 +02:00
2026-09-07 22:37:53 +02:00
2026-09-25 18:26:45 +02:00
2026-09-21 18:37:39 +02:00
2026-07-26 20:28:11 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-04 13:04:08 +02:00
2026-09-21 18:37:39 +02:00
2026-09-05 19:53:09 +02:00
2026-09-12 17:28:01 +02:00
2026-08-31 18:11:54 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00
2026-09-18 12:44:39 +02:00
2026-08-31 17:44:29 +02:00
2026-09-21 18:37:39 +02:00
2026-08-08 21:46:40 +02:00
2026-07-16 15:53:53 +02:00
2026-09-16 19:45:57 +02:00
2026-09-21 18:37:39 +02:00
2026-09-16 19:45:57 +02:00
2026-08-31 17:15:42 +02:00
2026-07-26 20:28:11 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:11:15 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-07-13 21:57:41 +02:00
2026-07-21 21:08:33 +02:00
2026-07-13 21:57:41 +02:00
2026-09-21 18:37:39 +02:00
2026-09-21 18:37:39 +02:00