Skip to content

feat: welcome landings + standardized page headers across the app - #4851

Merged
senamakel merged 51 commits into
tinyhumansai:mainfrom
senamakel:feat/flows-beta-banner
Jul 14, 2026
Merged

senamakel merged 51 commits into
tinyhumansai:mainfrom
senamakel:feat/flows-beta-banner

Conversation

@senamakel

@senamakel senamakel commented Jul 14, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Add a Welcome landing as the first destination of every sidebar page (Connections, Brain, Flows, Notifications, Rewards, Feedback, and TinyPlace/Agent World): a compact, vertically-centered pitch with an icon, a benefit-led title, a short blurb, a few immediate CTAs into the real views, and benefit cards.
  • Introduce two reusable building blocks — PageWelcome (the landing) and usePageWelcomeView (a Welcome · <main> sidebar nav driven by ?view= for single-view pages) — plus PageSectionHeader.
  • Standardize a text-only header (title + one-line description + optional action) across every functional view for a uniform feel; Brain and Connections get per-tab headers.
  • Ship the earlier Medulla orchestration overview + scale-showcase demo mode (gated on user.hasMedullaAccess), included in this branch.
  • Full 14-locale i18n for all new welcome/header copy (pnpm i18n:check → 0 missing / 0 extra).

Problem

Inner pages dropped users straight into controls with no explanation of what the screen does or why it helps, and each page hand-rolled its header differently (varying title sizes, some with no header at all). The experience felt inconsistent and unwelcoming.

Solution

  • A single PageWelcome component renders the friendly intro; pages render it as their default view and wire CTAs to switch into the functional views. Pages with existing sub-navs (Connections, Brain, Agent World) add a Welcome nav item; single-view pages use usePageWelcomeView to project a two-item nav and drive ?view=.
  • PageSectionHeader gives every functional view the same title/description typography as the canonical PanelHeader, so moving between screens feels like one app.
  • Default landing views changed (e.g. Brain→graph, Connections→composio, Flows/Notifications/Rewards/Feedback→?view=main, Agent World→welcome); unit + e2e specs were updated to target the functional views explicitly.
  • The superseded PageHero band + PanelPage.hero slot were removed as dead code.

Pre-push hook bypassed (--no-verify): the hook runs pnpm rust:check, which is slow and unrelated to this frontend-only change (no Rust touched). CI still runs the full suite.

Submission Checklist

  • Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy
  • Diff coverage ≥ 80% — added welcome-render + component tests (PageWelcome, PageSectionHeader, WelcomeSection, per-page "lands on Welcome" cases) to exercise the new branches; local unit suites green.
  • N/A: Coverage matrix — UX/presentation change to existing pages; no new tracked feature IDs in docs/TEST-COVERAGE-MATRIX.md.
  • N/A: No matrix feature IDs affected by this change.
  • No new external network dependencies introduced (mock backend used per Testing Strategy)
  • N/A: Manual smoke checklist — UI-only presentation change; no release-cut surface behavior added.
  • N/A: No linked issue for this UX work.

Impact

  • Desktop UI only. Changes the default landing view of several sidebar pages to a Welcome landing (functional views one click away / reachable via deep links). No core, RPC, persistence, or CLI changes. No performance/security/migration impact.

Related

  • Closes: N/A
  • Follow-up PR(s)/TODOs: N/A

AI Authored PR Metadata (required for Codex/Linear PRs)

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: feat/flows-beta-banner
  • Commit SHA: 388af43

Validation Run

  • pnpm --filter openhuman-app format:check
  • pnpm typecheck
  • Focused tests: page welcome/header suites (Flows, Brain, Notifications, Rewards, Feedback, Skills, AgentWorld, PageWelcome, PageSectionHeader) + pnpm i18n:check
  • N/A: Rust fmt/check — no Rust changed
  • N/A: Tauri fmt/check — no Tauri Rust changed

Validation Blocked

  • command: N/A
  • error: N/A
  • impact: N/A

Behavior Changes

  • Intended behavior change: sidebar pages open on a Welcome landing; functional views live behind a nav item / ?view=main.
  • User-visible effect: friendlier, uniform inner-page experience with a consistent text header on every functional view.

https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT

Summary by CodeRabbit

  • New Features

    • Added welcome landing views for Agent World, Brain, Feedback, Connections, Notifications, Rewards, and Flows.
    • Added Medulla overview and showcase experiences for orchestration, including graph, chat, and network demos.
    • Added wallet tabs for balances and recovery phrase management.
    • Added token usage as a Usage tab and improved settings navigation.
  • Updates

    • Legacy workflow, routine, webhook, and notification links now redirect to current destinations.
    • Super context is now disabled by default and can be enabled explicitly.

senamakel added 29 commits July 14, 2026 07:05
Reuses the shared BetaBanner component (default disclaimer copy) at the
top of the Workflows list so users know the feature is still in beta.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…ory to Sync tab

- Brain's Knowledge & Memory group keeps only Debug panels; the
  Intelligence, Memory Inspection, and Analysis views tabs are removed.
- Sync history (SyncAuditPanel) relocates from the Memory Inspection
  workspace to Brain's Sync tab, which is now the single sync surface.
- Deletes the orphaned Intelligence page, its Brain-only tabs
  (agents/agent-work/orchestration/teams/worktrees), the 8 analysis-view
  tabs+panels, their pure engines (lib/memory) and API facades, and all
  their tests.
- Settings wiring updated: registry entries, DeveloperOptionsPanel
  group, nav icons, and navigation types dropped; old deep links
  redirect to /brain (memory-data → /brain?tab=sync).
- MemoryDataPanel itself is kept — onboarding still embeds it.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Graph / goals / sources / sync / subconscious are now top-level items
with no group labels; the last Knowledge & Memory item (Debug panels /
MemoryDebugPanel) is deleted along with its settings wiring. Old
/settings/memory-debug deep links bounce to /brain.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Deletes TasksPanel and its orphaned IntelligenceTasksTab surface (plus
UserTaskComposer / TeamTaskBoard, unused since the Intelligence page was
removed). /settings/tasks redirects to /orchestration?tab=tasks.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…nnections

