fix(messages): company channel fans out to every active agent
"Company" channel fell through to `listTopLevelAgentIds`, so a broadcast on the most ambient-sounding channel in the product only reached agents with `reports_to IS NULL`. The label said company; the semantics said board-only. The rest of the org never knew a message existed. Add `listCompanyBroadcastAgentIds` — returns every non-terminated, non-paused, non-pending agent for the company — and wire it through the `company` case in `resolveMessageWakeTargets`. Board-only fan-outs are still reachable: the `incident` channel keeps the broader pingable set (paused-by-budget included) and direct DMs to top-level agents work as before. The prompt doc catches up to the runtime: company is explicitly framed as all-hands, with board-only guidance redirected to DMs or incidents. The message-dispatch unit test asserts the new fan-out.
This commit is contained in:
1 parent
0a40c55b3c
commit
d47e637a45
5 files changed
+28
-7
No files matched your search
@@ -286,8 +286,8 @@ export function buildAgentHierarchyMethods(
|
||||
|
||||
/**
|
||||
* Returns ids of non-terminated agents that have no manager (top of the
|
||||
* reporting tree). Used by `resolveMessageWakeTargets` for "company"
|
||||
* channel broadcast.
|
||||
* reporting tree). Used for board-only fan-outs where only top-level
|
||||
* leadership should be notified.
|
||||
*/
|
||||
listTopLevelAgentIds(companyId: string): string[] {
|
||||
return readAll<{ id: string }>(
|
||||
@@ -296,6 +296,21 @@ export function buildAgentHierarchyMethods(
|
||||
).map((row) => row.id);
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns ids of every agent that is eligible to receive a routine
|
||||
* company-wide broadcast. Paused, pending-approval, and terminated
|
||||
* agents are excluded — they should not be woken by normal chatter;
|
||||
* only incidents reach the broader pingable set. Used by
|
||||
* `resolveMessageWakeTargets` for the "company" channel so the
|
||||
* semantic matches Slack (all-hands) rather than board-only.
|
||||
*/
|
||||
listCompanyBroadcastAgentIds(companyId: string): string[] {
|
||||
return readAll<{ id: string }>(
|
||||
"select id from agents where company_id = ? and status not in ('terminated', 'paused', 'pending_approval')",
|
||||
companyId,
|
||||
).map((row) => row.id);
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns ids of agents that can receive incident pings: everybody not
|
||||
* terminated or still pending approval.
|
||||
|
||||
Reference in new issue
Block a user