/** * daemon/standup.ts — what everyone did, is doing, and is stuck on. * * THE OLDEST MEETING IN SOFTWARE, and it survives because it answers the three * questions a lead cannot get from a repository: what moved, what is moving, * and what is blocked. Two of those are already visible here — the objective a * machine is working to, and the state of its branch. The third is the one that * needs the agent to say something, so the standup asks for it rather than * inferring it, exactly as it would of a person. * * WHY IT IS NOT A MEETING. Nobody attends. It is assembled on a schedule and * delivered wherever the lead is — phone, terminal, task list — because the * whole reason for giving each developer their own machine was that the lead * stopped having to sit and watch. A standup that requires attendance would put * that back. * * WHAT IT DELIBERATELY DOES NOT DO. It does not decide anything. No agent is * appointed to run it, chase people or reprioritise. The scrum master's job * splits cleanly in two: the process half is a schedule and a template, which is * this file; the judgement half is deciding what matters when two things * conflict, which stays with the person. Automating the first is a saving. * Automating the second recreates the supervisor problem this whole design * exists to remove — an agent watching agents, costing a context, becoming the * bottleneck it was meant to relieve. */ export interface StandupEntry { machine: string; reachable: boolean; /** What it was told to work on. */ objective?: string; /** What it appears to be doing right now. */ doing?: string; branch?: string; head?: string; dirty?: number; ahead?: number; behind?: number; /** Anything it could not do, in its own words. */ blocked?: string; detail?: string; } /** * Collect from every machine, including this one. * * An unreachable machine is REPORTED as unreachable rather than dropped. A * developer missing from a standup and a developer with nothing to say look * identical in a list that omits them, and they want opposite reactions — one * needs chasing, the other does not. */ export declare function collectStandup(repo?: string): Promise; /** * The report, in the shape a person reads at a glance. * * Ordered by what needs attention rather than by machine name: anything * unreachable or blocked first, then work ready to look at, then the rest. A * list sorted alphabetically makes the reader do the triage that the report * exists to save them. */ export declare function renderStandup(rows: StandupEntry[]): string; /** * Run it on a schedule and deliver it. * * Off unless asked for. A report that arrives whether or not anybody wanted it * teaches its reader to skip it, and a standup nobody reads is worse than none * because it looks like oversight. */ export declare function startStandup(everyMinutes: number, deliver: (text: string) => void, repo?: string): void; export declare function stopStandup(): void; //# sourceMappingURL=standup.d.ts.map