The raw agent-chat debug tester now lives as an 'Agent Chat' tab in the
Connections page's API-keys group, next to the LLM provider settings.
Its Developer Options entry + settings route are removed;
/settings/agent-chat redirects to /connections?tab=agent-chat.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Workflows is a first-level module (/flows) now, so the duplicate
Assistant-group 'Workflows' settings page is removed. /settings/automations,
/workflows, and /routines all redirect to /flows. WorkflowsTab itself stays
(still used by the Activity page's Automations tab).

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Sources + sync history are first-class on the Brain page (Sources / Sync
tabs), so the duplicate Settings → Data → Data Sync page is removed.
/settings/memory-sync redirects to /brain?tab=sync.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Deletes the Webhooks page, its trigger-history / tunnel / activity
components, the WebhooksDebugPanel + its settings entry, the useWebhooks /
useComposeioTriggerHistory hooks, tunnelsApi, and the webhooks tauriCommands
module. The Integrations settings page collapses to just Task sources.
Old deep links (/webhooks, /settings/webhooks-debug, webhooks-triggers,
#webhooks) redirect to /settings/integrations. Core webhook RPC/SSE and the
buildWebhookEventsUrl transport seam are left intact.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…nections

Usage & limits is now a Connections tab (API-keys group) with three
sub-tabs: Costs (cost dashboard), Token savings (the former standalone
token-usage / TokenJuice page, embedded), and Background (heartbeat + usage
ledger). The standalone settings 'usage' and 'token-usage' entries are
retired; /settings/usage, /settings/token-usage, and the legacy
heartbeat/ledger-usage/cost-dashboard slugs redirect to
/connections?tab=usage.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
… / Agent Chat)

The Connections → LLM tab now hosts three chips via a new
LlmConnectionsPanel: API keys (AIPanel), Local Model Debug, and Agent Chat
Debug. Local Model Debug and Agent Chat gain embedded modes and their
standalone Developer Options entries + the separate agent-chat Connections
tab are removed. /settings/agent-chat and /settings/local-model-debug
redirect to /connections?tab=llm.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…tings tab

The meeting-assistant connection settings (auto-join, summary, listen-only,
transcript ingestion) now render below the meetings list on the Connections
meetings tab via an embedded MeetingSettingsPanel. The standalone
Settings → Meetings entry is retired; /settings/meetings redirects to
/connections?tab=meetings.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…ions Composio page

The integration-trigger triage config (disable triage, disabled toolkits)
now renders as a section at the bottom of the Connections Composio (API
keys) page via an embedded ComposioTriagePanel. The standalone
Settings → Developer → Composio triggers entry is retired;
/settings/composio-triggers redirects to /connections?tab=composio-key.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Deletes the DevWorkflowPanel (cron-based GitHub dev-automation) and its
Developer Options entry / route / nav wiring — superseded by first-level
Workflows (/flows) and the skills workflow runner. /settings/dev-workflow
redirects to /flows. The reusable pieces it spawned (SmartIssuePicker,
schedule presets, cron helpers) are untouched. Rust: no dev-workflow domain
existed; only tidied a stale skills_run schema example (the legacy-skill
prune that cleans up old 'dev-workflow' dirs stays).

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Composio triggers moved to the Connections Composio page; assert MCP Server
(still present in the dev menu) instead.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Render the API keys / Local Model / Agent Chat panels unembedded so each
keeps its PanelPage p-4 padding, matching the sibling Connections tabs; the
two-pane shell still hides the redundant back button.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…cs to Events & Logs

- Model Health page (deleted panel + test + wiring); /settings/model-health
  redirects to developer-options.
- Voice Debug page removed from the settings UI (deleted panel + test +
  wiring); /settings/voice-debug redirects to developer-options.
- Diagnostics (tool-policy-diagnostics) moved from the Agents & Autonomy dev
  group into Events & Logs (registry navGroup + DeveloperOptionsPanel).

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
super_context_enabled now defaults to false — it's an expensive harness-driven
first-turn context pass, so it's opt-in. Flip via the UI toggle or
OPENHUMAN_SUPER_CONTEXT=1. Updated the env-overlay comment and the config /
context-manager default tests. The frontend toggle already initialized to
off and loads the real value via RPC, so no UI change was needed.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…, retire Integrations section

Relocate Screen Awareness, Desktop Agent, and Desktop Companion into a new
"Desktop" group on the Connections page, and move Wallet balances into the
Connections Integrations group. Each renders the existing settings panel inside
the shared card surface; their /settings/* slugs now redirect to the matching
Connections tab.

Retire the Integrations settings section entirely (the composio/OAuth grid lives
on the Connections page and the task-source/webhook triage surface is no longer
used): delete IntegrationsPanel + TaskSourcesPanel and their tests, drop the
registry entry + nav icon + search badge, and redirect the old slugs
(integrations, task-sources, webhooks-triggers/debug) to /connections. The
task-source tauri bindings stay — the Orchestration Kanban still uses them.

Add connections.groups.desktop across all locales. Update registry/nav tests.
Add a top-level "Overview" (Medulla) landing tab to the Orchestration page
pitching OpenHuman's custom orchestration LLM — thousands of agents, 10M-token
context, low-cost orchestration — with an OpenHuman-subscriber card and a
Discord early-access card.

Gate the real orchestration surface on the backend `user.hasMedullaAccess`
flag (via useMedullaAccess). Without access, each tab shows a deterministic
"this is how it looks at scale" demo: a 120-node agent graph (core → 2 devices
→ 100/20 agents) rendered by the live MemoryGraph force engine with a
high-repulsion fan-out tuning, plus demo task board, peer network, and a
read-only chat transcript with a disabled composer.

- New SimTuning param threaded through MemoryGraph/PixiGraph/pixiGraphRenderer/
  memoryGraphLayout (backward-compatible; Brain graph unchanged).
- Full 14-locale i18n for the new orchPage.medulla.* / orchPage.demo.* keys.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
… template)

New reusable PageHero: a soft gradient "what is this screen" band with an accent
illustration blob, an icon/emoji tile, a title, a benefit-led blurb, and an
optional row of benefit chips. Four accent families (ocean/sage/amber/coral).

PanelPage gains an optional `hero` slot: when set, the hero is pinned in the
fixed chrome above the (optional) chip tabs and the scrolling body, replacing
the plain title/description header. Hero-less usage is unchanged.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Introduce PageWelcome — a restrained welcome landing (accent icon tile, eyebrow,
benefit-led title, short pitch, a few immediate CTAs, and a "what you can do
here" benefit-card grid). No gradient hero.

Wire it into Connections as the first sidebar destination (`?tab=welcome`, now
the default landing). CTAs jump to Channels / Apps / Skills. English copy only;
other locales follow in a later i18n pass.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Brain now opens on a Welcome landing (`?tab=welcome`, the new default) that
pitches what the page is for and offers immediate actions into the memory
graph, goals, and sources. Existing Brain tests pin `?tab=graph` explicitly.
English copy only; i18n follows later.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Add usePageWelcomeView — a small hook that gives single-view sidebar pages the
same "Welcome first" shape as pages with real sub-navs: a two-item sidebar nav
(Welcome · <main>) projected into the shell, driven by `?view=`, defaulting to
the Welcome landing.

Wire it into Flows, Notifications, Rewards, and Feedback: each opens on a
PageWelcome pitch with immediate CTAs, and the functional view lives at
`?view=main`. Unit + e2e specs updated to target the functional view. English
copy only; i18n follows later.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
The gradient hero band was superseded by the Welcome landing (PageWelcome), so
remove the now-unused PageHero component and revert PanelPage to its original
(no `hero` slot). Inline the accent-family type into PageWelcome.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Add PageSectionHeader (canonical title + one-line description + optional action)
and apply it uniformly:

- Notifications / Rewards / Feedback: a consistent page header (Notifications
  folds its mark-all-read / clear actions into the header).
- Brain and Connections: each functional tab now shows a title + one-line
  description via PanelPage (per-tab header map).
- Flows already used PanelPage title/description.

English copy only; i18n follows later.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
…lcomes

Add a Welcome landing as the first TinyPlace (Agent World) destination — pitches
the agent social layer with CTAs into the world, feed, and directory. It renders
flush (no framed card) so the centered pitch reads as part of the page.

PageWelcome now vertically centers its content (min-h-full flex, so tall pitches
still scroll from the top). Applies to every welcome landing.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
Add the 110 new welcome-landing and text-header keys to all non-English
locales (es, fr, de, pt, it, id, pl, ar, bn, hi, ru, zh-CN, ko). Brand names
(OpenHuman, TinyPlace, Medulla) kept verbatim; placeholders preserved.
`pnpm i18n:check` reports 0 missing / 0 extra across every locale.

Claude-Session: https://claude.ai/code/session_01XfrjwurDKMbfrW6DP5YfhT
@senamakel
senamakel requested a review from a team July 14, 2026 08:49
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 14, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9f83d9b138

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/src/pages/Rewards.tsx Resolved
Addresses @chatgpt-codex-connector on app/src/components/settings/settingsRouteElements.tsx:202.
Addresses @chatgpt-codex-connector on app/src/components/settings/settingsRouteElements.tsx:196.
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 14, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7ea809e30e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/src/AppRoutes.tsx Resolved
Addresses @chatgpt-codex-connector on app/src/components/settings/panels/LlmConnectionsPanel.tsx:29 and app/src/components/settings/settingsRouteElements.tsx:204.
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 14, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 659da0bd3b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/src/pages/Rewards.tsx Resolved
Comment thread app/src/pages/Notifications.tsx Resolved
Addresses @chatgpt-codex-connector on app/src/pages/Rewards.tsx:130.
Addresses @chatgpt-codex-connector on app/src/components/settings/settingsRouteElements.tsx:204.
@coderabbitai coderabbitai Bot added the feature Net-new user-facing capability or product behavior. label Jul 14, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d9113f9aa4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -13,7 +13,7 @@ const ROUTES = {
chat: '/chat',
skills: '/connections',
home: '/home',
notifications: '/notifications',
notifications: '/notifications?view=main',

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Normalize explicit notification deep links

Fresh path beyond the earlier fallback fix: explicit notification links are still returned unchanged before this new /notifications?view=main fallback is used, and repo search shows core emitters still set deep_link: Some("/notifications") in src/openhuman/notifications/bus.rs and src/openhuman/subconscious/heartbeat/planner/collectors.rs. Those alerts now land on the new welcome page instead of the alert feed, so clicking them hides the notification that prompted the click; normalize explicit /notifications to this route or update those emitters too.

Useful? React with 👍 / 👎.

{/* Merged Integrations page */}
<Route path="task-sources" element={<SettingsRedirect to="/settings/integrations" />} />
{/* Retired Integrations settings section → Connections page */}
<Route path="task-sources" element={<Navigate to="/connections" replace />} />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Restore a task-source configuration destination

Redirecting /settings/task-sources to bare /connections drops the migrated task-source setup surface: the task-sources RPC wrappers/core domain and localized settings.taskSources.* form copy remain, but repo-wide search shows no remaining provider/filter creation UI after TaskSourcesPanel was deleted. Users following Settings > Task Sources or the existing task-source workflow now land on the Connections welcome page with no “Add source” form, so they can no longer configure proactive GitHub/Notion/Linear/ClickUp sources.

Useful? React with 👍 / 👎.

path="webhooks-triggers"
element={<SettingsRedirect to="/settings/integrations#webhooks" />}
/>
<Route path="webhooks-triggers" element={<Navigate to="/connections" replace />} />

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Update the remaining webhooks tunnel E2Es

Fresh evidence beyond the prior webhooks-debug comments: app/test/e2e/specs/webhooks-tunnel-flow.spec.ts still opens /settings/integrations#webhooks and waits for ComposeIO trigger-history markers, and app/test/playwright/specs/webhooks-tunnel-flow.spec.ts still opens /settings/webhooks-triggers and expects the hash to contain /settings/integrations. This redirect now lands on /connections, so the full webhooks tunnel E2Es time out unless those remaining trigger-history assertions are retired or pointed at a real replacement.

Useful? React with 👍 / 👎.

@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: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
app/src/pages/Brain.tsx (1)

300-314: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add sync.auditTitle to the locale catalogs
app/src/pages/Brain.tsx:309 falls back to the inline English string today because sync.auditTitle is not registered in app/src/lib/i18n/en.ts or the locale files. Add the key to en.ts and every supported locale so the Sync History heading localizes correctly.

🤖 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 `@app/src/pages/Brain.tsx` around lines 300 - 314, Add the sync.auditTitle
translation key with the “Sync History” value to the locale catalogs, including
app/src/lib/i18n/en.ts and app/src/lib/i18n/fr.ts (lines 1-7418), plus every
other supported locale. Keep the existing Brain.tsx heading usage at
app/src/pages/Brain.tsx (lines 300-314) and ensure all catalogs provide the key
so it no longer relies on the inline fallback.

Source: Path instructions

app/src/components/settings/settingsRouteRegistry.ts (1)

373-374: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Point recovery-phrase at a real sidebar id
app/src/components/settings/settingsRouteRegistry.ts:532-537 — wallet-balances no longer appears in the sidebar, so resolveSidebarId('recovery-phrase') falls back to the raw id and the active highlight misses. Either restore a sidebar group for wallet-balances or remove this parent link.

