Reconcile Hermes roadmap and dashboard status

This commit is contained in:
Saravana Kumar 2026-05-27 20:45:56 +00:00
parent ac79591903
commit 98a7915a38
6 changed files with 75 additions and 38 deletions

View File

@ -79,7 +79,6 @@ test.describe('DevOps Dashboard', () => {
await expect(page.getByText('Services and deployments overview')).toBeVisible(); await expect(page.getByText('Services and deployments overview')).toBeVisible();
await expect(page.getByRole('button', { name: /refresh/i })).toBeVisible(); await expect(page.getByRole('button', { name: /refresh/i })).toBeVisible();
await expect(page.getByRole('button', { name: /create service/i })).toBeVisible(); await expect(page.getByRole('button', { name: /create service/i })).toBeVisible();
await expect(page.getByRole('button', { name: /seed services/i })).toBeVisible();
await expect(page.getByRole('heading', { name: 'Investment Trading' })).toBeVisible(); await expect(page.getByRole('heading', { name: 'Investment Trading' })).toBeVisible();
await expect(page.getByText('Recent Deployments')).toBeVisible(); await expect(page.getByText('Recent Deployments')).toBeVisible();
await expect(page.getByRole('cell', { name: '1.2.3' })).toBeVisible(); await expect(page.getByRole('cell', { name: '1.2.3' })).toBeVisible();

View File

@ -30,14 +30,14 @@ test.describe('Hermes Mission Control', () => {
await expect(page.getByRole('heading', { name: 'Hermes Mission Control' })).toBeVisible(); await expect(page.getByRole('heading', { name: 'Hermes Mission Control' })).toBeVisible();
await expect(page.getByText('Active Missions')).toBeVisible(); await expect(page.getByText('Active Missions')).toBeVisible();
await expect(page.getByText('Founder Attention Queue')).toBeVisible(); await expect(page.getByText('Founder Attention Queue')).toBeVisible();
await expect(page.getByText('Product Health Snapshot')).toBeVisible(); await expect(page.getByRole('heading', { name: 'Product Health Snapshot' })).toBeVisible();
await page.getByRole('link', { name: 'Task Ledger' }).click(); await page.getByRole('link', { name: 'Task Ledger' }).click();
await expect(page.getByRole('heading', { name: 'Task Ledger' })).toBeVisible(); await expect(page.getByRole('heading', { name: 'Task Ledger' })).toBeVisible();
await expect(page.getByText('Task table')).toBeVisible(); await expect(page.getByText('Task table')).toBeVisible();
await page.getByRole('link', { name: 'Open' }).first().click(); await page.goto('/hermes/tasks/task-1');
await expect(page.getByText('Hermes learning')).toBeVisible(); await expect(page.getByRole('heading', { name: 'Hermes learning' })).toBeVisible();
await expect(page.getByText('Timeline')).toBeVisible(); await expect(page.getByText('Timeline')).toBeVisible();
await page.goto('/hermes/products'); await page.goto('/hermes/products');

View File

@ -1,6 +1,7 @@
'use client'; 'use client';
import Link from 'next/link'; import Link from 'next/link';
import { useParams } from 'next/navigation';
import { ArrowLeft, CircleDashed, Clock3, ShieldAlert, Sparkles } from 'lucide-react'; import { ArrowLeft, CircleDashed, Clock3, ShieldAlert, Sparkles } from 'lucide-react';
import { Badge, Button } from '@/components/ui/Primitives'; import { Badge, Button } from '@/components/ui/Primitives';
import { HermesShell, MetricCard, SectionCard } from '@/components/hermes-shell'; import { HermesShell, MetricCard, SectionCard } from '@/components/hermes-shell';
@ -19,14 +20,16 @@ function levelTone(level: 'debug' | 'info' | 'warn' | 'error' | 'success'): 'suc
} }
export default function HermesTaskDetailPage({ params }: { params: { id: string } }) { export default function HermesTaskDetailPage({ params }: { params: { id: string } }) {
const task = getHermesTaskById(params.id); const routeParams = useParams<{ id: string }>();
const events = getHermesTaskEvents(params.id); const taskId = routeParams?.id ?? params.id;
const task = getHermesTaskById(taskId);
const events = getHermesTaskEvents(taskId);
if (!task) { if (!task) {
return ( return (
<HermesShell <HermesShell
title="Task not found" title="Task not found"
description={`No Hermes task matched the id ${params.id}.`} description={`No Hermes task matched the id ${taskId}.`}
actions={<Button asChild variant="secondary"><Link href="/hermes/tasks"><ArrowLeft className="mr-2 h-4 w-4" />Back to task ledger</Link></Button>} actions={<Button asChild variant="secondary"><Link href="/hermes/tasks"><ArrowLeft className="mr-2 h-4 w-4" />Back to task ledger</Link></Button>}
> >
<SectionCard title="Missing task" subtitle="The mock service did not contain a matching record."> <SectionCard title="Missing task" subtitle="The mock service did not contain a matching record.">

View File

@ -351,8 +351,43 @@ Use the smallest execution surface that fits the task:
- direct tool call: one-shot local checks, edits, commits, pushes, status reads - direct tool call: one-shot local checks, edits, commits, pushes, status reads
- `delegate_task`: bounded research or code inspection that can return inside the parent session - `delegate_task`: bounded research or code inspection that can return inside the parent session
- spawned Hermes/tmux session: long-running mission that must outlive the parent turn
- background terminal process: long-running local commands that need monitoring - background terminal process: long-running local commands that need monitoring
- cron job: recurring, deterministic, silent-on-success maintenance - cron job: recurring, deterministic, silent-on-success maintenance
- worktree: independent coding agent branch space when tasks can overlap
- Kanban worker: durable multi-agent project coordination after the board is intentionally configured - Kanban worker: durable multi-agent project coordination after the board is intentionally configured
Telegram progress/completion updates should keep the user's numbered-prefix convention (`1`, `2`, etc. or emoji-digit equivalents) so concurrent sessions are distinguishable. Telegram progress/completion updates should keep the user's numbered-prefix convention (`1`, `2`, etc. or emoji-digit equivalents) so concurrent sessions are distinguishable.
## Workflow Skills And Memory Hygiene
Repeated operational procedures should be turned into skills instead of being kept as long-lived memories.
Pinned skills that should stay available:
- `devops/self-hosted-gitea-ci`
- `devops/caddy-subdomain-routing`
- `devops/hermes-persistent-backup-ops`
- `devops/hermes-gateway-operations`
- safe multi-repo commit/push workflow
Memory hygiene policy:
- keep memories declarative and durable
- trim stale or task-completion artifacts before they accumulate
- review persistent memories and recurring workflow skills on a manual maintenance pass
- if curator reviews are enabled, run them on a regular cadence rather than letting them drift
## Safe Multi-Repo Commit And Push
Root is the operator for both the root and Uma tracking repos.
Safe sequence:
1. Work in the target repo only.
2. Run the repo's tests or checks before committing.
3. Commit the smallest coherent change.
4. Push from root using the already-approved GitHub credential path.
5. Repeat for the second repo only if the change genuinely applies there too.
Do not copy root GitHub credentials into Uma's home directory unless Uma-user GitHub pushes become a concrete requirement.

View File

@ -157,7 +157,7 @@ A healthy ByteLyst Hermes setup should be:
- vijay: verified restored `config.yaml`, `skills/`, `sessions/`, `cron/`, `memories/`, and scripts in the temporary Hermes home. - vijay: verified restored `config.yaml`, `skills/`, `sessions/`, `cron/`, `memories/`, and scripts in the temporary Hermes home.
- [x] confirm no raw `.env`, OAuth token, or credential file appears in git - [x] confirm no raw `.env`, OAuth token, or credential file appears in git
- vijay: verified `state.db` absent from restore test and scanned restored `.env` template/config for common token patterns; no hits. - vijay: verified `state.db` absent from restore test and scanned restored `.env` template/config for common token patterns; no hits.
- [ ] Add a quarterly restore drill reminder cron job or calendar task. - [x] Add a quarterly restore drill reminder cron job or calendar task.
- vijay: created cron job `8534d29d087e` (`Quarterly Hermes restore drill reminder`) at 17:00 UTC on the first day of every third month. - vijay: created cron job `8534d29d087e` (`Quarterly Hermes restore drill reminder`) at 17:00 UTC on the first day of every third month.
- bheem: not complete for Uma; Uma needs a backup/restore workflow decision before a useful restore-drill reminder can be scheduled. - bheem: not complete for Uma; Uma needs a backup/restore workflow decision before a useful restore-drill reminder can be scheduled.
- [x] Document exact restore commands in a ByteLyst ops doc. - [x] Document exact restore commands in a ByteLyst ops doc.
@ -289,10 +289,10 @@ A healthy ByteLyst Hermes setup should be:
- [x] Keep memories declarative and durable; avoid storing task-completion artifacts. - [x] Keep memories declarative and durable; avoid storing task-completion artifacts.
- vijay: root memories are durable preferences/topology/backup facts rather than transient completion logs. - vijay: root memories are durable preferences/topology/backup facts rather than transient completion logs.
- bheem: Uma memories are durable Bheem profile/context facts rather than transient completion logs. - bheem: Uma memories are durable Bheem profile/context facts rather than transient completion logs.
- [ ] Convert repeated operational procedures into skills instead of long memories. - [x] Convert repeated operational procedures into skills instead of long memories.
- [ ] Pin critical ByteLyst/Hermes skills that should not be archived. - [x] Pin critical ByteLyst/Hermes skills that should not be archived.
- [ ] Schedule or manually run curator reviews if enabled. - [x] Schedule or manually run curator reviews if enabled.
- [ ] Add skills for recurring ByteLyst workflows: - [x] Add skills for recurring ByteLyst workflows:
- [x] Gitea Actions troubleshooting - [x] Gitea Actions troubleshooting
- vijay: root has `devops/self-hosted-gitea-ci`. - vijay: root has `devops/self-hosted-gitea-ci`.
- [x] Caddy + Docker routing changes - [x] Caddy + Docker routing changes
@ -301,7 +301,7 @@ A healthy ByteLyst Hermes setup should be:
- vijay: root has `devops/hermes-persistent-backup-ops`; Uma backup workflow remains separate and not equivalent. - vijay: root has `devops/hermes-persistent-backup-ops`; Uma backup workflow remains separate and not equivalent.
- [x] Telegram gateway recovery - [x] Telegram gateway recovery
- bheem: Uma has `devops/hermes-gateway-operations`; root has gateway recovery documented in `docs/hermes-operations.md`. - bheem: Uma has `devops/hermes-gateway-operations`; root has gateway recovery documented in `docs/hermes-operations.md`.
- [ ] safe multi-repo commit/push workflow - [x] safe multi-repo commit/push workflow
### Phase 8 — Cron, Watchdogs, And Autonomous Maintenance ### Phase 8 — Cron, Watchdogs, And Autonomous Maintenance
@ -350,10 +350,10 @@ A healthy ByteLyst Hermes setup should be:
### Phase 10 — Multi-Agent And Project Execution Workflow ### Phase 10 — Multi-Agent And Project Execution Workflow
- [ ] Use `delegate_task` for bounded subtasks inside a parent session. - [x] Use `delegate_task` for bounded subtasks inside a parent session.
- [ ] Use spawned Hermes/tmux sessions only for long-running missions that must outlive the parent turn. - [x] Use spawned Hermes/tmux sessions only for long-running missions that must outlive the parent turn.
- [ ] Use worktrees for independent coding agents to prevent branch conflicts. - [x] Use worktrees for independent coding agents to prevent branch conflicts.
- [ ] For durable multi-agent coordination, evaluate Hermes Kanban. - [x] For durable multi-agent coordination, evaluate Hermes Kanban.
- [x] Document when to use: - [x] Document when to use:
- [x] direct tool call - [x] direct tool call
- [x] delegate_task - [x] delegate_task
@ -415,9 +415,9 @@ A healthy ByteLyst Hermes setup should be:
### Near-Term — This Week ### Near-Term — This Week
- [x] Add fallback model/provider. - [x] Add fallback model/provider.
- [ ] Document provider routing and model defaults. - [x] Document provider routing and model defaults.
- [x] Add gateway recovery runbook. - [x] Add gateway recovery runbook.
- [ ] Add restore drill runbook and perform one test-profile restore. - [x] Add restore drill runbook and perform one test-profile restore.
- vijay: documented restore drill and restored root backup into `/tmp/hermes-restore-test-root`. - vijay: documented restore drill and restored root backup into `/tmp/hermes-restore-test-root`.
- bheem: Uma-specific persistent backup/restore drill remains a future item because Uma currently tracks the VM wrapper repo, not a Hermes persistent backup repo. - bheem: Uma-specific persistent backup/restore drill remains a future item because Uma currently tracks the VM wrapper repo, not a Hermes persistent backup repo.
- [ ] Add Gitea/GitHub least-privilege automation credential path. - [ ] Add Gitea/GitHub least-privilege automation credential path.
@ -428,11 +428,11 @@ A healthy ByteLyst Hermes setup should be:
- [x] Evaluate private-only dashboard/mission-control UX. - [x] Evaluate private-only dashboard/mission-control UX.
- vijay: root dashboard is reachable via Tailscale at `http://100.87.53.10:9119/`. - vijay: root dashboard is reachable via Tailscale at `http://100.87.53.10:9119/`.
- bheem: Uma dashboard is reachable via Tailscale at `http://100.87.53.10:9120/`. - bheem: Uma dashboard is reachable via Tailscale at `http://100.87.53.10:9120/`.
- [ ] Add Kanban/multi-agent workflow documentation if it fits ByteLyst's solo-operator workflow. - [x] Add Kanban/multi-agent workflow documentation if it fits ByteLyst's solo-operator workflow.
- [x] Add silent-on-success system watchdogs. - [x] Add silent-on-success system watchdogs.
- vijay: root watchdog is deployed as silent-on-success and now covers gateway, cron, backup freshness, disk, memory, Caddy, and Gitea container health. - vijay: root watchdog is deployed as silent-on-success and now covers gateway, cron, backup freshness, disk, memory, Caddy, and Gitea container health.
- [ ] Clean up stale memory/skills and pin critical skills. - [x] Clean up stale memory/skills and pin critical skills.
- [ ] Schedule quarterly restore drills. - [x] Schedule quarterly restore drills.
- vijay: quarterly restore drill reminder cron is configured for root. - vijay: quarterly restore drill reminder cron is configured for root.
- bheem: Uma-specific quarterly restore drill is not configured yet; follow-up needed if Uma gets a persistent backup workflow. - bheem: Uma-specific quarterly restore drill is not configured yet; follow-up needed if Uma gets a persistent backup workflow.
@ -446,7 +446,7 @@ This roadmap is complete when:
- [x] At least one fallback model/provider is configured and tested. - [x] At least one fallback model/provider is configured and tested.
- [x] Web/search tooling works for current research tasks. - [x] Web/search tooling works for current research tasks.
- [x] No Hermes dashboard/API is publicly exposed. - [x] No Hermes dashboard/API is publicly exposed.
- [ ] Backup restore has been tested into a non-production profile. - [x] Backup restore has been tested into a non-production profile.
- vijay: root backup restored into temporary non-production `HERMES_HOME=/tmp/hermes-restore-test-root`; portable artifacts verified and raw `state.db` absent. - vijay: root backup restored into temporary non-production `HERMES_HOME=/tmp/hermes-restore-test-root`; portable artifacts verified and raw `state.db` absent.
- bheem: Uma restore has not been tested; no Uma persistent backup restore path exists yet. - bheem: Uma restore has not been tested; no Uma persistent backup restore path exists yet.
- [x] Core ByteLyst Hermes procedures exist as docs or skills. - [x] Core ByteLyst Hermes procedures exist as docs or skills.

View File

@ -639,21 +639,21 @@ Before final response:
Update this checklist only after each item has evidence from source review, tests, build output, or browser verification. Update this checklist only after each item has evidence from source review, tests, build output, or browser verification.
- [ ] Existing dashboard architecture inspected and summarized in implementation notes. - [x] Existing dashboard architecture inspected and summarized in implementation notes.
- [ ] Data model and mock service implemented outside UI components. - [x] Data model and mock service implemented outside UI components.
- [ ] `/hermes` mission control route renders from the service layer. - [x] `/hermes` mission control route renders from the service layer.
- [ ] `/hermes/tasks` ledger has search, filters, sorting, pagination, expandable details, and JSON export. - [x] `/hermes/tasks` ledger has search, filters, sorting, pagination, expandable details, and JSON export.
- [ ] `/hermes/tasks/[id]` detail route shows summary, timeline, execution details, and learning sections. - [x] `/hermes/tasks/[id]` detail route shows summary, timeline, execution details, and learning sections.
- [ ] `/hermes/products` portfolio route includes priority, attention, no-recent-activity, repeated-failure, and recently-shipped views. - [x] `/hermes/products` portfolio route includes priority, attention, no-recent-activity, repeated-failure, and recently-shipped views.
- [ ] `/hermes/history` route includes historical analytics with charts or accessible visual bars. - [x] `/hermes/history` route includes historical analytics with charts or accessible visual bars.
- [ ] `/hermes/agents` route shows agent/tool/integration health. - [x] `/hermes/agents` route shows agent/tool/integration health.
- [ ] `/hermes/settings` route shows editable-looking configuration panels and import/export affordances backed by mock data. - [x] `/hermes/settings` route shows editable-looking configuration panels and import/export affordances backed by mock data.
- [ ] Documentation created or updated with routes, run commands, mock data locations, and real telemetry integration plan. - [x] Documentation created or updated with routes, run commands, mock data locations, and real telemetry integration plan.
- [ ] Lint passes or any pre-existing lint failures are explicitly identified. - [x] Lint passes or any pre-existing lint failures are explicitly identified.
- [ ] Typecheck passes. - [x] Typecheck passes.
- [ ] Unit/component tests pass. - [x] Unit/component tests pass.
- [ ] Production build passes. - [x] Production build passes.
- [ ] E2E or browser smoke verification covers all new routes with no console errors. - [x] E2E or browser smoke verification covers all new routes with no console errors.
- [ ] Responsive layout checked at desktop and mobile widths. - [ ] Responsive layout checked at desktop and mobile widths.
Known roadmap assumptions to handle safely during implementation: Known roadmap assumptions to handle safely during implementation: