diff --git a/apps/code/snapshots.yml b/apps/code/snapshots.yml index 94a33aa7ea..367b3371a3 100644 --- a/apps/code/snapshots.yml +++ b/apps/code/snapshots.yml @@ -537,21 +537,17 @@ snapshots: git-dialogs--sync-success--light: hash: v1.k4693efd2.8d79d77c9338aeaa73734836f0e17fde987f6d3239914f4013889d3110e5088d.Rq-w2o1uhes_a5hUWqMXeiDkfnoPCZPt932LkEQXCco loops-loopslistview--comprehensive--dark: - hash: v1.k4693efd2.c128012b7f910839e65e8eaf14d5456c93f90d77747d0625ca35fddd8d5adf7a.fuugB5Ov6boP7fg6fWP7A7IG2yYnPUAAWLKZLuV8rZ0 + hash: v1.k4693efd2.25744a9471ec664c70e346ac5cb330c025a031626bc486abe8820b7b6dbc1a19.Shh8Yl7SdombnNc4-uJjlIbx-n4C0MGXxtOGB1bjJTY loops-loopslistview--comprehensive--light: - hash: v1.k4693efd2.4d25a48e0bd7e60d3bbb433e246486e4c9ac95979db86e20eb8bf5cb119d1eb2.EzrENjVHwVMyV00pEA-71TeVomJtchiym5DqWFkujlA + hash: v1.k4693efd2.ef8e012cc506a0bf5e761ec8e89943820d4b391f7023f506da7d79586b49a356.ATiN8Y0hUmfGvr0rUytYWX-fITyHRTgeN1i_HOOGZuc loops-loopslistview--long-mixed-list--dark: - hash: v1.k4693efd2.fdbf0c24cb386c4345279db3e648efe72aa8a2a984d491361522f62074a771c9.2QmRxRMWYFFfBFrbMm0Dm9rWcvd1lfRbc0egfzoESnY + hash: v1.k4693efd2.c9915e22655fe1f6b77eabaf11d8876648c387ceebac6cd8be1880e7255bd7a5.y-gyTKSp7wYbuS57TABRbEyMSL9_U1wvHYvbyCeAbiQ loops-loopslistview--long-mixed-list--light: - hash: v1.k4693efd2.aa17d9b6f40fbd3914bd742951db9f90add0bd233c54170803c8483aeb45b43b.yXpqqGczOq1uW5k4Ie7ddNTnne-cFTglZ9cL800pXB4 - loops-loopslistview--shared-page-header--dark: - hash: v1.k4693efd2.14ab860dcb0df51b4019f012288e45f3a2c4c23fa08e809efef8c04b5687fe36.qoMLHprZmV2wON156NBbl3sqP84a4nXgdYm1H6WpTVM - loops-loopslistview--shared-page-header--light: - hash: v1.k4693efd2.23be5408ff3b4a912a0ce0457af8638124b99a01c88a499d0f4204cee2c62487.dGBP1K08MA2Fvhml-BPl5eFra8U83JXmy04NK9wOQnM + hash: v1.k4693efd2.5fec9e1a3c14f1bc319cd7e5abc24b3d66ed787986a103b5330f49341d4983ad.mpD-eTS6vkSbsJdOYaHXASHQd5IiJGWRCb6uDGlzhpk loops-loopslistview--with-builder-sessions--dark: - hash: v1.k4693efd2.df4a1a4764e1de7b69905814b09c30d9b43f705f5e66c7ad83829c567d4faa1a.jthufoX_KPbbxScjj3pPBA4lEtT9Ym6zUCH-v1759GM + hash: v1.k4693efd2.06b404e4016ba0eb86769331a574bc640be1ad26ebf3a04d0256334d1da041a3.fPfF8c2wNFREfy8dVRdsw7W9Fpqj7HEtuaERMroNHMA loops-loopslistview--with-builder-sessions--light: - hash: v1.k4693efd2.eb65c38bb0de7efedbc0d7a6c27a6695528e2e6b60949617e7d22335b1e68c8b.fJr9uykvc8S7LI_ASXk5KRqxXCwIqh6ld9zfzs4shP0 + hash: v1.k4693efd2.30f89915a12cadf313216403fb0f3e221f3c33cee763f0692ae2b96b4332e2b9.j00vexnH4QS0wJAHn7pQNpeITYYRtOxlvB2ngyzqU0c primitives-pageheader--title-only--dark: hash: v1.k4693efd2.f7f8c560b1e5cf20050189e10fc0f129e555ba672300a7a09bef5827c171a743.yP9Pp_k51agu_9Ri55Y7uCAPBQ1UTeUQJA9U9dPMKfQ primitives-pageheader--title-only--light: diff --git a/apps/mobile/src/app/inbox/[...id].tsx b/apps/mobile/src/app/inbox/[...id].tsx index 8ad989bfa9..5ffc461924 100644 --- a/apps/mobile/src/app/inbox/[...id].tsx +++ b/apps/mobile/src/app/inbox/[...id].tsx @@ -463,7 +463,7 @@ export default function ReportDetailScreen() { {/* Title */} - {report.title ?? "Untitled signal"} + {report.title ?? "Untitled report"} {/* Meta row */} @@ -638,7 +638,7 @@ export default function ReportDetailScreen() { setDismissOpen(false)} onDismissed={handleDismissed} /> diff --git a/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx b/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx index 72de972737..03524e145d 100644 --- a/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx +++ b/apps/mobile/src/features/inbox/components/ArchivedReportList.tsx @@ -55,7 +55,7 @@ const ArchivedRow = memo(function ArchivedRow({ numberOfLines={2} ellipsizeMode="tail" > - {report.title ?? "Untitled signal"} + {report.title ?? "Untitled report"} diff --git a/apps/mobile/src/features/inbox/components/ReportListRow.tsx b/apps/mobile/src/features/inbox/components/ReportListRow.tsx index 3b0508bb83..e12cff57bf 100644 --- a/apps/mobile/src/features/inbox/components/ReportListRow.tsx +++ b/apps/mobile/src/features/inbox/components/ReportListRow.tsx @@ -70,7 +70,7 @@ function ReportListRowComponent({ report, onPress }: ReportListRowProps) { numberOfLines={2} ellipsizeMode="tail" > - {report.title ?? "Untitled signal"} + {report.title ?? "Untitled report"} diff --git a/packages/ui/src/features/inbox/CLAUDE.md b/packages/ui/src/features/inbox/CLAUDE.md index 7ac2c6f467..b8b8273d57 100644 --- a/packages/ui/src/features/inbox/CLAUDE.md +++ b/packages/ui/src/features/inbox/CLAUDE.md @@ -4,13 +4,13 @@ The Inbox is the PostHog surface for **Self-driving**: agents that watch product ## Product Model -The renderer still talks to backend endpoints and TypeScript types with the legacy `signals` naming. User-facing copy should say **Self-driving**, **Responder**, **report**, **run**, or **finding** depending on context. Do not rename backend paths or shared API fields unless the PostHog Cloud backend has changed too. +The renderer still talks to backend endpoints and TypeScript types with the legacy `signals` naming. User-facing copy should say **Self-driving**, **agent**, **report**, **run**, or **signal** depending on context. Do not rename backend paths or shared API fields unless the PostHog Cloud backend has changed too. The main objects are: - `SignalReport`: the unit shown in all Inbox tabs. - Findings: the source observations that contributed to a report, fetched separately for detail screens. -- Artefacts: structured agent output attached to a report, such as priority, actionability, suggested reviewers, repo selection, and findings from research. +- Artefacts: structured agent output attached to a report, such as priority, actionability, suggested reviewers, repo selection, and signals from research. - Report tasks: links from a report to tasks created for research or implementation. ## Information Architecture @@ -53,7 +53,7 @@ same artefact-lift pattern as `priority`/`actionability`/`already_addressed` — so cards avoid an N+1 per-card artefact fetch. Unknown reason codes fall back to the raw value; cards with no dismissal artefact simply omit the chip. -Responder configuration is **not** an Inbox tab. It is the top-level Responders sidebar item at `/code/agents`. The legacy `/code/inbox/agents` route redirects there. +Agent configuration is **not** an Inbox tab. It is the top-level Agents sidebar item at `/code/agents`. The legacy `/code/inbox/agents` route redirects there. Reviewer scope is a UI preference stored in `inboxReviewerScopeStore`. It filters the list between reports suggested for the current user and reports for someone else. It does not change tab membership; the tab predicates are independent. @@ -90,7 +90,7 @@ Tab membership and counts live in `utils/reportMembership.ts`. Keep that file as Detail screens layer additional data on top of the base report: - `useInboxReportById(reportId)` for the report record. -- `useInboxReportSignals(reportId)` for contributing findings. +- `useInboxReportSignals(reportId)` for contributing signals. - `useInboxReportArtefacts(reportId)` for structured outputs such as suggested reviewers and repo selection. - `useReportTasks(reportId, status)` for linked research/implementation tasks. @@ -102,7 +102,7 @@ The Inbox reads from PostHog Cloud's Self-driving backend, currently implemented - `GET /api/projects/{teamId}/signals/reports/`: paginated report list. Supports filters such as status, ordering, source product, suggested reviewers, and priority. - `GET /api/projects/{teamId}/signals/reports/{id}/`: single report detail. -- `GET /api/projects/{teamId}/signals/reports/{id}/signals/`: contributing findings. +- `GET /api/projects/{teamId}/signals/reports/{id}/signals/`: contributing signals. - `GET /api/projects/{teamId}/signals/reports/{id}/artefacts/`: structured report artefacts. - `GET /api/projects/{teamId}/signals/reports/{id}/tasks/`: tasks linked to a report. @@ -112,7 +112,7 @@ Card headlines are derived client-side from `summary` by `utils/reportPresentati ## Configuration Surface -Responder setup lives in `features/agents/components/AgentsView.tsx`, which mounts `ConfigureAgentsSection`. This surface composes existing GitHub, Slack, source-toggle, and MCP configuration pieces. Keep setup copy outcome-focused: the user is asking Self-driving to figure out what matters, not choosing internal artefact types. +Agent setup lives in `features/agents/components/AgentsView.tsx`, which mounts `ConfigureAgentsSection`. This surface composes existing GitHub, Slack, source-toggle, and MCP configuration pieces. Keep setup copy outcome-focused: the user is asking Self-driving to figure out what matters, not choosing internal artefact types. Onboarding/setup should be task-backed when it starts work. Do not model it as a static checklist if the intended behavior is to launch an agent task. @@ -124,7 +124,7 @@ Shared primitives exist to keep the surfaces consistent: - `InboxDetailPageHeader` for detail headers. - `DetailSection` for content sections inside detail screens. -- `SignalsList` and the existing detail `SignalCard` for contributing findings. +- `SignalsList` and the existing detail `SignalCard` for contributing signals. - Badge and metadata helpers in `components/utils/` and `InboxMetaRow`. - `SOURCE_PRODUCT_META` for source-product labels and icons. @@ -134,7 +134,7 @@ When adding or changing UI, reuse those primitives first. Avoid encoding one-off - Do not reuse the deleted legacy `ReportListRow`, `ReportDetailPane`, or old list/detail stores. - Do not put page-level Inbox title or navigation into the global app header; `InboxView` owns the Inbox page chrome. -- Do not add a configure shortcut back into the Inbox header; Responders configuration is a sidebar destination. +- Do not add a configure shortcut back into the Inbox header; Agents configuration is a sidebar destination. - Scout (`signals_scout`) is a real Cloud source product. Keep it covered wherever source products surface: `INBOX_SOURCE_OPTIONS`, `SOURCE_PRODUCT_META`, and the scout-name display in `SignalCard`. - Scout management UI (fleet configuration, run history) lives in `features/scouts/` and is backed by the PostHog Cloud scout endpoints (`/api/projects/{teamId}/signals/scout/`). Do not add scout controls that have no backing endpoint there. - Do not put preview shims or mock report data in `apps/code/index.html`; the app shell should stay minimal. diff --git a/packages/ui/src/features/inbox/components/AgentRunDetail.tsx b/packages/ui/src/features/inbox/components/AgentRunDetail.tsx index c8751d0306..4f32aea5e9 100644 --- a/packages/ui/src/features/inbox/components/AgentRunDetail.tsx +++ b/packages/ui/src/features/inbox/components/AgentRunDetail.tsx @@ -110,7 +110,7 @@ function RunOutputWidget({ report }: { report: SignalReport }) { Research couldn't complete – check the task log below for the error. - The Responder may retry automatically. + The agent may retry automatically. @@ -123,7 +123,7 @@ function RunOutputWidget({ report }: { report: SignalReport }) { content={report.summary} fallback={ report.status === "in_progress" - ? "The Responder is investigating – partial findings will appear here as they land." + ? "The agent is investigating – partial signals will appear here as they land." : "Queued for research." } variant="detail" @@ -325,7 +325,7 @@ function AgentRunDetailContent({ report }: { report: SignalReport }) { <> - {signals.length} finding{signals.length === 1 ? "" : "s"} + {signals.length} signal{signals.length === 1 ? "" : "s"} )} @@ -412,7 +412,7 @@ function AgentRunDetailContent({ report }: { report: SignalReport }) { title="Evidence so far" rightSlot={ - {signals.length || report.signal_count} finding + {signals.length || report.signal_count} signal {(signals.length || report.signal_count) === 1 ? "" : "s"} } diff --git a/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx b/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx index 3f98471ae2..498917b5e8 100644 --- a/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx +++ b/packages/ui/src/features/inbox/components/ConfigureAgentsSection.tsx @@ -125,7 +125,7 @@ export function ConfigureAgentsSection() { Scheduled agents that sweep this project on a cadence and emit - findings to your inbox.{" "} + signals to your inbox.{" "} {/* Placeholder docs link until a dedicated scouts page exists. */} {isLoading ? ( @@ -209,7 +209,7 @@ export function ConfigureAgentsSection() { diff --git a/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx b/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx index bcaacd6c00..e122dcd0ae 100644 --- a/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx +++ b/packages/ui/src/features/inbox/components/InboxDetailFrame.tsx @@ -137,7 +137,7 @@ export function InboxDetailFrame({ {evidenceCount > 0 && ( <> - {evidenceCount} finding{evidenceCount === 1 ? "" : "s"} + {evidenceCount} signal{evidenceCount === 1 ? "" : "s"} @@ -151,7 +151,7 @@ export function InboxDetailFrame({ )} @@ -181,7 +181,7 @@ export function InboxDetailFrame({ @@ -196,7 +196,7 @@ export function InboxDetailFrame({ title={evidenceSection.title} rightSlot={ - {evidenceCount} finding + {evidenceCount} signal {evidenceCount === 1 ? "" : "s"} } diff --git a/packages/ui/src/features/inbox/components/PullRequestsTab.tsx b/packages/ui/src/features/inbox/components/PullRequestsTab.tsx index e29d53bdc9..1d33402ca5 100644 --- a/packages/ui/src/features/inbox/components/PullRequestsTab.tsx +++ b/packages/ui/src/features/inbox/components/PullRequestsTab.tsx @@ -24,7 +24,7 @@ export function PullRequestsTab() { entireProjectTitle: "No pull requests in the project right now", teammateTitle: "No pull requests for this reviewer right now", description: - "When a Responder ships a code change, the PR draft lands here for you to review and publish.", + "When an agent ships a code change, the PR draft lands here for you to review and publish.", }} /> ); diff --git a/packages/ui/src/features/inbox/components/ReportCard.tsx b/packages/ui/src/features/inbox/components/ReportCard.tsx index a58955c4af..3cdfbbe2d9 100644 --- a/packages/ui/src/features/inbox/components/ReportCard.tsx +++ b/packages/ui/src/features/inbox/components/ReportCard.tsx @@ -323,7 +323,7 @@ export function ReportCard(props: ReportCardProps) { > - {report.signal_count} finding + {report.signal_count} signal {report.signal_count !== 1 ? "s" : ""} diff --git a/packages/ui/src/features/inbox/components/ReportsTab.tsx b/packages/ui/src/features/inbox/components/ReportsTab.tsx index 1b531a0172..c33746e8a3 100644 --- a/packages/ui/src/features/inbox/components/ReportsTab.tsx +++ b/packages/ui/src/features/inbox/components/ReportsTab.tsx @@ -15,7 +15,7 @@ export function ReportsTab() { entireProjectTitle: "No reports in the project yet", teammateTitle: "No reports for this reviewer yet", description: - "Reports are what Responders surface when there's something worth your judgment but no clean code change to draft.", + "Reports are what agents surface when there's something worth your judgment but no clean code change to draft.", }} /> ); diff --git a/packages/ui/src/features/inbox/components/RunsTab.tsx b/packages/ui/src/features/inbox/components/RunsTab.tsx index af45dab0d9..8e4b41279f 100644 --- a/packages/ui/src/features/inbox/components/RunsTab.tsx +++ b/packages/ui/src/features/inbox/components/RunsTab.tsx @@ -95,10 +95,10 @@ export function RunsTab() { {scope === INBOX_SCOPE_FOR_YOU - ? "No Responders are working on something for you right now" + ? "No agents are working on something for you right now" : scope === INBOX_SCOPE_ENTIRE_PROJECT - ? "No Responders are working on anything in the project right now" - : "No Responders are working on something for this reviewer right now"} + ? "No agents are working on anything in the project right now" + : "No agents are working on something for this reviewer right now"} When Self-driving kicks one off, you'll see the live run land here diff --git a/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx b/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx index 5da50a8adf..203a3a5382 100644 --- a/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx +++ b/packages/ui/src/features/inbox/components/utils/ExplainedDismissOptionLabels.tsx @@ -4,10 +4,10 @@ import { RadioGroup, Tooltip } from "@radix-ui/themes"; import type { ReactNode } from "react"; const PAUSE_OPTION_TOOLTIP = - "Snoozes this report: it briefly leaves your inbox while more context is gathered, and it can come back if new findings match."; + "Snoozes this report: it briefly leaves your inbox while more context is gathered, and it can come back if new signals match."; const SUPPRESS_OPTION_TOOLTIP = - "Archives permanently: the report leaves your inbox and matching findings will not surface it again. Your reason is saved with the report."; + "Archives permanently: the report leaves your inbox and matching signals will not surface it again. Your reason is saved with the report."; function dismissReasonOptionDomId(value: DismissalReasonOptionValue): string { return `dismiss-report-dialog-reason-${value}`; diff --git a/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx b/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx index 0acdd3e73b..9f72d0680e 100644 --- a/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx +++ b/packages/ui/src/features/inbox/components/utils/SignalReportStatusBadge.tsx @@ -8,10 +8,10 @@ const STATUS_TOOLTIPS: Record = { resolved: "This report is resolved — its implementation pull request merged.", pending_input: "This report needs human input in PostHog before it can proceed.", - in_progress: "An AI agent is actively researching this report's findings.", + in_progress: "An AI agent is actively researching this report's signals.", candidate: "Queued for research. An agent will pick this up shortly.", potential: - "Gathering findings. The report will be queued once enough evidence accumulates.", + "Gathering signals. The report will be queued once enough evidence accumulates.", failed: "Research failed. The report may be retried automatically.", suppressed: "This report has been suppressed and is out of your inbox.", deleted: "This report has been deleted.", diff --git a/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx b/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx index 45e6ac0440..ba2ee222c2 100644 --- a/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx +++ b/packages/ui/src/features/scouts/components/FleetFindingsCallout.tsx @@ -45,10 +45,10 @@ export function FleetFindingsCallout() { - Scout findings + Scout signals - {summary.totalCount} finding{summary.totalCount === 1 ? "" : "s"}{" "} + {summary.totalCount} signal{summary.totalCount === 1 ? "" : "s"}{" "} across {summary.scoutCount} scout {summary.scoutCount === 1 ? "" : "s"} {summary.latestEmittedAt ? ( diff --git a/packages/ui/src/features/scouts/components/ScoutBadges.tsx b/packages/ui/src/features/scouts/components/ScoutBadges.tsx index 4245298dfa..952e5cbf39 100644 --- a/packages/ui/src/features/scouts/components/ScoutBadges.tsx +++ b/packages/ui/src/features/scouts/components/ScoutBadges.tsx @@ -27,7 +27,7 @@ export function ScoutOriginBadge({ config }: { config: ScoutConfig }) { export function DryRunBadge({ config }: { config: ScoutConfig }) { if (config.emit) return null; return ( - + Mode - Dry run executes the scout but holds back its findings + Dry run executes the scout but holds back its signals - Finding + Signal confidence {Math.round(emission.confidence * 100)}% diff --git a/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx b/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx index b539ad6650..fb83bf8c96 100644 --- a/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx +++ b/packages/ui/src/features/scouts/components/ScoutFindingDiscussButton.tsx @@ -56,7 +56,7 @@ export function ScoutFindingDiscussButton({ const { runTask, isRunning } = useScoutChatTask({ prompt, - taskLabel: "finding discussion", + taskLabel: "signal discussion", loggerScope: "scout-finding-discuss", chatType: "finding_discuss", surface: "scout_detail", @@ -85,7 +85,7 @@ export function ScoutFindingDiscussButton({