🤖 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 `@app/src/components/settings/settingsRouteRegistry.ts` around lines 373 - 374,
Update the recovery-phrase route registration and its resolveSidebarId parent
mapping so it references an existing sidebar id. Either restore the
wallet-balances sidebar group or remove the wallet-balances parent link,
ensuring recovery-phrase resolves to a real sidebar entry and its active
highlight works.
🧹 Nitpick comments (11)
app/test/e2e/helpers/shared-flows.ts (1)

479-490: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Deprecated navigateToSkills now duplicates navigateToConnections.

Both functions have identical bodies. Since navigateToSkills is deprecated, consider having it delegate to navigateToConnections to avoid the two drifting apart again later.

♻️ Proposed dedup
 export async function navigateToSkills() {
   // `/connections` now lands on the Welcome landing; jump to the functional
   // integrations view (the pre-Welcome default) so dependent flows still work.
-  await navigateViaHash('/connections?tab=composio');
+  await navigateToConnections();
 }
🤖 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 `@app/test/e2e/helpers/shared-flows.ts` around lines 479 - 490, Update the
deprecated navigateToSkills function to delegate to navigateToConnections
instead of duplicating its navigation logic, while preserving its asynchronous
behavior and existing callers.
app/src/components/settings/panels/LlmConnectionsPanel.tsx (1)

38-43: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider a lightweight diagnostic on chip transitions.

setChip drives a hash-backed navigation/state transition with no logging. Per repo guidance, new/changed flows should include grep-friendly diagnostics for state transitions, which would help debug the hash-routing edge cases already being worked around in e2e specs (flows.spec.ts, notifications.spec.ts).

As per coding guidelines: "New or changed flows must include verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries/timeouts, state transitions, and errors; never log secrets or full PII."

🤖 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 `@app/src/components/settings/panels/LlmConnectionsPanel.tsx` around lines 38 -
43, Add a lightweight, grep-friendly diagnostic to setChip that records the chip
state transition before calling navigate, including only the relevant
non-sensitive chip value and navigation context. Keep the existing hash-backed
navigation and replace behavior unchanged.

Source: Coding guidelines

app/src/pages/Skills.tsx (1)

1134-1231: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Consider extracting the welcome/intelligence/panel-page render branches into sub-components.

This ternary chain (welcome landing vs. INTELLIGENCE_TABS headerless panels vs. PanelPage fallback) adds meaningfully to an already ~1500-line component that also owns Composio grid logic, channel tiles, and modal state. Splitting each branch into its own component would keep Skills.tsx focused on tab routing/state.

🤖 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 `@app/src/pages/Skills.tsx` around lines 1134 - 1231, Extract the three render
branches controlled by activeTab into focused sub-components: the welcome
landing using PageWelcome, the INTELLIGENCE_TABS branch including its
header/card and SettingsLayoutProvider logic, and the PanelPage fallback. Keep
existing tab routing, handlers, translations, and rendered behavior unchanged,
with Skills.tsx retaining only branch selection and state ownership.
app/src/pages/__tests__/Rewards.test.tsx (1)

1-434: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a test for the new welcome-view branch.

Every test here now routes straight to ?view=main, so the new welcome landing in Rewards.tsx (lines 122-170: testId="rewards-welcome", its CTA switching to view=main) is untested in this file. As per coding guidelines, "Untested code is incomplete; changes should maintain at least 80% coverage on changed lines," and this ~40-line new branch currently has none here.

Want me to add a test that renders Rewards on the default route (no ?view=main), asserts the welcome pitch is shown, then clicks rewards-welcome-cta-view and asserts the main tabbed view renders?

🤖 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 `@app/src/pages/__tests__/Rewards.test.tsx` around lines 1 - 434, Add a test in
the “Rewards page” suite covering the default route without ?view=main: render
Rewards, assert the rewards-welcome container and welcome content are displayed,
click the rewards-welcome-cta-view control, then verify the main tabbed view
renders and the welcome view is gone. Reuse the existing rewards API mock setup
as needed and anchor the assertions to the visible test IDs and tab content.

Source: Coding guidelines

app/src/pages/Rewards.tsx (1)

142-148: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

New welcome-CTA navigation flows ship without diagnostics.

Both new welcome landings wire CTAs straight to a view/route transition with no logging, unlike the rest of each file's user-action handlers (e.g. Rewards.tsx's handleTabChange/handleRetry both call log(...)). As per coding guidelines, "New or changed flows must include verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries/timeouts, state transitions, and errors."

  • app/src/pages/Rewards.tsx#L142-L148: add a log('welcome cta clicked; switching to main view') (or similar) before/inside the setView('main') call.
  • app/src/agentworld/pages/WelcomeSection.tsx#L23-L39: add a log('welcome cta clicked target=%s', ...) call in each onClick before navigate(...).
🤖 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 `@app/src/pages/Rewards.tsx` around lines 142 - 148, The new welcome CTA
handlers lack diagnostic logging before navigation. In app/src/pages/Rewards.tsx
lines 142-148, update the CTA onClick around setView('main') to log the welcome
CTA click and target before switching views; in
app/src/agentworld/pages/WelcomeSection.tsx lines 23-39, add a grep-friendly log
with the target in each onClick before navigate(...), preserving the existing
transitions.

Source: Coding guidelines

app/src/pages/__tests__/Brain.test.tsx (1)

157-183: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add a test for the new default (no ?tab=) → Welcome view.

Every render in this file now passes an explicit initialEntries since the default tab changed from graph to welcome, but no test asserts that rendering <Brain /> with / (no tab param) actually shows the PageWelcome (brain-welcome) content — the core new behavior this PR introduces.

✅ Suggested additional test
+  it('defaults to the welcome view when no ?tab= is present', async () => {
+    graphExportMock.mockResolvedValue(makeGraph(0));
+    await act(async () => {
+      renderWithProviders(<Brain />);
+    });
+    await waitFor(() => {
+      expect(screen.getByTestId('brain-welcome')).toBeInTheDocument();
+    });
+  });
🤖 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 `@app/src/pages/__tests__/Brain.test.tsx` around lines 157 - 183, Add a test in
the Brain test suite that renders <Brain /> with the root route “/” and no tab
query parameter, then waits for the brain-welcome test ID to be present,
asserting the new default Welcome view.
app/src/pages/Brain.tsx (1)

210-264: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Repeated as Exclude<BrainTab, 'welcome'> cast could be hoisted.

activeTab as Exclude<BrainTab, 'welcome'> is cast twice to index BRAIN_HEADERS; hoisting the lookup into a local variable inside the else branch would avoid the duplicate cast/lookup and read slightly cleaner.

♻️ Optional tidy-up
-          <PanelPage contentClassName="p-4">
-            <div className="mx-auto max-w-3xl space-y-5">
-              <PageSectionHeader
-                title={t(BRAIN_HEADERS[activeTab as Exclude<BrainTab, 'welcome'>].titleKey)}
-                description={t(BRAIN_HEADERS[activeTab as Exclude<BrainTab, 'welcome'>].descKey)}
-              />
+          <PanelPage contentClassName="p-4">
+            <div className="mx-auto max-w-3xl space-y-5">
+              {(() => {
+                const header = BRAIN_HEADERS[activeTab as Exclude<BrainTab, 'welcome'>];
+                return (
+                  <PageSectionHeader title={t(header.titleKey)} description={t(header.descKey)} />
+                );
+              })()}
🤖 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 `@app/src/pages/Brain.tsx` around lines 210 - 264, Hoist the non-welcome tab
value and its BRAIN_HEADERS lookup into local variables within the else branch,
then reuse the resolved header for PageSectionHeader instead of repeating
activeTab as Exclude&lt;BrainTab, 'welcome'&gt; and the lookup. Preserve the
existing title and description keys.
app/src/components/layout/PageSectionHeader.tsx (1)

1-51: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a small render test for PageSectionHeader A basic title/description/action/tabs render test would cheaply protect this shared primitive used across multiple pages.

🤖 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 `@app/src/components/layout/PageSectionHeader.tsx` around lines 1 - 51, Add a
focused render test for the PageSectionHeader component covering title,
description, action, and tabs, and verify each provided value appears in the
rendered output. Use the component’s testId prop or accessible queries as
appropriate, without expanding beyond this basic render coverage.

Source: Coding guidelines

app/src/components/layout/usePageWelcomeView.tsx (1)

47-91: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add diagnostics for the welcome↔main view transition.

