{
 "atlas_url": "https://stockql.ai/atlas/wave-001/attribution-asymmetry.json",
 "current_url": "https://stockql.ai/atlas/attribution-asymmetry.json",
 "wave": "wave-001",
 "published_spec_sha256": "26a0308f0db2a6e55f87240c784e1e287cb2288bef3d189895b2182e5b09884e",
 "verify_with": "freeze_registry.py verify (github: see /atlas/index.json tooling note)",
 "generated_utc": "2026-10-26T17:26:20Z",
 "frozen_entry": {
  "contract_version": "signal-atlas-registry-v1",
  "policy_version": "registry-policy-v1",
  "registry_wave_id": "wave-001",
  "family": {
   "family_id": "attribution-asymmetry",
   "family_title": "Attribution Asymmetry: self-serving outcome attribution in earnings-call Q&A as a governance signal",
   "owner": "Magician",
   "independent_reviewer": "Star",
   "source_bead": "cst-5cr5.11.2",
   "spec_version": 2,
   "supersedes_spec_sha256": "807745e047490efeb9efc29320864c6a683334ca4c07438b010bc3d80fc6fea3",
   "claimed_at_utc": "2026-10-20T17:30:00Z",
   "shared_extraction": {
    "input_unit": "single call",
    "input_binding": "Q&A section only, as produced by the transcript-alpha splitter with verdict ok; joined metadata limited to speaker role tags (management vs analyst) and fiscal-quarter sequence index for QoQ pairing",
    "output_contract": "typed rows {statement_id, outcome_valence: positive|negative, attribution_locus: internal-execution|external-factor|unresolved, evidence_char_offsets, confidence 0-1}; statements with no attributable outcome emit no row; ambiguous locus emits unresolved, never a guess",
    "model_or_algorithm": "LLM judgment: local Qwen3.8-Flash-Next (vllm serving name, FP8 weights snapshot 970c569adaca6b35532111fd6b27351b2baefe50, town GPU estate), temperature 0, fixed system prompt classifying one management answer-turn at a time with only local turn context; prompt artifact hashed at freeze of extractor. [v2 amendment per Conway ruling + Hierophant governance path, cst-5cr5.11.21 2026-10-22: scorer-procurement change only; supersedes the claude-haiku-4-5-20251001 pin of v1 807745e0]",
    "prompt_or_code_artifact_sha256": null,
    "scorer_blinded_to_returns": true,
    "scorer_blinded_to_future_transcripts": true
   },
   "hypotheses": [
    {
     "hypothesis_id": "AA-1",
     "title": "External-blame asymmetry predicts negative abnormal return",
     "statement": "Calls whose management Q&A answers show high attribution asymmetry \u2014 external-factor share of negative-outcome attributions minus external-factor share of positive-outcome attributions \u2014 earn lower +2..+60 session SPY-relative abnormal returns than low-asymmetry calls (self-serving attribution as a governance quality signal).",
     "direction": "negative",
     "unit_of_analysis": "one earnings call (issuer-quarter)",
     "cost_class": "llm-judgment",
     "primary_feature": {
      "name": "aa_asymmetry",
      "definition": "share of negative-outcome attribution rows with locus external-factor minus share of positive-outcome attribution rows with locus external-factor; unresolved rows excluded from both numerator and denominator",
      "aggregation": "one scalar per call from all extracted attribution rows in the Q&A section",
      "comparison": "cross-sectional level within calendar quarter, quintile sort high-minus-low, matching settled-entry portfolio convention"
     },
     "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": "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",
     "exclusions": [
      "splitter verdict not ok",
      "fewer than 10 management answer-turns in Q&A",
      "fewer than 5 extracted attribution rows with resolved locus",
      "fewer than 2 resolved attribution rows in EITHER valence class (positive or negative) \u2014 aa_asymmetry is a difference of two per-valence shares and is undefined or degenerate on single-valence calls; k=2 chosen and frozen here, never decided at scoring time",
      "below settled liquidity/price gates",
      "incomplete +60 session return horizon at frozen price cutoff"
     ],
     "missingness_rule": "calls with fewer than 5 resolved attribution rows, or fewer than 2 resolved rows in either valence class, are excluded (support), not imputed; unresolved locus rows never enter the feature",
     "support_gate": "minimum 400 scored calls, 150 distinct issuers, 6 calendar quarters (every scored call has both valence classes populated by construction \u2014 the per-valence k=2 exclusion above \u2014 so no populated-share clause is needed; the exclusion funnel reports the single-valence exclusion count)",
     "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": "150 management answer-turns drawn deterministically (seeded) from discovery-window transcripts, stratified by sector, hand-labeled for valence and locus by a seat other than the owner before any scoring run; minimum 20 labeled rows per locus class \u2014 if the seeded draw yields fewer (external-factor on positive outcomes is structurally rare), the draw is extended deterministically (same seed, next strata in order) until the floor is met, keeping blind-to-returns",
      "metrics": [
       "per-class precision and recall for valence and locus",
       "confusion matrix",
       "unresolved rate"
      ],
      "minimum_thresholds": "locus precision and recall both >= 0.75 per class; valence precision and recall both >= 0.85 per class; unresolved rate <= 0.35",
      "disagreement_review": "all labeled disagreements listed verbatim in the calibration artifact with class support counts; reviewer signs off on the disagreement list",
      "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 answer-turn text with the preceding analyst question turn",
       "speaker role tag (management vs analyst)"
      ],
      "forbidden_fields": [
       "return_fields",
       "price_fields",
       "outcome_labels",
       "future_transcripts",
       "post_endpoint_metadata"
      ],
      "identifier_handling": "stripped",
      "date_handling": "stripped",
      "future_text_handling": "forbidden",
      "pretraining_risk_mitigation": "masking of identifiers and dates plus local-context restriction (one answer-turn at a time); residual risk that a famous event is recognizable from context declared irreducible and noted per entry",
      "rationale": "attribution locus is judgeable from local sentence context alone; the analyst question is needed to resolve which outcome an answer attributes; nothing else is required. Stripping detail: company names, tickers, person names, absolute dates and fiscal-period identifiers are masked before the scoring prompt; relative references (last quarter, this year) retained."
     },
     "overlap_boundary": "Distinct from settled evasion-proxy (entry 4): evasion scored non-answering; AA scores the locus of answered attributions and uses no evasion features. Distinct from tone-delta (entry 1): valence here only partitions attribution rows, no net-tone aggregate is computed or reused.",
     "secondary_analyses": []
    },
    {
     "hypothesis_id": "AA-2",
     "title": "Quarter-over-quarter widening of attribution asymmetry predicts negative abnormal return",
     "statement": "Calls whose aa_asymmetry rose versus the same issuer's previous adjacent quarterly call earn lower +2..+60 session SPY-relative abnormal returns than calls where it fell (deteriorating attribution discipline precedes bad outcomes).",
     "direction": "negative",
     "unit_of_analysis": "adjacent call pair (issuer-quarter with previous quarterly call)",
     "cost_class": "llm-judgment",
     "primary_feature": {
      "name": "aa_asymmetry_qoq",
      "definition": "aa_asymmetry(current call) minus aa_asymmetry(previous adjacent quarterly call of same issuer)",
      "aggregation": "one scalar per adjacent pair; both calls must individually pass AA-1 exclusions",
      "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": "AA-1 universe restricted to issuers with an adjacent previous quarterly call also passing AA-1 exclusions, per the settled tone-delta pairing rules (adjacent fiscal identity, quarterly call gap)",
     "exclusions": [
      "either call of the pair fails any AA-1 exclusion",
      "missing previous transcript",
      "nonadjacent fiscal identity or nonquarterly call gap per settled pairing rules"
     ],
     "missingness_rule": "pairs are complete-case only; no imputation of either leg",
     "support_gate": "minimum 300 scored pairs, 120 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": "inherits the AA-1 calibration artifact; no separate labeling \u2014 the construct is identical, only differenced",
      "metrics": [
       "AA-1 calibration metrics",
       "QoQ differencing exactness check on 20 deterministic fixture pairs"
      ],
      "minimum_thresholds": "AA-1 thresholds pass; differencing fixture check exact on 20/20",
      "disagreement_review": "inherited from AA-1",
      "failure_verdict": "construct-rejected"
     },
     "multiplicity_family": "wave-001-primary",
     "holdout_rule": "common-wave-001",
     "primary_p_value_count": 1,
     "leakage_boundary": {
      "allowed_fields": [
       "AA-1 allowed fields for each leg of the pair",
       "fiscal-quarter sequence index used only for pairing, never shown to the scorer"
      ],
      "forbidden_fields": [
       "return_fields",
       "price_fields",
       "outcome_labels",
       "future_transcripts",
       "post_endpoint_metadata"
      ],
      "identifier_handling": "stripped",
      "date_handling": "stripped",
      "future_text_handling": "forbidden",
      "pretraining_risk_mitigation": "as AA-1",
      "rationale": "the difference is computed from two independently scored calls; the scorer needs nothing beyond AA-1's fields. Stripping is as in AA-1; pairing is done on metadata outside the scorer. The current call's scorer never sees the previous call's text and vice versa."
     },
     "overlap_boundary": "Distinct from settled tone-delta (entry 1) despite sharing the QoQ-differencing shape: the differenced quantity is attribution locus share, not lexicon tone; no tone dictionary is used anywhere in the family.",
     "secondary_analyses": []
    }
   ],
   "preregistration_notes": "Both hypotheses reuse the settled transcript-alpha apparatus deliberately (splitter, liquidity gates, pairing rules, return fields, estimator) so that any effect is attributable to the new construct, not new plumbing. Scoring model pinned to claude-haiku-4-5-20251001 for cost; if the model is unavailable at execution the family requires a new spec_version, not a silent substitution. External-factor locus list (FX, weather, macro, supply chain, regulation, customer behavior) is illustrative in the prompt, not exhaustive; the classifier decides locus from context. Power note (reviewer item 3, Star): the 0.8 power target is inherited from settled entries 1-4, not computed for this construct; if the wave-001 snapshot lands near the support-gate minima, a variance-based power check against the 1pp SESOI is recorded in the calibration artifact before returns open."
  },
  "freeze": {
   "state": "frozen",
   "frozen_at_utc": "2026-10-22T22:32:29Z",
   "spec_sha256": "26a0308f0db2a6e55f87240c784e1e287cb2288bef3d189895b2182e5b09884e"
  },
  "execution": {
   "state": "calibration-failed",
   "candidate_snapshot_sha256": "7598552efaaf54966426c6a240f3a9a8508d1cf45a349459b7d3ec23c6439d1a",
   "extractor_artifact_sha256": "8aeb8fdd4344cef93ba75bb0475751c7b32c1f17e96d672d9d7eadff871d06dd",
   "calibration_artifact_sha256": "139974f828b133ddf722d8f2f5b89370e0769cf8ee47631e8bad052dbbf37d07",
   "exclusion_funnel_sha256": null,
   "engine_job_manifest_sha256": null,
   "compute": {
    "jobs": null,
    "tokens": null,
    "model": "Qwen3.8-Flash-Next (vllm, FP8), chat_template_kwargs enable_thinking:false, max_tokens 2000, temperature 0",
    "code_revision": "bf9f71a"
   }
  },
  "results": {
   "state": "construct-rejected",
   "discovery_artifact_sha256": null,
   "holdout_artifact_sha256": null,
   "raw_primary_p_value": null,
   "adjusted_primary_q_value": null,
   "effect_interval": null,
   "verdict": "construct-rejected",
   "second_seat_review_bead": "cst-5cr5.11.21"
  }
 }
}
