diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6530567435..9ed41a2db6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -168,12 +168,6 @@ jobs: - name: Require portable Bash shebangs run: python scripts/check_bash_shebangs.py - # The Sep 2026 decomposition kept old import paths alive for external plugins - # (PLUGIN-COMPAT blocks, see COMPAT_MANIFEST.md). They are removed on schedule by - # reverting one commit, so in-tree code must never depend on them. - - name: Forbid in-tree use of plugin-compat pointers - run: python scripts/check_compat_pointers.py - # /tmp is not portable (Termux has none, native Windows has none, macOS aliases it to # /private/tmp, Linux mounts it as a small tmpfs). Production code resolves scratch space # through the scratch-dir helper; skills, docs and prompts must not teach the model a diff --git a/AGENTS.md b/AGENTS.md index 832df27767..65aa3e61bc 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -217,7 +217,7 @@ hermes-agent/ ├── acp_adapter/ # ACP server (VS Code / Zed / JetBrains) ├── cron/ # jobs.py + scheduler.py (+ scheduler_*.py) ├── evals/ # Offline benchmarks (codebase_navigability/, compaction/, ...) -├── scripts/ # run_tests.sh, release.py, check_compat_pointers.py, ci/ +├── scripts/ # run_tests.sh, release.py, ci/ ├── website/ # Docusaurus docs (developer-guide/ holds the long-form area docs) └── tests/ # Pytest suite (~39k tests / ~3.7k files, Sep 2026) ``` @@ -246,18 +246,14 @@ families: `hermes_state.py` (21), `gateway/run.py` (15), `tools/mcp_tool.py` (15 function so `monkeypatch.setattr(facade, "name", ...)` is the seam; a patch on the defining module passes silently. Check the call site's binding before writing a patch target (blind repointing to defining modules broke 130+ tests). -- **Compat pointers are OFF LIMITS in-tree.** Old import paths kept alive for external plugins - (`PLUGIN-COMPAT` blocks, `COMPAT_MANIFEST.md`, `compat_manifest.json`) must not be used by - in-tree code or tests; `scripts/check_compat_pointers.py` runs in CI, and - `-W error::hermes_cli.plugin_compat.HermesPluginCompatWarning` catches them in the suite. - They are removed 2026-09-14 by reverting one commit. Import from the defining module. - **Don't recreate god files.** A file passing ~2,000 lines or a function passing ~300 lines / cyclomatic complexity 30 is the signal to split along `_` FIRST, in its own commit. New behaviour goes in a new or topical sibling — never appended to a facade. - **No `if/elif` ladders ≥ 4 branches keyed on a name/kind** — use a dict/table → handler (`_SLASH_DISPATCH` in `cli.py`, `_command_handler_table` in the gateway are the shape). - **No re-export shims for internal moves** ("keep the old name importable"). Internal paths - are not API; external compat is handled ONCE by the compat layer, not per PR. + are not API: plugins build on `ctx` and the documented ABCs. The one-time Sep 2026 + decomposition compat layer for external plugins has been removed; never reintroduce one. - **Moving a symbol means fixing its docs in the same PR:** grep `website/docs`, `skills/`, and every `AGENTS.md` for the old `path.py` + symbol (23 doc files went stale after the refactor). `evals/codebase_navigability/static_metrics.py