Skip to content

fix(hermes): store dashboard home as a profile - #7892

Open
deepujain wants to merge 19 commits into
NVIDIA:mainfrom
deepujain:fix/7200-hermes-dashboard-profile
Open

fix(hermes): store dashboard home as a profile#7892
deepujain wants to merge 19 commits into
NVIDIA:mainfrom
deepujain:fix/7200-hermes-dashboard-profile

Conversation

@deepujain

@deepujain deepujain commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Hermes Web Dashboard state now uses the canonical ~/.hermes/profiles/dashboard-home profile location.
Startup preserves existing installations by moving the legacy dashboard home only when the destination is absent or empty.

Related Issue

Fixes #7200

Changes

  • Use profiles/dashboard-home in the Hermes image, startup path, runtime inference reseed, update tooling, live contracts, and user documentation.
  • Keep the legacy state directory in snapshots so rebuilds can restore it before startup migration.
  • Add a no-follow migration in the existing dashboard seeder because image defaults alone cannot move state restored from older snapshots.
  • Refuse to merge two populated profiles or follow a legacy symlink, preserving both locations for manual recovery.
  • Protect the migration with real-process filesystem tests in test/seed-hermes-dashboard-config.test.ts.
  • Cover the live rebuild path from legacy dashboard-home backup through canonical profile restore, startup migration, and legacy-directory removal.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification:
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Codex Desktop reviewed state preservation, no-follow path handling, collision behavior, and the dashboard privilege boundary.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: Updated docs/manage-sandboxes/backup-restore.mdx and docs/manage-sandboxes/runtime-controls.mdx for Hermes dashboard-profile permissions and Shields behavior. Independent review verified terminology, structure, voice, code-sample presentation, behavioral accuracy, docs ownership, Hermes variant scoping, and security-risk ordering. Focused tests, repository checks, CLI build and type checking, semantic E2E validation, docs synchronization, docs build, and security re-review passed.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit: Not applicable
  • Station profile/scenario: Not applicable
  • Result: Not applicable
  • Supporting evidence: Not applicable

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — migration and runtime suites passed 59 tests, including post-migration symlink-swap and fail-closed removal-race regressions; updater coverage passed 6 tests; the existing live E2E semantic-contract suite passed 15 tests; Advisor remediation passed 34 focused rebuild-Hermes tests, semantic E2E validation, and E2E live-test collection.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Additional validation: npm run build:cli, npm run typecheck:cli, npm run lint, npm run docs, and npm run validate:pr passed. Live E2E was not run because it mutates real Docker, OpenShell, and provider resources.


Signed-off-by: Deepak Jain deepujain@gmail.com

Summary by CodeRabbit

  • New Features
    • Hermes dashboard state now uses the canonical /sandbox/.hermes/profiles/dashboard-home/ directory.
  • Bug Fixes
    • Legacy dashboard state is safely migrated when appropriate, with unsafe or conflicting migrations rejected.
    • Route mirroring, reseeding, and installed-copy checks now recognize the canonical location.
  • Documentation
    • Updated state management, transfer, backup, troubleshooting, and workflow guidance.
  • Tests
    • Expanded coverage for migration, security checks, and profile-based dashboard behavior.

@copy-pr-bot

copy-pr-bot Bot commented Jul 30, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Hermes now stores the dashboard profile under .hermes/profiles/dashboard-home. Startup migrates safe legacy state, reseeding and tests use the new path, installed-copy checks recognize the layout, and documentation describes the migration.

Changes

Hermes dashboard profile

