CedarCopilot wants to merge 0 commits into staging from fix/taxonomy-extraction-perf-linking
Live on prod, no production signal yet
OTEL fallback found no prod spans matching taxonomy extraction workflow since deploy.
OTEL fallback found no prod spans matching taxonomy extraction link resolver since deploy.
OTEL fallback found no prod spans matching taxonomy vocabulary canonicalization since deploy.
OTEL fallback found no prod spans matching taxonomy extraction workflow since deploy.
OTEL fallback found no prod spans matching taxonomy extraction workflow since deploy.
OTEL fallback found no prod spans matching taxonomy extraction workflow since deploy.
Libra has verdicts on 0 of 6 tracked behaviors on prod; 6 are still being checked. Libra checks hourly for 3 days after each deploy.
Bundles the extraction perf work + the linking-audit fixes into one PR.
prospect.question signal-gated , capture only when it reveals a need, carries an objection/hesitation, probes the buying process, or triggers a demo. It was 25% of all rows and the driver of the group-demo output-cap blowout.prospect.question, next_step.set, stakeholder.engaged, tactic.*, prospect.call_ran_over) emit only content+payload+persona+ids (null summary/responseSpan/strength/completeness). Measured: prospect.question −43%/moment. Enforced defensively in assemble_sonnet.py.gen-field-defs emits <stem>.instance.ts (instance + call-level) and <stem>.judgment.ts (versioned); each agent reads only its plane. Judgment 115KB→27KB (−77%), instance →90KB (−22%). Net def-read load per 3-meeting deal ~196k→~72k tokens.call_type/demo_story_type) first in the same transcript read; the separate classify fan-out is gone (one fewer agent + one fewer transcript read per meeting).gen-field-defs now filters background:true first, so an org's live CRM list/text fields (50 for Pirros) no longer leak into the extraction planes , Pirros went from a wrong 29 instance + 16 versioned back to the canonical 18 + 8. Without this we'd extract transcript values into live CRM fields. Vocab guardrail + multi-select sidecar scoped to the taxonomy plane too. Note: this duplicates #2506's fix , recommend closing #2506 or merging this and rebasing.
local_id / prior base#local id, not a "verbatim span" (the resolver drops span refs as danglers). Fixed in the extract prompt and the 5 shipped field defs (responds_to, callback_to, tie_back×2, pains_covered).flow=callback / narrative_type⊇pain_bridge / mode=recap) set to agree , no longer "set ONLY when <label>", which suppressed recall (0 of 52 links in the dry run). Added a dedicated linking pass.write-agentic builds cross-call priorCandidates from the DB (the deal's prior meetings' pain/use_case/rep.question atoms) and event-scopes the delete, so cross-call refs resolve on partial/incremental runs instead of dangling. Full-run behavior is byte-identical.defaults-equivalence + link-resolver tests green (12/12). eval-new-fields.ts regenerated.write-agentic's DRY_RUN gate , recommend a --dry-run pass before the next real write to confirm cross-call priorCandidates resolution.🤖 Generated with Claude Code
https://claude.ai/code/session_018Tggg2sBmoV3cCZGMvpsdX
The PR reduces taxonomy-evaluation token volume, splits generated definitions by extraction plane, merges call classification into instance extraction, and improves cross-call pointer resolution. It also changes incremental write replacement and retry behavior, where two correctness issues remain.
Libra has not measured any production surfaces for this change yet.