Files
orca/src/cli/dispatch.ts
T
Neil 6e1b7e7fa3 test: remove junk tests that assert source text instead of behavior (#23815)
Deletes 101 test files and trims 112 more, all matching documented junk
patterns: exact source/import/string greps, copied inventories and export
lists, duplicate invocations of a contract another test already owns,
typeof-shape checks TypeScript already enforces, and self-comparisons.

The largest group read a production `.ts` file and asserted on its text —
for example a TaskPage test that required the source to contain
`selectedRepos.find((r) => r.id === newIssueRepoId) ?? selectedRepos[0] ?? null`.
Any behavior-preserving rename broke it; no behavior change ever did.

Production-side follow-through: exports that only these tests imported are
de-exported or deleted, stale comments pointing at removed censuses are
dropped, and the reliability-gate registry, `cloud/package.json` test lists,
and orphaned source-reading helpers are updated so nothing references a
deleted file.

Two files kept their real coverage and lost only the census scaffolding:
`agent-status-producer-census.test.ts` now drives all five producers end to
end instead of grepping the source tree, and `config-toml-trust-stale-writes`
replaces an export-list parity check.
2026-09-29 01:21:53 -07:00

57 lines
1.8 KiB
TypeScript

import type { RuntimeClient } from './runtime-client'
import { RuntimeClientError } from './runtime/types'
import { HANDLER_GROUPS, type HandlerGroup } from './handler-group-manifest'
export type HandlerContext = {
flags: Map<string, string | boolean>
client: RuntimeClient
cwd: string
json: boolean
rawArgs?: string[]
}
export type CommandHandler = (ctx: HandlerContext) => Promise<void>
// Why: routing only needs key→group, so every CLI invocation can skip the
// transitive module graph of the 24 groups it does not dispatch into.
function buildRoutes(groups: readonly HandlerGroup[]): Map<string, HandlerGroup> {
const table = new Map<string, HandlerGroup>()
for (const group of groups) {
for (const key of group.keys) {
const owner = table.get(key)
if (owner) {
throw new Error(
`Duplicate CLI handler registration for "${key}" (${owner.name} and ${group.name})`
)
}
table.set(key, group)
}
}
return table
}
const ROUTES = buildRoutes(HANDLER_GROUPS)
// Why: exposes only the canonical command keys, not the handler internals.
export const HANDLER_COMMAND_KEYS: ReadonlySet<string> = new Set(ROUTES.keys())
export async function dispatch(commandPath: string[], ctx: HandlerContext): Promise<void> {
const key = commandPath.join(' ')
const group = ROUTES.get(key)
if (!group) {
throw new RuntimeClientError('invalid_argument', `Unknown command: ${key}`)
}
const handler = (await group.load())[key]
// Why: the manifest key list is verified against the real exports in CI, so a
// miss here means the group changed without the manifest — fail loudly.
if (!handler) {
throw new RuntimeClientError(
'invalid_argument',
`CLI handler group "${group.name}" does not export "${key}"`
)
}
await handler(ctx)
}
export { buildRoutes as buildHandlerRoutes }