Conversation Profiles
Declare the nature of each conversation at triage (source type × call type), tag every observation with the speaker's perspective (first-hand / relayed / internal), enforce evidence ceilings and a code-computed validation gate, extract session records (decisions / todos / ideas) from working sessions, and formalize the conversations → insights → brief hand-off into the design machine.
Why
The latest two calls—Aug 31 Mark Peterson (fractional advisor, product feedback + scoping) and Sep 2 AMZ (CISO-in-Residence, all-Qpoint attendees)—are team-perspective meetings, but the pipeline has no way to declare this. Triage is a binary external: true|false (skip or extract), sourceType is resolved after extraction from metadata, and no field tags whether a speaker is internal, first-hand prospect, or secondhand relay. This created a blunder in the Aug 20 AMZ + Sam Curry call: 12 of 21 observations were attributed to Qpoint speakers, yet both Mark Peterson calls scored 5/5 interest with validates evidence—team conviction read as customer validation.
c8 already set the principle: source type says who's talking; evidence kind says what the evidence is. c11 enforces it with three small concessions: a two-field triage (sourceType + callType), a perspective tag on every observation (internal / first-hand / relayed), and a code-computed validation gate that rejects evidence above the profile's ceiling or tagged with a perspective that can't validate. Working sessions also produce artifacts today (decisions, todos, tabled ideas) that are invisible—extracting these as session records unblocks a Direction tab and cross-call rollup for the team.
Mark's steer: be explicit about the nature of the meeting and keep it simple. Small concessions only where they yield the truest analysis.
Objective
Done means:
- The two trigger calls are in the dashboard:
- AMZ Sep 2 call:
sourceType: internal, every observationperspective: internal, no interest/funnel fields,sessionrecord present, flagged with an internal badge. - Mark Peterson Aug 31 call:
sourceType: ciso-advisory,callType: roadmap-planning, observations perspective-tagged, session record with decisions / todos / parked ideas.
- AMZ Sep 2 call:
- Use-case validation is computed from
goals.md's rule (≥2 distinct companies withvalidates+usage-based+first-handfrom a non-internal source), enforced in code, and shown on use-case cards with reasons for why a use case is unvalidated (missing second company, missing usage evidence, perspective issue). - The corpus (4 calls) is re-extracted under the new profiles, no observations dropped, schema validates cleanly.
- Briefs infrastructure is in place:
market-analyst/briefs/has a template with a required## Sourceblock (call ids, observation/session item refs, sourceType + perspective + evidenceKind visible) and abriefs/INDEX.mdentry index. - Design-machine hand-off is formalized:
../design/brand/pipeline.mddocuments the seven stages (artifact, owner repo, location, status field) with one worked example (c21 inventory from Aug 31 Mark Peterson), and bilateral pointers connect market-analyst's brief output to bob-wire's brief-writer input.
Scope
Threads:
- T1 — Profile + perspective + session record; pilot on the two calls. Vocabularies (
PERSPECTIVES,CONVERSATION_PROFILES), schema extensions (Observation.perspective,CallData.profile,CallData.session), triage enhancements (sourceType + callType with derived defaults), extraction prompt (profile-specific guidance table, perspective definition, session-record section), pipeline plumbing (profile stamp, precedence in build-index), validation rules (speaker →internal, evidence ceiling + perspective downgrade), baseline measurement (Qpoint-speaker leakage per call,validatesitems by sourceType, gate result on today's data). - T2 — Gate + site.
analyze.tsfunction (computeValidation), prompt update (told the status, model narrates), site rendering (perspective pills, sourceType + perspective filters, internal/advisory excluded from KPIs, use-case gate status + reasons, Direction section, session tab). - T3 — Re-extract corpus (5 calls) + docs. Run
npm run extract --force,npm run index,npm run analyze. UpdateREADME.md"How to Interpret",CLAUDE.md,.claude/skills/extract/SKILL.md,goals.md. Close c8's "Mark M tag" item. - T4 — Design-machine hand-off (lean).
market-analyst/briefs/template.mdwith required Source block,briefs/INDEX.md,design/brand/pipeline.md(7-stage table + worked example), bilateral pointers inCLAUDE.mdSister Projects andbob-wire/.claude/agents/brief-writer.md.
Out of scope:
- The 13 other new Avoma calls (Cam syncs, Tyler 1:1s, recruiting screens, Uncork monthly) — deferred to next fetch run.
- c3 OAuth (blocked on design-repo GA decision).
- Design-repo stages 5–7: graduation rule, refinement/ruling record + status field on page-registry.ts,
## Shipconvention, qcontrol in Sister Projects / buildCycles.ts, back-link from shipped work to brief ids — noted as follow-ups for a design-repo cycle.
Key Changes
- 2026-09-03 — Kick-off: Fetched the Sep 2 AMZ call (
6fe4a00b-85a1-40b6-8b1b-c17d3706bc08, 91 min, all-Qpoint attendees) intodata/raw/vianpm run fetch -- --uuid 6fe4a00b-…without extracting. Confirmed the Aug 31 Mark Peterson call (38075ead-…, "Mark | Qpoint Dashboard + Reporting") already in corpus asciso-advisory. Baseline measurement: both Mark Peterson calls (interest 5/5,validates/reaction-basedevidence despite advisor status); Aug 20 AMZ + Sam Curry call (21 observations, 12 attributed to Qpoint speakers—the Guideline 1 blunder); 0 of 7 use cases would pass the validation gate today. Decision confirmed: Mark Peterson staysciso-advisory(product advisor under his own firm's identity); perspective tagging + declared callType prevent his conviction from reading as customer validation. Pipeline map lives in../design/brand/pipeline.mdwith clear references from this repo's docs. No stopgap extraction of the AMZ call under the current prompt—extract only as T1 pilot. - 2026-09-03 — T1 profile + perspective + session record: Triage now declares
sourceType × callTypewith registry-derived defaults (pipeline/extract.ts, shared loaderpipeline/classifications.ts;data/call-classifications.jsonmigrated from theexternalboolean).CONVERSATION_PROFILES+PERSPECTIVESinschemas/vocabularies.ts;Observation.perspective,CallData.profile,CallData.session,Classification.observedCallTypeinschemas/call.ts; prompt gains a profile table (static, cached) and a per-call "This Conversation" block (dynamic);pipeline/finalize.tsstamps the profile and runs the two deterministic rules inschemas/validation.ts(Qpoint speaker ⇒internal; evidence above the ceiling or not first-hand ⇒ downgraded).build-index.tsprecedence: declared → person override → company → all-Qpoint ⇒ internal → prospect, with disagreement warnings. Pilot: AMZ Sep 2 (internal × working-session) → 21 observations allinternal(4 auto-corrected fromrelayed), no interest/funnel, company null, session 5 decisions / 6 todos / 4 ideas. Mark Peterson Aug 31 (ciso-advisory × roadmap-planning) → 16 observations (10 first-hand, 2 relayed, 4 internal — Tyler's forced), "CISO-board consensus" evidence downgraded tospeculative, interest 4/5 as conviction, session 6 decisions / 4 todos / 4 ideas (visibility-first decision, spec todo, gamified-rollout and auto-docs ideas parked). Prompt cache held across the two profiles (10.4K tokens read on call 2). - 2026-09-03 — T2 gate + site:
schemas/validation-gate.tscomputeValidation()(≥2 companies withvalidates+usage-based+first-hand, non-internal) used bypipeline/analyze.tsMap A (written asvalidation+perspectiveBalance; the use-case prompt is told the status and may not override it; Map B keeps evidence qualifiers and the session record) and by the site (useCallData.tsuse-case rollup). Site: perspective pills + filter, declared-vs-observed call type, session record on the call page, Direction section (open / decided / tabled, todos by owner, parked ideas) and gate status with reasons on use-case cards; interest KPIs count prospects and build partners only. - 2026-09-03 — T3/T4 docs + hand-off: README "How to Interpret" (declared profile, perspective, computed validation, session records),
CLAUDE.md(architecture, data flow, schema, Sister Projects operating model: design is the driver, this repo turns conversations into insights and briefs),goals.md(rule now enforced in code),/extractand/analyzeskills, new/briefskill.briefs/TEMPLATE.md(required## Sourceblock) +briefs/INDEX.md;cam-dashboard-directives.mdretrofitted with its phase-1 Cisco call ids.../design/brand/pipeline.md(seven stages, owners, artifacts, the c21 worked example, follow-ups for stages 5–7) + pointer in../design/CLAUDE.md;../bob-wire/.claude/agents/brief-writer.mdnow readsbriefs/INDEX.mdfirst and carries a Source block. Design and bob-wire edits left uncommitted in their repos (both had work in progress). - 2026-09-03 — T3 corpus re-extracted + analysis: All 5 calls now carry declared profiles and perspective: Tiled (prospect × demo) 20 first-hand / 3 internal; Moto Aug 20 (ciso-advisory × advisor-input) 20 / 3 relayed / 2 internal, session 5/4/5; Mark Peterson Aug 31 10 / 2 / 4, session 6/4/4; AMZ Sep 2 (internal × working-session) 21 internal, session 5/6/4; AMZ + Curry Aug 20 (prospect × demo) 18 first-hand / 7 internal — the 12/21 leakage is now labelled rather than counted. Rules downgraded 4 internal-perspective
reaction-baseditems tospeculative. Registry pattern for Mark Peterson loosened (\b, not$) because the extractor renders him "Mark Peterson (Mark M)".npm run analyze -- --force: gate result 0 of 7 validated with reasons written per use case (data/analysis/use-cases/*.json→validation,perspectiveBalance); the Opus overview keeps agent-inventory "strengthening but formally unvalidated" and tells the team to stop counting heartbeat/FinOps as validated internally. Prompt cache read 10.4K on every call after the first. Still open: today's (Sep 3) Mark Peterson follow-up is not visible to the Avoma API (404 on09ecfede-…, not in any list) — likely private or unshared; fetch by uuid or drop the exported transcript intodata/raw/once it is. - 2026-09-03 — Sep 3 Mark Peterson call ("Qpoint Product",
09ecfede-…): became API-visible after Mark adjusted sharing in the Avoma UI (it had 404'd all afternoon). He now holds amark.peterson@qpoint.ioaddress, which would have made the triage defaultinternaland the "Qpoint speaker ⇒ internal" rule swallow his observations — fixed so a person-level source override inknown-entities.jsonoutranks the email domain in triage defaults (extract.ts), in the prompt (attendee note in the declared-profile block,prompt.ts) and in finalize (isQpointforced false,finalize.ts). Extractedciso-advisory × roadmap-planning: 19 observations (11 first-hand / 7 internal / 1 relayed), interest 4/5 as conviction, session 6 decisions / 5 todos / 5 ideas (MVP ingestion via CSV/JSON exports, transcript display deferred to the governance phase, last-heartbeat as the online signal, BYOK + WORM transcript governance direction; open: quota-vs-overage cost representation). His CFO-driven FinOps ask landed as first-handreaction-basedvalidates; the team's own heartbeat/enforcement claims capped atspeculative. Corpus: 6 calls.
Outcome
(In progress)