spike: CritterWatch telemetry fodder + JasperFx UI/UX feedback packet#103
Draft
erikshafer wants to merge 4 commits into
Draft
spike: CritterWatch telemetry fodder + JasperFx UI/UX feedback packet#103erikshafer wants to merge 4 commits into
erikshafer wants to merge 4 commits into
Conversation
Research spike (branch research/cw-telemetry-spike) to light up the CritterWatch monitoring console so a UI/UX review of the Event Store Explorer rests on a fully populated console, then distill that into actionable feedback for JasperFx (Jeremy/Babu), who are seeking larger real-world projects to evaluate CW. NOT FOR main. This deliberately relaxes ADR 008 (no async daemon, round one) on this branch only, all behind a single Cw:Telemetry flag so the teaching baseline stays daemon-free. Any graduation of a shape to the baseline is a deliberate ADR-008 revisit on its own PR, not a quiet merge of this spike. Telemetry shapes (Orders, gated on Cw__Telemetry, daemon on only when set): - ProductSalesLeaderboard: multi-stream fan-out projection (Identities), one OrderPlaced -> one doc per SKU. - OrderLineItemsProjection: EventProjection writing a flat SQL table (orders.order_line_items) with event metadata the FlatTableProjection DSL can't reach. - PoisonPing + POST /spike/poison: a handler that always throws, to populate Dead Letters and the Projection-Statuses Error column. - OrderPlacedSignal: a Contracts broadcast fanned out to Inventory + Catalog (gives Catalog its first cross-BC edge). Traffic + evidence: - docs/demo-traffic.ps1 gains opt-in -LinesPerOrder / -MaxQuantity (multi-line, multi-unit orders feeding the fan-out + flat table) and -PoisonEvery (Dead Letters). Defaults preserve the talk's single-line, decline-every-5th flow. - docs/research/cw-screenshots/: capture-cw.cjs (Playwright tour) + 27 full-page captures of every console surface, incl. the driven StockLevel stepper failure. Docs: - docs/research/cw-feedback-jasperfx.md: 8 prioritized, screenshot-anchored UI/UX entries with a beta shortlist. - docs/research/cw-telemetry-fodder.md: the spike's plan, live-verification, and seeds. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Owner
Author
Session handoff (2026-06-24)Where this landed and what's left, for a fresh read. Done
Your call (morning)
Parked, all optional
ImportantThis PR is a do-not-merge research record. Merging would breach ADR 008 (no async daemon, round one). Keep it open as the durable home, or close without merging once the feedback is delivered. Any graduation of a shape into the teaching baseline is a separate, deliberate ADR-008 revisit. 🤖 Generated with Claude Code |
Add a "How to read the suggestions" note framing every recommendation as a question, not a verdict, and stating the embrace-the-vocabulary principle outright. Reframe entry 7 from "where the vocabulary leaks" to "teach the Critter Stack vocabulary in place" — exposing the terms is a feature; the ask is in-place ⓘ definitions, not hiding or renaming. Sync the top-five summary to match. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…essment Second, deeper CritterWatch feedback pass on the cw-telemetry-spike branch, adding a Developer-Experience lens and interaction-level UI/UX analysis on top of round one's static UI/UX review. Runs on the installed alpha.3 (GA Wolverine 6.12.0); alpha.4 is assessed as a written recommendation only (deferred to a separate upgrade branch -- prerelease Wolverine/Marten risk). Deliverable: docs/research/cw-feedback-jasperfx-deep.md - DX section: version-coupling preflight, licensing dev-tier mask, install docs' DLQ-disable contradiction, doc-vs-binary drift, immutable-record stepper crash (re-confirmed live 107x), unwired MCP surface. - Deeper UI/UX: axe-core WCAG pass (79 hits concentrated in the shared shell), red-chip contrast, no responsive reflow, no dark mode, no deep-linking, interactive two-selector-conflict repro. - Round-one closure: all 8 entries re-checked; nothing regressed. Tooling: docs/research/cw-screenshots/capture-cw-deep.cjs -- Playwright + axe-core harness (interaction, a11y, narrow-viewport, dark-mode, deep-link probes). Round-one capture-cw.cjs left intact. Evidence + machine-readable reports under cw-screenshots/deep/. Live-verified against the running stack (async daemon caught up, fan-out + flat table + DLQ populated, license validates as Trial, console boots with no TypeLoadException). No package changes; no secrets committed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…ine (deep round follow-ups) Two follow-ups to the deep CritterWatch feedback round, on the cw-telemetry-spike branch (research record, do-not-merge). CritterWatch.Mcp (DX-6, now wired & exercised, not docs-only): - Pin CritterWatch.Mcp 1.0.0-alpha.3 (locked to the CritterWatch pin); reference it from the console; AddCritterWatchMcp() + MapCritterWatchMcp() in the console host. - Drove /api/mcp live: mounts clean (405 to GET, JSON-RPC initialize stateless, tools/list = 37 tools), schemas are exemplary. BUT every tool returns LicenseMissing even though the same process's dashboard validates the key as Trial -- the MCP license guard resolves the license by a different path than the console. Evidence: cw-screenshots/deep/mcp-probe-output.txt. DX-6 rewritten from "unwired gap" to this. Baseline "before" set: - Captured the 13 routes with Cw__Telemetry=false (inline-only, no async daemon) into cw-screenshots/deep/baseline/ to pair against the lit "after" set -- the contrast round one never captured. AppHost telemetry flag flip was transient (reverted). No round-one product behavior changed; the MCP wiring is a spike-only DX exploration. No secrets committed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
A research spike that lights up the CritterWatch monitoring console so a UI/UX review of the Event Store Explorer rests on a fully populated console, then distills that into actionable feedback for JasperFx (Jeremy & Babu), who are seeking larger real-world projects to evaluate CW.
Warning
Not intended to merge to
main. This deliberately relaxes ADR 008 (no async daemon, round one) on this branch only, all behind a singleCw:Telemetryflag so the teaching baseline stays daemon-free. The PR exists to review and durably house the spike + the feedback artifact. Any graduation of a shape to the baseline is a deliberate ADR-008 revisit on its own PR, not a merge of this spike. Keep open as a research record, or close without merging once the feedback is delivered.Telemetry shapes (Orders, gated on
Cw__Telemetry; daemon runs only when set)ProductSalesLeaderboard— multi-stream fan-out projection (Identities), oneOrderPlacedto one doc per SKU.OrderLineItemsProjection—EventProjectionwriting a flat SQL table (orders.order_line_items) with event metadata theFlatTableProjectionDSL can't reach.PoisonPing+POST /spike/poison— a handler that always throws, to populate Dead Letters and the Projection-Statuses Error column.OrderPlacedSignal— a Contracts broadcast fanned out to Inventory + Catalog (gives Catalog its first cross-BC edge).Traffic + evidence
docs/demo-traffic.ps1gains opt-in-LinesPerOrder/-MaxQuantity(multi-line, multi-unit orders feeding the fan-out + flat table) and-PoisonEvery(Dead Letters). Defaults preserve the talk's single-line, decline-every-5th flow.docs/research/cw-screenshots/—capture-cw.cjs(Playwright tour) + 27 full-page captures of every console surface, including the drivenStockLevelstepper failure.The deliverable
docs/research/cw-feedback-jasperfx.md— 8 prioritized, screenshot-anchored UI/UX entries with a "five things in beta" shortlist.docs/research/cw-telemetry-fodder.md— the spike's plan, live-verification results, and the feedback seeds.Verification
Built clean (0/0); live-verified against a running stack (daemon caught up, fan-out docs correct, flat table populating, dead letters, broadcast topology). Screenshots regenerated by the committed capture script. Details in
cw-telemetry-fodder.md.🤖 Generated with Claude Code