Skip to content
This repository was archived by the owner on Aug 8, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 64 additions & 2 deletions docs/handoffs/2026-08-05-forced-flow-mechanism-test.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Handoff: pre-registration for the forced-flow mechanism test, to be executed by a cold session

**Status:** open
**Status:** complete (executed 2026-08-06 in `npf`, PR #79). Verdict a **marginal lean**, see §8.

Written 2026-08-05, before computing any statistic below.

Expand Down Expand Up @@ -342,4 +342,66 @@ copy: `2026-08-03-index-share.md` records what two lineages of one document cost

## 8. Outcome

*To be appended by the executing session. Leave `Status: open` until then.*
**Executed 2026-08-06 in `npf`**, by a session that has written none of this package. Verdict
and every number: `npf/docs/crowdmon/2026-08-06-forced-flow-mechanism-verdict.md`, reproducer
beside it. A pointer and a one-line result, never a copy.

**§5.6's criteria return `supported` on both report types, and the headline should not be
quoted on its own.** §5.3's own placebo carries **73.8%** (Disaggregated) and **51.9%** (TFF) of
the effect and is itself significant, where §5.3 says it "should be near zero if the crossing is
what matters rather than the group label". Removing the label leaves a real but small residual:
a difference-in-differences of **-0.001388 (p 0.047)** and **-0.002657 (p 0.0099)**, roughly
1.2% and 1.9% of the pool against headline figures of 4.5% and 4.0%. Disaggregated would not
survive a correction across even the two report types. **A marginal lean, not a clean
confirmation.**

§3.1's equivalence check reproduced **exactly**, 2.220446049250313e-16 over 96 comparisons
rather than the required 12, all 96 signals matching. Store pinned per §5.9: 267 parquets,
**zero moved during the run**, byte copy at
`~/code/cotdata_store_snapshots/2026-08-06-forced-flow-mechanism`.

**Four places this specification was wrong or unexecutable, each with the measurement that
shows it.** They are recorded here rather than corrected above, because the body is the record
of what was actually asked.

- **§5.6 has no placebo condition, and that is the gap the run found.** §5.3 pre-registers the
expectation and attaches no criterion, so the criteria can be satisfied, and here are
satisfied, by an effect that is mostly the group label. Anything re-running this should fix
that first; the difference-in-differences is the shape the fix should take.
- **§4's control cannot be read from the panel, and §3 already says why.** §4 says the control
"is already in the panel"; §3's own table measures `trigger_*_pool_agrees` at 39 rows over one
week, because `add_trigger_distance` is a point-in-time overlay. §3 is the correct one. The
control was recomputed over all 1,051 weeks from published `pool_net` plus `propadj`, along
§3.1's vectorisation. Worth carrying: **`pool_agrees` reduces to the SIGN of `pool_net` and
does not depend on the lookback at all**, which is what makes the placebo indispensable rather
than a courtesy.
- **§4's central design claim is false as measured.** "The two groups share the price mechanics
exactly and differ only in whether a forceable holder is present": the contradicted group
crosses **more often** in both report types, 25.60% against 20.11% (Disaggregated) and 24.20%
against 21.80% (TFF), because agreement selects weeks whose trend is less likely to reverse
inside five sessions.
- **§5.5's p-value cannot be computed as written.** A bootstrap resampling the observed data is
centred on the observed statistic, so "the fraction of draws at least as negative as observed"
is ~0.5 whatever is true. Measured, it is: `p_literal` runs 0.465 to 0.526 across all six
variants, including those whose recentred `p_null` is 0.0000. Both are reported; the criteria
use the recentred one. Precedent for recording rather than silently applying: §7.7 of
[`2026-08-02-validation-prereg.md`](2026-08-02-validation-prereg.md).

**Variant count: 8, not §5.8's 6**, and §5.8 requires saying so. The two additions are the
difference-in-differences, one per report type. Also added and carrying no statistic: a per-side
descriptive table, and the equivalence check widened from 1 symbol to 8 (its reported figure is
a maximum, so widening can only tighten the gate).

**One declared deviation from §6.** The equivalence check runs in **crowdmon's own venv** rather
than installing crowdmon into `npf/.venv`. That venv is shared by the main checkout and every
worktree, and installing into it changes what a concurrent session imports for the duration of a
run that does not need it. §6 is setup guidance rather than a threshold, statistic, universe or
criterion, so nothing frozen by §2 moved, and §6's own text says no crowdmon computation is
needed for Stages A and B. The phantom-package check §6 asks for is asserted in code before
anything is computed.

**§7's premise about where this lives has since changed, and the file stays here anyway.** §7
says it lives here because "`npf` has no equivalent" register. `npf` grew one on 2026-08-06 and
its companion, `2026-08-05-fragility-orthogonality.md`, moved there. This one does not move: it
is tracked here, it has now been executed and closed here, and moving a closed handoff would buy
nothing and cost a second lineage of one document.
2 changes: 1 addition & 1 deletion docs/handoffs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ A moved handoff leaves a **pointer row and no copy**. One document, one lineage.
| [2026-08-02-template-followups.md](2026-08-02-template-followups.md) | **COMPLETE.** Five measurements and two doc corrections, `2026-08-02 §B33-§B37`. Its §3 hypothesis is **retired**: swap share does not predict template status, at any aggregation. Two of its own premises were corrected in place: the §1 dichotomy is not exhaustive (the fund is half the weeks and **two thirds of the contracts**), and the "median 0.993, no asymmetry" reading it inherited from `§B31` is direction cancelling. §A.2 now works a **real** market, live cattle, pinned by `tests/test_appendix_live.py`. Contract master deliberately **not** started. Executed 2026-08-02 on `claude/template-followups-doc-corrections-45de1d` and **never pushed**, which is what `2026-08-03-b-series-recovery.md` §1 recovered and §2 landed |
| [2026-08-03-index-share.md](2026-08-03-index-share.md) | **COMPLETE as far as it can go, 2026-08-03.** The only handoff here authored in another repo (cotdata#97, moved here as PR #36; a second session filed a duplicate copy before checking the remote, which is what the claim-first convention below exists to stop). §1: **the premise is retired, exactly as §4 anticipated.** Index positioning is not meaningfully stickier than swap. Swap is the MORE persistent at 12 weeks (median 0.826 vs 0.777, index ahead in only 4 of 13), index is 14% steadier week to week, and **under the worst 5% of weeks the swap book moves less than the index book** (-0.00167 vs -0.00336), adding to net long in 3 of 13 where index never does. §2 was recorded as blocked on **§B33-B36**, and re-derived blind as **`2026-08-03 §C1-C4`**. **Both readings are now corrected** (`2026-08-03-b-series-recovery.md` §2, and this file's appended §7): §B33-B37 **existed all along**, on an unpushed branch, so 08-02 closed at **B37** rather than B32 and §2 was in fact executable in full a day before it was called blocked. The cited figures were **not invented**: "22 of 39" and "17 in both halves" reproduce exactly. Of §2's three headline figures one **cannot respond to `w_SD`** (the shape rule reads two nets and their signs), one (`A_agnostic`) is **defined by `§B34` at a median of 3.0237**, not undefined as §C4 first read it, and `Q_sell`/`Q_buy` answers: median `A` swings **42.0% on the 13 Supplemental markets** against 0.6% pooled, so **`w_SD` is load-bearing exactly where the handoff cares**. Unsought finding: swap sits at 0.305 of Managed Money on routine turnover and 0.067 under stress, so `swap: 0.4` is incoherent **between regimes, not between markets**. **Metals are permanently outside coverage, so most of §0 is still open.** Weight table unchanged |
| [2026-08-03-swap-dealer-weight-decision.md](2026-08-03-swap-dealer-weight-decision.md) | **COMPLETE 2026-08-03 (PR #44), decided by the human as option (a): `swap: 0.4` stands.** Its §4 released exactly one piece of work and that work **corrected the handoff's own §1**: `single_weight_sweep` shipped, and re-swept over the order-preserving band it showed §1's 42.0% was the wrong BAND rather than wrong arithmetic. Honest figures **17.9% on the 13 Supplemental markets, 3.5% pooled** over `w_SD ∈ [0.2, 0.4]` (`§C10`). **Decided in parallel with `§C6-C8`, which landed as PR #43 while this was in flight and reached the same place by a different road**: §C6 closed option **(c)** by settling static weights independently, §C7 measured the cost of (a) as a **+19.6% median `Phi` inflation, worst on gold at +27.8% (2.30x cocoa) and precisely during stress weeks**, and §C8 showed most of that never reaches `D`, because the composite consumes a percentile and the median market-week moves only 5.9 of them. **§C8's split is the operating rule: on classic outrights the band is a footnote (Spearman 0.954, 18 of 20 top markets in common); on the ERCOT and PJM book it can invert a market's own history (Transco Zone 6 at -0.416), so publish the band there.** Two independent measurements, one decision, and no re-litigation. Option (c) is unscheduled rather than closed; metals remain permanently outside coverage |
| [2026-08-05-forced-flow-mechanism-test.md](2026-08-05-forced-flow-mechanism-test.md) | **OPEN, unclaimed.** Pre-registration for the forced-flow mechanism test: when the trigger says a pool is forced out at `F*` and price reaches `F*`, does that pool actually move? Not §10 again and reuses none of its spent episodes, being weekly and differential rather than episode-based. The control is `trigger_*_pool_agrees == False`, where the price level is real and the book is not there. Two measured contributions before freezing: the panel already carries **1,051 weeks** back to 2006 (only `trigger_*` is one week), and the full trigger history is vectorisable from **one price read per symbol** because `unadj` cancels out of `move_from_spot`, verified at 2.22e-16 against `trigger_prices`, so the docstring's ~95,000 reads are avoidable. Stage A is PIT-clean by construction; Stage B is a mechanism claim on revised values, and any real-time-actionable reading **voids the verdict**. Runs in `npf` by a cold session |
| [2026-08-05-forced-flow-mechanism-test.md](2026-08-05-forced-flow-mechanism-test.md) | **COMPLETE, executed 2026-08-06 in `npf` (PR #79). Verdict a MARGINAL LEAN, and §5.6's `supported` must not be quoted on its own.** When the trigger says a pool is forced out at `F*` and price reaches `F*`, does that pool move? The criteria pass on both report types, but **§5.3's own placebo carries 73.8% (Disaggregated) and 51.9% (TFF) of the effect** where §5.3 says it should be near zero, because the group label **is** the sign of `pool_net` and `pool_net` mean-reverts. Removing the label leaves **-0.001388 (p 0.047)** and **-0.002657 (p 0.0099)**, about 1.2% and 1.9% of the pool against headline figures of 4.5% and 4.0%; Disaggregated would not survive a correction across even the two report types. **The gap is the finding: §5.6 attaches no criterion to the placebo**, so the design as written cannot separate forced flow from positioning mean reversion, and a re-run should fix that first. Three more corrections in §8: §4's control is **not** readable from the panel (39 rows, one week, as §3 itself measures) and was recomputed over all 1,051 weeks, `pool_agrees` reducing to the SIGN of `pool_net` with **no lookback dependence**; §4's "the two groups share the price mechanics exactly" is **false as measured**, the contradicted group crossing more often in both types (25.60% vs 20.11%, 24.20% vs 21.80%); and §5.5's p-value **cannot be computed as written**, a self-centred bootstrap giving `p_literal` 0.465-0.526 across all six variants including those with `p_null` 0.0000. §3.1's equivalence reproduced exactly at 2.220446049250313e-16 over 96 comparisons. Count **8 variants, not 6**. Verdict: `npf/docs/crowdmon/2026-08-06-forced-flow-mechanism-verdict.md` |
| **2026-08-05-fragility-orthogonality.md** — **MOVED to `npf/docs/handoffs/`, 2026-08-05, before execution.** Authored here and relocated the same day, which its own §7 named as conditional on `npf` growing a status register. It is **npf-owned work** (a question about npf's book) and `crowdmon` must not be read as commissioning strategy research. **No copy is kept here**, deliberately: `2026-08-03-index-share.md` records what two lineages of one file cost, and a pointer from the first day is the remedy this repo's `CLAUDE.md` states. Its cross-repo citations were qualified on the move and the change is recorded in its own §0; no threshold, statistic or criterion moved. Status is tracked **there**, not here | **MOVED** |
| [2026-08-03-b-series-recovery.md](2026-08-03-b-series-recovery.md) | **COMPLETE, outcome as §7 and §8.** §1 recovered `claude/template-followups-doc-corrections-45de1d` (`11b7c81`), local-only with 2,070 insertions, by pushing it unaltered. §2 landed its content on `main` by **porting rather than merging** (the branch predates six merges and would have reverted `flow.py`, `check_skips.py`, `conftest.py` and the whole 08-03 lineage), so **that branch should be CLOSED unmerged**. `amendments-2026-08-02.md` is now B1-**B37**: it never closed at B32, it closed on a branch nobody could see. **§C4 is superseded**, having read `A_agnostic` as WEIGHT-agnostic where `§B34` defines it as DIRECTION-agnostic at a median of **3.0237**; corrected in place with both readings pinned. The cocoa split point is **resolved**: same date, 2025-10-21, differing only on which half that week falls in, and every other figure identical under both rules. §3 changed the citation convention to **path plus reproducer** and made the bare form fail loudly (`tests/test_references.py` over 368 references in 42 files; one unresolved at the time, `§C5`, recorded rather than deleted and then forced out by its own guard when #42 merged). §4 ran the band `w_SD ∈ {0.067, 0.2, 0.4, 0.7}` under a **settled static-weights decision** and filed `2026-08-03 §C6-C8`: `w_SD = 0.4` overstates fragile capital on 99.31% of market-weeks by a median +19.6%, **gold at +27.8% is 2.30x cocoa at +12.1% so the prediction holds**, and 0.067 moves the ceiling 10.0 to 14.925 so the band is not on one scale. Most of it never reaches the composite, which consumes `pct(Phi)`, except on **98 of 264 markets** where the two tables reorder a market's own weeks. **Weight table unchanged** |

Expand Down
Loading