# Study Pattern v1.0.0 How Palladium ships **Studies**: dated reproductions of a published base document β€” a Forrester TEI study or similar β€” personalized to a client as an overlay. A Study is a **master**: the anchor is public/published data, the master stays client-clean, and client personalization happens in an engagement copy outside this repo. References: [`studies/202512_TEI_Genesys_CX_Cloud/`](../studies/202512_TEI_Genesys_CX_Cloud/) and [`studies/202602_TEI_Amazon_Connect/`](../studies/202602_TEI_Amazon_Connect/) (both package `teicalc`). ## 🐾 Red Panda Approvalβ„’ This pattern follows Red Panda Approval standards (see `CLAUDE.md` for the rubric). **Audience note:** written to be loaded whole by an LLM agent building or modifying a study. This document holds what studies ADD to the [Mercury Notebook Deliverable Pattern](Mercury_Notebook_Pattern_V1-00.md) β€” shared mechanics live there and are not restated. `CLAUDE.md` takes precedence where documents disagree. **Status note β€” read this before "fixing" a study:** this pattern is grounded in the TEI twins **as they are today**: math and anchors in the `.py` engine, hand-authored notebooks, no tagged-cell taxonomy. The notebook-first evolution β€” client data in an `engagement-data` cell, tagged content cells, the Assessment Pattern's cell taxonomy β€” **lands with the first study redesign** (a recorded identified opportunity in `CLAUDE.md`), not by piecemeal edits. Until then the repo-level structural suite grandfathers the study notebooks by name, and their current shape is the correct shape. `studies/202607_CTM_GenesysCX/` is a grandfathered real-client engagement study β€” frozen; see `CLAUDE.md` Β§ Known liabilities. --- ## What a Study is | | **Study** | Assessment | |---|---|---| | Reproduces | a **dated publication** (TEI) or signed engagement | β€” | | Naming | `YYYYMM_TEI_Vendor_Product` / `YYYYMM_Client_Engagement` | undated | | Anchor | the publication's composite, **verbatim** | the instrument's content | | "Numbers" | dollars β€” NPV / ROI / payback | qualitative state | | Client data | overlay rescale on the anchor | `engagement-data` cell | The `YYYYMM_` prefix is the **publication/engagement date** (e.g. `202512_` = the December 2025 Forrester study), not the date you worked on it β€” a Study is a snapshot of a dated document and stays dated. ## Verbatim anchor + contracted overlay The heart of a Study (mechanics in the Mercury Pattern, *Recommended Practices*): - `anchor.py` holds the publication's tables as `*_VERBATIM` constants β€” **NEVER edited**. The reproduction is only worth anything if the anchor is the exact published record. - `overlay.py` layers client personalization over the anchor β€” in the current twins, a 🟑 first-order linear rescale by client drivers (agents / contacts / growth): "the composite at your size", never presented as "your TEI". - Notebooks read through the `anchor()` helper so the walk *published β†’ personalized* stays explicit and auditable on stage. ## The reproduction gate A Study's gate (Mercury Pattern Β§4) MUST pin the **published headline numbers** β€” the reproduction is the smoke test: - Amazon Connect twin: NPV **$78,713,715**, ROI **342%**, payback **<6 months**. - Genesys CX Cloud twin: NPV **$10,783,468**, ROI **266%**. Plus the **composite-scale identity**: the overlay at the composite's own drivers must reproduce the anchor exactly (rescale(1.0) == anchor) β€” the proof the personalization layer adds nothing at scale 1. ## Confidentiality posture - The **published source PDF** (the Forrester study) is public and MAY live in the study's `docs/` β€” it is the one exception to the binary-documents block in `.gitignore`: add it with `git add -f` and name the source in the commit message. - Everything else follows `CLAUDE.md` Β§ Confidentiality: masters client-clean, client personalization only in an engagement copy outside the repo, and NEVER commit client documents (SOWs, quotes, NDA'd vendor decks). The CTM study predates this rule and is grandfathered β€” do not use it as precedent. ## Layout & testing Layout and packaging are the Mercury Pattern's (self-contained `teicalc`-style engine, per-study venv, whole toolchain as core deps). Testing is the standard four layers plus repo-level layer 0; a Study's engine pins carry BOTH the verbatim record and the overlay, so neither can drift: ``` tests/test_anchor.py # the published tables, pinned line by line tests/test_overlay.py # rescale identity at composite scale + spot rescales tests/test_scenarios.py # scenario framing over the overlay tests/test_model.py # finance primitives (NPV, payback) hand-checked tests/test_staging.py # stage/backstage ``` ## Variants The Mercury Pattern's variants map onto Studies as: - **Variant 4 β€” TEI composite reproduction** β€” the canonical Study (both twins). - **Variant 1 β€” corrected/pressure-tested business case** β€” engagement-study form (CTM's `ctm_business_case_corrected`): vendor claims verbatim, omitted costs added. - **Variant 2 β€” scenario notebook on a thin module** β€” a second question over the same engine (CTM's `migration_wfm`). - **Variant 3 β€” exploratory calculator** β€” pre-anchor what-if surface that graduates into Variant 1 as facts arrive.