Teknium
0a5164cebe
compat(plugins): tell users which installed plugins break on 2026-09-14, and stop loading them after
...
hermes_cli/plugin_compat.py is now the single source of truth for the compat window:
COMPAT_REMOVAL_DATE = 2026-09-14; scan_plugin() statically finds `from F import n`, `import F` + `F.n`,
alias forms and string targets against compat_manifest.json; compat_report() aggregates over the user's
ENABLED external (non-bundled) plugins; disable_reason() decides the loader's skip.
Surfaces (all read from that one report):
* CLI: yellow block under the banner naming plugins + date + `hermes plugins compat` (red + DISABLED after)
* `hermes plugins compat [--json] [path]`: file:line, old -> new per hit; exit 1 while anything remains;
`path` lets a plugin author scan their own checkout
* `hermes doctor`: "Plugin import paths (removed Sep 14, 2026)" section next to the xAI retirement check
* `hermes update`: post-update notice alongside the FTS/curator notices
* Desktop: compat_report() writes HERMES_HOME/.plugin-compat-report.json (deleted when clean); Electron
shows ONE warning dialog per distinct report after the backend is up and persists the dismissal in
userData/plugin-compat-dismissed.json. A new affected plugin, or the date passing, is a new report.
From the date, PluginManager skips a hitting external plugin before importing it, with the reason in
LoadedPlugin.error ("uses N import path(s) removed on 2026-09-14; run `hermes plugins compat` ...") — the
same path a plugin with a broken register() takes, so nothing else is affected. Escape hatch:
plugins.allow_deprecated_imports: true (config_defaults), which only helps until the compat commit is
actually reverted.
Docs: COMPAT_MANIFEST.md (removal date, what-happens table, author instructions), plugin dev guide section.
Tests: tests/test_plugin_compat_notice.py (scanner forms, report scope, date gate + escape hatch, summary
text, report file lifecycle, loader skip via a real PluginManager), electron/plugin-compat-notice.test.ts
(show once, re-show on a different set or on the date passing, malformed file ignored).
Live A/B on this box with a demo plugin on old paths: before the date it loads and the banner/doctor/report
name it; with today=2026-09-14 it is skipped with the reason and the banner turns red; with the escape
hatch it loads again.
2026-09-04 01:28:31 -07:00
..
2026-09-04 00:15:16 -07:00
2026-08-12 18:52:08 -07:00
2026-09-04 00:15:16 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 03:31:03 -07:00
2026-09-04 01:28:31 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 22:51:30 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 02:46:19 -07:00
2026-09-02 20:23:43 -07:00
2026-09-03 13:05:57 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 21:00:34 -07:00
2026-09-03 13:49:57 -07:00
2026-09-02 20:56:23 -07:00
2026-09-03 13:49:57 -07:00
2026-09-03 13:49:57 -07:00
2026-09-02 22:51:30 -07:00
2026-09-03 13:08:40 -07:00
2026-09-03 14:00:59 -07:00
2026-09-02 22:51:19 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 13:08:40 -07:00
2026-09-03 13:48:49 -07:00
2026-09-03 13:48:49 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 13:08:40 -07:00
2026-09-02 21:59:38 -07:00
2026-09-03 13:08:40 -07:00
2026-09-02 21:59:38 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 20:34:28 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 02:07:33 -07:00
2026-09-03 13:29:35 -07:00
2026-09-02 21:26:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 23:58:31 -07:00
2026-09-02 23:58:31 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 13:05:57 -07:00
2026-09-03 13:05:57 -07:00
2026-09-02 21:14:52 -07:00
2026-09-03 13:49:57 -07:00
2026-09-03 15:43:04 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 13:05:57 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 14:00:59 -07:00
2026-09-02 21:23:44 -07:00
2026-09-03 13:49:57 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 15:43:04 -07:00
2026-09-02 22:42:56 -07:00
2026-09-03 17:00:26 -07:00
2026-09-03 13:30:31 -07:00
2026-09-02 23:58:31 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:03:13 -07:00
2026-09-02 15:03:42 -07:00
2026-09-03 14:00:59 -07:00
2026-09-03 17:00:26 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 00:06:54 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 14:00:59 -07:00
2026-09-03 14:00:59 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 20:47:14 -07:00
2026-09-03 03:31:03 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 13:05:57 -07:00
2026-09-03 00:02:56 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 00:04:40 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 14:16:54 -07:00
2026-09-03 00:06:30 -07:00
2026-09-04 00:15:16 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 13:16:47 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 13:29:35 -07:00
2026-09-03 00:05:41 -07:00
2026-09-03 13:46:50 -07:00
2026-09-03 14:16:54 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:20:42 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 20:40:51 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 00:06:30 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 20:06:17 -07:00
2026-09-03 00:06:30 -07:00
2026-09-02 21:20:42 -07:00
2026-09-03 00:06:30 -07:00
2026-09-03 00:10:28 -07:00
2026-09-03 14:00:59 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 13:48:14 -07:00
2026-09-03 13:48:14 -07:00
2026-09-03 13:48:14 -07:00
2026-09-03 13:48:14 -07:00
2026-09-03 13:48:14 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 13:48:14 -07:00
2026-09-02 20:34:04 -07:00
2026-09-03 13:48:14 -07:00
2026-09-03 13:48:14 -07:00
2026-09-02 21:17:47 -07:00
2026-09-03 13:48:14 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 20:12:36 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 20:15:37 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 13:33:47 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 15:07:39 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 21:44:59 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:21:25 -07:00
2026-09-03 13:29:35 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 13:29:35 -07:00
2026-09-02 21:44:59 -07:00
2026-09-02 20:50:08 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 21:44:59 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 20:51:30 -07:00
2026-09-02 20:51:30 -07:00
2026-09-03 03:31:03 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 20:51:30 -07:00
2026-09-02 20:51:30 -07:00
2026-09-02 21:54:56 -07:00
2026-09-02 21:54:56 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 15:07:39 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 14:00:59 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 13:48:49 -07:00
2026-09-03 14:00:59 -07:00
2026-09-03 13:48:49 -07:00
2026-09-03 13:48:49 -07:00
2026-09-03 13:48:49 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 22:14:17 -07:00
2026-09-02 21:57:34 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 20:40:15 -07:00
2026-09-02 20:24:29 -07:00
2026-09-02 20:40:15 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 20:19:57 -07:00
2026-09-02 21:57:39 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 14:00:59 -07:00
2026-09-02 21:10:03 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 00:09:39 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 21:49:24 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 17:13:22 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 00:06:57 -07:00
2026-09-03 13:46:50 -07:00
2026-09-02 21:07:16 -07:00
2026-09-02 21:07:16 -07:00
2026-09-02 22:55:15 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:09:53 -07:00
2026-09-02 21:00:55 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:07:16 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:00:55 -07:00
2026-09-02 20:47:24 -07:00
2026-09-02 21:00:55 -07:00
2026-09-02 22:39:49 -07:00
2026-09-03 14:00:59 -07:00
2026-09-03 14:00:59 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 22:25:24 -07:00
2026-09-03 14:00:59 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 21:07:16 -07:00
2026-09-02 21:07:16 -07:00
2026-09-02 22:33:08 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 00:06:57 -07:00
2026-09-03 00:06:57 -07:00
2026-09-03 00:06:57 -07:00
2026-09-03 00:06:57 -07:00
2026-09-03 00:06:57 -07:00
2026-09-03 03:31:03 -07:00
2026-09-02 23:59:27 -07:00
2026-09-03 13:46:50 -07:00
2026-09-02 23:42:50 -07:00
2026-09-03 13:05:57 -07:00
2026-09-02 22:39:06 -07:00
2026-09-03 13:33:10 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 15:07:39 -07:00
2026-09-03 13:33:10 -07:00
2026-09-03 13:33:10 -07:00
2026-09-03 13:33:10 -07:00
2026-09-03 00:11:01 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 20:43:25 -07:00
2026-09-03 13:08:40 -07:00
2026-09-03 13:22:48 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 22:55:43 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 23:04:20 -07:00
2026-09-02 20:59:41 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 13:10:52 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 20:43:25 -07:00
2026-09-02 21:36:24 -07:00
2026-09-02 21:34:25 -07:00
2026-09-03 22:00:01 -07:00
2026-09-02 21:49:33 -07:00
2026-09-02 20:43:25 -07:00
2026-09-02 15:03:42 -07:00
2026-09-02 20:43:25 -07:00
2026-09-02 23:04:20 -07:00
2026-09-03 13:22:51 -07:00
2026-09-03 13:29:35 -07:00
2026-09-03 14:16:54 -07:00
2026-09-03 13:10:38 -07:00
2026-09-04 00:15:16 -07:00
2026-09-02 20:38:18 -07:00
2026-09-02 21:31:17 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 16:34:55 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 14:27:29 -07:00
2026-09-03 09:56:39 -07:00
2026-09-03 09:44:26 -07:00
2026-09-04 01:28:31 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 21:49:26 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 21:45:19 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 22:12:58 -07:00
2026-09-02 21:28:23 -07:00
2026-09-02 21:28:23 -07:00
2026-09-02 21:28:23 -07:00
2026-09-03 13:20:22 -07:00
2026-09-03 17:13:22 -07:00
2026-09-03 09:44:26 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:37:14 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-03 14:21:32 -07:00
2026-09-04 00:15:16 -07:00
2026-09-04 00:15:16 -07:00
2026-09-03 17:13:22 -07:00
2026-09-02 23:08:44 -07:00
2026-09-02 23:08:44 -07:00
2026-09-03 13:05:57 -07:00
2026-09-03 09:44:26 -07:00
2026-09-02 21:54:36 -07:00
2026-09-02 23:08:44 -07:00