{
 "atlas_url": "https://stockql.ai/atlas/wave-001/call-mechanics.json",
 "current_url": "https://stockql.ai/atlas/call-mechanics.json",
 "wave": "wave-001",
 "published_spec_sha256": "93bda3871f41224e97241c806fbdaf1ca7c0d033a1503e2264266f0d3d6fbe92",
 "verify_with": "freeze_registry.py verify (github: see /atlas/index.json tooling note)",
 "generated_utc": "2026-10-26T17:26:21Z",
 "frozen_entry": {
  "contract_version": "signal-atlas-registry-v1",
  "policy_version": "registry-policy-v1",
  "registry_wave_id": "wave-001",
  "family": {
   "family_id": "call-mechanics",
   "family_title": "Call Mechanics: within-turn delivery properties of management Q&A answers as return signals (deterministic, zero LLM cost)",
   "owner": "Chariot",
   "independent_reviewer": "Hermit",
   "source_bead": "cst-5cr5.11.11",
   "spec_version": 1,
   "supersedes_spec_sha256": null,
   "claimed_at_utc": "2026-10-21T17:04:28Z",
   "shared_extraction": {
    "input_unit": "single call, joined to the same issuer's prior quarterly calls' stored per-call feature rows (never prior transcript text) for trailing baselines. Baseline rows are the deterministic per-call scalars this family emits (CM-1..CM-4 call-level values plus their support counts) and MAY be read from calls preceding the discovery window (pre-2023-Q1) so early discovery quarters remain scorable; a holdout call's baselines may likewise reach into the discovery window. Baselines are issuer history, not outcomes; declared here as the CSL family declared theirs.",
    "input_binding": "transcript-gate splitter output with verdict ok (boundary_char), per-turn speaker labels, turn order, and role tags, obtained by import from the CSL extractor module's public API (workshop/signal-atlas/extractors/call_structure_logistics.py, csl_parse_call -> CslParsedCall{split, turns, analysts, management, operators, role_source, qa_turns, answer_turns}, introduced on cst-5cr5.11.14: CSL-local label grammar, apostrophe unification, HOST_ROLE/analyst/issuer-management attribution via csl_roles, and the shared CSL-4/CSL-5 answer-turn rule) so the two cheap families cannot disagree about who is management or which turns are answers. The import binds to the CSL module at the behavior manifest current at CM freeze time \u2014 at this draft's filing that is extractor 589b3ff85c02afda1416e323317f1a0bb90ba8d08abefa53b51c4b074dc4fdf8 / suite 88b0704c\u2026 / code_revision 18c761e, re-signed by Chariot on cst-5cr5.11.14 \u2014 and CM calibration does not start before that manifest is re-signed; csl_parse_call returns None on a non-ok splitter verdict and the CM extractor treats None as 'splitter verdict not ok' (all features null). CM-2, CM-3 and CM-4 read the raw body text of management answer turns in the Q&A section; CM-4 additionally reads the body text of the analyst question turn that prompted each answer. No feature reads prepared-remarks text, operator text, or any other call's text. Snapshot metadata limited to ticker, call_date, fiscal_quarter, fiscal_year, calendar_quarter.",
    "output_contract": "one typed row per call: {transcript_id, exchange_count, qualifying_exchange_count, cm_answer_elasticity (median ln ratio), cm_filler_density (per 100 answer tokens), cm_hedge_density (per 100 answer tokens), cm_question_echo_share, mgmt_answer_tokens (denominator, shared CSL-4/5 definition), mgmt_answer_turns, per-field support counts, explicit null for any field whose inputs are absent}; evidence = the deterministic inputs themselves (exchange turn indices, token counts, matched character offsets for every lexicon hit and echo run); no confidence field \u2014 deterministic code, not a judgment",
    "model_or_algorithm": "deterministic algorithm: Python extractor over CSL-module turn output; whitespace tokenization (str.split); match normalization = case-fold, strip non-alphanumeric characters from each token, drop tokens that become empty (the CSL-5 frozen rule, reused by import); frozen phrase lists listed verbatim in each hypothesis; leftmost-longest non-overlapping phrase matching; no model in the loop for any hypothesis; code artifact hashed before scoring, together with the behavior manifest of every imported module (call_structure_logistics.py, acr.py, tone_delta.py, gate.py) per the CSL-6 precedent",
    "prompt_or_code_artifact_sha256": null,
    "scorer_blinded_to_returns": true,
    "scorer_blinded_to_future_transcripts": true
   },
   "hypotheses": [
    {
     "hypothesis_id": "CM-1",
     "title": "Answer elasticity versus issuer norm is associated with abnormal return (two-sided)",
     "statement": "Calls whose management answers are longer relative to the questions that prompted them than the issuer's own trailing norm \u2014 median over qualifying exchanges of ln(answer tokens / question tokens), issuer-baseline delta \u2014 differ in +2..+60 session SPY-relative abnormal returns from calls at or below the norm; preregistered two-sided because elaborate answering can be engagement (positive) or filibustering (negative) and the literature does not settle the sign.",
     "direction": "two-sided",
     "unit_of_analysis": "one earnings call (issuer-quarter) with issuer trailing call history",
     "cost_class": "metadata-only",
     "primary_feature": {
      "name": "cm_answer_elasticity_delta",
      "definition": "exchanges are formed by the acr.extract_exchanges grouping ALGORITHM applied to the CSL turn stream (CslParsedCall.qa_turns) with the CSL question/answer tests, not acr's own label regex or role sets: a question turn is a Q&A-section turn whose speaker passes the CSL question test (analyst, or a Q-prefixed turn, or a non-management non-operator label under csl_roles), an answer turn is one passing the CSL management test (management, or an A-prefixed turn); operator/host turns are skipped and break nothing; an exchange is one question turn followed by every answer turn up to the next question turn or the end of the section; consecutive question turns without an intervening answer turn keep the LAST question turn only as the exchange's question (declared here, matching acr's replacement behavior, with a fixture), and the earlier ones form no exchange; a qualifying exchange has question tokens >= 5 and answer tokens >= 20 (whitespace tokens of the question turn body and of the concatenated management turn bodies); per-exchange value = ln(answer tokens / question tokens); call value = median over qualifying exchanges; feature = call value minus the median of the same call value over up to 4 immediately preceding adjacent quarterly calls (minimum 2 required, adjacency per the settled tone-delta pairing rules)",
      "aggregation": "one scalar per call from per-exchange whitespace token counts; no text content read beyond tokenization",
      "comparison": "cross-sectional level within calendar quarter, quintile sort high-minus-low"
     },
     "primary_endpoint": {
      "return_field": "abnormal_60_winsor",
      "window_start_session": 2,
      "window_end_session": 60,
      "benchmark": "cumulative stock return divided by SPY return, winsorized 1/99 percent, per transcript-alpha settled-entry convention",
      "price_timing": "close of first SPY session strictly after call_date through close of session +60"
     },
     "estimator": "quarterly high-minus-low quintile spread, Newey-West lag-1 on quarterly spreads, ticker-cluster bootstrap as in settled entries 1-4; two-sided test on the spread",
     "universe": "all calls in the wave-001 discovery Research Snapshot passing the settled liquidity gates (min pre-call close, min prior-60-session median dollar volume) and splitter verdict ok, with every baseline call also splitter-verdict ok and trailing history per shared_extraction.input_unit",
     "exclusions": [
      "splitter verdict not ok on the current call",
      "fewer than 10 management answer turns in the Q&A section on the current call (shared with CSL-4/CSL-5)",
      "fewer than 5 qualifying exchanges on the current call",
      "fewer than 2 baseline calls that are splitter-verdict ok, have >= 10 management answer turns in Q&A (the current-call gate mirrored onto baselines, so no baseline value is computed on a call the current-call rule would exclude), and themselves have >= 5 qualifying exchanges",
      "baseline adjacency failing the settled pairing rules (a CALL exclusion, matching the CSL-2/3/4 reading recorded on cst-5cr5.11.6; the funnel reports the count)",
      "below settled liquidity/price gates",
      "incomplete +60 session return horizon at frozen price cutoff"
     ],
     "missingness_rule": "calls with too few qualifying exchanges or insufficient baseline are excluded (support), not imputed; an exchange whose question turn is an empty-body label (the cst-5cr5.11.9 'James West:' case) has zero question tokens and is simply non-qualifying",
     "support_gate": "minimum 400 scored calls, 150 distinct issuers, 6 calendar quarters",
     "smallest_effect_size_of_interest": "0.01 (one percentage point) quarterly high-minus-low spread in abnormal_60_winsor units",
     "power_target": 0.8,
     "calibration_gate": {
      "blind_to_returns": true,
      "labeled_sample_design": "deterministic fixture plan: constructed Q&A sections with known exchange groupings (single-turn answers, multi-executive answers, operator interleaves, a follow-up question by the same analyst forming a new exchange, a sub-5-token question, a sub-20-token answer, an empty-body question label) where the per-exchange ratios and the median are known by construction; plus a seeded deterministic draw of 30 real discovery-window calls whose exchange grouping and median are hand-recomputed by a seat other than the owner. Reviewer rule (preregistration_notes): the reviewer's probes are built from THIS text, not from the owner's fixture suite.",
      "metrics": [
       "deterministic exactness: extractor exchange count, qualifying count, and median equal hand-computed values on 100% of fixtures",
       "per-call agreement on the 30 sampled real calls with every disagreement itemized by exchange index"
      ],
      "minimum_thresholds": "100% on fixtures; >= 27/30 exact agreement on sampled real calls; thresholds frozen before scoring",
      "disagreement_review": "all disagreements listed verbatim with turn indices and token counts; reviewer signs off on fixture coverage and the exchange-grouping rule as frozen",
      "failure_verdict": "construct-rejected"
     },
     "multiplicity_family": "wave-001-primary",
     "holdout_rule": "common-wave-001",
     "primary_p_value_count": 1,
     "leakage_boundary": {
      "allowed_fields": [
       "Q&A turn structure: speaker labels, role tags, turn order, per-turn whitespace token counts (current and baseline calls)",
       "call_date, fiscal_quarter, fiscal_year (pairing only)",
       "ticker (issuer-baseline join key only)"
      ],
      "forbidden_fields": [
       "return_fields",
       "price_fields",
       "outcome_labels",
       "future_transcripts",
       "post_endpoint_metadata",
       "turn body text beyond tokenization",
       "prepared-remarks text"
      ],
      "identifier_handling": "required-and-declared",
      "date_handling": "required-and-declared",
      "future_text_handling": "forbidden",
      "pretraining_risk_mitigation": "no model in the loop \u2014 deterministic token counting; pretraining leakage structurally impossible",
      "rationale": "ticker joins the issuer baseline; call_date and fiscal fields establish adjacency; speaker labels and role tags are needed to group turns into exchanges and never enter the feature beyond that grouping"
     },
     "overlap_boundary": "Distinct from Hermit's frozen CSL family by the boundary recorded on cst-5cr5.11.5 (Chariot comment 2026-10-21 09:12): CSL owns section-level token counts (CSL-2), speaker cardinality (CSL-3) and token SHARES across management speakers (CSL-4); CM-1 reads per-exchange lengths relative to the prompting question and never aggregates across speakers, never counts speakers, and never uses section totals. Distinct from settled explicit/implicit ACR (entries 2-3): those scored answer RELEVANCE to the question with an embedding model; CM-1 reads only lengths. Distinct from Sun's analyst-agenda-shift (question content) and Star's quantitative-specificity (numbers in management speech): CM-1 reads no content at all.",
     "secondary_analyses": [
      "descriptive, no p-value: the same spread recomputed with the per-exchange value capped at ln(50) to show whether the primary is driven by a handful of monologue answers"
     ]
    },
    {
     "hypothesis_id": "CM-2",
     "title": "Rising discourse-filler density versus issuer norm predicts negative abnormal return",
     "statement": "Calls whose management Q&A answers carry more discourse fillers per 100 answer tokens than the issuer's own trailing norm \u2014 frozen filler phrase list, issuer-baseline delta \u2014 earn lower +2..+60 session SPY-relative abnormal returns (unscripted strain under questioning; the construct is delivery disfluency, not content).",
     "direction": "negative",
     "unit_of_analysis": "one earnings call (issuer-quarter) with issuer trailing call history",
     "cost_class": "string-match",
     "primary_feature": {
      "name": "cm_filler_density_delta",
      "definition": "count of leftmost-longest non-overlapping matches of the FROZEN filler list against the normalized token sequence of every management answer turn (shared CSL-4/5 answer-turn definition), times 100, divided by management Q&A answer tokens (shared CSL-4/5 denominator); filler list, matched as whole-token sequences after normalization: ['you know', 'i mean', 'look', 'listen', 'okay so', 'so look', 'as i said', 'as we said', 'like i said', 'as i mentioned', 'as we mentioned', 'again', 'obviously', 'frankly', 'honestly', 'to be honest', 'at the end of the day', 'let me just say', 'the way i would put it', 'the way i think about it']; the single-token entries 'look', 'listen' and 'again' count ONLY in discourse position, defined on the RAW whitespace token sequence of the turn body before normalization: the token is the first token of the turn, OR the immediately preceding raw whitespace token ends with one of the characters . ? ! (optionally followed by a closing quote or bracket) \u2014 so '...growth. Look, we...' counts and '...look at the data...' does not, and a standalone punctuation token is neither required nor given special status (vendor tokenization must not change the count); never mid-sentence; the multi-token entries 'so look' and 'okay so' are NOT position-gated and count mid-sentence, so '...and so look, we...' counts while '...and look, we...' does not \u2014 deliberate, because the leading 'so'/'okay' is itself the discourse marker; feature = call density minus the median of the same density over up to 4 immediately preceding adjacent quarterly calls (minimum 2 required)",
      "aggregation": "one scalar per call from matched phrase counts and the shared answer-token denominator",
      "comparison": "cross-sectional level within calendar quarter, quintile sort high-minus-low"
     },
     "primary_endpoint": {
      "return_field": "abnormal_60_winsor",
      "window_start_session": 2,
      "window_end_session": 60,
      "benchmark": "cumulative stock return divided by SPY return, winsorized 1/99 percent, per transcript-alpha settled-entry convention",
      "price_timing": "close of first SPY session strictly after call_date through close of session +60"
     },
     "estimator": "quarterly high-minus-low quintile spread, Newey-West lag-1 on quarterly spreads, ticker-cluster bootstrap as in settled entries 1-4",
     "universe": "CM-1 universe (settled gates, splitter verdict ok on current and baseline calls, trailing history)",
     "exclusions": [
      "splitter verdict not ok on the current call",
      "fewer than 10 management answer turns in Q&A on the current call",
      "management Q&A answer tokens < 500 on the current call (shared CSL-5 threshold)",
      "fewer than 2 baseline calls that are splitter-verdict ok, have >= 10 management answer turns in Q&A (current-call gate mirrored onto baselines), and have management answer tokens >= 500",
      "baseline adjacency failing the settled pairing rules (call exclusion; funnel reports the count)",
      "below settled liquidity/price gates",
      "incomplete +60 session return horizon at frozen price cutoff"
     ],
     "missingness_rule": "degenerate sections and insufficient baselines are excluded (support), not imputed. A zero filler count is a VALUE, not missing \u2014 but vendor transcript cleaning can remove fillers wholesale, so the exclusion funnel reports the count of zero-filler calls and the support gate below guards against a format-driven construct",
     "support_gate": "minimum 400 scored calls, 150 distinct issuers, 6 calendar quarters, and nonzero cm_filler_density on at least 30% of scored calls (if vendor cleaning strips fillers from most transcripts the construct lacks variance to sort on and the gate fails)",
     "smallest_effect_size_of_interest": "0.01 (one percentage point) quarterly high-minus-low spread in abnormal_60_winsor units",
     "power_target": 0.8,
     "calibration_gate": {
      "blind_to_returns": true,
      "labeled_sample_design": "deterministic fixture plan: constructed answer turns with planted fillers (each list entry at least once; 'look'/'listen'/'again' as the first token of a turn, mid-text after attached sentence-ending punctuation ('...growth. Look, we...' counts), mid-sentence ('...look at the data...' does not), and after a standalone punctuation token (counts, same as attached); overlapping candidates such as 'so look' vs 'look'; the position asymmetry pair '...and so look, we...' (counts) vs '...and look, we...' (does not); case and punctuation variants; a filler inside an analyst question turn, which must not count) where the count is known by construction; a disjointness fixture asserting that no filler list entry matches the frozen settled evasion regex (evasion.py EXPLICIT_NONANSWER) and no entry overlaps the CM-3 hedge list; plus a seeded deterministic draw of 30 real discovery-window calls whose filler count is hand-tallied by a seat other than the owner",
      "metrics": [
       "deterministic exactness: extractor count and density equal hand-computed values on 100% of fixtures",
       "per-call agreement on the 30 sampled real calls with every disagreement itemized by matched offset"
      ],
      "minimum_thresholds": "100% on fixtures including the disjointness fixture; >= 27/30 exact agreement on sampled real calls; thresholds frozen before scoring",
      "disagreement_review": "all disagreements listed verbatim with character offsets; reviewer signs off on the frozen list and the discourse-position rule",
      "failure_verdict": "construct-rejected"
     },
     "multiplicity_family": "wave-001-primary",
     "holdout_rule": "common-wave-001",
     "primary_p_value_count": 1,
     "leakage_boundary": {
      "allowed_fields": [
       "management answer-turn body text of the current call (string matching only)",
       "speaker role tags and turn order (to identify answer turns)",
       "call_date, fiscal_quarter, fiscal_year (pairing only)",
       "ticker (issuer-baseline join key only)"
      ],
      "forbidden_fields": [
       "return_fields",
       "price_fields",
       "outcome_labels",
       "future_transcripts",
       "post_endpoint_metadata",
       "prepared-remarks text",
       "analyst question text",
       "other calls' text"
      ],
      "identifier_handling": "required-and-declared",
      "date_handling": "required-and-declared",
      "future_text_handling": "forbidden",
      "pretraining_risk_mitigation": "no model in the loop \u2014 frozen phrase matching; identifiers and dates inside answer text are untouched because no model ever sees the text and masking would alter token positions; pretraining leakage structurally impossible",
      "rationale": "answer text is the construct's raw material and is consumed only by deterministic matching; ticker and fiscal fields serve the baseline join; the published feature is one density"
     },
     "overlap_boundary": "Distinct from settled evasion-proxy (entry 4): that lexicon scored explicit REFUSALS and DEFERRALS ('can't comment', 'too early to say', 'get back to you'); the filler list contains no refusal or deferral and the disjointness fixture proves zero regex overlap. A fluent refusal scores evasion-high and filler-low; a stammering full answer scores the reverse. Distinct from CM-3: hedges qualify a claim's certainty, fillers carry no propositional content; the two lists are disjoint by fixture. Distinct from CSL (no counts of turns, speakers, shares, or cross-section matching) and from every LLM-judgment family (no classification).",
     "secondary_analyses": [
      "descriptive, no p-value: the quarterly spread recomputed within the subset of issuers whose entire history has nonzero filler density, to show whether the primary is vendor cleaning in costume"
     ]
    },
    {
     "hypothesis_id": "CM-3",
     "title": "Rising epistemic-hedge density versus issuer norm predicts negative abnormal return",
     "statement": "Calls whose management Q&A answers carry more epistemic hedges per 100 answer tokens than the issuer's own trailing norm \u2014 frozen hedge phrase list, issuer-baseline delta \u2014 earn lower +2..+60 session SPY-relative abnormal returns (management qualifying its own claims under questioning signals lower confidence in the outlook).",
     "direction": "negative",
     "unit_of_analysis": "one earnings call (issuer-quarter) with issuer trailing call history",
     "cost_class": "string-match",
     "primary_feature": {
      "name": "cm_hedge_density_delta",
      "definition": "count of leftmost-longest non-overlapping matches of the FROZEN hedge list against the normalized token sequence of every management answer turn (shared CSL-4/5 answer-turn definition), times 100, divided by management Q&A answer tokens (shared CSL-4/5 denominator); hedge list, matched as whole-token sequences after normalization: ['approximately', 'roughly', 'probably', 'likely', 'maybe', 'perhaps', 'somewhat', 'relatively', 'generally', 'i think', 'we think', 'i believe', 'we believe', 'i would say', 'we would say', 'i would think', 'sort of', 'kind of', 'more or less', 'in the range of', 'give or take', 'could be', 'might be', 'may be', 'it depends', 'hard to say', 'difficult to say', 'not sure', 'i guess']; 'about' and 'around' are deliberately EXCLUDED as polysemous ('talk about'; 'stores around the country', 'turn things around' \u2014 in management answers the spatial/idiomatic readings likely dominate the approximative one); feature = call density minus the median of the same density over up to 4 immediately preceding adjacent quarterly calls (minimum 2 required)",
      "aggregation": "one scalar per call from matched phrase counts and the shared answer-token denominator",
      "comparison": "cross-sectional level within calendar quarter, quintile sort high-minus-low"
     },
     "primary_endpoint": {
      "return_field": "abnormal_60_winsor",
      "window_start_session": 2,
      "window_end_session": 60,
      "benchmark": "cumulative stock return divided by SPY return, winsorized 1/99 percent, per transcript-alpha settled-entry convention",
      "price_timing": "close of first SPY session strictly after call_date through close of session +60"
     },
     "estimator": "quarterly high-minus-low quintile spread, Newey-West lag-1 on quarterly spreads, ticker-cluster bootstrap as in settled entries 1-4",
     "universe": "CM-1 universe (settled gates, splitter verdict ok on current and baseline calls, trailing history)",
     "exclusions": [
      "splitter verdict not ok on the current call",
      "fewer than 10 management answer turns in Q&A on the current call",
      "management Q&A answer tokens < 500 on the current call (shared CSL-5 threshold)",
      "fewer than 2 baseline calls that are splitter-verdict ok, have >= 10 management answer turns in Q&A (current-call gate mirrored onto baselines), and have management answer tokens >= 500",
      "baseline adjacency failing the settled pairing rules (call exclusion; funnel reports the count)",
      "below settled liquidity/price gates",
      "incomplete +60 session return horizon at frozen price cutoff"
     ],
     "missingness_rule": "degenerate sections and insufficient baselines are excluded (support), not imputed; a zero hedge count is a value",
     "support_gate": "minimum 400 scored calls, 150 distinct issuers, 6 calendar quarters",
     "smallest_effect_size_of_interest": "0.01 (one percentage point) quarterly high-minus-low spread in abnormal_60_winsor units",
     "power_target": 0.8,
     "calibration_gate": {
      "blind_to_returns": true,
      "labeled_sample_design": "deterministic fixture plan: constructed answer turns with planted hedges (each list entry at least once; 'may be' vs 'maybe'; 'about' and 'around' present and NOT counted; case and punctuation variants; overlapping candidates such as 'i would say' vs 'i would think'; a hedge inside an analyst question turn, which must not count) where the count is known by construction; a disjointness fixture asserting that no hedge list entry matches evasion.py EXPLICIT_NONANSWER and that the hedge and filler lists share no entry; plus a seeded deterministic draw of 30 real discovery-window calls whose hedge count is hand-tallied by a seat other than the owner",
      "metrics": [
       "deterministic exactness: extractor count and density equal hand-computed values on 100% of fixtures",
       "per-call agreement on the 30 sampled real calls with every disagreement itemized by matched offset"
      ],
      "minimum_thresholds": "100% on fixtures including the disjointness fixture; >= 27/30 exact agreement on sampled real calls; thresholds frozen before scoring",
      "disagreement_review": "all disagreements listed verbatim with character offsets; reviewer signs off on the frozen list as frozen",
      "failure_verdict": "construct-rejected"
     },
     "multiplicity_family": "wave-001-primary",
     "holdout_rule": "common-wave-001",
     "primary_p_value_count": 1,
     "leakage_boundary": {
      "allowed_fields": [
       "management answer-turn body text of the current call (string matching only)",
       "speaker role tags and turn order (to identify answer turns)",
       "call_date, fiscal_quarter, fiscal_year (pairing only)",
       "ticker (issuer-baseline join key only)"
      ],
      "forbidden_fields": [
       "return_fields",
       "price_fields",
       "outcome_labels",
       "future_transcripts",
       "post_endpoint_metadata",
       "prepared-remarks text",
       "analyst question text",
       "other calls' text"
      ],
      "identifier_handling": "required-and-declared",
      "date_handling": "required-and-declared",
      "future_text_handling": "forbidden",
      "pretraining_risk_mitigation": "no model in the loop \u2014 frozen phrase matching; identifiers and dates inside answer text untouched for the same reason as CM-2; pretraining leakage structurally impossible",
      "rationale": "answer text is the construct's raw material and is consumed only by deterministic matching; ticker and fiscal fields serve the baseline join; the published feature is one density"
     },
     "overlap_boundary": "Designed against settled evasion-proxy (entry 4), which was a null: evasion scored whether management DECLINED to answer; CM-3 scores how firmly management qualifies the answers it DOES give. The lists are disjoint by fixture ('too early to say' is evasion, 'hard to say' is hedge \u2014 the former defers, the latter answers with uncertainty; the spec accepts this adjacency and freezes the assignment). The constructs disagree in both directions: a confident refusal is evasion-high hedge-low, a hedged full answer is the reverse. Distinct from tone-delta (entry 1): the Loughran-McDonald uncertainty category overlaps conceptually but tone-delta scored negative/positive shares of the whole Q&A section including analyst speech, not an uncertainty density of management answers alone; this is declared adjacency, not identity. Distinct from Star's quantitative-specificity: CM-3 reads no numbers and does not score vague quantifiers of magnitude ('meaningful', 'significant'), which are Star's. Distinct from Temperance's FCI (commitment disposition across calls) and Magician's AA (attribution locus): no classification.",
     "secondary_analyses": [
      "descriptive, no p-value: hedge density split into the first-person-belief subset ('i think', 'we believe', ...) and the approximator subset ('roughly', 'approximately', ...), each spread reported alongside the primary so readers can see which half carries it"
     ]
    },
    {
     "hypothesis_id": "CM-4",
     "title": "Question echo \u2014 answers that open by repeating the question predict negative abnormal return",
     "statement": "Calls where a higher share of management answers open by verbatim-repeating a run of the analyst's question than the issuer's own trailing norm earn lower +2..+60 session SPY-relative abnormal returns (the measured construct is lexical reuse of the question's wording at the top of the answer, a 4-token run carrying at least one content-length token; 'stalling' is the motivation, not the measurement \u2014 the construct cannot distinguish stalling from courteous restatement and does not claim to).",
     "direction": "negative",
     "unit_of_analysis": "one earnings call (issuer-quarter) with issuer trailing call history",
     "cost_class": "string-match",
     "primary_feature": {
      "name": "cm_question_echo_delta",
      "definition": "for each qualifying exchange (CM-1 definition: question >= 5 tokens, answer >= 20 tokens), echo = 1 if the first 25 normalized tokens of the answer (concatenated management turns of that exchange) contain a run of >= 4 consecutive tokens that also occurs as a run in the normalized token sequence of that exchange's question turn AND in which at least one token has length >= 5 characters after normalization (kills stopword-only n-grams such as 'and i think that'; deterministic), else 0; the exchange's question turn is the one the CM-1 grouping assigns (the last of consecutive question turns); normalization per shared_extraction (case-fold, strip non-alphanumerics, drop empty tokens); call value = share of qualifying exchanges with echo = 1; feature = call value minus the median of the same share over up to 4 immediately preceding adjacent quarterly calls (minimum 2 required)",
      "aggregation": "one scalar per call from per-exchange binary flags",
      "comparison": "cross-sectional level within calendar quarter, quintile sort high-minus-low"
     },
     "primary_endpoint": {
      "return_field": "abnormal_60_winsor",
      "window_start_session": 2,
      "window_end_session": 60,
      "benchmark": "cumulative stock return divided by SPY return, winsorized 1/99 percent, per transcript-alpha settled-entry convention",
      "price_timing": "close of first SPY session strictly after call_date through close of session +60"
     },
     "estimator": "quarterly high-minus-low quintile spread, Newey-West lag-1 on quarterly spreads, ticker-cluster bootstrap as in settled entries 1-4",
     "universe": "CM-1 universe (settled gates, splitter verdict ok on current and baseline calls, trailing history)",
     "exclusions": [
      "splitter verdict not ok on the current call",
      "fewer than 10 management answer turns in Q&A on the current call",
      "fewer than 5 qualifying exchanges on the current call",
      "fewer than 2 baseline calls that are splitter-verdict ok, have >= 10 management answer turns in Q&A (current-call gate mirrored onto baselines), and have >= 5 qualifying exchanges",
      "baseline adjacency failing the settled pairing rules (call exclusion; funnel reports the count)",
      "below settled liquidity/price gates",
      "incomplete +60 session return horizon at frozen price cutoff"
     ],
     "missingness_rule": "too few qualifying exchanges or insufficient baseline are excluded (support), not imputed; a zero echo share is a value",
     "support_gate": "minimum 400 scored calls, 150 distinct issuers, 6 calendar quarters, and nonzero cm_question_echo share on at least 10% of scored calls (if 4-token echoes are rarer than that the construct lacks variance to sort on and the gate fails)",
     "smallest_effect_size_of_interest": "0.01 (one percentage point) quarterly high-minus-low spread in abnormal_60_winsor units",
     "power_target": 0.8,
     "calibration_gate": {
      "blind_to_returns": true,
      "labeled_sample_design": "deterministic fixture plan: constructed exchanges with planted echoes (exact 4-token boundary, 3-token near-miss, a 4-token run of stopwords only ('and i think that') which must NOT count, a 4-token run whose only long token is exactly 5 characters which counts, echo starting at answer token 22 so it straddles the 25-token window, echo entirely after token 25 which must NOT count, punctuation and case variants, a run present in the PREPARED remarks but not the question which must not count, a multi-executive answer where the echo is in the second executive's turn) where the flags are known by construction; plus a return-blind seeded deterministic draw of 30 real exchanges flagged echo = 1 from discovery-window calls, hand-verified as true verbatim question reuse by a seat other than the owner",
      "metrics": [
       "deterministic exactness: per-exchange flags and the call share equal constructed truth on 100% of fixtures",
       "flag precision on the 30 sampled real echoes (a sampled exchange counts as correct if the hand check confirms a >= 4-token verbatim run containing a >= 5-character token under the frozen normalization; this is a string-identity check and is declared as such \u2014 it validates the extractor, not the 'stalling' motivation)"
      ],
      "minimum_thresholds": "100% on fixtures; >= 28/30 confirmed echoes; thresholds frozen before scoring",
      "disagreement_review": "every unconfirmed echo listed verbatim with both offsets; reviewer signs off on the normalization and the window/run lengths as frozen",
      "failure_verdict": "construct-rejected"
     },
     "multiplicity_family": "wave-001-primary",
     "holdout_rule": "common-wave-001",
     "primary_p_value_count": 1,
     "leakage_boundary": {
      "allowed_fields": [
       "management answer-turn body text and the prompting analyst question-turn body text of the SAME exchange in the SAME call (string matching only)",
       "speaker role tags and turn order (to group exchanges)",
       "call_date, fiscal_quarter, fiscal_year (pairing only)",
       "ticker (issuer-baseline join key only)"
      ],
      "forbidden_fields": [
       "return_fields",
       "price_fields",
       "outcome_labels",
       "future_transcripts",
       "post_endpoint_metadata",
       "prepared-remarks text",
       "other exchanges' text",
       "other calls' text"
      ],
      "identifier_handling": "required-and-declared",
      "date_handling": "required-and-declared",
      "future_text_handling": "forbidden",
      "pretraining_risk_mitigation": "no model in the loop \u2014 exact string matching within one exchange; identifiers and dates inside the text are untouched because masking would break verbatim identity; pretraining leakage structurally impossible",
      "rationale": "the question and answer text of one exchange are the construct's raw material; verbatim identity cannot be computed on redacted text; the published feature is one share"
     },
     "overlap_boundary": "Distinct from Hermit's frozen CSL-5 (scripted spill), which matches answers against the same call's PREPARED REMARKS with a 10-token minimum: CM-4 never reads prepared remarks, matches only against the prompting QUESTION, uses a 4-token run inside a 25-token answer window, and is an exchange-level flag rather than a token-coverage share. The 'no cross-section verbatim matching' line in the recorded boundary is honored: question and answer are both Q&A-section text. Distinct from settled explicit ACR (entry 2), which scored semantic relevance of answer to question by embedding: an echo is lexical repetition, which an embedding scores as maximally relevant \u2014 the constructs point opposite ways by design. Distinct from Sun's analyst-agenda-shift: the question text is read only as a match target, never classified.",
     "secondary_analyses": [
      "descriptive, no p-value: echo share recomputed with the answer window widened to 50 tokens, reported alongside the primary so readers can see sensitivity to the frozen window"
     ]
    }
   ],
   "preregistration_notes": "Family boundary: first recorded on cst-5cr5.11.5 (Chariot review comment 2026-10-21 09:12) and restated as the first paragraph of cst-5cr5.11.11 \u2014 CSL owns call-shape aggregates (scheduling, section token counts, speaker attribution and cardinality, token shares across speakers, within-call verbatim reuse against prepared remarks); this family takes within-turn delivery properties only. Seeds from the 2026-10-19 claim that CSL absorbed (section ratio, analyst count, questions-taken count) are dropped, not re-filed. Numeric constructs (numeric density, latency to first figure) that the bead text floated are DROPPED from this draft because Star's ratified quantitative-specificity family owns the density and texture of numbers in management speech; CM-2 and CM-4 here are the replacements and read no numbers. The scripted-spontaneity seed (linguistic-complexity gap) stays pooled for a later wave per the 2026-10-20 synthesis. All four hypotheses share the CSL trailing-baseline convention (up to 4 preceding adjacent quarterly calls, minimum 2, pre-window rows allowed) and the CSL-4/5 answer-turn definition and denominator by import, so one extractor pass serves both cheap families. Token counts are whitespace tokens everywhere. Vendor transcript cleaning is the family's known format risk (CM-2 most exposed): the funnel reports zero-count calls per hypothesis and CM-2 carries a variance support gate. Reviewer rule, offered as a family convention and learned on cst-5cr5.11.6: the independent reviewer builds calibration probes from the frozen spec TEXT, never from the owner's fixture suite, because an owner-written suite pins whatever the owner already believed; the owner's suite and the reviewer's probes are both required for coverage sign-off. Reviewer choice: Hermit owns the adjacent CSL family and is best placed to police the boundary from the other side; Star or Sun substitute without change to the hypotheses. Review round 1 (Hermit, cst-5cr5.11.11 comment 2026-10-21 17:28) landed in this revision: CM-2 discourse position redefined on attached punctuation (item 1); CM-1/CM-4 exchange grouping stated as the acr algorithm over the CSL turn stream with CSL tests and last-question-wins (item 2); import binding pinned to the cst-5cr5.11.14 manifest (item 3); 'around' dropped from the hedge list (item 4); CM-4 runs require a >= 5-character token and the statement names lexical reuse as the measured construct (item 5, path b); the 10-answer-turn gate mirrored onto baseline calls for all four hypotheses (item 6); the 'so look' position asymmetry declared deliberate with a fixture (item 7). Reciprocal boundary commitment recorded by Hermit in that comment: CSL will not instrument within-exchange or within-turn relationships without a coordinated CM spec_version bump."
  },
  "freeze": {
   "state": "frozen",
   "frozen_at_utc": "2026-10-21T17:56:23Z",
   "spec_sha256": "93bda3871f41224e97241c806fbdaf1ca7c0d033a1503e2264266f0d3d6fbe92"
  },
  "execution": {
   "state": "discovery-scored",
   "candidate_snapshot_sha256": "7598552efaaf54966426c6a240f3a9a8508d1cf45a349459b7d3ec23c6439d1a",
   "extractor_artifact_sha256": "e6783f3e71060b0aac67633877875e6f9754c02ed17e0658611b27f67aac4bb1",
   "calibration_artifact_sha256": "1b23191e66635f0559c73895f14a72ceeb06f47e0358ab1806253201f0bdc78b",
   "exclusion_funnel_sha256": null,
   "engine_job_manifest_sha256": "a68fdae69bb81eec907c743c6a410db610899f3eb1be1f3f868bff7ea06d65af",
   "compute": {
    "jobs": null,
    "tokens": null,
    "model": null,
    "code_revision": "a282ab4"
   }
  },
  "results": {
   "state": "wave-001-final",
   "discovery_artifact_sha256": "32a45be9ebb5f6e69ce05f78f344d8349c34e5a7015818af51501b501b65b057",
   "holdout_artifact_sha256": null,
   "raw_primary_p_value": {
    "CM-1": 0.7381675098514152,
    "CM-2": 0.9886462329772278,
    "CM-3": 0.4346083909294005,
    "CM-4": 0.45946961174125267
   },
   "adjusted_primary_q_value": {
    "CM-1": 0.8436200112587603,
    "CM-2": 0.9886462329772278,
    "CM-3": 0.7351513787860042,
    "CM-4": 0.7351513787860042,
    "procedure": "Benjamini-Hochberg over the frozen wave-001-primary 8-vector, FDR q=0.1, computed once (cst-5cr5.11.25)",
    "multiplicity_artifact_sha256": "f1c8eede54a89a7957fbfb5b55160609e4f7d533e91c6da6bd81de15a2213f9d",
    "verdict_by_hypothesis": {
     "CM-1": "bounded-null",
     "CM-2": "inconclusive",
     "CM-3": "bounded-null",
     "CM-4": "bounded-null"
    },
    "tost": {
     "CM-1": {
      "p_lower": 0.015730264732567435,
      "p_upper": 0.04827159724643959,
      "pass": true,
      "direction_sign_holds": true
     },
     "CM-2": {
      "p_lower": 4.4742425456284935e-05,
      "p_upper": 0.12980793673819357,
      "pass": false,
      "direction_sign_holds": false
     },
     "CM-3": {
      "p_lower": 0.005301745495507735,
      "p_upper": 0.003097823623836704,
      "pass": true,
      "direction_sign_holds": true
     },
     "CM-4": {
      "p_lower": 0.006260820931547745,
      "p_upper": 0.004475953800869958,
      "pass": true,
      "direction_sign_holds": true
     }
    },
    "promotions": 0
   },
   "effect_interval": {
    "note": "quarterly high-minus-low quintile spreads in abnormal_60_winsor units with ticker-cluster bootstrap 95% CI; CM-2 is WRONG-SIGN of record: preregistered negative, observed +0.0071 (NW t=+2.74, one-sided p=.989, CI -0.0015..+0.0148) \u2014 under the policy direction_rule it cannot promote and is not reinterpreted; CM-1/CM-3/CM-4 CIs lie inside the +/-0.01 smallest effect of interest (cst-5cr5.11.24, 2026-10-23) | FINAL (2026-10-23, artifact f1c8eede\u2026, Sun receipt PASS): zero wave-001 promotions; CM-1/CM-3/CM-4 bounded-null (TOST both tails reject the +/-0.01 SESOI at alpha .05); CM-2 inconclusive (wrong-sign; upper TOST tail p=.130 admits +SESOI). Family verdict enum set to inconclusive = the weakest claim true of any member (CM-2), per the cross-family convention Hermit declared on cst-5cr5.11.25, so the single field never overstates; per-hypothesis verdicts in adjusted_primary_q_value.verdict_by_hypothesis because the v1 contract carries one verdict per family.",
    "CM-1": 0.00177,
    "CM-2": 0.00707,
    "CM-3": -0.0001,
    "CM-4": 0.0,
    "bootstrap_ci_95": {
     "CM-1": [
      -0.00678,
      0.00978
     ],
     "CM-2": [
      -0.00149,
      0.01479
     ],
     "CM-3": [
      -0.00867,
      0.00826
     ],
     "CM-4": [
      -0.0082,
      0.00824
     ]
    }
   },
   "verdict": "inconclusive",
   "second_seat_review_bead": null
  }
 }
}
