Chuck and Claude Opus 5.5
c00bf5e8e6
fix(plugin-system): unload/update race, failed-load cleanup, limits validation, schema lookup, install rollback ( #653 )
...
* fix(plugin-system): unload/update race, failed-load module cleanup, limits validation, schema lookup, install rollback, op-queue dedupe
- unload_plugin takes the per-plugin lock (5s bounded) before cleanup(),
and an update() that finishes after its plugin was unloaded no longer
sets the state back to ENABLED.
- A load that fails after import drops plugin_<id> and its submodules
and forgets its manager fonts, so a fixed plugin reloads new code.
- Resource limits are validated as non-negative numbers: 400 at
POST /plugins/limits, bad cached records ignored with one warning.
Route docstrings note health/metrics reset and limits only change the
web process's view.
- SchemaManager.get_schema_path resolves each search dir via
resolve_plugin_dir (manifest id, ledmatrix-<id>) before the literal
paths; plugins/ still before plugin-repos/. Misses cached 30s and
logged once at DEBUG.
- install_from_url sets an existing copy aside and restores it if the
move fails, under the per-plugin reinstall lock.
- Operation queue refuses a second pending op for a plugin and trims
_operations with history.
- get_vegas_render_width reads display_manager.width first.
- get_logger in store/schema/health/resource/saved_repositories;
UTF-8 reads in store_manager and state_manager.
- Docs: update_interval precedence (manifest over config) stated where
users are told to set it in config.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
* fix(web): build the limits 400 message from the field name, not an exception
CodeQL flagged str(e) flowing into the response. invalid_limit_field()
returns the offending field without raising, and limits_from_dict uses it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
2026-09-28 10:41:40 -04:00
..
2026-09-23 16:33:24 -04:00
2026-09-28 10:40:52 -04:00
2026-09-23 12:36:26 -04:00
2026-09-28 10:40:52 -04:00
2026-03-20 15:06:58 -04:00
2026-08-21 11:16:52 -04:00
2026-09-24 17:37:15 -04:00
2026-07-12 10:38:52 -04:00
2026-07-12 10:38:52 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 08:24:43 -04:00
2026-08-21 11:16:52 -04:00
2026-09-28 08:24:43 -04:00
2026-09-08 08:34:52 -04:00
2026-09-11 10:07:38 -04:00
2026-09-24 17:35:49 -04:00
2026-09-28 08:26:05 -04:00
2026-09-23 12:36:53 -04:00
2026-08-23 11:44:23 -04:00
2026-09-23 12:36:53 -04:00
2026-09-28 08:24:43 -04:00
2026-09-23 10:29:16 -04:00
2026-09-24 17:35:49 -04:00
2026-08-21 11:16:52 -04:00
2026-09-23 10:29:16 -04:00
2026-09-24 17:35:49 -04:00
2026-09-11 10:07:38 -04:00
2026-09-11 10:07:38 -04:00
2026-09-24 17:35:49 -04:00
2026-09-24 17:32:29 -04:00
2026-09-28 10:41:40 -04:00
2026-09-28 10:40:16 -04:00
2026-09-24 15:51:14 -04:00
2026-09-17 16:37:29 -04:00
2026-09-18 09:56:50 -04:00
2026-09-28 10:40:16 -04:00
2026-08-26 10:03:43 -04:00
2026-09-01 09:54:04 -04:00
2026-09-28 08:24:43 -04:00
2026-09-28 08:26:05 -04:00
2026-08-07 16:17:11 -04:00
2026-09-13 11:53:50 -04:00
2026-09-28 10:41:40 -04:00
2026-09-28 10:39:40 -04:00
2026-09-24 15:51:53 -04:00
2026-08-12 08:42:56 -04:00
2026-09-23 12:54:07 -04:00
2026-08-19 12:28:22 -04:00
2026-09-07 13:37:54 -04:00
2026-08-12 08:40:07 -04:00
2026-09-17 12:38:39 -04:00
2026-09-24 15:50:50 -04:00
2026-09-23 12:54:07 -04:00
2026-08-11 14:14:25 -04:00
2026-08-19 17:40:52 -04:00
2026-09-14 09:42:24 -04:00
2026-09-23 16:33:24 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 10:41:40 -04:00
2026-09-23 12:52:50 -04:00
2026-07-14 08:49:43 -04:00
2026-09-11 10:07:38 -04:00
2026-09-16 17:12:18 -04:00
2026-08-06 14:04:23 -04:00
2026-09-23 12:36:26 -04:00
2026-09-24 17:32:02 -04:00
2026-09-17 16:37:29 -04:00
2026-09-15 18:19:39 -04:00
2026-08-04 13:46:28 -04:00
2026-09-03 16:06:40 -04:00
2026-09-28 10:39:40 -04:00
2026-09-23 12:44:55 -04:00
2026-09-23 16:48:02 -04:00
2026-09-24 15:52:52 -04:00
2026-09-28 08:25:26 -04:00
2026-09-28 09:07:08 -04:00
2026-09-23 10:29:16 -04:00
2026-08-23 11:43:39 -04:00
2026-09-28 08:25:26 -04:00
2026-09-23 10:29:16 -04:00
2026-09-27 18:13:49 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 10:39:40 -04:00
2026-09-24 17:37:15 -04:00
2026-09-23 12:36:26 -04:00
2026-09-24 19:38:22 -04:00
2026-09-07 13:37:54 -04:00
2026-09-17 16:37:29 -04:00
2026-09-28 10:39:40 -04:00
2026-09-23 12:36:26 -04:00
2026-09-24 19:38:22 -04:00
2026-09-24 17:35:49 -04:00
2026-08-06 14:04:23 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 10:40:16 -04:00
2026-09-24 17:32:29 -04:00
2026-08-07 13:27:20 -04:00
2026-09-24 17:32:29 -04:00
2026-09-28 10:40:16 -04:00
2026-09-23 14:32:02 -04:00
2026-09-18 09:56:50 -04:00
2026-09-24 17:31:41 -04:00
2026-09-28 10:39:40 -04:00
2026-09-28 10:40:16 -04:00
2026-09-24 17:32:29 -04:00
2026-09-23 16:50:42 -04:00
2026-09-24 19:38:49 -04:00
2026-08-21 14:30:29 -04:00
2026-09-07 13:37:38 -04:00
2026-07-12 10:38:52 -04:00
2026-08-21 15:50:55 -04:00
2026-09-24 17:32:29 -04:00
2026-09-23 12:36:26 -04:00
2026-08-12 14:58:05 -04:00
2026-08-23 11:42:51 -04:00
2026-08-03 16:52:42 -04:00
2026-09-24 17:31:41 -04:00
2026-09-14 17:38:17 -04:00
2026-09-28 08:25:45 -04:00
2026-08-21 15:50:55 -04:00
2026-09-23 10:29:16 -04:00
2026-09-27 18:13:49 -04:00
2026-09-18 11:09:25 -04:00
2026-09-24 17:35:49 -04:00
2026-09-11 08:41:58 -04:00
2026-09-23 12:36:26 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 08:26:05 -04:00
2026-09-28 10:40:16 -04:00
2026-09-28 10:39:40 -04:00
2026-09-24 17:32:02 -04:00
2026-09-11 11:32:12 -04:00
2026-09-08 08:34:52 -04:00
2026-08-11 16:10:56 -04:00
2026-09-24 19:57:03 -04:00
2026-09-07 13:37:38 -04:00
2026-09-28 08:25:26 -04:00
2026-08-19 12:49:46 -04:00
2026-09-23 10:34:20 -04:00
2026-09-28 10:41:40 -04:00
2026-09-24 17:35:49 -04:00
2026-09-11 15:32:03 -04:00
2026-09-23 12:36:53 -04:00
2026-09-28 10:40:16 -04:00
2026-09-15 19:17:48 -04:00
2026-08-17 15:35:02 -04:00
2026-09-08 08:34:52 -04:00
2026-09-02 09:51:27 -04:00
2026-09-17 16:37:29 -04:00
2026-09-24 15:52:52 -04:00
2026-08-21 16:19:33 -04:00
2026-09-11 08:41:58 -04:00
2026-08-19 12:28:22 -04:00
2026-09-28 08:25:45 -04:00
2026-09-24 17:32:29 -04:00
2026-08-23 11:43:39 -04:00
2026-09-28 10:41:40 -04:00
2026-09-28 08:25:45 -04:00
2026-09-24 17:32:02 -04:00
2026-07-09 07:54:18 -04:00
2026-09-28 08:25:45 -04:00
2026-09-24 17:32:02 -04:00
2026-09-17 16:37:29 -04:00
2026-09-28 10:41:40 -04:00
2026-09-23 12:36:26 -04:00
2026-09-23 12:36:26 -04:00
2026-09-15 18:19:39 -04:00
2026-09-15 18:19:39 -04:00
2026-09-24 15:49:51 -04:00
2026-08-07 13:02:59 -04:00
2026-09-28 08:25:26 -04:00
2026-09-24 17:32:02 -04:00
2026-09-28 10:41:40 -04:00
2026-09-24 17:32:02 -04:00
2026-09-23 16:33:24 -04:00
2026-09-28 10:39:40 -04:00
2026-09-17 16:37:29 -04:00
2026-09-24 17:32:02 -04:00
2026-09-24 19:47:44 -04:00
2026-08-21 16:22:48 -04:00
2026-08-07 10:17:30 -04:00
2026-05-15 10:19:55 -04:00
2026-09-28 10:41:40 -04:00
2026-09-07 13:37:54 -04:00
2026-07-31 09:40:38 -04:00
2026-09-28 08:26:05 -04:00
2026-09-17 16:37:29 -04:00
2026-09-17 16:37:29 -04:00
2026-07-13 09:28:30 -04:00
2026-09-14 12:48:36 -04:00
2026-09-13 11:53:50 -04:00
2026-09-15 15:32:21 -04:00
2026-09-17 16:37:29 -04:00
2026-09-20 18:25:33 -04:00
2026-08-26 11:25:10 -04:00
2026-09-24 15:51:35 -04:00
2026-09-23 16:33:12 -04:00
2026-09-11 10:07:38 -04:00
2026-09-28 08:26:05 -04:00
2026-09-24 17:32:02 -04:00
2026-09-28 10:41:40 -04:00
2026-09-23 12:36:26 -04:00
2026-09-23 16:33:24 -04:00
2026-09-28 08:24:43 -04:00
2026-09-24 17:32:02 -04:00
2026-07-13 09:32:37 -04:00
2026-09-24 17:31:41 -04:00
2026-09-24 17:31:41 -04:00
2026-09-24 15:51:14 -04:00
2026-09-28 10:40:16 -04:00
2026-09-11 08:45:40 -04:00
2026-09-24 17:35:49 -04:00
2026-08-21 14:29:45 -04:00
2026-09-24 17:31:41 -04:00
2026-08-06 14:04:23 -04:00
2026-09-28 08:25:45 -04:00
2026-09-24 17:32:29 -04:00
2026-09-28 08:24:43 -04:00
2026-09-23 12:36:26 -04:00
2026-08-21 14:30:29 -04:00
2026-08-21 14:30:29 -04:00
2026-09-24 17:37:15 -04:00
2026-09-24 17:37:15 -04:00
2026-09-23 10:29:16 -04:00
2026-09-28 08:25:26 -04:00
2026-09-24 19:38:22 -04:00
2026-09-28 08:25:26 -04:00
2026-08-23 11:42:33 -04:00
2026-08-12 14:06:32 -04:00
2026-09-24 17:37:15 -04:00
2026-08-13 17:02:36 -04:00
2026-08-21 15:50:55 -04:00
2026-07-08 09:43:13 -04:00
2026-09-24 17:37:15 -04:00
2026-09-28 10:39:14 -04:00
2026-09-24 17:37:15 -04:00
2026-09-24 19:57:03 -04:00
2026-09-23 16:33:24 -04:00
2026-09-23 12:36:26 -04:00
2026-09-23 12:36:53 -04:00
2026-09-10 17:42:00 -04:00
2026-09-23 12:36:53 -04:00
2026-09-24 15:53:19 -04:00
2026-07-09 09:22:24 -04:00
2026-09-23 10:29:16 -04:00
2026-09-14 09:42:24 -04:00
2026-09-24 15:51:14 -04:00
2026-09-09 16:25:45 -04:00
2026-09-14 09:42:24 -04:00
2026-09-14 12:40:41 -04:00
2026-09-14 12:40:41 -04:00
2026-09-24 17:32:29 -04:00
2026-09-28 08:26:05 -04:00