Skip to content

[FEATURE] VNext Phase 10 — HearthBot cutover and complete Hermes retirement #344

Description

@Joncallim

Parent: #333
Execution mode: implementation
Depends on: #343, #191
Final migration rule: one workflow, one writer/authority at a time

Problem Statement

Hermes/HearthBot currently carries useful orchestration behaviors learned before VNext, but retaining Hermes as a fallback, sub-orchestrator, state bridge or compatibility layer would leave Forge without a single source of authority and make duplicate external side effects possible.

The migration must preserve useful requirements while explicitly rejecting Hermes code/config/state/runtime compatibility.

Desired Outcome

Forge becomes the sole durable orchestrator for retained agentic workflows. HearthBot may remain as a thin presentation/request/approval/notification interface, but Mission/Execution/Trigger/Resource/Grant/Budget/Artifact/Gate state is owned only by Forge/PostgreSQL. Hermes services, cron jobs, routing/state stores and Hermes-only credentials are removed after each workflow has a proven Forge-native replacement.

User Story

As the Forge operator,
I want one orchestration system with HearthBot as a convenient interface rather than a second brain,
So that scheduled work, notifications, provider routing and side effects remain deterministic, inspectable and safe after Hermes is retired.

Requirements

A. Live responsibility inventory

At implementation time, inspect the actual running environment rather than relying on old docs/memory. Produce a cutover ledger with one row per active Hermes/HearthBot responsibility:

  • user-visible purpose;
  • current trigger/input;
  • current external side effects;
  • credentials/resources used;
  • current schedule/condition;
  • current notification/output;
  • whether still needed;
  • Forge-native replacement owner (Mission/Workforce/Trigger/Adapter/etc.);
  • acceptance test;
  • cutover state and rollback boundary.

Drop unused/obsolete behavior deliberately; do not preserve features for parity.

B. Forbidden compatibility

Repository/runtime tests must reject or prove absence of:

  • Hermes source import/dependency;
  • Hermes state.db or other DB reads/writes;
  • Hermes routing bridge/API as runtime fallback;
  • Hermes cron prompt/config import;
  • Hermes provider/delegation manifest compatibility;
  • copied parent-agent prompts/state;
  • Forge -> Hermes execution fallback.

Migration data may be human-reviewed requirements documentation only.

C. HearthBot thin interface

HearthBot/Telegram may provide:

  • authenticated/allowlisted request submission;
  • Mission/task status and concise evidence links;
  • explicit approval/revocation actions exposed by Forge policy;
  • actionable notifications;
  • operator commands that map to typed Forge APIs/Operations.

It must not maintain a second orchestration database, independently choose provider authority, keep hidden Mission state, or write directly to external Resources when Forge owns that workflow.

Telegram identity/message text is input evidence, not hidden authority. Forge maps it to an authenticated Principal and current policy before consequential actions.

D. Native replacements

Only reimplement retained responsibilities using proven VNext components:

E. Cutover protocol

For each retained workflow:

  1. freeze its exact current owner/writer mapping;
  2. implement/test Forge replacement using fixtures/read-only mode;
  3. run shadow observation only where it produces no competing external write;
  4. establish Forge Resource/Grant/Trigger/Mission and acceptance evidence;
  5. stop/disable Hermes writer for that workflow;
  6. atomically/operationally designate Forge sole writer;
  7. exercise the real workflow;
  8. verify output/side-effect/recovery;
  9. remove Hermes-specific schedule/config/credential for that workflow when safe;
  10. record cutover receipt and rollback boundary.

Rollback before final retirement may restore Hermes only after Forge writer is disabled/fenced. Never permit both simultaneously.

F. Provider/routing migration

Do not port Hermes routing implementation. Recreate only desired policies as #335 deterministic provider-neutral configuration. Compare representative provider outage/quota scenarios and ensure Forge receipts explain selection/fallback/holds.

G. Scheduled responsibility migration

Translate active cron/monitoring intent into Mission + Trigger + deterministic prefilter contracts. Prove unchanged idle windows consume zero model tokens. Do not copy cron prompts as permanent parent-agent context.

H. Notifications

Migrate only actionable notification behavior. Deduplicate/coalesce through Forge occurrence/Operation identity; do not notify on every healthy poll. Notification failure is an adapter outcome/retry/reconciliation problem, not a reason to rerun a Mission blindly.

I. Secrets/service cleanup

