Hermes v0.9.0 — Port Individual Features (Option C) Instead of Full Rebase

Decision

Defer full v0.9.0 upstream rebase. Port individual framework features (web_server.py, Fast Mode, etc.) as isolated patches on arjtech/oracle branches incrementally.

Rationale

Upstream v0.9.0 is a 904-file, 967-commit, 35K-line framework delta. Breaking changes include Matrix lib pickle→SQLite migration and ACP semver break. Our hermes-consul fork has diverged into a monorepo (framework + SOUL + skills + config co-located). A naive rebase would take a dedicated 1-2 day window per fork (ARJ999/hermes-consul-arjtech, ARJ999/hermes-consul-oracle) and risk losing SOUL-edit patches, skill customizations, and config schema overrides. Option C lets us land the high-value features (web dashboard, Fast Mode) incrementally with targeted, reviewable patches and preserves rollback safety. Backup preserved at /opt/enterprise-backup/hermes-consul/pre-upgrade-20260405.

Alternatives Rejected

Option A (rejected): Full upstream rebase — too risky, 2-day effort per fork, high regression chance on SOUL/skills. Option B (rejected): Pin at v0.8.x forever — loses web dashboard, Fast Mode, future bug fixes. Option C (chosen): Port individual features as isolated patches — get value incrementally, low risk per patch, reviewable diffs.

Outcome

Fully realized — 19-Apr-2026. Option C closed: F2 Fast Mode + F1 Web Dashboard both ported to both forks (hermes-consul@arjtech + hermes-agent@oracle), live-verified, merged to main branches, pushed to origin. F2: 6 upstream cherry-picks (d416a692970192f1) with arjtech-preserving conflict resolution, plus 3 drift fixes discovered + remediated in-session (cron.py str/dict schedule shapes, max/maximumxhigh alias for reasoning_effort parser, /proc fallback for gateway detection in minimal Docker images). F1: 65 web/ files (Vite 7 + React 19 + Tailwind 4) + hermes_cli/web_server.py (FastAPI, 2320 lines) + remove_env_value config helper + cmd_dashboard + _build_web_ui + dashboard subparser all ported. hermes-consul uses multi-stage Docker build (node:20-alpine web-builder → runtime); oracle uses inline Vite build (node already present for WhatsApp bridge). Both bind dashboard to 127.0.0.1:9119 (Option A — no Traefik, Law 11 preserved); access via SSH tunnel. Smoke: HTTP 200 HTML (557 bytes with injected session token), HTTP 200 JS bundle (400,092 bytes), HTTP 401 on unauthed API (auth middleware active). ACP still pinned >=0.8.1,<0.9 (F7 deferred — dev-time only). F4/F5/F6 skipped per design. F3 re-evaluation not triggered. Catastrophic-rollback baseline at /opt/enterprise-backup/hermes-consul/pre-upgrade-20260405/ untouched — zero production regression.