Evidence appendix · cst-5cr5.10 · generated 14 October 2026
Every number has an address.
This ledger maps the decision report’s material claims to exact aggregate artifacts, JSON pointers, script hashes, or closed Beads records. It contains no transcript text, participant text, raw panel rows, secrets, or database credentials.
Evidence IDs in the main report resolve here. JSON paths use RFC 6901-style slash notation. “Bead” references are durable ledger records recoverable with bd show <id>. Local-only panels are identified by row count and SHA-256 but are intentionally not linked or committed.
This public copy records artifact names, hashes, and exact JSON pointers without serving the host-specific research scripts or result bundles. Every material reported value remains reproduced in this appendix.
A / Manifest
Durable artifacts
Result-file hashes identify the exact aggregate outputs used for this report. Script and panel hashes are also embedded inside those outputs.
| Artifact | Role | SHA-256 | Disposition |
|---|---|---|---|
tone_delta_results.json | Tone aggregate output | b448016793c6721f3341154556193c630c1383d31d6a76c8d043479f59a3f5aa | Committed |
acr_results.json | ACR aggregate output | e32a3c929fae5c64ca1d502a52639243950f2907f7ef4e6ba1ec80b65611b472 | Committed |
evasion_results.json | Evasion aggregate output | 347d63cd12e060f4ff0eec2a48403acf276565e56ab0654d09e1eaf01d277020 | Committed |
transcript-gate/gate.py | Section splitter | b81edefed94dd2fc19e0dd3d41597a0149a4fb2f766ad60fd4c596c2ff4f956b | Committed |
tone_delta.py | Tone pipeline | 915ba31cc378c731477b935526b1a33d07a6168a84197fffc8f8acfa4b762f15 | Committed |
acr.py | ACR pipeline | ccd9307ad15c7e790ac454f5ea4939fdddc92b2f958c459e72a39a0534908730 | Committed |
evasion.py | Evasion pipeline | e11d09ebe117fc72a44c6d763512016f188cf3c63d4c8cfeb734fd5795516652 | Committed |
embedding-requirements.lock | 28-package exact environment | ece967573db2a74cdf402fb8ccb07d636f61a1200af8d35537fe122e5e46aa7b | Committed |
| tone_delta_panel.csv | 17,641 feature/outcome rows | 717ebdac98e04219de0ea12806d1e861ad721fb21bf2c5ccf34c7278a5c7b9f0 | Local / ignored |
| acr_panel.csv | 17,570 call features | 8a2fe198d6691b0b0aeb5be9e8e5c47f840367666a9428549c489514eff8043e | Local / ignored |
| evasion_panel.csv | 17,285 event features | c2af85e82dbd8771b69881ee88f36254cfddad8ce3007339e85a9da4de40f4ba | Local / ignored |
B / Gate & design
Lineage before signal
The upstream data gate and fixed return panel precede every ACR and evasion result. Later stages consume and verify the earlier panel hash rather than rebuilding the universe.
Provider structure and database inventory
A bounded FMP request returned fields {symbol, period, year, date, content}; speaker turns exist only as inline text. Neither raw FMP nor StockQL provides a prepared/Q&A section boundary. The checked StockQL transcript was byte-identical to provider content, so ingestion did not discard section metadata. StockQL held 173,795 transcripts dated 2005-10-11 through 2026-10-01; participant JSON was populated in 57,493.
Source: Bead cst-5cr5.10.1, Magician gate report and Hierophant review; implementation workshop/transcript-gate/gate.py.
Hardened splitter validation
The fixed sample contains 943 transcripts from 150 deterministically selected tickers with at least two calls since 2025-01-01 and the fiscal-year/call-date plausibility guard. The hardened splitter uses ordered marker tiers and char offsets; it does not force unresolved boundaries.
- Usable split
- 886 / 943 · 94.0%
- Separate no-Q&A
- 3 · 0.3%
- No marker
- 29
- Ambiguous
- 22
- Too few turns
- 3
- Boundary p10 / p50 / p90
- 0.29 / 0.48 / 0.70
Source: Beads cst-5cr5.10.2 and cst-5cr5.10.2.1; current script SHA is recorded in the manifest; 12 splitter tests are recorded on the closed bead.
Universe, window, pairing, and outcome
U.S. normalized common shares, with no current-active filter. Calls run 2023-01-01 through 2026-06-30; 2026-10-13 supplies complete forward prices. Guards require prior-60-session median dollar volume ≥ $25 million, last pre-call close ≥ $5, at least 40 prior price observations, complete forward prices, immediate fiscal-quarter identity, a 45–150 day call gap, valid current and previous Q&A splits, and at least 500 Q&A tokens in each call.
Abnormal return is (stock_end / stock_start) / (SPY_end / SPY_start) − 1. Start is the first SPY session strictly after call_date; endpoints are sessions 20, 40, and 60. The primary 60-session outcome therefore excludes call day and the first post-call close.
- Guarded current events
- 47,468
- Eligible with returns
- 18,970
- Final paired observations
- 17,641
- Distinct tickers
- 1,844
- First / last call
- 2023-01-05 / 2026-06-30
- Calendar quarters
- 14
Source: tone_delta_results.json /configuration, /coverage, and /database.
Portfolio and uncertainty convention
Continuous metrics are ranked into equal-weight quintiles within call calendar quarter; reported effects are Q5 minus Q1. Explicit any-reference ACR reports with-reference minus without-reference. Primary returns are globally winsorized at the 1st and 99th percentiles; raw 60-session variants remain visible.
Each primary table reports the pooled observation-level effect, the mean of 14 quarterly effects with Newey–West lag-1 standard error and t-statistic, and a 2,000-draw ticker-cluster bootstrap 95% interval. Ticker clustering preserves repeated-company dependence.
Source: each aggregate output /configuration, /winsorization_1_99_percent, and the selected /analyses/* object; bootstrap seeds 20261013 (tone/evasion) and 20261014 (ACR).
C / Tone evidence
Baseline replication
The baseline is a pipeline sanity check. Its null is specific to this universe, period, feature, and outcome construction.
Tone formula, dictionary, and coverage
Call tone is (positive − negative) / all alphabetic Q&A tokens; tone delta is current minus immediately prior fiscal quarter. The pinned Loughran–McDonald Master Dictionary 1993–2025 (March 2026) contains 86,553 rows, 2,355 negative terms, and 354 positive terms; source CSV SHA-256 is 147cb24a1687ccde60363a0fa29c62be4097debcc698c01a83e51bb8a176dbb3.
The database produced 47,468 guarded current events. Exclusive eligibility removals were 27,897 below liquidity, 281 below price, 288 insufficient prior history, and 32 incomplete stock horizon, leaving 18,970. Streamed split verdicts were 27,473 usable of 28,433 transcripts; pair/section/token exclusions leave 17,641 observations.
Source: tone_delta_results.json /dictionary, /configuration/primary_metric, and /coverage.
Tone primary horizon estimates
| Analysis key | n | Effect | NW mean / t | Cluster 95% CI |
|---|---|---|---|---|
tone_delta_winsor_20d | 17,641 | +22.20 bp | +19.88 / +0.855 | [−17.56, +64.07] bp |
tone_delta_winsor_40d | 17,641 | +12.03 bp | +10.84 / +0.415 | [−48.15, +71.78] bp |
tone_delta_winsor_60d | 17,641 | −29.98 bp | −27.09 / −0.913 | [−107.02, +46.26] bp |
For the 60-session primary, Q1 through Q5 mean abnormal returns are −1.1669%, −1.1981%, −1.6587%, −1.3517%, and −1.4667%; the sequence is non-monotone.
Source: tone_delta_results.json /analyses/tone_delta_winsor_{20d,40d,60d}.
Tone robustness and subperiod failure
All ticker-cluster intervals cross zero: raw 60d −45.68 bp [−133.00, +39.31]; tier-1-only −42.56 [−119.49, +33.73]; ≥1,000 tokens −31.13 [−108.03, +45.68]; ≥$50m liquidity −33.99 [−123.11, +60.41]; negative-share improvement −60.57 [−139.36, +14.30]. The early subperiod is +4.84 bp [−91.63, +104.40], while the late subperiod is −68.60 [−197.07, +49.86].
Source: tone_delta_results.json /analyses/*_winsor_60d and /analyses/tone_delta_raw_60d.
D / ACR evidence
Prepared-remarks anticipation
Explicit ACR detects literal callbacks. Implicit ACR measures answer-to-prepared semantic reuse. Both inherit the exact tone panel and return fields.
Model, formula, and leakage controls
Explicit ACR is the approved prepared/opening-remarks and earlier-point phrase family, reported per 10,000 full-Q&A alphabetic tokens, answer incidence, and any-reference. Implicit ACR is the answer-token-weighted mean of each 220-word answer chunk’s maximum cosine similarity to any 220-word prepared chunk; prepared overlap is 40 words and answer overlap is zero.
The frozen 256-dimensional model is minishlab/potion-base-8M, MIT license, local FastEmbed 0.9.0, snapshot e893cf44cf35e6a1bf2be5f0e9354b76eb9277ac. Its fixed sanity pair scores 0.5508 for a financial paraphrase versus 0.1513 for unrelated text.
Leakage controls: current-call text only; inherited content hash verified before extraction; pre-call liquidity and price floors; call day/+1 excluded; frozen model receives no return labels; completed-quarter ranks are research sorts rather than deployable thresholds.
Source: acr_results.json /configuration, /embedding, and /leakage_checks. The five exact model-file hashes are at /embedding/file_sha256.
ACR coverage and feature distribution
- Input calls
- 17,641
- Usable features
- 17,570 · 99.6%
- Distinct tickers
- 1,839
- No usable exchange
- 71
- Explicit-reference calls
- 5,255 · 29.9%
- Tier-1 splits
- 16,961
- Role metadata path
- 16,975
- Prepared-speaker fallback
- 595
- Mean / median exchange coverage
- 0.906 / 0.930
Implicit ACR mean / SD is 0.6391 / 0.0483. Explicit references average 0.833 per 10,000 Q&A tokens, with median zero.
Source: acr_results.json /coverage and /feature_distributions.
Explicit ACR return estimates
| Analysis key | Effect | NW mean / t | Cluster 95% CI |
|---|---|---|---|
explicit_any_winsor_20d | −9.64 bp | −13.36 / −0.760 | [−36.10, +17.97] bp |
explicit_any_winsor_40d | −20.56 bp | −21.68 / −0.994 | [−58.67, +19.19] bp |
explicit_any_winsor_60d | −11.70 bp | −14.18 / −0.574 | [−61.47, +41.61] bp |
explicit_any_high_toughness_winsor_60d | −16.77 bp | −28.80 / −0.658 | [−88.34, +51.22] bp |
explicit_any_low_toughness_winsor_60d | −7.54 bp | −2.04 / −0.057 | [−78.60, +67.28] bp |
The positive-only normalized reference-rate sort is −42.93 bp with CI [−187.36, +99.72]; tier-1 any-reference is −11.84 [−64.06, +40.93].
Source: acr_results.json /analyses/explicit_*.
Implicit ACR return estimates
| Analysis key | Effect | NW mean / t | Cluster 95% CI |
|---|---|---|---|
implicit_winsor_20d | −33.71 bp | −31.11 / −1.152 | [−75.11, +9.20] bp |
implicit_winsor_40d | −40.33 bp | −31.67 / −0.534 | [−97.97, +20.81] bp |
implicit_winsor_60d | −67.26 bp | −56.51 / −0.604 | [−143.05, +7.31] bp |
implicit_length_adjusted_winsor_60d | −74.13 bp | −61.92 / −0.657 | [−145.06, +1.69] bp |
implicit_tier1_winsor_60d | −76.34 bp | −69.60 / −0.813 | [−158.64, +3.80] bp |
implicit_90pct_exchange_coverage_winsor_60d | −75.48 bp | −51.70 / −0.496 | [−165.38, +15.66] bp |
Source: acr_results.json /analyses/implicit_*.
Length confound, toughness cuts, and novelty boundary
Implicit ACR correlates 0.4895 with log prepared-chunk count because a maximum over more prepared chunks rises mechanically. The within-quarter length-residualized result is therefore required. Tough-question and easier-question implicit spreads are −52.80 bp [−160.43, +56.75] and −91.04 [−195.87, +8.38], respectively; neither resolves interpretation.
Closest prior art: Allee, Do & Do compare analyst-question uniqueness with management’s prepared narrative. This prototype instead compares management answers with prepared remarks. The narrower object may differ, but the broader prepared/Q&A similarity space is not novel in full.
Source: Bead cst-5cr5.10.4 completion record for the 0.4895 diagnostic and novelty qualification; acr_results.json /analyses/implicit_{length_adjusted,high_toughness,low_toughness}_winsor_60d.
E / Evasion evidence
Question-to-answer relevance
The return test is secondary because the proxy fails its directional positive-control calibration.
Feature construction and coverage
Exchange evasion is 1 − cosine(question embedding, answer embedding). Questions and answers are independently chunked to 220 words, token-weighted to document vectors, scored per exchange, and averaged per call. A fixed 14-topic keyword taxonomy maps to four coarse groups. Quarter-over-quarter fine-topic delta equally weights only non-other topics present in both adjacent calls.
- Unique current/prior calls
- 20,188
- Call features
- 20,103
- No usable exchange
- 85
- Final event features
- 17,285
- Missing current/prior feature
- 101
- No matched fine topic
- 255
- Distinct tickers
- 1,821
- Sector known
- 17,279
- Embedded chunks
- 778,956
Source: evasion_results.json /configuration, /coverage, and /runtime.
Calibration: synthetic sanity passes, corpus control fails
The fixed semantic sanity pair produces cosine 0.6684 for a direct answer and 0.2418 for an explicit deflection. The corpus control then checks whether answers containing literal refusal, inability, no-comment, or follow-up phrases have higher evasion than unflagged answers. They do not.
- Flagged n / mean
- 4,404 / 0.3851
- Unflagged n / mean
- 303,551 / 0.4038
- Flagged − unflagged
- −0.0187
- Cohen’s d
- −0.159
- Rank AUC
- 0.4497
- Directional check
- Failed
Unflagged exchanges are not assumed true negatives, and a literal non-answer can coexist with an otherwise responsive answer. Even with that limitation, the prespecified direction fails. The output therefore records prototype_rejected_calibration_failed.
Source: evasion_results.json /calibration and /decision/alpha.
Evasion-delta return estimates
| Analysis key | n | Effect | NW mean / t | Cluster 95% CI |
|---|---|---|---|---|
fine_topic_delta_winsor_20d | 17,285 | −7.22 bp | −9.05 / −0.613 | [−46.61, +32.87] bp |
fine_topic_delta_winsor_40d | 17,285 | −8.51 bp | −9.92 / −0.365 | [−68.54, +52.99] bp |
fine_topic_delta_winsor_60d | 17,285 | −28.43 bp | −28.47 / −1.183 | [−100.82, +45.29] bp |
Every sensitivity interval also crosses zero: raw fine-topic −29.88 bp [−111.53, +52.85]; both tier-1 −22.20 [−95.17, +51.17]; ≥90% exchange coverage +49.49 [−49.24, +149.40]; coarse-topic −0.91 [−74.49, +72.80]; overall delta +8.41 [−68.49, +86.91]; current level +66.14 [−12.20, +141.81].
Source: evasion_results.json /analyses.
Bounded 2026-Q2 sector/topic demonstration
The demo takes the latest complete call quarter, deduplicates one observation per company within current-sector × fine-topic, requires at least three companies and 30 earlier observations in that sector-topic, and standardizes only against earlier quarters. Candidate rule: mean historical z ≥ 0.5 and positive-delta share ≥ two-thirds.
- Eligible sector-topic groups
- 122
- Groups passing screen
- 9
- Top group
- Healthcare × capital allocation
- Companies / prior n
- 8 / 56
- Mean z / positive share
- +1.160 / 100%
- Decision
- Not actionable
Top-group tickers: BBIO, EXEL, MMSI, PFE, PRGO, SOLV, TFX, XRAY. Next two: Basic Materials × balance sheet (5 companies, prior n 72, z +0.856, 100% positive) and Healthcare × inventory/supply chain (5, prior n 89, z +0.825, 80%).
Failure modes: scorer calibration failed; sector is current rather than point-in-time; groups are exploratory and not multiplicity-adjusted; no independent policy-event labels were adjudicated.
Source: evasion_results.json /policy_demo, /decision/policy, and /limitations.
F / Synthesis
Cost and decision trail
Compute was proportionate to a prototype. Statistical and measurement failure—not cost—drives the stop decision.
Measured compute
- Tone wall time
- 188.18 s
- ACR wall time
- 332.07 s
- Evasion wall time
- 579.28 s
- Total scored pipelines
- 1,099.52 s · 18.33 min
- Embedded chunks
- 1,502,731
- Embedding threads
- 20
ACR processed 723,775 chunks at 2,179.6/s in 138 transcript batches. Evasion processed 778,956 at 1,344.7/s in 316 call batches. Timers cover the pipelines’ recorded analysis regions; the upstream splitter validation is a separate bounded gate run.
Source: Bead cst-5cr5.10.3 for tone wall time; acr_results.json /runtime; evasion_results.json /runtime.
Go / no-go ledger
| Object | Decision | Controlling evidence |
|---|---|---|
| Q&A tone delta | No-go standalone alpha | Horizon sign reversal, non-monotone quintiles, every robustness CI crosses zero. |
| Explicit ACR | No-go standalone alpha | Small with/without effects; all horizon, tier, rate, and toughness intervals cross zero. |
| Implicit ACR | No-go standalone alpha | Suggestive negative direction, but all intervals cross zero, weak quarterly t-statistics, multiple cuts, ambiguous ex-ante sign. |
| Evasion alpha | Reject current proxy | Directional calibration fails and all primary return intervals cross zero. |
| Policy clusters | Descriptive only; not actionable | Invalid scorer for this use, current-sector look-ahead, no multiplicity adjustment or event adjudication. |
Source: Closed Beads cst-5cr5.10.3, .4, and .5; aggregate results identified in the manifest. No favorable cut was promoted over its primary specification.
Privacy, identity, and provenance boundary
Production queries are read-only. The fiscal identity is (ticker, fiscal_year, fiscal_quarter) with verbatim call_date and abs(year(call_date) − fiscal_year) ≤ 1. Tone rows retain current/prior transcript IDs and full-text hashes. ACR verifies the inherited tone-panel hash and adds participant-metadata hashes. Evasion verifies current and prior content hashes and participant hashes. None of the three result JSON files or this report contains raw transcript text.
Local panels contain derived features, IDs, hashes, prices, and returns but no raw transcript. They remain gitignored by design. Connection settings and model caches are host-local and are not documented here.
Source: each result /panel, /implementation, and tone /database; source scripts in the manifest.
G / Formula register
What each signal means
The register prevents direction changes after results are known.
Tone delta
Change in finance tone
tone(call) = (LM_positive − LM_negative) / Q&A_alpha_tokens tone_delta = tone(current) − tone(previous)
Higher means the current Q&A uses relatively more positive / fewer negative finance words than the prior quarter.
Explicit ACR
Literal callback rate
explicit_rate = reference_phrase_count / full_Q&A_tokens × 10,000 explicit_any = 1 if any parsed answer contains a phrase
Higher means management more often points back to prepared/opening remarks or an earlier point.
Implicit ACR
Answer-to-script reuse
answer_score = max cosine(answer_chunk, each prepared_chunk) implicit_ACR = answer-token-weighted mean(answer_score)
Higher means Q&A answers are semantically closer to prepared remarks. It can mean anticipation, repetition, or scripted avoidance; sign is not intrinsic.
Evasion proxy
Question-answer distance
exchange_evasion = 1 − cosine(question_vector, answer_vector) topic_delta = mean(current matched topics − prior matched topics)
Higher means lower semantic similarity, not deception. The corpus positive-control test fails, so “evasion” remains a rejected proxy label.
H / Reproduction
Code path and checks
Commands assume an authorized StockQL read-only host and the exact local model snapshot. They intentionally omit connection details and credentials.
Behavioral verification
The final combined suite contains 24 tone, ACR, and evasion tests; the splitter suite is separate. The pinned embedding environment passes dependency consistency checks.
python3 -m unittest \
workshop/transcript-gate/test_gate.py \
workshop/transcript-alpha/test_tone_delta.py \
workshop/transcript-alpha/test_acr.py \
workshop/transcript-alpha/test_evasion.py
python3 workshop/transcript-alpha/tone_delta.py
python3 -m venv .venv
.venv/bin/python -m pip install \
-r workshop/transcript-alpha/embedding-requirements.lock
.venv/bin/python workshop/transcript-alpha/acr.py
.venv/bin/python workshop/transcript-alpha/evasion.py
.venv/bin/python -m pip check
I / External sources
Method and prior-art anchors
Primary pages and DOI records only. External papers motivate features or calibrations; they do not substitute for this study’s own evidence.
- Loughran–McDonald Master Dictionary, official Software Repository for Accounting and Finance distribution page.
- Tim Loughran & Bill McDonald, “When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks”, Journal of Finance 66(1), 2011.
- S. McKay Price, James S. Doran, David R. Peterson & Barbara A. Bliss, “Earnings conference calls and stock returns: The incremental informativeness of textual tone”, Journal of Banking & Finance 36(4), 2012.
- Lauren Cohen, Christopher Malloy & Quoc Nguyen, “Lazy Prices”, Journal of Finance 75(3), 2020.
- Kristian D. Allee, Chuong Do & Huy N. Do, “Can Analysts Elicit Useful Information by Asking Unique Questions in Earnings Conference Calls?”, SSRN 4763812.
- Ian D. Gow, David F. Larcker & Anastasia A. Zakolyukina, “Non-Answers During Conference Calls”, Journal of Accounting Research, 2021. Their abstract reports about 11% of analyst questions elicit non-answers.
- Liam Hynes, Huimin Chiang, John Garvey & Fergal O’Brien, “The Language of Evasion: How Semantic Similarity Between Questions and Answers Predicts Stock Returns”, Journal of Behavioral Finance, accepted/in press 2026. Their institutional abstract reports human validation on 1,642 Q/A pairs: 67% evasive ratings for low-similarity versus 22% for high-similarity responses.
- minishlab/potion-base-8M model card, MIT static embeddings. The exact ONNX snapshot and file hashes used here are recorded in
acr_results.json.