202607 — CX Exploration & Discovery Workshop
A live facilitation aid for a CX discovery session, built on the Mercury Notebook Deliverable Pattern. Unlike the TEI business-case studies, this deliverable computes no dollars — its "numbers" are topic status and progress. The Mercury stage is the visual you share on a call or in a workshop while you work through the questions; the question script and captured notes live backstage and export as LLM input for the survey write-up or a downstream business case.
What the client sees (the stage)
A calm topic board: each topic, its one-line scope, a status glyph, and — for the topic under discussion — a live sub-topic checklist, above a progress bar ("3/8 topics complete"). No wall of questions: you ask those.
You drive it from the sidebar — a status selector and a notes box per topic, plus a checkbox per sub-topic. As the conversation moves you set a topic In progress, tick sub-topics as you cover them, mark it Complete (or Skipped), and jot answers. Every change re-renders the board and progress bar (Mercury re-runs the cells below the widgets).
What you work from (backstage)
JupyterLab and the exports carry the facilitator question script (all 95 prompts, grouped by topic → sub-topic) and the captured-session appendix (status + notes as a markdown table and one JSON block). Neither shows on the Mercury stage. The 8 topics / 26 sub-topics / ~110-minute agenda are the structured form of the source survey.
Layout
discoverylib/ # the engine — all content & logic
topics.py # the topic bank (verbatim anchor from the survey)
session.py # status vocabulary, progress, checklist, export payload
staging.py # stage/backstage detection (copied verbatim)
notebooks/cx_discovery.ipynb # the deliverable (generated — see below)
scripts/
build_notebook.py # regenerates the notebook from cell sources
export_report.py # nbconvert → exports/*.html + *.md
tests/ # engine pins + stage/backstage test
docs/cx_discovery_survey.md # source survey (the original cxxm.md)
exports/ # generated report sources
The notebook is generated
The notebook wires ~42 Mercury widgets (a status selector + notes box per
topic, a checkbox per sub-topic), all derived from the topic bank so they can't
drift from discoverylib. Rather than hand-maintain that JSON, the notebook is
built from readable cell sources in
scripts/build_notebook.py:
python scripts/build_notebook.py # regenerate after editing a cell
Edit facilitation content (topics, sub-topics, prompts, scope, minutes) in
discoverylib/topics.py — not in the notebook.
Run
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
mercury --working-dir . # serve the stage (share this screen)
jupyter lab # analyst / facilitator view
pytest # engine pins + stage/backstage
jupyter nbconvert --to notebook --execute --inplace notebooks/cx_discovery.ipynb # gate
python scripts/export_report.py # exports/*.html + *.md for the LLM handoff
Extending
New or reshaped discovery content is a discoverylib/topics.py edit, a test
pin (tests/test_topics.py recounts, tests/test_session.py for new logic),
then python scripts/build_notebook.py. Add a topic and the sidebar controls,
board, checklist, script, gate, and export all pick it up — because they're all
generated from the bank.