After each verified cutover and again at final retirement:

  • stop/disable Hermes processes/services/timers/cron;
  • remove startup units/config references;
  • revoke/delete Hermes-only tokens/credentials where safe;
  • remove obsolete provider/routing config;
  • archive/remove Hermes state/config according to operator retention choice;
  • ensure Forge/HearthBot secrets are scoped to their own principals only.

J. Final reboot proof

From a clean reboot/startup:

  • Forge + required adapters/HearthBot start;
  • no Hermes process/service/timer/cron starts;
  • retained scheduled responsibilities recover correctly;
  • provider/Trigger/Mission state comes from Forge;
  • a representative Telegram request/status/approval/notification flow works;
  • no duplicate external writer exists.

Implementation Sequence

  1. Live inventory/cutover ledger — authoritative current responsibility list and explicit drop/keep decisions.
  2. Thin HearthBot Forge client/auth model — status/request first, no writes beyond Forge APIs.
  3. Provider/budget/readiness UI/report migration — [FEATURE] VNext Phase 1 — deterministic budget, routing, and context economics #335/[FEATURE] Add reliability, autonomy, and regression reporting #191 evidence, no Hermes routing bridge.
  4. Schedule/conditional responsibility migration — [FEATURE] VNext Phase 6 — persistent Missions, checkpoints, leases, and bounded autonomy #340/[FEATURE] VNext Phase 7 — Trigger/Event runtime with dedupe, causality, and zero-token idle #341, one workflow at a time, zero-write shadow.
  5. Notification adapter migration — typed/deduped actionable notifications.
  6. Representative operational Mission migration — [FEATURE] VNext Phase 9 — Infrastructure Ops Workforce and persistent side-effect proof #343 as persistent proof.
  7. Remaining retained workflow cutovers — each with one-writer receipt and rollback fence.
  8. Hermes service/secret/config retirement — progressive, then final.
  9. Repository/docs/runtime dependency purge — no operational instructions/path to Hermes.
  10. Clean reboot + provider failure + scheduled-idle + notification + bounded side-effect final gate.

Primary Surfaces To Inspect First

Orthogonal Checkpoints

  1. Inventory completeness: compare live process/timer/cron/network/config evidence vs ledger; find orphan writers.
  2. Authority: Telegram identity spoofing, stale approvals, Forge/Hermes dual-writer races, rollback fencing.
  3. Schedules/idle cost: missed/duplicate trigger, unchanged window, restart and zero-token proof.
  4. Provider behavior: auth/quota/rate/outage failover under Forge receipts, no Hermes fallback.
  5. Notification: duplicates, failure/retry, sensitive content, irrelevant/healthy suppression.
  6. Secrets/cleanup: old services/config/credentials/startup refs; no accidental deletion before verified replacement.
  7. Final reboot: cold-start state reconstruction and representative end-to-end workflows.

Acceptance Criteria

  • Every active Hermes-owned user-visible responsibility is explicitly retained with a Forge-native implementation/test or dropped as unnecessary.
  • HearthBot submits/reads/approves through Forge without a second orchestration database or direct independent writer path.
  • No production workflow has simultaneous Hermes and Forge write authority.
  • Repository/runtime searches show no Forge dependency on Hermes code/config/state/API/fallback.
  • Retained scheduled/monitoring workflows demonstrate zero-token idle when unchanged.
  • Provider failover/budget behavior is explained entirely by Forge routing/budget/readiness evidence.
  • Notifications are typed/deduped/actionable and recover independently of Mission rerun.
  • Hermes services/timers/cron/startup paths are removed/disabled after verified cutover.
  • Hermes-only credentials are revoked/removed where safe and recorded without leaking secret values.
  • A clean reboot starts the complete required Forge/HearthBot path with Hermes absent.
  • A representative Telegram request, scheduled responsibility, provider failure, approval/revocation, notification and bounded side effect all pass after reboot.
  • Pre-final rollback cannot create two concurrent writers; final state has no Hermes fallback.

Out of Scope

  • Bit-for-bit Hermes feature parity.
  • Importing Hermes source/config/state to accelerate migration.
  • Keeping Hermes as an emergency fallback after final retirement.
  • Preserving token-heavy parent-agent/conversation behavior.
  • New unrelated Workforces during cutover.

Implementation Scope

Very Large / operational migration - execute as many small cutover PRs/operations as there are retained responsibilities, with explicit one-writer receipts and rollback fences.

Technical Notes

This phase necessarily combines repository work with live-environment operator actions. Code can be agent-implemented; disabling services/revoking credentials must remain explicit, evidence-backed consequential operations under the operator's authority.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    dependency-blockedREADINESS PROJECTION — Issue is blocked by unresolved dependencies. This label is a cache.enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions