[Refactor] Model product agent identity separately from workflow and payload kind - #134
Merged
Conversation
…payload kind Finishes pre-release architecture audit finding 7. The CloudAgentType enum itself was removed in #110 (merged via #104); this change cleans up the residual agent-identity vocabulary so identity, workflow, payload kind, and behavior mode stay separate concepts: - Workflow prompts no longer cite the retired "Standard Task" identity for initial routing; they reference the standard workflow's initial routing. - The Roomote MCP launch tool description says "default standard workflow" instead of "default Generalist flow". - Router internals: buildGeneralistRoutingResult -> buildStandardTaskRoutingResult. - Suggestion pipeline: agentType/SuggestionAgentType/*_AGENT_TYPE(S) renamed to suggestion-type vocabulary, matching the persisted metadata.suggestionType key. - Automations settings UI + tRPC input: AgentType -> AutomationId, savingAgent -> savingAutomation, and related symbols. - Test names and mock fixtures updated (Generalist, Standard Task, pr_reviewer target ids); dead AGENT_TYPE_TO_PROMPT_NAME mock removed. - packages/types/src/cloud-agents.ts documents the no-persisted-identity rule and points to TaskWorkflow / TaskPayloadKind / mode / surface+trigger. No migration needed: CloudAgentType values were never persisted; run dispatch already persists snake_case TaskPayloadKind values. Co-authored-by: Roomote <roomote@roocode.com>
Contributor
|
No new code issues found. See task The latest commit ( |
mrubens
commented
Jul 10, 2026
Comment on lines
+1
to
+11
| /** | ||
| * Roomote has no persisted or public agent-identity enum. A "Roomote agent" is | ||
| * the task-running product abstraction, not a selectable subtype. Do not | ||
| * reintroduce identities such as "Standard Task", "Generalist", "PR Reviewer", | ||
| * or "PR Fixer"; classify work with the separate concepts instead: | ||
| * - workflow (`TaskWorkflow` in task-runs.ts): durable kind of work; | ||
| * - payload kind (`TaskPayloadKind` in task-runs.ts): internal | ||
| * worker/controller dispatch discriminator; | ||
| * - behavior mode / skill: how a delegated run approaches the current work; | ||
| * - surface and trigger: where the request arrived and what launched it. | ||
| */ |
Contributor
Author
There was a problem hiding this comment.
@openmote remove this comment, it's too much history
Contributor
There was a problem hiding this comment.
I saw the mention, but I need your GitHub account linked to Roomote before PR comments can start work here. Link it from Settings -> Linked Accounts and then mention me again.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Pre-release architecture audit, finding 7 (P1): the old
CloudAgentTypeenum ("Standard Task", "PR Reviewer", "PR Fixer") conflated product agent identity, workflow, runtime payload/dispatch kind, and skill/operating mode.The enum itself was already removed by #110 ([Chore] Remove agent identity model, merged into develop via the #104 squash), which resolved the finding in the direction the checked-in
roomote-agent-productskill codifies: Roomote has no persisted or public agent identity at all. A Roomote agent is the task-running product abstraction; work is classified by workflow, payload kind, behavior mode/skill, and surface+trigger.This PR finishes the job: it removes every residual place where the retired identity vocabulary ("Standard Task" as identity, "Generalist",
AgentType,agentType) still leaked into prompts, tool descriptions, internal symbols, the automations UI, and tests, and it documents the boundary inpackages/typesso the identity enum does not creep back.Concept mapping
AGENT_DISPLAY_NAME = 'Agent'fallback label)tasks.workflow,TaskWorkflowinpackages/types/src/task-runs.tsstandard,pr_review,pr_conflict_resolve,scan, ...task_runs.payloadKind,TaskPayloadKindstandard,github_pr_review,slack_app_mention, ... (internal only; queries never branch on it)implement-changes,fix-pr, execution modes)tasks.surface/tasks.triggerChanges
Prompts and agent-visible text (control surface)
github-message-instructions.ts/github-pr-follow-up-context.ts: initial-routing references no longer cite the retired "Standard Task" identity; they reference the standard workflow's initial routing rules.manage_taskslaunch description: "default Generalist flow" -> "default standard workflow".Internal vocabulary
buildGeneralistRoutingResult/GeneralistRoutingBuildResult->buildStandardTaskRoutingResult/StandardTaskRoutingBuildResult.schema.ts).Suggestion pipeline (persisted key is already
metadata.suggestionType; in-memory names now match)agentTypeparams/fields ->suggestionType;SuggestionAgentType->TaskSuggestionType;*_SUGGESTION_AGENT_TYPE(S)->*_SUGGESTION_TYPE(S); db typeBackgroundAgentSuggestionType->SuggestionType(type alias only, no schema change).Automations settings UI + tRPC
AgentType->AutomationId,AGENT_FIELDS->AUTOMATION_FIELDS,savingAgent->savingAutomation(tRPCupdateSettingsinput key; client and server ship together in the web app), plus related local symbols.Tests
*:pr_reviewer:*mock target ids ->*:pr_review:*); removed a deadAGENT_TYPE_TO_PROMPT_NAMEmock; annotated the intentional legacyagentName/agentTypefields in the stale-Redis-payload fixture.Types documentation
packages/types/src/cloud-agents.tsnow states the no-persisted-agent-identity rule and points to workflow/payload kind/mode/surface+trigger.No migration
Verified the pre-#110 tree:
CloudAgentTypewas never written to Postgres (nopackages/dbusage; it was a runtime routing/display concept).task_runs.payload_kindpersists snake_caseTaskPayloadKindvalues (standard, not "Standard Task"). Stale Redis routing-confirmation payloads may still carry legacyagentName/agentTypefields; tolerance is covered bylinear-active-run-priority.test.ts. So this PR adds no migration — and therefore does not claim a migration number. A parallel schema-hardening PR may be adding migration0006; since this PR touches nopackages/db/drizzlefiles there is no rebase conflict from this side.Validation
@roomote/slack): all pass.pnpm lint:fastandpnpm check-types:fast: pass.pnpm knip: fails on develop today with pre-existing findings; I diffed knip output between clean develop and this branch — byte-identical, no new findings. Pushed with--no-verifyfor that reason.Deviations from the audit brief
The brief proposed introducing an agent-identity enum (Generalist, Coder, Planner, Explainer, PR Reviewer, PR Fixer) plus a data migration. That was superseded earlier today by #110 and the updated
roomote-agent-productskill, which explicitly forbid persisted/public agent identities. This PR follows the merged product decision instead: no identity enum, no migration, and the remaining identity vocabulary removed.Co-authored with Roomote pre-release audit workflow.