Micro Problems
Reshape market-analyst into a design tool first — the source of truth for Qpoint's problem space — by adding a micro-problem layer (use case → micro problem → observations) on top of the existing market lens, with a curated registry, extraction-proposed candidates, computed standing, product surfaces, document intake, and briefs/stories that cite problems.
Why
The tool was conceived as a market analyst (interest, funnel, objections, use-case validation). Since the pivot the market is less mysterious and the repo is used to draft design briefs that feed product work — but the two briefs written so far (briefs/cam-dashboard-directives.md, bob-wire c21.inventory/design-brief.md) were assembled by hand because the corpus never carried the grain design needs: the user's question, the situation, the product surface, reactions to shown mocks, priority at problem grain. The design methodology names the target: a shapeless macro problem becomes addressable micro problems; forming the problem is the problem. Mark's redefinition (2026-09-21): market-analyst is a design tool first; market analysis is a critical part, not the identity. Full analysis: lens-analysis.md.
Objective
Done means:
data/problems.jsonexists with promoted micro problems (painstatement+ product-facingquestion, persona, situation, use cases, surfaces, dated status), seeded from a hand-drafted T0 pass reviewed with Mark.- Extraction proposes
candidateProblems[]per call and tagsproblemId(+ direction) only against promoted problems;surfaceand declared-artifactartifactRefare available; standing (observed / recurring) is computed in code from first-hand, non-internal evidence. - The site leads with the problem space (
/problems, dashboard first row) and the sales KPIs remain one row down;feedback.jsonis retired. - Written documents can enter the same stream under a declared profile; the Cam phase-1 calls are reconnected as legacy evidence if Q6 lands yes.
- Briefs carry
kindand problem ids; one story exists as the worked example; a consumers scan advances problem status from design/bob-wire cycles. - The identity is rewritten in the docs every agent reads (
CLAUDE.md,goals.mdtwo lenses,README.md, skills, designCLAUDE.mdSister Projects,pipeline.mdrule 4).
Scope
- Threads T0–T4 per plan.md:
data/problems.json,data/personas.json,schemas/{vocabularies,call,validation,problem-standing}.ts,pipeline/{prompt,extract,finalize,build-index,classifications,ingest,consumers}.ts,pipeline/prompts/extract-call.md+ analyze prompts,site/pages/problems.vue+ dashboard/call/insights pages +useCallData.ts,briefs/{TEMPLATE,INDEX}.md+.claude/skills/{brief,extract,analyze}, docs. - Cross-repo, read-mostly: design
CLAUDE.mdSister Projects +brand/pipeline.md(small edits, committed separately in that repo); design c55 personas and c92detail-pages-guide.mdas inputs. - Out: removing any market instrument; defect-tracker hand-off (shelved); MCP server; per-problem LLM map stage; OAuth (c3 parked); the 13 other unfetched Avoma calls.
Key Changes
- kick-off (2026-09-21): Lens analysis and plan written (
lens-analysis.md,plan.md); four unlocking decisions confirmed with Mark; redefinition captured in agent memory; identity rewrite made explicit as T4/K. Pending edit todata/call-classifications.json(Aug 7 Mark call → null) is Mark's and left unstaged. - T0 archaeology (2026-09-21):
problems-draft.md— 15 micro problems hand-drafted from the six phase-2 calls + the Cam and c21 briefs + design c55/c92, each with painstatement, product-facingquestion, personas, situation, use cases, surfaces, cited evidence (call#index, speaker, perspective, verbatim) and hand-computed standing: 4 recurring (unknown-agent-fleet, personal-vs-enterprise-accounts, unexplained-ai-spend, prove-posture-over-time), 11 observed. Five candidates deliberately not promoted (e.g. "who owns this" fails the addressability test). SeedPRODUCT_SURFACES(23 page families) and personas (c55 P1–P11 + a missing P12 end user/developer). Three problems have no use case → missing hypotheses (governance evidence & reporting; session-record governance; endpoint coexistence proof);gateway-bypass-detectionhas no problem under it. Plan amendments (§5):problemIdon session items; advisor first-hand counts toward standing (labelled) — to confirm; challenge evidence from day one; non-screen surfaces; shown-artifacts earns its keep (Sep 3 reactions to mocks). Awaiting Mark's review before T1. - problem-pages thread (2026-09-21): Mark asked for a home for the problem framing in the site. Surveyed all eight pages, the layout,
useCallData.ts, and the ten components; wroteproblem-pages-plan.md(expands plan §2J; becomes the T2 spec): nav gains Problems in second position; dashboard re-ordered (problem KPIs + problem-space card first, child-problem chips on use-case cards, sales KPIs demoted, nothing removed); new/problemsregistry page in theInsightCategoryCardidiom with standing pills, company chips carrying source type, a candidates section with copy-JSON promotion, and a missing-hypothesis callout;/problems/[id]detail; a Problems section at the top of the call page (tagged + candidates); small placements on calls table, companies, insights filter facets, feedback (lifecycle retired, "not a tracker" banner), about. Data contract for T1/T2 and a bridge:problems.jsoncarries hand-curatedevidence[]refs from the T0 draft so the pages ship before extraction tags flow. Five decisions queued (§6). Prompt:problem-pages-prompt.md. - T0 review + registry bridge (2026-09-21): Mark confirmed the 15 problems, advisor first-hand as first-class (labelled), the two new hypotheses +
account-identity-control(gateway-bypass parked), surfaces + personas "try it out"; Q6 legacy Cam reconnect deferred with a pros/cons note in plan.md §5. Built:data/problems.json(15, curated evidence refs),data/personas.json(12),PRODUCT_SURFACES/PROBLEM_STANDINGS/PROBLEM_STATUSES/PROBLEM_DIRECTIONSinvocabularies.ts, problem/persona/candidate types incall.ts(+problemId,problemDirection,surface,artifactRefon observations;problemIdon session items;candidateProblems[]on calls),schemas/problem-standing.ts(computeStanding),build-index.ts→data/problems-index.json(curated refs ∪ extraction tags, org key via the neworgon the Mark Peterson override). Rule fix found in the wiring:variantrefs must not count toward recurring — now 4 recurring / 11 observed, matching the hand draft. - problem-pages T2 build (2026-09-21): Site:
useCallData.tsloads problems / problems-index / personas (feedback.json dropped) and exposesproblemRollup(standing recomputed client-side under the global filters),problemsByStanding,problemsForCall,candidateProblems,problemStats;Filtersgainssurface+persona. NewStandingPill,ProblemChip,ProblemEvidencecomponents;utils/format.tsgains standing/status/direction pills and surface helpers. New/problems(KPIs, missing-hypothesis callout, collapsible registry rows with company·source chips, candidates with copy-JSON, folded-in "feedback not tied to a problem") and/problems/[id](standing card, by-organization table, evidence by perspective, status history, related). Dashboard: problem KPIs + Problem Space card first, child-problem chips on use-case cards ("no problem under this hypothesis" on gateway-bypass), chips on Direction items, Problems-by-Surface chart, sales KPIs moved below Direction. Call page: Problems section (tagged + candidates), Shown row, chips on evidence/feedback. Calls table + companies pages gain problem columns/cards; About gains the Micro Problems section; nav = Dashboard · Problems · Calls · Companies · Insights · Segments · About;/feedbackpage removed, route redirects to/problems. Verified:nuxi typecheckclean (Segments errors pre-existing), production build + preview on :3100 — all routes 200, redirect 307, data files served. - T1 extraction + T4 docs/loop (2026-09-21): Triage gains
shown[](artifacts on screen);extract-call.mdgains the Named Micro Problems section ({{PROBLEMS}}), product surfaces, and guidelines 18–20 (problemId + direction; candidateProblems — "forming the problem is the problem"; surfaces + artifactRef);prompt.tsrenders the registry into the cached static part and the shown list into the dynamic profile block;validation.tsrule 3 drops unknownproblemIds andartifactRefs outside the declared list, validatessurface,problemDirection, andcandidateProblems[];finalize.ts/batch.tspassproblemIds+shown; curated refs carrycuratedAgainst(index warns after a re-extract). Pilot (Tiled 08-25 prospect×demo; Mark Peterson 09-03 advisory×roadmap withdesign/qcontrol/{teams,device,session}declared): both PASSED; cache read 14,128 tokens on call 2; Tiled 26 obs / 11 tagged across 8 problems incl.challengeson safe-to-enforce, 2 candidates with questions (AI-review sufficiency; no shared AI-usage framework); Sep 3 17 obs / 10 tagged + 4 session tags, 9artifactRefs across the three mocks, 11 surfaces, 2 candidates (MDM deep-link from a flagged device; quota-vs-overage cost). Curated refs for the two re-extracted calls dropped (tags cover them); standing now 5 recurring / 10 observed — the extractor tagged Phil Chen's self-hosted-control-plane relief (Tiled) tosession-transcript-governance, making it recurring alongside Moto; a fair reading of "the customer holds the keys", flagged for Mark's review. 4 candidates now on the Problems page.pipeline/consumers.ts(npm run consumers) →data/consumers.json(finds the Cam brief in design c55/c78/c81; noproblem:<id>tokens downstream yet); build-index warns when a cited problem is stillopen; site shows consumers on the problem page. Identity rewrite:CLAUDE.md(design tool first; problem registry in the tree, data flow, schema, conventions),goals.md(Design Lens leads, Market Lens kept),README.md(micro problems, triageshown, promotion + consumers runbook),/extract/analyze/briefskills,briefs/TEMPLATE.md+INDEX.md(kind,problem:<id>line; existing briefs retro-tagged), designCLAUDE.mdSister Projects +brand/pipeline.md(stage 2b, hand-off rule 4; committed in design as 5abc754).data/feedback.jsondeleted. Gotcha: the agent shell exports an emptyANTHROPIC_API_KEY, which--env-filewill not override — pipeline runs from the agent needenv -u ANTHROPIC_API_KEY. - T3 document intake + story + analysis readout (2026-09-21):
npm run ingest -- <file> --source … --author … --date … [--extract](pipeline/ingest.ts) writesdata/raw/doc-<slug>.txt+ asource: documentsidecar + a declared profile, then runs the normal extraction;CALL_TYPESgainsdocument,MeetingSourcegainsdocument, the prompt renders a Document Metadata block and an "input is a written document" line in the profile block; the site shows a DOC pill (meetingSourcePill). Pilot:inbox/qcontrol-as-signal-updated-text.mdasinternal × document→ 14 observations, allinternal, 2 problem tags, 2 candidates (local-only agents with no egress; attested heartbeat vs AI-shaped traffic), no standing change — an internal draft is direction only, as designed. Story briefbriefs/story-coverage-to-accounts.md(kind: story; five problems in one drill path, persona P5+P4, verbatims with perspective, fixture-world note for c92 Meridian) + INDEX row.analyze-overview.md+output-schema.tsgainproblemSpace(readout, recurringUnbriefed, challenged, missingHypotheses, candidatesToPromote, surfacesWithoutFirstHand) fed byloadProblemSpace()inanalyze.ts(registry + index + candidates);npm run analyzere-run — readout names session-transcript-governance as recurring-but-open, safe-to-enforce as challenged ("not what I am buying yet"), endpoint-coexistence-proof as a missing proof-artifact hypothesis; rendered as an Analysis Readout card on/problems. 6 candidates now await review. - Corpus re-extracted under the c12 prompt (2026-09-21): all six calls + the ingested doc now carry extraction tags. The Aug 31 roadmap call hit the 32K output ceiling on the first pass (33.4K needed) —
EXTRACT_MAX_TOKENSis now 48K with anANTHROPIC_EXTRACT_MAX_TOKENSoverride. Cache read 14,176 tokens on every call after the first. Tags per call: Tiled 11, Mark M Aug 20 12 (+5 session), Aug 31 12 (+6 session), Sep 3 10 (+4), AMZ Sep 2 5, Zscaler 7, doc 2; 16 candidates now await review. Curated refs: a first word-overlap remap dropped 26 items and knocked safe-to-enforce to candidate; redone from the original registry (62f8cb4) + original processed files by verbatim match (transcript text is stable across extractions) → 57 remapped; the remaining unmatched refs were either duplicates collapsing onto one new item or already covered by extraction tags, and four were re-pinned by hand (advisor "inventory nearly there" → unknown-agent-fleet; Sam Curry's governance-gap line → agent-identity-scoped-access + variant on prove-posture-over-time; Aug 31 "discovery before governance" → safe-to-enforce). Standing: 5 recurring / 10 observed, identical to the pilot state (transcript governance recurring via Tiled, flagged for review). Lesson for the runbook: re-extracting a call invalidates curated indices — pin by verbatim, not by index, when it matters. - product sessions + first decision brief (2026-10-20): Mark asked for the latest product meetings (Rob's MWF "Qpoint Product" series), the Oct 19 one parsed first into a summary of its decisions for design.
- Getting the calls: the series was invisible to the API, because Avoma hides private meetings from the org key, even by uuid. Rob set the series to Organization, and Oct 12, 14 and 19 then came through by
--uuid(Oct 16 was cancelled). - Triage: all three declared ciso-advisory × roadmap-planning, as on Sep 3. Oct 19 declares the shown mocks
design/phase4/{changeset-summary,policy-detail,finding-detail}. - Extraction: all PASSED, with session records of 5/9/6 decisions and 3 candidates each. 25 candidates now await review across the corpus. The index has 10 calls.
- New brief kind
decision: an internal session's rulings, what each changes in the design records, and a list of the workshopped ideas that were superseded so they don't get revived. Added to INDEX conventions. - First brief of that kind:
briefs/policy-model-and-publishing.md, covering where Oct 19 landed on policy structure, findings, publishing and the dev server. Mark's steer: later statements win over workshopping. - Design picked it up as c118.policy-structure-and-publishing (initial prompt; design commits d1b6744f8, 1cb125e18).
npm run consumersfinds c118 against four problems. - Commits: 5c2964e, 17a62d0.
- Getting the calls: the series was invisible to the API, because Avoma hides private meetings from the org key, even by uuid. Rob set the series to Organization, and Oct 12, 14 and 19 then came through by
- product-input thread (2026-10-20, plan only): Mark asked how far market framing muddies agent context now that the project mostly feeds product work, and how well it serves product development. I read the agent-facing prompts and skills, the profile and standing code, and the Oct 12/14/19 extractions, then wrote
product-input-plan.md(prompt:product-input-prompt.md).- Findings: role lines and schema order are still market-first. Product sessions get interest, urgency and positioning, and an advisor's design preference was captured as a value echo. The 44 session decisions have no cross-session state; Oct 14 rulings overturned on Oct 19 both read
made. The brief template lacks thedecisionkind. - Recomputed standing without the October sessions: no change. Moto's support comes from Aug 20/31 and Sep 3, so the co-designer fix is preventive.
- Five changes planned: (A) role lines and ordering; (B) call-type rules that omit market blocks; (C) a
design-sessioncall type whose extraction-tagged items count as design input rather than standing, with Oct 12/14/19 re-triaged and re-extracted; (D) a curated decisions ledger (data/decisions.json, statuses ruled / direction / open / tabled / superseded / rejected,supersedeschains, extraction tagsdecisionId+ reaffirms / revises / reverses,/decisionspage,decision:<id>consumer tokens); (E) brief template and skill drift. - Six decisions queued for Mark (plan §5). Nothing built.
- Findings: role lines and schema order are still market-first. Product sessions get interest, urgency and positioning, and an advisor's design preference was captured as a value echo. The 44 session decisions have no cross-session state; Oct 14 rulings overturned on Oct 19 both read
- session-decisions thread (2026-10-26): Mark asked for the latest product meetings, extracted, with their decisions written into the results sections of the design cycles that already carry the work. Another agent is redesigning the cycle pages, so this thread supplies the content and its intent, not the layout. Prompt:
session-decisions-prompt.md; hand-off note:session-decisions-handoff.md.- Fetched Wednesday Oct 21 (
5c8785e2) and Friday Oct 23 (5b4bae13) by--uuid. Today's 2026-10-26 session (frameworks) is later today and not yet fetched. - Triage: both declared ciso-advisory × roadmap-planning, as before. The
design-sessioncall type is still only planned. Shown mocks are declared asdesign/phase4/mock/*, the lab pages. - Extraction: both PASSED. Oct 21: 20 observations, 7 decisions, 3 todos, 6 ideas, 3 candidates. Oct 23: 20 observations, 7 decisions, 4 todos, 5 ideas, 2 candidates. The index now has 12 calls.
- Standing:
fleet-scale-compliance-statemoved observed → recurring (Moto + Zscaler). The cause is Mark Peterson's first-hand intern-laptops story on Oct 21, extracted as Moto evidence. It is the co-designer case the product-input plan (C) predicted, and it is left for Mark's review: 6 recurring / 9 observed. - No new brief. Oct 21 went straight into design c121 from four other sources (Logseq, Rob's summary, intents PR #4, Mark Peterson's Slack), and the transcript agrees with them. The one place c121 differs is deliberate: it requires a reason when loosening, where the session asked only for a nudge. Oct 23 reviewed c121's lab and sent the next questions forward: frameworks, explicit vs implicit rules inside a policy, control vs policy, action types, a naming convention, and starter configs.
- Design records: each of c114, c116, c118 and c121 gets a
### Product-session decisionssubsection under## Outcome. Each has a provenance line, the story, and grouped entries with a status (ruled / direction / open / idea / superseded) and where the decision landed. c116 and c118 had no CYCLE.md, so one was written for each from their prompts and plans, marked as written after the fact. - Found in passing: c114
object-model.mdstill describes the 2026-10-09 model, and c118's record steps R1, R2, R5 and R6 were never done.
- Fetched Wednesday Oct 21 (
- Oct 26 session + three briefs (2026-10-26, committed as
58a661a): Frameworks and onboarding (022c7156), ciso-advisory × roadmap-planning, no mocks shown (Mark Peterson shared outside references). Became briefsoperations-wizard,frameworks-cleanup(feeds design c123) andpolicies-final-pass. No standing moves. The index had 13 calls. - Sessions Oct 30, Nov 3, Nov 5 + session digests (2026-11-09): Mark asked for the latest Qpoint Product meeting parsed, then the two before it, then histories updated and the information made easy for design to reach.
- Fetched: Nov 5 (
1b21a3ce) by--uuid. Oct 30 (1253c25d) and Nov 3 (2fba742f) had been fetched on an earlier pass and left unextracted. Nov 2, 4, 6 and 9 were cancelled. The slot is now 22:00Z and no longer Mon/Wed/Fri, so list by subject. - Triage: all three declared ciso-advisory × roadmap-planning. Oct 30 and Nov 3 list
design/phase4/mock/{compliance, compliance/detail, reports}as shown. Nothing is declared for Nov 5: Tyler shared GPUI kit and a tray sketch, which are not lab pages. Mark Peterson's shares on Nov 3 were competitor screens (Vanta, Wiz, Aikido), not artifacts. - Extraction: all PASSED; the index now has 16 calls.
- Oct 30 (frameworks data model + reports): 18 observations, 7 decisions, 4 candidates.
- Nov 3 (compliance scoring + reports): 14 observations, 10 decisions, 2 candidates. Three competitor mentions are missing a category.
- Nov 5 (pricing tiers; control plane split from Qcontrol; native desktop app via GPUI as the likely first release): 18 observations, 9 decisions, 2 candidates. One
productArea: performanceis outside the vocabulary. - Cache read 14,176 tokens on the second call of the batch.
- Standing: no moves (6 recurring / 9 observed). The new evidence lands mostly on
prove-posture-over-time, plussafe-to-enforce,fleet-scale-compliance-stateand a relayedweb-ai-usage-blindspot. - Where it goes in design: Oct 30 and Nov 3 feed c123 (compliance frameworks) and c128 (reports). Nov 3 overrides Oct 30 where they differ: two-dimension scoring, track / not track, the coverage column dropped. Nov 5 feeds c130 (native app), created empty the same morning. Nothing has been written into design cycles yet.
- Session digests, the new hop to design:
pipeline/sessions.ts(npm run sessions, chained afternpm run index) renderssessions/INDEX.mdplus one page per call with a session record (13 so far).- Each page has the summary, decisions grouped decided / open / tabled with speaker and verbatim, ideas, to-dos, problem tags, candidates, source paths, and a "later sessions may override this one" line.
- "Picked up by" comes from scanning
briefs/and design / bob-wire cycle markdown for the 8-char call id, the way design already cites sessions. - The digests are generated and never hand-edited. They are a read path, not the decisions ledger (product-input plan §D), which is still unbuilt.
- Design's
CLAUDE.md(Sister Projects) andbrand/pipeline.md(stage 2c) point atsessions/INDEX.md.
- Fetched: Nov 5 (
- Still open: language capture (Q9, optional); reviewing the 41 candidates and the two co-designer standing changes (transcript governance, fleet-scale compliance); Q6 legacy Cam reconnect (deferred); the product-input thread (awaiting Mark's review of plan §5). Consider closing c12 once the four calls are re-extracted.
Outcome
(In progress)
Decisions (2026-09-21)
- Extraction identifies candidate problems; Mark + agent refine and promote to full problems addressable and solvable by the product.
- Decomposition: use case (supply-side hypothesis) → micro problem (demand-side user question), many-to-many, link optional; unlinked = missing hypothesis. Registry holds the problem, never the solution.
- Two forms per problem: pain
statement(canonical) + product-facingquestion(required to promote). feedback.jsonretired; bugs/blockers listed as "not tracked here"; ship-off shelved until a formal tracker exists. Open (canon, decide during work): Q5 document intake now; Q6 legacy Cam re-extract; Q7 story as brief kind; Q8 personas registry here; Q9 language block; Q10 shown-artifacts triage; Q11 dashboard first row — recommendations in plan.md §5.
Artifacts
- initial-prompt.md
- thread: problem-pages — prompt + plan
- thread: product-input — prompt + plan
- thread: session-decisions — prompt
- initial-prompt.md
- lens-analysis.md
- plan.md
- problems-draft.md
- session-decisions-handoff.md