← Cycles
Market Analyst · c11

Conversation Profiles

activecreated 2026-09-03· last activity 2026-09-03

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:

  1. The two trigger calls are in the dashboard:
    • AMZ Sep 2 call: sourceType: internal, every observation perspective: internal, no interest/funnel fields, session record 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.
  2. Use-case validation is computed from goals.md's rule (≥2 distinct companies with validates + usage-based + first-hand from 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).
  3. The corpus (4 calls) is re-extracted under the new profiles, no observations dropped, schema validates cleanly.
  4. Briefs infrastructure is in place: market-analyst/briefs/ has a template with a required ## Source block (call ids, observation/session item refs, sourceType + perspective + evidenceKind visible) and a briefs/INDEX.md entry index.
  5. Design-machine hand-off is formalized: ../design/brand/pipeline.md documents 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, validates items by sourceType, gate result on today's data).
  • T2 — Gate + site. analyze.ts function (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. Update README.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.md with required Source block, briefs/INDEX.md, design/brand/pipeline.md (7-stage table + worked example), bilateral pointers in CLAUDE.md Sister Projects and bob-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, ## Ship convention, 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) into data/raw/ via npm run fetch -- --uuid 6fe4a00b-… without extracting. Confirmed the Aug 31 Mark Peterson call (38075ead-…, "Mark | Qpoint Dashboard + Reporting") already in corpus as ciso-advisory. Baseline measurement: both Mark Peterson calls (interest 5/5, validates / reaction-based evidence 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 stays ciso-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.md with 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 × callType with registry-derived defaults (pipeline/extract.ts, shared loader pipeline/classifications.ts; data/call-classifications.json migrated from the external boolean). CONVERSATION_PROFILES + PERSPECTIVES in schemas/vocabularies.ts; Observation.perspective, CallData.profile, CallData.session, Classification.observedCallType in schemas/call.ts; prompt gains a profile table (static, cached) and a per-call "This Conversation" block (dynamic); pipeline/finalize.ts stamps the profile and runs the two deterministic rules in schemas/validation.ts (Qpoint speaker ⇒ internal; evidence above the ceiling or not first-hand ⇒ downgraded). build-index.ts precedence: declared → person override → company → all-Qpoint ⇒ internal → prospect, with disagreement warnings. Pilot: AMZ Sep 2 (internal × working-session) → 21 observations all internal (4 auto-corrected from relayed), 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 to speculative, 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.ts computeValidation() (≥2 companies with validates + usage-based + first-hand, non-internal) used by pipeline/analyze.ts Map A (written as validation + 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.ts use-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), /extract and /analyze skills, new /brief skill. briefs/TEMPLATE.md (required ## Source block) + briefs/INDEX.md; cam-dashboard-directives.md retrofitted 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.md now reads briefs/INDEX.md first 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-based items to speculative. 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 on 09ecfede-…, not in any list) — likely private or unshared; fetch by uuid or drop the exported transcript into data/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 a mark.peterson@qpoint.io address, which would have made the triage default internal and the "Qpoint speaker ⇒ internal" rule swallow his observations — fixed so a person-level source override in known-entities.json outranks the email domain in triage defaults (extract.ts), in the prompt (attendee note in the declared-profile block, prompt.ts) and in finalize (isQpoint forced false, finalize.ts). Extracted ciso-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-hand reaction-based validates; the team's own heartbeat/enforcement claims capped at speculative. Corpus: 6 calls.

Outcome

(In progress)

Artifacts

Qpoint Brand Style Guide