Skip to content

Improvement: Agents/Apps low-severity correctness & UX gaps (history-restore silent no-op, organigram partial-save baseline, dead setAgentParents, mislabeled bounceRate, pinned scorecard, raw integration slug, uninstall toast variant, index-keyed rows) #2087

Description

@yannickmonney

Area / route
A batch of confirmed low-severity agents-editor / agents-delegation / agents-metrics / apps defects, each independently fixable. Grouped as polish; itemized below with evidence and fix.

Sites

  • [38] Selecting a missing/corrupt/schema-divergent agent history snapshot silently no-ops (no diff, no toast)
    • Evidence: services/platform/app/features/agents/components/agent-navigation.tsx:343-355 (silent return on !result.ok / !parsed.success); contrast convex/agents/file_actions.ts:1051-1058 (restoreFromHistory restores schema-failing snapshots as-is)
  • [39] Organigram partial save failure leaves the dirty baseline unreseeded — committed delegation edges still show as unsaved and Discard misrepresents them
    • Evidence: organigram-canvas.tsx:201-213 (loop persists each changed slug then refetch+overrideConfig happen only on the success path); organigram-canvas.tsx:214-227 (catch shows a toast but never reseeds baseline); writeAgentDelegates throws INVALID_TARGET/AGENT_NOT_FOUND mid-loop in workforce_ops.ts:466-494
  • [40] setAgentParents action + writeAgentParents are dead code; "Reports to" edits audit as set_agent_delegates, never set_agent_parents
    • Evidence: organigram-canvas.tsx:106-108 + 203-207 (only setAgentDelegates is wired/called); org_chart_actions.ts:160-188 (setAgentParents defined); grep across app/+convex finds no setAgentParents caller; audit_mutations.ts:28 allowlists set_agent_parents which is therefore never emitted
  • [42] Workforce leaderboard "Changes requested" column header labels a count but the cell renders a percentage
    • Evidence: workforce-dashboard.tsx:201-216 (id:'bounceRate', header t('leaderboard.bounceRate'), cell renders {bounce}% from a ratio); messages/en.json workforce.leaderboard.bounceRate = 'Changes requested'
  • [43] Per-agent Performance scorecard is hard-pinned to 30 days and ignores the workforce period selection
    • Evidence: $agentId/metrics.tsx:147 (days: 30 literal), :187 description={t('scorecard.subtitle')}; messages/en.json workforce.scorecard.subtitle = 'Last 30 days — ...'; contrast workforce/hooks.ts:104 useWorkforceMetrics(organizationId, days) which threads a real period
  • [46] Apps readiness checklist shows raw integration slug instead of the display title (wizard inconsistency)
    • Evidence: services/platform/app/features/apps/components/app-page.tsx:100-104 (integration: slug); blockedIntegrations are raw slugs from services/platform/convex/apps/install_queries.ts:58-61; contrast services/platform/app/features/apps/components/install-wizard/app-install-wizard.tsx:261-262 (title lookup)
  • [47] Uninstall success toast omits variant:'success', showing a neutral Info icon instead of the green success checkmark its sibling actions use
    • Evidence: services/platform/app/features/apps/components/app-lifecycle-actions.tsx:109 (no variant) vs :74 and :90 (variant: 'success')
  • [48] Apps run-list (and shared connected DataTable) key rows by array index on a reactive, newest-first list
    • Evidence: services/platform/app/features/apps/registry/connected/run-list.tsx:96-100 (runs.slice(0,25).map((run, i) => ... <TableRow key={i}>) with const id = str(run, '_id') at :97

Notes
Per item: [38] toast on history-load failure; [39] reseed baseline in a finally after partial organigram save; [40] delete dead setAgentParents/writeAgentParents (and drop set_agent_parents from the audit allowlist) or route the Reports-to save through it; [42] reword workforce.leaderboard.bounceRate to a rate label (all locales); [43] thread the period into the per-agent scorecard (validateSearch period enum); [46] resolve the integration title like the wizard; [47] add variant:'success' to the uninstall toast; [48] key rows by _id not array index (also fix the shared connected DataTable). [43] distinct from #1987/#1990.


Filed by an automated manual-review pass (live browser QA + a 25-agent code-grounded audit, each finding adversarially verified). Deduped against open issues (incl. #1972#1999, settings/forms epic #1941#1966, audit cluster #1842#1846) and recently-closed issues.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions