Pre-Publication Review — October 2, 2026
An independent, adversarial read of the first draft of research/20 against the saved primary files, by a separate agent instructed to find what is wrong before publication (L11 rule 9). Committed unedited. Every finding was checked by the operator; the fixes are listed in research/20 §11.
I would not publish research/20 as written. The $275 ±65 number itself is defensible (it sits mid-spread of honest anchors, $262–$308), but the seller section's discounts and one parity note repeat errors the Sep 19 reviews already flagged.
Findings
1. HIGH: the old-crop discount (~5–10%) is the wrong product, and a same-report counterexample was left out. (§8.3)
- The "like-for-like pair" (SE Good 3x4 $180 on Sep 19, 2024, then $165 old crop on Jan 8, 2025) is not like-for-like. The ledger rows are four months apart. "Old crop" on Jan 8 is just the calendar-year flip, so the pair mixes crop age with season and a falling 2024–25 market.
- It also does not measure hay through a second summer, which is the seller's case (2025 hay sold Oct 2026). That breaks L11(7).
- The same ledger shows Good 3x4 old crop at $180 on Feb 27, 2025. That would give a 0% discount, so the −8% depends on which row you pick.
- The KS Sep 15 report has a true same-report pair: SE KS Fair/Good 3x4, 450 t at $200 (no crop age printed) vs 150 t Old Crop at $125 (
ams_2885_2026-09-15.txt, Southeast section). That is about −37%. - The text says "no trade of untested carryover printed." True, but an old-crop large-square trade did print, and it isn't cited.
- Fix: cite the KS $125 lot. Label crop-age evidence as heterogeneous: n=1 same-report at −37%, cross-season pairs from 0% to −8%. Widen the "Fair or weathered" and "untested carryover" ranges, or drop the percentage.
2. HIGH: banned floor language is back in the parity table. data/current/market_parity.csv, last row (also in scripts/market_parity.py): "a Fair weedy lot at $250 says local Good/Premium is not below ~$250."
- One 25-t new-crop lot can't set a floor.
- The same table lands OK G/P at $211, and the report itself says $180 "is not under every trade."
- This file is archived each run.
- Fix: delete the sentence.
3. HIGH: the hold-vs-sell arithmetic mixes two price levels. (§8.4)
- Break-even ($260 + $10) ÷ 0.97 = $278.35 is correct.
- But it is compared with the $280 G/P grid January mid, while $260 is the seller's net.
- On the same basis, January nets about $265 (260 + 280 − 275). Expected gain is then about −$13/t, not "≈ $0".
- The conclusion (don't hold) gets stronger. The stated number is still wrong.
4. MEDIUM: the WY 1,600-t "same deal" treatment is contradicted by AMS volume, and it is applied unevenly.
- Summing the Oct 1 per-ton hay lines gives exactly the printed "This Week" volume of 3,085 t, and that includes the 1,600 t. Sep 17 also counted it. So AMS reports it as a confirmed trade in both weeks.
- The narrative ("sold earlier in the year and just now getting delivered") supports a delivery repeat, but that is inference.
- The method is inconsistent: rolling counts it once, while "New reports only (Sep 24–Oct 1) $292" includes it. Without it that row is $307.50 (1,200 t).
- Fix: apply one rule. Report the cross-check spread as $262–$308, not "$271–$292".
5. MEDIUM: the +$4 is justified by picking only the checks above the anchor. forecast_adjustments.json says "cross-checks all above the anchor."
- Checks at or below it are left out:
- the 19-lot rolling set = $271.4
- latest-per-state, Good-or-better = $267.9 ($261.9 without the WY repeat)
- the 15-lot rolling set excluding FOB-dairy/stables lines = $270.1
- The anchor is fragile. Without the OK $170 lot it is $299.6; without both OK lots, $307.5.
- Under L11(2) as written (≥500-t lots in NE CO/WY/W NE/KS), I get about $278 (rolling) and $282 (latest-per-state).
- The doc never says which rule governs: L11(2) or research/18's "all ≥100 t". It must.
- Fix: call $275 rounding inside a $262–$308 spread, not a +$4 judgment backed by selected checks.
6. MEDIUM: the 0.87 Fair/(G/P) ratio is not same-product (L11). Nov 3, 2022 ledger:
- Fair 3x4, 57 t, $260, FOB-Farm/Ranch, 2nd cut, vs G/P 3x4, 50 t, $300, FOB-Feedlot/dairy, 4th cut.
- Different basis and cutting, n=1. The "~$287" check should be dropped or labeled heterogeneous.
7. MEDIUM: the weather-damage discount evidence is weak and partly off-topic. (§8.1)
- The Aug 28, 2025 pair (Fair "Bleached" 1st cut $125 vs G/P 2nd cut $140, 25 t each) also differs in cutting.
- The second item ("Fair weedy $250 vs our $275 estimate, ~9%") compares a trade with our own estimate. Weeds are not weather damage.
- The Sep 24 $250 lot is new-crop 3rd cut, so calling it "the closest thing to the seller's product" is overstated. The KS old-crop lot is closer on crop age.
8. MEDIUM: the report breaks L10 while saying it obeys it.
- §1 says weather can't be turned into a price move. §5 says the net effect is "two-sided."
- The Nov–Jan grid then applies a one-sided cut driven by rain (+6% → +2%, about −$11).
- It is logged as DISCRETIONARY, which the amended policy allows. The prose should admit it is a weather-driven midpoint move, not "only trims."
9. MEDIUM: the comp-set grade filter is hidden.
- §4's rule ("conventional alfalfa, completed per-ton trade, large squares, ≥100 t, origin") never says Fair/Good is excluded.
- That filter silently drops 12 KS Fair/Good square lots (4,260 t, wa $202.8).
- Figure 08's title, "Large alfalfa trades near Colorado," implies the full market. Only the footnote says Fair/Good was dropped. The "19 regional sales" claim has the same gap.
comp_set.pyalso does not parse crop age, so old-crop lots can't be flagged.- Fix: state the grade filter, and show Fair/Good as a separate band in the figure, since the seller may grade Fair.
10. MEDIUM: the state-row floor is out of date.
calibration_floors.jsonseedsstate_price_usd_tonat "~2x the worst measured state-row error ($14)."- #19 (KS alfalfa, a NASS state row) just missed its point by $28. By the floor's own rationale, the floor is about $56.
- #40–42 at ±$30 are under that.
- Fix: ratchet the floor, or record why not.
11. MEDIUM: the grading prose overclaims.
- "August state prices came in at our points" is false for KS (point $155, actual $127).
- "Judgment won on Colorado" is measured against June persistence. July persistence (225/222/126), available before the release, has MAE $6.7, better than judgment's $9.7.
- The Sep 19 review raised exactly this distinction.
12. MEDIUM: the futures numbers aren't in the saved files.
- §6 says Class III Oct $15.13 / Nov $15.96 / Dec $16.30, Dec corn $5.02¼, feeders $338.88, live cattle $219.30.
- The saved
macro/yahoo_*.jsonfiles (timestamp Oct 2, 14:21 UTC) say 15.08 / 15.80 / 16.22, 499.75, 335.425, 218.6. - Save the source behind the doc's values, or use the saved values.
13. MEDIUM: new predictions #43 and #46 are close to free hits.
- #43: NO at a stated ~93% base rate, in Cluster A.
- #46: weekly Niño-3.4 +3.2 ±1.3 over 6 weeks; a 1.3°C weekly move is very rare.
- #45 (Bent D1 ≤10% after 3–4.5" of rain plus a "removal" drought outlook) is likely too.
- Their specs are clear and gradeable, and the ranges meet the floors. But they pad cluster counts. Flag them as low-information, or report scores without them.
- #45's spec says "statisticsType=1 percent area." The saved JSON (
statisticFormatID1, fieldd1) fits that, but name the exact endpoint path.
14. LOW: smaller numeric errors.
- "Rolling G/P + Good only: 12 lots" is 13 lots (7,090 t and $275.6 are correct).
- "KS: 39 large-square lines" is 35 alfalfa large-square trade lines.
- "Placements lowest August since 1996": NASS says lowest since the series began in 1996.
- §1 "Sep 4.50" … "then 3.13" on Sep 30–Oct 1" reads as extra rain, but Sep 30's 2.17" is inside the 4.50.
15. LOW: canal-record wording. The CDSS "Total" placeholder also covers Sep 7–9 (33.8 cfs repeated), not only Sep 11–Oct 2. The monthly 26,445 AF uses those placeholder dailies, so "two methods agree" is partly luck.
16. LOW: dangling references. research/21-confidence-review-2026-10-02.md and OctoberHayReport.md/.html don't exist, but §1 and §10 point readers to them.
17. LOW: figure 08 subtitle. "Priced at the farm" should say "at origin (FOB)". Most lines are bare F.O.B., and the x-axis already says origin.
Checked and correct
- NASS August table: CO 235/231, KS 127, and every other state value and change; July not revised.
- #17–19 grading: graded per their frozen specs.
- #28: MISS is correct per its spec (any tonnage, FOB-farm). It is categorical, so it doesn't enter the X of Y count.
- Scorecard: 9 of 19 (+2 NEAR) matches
scorecard.py. - Grid: bands meet floors (±65 ≥ 21.7% of every mid). The DISCRETIONARY entries are logged for every month.
- Comp-set reproduction:
comp_set.pyreproduces $269.8 on 1,840 t. Its parse of the new files matches the PDFs (regions, bases, millet exclusion, rounds excluded). - Rain: Lamar AP Jul 3.18 / Aug 4.47 / Sep 4.50 / Sep 30 2.17 / Oct 1 0.96. July is now confirmed by the monthly ACIS file too.
- Canal: FLCC telemetry dry Sep 7–9 and 11–20, 405 cfs Oct 1, Jun–Sep 25,969 AF.
- Drought: Bent D1 47.98 / D2 0 (Sep 29), D2 61.01 (Sep 8). All seven state DSCIs match; OK 92.4% D2+, 24.4% D4.
- Other: John Martin 22,978 AF, pasture ratings, diesel $6.529 and Rocky Mountain $6.407 (series high), fertilizer PPI −9.6%.
Verdict
The $275 can stand as a LOW-confidence judgment, publishable after fixes. Describe it as "about $270–280; honest anchors run $262–$308 depending on how the OK $170 lot and the WY repeat are treated." The ±$65 band covers that spread.
Don't publish yet. First:
- fix the seller section (#1, #3, #6, #7)
- delete the parity floor sentence (#2)
- make the "four checks" consistent (#4, #5)
- correct the grading prose (#11)
The only honest confidence label is LOW (L9): about 2 resolved comparable local outcomes and 47% coverage.