Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
458 commits
Select commit Hold shift + click to select a range
f380810
fix(research): address review round 1 [TIME-4]
Sep 30, 2026
b9b32a3
fix(report): address review round 1 [TIME-5]
Sep 30, 2026
1a6fca5
fix(sim): address review round 1 [SIM-8]
Sep 30, 2026
a8ae7c1
feat(report): add probability-shape telemetry and a flag-off symmetri…
Sep 30, 2026
2c9428c
fix(report): address review round 2 [INFRA-5]
Sep 30, 2026
0325fb8
feat(telemetry): persist citation-surgery telemetry for report finali…
Sep 30, 2026
3284cbb
fix(actors): stable non-Latin actor ids and fail-closed actor name ma…
Sep 30, 2026
78074c5
fix(report): address review round 1 [REPORT-11]
Sep 30, 2026
1ef574d
fix(report): address review round 2 [TIME-5]
Sep 30, 2026
5031d45
fix(telemetry): address review round 1 [RESEARCH-9]
Sep 30, 2026
86eaa58
fix(report): address review round 2 [REPORT-11]
Sep 30, 2026
017aa72
fix(actors): address review round 1 [INFRA-11]
Sep 30, 2026
b50af92
fix(report): address review round 3 [TIME-5]
Sep 30, 2026
fcf4d44
Merge wp/INFRA-5: Report tool-call boundary: tolerant arg parsing, pr…
Sep 30, 2026
e57b26d
Merge wp/TIME-5: Shadow numeric-coherence guard for published binary …
Sep 30, 2026
1a33dfe
feat(data-tools): add FRED/ALFRED vintage-pinned official-data vendor…
Sep 30, 2026
61b98ac
feat(llm): escalate max_tokens on empty length-cut replies and fail c…
Sep 30, 2026
17e0b0a
fix(actors): address review round 2 [INFRA-11]
Sep 30, 2026
308d09b
feat(research): forecaster attribution and shadow forecast-dispersion…
Sep 30, 2026
b42ea20
fix(sim): address review round 1 [SIM-3]
Sep 30, 2026
2f2473e
fix(research): address review round 2 [TIME-4]
Sep 30, 2026
c0d773e
feat(eval): tier golden rows by run provenance and withhold an unback…
Sep 30, 2026
d20fd4f
feat(report): alias-aware probability-slot audit and slot repair [REP…
Sep 30, 2026
64c9b40
fix(llm): address review round 1 [INFRA-3]
Sep 30, 2026
7833df7
fix(data-tools): address review round 1 [TIME-10]
Sep 30, 2026
6d994fa
fix(research): address review round 1 [RESEARCH-6]
Sep 30, 2026
14ffd4a
fix(eval): address review round 1 [EVAL-8]
Sep 30, 2026
50ff5a7
fix(data-tools): address review round 2 [TIME-10]
Sep 30, 2026
91bece6
Merge wp/TIME-10: Official-data vendor core and FRED/ALFRED vintage-p…
Sep 30, 2026
d7b3b85
Merge wp/SIM-8: Decision elicitor sees the period's scheduled events …
Sep 30, 2026
f785fd3
Merge wp/RESEARCH-9: Citation-surgery telemetry: report finalizer pre…
Sep 30, 2026
a7beda0
Merge wp/REPORT-11: Probability-shape telemetry (pre/post-critique), …
Sep 30, 2026
d130558
Merge wp/INFRA-11: Stable actor identity for non-Latin names and stri…
Sep 30, 2026
ceb5327
fix(telemetry): fingerprint REPORT-11's binary symmetric guard in the…
Sep 30, 2026
92c7b88
fix(research): address review round 3 [TIME-4]
Sep 30, 2026
3119671
Merge wp/TIME-4: Restore v3 quantitative sanity parity (unit-scale re…
Sep 30, 2026
0e4a1eb
Merge wp/SIM-3: Run-artifact hygiene: schedule-reachability audit, wo…
Sep 30, 2026
08e5134
fix(report): address review round 1 [REPORT-3]
Sep 30, 2026
298cacd
fix(llm): address review round 2 [INFRA-3]
Sep 30, 2026
6f11f70
feat(research-gateway): add official-data tool plumbing to the v3 too…
Sep 30, 2026
689e41a
fix(research): address review round 2 [RESEARCH-6]
Sep 30, 2026
6d640a9
fix(eval): address review round 2 [EVAL-8]
Sep 30, 2026
f523eb1
Merge wp/EVAL-8: Golden headline tiering: prospective vs hindcast row…
Sep 30, 2026
9d01ffe
feat(data-tools): SEC EDGAR as-filed company statements from XBRL com…
Sep 30, 2026
693d545
feat(eval): count invalid/unknown tool calls and aggregate scorecards…
Sep 30, 2026
4755709
Merge wp/INFRA-3: max_tokens escalation on empty length-truncated rep…
Sep 30, 2026
b3e2715
Merge wp/RESEARCH-6: Forecaster attribution in fact extraction and cr…
Sep 30, 2026
b614f1b
feat(infra): guard non-finite numbers in LLM JSON and forecast artifa…
Sep 30, 2026
b36920b
fix(data-tools): address review round 1 [TIME-11]
Sep 30, 2026
478f69e
fix(report): address review round 2 [REPORT-3]
Sep 30, 2026
06d7384
fix(research-gateway): address review round 1 [TIME-12]
Sep 30, 2026
7ec3fe9
fix: close five small defects left open by merged work packages
Oct 1, 2026
538b119
feat(report): compute market-blend revisions in code and show the for…
Oct 1, 2026
4fe2fc8
Merge branch 'feat/finharness-transplants' into wp/REPORT-3
Oct 1, 2026
38bf548
fix(research): wall the hindcast evidence digest with the strict rule…
Oct 1, 2026
dd31e1a
fix(prepare): attribution never displaces a previously matched row at…
Oct 1, 2026
4329822
fix(infra): address review round 1 [INFRA-4]
Oct 1, 2026
859175f
fix(report): contested-claims table keeps slots for quantitative reco…
Oct 1, 2026
b69d2cf
fix(scripts): report backfill keeps the binary_quality keys EVAL-10 a…
Oct 1, 2026
1cc2f0c
fix(markets): an unanswered market query never reads as a verified-em…
Oct 1, 2026
9ecb057
fix(report): label expired-but-open markets in the market cross-check…
Oct 1, 2026
8c218f7
fix(report): spine evidence pack gets the verified-figures block, not…
Oct 1, 2026
a99ca7e
fix(forecast): no model-volunteered market anchor inside a hindcast p…
Oct 1, 2026
536794a
fix(safety): the run's pinned policy governs interview graph feedback…
Oct 1, 2026
2076e4d
fix(report): reject a market blend that rounding pushes off the p..m …
Oct 1, 2026
d008cfc
fix(report): hollow-run gate reaches the outline, the agent's tools a…
Oct 1, 2026
1db3e69
fix(data-tools): address review round 2 [TIME-11]
Oct 1, 2026
6e2c348
fix(report): address review round 3 [REPORT-3]
Oct 1, 2026
8d667ac
feat(markets): per-row price observation time for market anchors [FU-11]
Oct 1, 2026
b4b8818
feat(sim): zero-LLM prior-echo diagnostic for the decision channel an…
Oct 1, 2026
eff3419
feat(eval): golden-set contamination probes: closed-book and outcome-…
Oct 1, 2026
e9ac2b8
fix(scripts): address review round 1 [FU-1]
Oct 1, 2026
7e9f785
feat(eval): structured numeric targets on binaries, same-target thres…
Oct 1, 2026
8f1f2f8
feat(eval): frozen evaluation bundle of each published report [EVAL-19]
Oct 1, 2026
5a9738b
fix(report): address review round 1 [REPORT-12]
Oct 1, 2026
30ab072
Merge wp/REPORT-12: Deterministic market-blend arithmetic for the 10p…
Oct 1, 2026
4b70734
fix(data-tools): address review round 3 [TIME-11]
Oct 1, 2026
08507f0
feat(research): per-KIQ evidence count headers, sufficiency labels an…
Oct 1, 2026
e629226
feat(eval): score settled binaries against the market price they saw …
Oct 1, 2026
0f5863c
feat(sim): human-authored outcome_power_overrides in scenario overlay…
Oct 1, 2026
0da8bcc
fix(markets): address review round 1 [FU-6]
Oct 1, 2026
10882da
fix(report): address review round 1 [FU-4]
Oct 1, 2026
3b2eb29
fix(data-tools): address review round 4 [TIME-11]
Oct 1, 2026
2806c12
fix(markets): address review round 2 [FU-6]
Oct 1, 2026
e3a3a14
fix(forecast): address review round 1 [FU-7]
Oct 1, 2026
b5b81c4
fix(eval): address review round 1 [EVAL-19]
Oct 1, 2026
01c4cb5
fix(report): address review round 2 [FU-4]
Oct 1, 2026
3b8224e
feat(eval): EVAL-20 label-free block-movement study over frozen bundles
Oct 1, 2026
ad17068
fix(sim): address review round 1 [SIM-7]
Oct 1, 2026
a6ec6d9
fix(eval): address review round 1 [EVAL-5]
Oct 1, 2026
5af207e
fix(research): address review round 1 [RESEARCH-10]
Oct 1, 2026
1382756
fix(eval): address review round 1 [EVAL-20]
Oct 1, 2026
52b013c
fix(safety): address review round 1 [FU-8]
Oct 1, 2026
bcb5ef8
fix(report): address review round 4; make the slot repair opt-in [REP…
Oct 1, 2026
8f9c5b5
Merge wp/SIM-7: Human-authored outcome_power overrides in scenario ov…
Oct 1, 2026
40bc6d2
Merge wp/TIME-11: SEC EDGAR as-filed company statements (companyfacts…
Oct 1, 2026
6ebb867
Merge wp/RESEARCH-10: Per-KIQ evidence count headers, sufficiency lab…
Oct 1, 2026
32a445d
Merge wp/FU-4: Spine evidence pack gets the verified-figures block, n…
Oct 1, 2026
83c886a
Merge wp/FU-6: Market search tool: a timed-out snapshot is never 'ver…
Oct 1, 2026
69eaa76
feat(report): evidence-cited counter-case pass feeding Part 2 and dat…
Oct 1, 2026
64266fb
fix(report): address review round 1 [FU-5]
Oct 1, 2026
44d8f48
fix(research): address review round 1 [FU-2]
Oct 1, 2026
c0aad67
fix(eval): address review round 2 [EVAL-19]
Oct 1, 2026
c75e9b3
feat(research): declarative DERIVED findings with a hardened Decimal …
Oct 1, 2026
baba4a2
fix(report): address review round 1 [FU-3]
Oct 1, 2026
7ddd3a0
fix(report): address review round 1 [FU-9]
Oct 1, 2026
317fb0e
feat(report): shadow verified-figure check and figure_provenance.json…
Oct 1, 2026
98a56f7
Merge wp/TIME-12 into wp/TIME-13 (dependency, orchestrator)
Oct 1, 2026
5d25193
fix(safety): address review round 2 [FU-8]
Oct 1, 2026
d569178
Merge wp/FU-8: The fork safety pin governs interview graph feedback
Oct 1, 2026
1979b91
fix(research): the digest wall also withholds a question quoting a wi…
Oct 1, 2026
92b12fd
Merge wp/FU-1: Backfill keeps the binary_quality keys EVAL-10 added
Oct 1, 2026
a299224
fix(eval): address review round 1 [EVAL-16]
Oct 1, 2026
81e642d
fix(eval): address review round 2 [EVAL-20]
Oct 1, 2026
a8f29b5
fix(research): address review round 2 [FU-2]
Oct 1, 2026
2ded71c
fix(scripts): address review round 2 [FU-1]
Oct 1, 2026
5645f51
fix(eval): address review round 1 [EVAL-12]
Oct 1, 2026
96705be
Merge wp/FU-1 (review round 2 fixes): Backfill keeps the binary_quali…
Oct 1, 2026
caab1f7
Merge wp/FU-2: Strict point-in-time wall in the research digest (owne…
Oct 1, 2026
98ea680
fix(report): address review round 5 (default-path low) [REPORT-3]
Oct 1, 2026
07e0d79
Merge wp/REPORT-3: Alias-aware probability-slot audit (observe) + det…
Oct 1, 2026
e61abf5
Merge wp/REPORT-9: Shadow verified-figure check and figure_provenance…
Oct 1, 2026
a5436e7
fix(eval): address review round 1 [EVAL-14]
Oct 1, 2026
6f3ce7d
fix(research-gateway): address review round 2 [TIME-12]
Oct 1, 2026
2fcf7a9
Merge wp/TIME-12: Research gateway plumbing for official-data tools (…
Oct 1, 2026
5409373
Merge feat/finharness-transplants into wp/REPORT-13
Oct 1, 2026
b0f3387
fix(report): address review round 1 [REPORT-9]
Oct 1, 2026
4dfff2d
Merge wp/EVAL-19: P07 part 1/2: frozen evaluation bundle (in-pipeline…
Oct 1, 2026
bfb73a6
fix(eval): run the probe leak guard before reuse; recheck reused arms…
Oct 1, 2026
1978563
fix(eval): coarsen the recall window end, never certify unverified re…
Oct 1, 2026
5146c68
fix(infra): address review round 2 [INFRA-4]
Oct 1, 2026
307099b
Merge wp/INFRA-4: Non-finite number guards for LLM JSON and forecast …
Oct 1, 2026
5763e56
Merge branch 'feat/finharness-transplants' into wp/EVAL-20
Oct 1, 2026
b5e61cb
fix(report): support-check counter-case trigger markers, drop contrad…
Oct 1, 2026
c1ab38f
fix(eval): address review round 2 [EVAL-12]
Oct 1, 2026
a12d06d
Merge feat/finharness-transplants into wp/EVAL-14
Oct 1, 2026
2585df2
fix(report): address review round 1 [REPORT-13]
Oct 1, 2026
64be022
Merge wp/EVAL-16: P22 part 2/2: unknown/invalid tool-call counters + …
Oct 1, 2026
c0df28c
fix(eval): address review round 3 [EVAL-19]
Oct 1, 2026
2a82c55
fix(eval): cross-check unknown tool calls with INFRA-5 telemetry; kee…
Oct 1, 2026
196b3eb
Merge wp/EVAL-19 (review round 3 lows): frozen evaluation bundle
Oct 1, 2026
ac5e923
fix(eval): never read a zero KIQ tool-call sum over pre-counter recor…
Oct 1, 2026
bd1e5f7
fix(eval): address review round 2 [EVAL-16]
Oct 1, 2026
f0ef86a
Merge wp/EVAL-16 (review round 2 lows): tool-call counters + cross-ru…
Oct 1, 2026
1f33300
fix(eval): positional Chinese negation guard and linear range parsing…
Oct 1, 2026
b275c63
Merge feat/finharness-transplants into wp/TIME-13 (dependencies TIME-…
Oct 1, 2026
b667456
fix(eval): ladder float-noise snap, bound-only boundary, path directi…
Oct 1, 2026
c669f16
fix(research): address review round 1 [RESEARCH-8]
Oct 1, 2026
e27c67e
fix(report): address review round 2 lows [FU-9]
Oct 1, 2026
7638b2b
fix(eval): address review round 3 [EVAL-20]
Oct 1, 2026
070a8e2
fix(research): address review round 1 [RESEARCH-8]
Oct 1, 2026
8d60b28
Merge wp/FU-9: Contested-claims table keeps room for quantitative rec…
Oct 1, 2026
013f24d
fix(eval): address review round 2 [EVAL-14]
Oct 1, 2026
02310f2
fix(sim): address review round 1 [SIM-4]
Oct 1, 2026
b6339bd
fix(research): address review round 1 [RESEARCH-8]
Oct 1, 2026
08b2388
fix(eval): an unreadable --probe-report raises the documented ValueEr…
Oct 1, 2026
44e4963
fix(eval): address review round 3 [EVAL-20]
Oct 1, 2026
c4383e9
fix(eval): address review round 3 [EVAL-12]
Oct 1, 2026
5ceb225
fix(report): address review round 2 [REPORT-13]
Oct 1, 2026
bbd34b9
Merge branch 'feat/finharness-transplants' into wp/EVAL-14
Oct 1, 2026
8a22ae9
feat(research): official-data tool knobs, presets and v3 forwarding […
Oct 1, 2026
110ab5c
Merge feat/finharness-transplants into wp/FU-5
Oct 1, 2026
1978fb5
Merge branch 'feat/finharness-transplants' into wp/EVAL-20
Oct 1, 2026
4456540
fix(sim): address review round 2 lows [SIM-4]
Oct 1, 2026
ceefb64
fix(llm): model-reply JSON parsers never raise on oversized integers …
Oct 1, 2026
9c48935
Merge wp/SIM-4: zero-LLM prior-echo diagnostic for the decision chann…
Oct 1, 2026
0abbfbf
feat(research): bind the official-data tools in the v3 engine [TIME-13]
Oct 1, 2026
6c47fb7
fix(report): log wording names a pin-lookup failure too [FU-7]
Oct 1, 2026
1816486
Merge wp/FU-7: Hindcast-pinned runs ignore model-volunteered market a…
Oct 1, 2026
4a01eb9
test(research): data-call dispatch, budgets, cancel and the run's vin…
Oct 1, 2026
649623f
feat(research): official-data rows in sources.json, quantitative.json…
Oct 1, 2026
32b8110
fix(prepare): the pre-attribution view also strips range_kind [FU-10]
Oct 1, 2026
a6336cd
Merge feat/finharness-transplants into wp/RESEARCH-8
Oct 1, 2026
01c9234
Merge wp/FU-10: Prepare pack keeps previously matched rows at the cap
Oct 1, 2026
f593540
test(research): whole v3 runs with and without official-data tools [T…
Oct 1, 2026
1d316e6
fix(eval): address review round 3 [EVAL-14]
Oct 1, 2026
fd71f11
test(research): data rows in a gated hindcast, the run language and t…
Oct 1, 2026
0a61bac
fix(report): verified-figure check reads periods, table context and p…
Oct 1, 2026
163a535
Merge branch 'feat/finharness-transplants' into wp/REPORT-9
Oct 1, 2026
260e6b6
fix(report): address review round 2 [FU-5]
Oct 1, 2026
b0d712e
fix(eval): address review round 4 [EVAL-20]
Oct 1, 2026
e027d17
test(research): empty forwarded vendor knobs read as their defaults […
Oct 1, 2026
9b65135
Merge wp/EVAL-14: structured numeric targets for binaries and a thres…
Oct 1, 2026
57a4a17
fix(research): KiqAgent._ask binds AGENT_TOOLS on a stand-in agent [T…
Oct 1, 2026
4619693
Merge feat/finharness-transplants (01c9234) into wp/RESEARCH-8
Oct 1, 2026
407142b
Merge branch 'feat/finharness-transplants' into wp/EVAL-12
Oct 1, 2026
0b2c5f6
fix(report): address review round 2 [REPORT-9]
Oct 1, 2026
0f9939f
Merge branch 'feat/finharness-transplants' into wp/REPORT-9
Oct 1, 2026
0d559d0
Merge wp/EVAL-20: label-free block-movement study with an A/A noise f…
Oct 1, 2026
c6e1b60
Merge branch 'feat/finharness-transplants' into wp/REPORT-13
Oct 1, 2026
09fb419
fix(eval): address review round 4 [EVAL-12]
Oct 1, 2026
7060b6d
fix(research): address review round 2 [RESEARCH-8]
Oct 1, 2026
21e6e63
fix(report): reject a chance word next to a quantity, never cut throu…
Oct 1, 2026
004d01e
Merge wp/FU-5: Market cross-check labels a market whose window has ended
Oct 1, 2026
dc312eb
Merge branch 'feat/finharness-transplants' into wp/REPORT-9
Oct 1, 2026
8dad622
Merge branch 'feat/finharness-transplants' into wp/EVAL-12
Oct 1, 2026
4562b75
fix(llm): address review round 1 lows [FU-12]
Oct 1, 2026
5e5ac5c
Merge wp/FU-12: model-reply JSON parsers never raise on oversized int…
Oct 1, 2026
a5abeee
Merge branch 'feat/finharness-transplants' into wp/REPORT-9
Oct 1, 2026
b360b9e
fix(eval): address review round 5 [EVAL-12]
Oct 1, 2026
b3c6fd3
Merge wp/EVAL-12: contamination probes for the golden set
Oct 1, 2026
7aefce1
Merge branch 'feat/finharness-transplants' into wp/TIME-13
Oct 1, 2026
93ee143
fix(markets): address review round 1 lows [FU-11]
Oct 1, 2026
4557c60
Merge feat/finharness-transplants into wp/FU-11
Oct 1, 2026
86102ef
Merge wp/FU-11: Per-row market price observation time for anchors
Oct 1, 2026
3dd89af
fix(report): address review round 3 [REPORT-13]
Oct 1, 2026
f02601e
Merge branch 'feat/finharness-transplants' into wp/FU-3
Oct 1, 2026
3c36656
fix(research): address review round 1 [TIME-13]
Oct 1, 2026
13d0bbe
Merge wp/TIME-13: v3 engine integration of official-data tools (bindi…
Oct 1, 2026
220bb0c
Merge branch 'feat/finharness-transplants' into wp/EVAL-5
Oct 1, 2026
721033b
fix(report): linear scenario-slot regex, rel_tol docs, knob-off backf…
Oct 1, 2026
f57e0d6
fix(report): address review round 2 [FU-3]
Oct 1, 2026
fb99e72
Merge branch 'feat/finharness-transplants' into wp/REPORT-13
Oct 1, 2026
fef0cca
Merge feat/finharness-transplants (13d0bbe) into wp/RESEARCH-8
Oct 1, 2026
1934ee8
Merge branch 'feat/finharness-transplants' into wp/REPORT-9
Oct 1, 2026
df988d2
fix(report): address review round 3 [REPORT-9]
Oct 1, 2026
a64d798
Merge wp/REPORT-9 (review rounds 1-3): verified-figure check fixes
Oct 1, 2026
283eb1b
fix(research): a derived result is stated in its operands' unit class…
Oct 1, 2026
c3f5977
Merge feat/finharness-transplants (a64d798) into wp/RESEARCH-8
Oct 2, 2026
e298cad
test(eval): the eval-bundle contract test reads a later summary afres…
Oct 2, 2026
837a57a
Merge feat/finharness-transplants into wp/FU-3
Oct 2, 2026
7fdaa0c
Merge wp/FU-3: Hollow-run gating for plan_outline, the ReACT tools an…
Oct 2, 2026
93a7e4d
test(research): name the bases the flag-off pin was recomputed from […
Oct 2, 2026
99e29bf
Merge feat/finharness-transplants (7fdaa0c) into wp/RESEARCH-8
Oct 2, 2026
4734376
fix(research): address review round 3 [RESEARCH-8]
Oct 2, 2026
dc46b6b
Merge branch 'feat/finharness-transplants' into wp/EVAL-5
Oct 2, 2026
4baa9e6
fix(eval): count FU-11's 'observed' price time basis as dated [EVAL-5]
Oct 1, 2026
48d9552
fix(eval): one corrupt anchor never blanks the market-skill block [EV…
Oct 2, 2026
13e7d80
fix(eval): address review round 2 [EVAL-5]
Oct 2, 2026
2dc23ba
fix(report): drop over-length counter-case claims and triggers instea…
Oct 2, 2026
0219a65
test(report): a row per round-4 probability probe, hedged-evidence ro…
Oct 2, 2026
771704e
fix(report): address review round 4 [REPORT-13]
Oct 2, 2026
c785567
fix(eval): an admitted item without its target binary is target_missi…
Oct 2, 2026
dc89859
Merge wp/EVAL-5: Market-relative skill scorer: Brier skill vs the pri…
Oct 2, 2026
81a84e8
Merge feat/finharness-transplants into wp/REPORT-13
Oct 2, 2026
4f8dde6
fix(report): address review round 5 [REPORT-13]
Oct 2, 2026
3a91156
fix(report): address review round 6 [REPORT-13]
Oct 2, 2026
3ece577
Merge feat/finharness-transplants (dc89859) into wp/RESEARCH-8
Oct 2, 2026
6addbb2
fix(research): a result in its operands' unit is never a percentage, …
Oct 2, 2026
78b169c
fix(research): only a quotient of data operands reads as a percentage…
Oct 2, 2026
3ca573c
fix(research): a literal offset drops the operand unit; quant rows re…
Oct 2, 2026
286a9d6
fix(research): address review round 4 [RESEARCH-8]
Oct 2, 2026
44a4561
Merge wp/REPORT-13: Evidence-cited counter-case pass: one validated s…
Oct 2, 2026
83fd68c
Merge feat/finharness-transplants (44a4561) into wp/RESEARCH-8
Oct 2, 2026
d225ee4
fix(research): address review round 5 lows [RESEARCH-8]
Oct 2, 2026
e2f2f35
test(eval): EVAL-8's legacy-bytes pin strips EVAL-5's additive calibr…
Oct 2, 2026
a7ba053
Merge wp/RESEARCH-8: Declarative DERIVED findings: hardened Decimal e…
Oct 2, 2026
dbc4435
docs: finharness transplants in the architecture guide and the README…
Oct 2, 2026
d5923c1
docs: correct section 20 and README trust section against the merged …
Oct 2, 2026
58818ec
docs(research): finharness essence, implementation record and open is…
Oct 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
152 changes: 149 additions & 3 deletions .env.example

Large diffs are not rendered by default.

27 changes: 19 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ on:
branches: [main]
pull_request:

# INFRA-12: a newer push to the same ref supersedes the run in flight.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
lint-and-drift:
name: Lint + env-drift gate
Expand All @@ -21,21 +26,27 @@ jobs:
run: python3 backend/scripts/check_env_drift.py --strict

unit:
name: Offline unit/golden tests
name: Offline backend test suite (TZ=${{ matrix.tz || 'UTC' }})
runs-on: ubuntu-latest
# INFRA-12: run the suite twice, in UTC and in a negative-offset zone where the
# local date lags the UTC date, so naive local-time date logic shows up in CI.
strategy:
fail-fast: false
matrix:
tz: ['', 'America/New_York']
env:
TZ: ${{ matrix.tz }}
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Set up Python 3.12
run: uv python install 3.12
# Install only the light deps the offline tests need (pytest + python-dotenv);
# the full sim/graph stack is not required for the pure-function golden tests.
- name: Run telemetry/security/atomic/dates golden tests
run: |
uv venv --python 3.12
uv pip install pytest python-dotenv
cd backend && uv run pytest -q
# `uv run` syncs backend/.venv from backend/uv.lock (dev group included) before
# running; the markers, --strict-markers and the default `-m 'not integration'`
# come from [tool.pytest.ini_options] in backend/pyproject.toml.
- name: Run full offline backend suite (uv run syncs backend/.venv, then pytest)
run: cd backend && uv run pytest -q

byte-compile:
name: Byte-compile (syntax) all backend
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ logs/

# 本地临时产物(截图/PDF 抓取等)
/tmp/
# utils/atomic.py 原子写的同目录临时文件(进程被 SIGKILL 时可能残留);.env 的临时副本
# 含 API 密钥,绝不能被 `git add .` 提交
.tmp-*

# 上传文件(运行时数据:研究档案/模拟/报告)
backend/uploads/
Expand Down
213 changes: 213 additions & 0 deletions DRF_ARCHITECTURE.md

Large diffs are not rendered by default.

201 changes: 201 additions & 0 deletions LICENSES/Apache-2.0.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright [yyyy] [name of copyright owner]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
54 changes: 54 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
DeepResearchForecast
Third-party notices

This repository is licensed under the GNU Affero General Public License v3.0
(see LICENSE). It includes portions of third-party code under the licences
named below.

------------------------------------------------------------------------------
TradingAgents (Tauric Research)
https://github.com/TauricResearch/TradingAgents
Licensed under the Apache License, Version 2.0; a copy of the licence is in
LICENSES/Apache-2.0.txt (also at http://www.apache.org/licenses/LICENSE-2.0).

Adapted and modified from TradingAgents 0.5.1:

deerflow_bridge/data_tools.py
Portions adapted from tradingagents/dataflows/vendors/fred.py: the curated
FRED alias table with a descriptive phrase rejected before any API call,
and both realtime bounds of every FRED request pinned to the earlier of
the as-of date and the vendor's own date in America/Chicago. DRF modified
the alias set, the id validation, the date handling (dates compared as
date objects), the error classification, caching, rendering and
secrecy rules.
Portions adapted from tradingagents/dataflows/vendors/sec_edgar.py: the
as-filed reading of SEC EDGAR XBRL company facts (only facts filed on or
before the as-of date; tags tried in priority order, the first to report
a period owns it and values are never summed across tags; quarter and
fiscal-year span gates; a fiscal-year period must be reported by an
annual-report form while the latest filing of any form supplies its
value, so amendments and recasts count from their own filing date; no
fourth quarter derived) and its statement tag lists. DRF modified the date
handling (dates parsed and compared as date objects), the per-period
units, the accession tie-break, the fail-closed post-condition, the line
set, the identity rules, the error classification, caching, rendering
and provenance.

backend/tests/test_data_tools_edgar.py
Fixtures modelled on tests/test_sec_edgar.py: the Apple restatement,
filing-date, quarter/year-to-date, tag-fallback, twelve-month-total,
quarter-end-balance, recast and capital-expenditure cases.

Files marked "Idea credit: TradingAgents (Apache-2.0)" reimplement an idea in
DRF's own code; no TradingAgents code is copied into them.

Unless required by applicable law or agreed to in writing, software
distributed under the Apache License, Version 2.0 is distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied. See the License for the specific language governing permissions and
limitations under the License.

------------------------------------------------------------------------------
FinanceHarness and StockAgent

Ideas only: no code from either project is copied into this repository.
28 changes: 27 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1094,7 +1094,7 @@ flowchart LR

## Trust and quality guarantees

The pipeline is built so that a finished run means something. Most of the weight rests on four mechanisms.
The pipeline is built so that a finished run means something. Most of the weight rests on the mechanisms below.

### 1. The actor-realism chain

Expand Down Expand Up @@ -1187,6 +1187,32 @@ With `REPORT_PUBLISH_GATE=true` (the default), *epistemic* problems also block p
- **Citations.** `[S#]` markers are positional into `sources.json`; an agent can cite only sources it was shown, and research lint never deletes, invents or truncates a marker.
- **Honest degradation.** Template plans, deterministic fallback sections, cut replies and failed extractions are listed in `research_quality.degradation`, and a run with no model output or no sourced evidence exits with a resumable failure instead of publishing.

### 6. Time, settlement and evaluation integrity

These guarantees come from the finharness transplant program. Its research record is in [docs/research/2026-09-29-finharness-essence.md](docs/research/2026-09-29-finharness-essence.md), and [DRF_ARCHITECTURE.md §20](DRF_ARCHITECTURE.md#20-finharness-transplants-branch-featfinharness-transplants) shows where each mechanism lives.

- **Hindcasts see only the past.** A run with an `as_of` date is admitted only when `HINDCAST_ENABLED=true` and the v3 research engine is used.
- The run pins its hindcast policy, so forks inherit it and never re-capture it.
- Live prediction-market odds are switched off for the research child.
- A point-in-time gate decides which sources are admissible. Inadmissible sources stay uncitable, and the verdict is reported in `forecast.json['hindcast']`.
- FRED/ALFRED series and SEC EDGAR facts are read as of the pinned date.
- **Probabilities are parsed, never guessed.** An unreadable probability becomes `needs_review`; it is never coerced to 0 or to a uniform split. When a probability changes, the stale numbers in the narrative are refreshed deterministically.
- **Markets are dated.** A market past its end date never anchors a forecast or seeds a simulation prior. Every anchor records the time of the price it used.
- **Published figures are checked.** Research verification labels reach the report as a labelled verified-figures block. A shadow check compares the published figures with the verified rows and writes `figure_provenance.json`.
- **The ledger records what was published.** A forecast is committed to the ledger only after publication, sealed and idempotently. Settlement is deterministic, and a manual settlement can be superseded or retracted, never edited in place.
- **Evaluation is measured, not assumed.** Every run writes a per-stage scorecard and a cost card with a config fingerprint (on by default; `scripts/stage_scorecard.py` and `scripts/cost_card.py` backfill older runs). The other evaluation tools run offline:
- a golden set with small-sample statistics;
- contamination probes (off until `GOLDEN_PROBE_ENABLED=true` or `--live`);
- a market-relative skill scorer in the resolution monitor;
- a label-free value-add study that compares each block against an A/A noise floor (off until `VALUE_ADD_EVAL_ENABLED=true` or `--live`).
- **The configuration is audited.** With `CONFIG_STRICT_VALIDATION=true`, a pipeline run is refused while the environment holds a value `Config` would misread or reject:
- a non-canonical boolean (most knobs still read `X=1` as false);
- an unparseable or out-of-range number;
- an unknown enum value;
- a contradictory pair of knobs.

The server still starts and prints these issues as warnings.

---

## Requirements
Expand Down
Loading
Loading