Libra CodeHub

CedarCopilot/cedar-mail

Branch: staging

feat(taxonomy): agentic sales-taxonomy expansion + cross-call atom linking

merged#2489CedarCopilot

CedarCopilot wants to merge 0 commits into staging from feat/agentic-taxonomy-linking

Live on prod, no production signal yetTimeline and evidence
  1. Opened
    Aug 14, 2026, 9:53 PM
  2. Merged
    Aug 14, 2026, 10:28 PM
  3. Live on prod
    Aug 14, 2026, 10:28 PM
  4. Observed 2 days
    Aug 14, 2026, 10:28 PM
  5. Pipelines steady after this deploy
    Aug 14, 2026, 10:28 PM
  6. Unobserved

    Live on prod, no production signal yet

    Aug 17, 2026, 6:02 PM

Behaviors Libra is checking

The taxonomy extraction workflow classifies each meeting’s call type and, when applicable, demo-story archetype before extracting moments, then stamps those call-level labels onto every extracted moment.Inconclusivelow confidence

OTEL fallback found no prod spans matching taxonomy-eval-extract classify phase / agent_classify_call_prompt.md since deploy.

prod, checked Aug 17, 2026, 4:02 PM
Later meetings in an opportunity can link callbacks, pain-bridging pitches/features, and recap tactics to qualifying atoms from earlier meetings, while meetings from separate opportunities continue processing independently.Inconclusivelow confidence

OTEL fallback found no prod spans matching taxonomy-eval-extract instance phase since deploy.

prod, checked Aug 17, 2026, 4:02 PM
The agentic write path inserts atoms first and then resolves same-run local references and valid prior persisted references to real field-value IDs in Postgres and Turbopuffer, dropping dangling references instead of persisting invalid pointers.Inconclusivelow confidence

OTEL fallback found no prod spans matching apps/server/scripts/write-agentic.ts since deploy.

prod, checked Aug 17, 2026, 5:02 PM
Substantive buyer reactions embedded in a rep atom’s response span are extracted as first-class objection, feedback, or prospect-question atoms with provenance back to the source rep atom.Inconclusivelow confidence

OTEL fallback found no prod spans matching taxonomy-eval instance extraction / agent_extract_prompt.md since deploy.

prod, checked Aug 17, 2026, 5:02 PM
Instance extraction uses speaker-labeled transcripts and attendee rosters to distinguish rep and buyer actions for actor-sensitive taxonomy fields and stakeholder attribution.Inconclusivelow confidence

OTEL fallback found no prod spans matching taxonomy-eval instance extraction / agent_extract_prompt.md since deploy.

prod, checked Aug 17, 2026, 6:02 PM

Libra has verdicts on 0 of 5 tracked behaviors on prod; 5 are still being checked. Libra checks hourly for 3 days after each deploy.

What

Expands the Cedar sub-event sales taxonomy on the agentic extraction path only (the deployed extractor is intentionally untouched), derived from the Pirros × Aspire × Vooma playbook-adherence coaching questions. Adds the cross-call atom-linking mechanism the coaching metrics need.

Layers

Field defs (services/field-values/defaults)

  • New fields: pain.mentioned, call_type, demo_story_type (callLevel classifiers)
  • rep.question: process_sentiment rename + solicit_concerns/champion_test intents, customer topic vocab, callback_to pointer; demo.feature narrative_type/tie_back/prompted_by; next_step.set redesign (12-value multiselect + audience_expansion/owner/target_date); stakeholder buying_role +6 & seniority; mirroring_pain mode/pains_covered; elicitation on pain/use_case; product.pitch narrative_type/tie_back
  • Every new vocab option is glossed inline in the description prompts

Envelope + linking

  • taxonomy-envelope: +derived_from_response, +source_atom reserved keys
  • link-resolver.ts: pure resolvePointers (local-id → real fieldValueId remap, in-call + cross-call), single LINK_POINTER_KEYS source of truth
  • write-remap.ts + write-agentic.ts: two-pass insert+remap behind a hard DRY_RUN gate
  • assemble_sonnet.py / extract-workflow.js: pointer passthrough, per-call classify phase, opportunity orchestration (deals parallel, meetings sequential-in-order)

Read path (structural consumption only)

  • deal-timeline: materializeLinkEdges / getTimelineGraph
  • deal-link-metrics.ts: lead coverage, objection-resolution linkage, callback count, feature-dump signal

Fathom , buildFathomSpeakerEmailMap + resolveSpeakerEmail (speaker → matched invitee email; additive, the flattened deployed transcript path is untouched).