Layer / File(s) Summary
Layout and legacy profile migration
agents/hermes/Dockerfile, agents/hermes/manifest.yaml, agents/hermes/start.sh, agents/hermes/seed-dashboard-config.py
The image and entrypoint use profiles/dashboard-home. Startup validates the destination, migrates safe legacy state, and performs descriptor-relative no-follow I/O.
Reseeding and host integration
src/lib/sandbox/config.ts, src/lib/actions/inference-set.ts, src/lib/sandbox/hermes-dashboard-reseed.test.ts
Host reseeding checks the canonical profile, falls back to the legacy path, and validates migration and inspection failures.
Runtime and migration validation
scripts/update-hermes-agent.sh, test/e2e/live/*, test/hermes-start-config-integrity.test.ts, test/seed-hermes-dashboard-config.test.ts, test/update-hermes-agent-script.test.ts
Tests cover the new location, successful migration, populated-destination refusal, symlink refusal, and anchored writes.
Dashboard profile documentation
docs/inference/switch-providers.mdx, docs/manage-sandboxes/*.mdx, docs/reference/{commands,troubleshooting}.mdx
Documentation uses the new dashboard profile path and describes migration and refusal behavior.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested labels: area: sandbox, area: docs, area: packaging

Suggested reviewers: cv

Sequence Diagram(s)

sequenceDiagram
  participant HermesEntrypoint
  participant DashboardSeeder
  participant LegacyProfile
  participant CurrentProfile
  HermesEntrypoint->>DashboardSeeder: invoke startup seeding
  DashboardSeeder->>LegacyProfile: inspect legacy dashboard-home
  DashboardSeeder->>CurrentProfile: migrate when destination is absent or empty
  DashboardSeeder-->>HermesEntrypoint: continue seeding or exit 1
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR moves dashboard-home to profiles/dashboard-home and adds migration, backup/restore, runtime, documentation, and test coverage required by [#7200].
Out of Scope Changes check ✅ Passed The changes support the dashboard profile relocation, including migration safety, runtime updates, documentation, snapshot handling, and related tests.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: storing the Hermes dashboard home as a profile.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / low confidence
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions
Status: PR review advisor failed: PR review advisor SDK execution failed: session: omitted required tool result(s): pr_review_git_diff; scope-risk-map-analysis omitted required analysis; turn: scope-risk-map-analysis: omitted required tool result(s): pr_review_git_diff; scope-risk-map-analysis omitted required analysis

Model lanes

  • GPT-5.6 Terra (primary): Failed
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 1 blocker · 2 warnings · 0 suggestions

Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-inference, cloud-onboard, full-e2e, hermes-e2e, hermes-inference-switch, managed-image-multiarch-startup, security-posture, bedrock-runtime-compatible-anthropic, channels-stop-start, dashboard-remote-bind, hermes-shields-config, inference-routing, network-policy, onboard-repair, onboard-resume, rebuild-hermes, rebuild-hermes-stale-base, rebuild-openclaw, state-backup-restore

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@agents/hermes/seed-dashboard-config.py`:
- Around line 182-185: The migration path around os.rename in
seed-dashboard-config.py must safely create and validate profiles_dir before
renaming legacy_home when both the canonical profiles directory and
dashboard-home destination are absent. Update the migration test in
test/seed-hermes-dashboard-config.test.ts to cover that state, verifying the
public entrypoint reaches the replacement path and the superseded path does not
continue executing.

In `@docs/manage-sandboxes/backup-restore.mdx`:
- Line 43: Update docs/manage-sandboxes/backup-restore.mdx at lines 43-43 to
state that migration occurs only when the profiles destination is absent or
empty and the legacy path is not a symlink, including that unsafe merges are
refused. Update docs/manage-sandboxes/transfer-state-manually.mdx at lines 54-55
with commands for manually recovering preserved files from
.hermes/dashboard-home/, while retaining the prohibition on copying .env and
config.yaml.

In `@src/lib/sandbox/config.ts`:
- Line 725: Update the dashboard profile detection and inference flow around
dashboardHome to also inspect the legacy profile path and invoke the existing
seeder when only that profile exists. Return “absent” only when neither
canonical nor legacy profile exists, and ensure migration removes or prevents
execution through the old path. Add tests through public entrypoints proving
migration reaches the canonical path and the legacy path is deleted or cannot
execute.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: de28addd-b031-41c7-93f5-fcbf3712fa16

📥 Commits

Reviewing files that changed from the base of the PR and between 4dcb89e and 614adda.

📒 Files selected for processing (19)
  • agents/hermes/Dockerfile
  • agents/hermes/manifest.yaml
  • agents/hermes/seed-dashboard-config.py
  • agents/hermes/start.sh
  • docs/inference/switch-providers.mdx
  • docs/manage-sandboxes/backup-restore.mdx
  • docs/manage-sandboxes/transfer-state-manually.mdx
  • docs/manage-sandboxes/workspace-files.mdx
  • docs/reference/commands.mdx
  • docs/reference/troubleshooting.mdx
  • scripts/update-hermes-agent.sh
  • src/lib/actions/inference-set.ts
  • src/lib/sandbox/config.ts
  • src/lib/sandbox/hermes-dashboard-reseed.test.ts
  • test/e2e/live/hermes-inference-switch.test.ts
  • test/e2e/live/hermes-root-entrypoint-smoke.test.ts
  • test/hermes-start-config-integrity.test.ts
  • test/seed-hermes-dashboard-config.test.ts
  • test/update-hermes-agent-script.test.ts

Comment thread agents/hermes/seed-dashboard-config.py Outdated
Comment thread docs/manage-sandboxes/backup-restore.mdx Outdated
Comment thread src/lib/sandbox/config.ts
@deepujain

Copy link
Copy Markdown
Contributor Author

Added the missing helper docstrings and extended the Hermes root-entrypoint smoke to migrate a real legacy dashboard profile while preserving its state, ownership, and modes. Focused migration and E2E contract tests pass on 6c3fe92.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
test/e2e/live/hermes-root-entrypoint-smoke.test.ts (1)

346-367: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Cover recursive profile state in the migration fixture.

The legacy setup and assertion cover only MEMORY.md. A regression that loses nested profile files or the dashboard database could still pass. Add a representative nested/database artifact and assert its content, ownership, and mode after migration.

This follows the PR objective to preserve profile state, including databases.

Also applies to: 417-420

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/live/hermes-root-entrypoint-smoke.test.ts` around lines 346 - 367,
The assertLegacyDashboardMigration fixture currently verifies only MEMORY.md;
expand the legacy setup to include a representative nested profile file and
dashboard database, then assert both migrated artifacts’ contents, ownership,
and permissions alongside the existing checks. Ensure the assertions target the
migrated profiles/dashboard-home location and preserve the existing migration
validations.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@test/e2e/live/hermes-root-entrypoint-smoke.test.ts`:
- Around line 346-367: The assertLegacyDashboardMigration fixture currently
verifies only MEMORY.md; expand the legacy setup to include a representative
nested profile file and dashboard database, then assert both migrated artifacts’
contents, ownership, and permissions alongside the existing checks. Ensure the
assertions target the migrated profiles/dashboard-home location and preserve the
existing migration validations.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: e6b40f5d-9710-4da6-834e-0a999f45cddd

📥 Commits

Reviewing files that changed from the base of the PR and between 614adda and 6c3fe92.

📒 Files selected for processing (2)
  • agents/hermes/seed-dashboard-config.py
  • test/e2e/live/hermes-root-entrypoint-smoke.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • agents/hermes/seed-dashboard-config.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@agents/hermes/seed-dashboard-config.py`:
- Around line 214-218: Replace the check-then-os.rename flow around
_ensure_profile_parent with no-follow directory-descriptor operations: open and
validate the canonical profiles_dir, retain that descriptor, and perform the
rename relative to it. Refuse symlink redirection and ensure subsequent seeding
uses the validated descriptor or equivalent descriptor-relative paths, so the
mutated parent cannot change between validation and migration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 280037e4-93f4-4f37-ae07-ff21df6d28eb

📥 Commits

Reviewing files that changed from the base of the PR and between 6c3fe92 and 1332eb3.

📒 Files selected for processing (6)
  • agents/hermes/seed-dashboard-config.py
  • docs/manage-sandboxes/backup-restore.mdx
  • docs/manage-sandboxes/transfer-state-manually.mdx
  • src/lib/sandbox/config.ts
  • src/lib/sandbox/hermes-dashboard-reseed.test.ts
  • test/seed-hermes-dashboard-config.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/manage-sandboxes/backup-restore.mdx
  • docs/manage-sandboxes/transfer-state-manually.mdx

Comment thread agents/hermes/seed-dashboard-config.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@agents/hermes/seed-dashboard-config.py`:
- Around line 205-233: Wrap the os.rmdir call in _prepare_dashboard_destination
with an OSError handler. On failure, emit the established security/dashboard
refusal message including the exception and return (False, None), preserving
fail-closed behavior for races such as ENOTEMPTY or ENOTDIR.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1554fbaa-c2c8-4aab-b8a7-e5a7aa23d9bb

📥 Commits

Reviewing files that changed from the base of the PR and between 8e7bca9 and 75c508f.

📒 Files selected for processing (2)
  • agents/hermes/seed-dashboard-config.py
  • test/seed-hermes-dashboard-config.test.ts

Comment thread agents/hermes/seed-dashboard-config.py Outdated
@deepujain

Copy link
Copy Markdown
Contributor Author

Docstrings are updated and the branch is ready for another pass. @coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

@deepujain, starting another review pass for the updated branch.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
agents/hermes/seed-dashboard-config.py (1)

807-811: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Compare normalized directories before reusing the validated descriptor.

os.path.dirname(argv[4]) == os.path.dirname(dst) is a textual match, so an equivalent-but-differently-spelled env destination (e.g. .../dashboard-home/./gateway.env) silently drops to the path-based write inside _atomic_write_no_follow. That fallback still applies O_NOFOLLOW to the final component, so it is a safe degradation rather than a hole — but normalizing keeps the intended anchoring in force.

♻️ Suggested hardening
     env_parent_fd = (
         dashboard_fd
-        if len(argv) == 5 and os.path.dirname(argv[4]) == os.path.dirname(dst)
+        if len(argv) == 5
+        and os.path.normpath(os.path.dirname(argv[4])) == os.path.normpath(os.path.dirname(dst))
         else None
     )
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@agents/hermes/seed-dashboard-config.py` around lines 807 - 811, Update the
env_parent_fd selection in the dashboard configuration setup to compare
normalized parent directories for argv[4] and dst rather than their raw textual
forms. Preserve the existing len(argv) == 5 guard and reuse dashboard_fd
whenever both destinations resolve to the same directory, including equivalent
paths containing components such as "./".

Source: Path instructions

test/seed-hermes-dashboard-config.test.ts (1)

250-295: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Stub os.rmdir for keyword and positional calls.

fail_dashboard_removal(name, *, dir_fd=None) only accepts dir_fd as keyword-only, so any positional os.rmdir(name, dir_fd) reached during the run would raise TypeError instead of the intended ENOTEMPTY, turning a behavioral assertion into an incidental pass on a traceback-free path. Current production code only calls it with keywords, so this is future-proofing rather than a live defect.

♻️ Suggested tweak
-def fail_dashboard_removal(name, *, dir_fd=None):
+def fail_dashboard_removal(name, *args, **kwargs):
     if name == "dashboard-home":
         raise OSError(errno.ENOTEMPTY, "directory changed")
-    return original_rmdir(name, dir_fd=dir_fd)
+    return original_rmdir(name, *args, **kwargs)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/seed-hermes-dashboard-config.test.ts` around lines 250 - 295, Update the
fail_dashboard_removal stub in the test harness to accept both positional and
keyword forms of the dir_fd argument while preserving the intentional ENOTEMPTY
failure for dashboard-home. Continue forwarding other calls to original_rmdir so
the test remains focused on _prepare_dashboard_destination behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@agents/hermes/seed-dashboard-config.py`:
- Around line 807-811: Update the env_parent_fd selection in the dashboard
configuration setup to compare normalized parent directories for argv[4] and dst
rather than their raw textual forms. Preserve the existing len(argv) == 5 guard
and reuse dashboard_fd whenever both destinations resolve to the same directory,
including equivalent paths containing components such as "./".

In `@test/seed-hermes-dashboard-config.test.ts`:
- Around line 250-295: Update the fail_dashboard_removal stub in the test
harness to accept both positional and keyword forms of the dir_fd argument while
preserving the intentional ENOTEMPTY failure for dashboard-home. Continue
forwarding other calls to original_rmdir so the test remains focused on
_prepare_dashboard_destination behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 657d1429-92c0-4df1-a39d-1c3bf8fdef15

📥 Commits

Reviewing files that changed from the base of the PR and between 8e7bca9 and 394fab6.

📒 Files selected for processing (2)
  • agents/hermes/seed-dashboard-config.py
  • test/seed-hermes-dashboard-config.test.ts

@deepujain

Copy link
Copy Markdown
Contributor Author

The two follow-up hardening notes are addressed and validated. @coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

@deepujain, starting a new review pass for the updated hardening changes.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@deepujain
deepujain force-pushed the fix/7200-hermes-dashboard-profile branch from 6720a64 to a1e9b73 Compare July 30, 2026 15:25
@deepujain

Copy link
Copy Markdown
Contributor Author

Rebased onto current main. Focused tests and npm run validate:pr pass; all commits remain verified.

@deepujain

Copy link
Copy Markdown
Contributor Author

Rebased onto current main and revalidated the full profile migration. The Python seeder suite, focused CLI tests, and PR validation pass.

@wscurran wscurran added area: ui Web UI, terminal display, visual layout, or UX behavior bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior labels Jul 31, 2026
@wscurran

Copy link
Copy Markdown
Contributor

✨ Thanks for the PR. This fixes the Hermes dashboard home migration by storing it as a canonical profile with real-process filesystem tests. Maintainers will review the migration logic, legacy state handling, and test coverage.


Related open issues:

@apurvvkumaria apurvvkumaria left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed exact head 4a6b651. The dashboard profile migration preserves legacy state, refuses symlink and dual-populated ambiguity, anchors subsequent writes to validated directory descriptors, retains legacy snapshot coverage, and updates runtime, reseed, documentation, and E2E paths consistently. I found no blocking correctness, security, compatibility, or data-loss issue. The failed E2E gate timed out waiting for trusted verdict infrastructure and does not identify a change-attributable failure.

Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
Signed-off-by: Deepak Jain <deepujain@gmail.com>
@deepujain
deepujain force-pushed the fix/7200-hermes-dashboard-profile branch from 4a6b651 to 46c0bf7 Compare August 4, 2026 07:49
@deepujain

Copy link
Copy Markdown
Contributor Author

Rebased on current main. The dashboard migration suites and full PR validation pass, and all commits are verified. @coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@deepujain, I will review the rebased changes and the dashboard profile migration updates.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@deepujain

Copy link
Copy Markdown
Contributor Author

Synced with latest main and kept the new legacy Hermes restore coverage. Focused migration tests and PR validation pass; CI is rerunning.

Comment thread agents/hermes/seed-dashboard-config.py Fixed
Comment thread agents/hermes/seed-dashboard-config.py Fixed
Comment thread test/seed-hermes-dashboard-config.test.ts Fixed
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
…oard-profile

# Conflicts:
#	scripts/state-dir-guard.py
#	test/state-dir-guard.test.ts
Comment thread test/state-dir-guard.test.ts Fixed
Comment thread test/state-dir-guard.test.ts Fixed
jyaunches and others added 4 commits August 4, 2026 12:21
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@deepujain

Copy link
Copy Markdown
Contributor Author

Synced with current main while preserving Julie's dashboard hardening series. All commits are verified and CodeRabbit is clean; CI is rerunning.

@deepujain

Copy link
Copy Markdown
Contributor Author

Synced with today's main while preserving the dashboard hardening series. All commits remain verified; advisors and E2E are still running.

@jyaunches
jyaunches enabled auto-merge (squash) August 5, 2026 00:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui Web UI, terminal display, visual layout, or UX behavior bug-fix PR fixes a bug or regression integration: hermes Hermes integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[hermes] Treat dashboard-home as a profile

6 participants