CedarCopilot wants to merge 3 commits into staging from refactor/document-store-retention
Live on prod, 0 of 6 surfaces working, 2 days left
internal_only
internal_only
internal_only
internal_only
internal_only
Libra found 6 production surfaces on prod but could not judge any of them yet. 6 surfaces had no requests at all. Libra checks hourly for 3 days after each deploy.
Every agent template arrives with a workspace. The library offered 24 agents; choosing one
minted a definition, a filing, a trigger and a placeholder file that said "I am a placeholder"
, no config, no memory, no output template. Measured across the database: config/ existed for
2 users (both hand-made), output tables for 3. jesse's own linkedin-outreach and
pipeline-revival folders were empty, and three of his library agents carried a default_file
ending in .md, so their Files tab opened on a document that could not exist.
Now a template ships its config, its memory and its output as a skeleton with sample rows, so
the only thing left to say in the chat is "fill this out with my data" , plus eighteen new
templates distilled from the agents live users actually built (130 custom slugs across ~110
accounts). Design: apps/server/docs/agent-library-workspaces.md.
Alongside it, a set of smaller fixes: onboarding lets you out when you finish or skip it, a subagent read never answers with a tombstone, pipeline review runs without a CRM, a renamed file row carries its new name in the same frame, and a blacklisted query-persistence entry stays un-restored.
The CRM updater's fields panel listed the fields it provably never writes. ownerAgentId is
a carve-out: resolveFieldLiveness states that crm-updater excludes owned fields, so it writes
precisely the fields nobody owns. The panel filtered on ownerAgentId === agentId for every
agent alike. On a real account that set is empty , of Kendall's 52 custom fields, 12 belong to her
strategist, 40 are unowned, and 0 name crm-updater , so her page showed no CRM fields beside
the 40 it rewrites on every run. Anyone auditing "which fields does the CRM updater keep current"
from that panel would have concluded none.
The CRM fields tab 403'd in Cedar-staff admin view. Admin view swaps ctx.sessionUser to the
impersonated user, but the impersonation middleware skips /auth/*, so useSession() keeps
reporting the signed-in staff member , use-viewer-user-id.ts documents this at length, and three
call sites ignored it. AgentView passed viewingAs ?? session?.user?.id as the CRM panel's
owner, so a request answered as the viewed rep named the staff member as its target and the
server refused it. The symptom is a 403 inside one panel with a clean server log, which reads as
"this tab is broken" rather than as an auth bug. AgentSettingsSection's CRM fields row was the
same class and worse , it passed no targetUserId at all, so an org admin viewing a teammate read
their own AOP by that id.
Also here: the CRM updater now lands on its fields tab. Strip order and landing tab are two
different questions, so the decision is a pure landingAgentTab() rather than an expression
inside a 700-line view , an explicit ?tab= still wins (those addresses are in notifications and
chat transcripts already sent), and it waits for the agent rather than guessing, so it can never
land on a tab a view-as perspective has hidden.
Honest scope: this branch carries work from several concurrent sessions. I verified the
agent-configuration changes above directly , both fixes are proven against live account data, and
carry regression tests (agentFieldsCallout.test.tsx, crm-agent.test.ts → "under Cedar-staff
admin view", agent-tabs.test.ts → landingAgentTab). 460 tests pass across
modules/agents, modules/aop and the home suites; both packages typecheck clean.
The rest of the branch is summarised from its commits and design doc rather than re-verified by
me. CI is the first full run over this branch , no /review, /thermo-review or Greptile
pass was run for this PR, and oxlint is not installed in this checkout so lint was not run
locally.
🤖 Generated with Claude Code
| Surface | Requests | Errors | p95 | Users | Verdict |
|---|---|---|---|---|---|
| model_chunk Automation Agent (OSS: meeting-prep) | 0 → 2 | 0 → 0 (0%) | not measured → 1 ms | 0 | Insufficient traffic 2 requests, under the 20 Libra needs |
| model_step Automation Agent (OSS: meeting-prep) | 0 → 1 | 0 → 0 (0%) | not measured → 7312 ms | 0 | Insufficient traffic 1 request, under the 20 Libra needs |
| model_inference Automation Agent (OSS: meeting-prep) | 0 → 1 | 0 → 0 (0%) | not measured → 7311 ms | 0 | Insufficient traffic 1 request, under the 20 Libra needs |
| /api/templates/preview | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| POST /api/templates/preview | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| mail.send.getDraft | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| model_chunk Automation Agent (OSS: meeting-prep) | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| /api/templates/preview | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| model_step Automation Agent (OSS: meeting-prep) | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| mail.send.getDraft | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| model_inference Automation Agent (OSS: meeting-prep) | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |
| POST /api/templates/preview | 0 → 0 | 0 → 0 (0%) | not measured | 0 | No traffic No requests recorded since this deploy. |