Docs , Pirros × Aspire × Vooma master taxonomy-map, vocab draft, taxonomy diff/change-list, and the customer-facing questions HTML.

Staged primitives (intentional)

The new read-path exports (materializeLinkEdges/getTimelineGraph, the deal-link-metrics aggregates, and the Fathom/roster speaker resolvers) currently have no live production caller , they land ahead of their wiring on purpose. The consumer (Phase 4: per-question advance-rate/close-rate correlations + the deployed-path wiring) arrives in a follow-up. They are not orphaned.

Not in scope

Per-question outcome correlations (advance-rate/close-rate) , those need the outcome-cohort join + metric spec, deferred to Phase 4. The deployed extractor and its buildMetadataSchema are unchanged.

Verification

  • 81 unit tests pass (link-resolver, write-remap, taxonomy-envelope, fathom-speaker-email-map, defaults-equivalence, deal-timeline, deal-link-metrics)
  • Typecheck clean on all changed files (repo-wide pre-existing error count unchanged)
  • write-remap-dryrun.ts + phase-3 agentic dry-run harnesses: all assertions pass
  • No DB writes anywhere in this change
  • Thermo-review (strict structural): non-blocking; the flagged fixes (pointer-key dedup, deal-metrics split, dead toEdges removal) applied

Notes on automated advisories

  • Fathom sync failure handling: this change is additive-only and does not touch the sync/HTTP path associated with the known 502; the new test covers the speaker-map contract it adds.
  • Remap write path: the live DB write in write-agentic.ts is DRY_RUN-gated and exercised by the dry-run harness + write-remap.ts's pure-function tests. A live-write integration test + rollback path is follow-up before this eval script is run for real.

🤖 Generated with Claude Code

https://claude.ai/code/session_018Tggg2sBmoV3cCZGMvpsdX

Greptile Summary

The PR expands the agentic sales taxonomy and adds cross-call atom linking, graph readers, structural metrics, and speaker-email resolution.

  • Adds call-level classifier
Show production surfaces and changed-file mapping

Production surfaces

Libra has not measured any production surfaces for this change yet.

Changed files → surfaces

  • .claude/skills/field-extraction/SKILL.mdno production surface mapped
  • .claude/skills/taxonomy-field-author/SKILL.mdno production surface mapped
  • apps/server/scripts/taxonomy-eval/README.mdno production surface mapped
  • apps/server/scripts/taxonomy-eval/agent_classify_call_prompt.mdno production surface mapped
  • apps/server/scripts/taxonomy-eval/agent_extract_prompt.mdno production surface mapped
  • apps/server/scripts/taxonomy-eval/assemble_sonnet.pyno production surface mapped
  • apps/server/scripts/taxonomy-eval/extract-workflow.jsno production surface mapped
  • apps/server/scripts/taxonomy-eval/write-remap-dryrun.tsno production surface mapped
  • apps/server/scripts/taxonomy-eval/write-remap.tsno production surface mapped
  • apps/server/scripts/write-agentic.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/deal-link-metrics.test.tsno production surface mapped
  • apps/server/src/services/crm/__tests__/deal-timeline.test.tsno production surface mapped
  • apps/server/src/services/crm/deal-link-metrics.tsno production surface mapped
  • apps/server/src/services/crm/deal-timeline.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/defaults-equivalence.test.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/fathom-speaker-email-map.test.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/link-resolver.test.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/taxonomy-envelope.test.tsno production surface mapped
  • apps/server/src/services/field-values/__tests__/write-remap.test.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/call-level.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/discovery.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/product.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/qualification.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/stakeholder.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/tactics.tsno production surface mapped
  • apps/server/src/services/field-values/defaults/voice.tsno production surface mapped
  • apps/server/src/services/field-values/link-resolver.tsno production surface mapped
  • apps/server/src/services/field-values/participant-roster.tsno production surface mapped
  • apps/server/src/services/field-values/taxonomy-envelope.tsno production surface mapped
  • apps/server/src/services/integrations/meetings/fathom.tsno production surface mapped
  • docs/audits/pirros/design/pirros-aspire-master-playbook-adherence-taxonomy-map-2026-08-13.mdno production surface mapped
  • docs/audits/pirros/design/pirros-vocab-draft-from-resources.mdno production surface mapped
  • docs/audits/pirros/design/taxonomy-diff-and-change-list.mdno production surface mapped
  • docs/audits/pirros/pirros-questions-for-peter.htmlno production surface mapped