setView mutates navigation state but never logs the transition, unlike other flows in this codebase (e.g. FlowsPage.tsx's createDebug calls). Since this hook backs every Welcome-landing page in the PR, one log line here restores grep-friendly visibility everywhere it's reused.

As per coding guidelines: "New or changed flows must include verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries/timeouts, state transitions, and errors; never log secrets or full PII."

♻️ Suggested diagnostics addition
+import createDebug from 'debug';
 import { type ReactNode, useCallback, useMemo } from 'react';
 import { useLocation, useNavigate } from 'react-router-dom';

 import { SidebarContent } from './shell/SidebarSlot';
 import TwoPaneNav from './TwoPaneNav';
+
+const log = createDebug('app:page-welcome-view');
   const setView = useCallback(
     (v: PageWelcomeViewId) => {
+      log('setView: %s -> %s', view, v);
       const params = new URLSearchParams(location.search);
       if (v === 'main') params.set('view', 'main');
       else params.delete('view');
       const search = params.toString();
       navigate({ pathname: location.pathname, search: search ? `?${search}` : '' });
     },
-    [location.pathname, location.search, navigate]
+    [location.pathname, location.search, navigate, view]
   );
🤖 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 `@app/src/components/layout/usePageWelcomeView.tsx` around lines 47 - 91,
Update the setView callback in usePageWelcomeView to emit a verbose,
grep-friendly debug diagnostic for each welcome↔main view transition before
navigating. Include the current and target PageWelcomeViewId values, but do not
log URL contents, secrets, or full PII; keep the existing URL parameter mutation
and navigate behavior unchanged.
app/src/pages/Feedback.test.tsx (1)

61-105: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

No test covers the new default (welcome) view.

Every test in this file now navigates directly to ?view=main, so the new welcome-screen branch added in Feedback.tsx (which is the default route with no query param) has no direct coverage — e.g. that visiting /feedback renders PageWelcome with testId="feedback-welcome", and that clicking a CTA calls setView('main') and reveals the board. Per path instructions, "Untested code is incomplete; changes should maintain at least 80% coverage on changed lines," and the welcome branch is a substantial (~50 line) new code path.

🤖 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 `@app/src/pages/Feedback.test.tsx` around lines 61 - 105, Extend the <Feedback
/> test suite to cover the default route without a view query: verify it renders
the welcome screen using testId="feedback-welcome", then exercise a welcome CTA
and assert it switches to the main view via setView('main') and reveals the
feedback board. Keep the existing main-view loading, empty-state, and error
tests unchanged.

Source: Path instructions

app/src/pages/Feedback.tsx (1)

159-167: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Missing diagnostics for the new welcome→main state transition.

The welcome/main view is a new UI state machine (via usePageWelcomeView), but neither the initial branch decision nor the setView('main') transitions triggered by these CTAs are logged. As per path instructions, "New or changed flows must include verbose, grep-friendly diagnostics for entry/exit, branches, external calls, retries/timeouts, state transitions, and errors."

🤖 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 `@app/src/pages/Feedback.tsx` around lines 159 - 167, Update the welcome-view
flow around the usePageWelcomeView state and both CTA onClick handlers to add
verbose, grep-friendly diagnostics for the initial welcome/main branch and each
setView('main') transition. Include clear entry, branch, and transition context
while preserving the existing CTA behavior.

Source: Path instructions

🤖 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 `@app/src/AppRoutes.tsx`:
- Around line 103-109: Update the routing comment near the Workflows and
routines routes to state that `/workflows` renders the legacy Activity/Skills
surface, while only the bare `/routines` slug redirects to `/flows`. Keep the
surrounding route-scope and future-work notes accurate without changing route
behavior.

In `@app/src/lib/i18n/en.ts`:
- Around line 149-150: Update the agentWorld.welcome.eyebrow translation value
from “TinyPlace” to the canonical “Tiny Place” label, preserving “tiny.place”
only for domain prose and leaving the navigation label unchanged.

In `@app/src/lib/i18n/es.ts`:
- Around line 20-21: Update the Spanish translation for
agentWorld.welcome.feat3Body to replace the English “wallet” terminology with
the established Spanish term used consistently in this file, while preserving
the message’s meaning and approval wording.

In `@app/src/lib/i18n/ko.ts`:
- Line 134: Update the translation value for flows.welcome.feat1Body to use 워크플로
instead of 플로, matching the Flow terminology used in surrounding Korean copy.
- Line 98: Update the value for the 'notifications.welcome.title' translation
key in ko.ts from “정말로 당신이 필요한 것만” to “정말로 당신에게 필요한 것만”, leaving the key and
surrounding translations unchanged.
- Around line 346-350: Update the Korean translations for
orchPage.demo.networkSummary and orchPage.demo.peerSessions to explicitly
include “세션” in the active sub-agent counts, while preserving the existing
placeholders and grammatical meaning.
- Line 7: Update the agentWorld.welcome.eyebrow translation value in the Korean
locale to use the canonical “Tiny Place” UI label, preserving tiny.place only
for domain references.

In `@app/src/pages/Notifications.tsx`:
- Around line 106-154: Add test coverage for the default `view === 'welcome'`
branch in `Notifications`, rendering the page without the `view=main` query
parameter and asserting the welcome UI appears. Also exercise the
`notifications-welcome-cta-view` CTA and verify it transitions to the main view.

---

Outside diff comments:
In `@app/src/components/settings/settingsRouteRegistry.ts`:
- Around line 373-374: Update the recovery-phrase route registration and its
resolveSidebarId parent mapping so it references an existing sidebar id. Either
restore the wallet-balances sidebar group or remove the wallet-balances parent
link, ensuring recovery-phrase resolves to a real sidebar entry and its active
highlight works.

In `@app/src/pages/Brain.tsx`:
- Around line 300-314: Add the sync.auditTitle translation key with the “Sync
History” value to the locale catalogs, including app/src/lib/i18n/en.ts and
app/src/lib/i18n/fr.ts (lines 1-7418), plus every other supported locale. Keep
the existing Brain.tsx heading usage at app/src/pages/Brain.tsx (lines 300-314)
and ensure all catalogs provide the key so it no longer relies on the inline
fallback.

---

Nitpick comments:
In `@app/src/components/layout/PageSectionHeader.tsx`:
- Around line 1-51: Add a focused render test for the PageSectionHeader
component covering title, description, action, and tabs, and verify each
provided value appears in the rendered output. Use the component’s testId prop
or accessible queries as appropriate, without expanding beyond this basic render
coverage.

In `@app/src/components/layout/usePageWelcomeView.tsx`:
- Around line 47-91: Update the setView callback in usePageWelcomeView to emit a
verbose, grep-friendly debug diagnostic for each welcome↔main view transition
before navigating. Include the current and target PageWelcomeViewId values, but
do not log URL contents, secrets, or full PII; keep the existing URL parameter
mutation and navigate behavior unchanged.

In `@app/src/components/settings/panels/LlmConnectionsPanel.tsx`:
- Around line 38-43: Add a lightweight, grep-friendly diagnostic to setChip that
records the chip state transition before calling navigate, including only the
relevant non-sensitive chip value and navigation context. Keep the existing
hash-backed navigation and replace behavior unchanged.

In `@app/src/pages/__tests__/Brain.test.tsx`:
- Around line 157-183: Add a test in the Brain test suite that renders <Brain />
with the root route “/” and no tab query parameter, then waits for the
brain-welcome test ID to be present, asserting the new default Welcome view.

In `@app/src/pages/__tests__/Rewards.test.tsx`:
- Around line 1-434: Add a test in the “Rewards page” suite covering the default
route without ?view=main: render Rewards, assert the rewards-welcome container
and welcome content are displayed, click the rewards-welcome-cta-view control,
then verify the main tabbed view renders and the welcome view is gone. Reuse the
existing rewards API mock setup as needed and anchor the assertions to the
visible test IDs and tab content.

In `@app/src/pages/Brain.tsx`:
- Around line 210-264: Hoist the non-welcome tab value and its BRAIN_HEADERS
lookup into local variables within the else branch, then reuse the resolved
header for PageSectionHeader instead of repeating activeTab as
Exclude&lt;BrainTab, 'welcome'&gt; and the lookup. Preserve the existing title
and description keys.

In `@app/src/pages/Feedback.test.tsx`:
- Around line 61-105: Extend the <Feedback /> test suite to cover the default
route without a view query: verify it renders the welcome screen using
testId="feedback-welcome", then exercise a welcome CTA and assert it switches to
the main view via setView('main') and reveals the feedback board. Keep the
existing main-view loading, empty-state, and error tests unchanged.

In `@app/src/pages/Feedback.tsx`:
- Around line 159-167: Update the welcome-view flow around the
usePageWelcomeView state and both CTA onClick handlers to add verbose,
grep-friendly diagnostics for the initial welcome/main branch and each
setView('main') transition. Include clear entry, branch, and transition context
while preserving the existing CTA behavior.

In `@app/src/pages/Rewards.tsx`:
- Around line 142-148: The new welcome CTA handlers lack diagnostic logging
before navigation. In app/src/pages/Rewards.tsx lines 142-148, update the CTA
onClick around setView('main') to log the welcome CTA click and target before
switching views; in app/src/agentworld/pages/WelcomeSection.tsx lines 23-39, add
a grep-friendly log with the target in each onClick before navigate(...),
preserving the existing transitions.

In `@app/src/pages/Skills.tsx`:
- Around line 1134-1231: Extract the three render branches controlled by
activeTab into focused sub-components: the welcome landing using PageWelcome,
the INTELLIGENCE_TABS branch including its header/card and
SettingsLayoutProvider logic, and the PanelPage fallback. Keep existing tab
routing, handlers, translations, and rendered behavior unchanged, with
Skills.tsx retaining only branch selection and state ownership.

In `@app/test/e2e/helpers/shared-flows.ts`:
- Around line 479-490: Update the deprecated navigateToSkills function to
delegate to navigateToConnections instead of duplicating its navigation logic,
while preserving its asynchronous behavior and existing callers.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3f13591e-c66c-4305-819e-e71f02012858

📥 Commits

Reviewing files that changed from the base of the PR and between 8409a27 and d9113f9.

⛔ Files ignored due to path filters (1)
  • app/src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (203)
  • app/src/AppRoutes.tsx
  • app/src/agentworld/pages/AgentWorld.test.tsx
  • app/src/agentworld/pages/AgentWorld.tsx
  • app/src/agentworld/pages/WelcomeSection.tsx
  • app/src/components/intelligence/ConnectionPathPanel.test.tsx
  • app/src/components/intelligence/ConnectionPathPanel.tsx
  • app/src/components/intelligence/ConnectionPathTab.test.tsx
  • app/src/components/intelligence/ConnectionPathTab.tsx
  • app/src/components/intelligence/DiagramViewerTab.test.tsx
  • app/src/components/intelligence/DiagramViewerTab.tsx
  • app/src/components/intelligence/EntityAssociationsPanel.test.tsx
  • app/src/components/intelligence/EntityAssociationsPanel.tsx
  • app/src/components/intelligence/EntityAssociationsTab.test.tsx
  • app/src/components/intelligence/EntityAssociationsTab.tsx
  • app/src/components/intelligence/GraphCentralityPanel.test.tsx
  • app/src/components/intelligence/GraphCentralityPanel.tsx
  • app/src/components/intelligence/GraphCentralityTab.test.tsx
  • app/src/components/intelligence/GraphCentralityTab.tsx
  • app/src/components/intelligence/GraphCohesionPanel.test.tsx
  • app/src/components/intelligence/GraphCohesionPanel.tsx
  • app/src/components/intelligence/GraphCohesionTab.test.tsx
  • app/src/components/intelligence/GraphCohesionTab.tsx
  • app/src/components/intelligence/IntelligenceAgentWorkTab.test.tsx
  • app/src/components/intelligence/IntelligenceAgentWorkTab.tsx
  • app/src/components/intelligence/IntelligenceAgentsTab.tsx
  • app/src/components/intelligence/IntelligenceOrchestrationTab.test.tsx
  • app/src/components/intelligence/IntelligenceOrchestrationTab.tsx
  • app/src/components/intelligence/IntelligenceTasksTab.tsx
  • app/src/components/intelligence/IntelligenceTeamsTab.test.tsx
  • app/src/components/intelligence/IntelligenceTeamsTab.tsx
  • app/src/components/intelligence/IntelligenceWorktreesTab.test.tsx
  • app/src/components/intelligence/IntelligenceWorktreesTab.tsx
  • app/src/components/intelligence/MemoryFreshnessPanel.test.tsx
  • app/src/components/intelligence/MemoryFreshnessPanel.tsx
  • app/src/components/intelligence/MemoryFreshnessTab.test.tsx
  • app/src/components/intelligence/MemoryFreshnessTab.tsx
  • app/src/components/intelligence/MemoryGraph.tsx
  • app/src/components/intelligence/MemoryTimelinePanel.test.tsx
  • app/src/components/intelligence/MemoryTimelinePanel.tsx
  • app/src/components/intelligence/MemoryTimelineTab.test.tsx
  • app/src/components/intelligence/MemoryTimelineTab.tsx
  • app/src/components/intelligence/MemoryWorkspace.test.tsx
  • app/src/components/intelligence/MemoryWorkspace.tsx
  • app/src/components/intelligence/NamespaceOverviewPanel.test.tsx
  • app/src/components/intelligence/NamespaceOverviewPanel.tsx
  • app/src/components/intelligence/NamespaceOverviewTab.test.tsx
  • app/src/components/intelligence/NamespaceOverviewTab.tsx
  • app/src/components/intelligence/PixiGraph.tsx
  • app/src/components/intelligence/TeamTaskBoard.test.tsx
  • app/src/components/intelligence/TeamTaskBoard.tsx
  • app/src/components/intelligence/UserTaskComposer.test.tsx
  • app/src/components/intelligence/UserTaskComposer.tsx
  • app/src/components/intelligence/__tests__/IntelligenceAgentsTab.test.tsx
  • app/src/components/intelligence/__tests__/IntelligenceTasksTab.test.tsx
  • app/src/components/intelligence/memoryGraphLayout.ts
  • app/src/components/intelligence/pixiGraphRenderer.ts
  • app/src/components/layout/PageSectionHeader.tsx
  • app/src/components/layout/PageWelcome.test.tsx
  • app/src/components/layout/PageWelcome.tsx
  • app/src/components/layout/usePageWelcomeView.tsx
  • app/src/components/orchestration/MedullaOverviewPanel.test.tsx
  • app/src/components/orchestration/MedullaOverviewPanel.tsx
  • app/src/components/orchestration/demo/DemoScaleBanner.tsx
  • app/src/components/orchestration/demo/MedullaDemoChat.tsx
  • app/src/components/orchestration/demo/MedullaDemoGraph.tsx
  • app/src/components/orchestration/demo/MedullaDemoNetwork.tsx
  • app/src/components/orchestration/demo/medullaDemoData.ts
  • app/src/components/rewards/RewardsCommunityTab.tsx
  • app/src/components/rewards/__tests__/RewardsCommunityTab.test.tsx
  • app/src/components/settings/__tests__/settingsRouteRegistry.test.ts
  • app/src/components/settings/hooks/__tests__/useSettingsNavigation.coverage.test.tsx
  • app/src/components/settings/hooks/useSettingsNavigation.ts
  • app/src/components/settings/layout/SettingsLayoutContext.tsx
  • app/src/components/settings/layout/SettingsPanel.tsx
  • app/src/components/settings/layout/settingsNavIcons.tsx
  • app/src/components/settings/panels/AgentChatPanel.tsx
  • app/src/components/settings/panels/AnalysisViewsPanel.tsx
  • app/src/components/settings/panels/ComposioPanel.tsx
  • app/src/components/settings/panels/ComposioTriagePanel.tsx
  • app/src/components/settings/panels/DevWorkflowPanel.tsx
  • app/src/components/settings/panels/DeveloperOptionsPanel.tsx
  • app/src/components/settings/panels/IntegrationsPanel.tsx
  • app/src/components/settings/panels/LlmConnectionsPanel.tsx
  • app/src/components/settings/panels/LocalModelDebugPanel.tsx
  • app/src/components/settings/panels/MeetingSettingsPanel.tsx
  • app/src/components/settings/panels/MemorySyncPanel.tsx
  • app/src/components/settings/panels/ModelHealthPanel.tsx
  • app/src/components/settings/panels/TaskSourcesPanel.test.tsx
  • app/src/components/settings/panels/TaskSourcesPanel.tsx
  • app/src/components/settings/panels/TasksPanel.tsx
  • app/src/components/settings/panels/TokenUsagePanel.tsx
  • app/src/components/settings/panels/UsagePanel.tsx
  • app/src/components/settings/panels/VoiceDebugPanel.tsx
  • app/src/components/settings/panels/WalletPanel.tsx
  • app/src/components/settings/panels/WebhooksDebugPanel.tsx
  • app/src/components/settings/panels/__tests__/ComposioPanel.test.tsx
  • app/src/components/settings/panels/__tests__/DevWorkflowPanel.test.tsx
  • app/src/components/settings/panels/__tests__/DeveloperOptionsPanel.test.tsx
  • app/src/components/settings/panels/__tests__/IntegrationsPanel.test.tsx
  • app/src/components/settings/panels/__tests__/LlmConnectionsPanel.test.tsx
  • app/src/components/settings/panels/__tests__/ModelHealthPanel.test.tsx
  • app/src/components/settings/panels/__tests__/TasksPanel.test.tsx
  • app/src/components/settings/panels/__tests__/UsagePanel.test.tsx
  • app/src/components/settings/panels/__tests__/VoiceDebugPanel.test.tsx
  • app/src/components/settings/panels/__tests__/WalletPanel.test.tsx
  • app/src/components/settings/panels/__tests__/WebhooksDebugPanel.test.tsx
  • app/src/components/settings/search/settingsSearchRegistry.ts
  • app/src/components/settings/settingsRouteElements.tsx
  • app/src/components/settings/settingsRouteRegistry.ts
  • app/src/components/webhooks/ComposeioTriggerHistory.tsx
  • app/src/components/webhooks/TunnelList.test.tsx
  • app/src/components/webhooks/TunnelList.tsx
  • app/src/components/webhooks/WebhookActivity.tsx
  • app/src/features/webhooks/types.ts
  • app/src/hooks/__tests__/useWebhooks.test.ts
  • app/src/hooks/useComposeioTriggerHistory.ts
  • app/src/hooks/useWebhooks.ts
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/zh-CN.ts
  • app/src/lib/memory/connectionPath.test.ts
  • app/src/lib/memory/connectionPath.ts
  • app/src/lib/memory/entityAssociations.test.ts
  • app/src/lib/memory/entityAssociations.ts
  • app/src/lib/memory/graphCentrality.test.ts
  • app/src/lib/memory/graphCentrality.ts
  • app/src/lib/memory/graphCohesion.test.ts
  • app/src/lib/memory/graphCohesion.ts
  • app/src/lib/memory/memoryFreshness.test.ts
  • app/src/lib/memory/memoryFreshness.ts
  • app/src/lib/memory/memoryTimeline.test.ts
  • app/src/lib/memory/memoryTimeline.ts
  • app/src/lib/memory/namespaceOverview.test.ts
  • app/src/lib/memory/namespaceOverview.ts
  • app/src/lib/notificationRouter.test.ts
  • app/src/lib/notificationRouter.ts
  • app/src/lib/orchestration/useMedullaAccess.ts
  • app/src/pages/Brain.tsx
  • app/src/pages/Feedback.test.tsx
  • app/src/pages/Feedback.tsx
  • app/src/pages/FlowsPage.test.tsx
  • app/src/pages/FlowsPage.tsx
  • app/src/pages/Intelligence.test.tsx
  • app/src/pages/Intelligence.tsx
  • app/src/pages/Notifications.tsx
  • app/src/pages/OrchestrationPage.tsx
  • app/src/pages/Rewards.tsx
  • app/src/pages/Skills.tsx
  • app/src/pages/Webhooks.tsx
  • app/src/pages/__tests__/Brain.test.tsx
  • app/src/pages/__tests__/Intelligence.test.tsx
  • app/src/pages/__tests__/Notifications.test.tsx
  • app/src/pages/__tests__/OrchestrationPage.test.tsx
  • app/src/pages/__tests__/Rewards.test.tsx
  • app/src/pages/__tests__/Skills.intelligence-tabs.test.tsx
  • app/src/pages/__tests__/Webhooks.test.tsx
  • app/src/services/api/connectionPathApi.test.ts
  • app/src/services/api/connectionPathApi.ts
  • app/src/services/api/entityAssociationsApi.test.ts
  • app/src/services/api/entityAssociationsApi.ts
  • app/src/services/api/graphCentralityApi.test.ts
  • app/src/services/api/graphCentralityApi.ts
  • app/src/services/api/graphCohesionApi.test.ts
  • app/src/services/api/graphCohesionApi.ts
  • app/src/services/api/memoryFreshnessApi.test.ts
  • app/src/services/api/memoryFreshnessApi.ts
  • app/src/services/api/memoryTimelineApi.test.ts
  • app/src/services/api/memoryTimelineApi.ts
  • app/src/services/api/namespaceOverviewApi.test.ts
  • app/src/services/api/namespaceOverviewApi.ts
  • app/src/services/api/tunnelsApi.test.ts
  • app/src/services/api/tunnelsApi.ts
  • app/src/services/coreRpcClient.ts
  • app/src/test/memoryRelationFactory.ts
  • app/src/types/api.ts
  • app/src/utils/tauriCommands/index.ts
  • app/src/utils/tauriCommands/webhooks.ts
  • app/test/e2e/helpers/shared-flows.ts
  • app/test/e2e/specs/flows.spec.ts
  • app/test/e2e/specs/notifications.spec.ts
  • app/test/e2e/specs/rewards-progression-persistence.spec.ts
  • app/test/e2e/specs/rewards-unlock-flow.spec.ts
  • app/test/e2e/specs/settings-dev-options.spec.ts
  • app/test/e2e/specs/webhooks-ingress-flow.spec.ts
  • app/test/playwright/specs/settings-dev-options.spec.ts
  • app/test/playwright/specs/webhooks-ingress-flow.spec.ts
  • scripts/i18n-find-english.ts
  • src/openhuman/config/schema/context.rs
  • src/openhuman/config/schema/load/env_overlay.rs
  • src/openhuman/config/schema/load_tests.rs
  • src/openhuman/context/manager_tests.rs
  • src/openhuman/skills/schemas/controller_schemas.rs
💤 Files with no reviewable changes (78)
  • app/src/components/intelligence/EntityAssociationsPanel.test.tsx
  • app/src/components/intelligence/ConnectionPathPanel.test.tsx
  • app/src/components/intelligence/MemoryFreshnessTab.test.tsx
  • app/src/components/intelligence/DiagramViewerTab.tsx
  • app/src/components/intelligence/NamespaceOverviewTab.test.tsx
  • app/src/components/intelligence/EntityAssociationsTab.tsx
  • app/src/components/intelligence/GraphCohesionPanel.test.tsx
  • app/src/components/intelligence/EntityAssociationsTab.test.tsx
  • app/src/components/intelligence/MemoryFreshnessPanel.test.tsx
  • app/src/components/intelligence/GraphCentralityTab.tsx
  • app/src/components/settings/panels/tests/TasksPanel.test.tsx
  • app/src/components/intelligence/MemoryTimelineTab.test.tsx
  • app/src/components/intelligence/ConnectionPathPanel.tsx
  • app/src/components/intelligence/GraphCentralityPanel.test.tsx
  • app/src/components/settings/panels/tests/IntegrationsPanel.test.tsx
  • app/src/components/settings/panels/IntegrationsPanel.tsx
  • app/src/components/settings/panels/tests/VoiceDebugPanel.test.tsx
  • app/src/components/intelligence/tests/IntelligenceAgentsTab.test.tsx
  • app/src/components/intelligence/IntelligenceTeamsTab.test.tsx
  • app/src/components/settings/panels/VoiceDebugPanel.tsx
  • app/src/components/intelligence/GraphCohesionTab.tsx
  • app/src/components/settings/panels/tests/ModelHealthPanel.test.tsx
  • app/src/components/intelligence/ConnectionPathTab.test.tsx
  • app/src/hooks/useWebhooks.ts
  • app/src/components/intelligence/NamespaceOverviewTab.tsx
  • app/src/components/settings/panels/TasksPanel.tsx
  • app/src/components/intelligence/tests/IntelligenceTasksTab.test.tsx
  • app/src/components/intelligence/IntelligenceAgentWorkTab.tsx
  • app/src/components/settings/panels/DevWorkflowPanel.tsx
  • app/src/hooks/tests/useWebhooks.test.ts
  • app/src/components/intelligence/GraphCentralityTab.test.tsx
  • app/src/components/intelligence/UserTaskComposer.test.tsx
  • app/src/components/intelligence/IntelligenceTeamsTab.tsx
  • app/src/components/intelligence/ConnectionPathTab.tsx
  • app/src/components/webhooks/TunnelList.test.tsx
  • app/src/components/intelligence/MemoryTimelinePanel.test.tsx
  • app/src/components/intelligence/UserTaskComposer.tsx
  • app/test/playwright/specs/webhooks-ingress-flow.spec.ts
  • app/src/components/intelligence/MemoryFreshnessPanel.tsx
  • app/src/components/intelligence/IntelligenceOrchestrationTab.test.tsx
  • app/src/components/webhooks/WebhookActivity.tsx
  • app/src/components/settings/panels/ModelHealthPanel.tsx
  • app/src/components/intelligence/IntelligenceWorktreesTab.test.tsx
  • app/src/components/intelligence/IntelligenceOrchestrationTab.tsx
  • app/src/components/intelligence/GraphCohesionPanel.tsx
  • app/src/components/intelligence/MemoryTimelinePanel.tsx
  • app/src/components/intelligence/GraphCohesionTab.test.tsx
  • app/src/components/settings/panels/AnalysisViewsPanel.tsx
  • app/src/features/webhooks/types.ts
  • app/src/components/intelligence/IntelligenceAgentWorkTab.test.tsx
  • app/src/components/intelligence/GraphCentralityPanel.tsx
  • app/src/components/settings/panels/TaskSourcesPanel.tsx
  • app/src/components/intelligence/EntityAssociationsPanel.tsx
  • app/src/utils/tauriCommands/index.ts
  • app/src/components/intelligence/NamespaceOverviewPanel.tsx
  • app/src/components/webhooks/TunnelList.tsx
  • app/src/components/intelligence/NamespaceOverviewPanel.test.tsx
  • app/src/components/intelligence/TeamTaskBoard.tsx
  • app/src/components/intelligence/TeamTaskBoard.test.tsx
  • app/src/components/intelligence/IntelligenceWorktreesTab.tsx
  • app/src/components/intelligence/MemoryFreshnessTab.tsx
  • app/src/components/intelligence/MemoryWorkspace.test.tsx
  • app/src/components/intelligence/MemoryTimelineTab.tsx
  • app/src/components/intelligence/IntelligenceTasksTab.tsx
  • app/src/components/settings/panels/MemorySyncPanel.tsx
  • app/src/hooks/useComposeioTriggerHistory.ts
  • app/src/components/intelligence/IntelligenceAgentsTab.tsx
  • app/src/components/intelligence/DiagramViewerTab.test.tsx
  • app/src/components/settings/panels/WebhooksDebugPanel.tsx
  • app/src/components/webhooks/ComposeioTriggerHistory.tsx
  • app/test/e2e/specs/settings-dev-options.spec.ts
  • app/src/components/intelligence/MemoryWorkspace.tsx
  • app/src/components/settings/panels/tests/DevWorkflowPanel.test.tsx
  • app/test/playwright/specs/settings-dev-options.spec.ts
  • app/src/components/settings/panels/tests/WebhooksDebugPanel.test.tsx
  • app/src/components/settings/hooks/useSettingsNavigation.ts
  • app/src/components/settings/search/settingsSearchRegistry.ts
  • app/src/components/settings/panels/TaskSourcesPanel.test.tsx

Comment thread app/src/AppRoutes.tsx
Comment on lines +103 to +109
Skill routes below (create/run); the bare `/workflows` and
`/routines` slugs now redirect here (to `/flows`) since Workflows is
a first-level module. Not a tab-level route (unlike `/flows` itself,
`/flows/:id` isn't reached from the BottomTabBar), so
`navigation.spec.ts`'s ROUTES table needs no change. Full editing
(B5b.2+) and the agent-proposal surface (B4) are separate, later
work. */}

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the stale Workflows routing comment.

Lines [103-104] say /workflows redirects to /flows, but lines [246-252] render <Activity /> at /workflows. Update the comment to describe the actual legacy Activity/Skills surface; only /routines redirects to /flows.

🤖 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 `@app/src/AppRoutes.tsx` around lines 103 - 109, Update the routing comment
near the Workflows and routines routes to state that `/workflows` renders the
legacy Activity/Skills surface, while only the bare `/routines` slug redirects
to `/flows`. Keep the surrounding route-scope and future-work notes accurate
without changing route behavior.

Comment thread app/src/lib/i18n/en.ts
Comment on lines +149 to +150
'agentWorld.welcome.nav': 'Welcome',
'agentWorld.welcome.eyebrow': 'TinyPlace',

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the canonical “Tiny Place” brand label.

Line [150] uses TinyPlace for a UI eyebrow, while the navigation label and repository convention use Tiny Place. Keep product branding consistent.

Based on learnings, use Tiny Place for product/sidebar/UI labels and reserve tiny.place for domain prose.

🤖 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 `@app/src/lib/i18n/en.ts` around lines 149 - 150, Update the
agentWorld.welcome.eyebrow translation value from “TinyPlace” to the canonical
“Tiny Place” label, preserving “tiny.place” only for domain prose and leaving
the navigation label unchanged.

Source: Learnings

Comment thread app/src/lib/i18n/es.ts
Comment on lines +20 to +21
'agentWorld.welcome.feat3Body':
'Pagos entre agentes respaldados por la wallet, con tu aprobación.',

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Inconsistent wallet terminology.

'agentWorld.welcome.feat3Body' uses the English word "wallet" ("la wallet"), while every other wallet-related string in this same file uses "cartera" (wallet.tabs.balance, nav.wallet) or "monedero" (connections.header.wallet). Align the term for consistency.

🌐 Suggested fix
   'agentWorld.welcome.feat3Body':
-    'Pagos entre agentes respaldados por la wallet, con tu aprobación.',
+    'Pagos entre agentes respaldados por la cartera, con tu aprobación.',
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'agentWorld.welcome.feat3Body':
'Pagos entre agentes respaldados por la wallet, con tu aprobación.',
'agentWorld.welcome.feat3Body':
'Pagos entre agentes respaldados por la cartera, con tu aprobación.',
🤖 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 `@app/src/lib/i18n/es.ts` around lines 20 - 21, Update the Spanish translation
for agentWorld.welcome.feat3Body to replace the English “wallet” terminology
with the established Spanish term used consistently in this file, while
preserving the message’s meaning and approval wording.

Comment thread app/src/lib/i18n/ko.ts
// English-identical values fall back to English via I18nContext.resolveEn().
const messages: TranslationMap = {
'agentWorld.welcome.nav': '환영합니다',
'agentWorld.welcome.eyebrow': 'TinyPlace',

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use the canonical Tiny Place UI label.

agentWorld.welcome.eyebrow uses TinyPlace, while existing product/sidebar branding uses Tiny Place. Based on learnings, UI branding uses Tiny Place; tiny.place is reserved for domain references.

Proposed fix
-  'agentWorld.welcome.eyebrow': 'TinyPlace',
+  'agentWorld.welcome.eyebrow': 'Tiny Place',
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'agentWorld.welcome.eyebrow': 'TinyPlace',
'agentWorld.welcome.eyebrow': 'Tiny Place',
🤖 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 `@app/src/lib/i18n/ko.ts` at line 7, Update the agentWorld.welcome.eyebrow
translation value in the Korean locale to use the canonical “Tiny Place” UI
label, preserving tiny.place only for domain references.

Source: Learnings

Comment thread app/src/lib/i18n/ko.ts
'notifications.welcome.nav': '환영합니다',
'notifications.welcome.main': '알림',
'notifications.welcome.eyebrow': '알림',
'notifications.welcome.title': '정말로 당신이 필요한 것만',

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the notifications title wording.

정말로 당신이 필요한 것만 is awkward Korean. Use 정말로 당신에게 필요한 것만 to preserve the intended meaning.

Proposed fix
-  'notifications.welcome.title': '정말로 당신이 필요한 것만',
+  'notifications.welcome.title': '정말로 당신에게 필요한 것만',
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'notifications.welcome.title': '정말로 당신이 필요한 것만',
'notifications.welcome.title': '정말로 당신에게 필요한 것만',
🤖 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 `@app/src/lib/i18n/ko.ts` at line 98, Update the value for the
'notifications.welcome.title' translation key in ko.ts from “정말로 당신이 필요한 것만” to
“정말로 당신에게 필요한 것만”, leaving the key and surrounding translations unchanged.

Comment thread app/src/lib/i18n/ko.ts
'flows.welcome.ctaBrowse': '워크플로 둘러보기',
'flows.welcome.featsLabel': '자동화할 수 있는 것',
'flows.welcome.feat1Title': '말로 설명하기',
'flows.welcome.feat1Body': '원하는 것을 평범한 말로 이야기하면 빌더가 플로 초안을 작성합니다.',

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep the Flow terminology consistent.

플로 reads as a typo in flows.welcome.feat1Body; use 워크플로 to match the surrounding copy.

Proposed fix
-    '원하는 것을 평범한 말로 이야기하면 빌더가 플로 초안을 작성합니다.',
+    '원하는 것을 평범한 말로 이야기하면 빌더가 워크플로 초안을 작성합니다.',
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'flows.welcome.feat1Body': '원하는 것을 평범한 말로 이야기하면 빌더가 플로 초안을 작성합니다.',
'flows.welcome.feat1Body': '원하는 것을 평범한 말로 이야기하면 빌더가 워크플로 초안을 작성합니다.',
🤖 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 `@app/src/lib/i18n/ko.ts` at line 134, Update the translation value for
flows.welcome.feat1Body to use 워크플로 instead of 플로, matching the Flow terminology
used in surrounding Korean copy.

Comment thread app/src/lib/i18n/ko.ts
Comment on lines +346 to +350
'orchPage.demo.networkSummary': '{peers}개 연결됨 · {sessions}개 활성 하위 에이전트',
'orchPage.demo.peer.connected': '연결됨',
'orchPage.demo.peer.connecting': '연결 중',
'orchPage.demo.peer.idle': '유휴',
'orchPage.demo.peerSessions': '하위 에이전트 {count}개',

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.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep “session” in the demo counts.

These strings count active sub-agent sessions, but the Korean omits “세션,” making them read as agent counts.

Proposed fix
-  'orchPage.demo.networkSummary': '{peers}개 연결됨 · {sessions}개 활성 하위 에이전트',
+  'orchPage.demo.networkSummary': '{peers}개 연결됨 · 활성 하위 에이전트 세션 {sessions}개',
...
-  'orchPage.demo.peerSessions': '하위 에이전트 {count}개',
+  'orchPage.demo.peerSessions': '하위 에이전트 세션 {count}개',
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
'orchPage.demo.networkSummary': '{peers}개 연결됨 · {sessions}개 활성 하위 에이전트',
'orchPage.demo.peer.connected': '연결됨',
'orchPage.demo.peer.connecting': '연결 중',
'orchPage.demo.peer.idle': '유휴',
'orchPage.demo.peerSessions': '하위 에이전트 {count}개',
'orchPage.demo.networkSummary': '{peers}개 연결됨 · 활성 하위 에이전트 세션 {sessions}개',
'orchPage.demo.peer.connected': '연결됨',
'orchPage.demo.peer.connecting': '연결 중',
'orchPage.demo.peer.idle': '유휴',
'orchPage.demo.peerSessions': '하위 에이전트 세션 {count}개',
🤖 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 `@app/src/lib/i18n/ko.ts` around lines 346 - 350, Update the Korean
translations for orchPage.demo.networkSummary and orchPage.demo.peerSessions to
explicitly include “세션” in the active sub-agent counts, while preserving the
existing placeholders and grammatical meaning.

Comment on lines +106 to +154
const { view, setView, nav } = usePageWelcomeView({
ariaLabel: t('nav.alerts'),
welcomeLabel: t('notifications.welcome.nav'),
mainLabel: t('notifications.welcome.main'),
mainIconPath:
'M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9',
});

if (view === 'welcome') {
return (
<>
{nav}
<PageWelcome
testId="notifications-welcome"
accent="amber"
icon="🔔"
eyebrow={t('notifications.welcome.eyebrow')}
title={t('notifications.welcome.title')}
description={t('notifications.welcome.body')}
ctas={[
{
label: t('notifications.welcome.ctaView'),
icon: '🔔',
onClick: () => setView('main'),
testId: 'notifications-welcome-cta-view',
},
]}
featuresHeading={t('notifications.welcome.featsLabel')}
features={[
{
icon: '🙋',
title: t('notifications.welcome.feat1Title'),
description: t('notifications.welcome.feat1Body'),
},
{
icon: '📋',
title: t('notifications.welcome.feat2Title'),
description: t('notifications.welcome.feat2Body'),
},
{
icon: '🗂️',
title: t('notifications.welcome.feat3Title'),
description: t('notifications.welcome.feat3Body'),
},
]}
/>
</>
);
}

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
fd -i 'Notifications' -e ts -e tsx --full-path app/src/pages | xargs -I{} rg -n "welcome" {}

Repository: tinyhumansai/openhuman

Length of output: 1111


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== Notifications test files ==\n'
fd -i 'Notifications' -e ts -e tsx --full-path app/src | sed -n '1,120p'

printf '\n== Welcome references in app/src/tests ==\n'
rg -n "view === 'welcome'|notifications-welcome|usePageWelcomeView|welcomeLabel: t\\('notifications\\.welcome" app/src --glob '*test.ts' --glob '*test.tsx' --glob '*spec.ts' --glob '*spec.tsx'

printf '\n== Notifications test file contents ==\n'
test_file="$(fd -i 'Notifications.test' -e ts -e tsx --full-path app/src | head -n 1 || true)"
if [ -n "${test_file}" ]; then
  cat -n "$test_file"
fi

Repository: tinyhumansai/openhuman

Length of output: 1908


Add coverage for the default welcome state. The page now lands on welcome, but the current page test starts at /?view=main, so this branch and its setView('main') CTA never run in test coverage.

🤖 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 `@app/src/pages/Notifications.tsx` around lines 106 - 154, Add test coverage
for the default `view === 'welcome'` branch in `Notifications`, rendering the
page without the `view=main` query parameter and asserting the welcome UI
appears. Also exercise the `notifications-welcome-cta-view` CTA and verify it
transitions to the main view.

Source: Coding guidelines

@senamakel
senamakel merged commit d447f61 into tinyhumansai:main Jul 14, 2026
22 of 26 checks passed

@M3gA-Mind M3gA-Mind 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.

PR #4851 — feat: welcome landings + standardized page headers across the app

Walkthrough

Large frontend-only UX pass: every sidebar page (Connections, Brain, Flows, Notifications, Rewards, Feedback, Agent World, Orchestration) now opens on a compact Welcome landing with the functional views one click / ?view=main away, and every functional view gets a standardized text-only PageSectionHeader. Three reusable primitives are introduced — PageWelcome, usePageWelcomeView, PageSectionHeader — and a large amount of relocated/retired surface is deleted (intelligence tabs, dev-workflow/model-health/webhooks/task-sources panels, ~19.8k deleted lines) with legacy slugs pointed at their new homes via redirects. Also folds in the gated Medulla orchestration overview + scale-showcase demo (user.hasMedullaAccess) and flips super_context_enabled to default-off in the Rust core.

Overall this is a clean, well-structured refactor. The risky part — the redirect/deep-link rewiring across dozens of routes — is internally consistent, and the substantive P2 findings from the Codex bot were already addressed by the author in earlier commits (verified against current HEAD). The remaining items below are minor/polish. The Rust change is small, correct, and fully test-updated. Verdict left as a comment (no blockers), per request — the human owns the merge decision.

Changes

File Summary
src/openhuman/config/schema/context.rs + load/env_overlay.rs super_context_enabled now defaults false (opt-in via OPENHUMAN_SUPER_CONTEXT=1); docs/tests updated.
app/src/components/layout/PageWelcome.tsx / PageSectionHeader.tsx / usePageWelcomeView.tsx New reusable welcome landing, standardized header, and ?view=-driven two-item nav.
app/src/components/orchestration/** + lib/orchestration/useMedullaAccess.ts Medulla overview teaser + deterministic scale-showcase demo (graph/chat/network), gated on hasMedullaAccess.
app/src/pages/{Skills,Brain,OrchestrationPage,Flows,Notifications,Feedback,Rewards}.tsx Wire welcome landing + per-tab headers; relocate settings panels onto Connections/Brain.
app/src/AppRoutes.tsx + components/settings/settingsRouteElements.tsx + settingsRouteRegistry.ts Retire settings sections; redirect legacy slugs to Connections/Brain/Flows/Orchestration.
app/src/components/intelligence/{memoryGraphLayout,MemoryGraph,PixiGraph,pixiGraphRenderer} Add optional, identity-default SimTuning for wide fan-out (used by the demo graph).
app/src/lib/notificationRouter.ts Notifications fallback routes now target /notifications?view=main.
app/src/lib/i18n/*.ts 14-locale copy for all new welcome/header strings.
~120 deleted files Removed intelligence tabs, dev/diagnostics panels, webhooks/tunnels/task-sources UI + their tests.

Actionable comments (3)

💡 Minor / suggestion

1. app/src/lib/notificationRouter.ts:66-68 (and 96-98) — explicit /notifications deep links skip the ?view=main normalization

The fallback path was updated to /notifications?view=main, but an explicit deep_link/deepLink of exactly /notifications (which the core triage pipeline can emit) is returned verbatim, landing on the new Welcome landing instead of the alerts feed. This is the same class of issue as the fallback fix, just on the explicit-link branch. Codex flagged this and it appears still open.

Suggested change:

// after isSafeInAppPath check, before returning the explicit link
const normalizeNotificationsRoot = (p: string): string =>
  p === '/notifications' ? '/notifications?view=main' : p;
...
if (n.deep_link && isSafeInAppPath(n.deep_link)) {
  return normalizeNotificationsRoot(n.deep_link);
}

2. app/src/pages/Brain.tsx:309 — hardcoded English fallback bypasses i18n

t('sync.auditTitle', 'Sync History') uses an inline English fallback for a key that exists in no locale file (grep finds it nowhere in src/lib/i18n/). Because t returns the fallback when the key is absent, this string renders as English in all 14 locales — inconsistent with the PR's "full 14-locale i18n" goal and every other new string here. Add a real brain.header.*/sync.* key to en.ts and all locale files.

Suggested change:

// add `sync.auditTitle` (or brain.syncHistory) to en.ts + all locales, then:
{t('sync.auditTitle')}

🧹 Nitpick

3. app/src/AppRoutes.tsx:103-104 — stale routing comment

The block comment says the bare /workflows slug "now redirect[s] here (to /flows)", but the route below renders <Activity /> (the installed-SKILL workflow hub) — only /routines redirects to /flows. This matches an earlier fix (0811379) that the comment wasn't updated for. Reword so /workflows = the SKILL hub, /routines = redirect to /flows.

Nitpicks (2)

  • app/src/lib/i18n/en.ts:150,153 — agentWorld.welcome.eyebrow/body use TinyPlace, but the canonical UI brand (nav label, agentWorld.world.title) is Tiny Place. Prefer the spaced form in visible copy for consistency (CodeRabbit raised the same on ko.ts/es.ts).
  • app/src/components/layout/PageWelcome.tsx:75 — const tint = ACCENT_TILE[accent].split(' ')[0] re-indexes the record; reuse the local tile: const tint = tile.split(' ')[0];.

Questions for the author (1)

  • app/src/pages/OrchestrationPage.tsx — the default landing tab is now medulla (the Overview teaser), which renders MedullaOverviewPanel — a "not shipped yet / coming soon" pitch — regardless of hasMedullaAccess. For users who do have early access, defaulting them onto a coming-soon teaser (rather than the live agent chat) reads slightly off. Intended, or should access-holders default to agent/overview?

Verified / looks good

  • Rust core: super_context_enabled flip to default-off is correct and fully covered — load_tests.rs, context/manager_tests.rs, doc comments, and the env overlay all updated coherently.
  • Redirect wiring: every legacy settings slug now resolves to a live Connections/Brain/Orchestration tab that exists (?tab=usage|wallet|screen-intelligence|desktop-agent|companion|composio-key|llm|meetings, /brain?tab=sync, /orchestration?tab=tasks) — cross-checked against the tab unions in Skills.tsx/Brain.tsx.
  • Deletions are clean: no dangling references to the ~120 removed modules (DevWorkflowPanel, ModelHealthPanel, WebhooksDebugPanel, tunnelsApi, webhooks tauri commands, intelligence tabs, …) remain in app/src.
  • SimTuning is backward-compatible — every field defaults to identity, so the Brain memory graph physics are unchanged; only the demo graph opts into wider fan-out. DEMO_TUNING is a module-level const, so the PixiGraph effect dep on tuning won't thrash.
  • UsagePanel now preserves location.search when switching hash tabs, so /connections?tab=usage#background deep links survive — matches the Codex fix thread.
  • Codex's earlier P2 findings (Flows welcome CTA chooser, Tasks-without-Medulla, memory-data/-debug reachability, LLM debug subroute hashes, rewards/notifications ?view=main) are all addressed in current HEAD.

@@ -13,7 +13,7 @@ const ROUTES = {
chat: '/chat',
skills: '/connections',
home: '/home',
notifications: '/notifications',
notifications: '/notifications?view=main',

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.

Explicit /notifications deep links skip the ?view=main normalization.

This fallback route (and the resolveSystemRoute fallback) now target ?view=main, but the earlier explicit deep-link branches (return n.deep_link at ~L68, return item.deepLink at ~L98) return a bare /notifications verbatim when the core triage pipeline emits it — landing on the new Welcome landing instead of the alerts feed. Normalize the bare root in both explicit branches:

const normalizeNotificationsRoot = (p: string): string =>
  p === '/notifications' ? '/notifications?view=main' : p;
// …
if (n.deep_link && isSafeInAppPath(n.deep_link)) return normalizeNotificationsRoot(n.deep_link);

(Codex flagged this; appears still open.)

Comment thread app/src/pages/Brain.tsx
the Sync tab is the single sync surface. */}
<div className={cardClass} data-testid="brain-sync-history">
<h3 className="mb-2 text-sm font-medium text-content-secondary">
{t('sync.auditTitle', 'Sync History')}

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.

Hardcoded English fallback bypasses i18n.

t('sync.auditTitle', 'Sync History') uses an inline English fallback for a key that exists in no locale file — grep sync.auditTitle app/src/lib/i18n/* finds nothing. Since t returns the fallback when the key is missing, this renders as English in all 14 locales, inconsistent with the PR's full-i18n goal and every other new string here. Add a real key to en.ts + all locales and drop the fallback:

{t('sync.auditTitle')}

Comment thread app/src/AppRoutes.tsx
table needs no change. Full editing (B5b.2+) and the agent-proposal
surface (B4) are separate, later work. */}
Skill routes below (create/run); the bare `/workflows` and
`/routines` slugs now redirect here (to `/flows`) since Workflows is

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.

Stale routing comment.

This comment says the bare /workflows slug "now redirect[s] here (to /flows)", but the route below renders <Activity /> (the installed-SKILL workflow hub) — only /routines redirects to /flows. Reword so /workflows = the SKILL hub and /routines = the /flows redirect. (CodeRabbit raised the same.)

Comment thread app/src/lib/i18n/en.ts
'Tiny.Place is a social network for AI agents. Use OpenHuman to interact, find and post jobs, trade, and grow together.',
// Welcome landing (first destination)
'agentWorld.welcome.nav': 'Welcome',
'agentWorld.welcome.eyebrow': 'TinyPlace',

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.

Nit: brand label inconsistency.

The eyebrow (and body copy on L153) use TinyPlace, but the canonical visible brand — the nav label (nav.agentWorld = Tiny Place) and agentWorld.world.title — is the spaced Tiny Place. Prefer the spaced form in user-facing welcome copy for consistency. (CodeRabbit raised the same on ko.ts/es.ts.)

testId,
}: PageWelcomeProps) {
const tile = ACCENT_TILE[accent];
const tint = ACCENT_TILE[accent].split(' ')[0]; // just the bg-*/15 tint

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.

Nit: redundant record re-index.

ACCENT_TILE[accent] is already bound to tile on the line above; reuse it:

const tint = tile.split(' ')[0]; // just the bg-*/15 tint

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

Labels

feature Net-new user-facing capability or product behavior.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants