query_project: implement the standup view (#28)
The StandupScreen already renders drift + plan + nag from real data (standup-view, #52), but the agent's query_project standup view was a `notImplemented` stub, so Reginald couldn't answer standup questions from deterministic data. Implement `standupView(snap, asOf)`: today's plan (the scheduler's earliest pick per person, with why — critical path / blocks / order), overnight drift (real anomalies: issues sitting in review, or steeping past their estimate), and the single stalest blocker to nag about (+ what it blocks). All deterministic; the model narrates. Added 'standup' to the query_project tool's view enum. Acceptance met: standup surfaces schedule drift + at least one stale blocker (and stays calm — no nag, empty drift — when nothing is steeping). +2 core tests; typecheck clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,10 +17,11 @@ export const QUERY_PROJECT_TOOL: ToolDecl = {
|
||||
properties: {
|
||||
view: {
|
||||
type: 'string',
|
||||
enum: ['focus', 'board', 'calibration', 'issue', 'search'],
|
||||
enum: ['focus', 'board', 'calibration', 'issue', 'search', 'standup'],
|
||||
description:
|
||||
'focus = Now/Next/Later; board = issues by lifecycle column; calibration = estimate-vs-actual; ' +
|
||||
'issue = one issue (needs filters.issueId); search = issues matching filters.query.',
|
||||
'issue = one issue (needs filters.issueId); search = issues matching filters.query; ' +
|
||||
"standup = today's plan + overnight drift + the stalest blocker.",
|
||||
},
|
||||
filters: {
|
||||
type: 'object',
|
||||
|
||||
Reference in New Issue
Block a user