Conversation
--html-dir given as a relative path crashed filepath.relative_to(BASE_DIR) (BASE_DIR is absolute), silently producing an empty prices CSV. Resolve the path first and fall back to the raw string. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 13-recent-manifest.py: select recent-window snapshots (>=2 quarters, anchored 2024Q3, >=1 snapshot in trailing 12mo), 7 categories. - 14-recent-ipi.py: matched-model index (Jevons elementary per category, review-weighted geometric composite), quarterly + monthly, trailing-12mo headline. - run-recent-pipeline.sh: idempotent driver (download retry -> extract -> build). - gitignore: exclude html-recent/ raw HTML (22GB) and transient .out logs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
15,150/15,309 snapshots (99%), 100% price extraction across 7 categories. Composite IPI flat over the past year (2025Q1->2026Q1: -0.3%); video -11.6%, coding -6.8%, writing -6.6%, design +2.1%. Includes per-category indices and volume-proxy weights for client-side recompute. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- code/15-build-site-data.py: reuse step 14's monthly build to emit per-category monthly index -> site/data.json (2.2 KB, trailing 12mo, rebased to window-start=100). - site/index.html + site/ipi.js: category checklist drives live in-browser composite recompute (matches pipeline's exp(Sum w.ln/Sum w)). - Verified: client recompute over all categories reproduces composite_all. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Page wasn't working and the user is building their own site. Removed site/index.html, site/ipi.js, scripts/deploy-site.sh and deleted the gh-pages branch. Kept code/15-build-site-data.py + site/data.json as the data layer for the user's own frontend. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rebuilt CSRankings-style site now hand-rolls the trend chart and sparklines as inline SVG — no Plotly/CDN. Validated: JS syntax OK, data.json contract complete, client composite reproduces composite_all (headline -2.1% trailing 12mo). Adds deploy-site.sh redeploy helper. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ting Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Serve the IPI frontend from /docs (branch mode) instead of the site/ subfolder, which Pages branch mode cannot serve. Drop the Actions workflow; update the data-build script output path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Self-contained faq.html (no external libs): explains the purpose of the index and documents the exact formulas — price relatives, chained Jevons category index, weighted-geometric-mean composite, headline 12mo change, and review-based weights — with CSS-rendered math. Cross-linked from the main index header. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Polished, still fully self-contained (no external libs/CDN): Inter/system font stack, soft canvas with white rounded cards + subtle shadows, indigo accent, inline-SVG logo + favicon, pill basket toggles, refined table and tooltip, responsive tweaks. FAQ restyled to match (TOC card, paper card, boxed formulas). All JS hooks and the data contract are unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ection - index.html: add full-sentence IPI definition directly beneath the page title - index.html: lay out trend chart (left) and category-selection table (right) side by side via CSS grid, collapsing to stacked below 900px; widen wrap - faq.html: matching aesthetic refresh Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ipi.js: significantMoves() flags MoM moves past 0.8% plus the biggest rise/drop; drawChart overlays a green/red segment + labeled % on the composite line, recomputed live as categories are toggled - index.html: legend caption under the chart (green=rise, red=drop) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…note under chart - #qpick2 now shares #qpick's rounded styling (was rendering with sharp default corners) - move the "Prices validated" note directly under the fixed-effects chart, above its dropdown Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Replace the paragraph subtitle with bullets: what the chart is, the shaded 95% CI band, and a professional data+method validation point. - Remove the standalone "Prices validated" box; its facts merged into the validation bullet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
New standalone docs/gallery.html + docs/gallery.js: one card per category with its fixed-effects price-index trend (95% CI band) and a featured real gig's package-price history from freelancers.json. Featured-gig picker prefers on-topic gigs (per-category keyword relevance) over longer but cross-tagged ones, then richest price history. Cards ordered by size of the '20-'26 move. Adds a Gallery link to the index and FAQ header nav. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Standalone markdown recap of recent site changes (gallery, confidence bands, extraction validation, header/chart polish) and the time-product-dummy fixed-effects index that corrects for irregular Wayback sampling across gigs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a "Correcting for irregular sampling" step to the "How is the index calculated?" FAQ, with the two-gig logo example: frequently-captured gigs reveal the price path's shape, so each rarely-captured gig's change is spread across the correct quarters instead of piled into the reappearance quarter. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 2026-07-15 decision dropped fixed effects in favour of GEKS-Jevons, but only the data side had been done: 18-build-site-data-long.py emitted index_geks/composite_geks/*_geks_se and the rebuilt data.json no longer carried the index_tpd block, while ipi.js and gallery.js still read DATA.index_tpd. The second home-page chart was returning early on the missing key and the gallery had fallen back to the drifting chained series. This finishes the rewire. - rename the data contract in ipi.js, gallery.js, index.html and gallery.html (index_tpd* -> index_geks*, composite_tpd*, delta_tpd, drawChartTPD, #tpdDelta); no tpd references remain under docs/ - replace the user-facing "fixed effects" copy: chart title, the three bullets (pairwise comparison over all routes, bootstrap CI, PriceIndexCalc validation), tooltip, gallery badge/caption/footer - rewrite FAQ Step 5 around chain drift, the bilateral Jevons formula and GEKS transitivity, in place of the alpha/delta regression - rewrite method 3.4: the estimator with both equations, sample construction and 2020Q1 window rationale, TPD reframed as the imputation alternative, dump-price bias tested rather than assumed, and the reference validation; five new CITE placeholders - add code/21-geks-index.py and its four output CSVs - update tests/method.test.md (R1 rewritten, R2/R3/R4/R7 added, R5/R8 FAIL, R6 BLOCKED, U2/U3 recorded) and progress.md Known open items, recorded in the tests rather than fixed here: translation coverage (15% of quarter pairs have zero overlap, +/-26% band), the MIN_MATCH=3 sensitivity check, and the 2019Q1-vs-2020Q1 base period inconsistency in the composite paragraph. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ies shown The headline chart was still DATA.index, the chained-Jevons series the project replaced on 2026-07-15. It reads design 2020Q1->2026Q1 as 100 -> 304 against 134 for the GEKS-Jevons chart directly beneath it. Direct matched-pair Jevons (no chaining, no multilateral correction) corroborates GEKS in every category — design 154 vs 147 GEKS vs 318 chained at 2024Q3 — and on 2024Q3->2026Q1, where coverage is thick, 299-570 matched design gigs give 94-100. Chained runs 1.6-2.7x high throughout. - collapse the two chart cards into one; the GEKS series keeps the confidence band, the sharpest-QoQ-move highlights and the quarter inspector - remove drawChartGEKS, pinnedFx, pinQuarterFx, renderInspectorFx and the #chart2/#tip2/#qpick2/#qreadout2/#qclear2 markup and CSS - move the Delta '20-'26 column and its sort key from delta12 to delta_geks (design +204.1% -> +34.1%) and the row sparklines to index_geks - drop gallery.js's silent DATA.index/delta12 fallbacks - add a hero bullet explaining why a chained index is not used data.json still carries index/delta12/composite_all for the paper's method comparison; they are simply no longer plotted. Also logs TD1: code/12-panel-ipi.py keys within-gig relatives by destination quarter alone, so a gig's multi-quarter change is applied as a single-quarter change on top of growth already chained in from gigs observed in between (22-31% of links span >1 quarter). Fix attempted and reverted — choosing among the viable constructions moves the paper's peak-composite and chain-drift figures, so it is a methods decision. tests/method.test.md R9 FAIL. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The index is quoted in dollars and the dollar lost ~27% of its value over 2020Q1-2026Q1, so the nominal series answers "how many dollars does this gig cost" while the real series answers "how much intelligence work actually costs" -- the question the project exists to ask. Real is now the default view, with a Real/Nominal toggle on the hero chart. Composite 2020Q1->2026Q1: +44.7% nominal -> +14.1% real, against CPI-U +26.8%. Roughly two-thirds of the nominal rise is the dollar, not the service. Design -- ~71% of review weight -- goes +34.1% -> +5.8%, i.e. essentially flat in real terms over six years. - 23-real-index.py deflates GEKS-Jevons by CPI-U (FRED CPIAUCSL, SA primary; CPIAUCNS checked as robustness, max divergence 0.36%), cached to data/cpi-u.csv so reruns are offline. BLS published no October 2025 CPI-U, so that month is linearly interpolated and the quarter flagged. - 18-build reads the real CSVs through the same chain_category -> aligned -> composite_series path as the nominal series, so the two differ only by the deflator. No *_real_se block: the deflator carries no sampling error, so the existing bootstrap SEs apply to both bases. - ipi.js routes every index read through idxSrc()/deltaSrc() rather than scattered DATA.index_geks references, so the two bases cannot partially mix. Nominal view draws CPI-U as a dashed reference line; the real view omits it (flat at 100 by construction). Toggle self-hides on older data. - gallery.js switched to the real series; featured gig package prices stay nominal, since those are actual posted dollar amounts. Also lands 22-confounder-diagnostics.py from 2026-07-29 (reputation treadmill, pre-AI placebo, entry-price survivorship), whose results the FAQ limitations now cite. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Q9 was rewritten for the real series in the previous commit, but auditing the rest of the page turned up four claims that went stale when the chained series was retired (2026-07-27) and real became the default. - Q3 quoted the retired chained series: "three or four times their 2020 level" are delta12 magnitudes (marketing +478%), not anything plotted. The real range is +5.8% (design) to +117% (translation). The ordering claim was also inverted -- it named translation among the bottom categories when it is in fact the highest of the seven. Rewritten with the true ordering, plus a paragraph saying plainly that translation topping the table is not what an exposure story predicts, and why it carries the least weight (thinnest series, widest band, missing quarters). - Q8 presented the chained index as the published one and framed GEKS as a correction shown on "the second chart on the home page" -- there has been one chart since 2026-07-27. Reframed so GEKS-Jevons + CPI-U deflation is stated up front, with steps 1-4 kept as the clearest explanation of a matched-model index and labelled not plotted. - Added Step 6 documenting deflation: I_real = I x CPI_0/CPI_t, why the seasonally adjusted series is primary, and why the bootstrap bands are identical on both bases. Real was the default view with the calculation undocumented. - Q13 replaced the drift caveat (it described a series no longer shown) and added two measured limitations from the confounder diagnostics: the reputation treadmill (doubling reviews ~ +7% price, ~40% of within-gig growth, and why reviews are a bad control) and survivorship (entrants post flat prices 2019-2025 while the matched index climbs). Causation bullet moved to the descriptive-first position. - Q14 names the real three-script build and the PriceIndexCalc check. docs/GUIDE.md and docs/README.md still document the pre-quarterly data contract. Q14 links to them, so it now warns readers and points at data.json as authoritative; the refresh is logged in plans/todo.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Fiverr Pro directory pages (/hire/*) and agency listings (/agencies/*) were being parsed as gigs. They are not gigs: the package-list parser finds nothing on them and falls back to scraping a dollar figure off the page, which is a budget-filter default rather than a price -- 2,436 rows at exactly $500 and 330 at $1000. Fiverr changed that widget's default between 2024Q4 and 2025Q1, manufacturing a fake 1000 -> 500 move that dragged the whole recent segment down and inverted its trend. Drops 3,846 of 37,782 observations (10.2%), all in the recent crawl -- `hire` 3,806 + `agencies` 40. The historical crawl is clean. Audited for other families of the same kind before fixing: two independent tests (reserved leading path segment; non-gig-shaped page title) agree exactly and find no third family. Chose the URL-family rule over dropping extraction_method=dollar_fallback, because 2,527 of 2,531 historical dollar-fallback rows are genuine pre-2017 gigs clustered at Fiverr's original $5 floor. New code/gigfilter.py holds the single rule (is_gig / is_gig_id over a 27-entry RESERVED set) and is applied on all seven price-reading paths: 12, 13 (the crawl manifest, so these URLs are never fetched again), 14, 16, 18 (which had its own duplicate copy of the set applied to the gallery but not the index -- now an import, so the two cannot disagree), 19 (both panel builders), and 22. Re-ran 12 -> 14 -> 19 -> 21 -> 23 -> 18. Recent panel 3,566 -> 2,908 gigs; the historical panel is unchanged and panel-ipi.csv / panel-elasticity.csv / panel-category-indices*.csv are byte-identical, independently confirming the historical segment was already clean. Headline: spliced composite 2020Q1->2026Q1 goes +44.7% -> +78.4% nominal and +14.1% -> +40.7% real. The recent segment flips from falling to flat-or-rising in six of seven categories. Bootstrap SEs narrow in five of seven (audio 0.155 -> 0.071, -54%), so the removed rows were injecting variance, not signal. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Six of the seven categories miss the +/-5% terminal-quarter precision standard
adopted on 2026-08-05 -- not two, as first recorded. At 2026Q1, on 1.96*se_ln:
translation +/-29.2%, coding +/-17.1%, audio +/-13.9%, video +/-11.9%,
writing +/-8.3%, marketing +/-7.7%. Only design (+/-4.8%) clears it, and
coding -- which the original note missed entirely -- is worse than audio.
That makes suppression unviable: greying the failures would leave a
one-category site. So precision is published instead of hidden.
- New sortable +/-95% column on the category table, computed from
index_geks_se at each category's terminal quarter, with the exact
asymmetric CI on the change in the cell tooltip and an amber marking on
the six that miss the standard.
- Confidence bands are now drawn for every plotted line, not only the
emphasised one. Previously six of seven categories rendered as bare lines,
showing them as more certain than they are.
The live exposure was the ranking, not any single level. The site sorted by
delta and the FAQ asserted an order, but the top three -- audio 254.2
+/-13.9%, translation 236.3 +/-29.2%, marketing 232.2 +/-7.7% -- have
intervals that overlap one another completely, so which is highest is not
determined by these data. Design is the one genuine separation. The home-page
caveat and FAQ Q3 now say so plainly rather than presenting an ordering.
Also publishes a fact that was true all along and stated nowhere: the
composite meets the standard at +/-3.7%, because it is review-weighted and
design carries ~71% of that weight. The +40.7% headline is on firmer ground
than any category line except design's.
Adds code/24-margin-diagnostics.py, which measures the non-price margins
behind the FAQ's new "no detectable break" claim. review_count is a usable
sales proxy (88.7%/90.7% coverage post-gigfilter, monotone to within 0.4%),
but the demand-rate and dormancy breaks at 2022Q4 are null in every category
with bounds of +/-23% to +/-66%, and true exit and entry are unmeasurable in a
Wayback-derived, survival-selected crawl.
Verified with a rebuilt DOM-shim harness that runs the real render path
against the real data.json: 49 checks pass, including that every published
+/- figure matches an independent recompute off the raw arrays and that the
three-way overlap claim holds. HTML nesting, FAQ anchors, and JS syntax clean.
Note: index.html and faq.html also carry the site-copy half of the preceding
non-gig-exclusion commit, and progress.md / plans/todo.md span both -- the
working tree had them intermixed and they could not be split cleanly.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Step 25 — ln(price) on seller rating, prior-gig count and task type. Rating is priced (+3.15% per 0.1 point); task type dominates (coding +124% vs design, translation -40%); total R^2 is only 0.065. Handles a 10-point/5-point rating scale bug (217 rows) and reports the slope per 0.1 point because 41% of gigs sit at exactly 5.0. The finding is that the volume slope REVERSES: +0.022 (t 1.64) across sellers vs +0.133 (t 7.87) within a gig, so a hedonic cross-section would wrongly conclude experience is unpriced. Step 26 — sweeps MIN_MATCH over 8 values x 7 categories x 2 segments. The coverage-for-precision trade-off does not exist: raising it buys nothing in the five dense categories and destroys precision in the thin ones (audio +/-11.3% at k=1 -> +/-34.1% at k=6), because MIN_MATCH deletes comparisons rather than adding matched gigs. Surfaces that the historical coding level is not identified — 312.8 at k=3 -> 717.7 at k=4, when its terminal quarter drops from 8 supporting link paths to 1. Composite is robust at +76.4% to +78.4% across k=1..6. Both import the index scripts unmodified and vary one thing, so the sample matches production. Measurement only — no data, docs or drafts touched. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ision Readiness audit found the binding constraint on publication is the prose, not the analysis. Every section except method.md and faq.md is dated 2026-03-23, and the abstract is retracted rather than stale: it quotes the chained series' 312 peak (removed from the site 2026-07-27), the elasticity table already slated for retirement, "9 categories / 2017-2025" (it is 7, floored at 2018Q3, running to 2026Q1), and frames AI as the driver against the 2026-07-30 descriptive-first decision. Also 85 [CITE-] placeholders, 4 unfilled figures, and 7 of 10 test files never reviewed. User decision: publish the pilot as a measurement paper; the full-scale collection becomes paper 2. Every margin measured converges on the same bound, so the pilot cannot rank categories by AI impact — but it can deliver the instrument, the bounds, and the forward design requirements. New plans/active/publication.md sequences it in four phases with the number-moving decisions gating the rewrite. D1 (MIN_MATCH) is closed: keep 3, and stop treating it as the precision lever. Split out D1b (adequacy criterion) and D1c (historical series that are not identified, which no confidence band expresses). Adds U4/U5 to tests/findings.test.md so the measurement-paper framing and the hedonic result are durable requirements rather than conversation history. Records that tests/method.test.md R12 still carries the superseded two-category version of the adequacy failure. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Dated draft renders are version-controlled (see draft-2026-03-21.html, draft-2026-07-23.html); this one was left untracked. Superseded by the 07-23 render — committed for the audit trail, not as current. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… two wrong-signed categories Phase 1 decision D2 of plans/active/publication.md. code/27-reputation-band.py adjusts the production panels cell-by-cell (adjusted = p * exp(-b*ln(1+reviews))) so raw and adjusted differ only by the adjustment. The band: composite 2020Q1->2026Q1 is raw +79.0%, reputation-adjusted +39.7%. The adjusted series is a lower bound, not a correction — reviews are cumulative sales, so beta absorbs demand as well as reputation. Raw stays the headline. beta is pooled at +0.1068 (se 0.0201, t 5.32, gig-clustered). Pooling is forced rather than preferred: per category, audio (-0.089) and translation (-0.080) come back wrong-signed, so adjusting them with their own beta would raise their index. The spread across the remaining five (marketing +0.206 to design +0.075) means pooling is a stated assumption, not a formality. Two things for §3. Step 22's beta SE is unclustered — gig-clustered SEs are 1.93x larger (se 0.0101 -> 0.0195, t 10.19 -> 5.26); beta survives, the published t does not. And the band's floor is soft: across beta's own 95% CI the adjusted bound runs ~+50% to +28%, so it must not be quoted as one number. Measurement only — nothing in data/, docs/ or drafts/ was modified. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…is not window-invariant Phase 1 decision D3 of plans/active/publication.md. code/28-window-choice.py sweeps 5 window starts (2018Q1..2020Q1) x 7 categories, varying only window_start on 19-tpd-index.py and 21-geks-index.py imported unmodified. Decision: keep 2020Q1; publish 2018Q3-2020Q1 as a separate pre-AI exhibit. Extending gains nothing on the headline (composite 2020Q1->2026Q1 reads +74.3% to +78.4% nominal across all five starts, inside its own +/-3.7% band) and costs precision in four of seven categories, by up to 4x (design +/-23.3% -> +/-93.7%, writing +/-38.1% -> +/-103.2%, marketing +/-86.5% -> +/-182.6%). Translation gains nothing at all — it bases at 2019Q4 under every window <=2019Q3 — and audio's pre-period chain is broken at three adjacent pairs carrying 2 matched gigs each. The extended series is also MORE fragile to MIN_MATCH: at k=4 five of seven categories change terminal quarter, against three at 2020Q1. The by-product matters more than the decision. Over the IDENTICAL span 2020Q1->terminal, audio's growth reads +103.9% on a 2018Q3 window and +258.7% on the 2020Q1 window; spreads run 16% to 76% across six categories. Levels are deterministic, so this is the estimator. Decomposed into two channels, only one of which fires: the gig set contributes nothing (max |d lnP| over shared bilaterals is 0.0000 in all seven categories) and the link set contributes all of it (growth on the shared link set is exactly identical across windows — audio 142.0% under both, a figure neither published number matches). Shared link sets number 2 to 5. MIN_MATCH (D1c), the base quarter (2026-08-03) and the window are therefore one defect, not three: each perturbs how many link paths support a quarter. The composite is exempt and the reason is verified — the splice truncates the historical leg at 2024Q3, whose spread is 4.0% for design, which carries ~71% of the review weight. Two run-time self-checks: the production window reproduces the shipped panel-category-indices-geks.csv to 0.005 index points, and the local re-basing helper reproduces tpd.chain_category exactly at START_Q. Measurement only — nothing in data/, docs/ or drafts/ was modified. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ecision
Phase 1 decision D4 of plans/active/publication.md — the last one.
code/29-chained-elasticity-audit.py answers two questions with different answers.
THE ELASTICITY TABLE IS A SPURIOUS REGRESSION. It fits log price index on log
AI-benchmark score over ~20 quarterly observations, two trending series, no
control group. Three independent tests:
- Durbin-Watson runs 0.22 to 1.08 in all six categories, so every p=0.0000 in
panel-elasticity.csv rests on an invalid standard error. Newey-West at lag 4
shrinks the t by 1.3-1.8x but cannot fix the cause.
- A plain linear time trend, with zero AI content, fits BETTER than the AI
score in all six categories (design R2 0.979 vs 0.412, marketing 0.981 vs
0.934, coding 0.974 vs 0.909).
- CPI-U fits at least as well in five of six and returns "elasticities" of
+4.56 to +8.73 — the same regression, an unpublishable claim.
- In first differences the relationship vanishes: t = 0.26, -0.02, 0.48, 2.24,
-0.34, 0.20. One marginal result in six tests.
The ranking, which is all the table is used for, is not stable to anything:
shipped vs the same estimator on the production panel and base gives Spearman
rho = +0.314 (p = 0.544), with design falling from +1.139 (most elastic of
eight) to +0.295 (fourth of six). A fourth independent route to the conclusion
that the pilot cannot rank categories by AI impact.
THE CHAIN-DRIFT COMPARISON IS ALSO NOT PUBLISHABLE AS IT STANDS. Splitting the
chained-vs-GEKS gap into as-built -> adjacent-only (the TD1 defect) and
adjacent-only -> GEKS (genuine drift), the defect's share runs from 7% (audio)
to 802% (translation) — above 100% because in coding and translation the
adjacent-only chain lands BELOW GEKS. So §3.4 is wrong in both directions: part
of the gap is a coding defect, and the residual drift has no consistent sign.
The defect fires on 24-35% of within-gig links, longest span 35 quarters.
TD1 is therefore retired by DECISION, not repair: compute the comparison on the
production panel at the production base (step 29 already does, and reproduces
step 12's shipped level exactly in four of seven categories) rather than fixing
step 12, whose own panel and 2019Q1 base are independent sources of divergence.
Phase 1 is complete, and none of D1-D4 moves a published figure, so Phase 2
needs no pipeline re-run — docs/data.json stands.
Measurement only — nothing in data/, docs/ or drafts/ was modified.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phases 2 and 3 of plans/active/publication.md. The analysis had been four and a
half months ahead of the writing; it no longer is.
PHASE 2 — code/30-freeze-numbers.py writes data/pilot/paper-numbers.{md,json}
from docs/data.json. Every section quotes that one table; no section computes
its own figures. code/32-check-draft-numbers.py enforces it, and additionally
greps for retracted figures and requires a retraction cue nearby. No pipeline
re-run was needed: D1-D4 moved no published figure.
The frozen table adopts the SITE's band convention (196*se, the linear log-scale
form docs/ipi.js publishes) rather than the exponential form. The first pass used
the latter and reported design at +/-5.0%, which flips design across the +/-5%
adequacy line; the site says +/-4.8%. A paper and a public site disagreeing on a
published figure is the worse failure, so they now match exactly, with the exact
asymmetric interval carried alongside.
PHASE 3 — all eight prose sections.
§3 Methods (2,345 -> 5,367 words) now carries every Phase 1 decision, plus
three new subsections: §3.6 the +/-5% adequacy criterion with the precision-vs-n
curve and matched-gigs-per-bilateral, §3.7 the link-path identification failure
(MIN_MATCH, base quarter and window shown to be one defect), and §3.9 which
retracts the price elasticity of intelligence and prints the diagnostics. §3.5
adds CPI-U deflation, absent until now. The 2019Q1/2020Q1 base inconsistency is
fixed and the unreproducible "10.9% filled" is restated as 14.9% with its
definition and an explicit note.
§4 Findings rewritten real-first, the 2025 reversal retracted in text rather
than deleted, the category ranking refused with the overlapping intervals
shown, and a new §4.6 reporting the non-gig exclusion as a finding in its own
right.
Abstract, §1, §5 and §7 written from scratch, descriptive-first. §6 rewritten
with a measured bound on every limitation that has one.
§2 Related Work was not in the Phase 3 list but was self-contradictory — still
promising the retracted elasticity, framing benchmarks as the regressor,
justifying a forecasting component the paper does not have, and carrying a
positioning table row reading "Forecasting: Yes". Fixed at six claim-level
points; its 68 [CITE-] placeholders remain Phase 4 work.
The FAQ mirror is now GENERATED (code/31-mirror-faq.py) rather than hand-copied.
It had drifted three weeks and carried retracted figures while the live page was
correct; a hand-maintained mirror is a recurring defect, not a one-off.
Test infrastructure brought current across seven files, five of which had never
been reviewed. method.test.md goes 5 FAIL + 1 BLOCKED -> 1 FAIL; findings.test.md
5 FAIL -> 0 FAIL with two PARTIALs kept honest. R10 stays FAIL deliberately: the
direct matched-pair check is absent from the draft and its figures predate the
Stage 5b exclusion.
Verified: all new scripts py_compile clean and exit 0; render.py produces
draft-2026-08-06.html with 0 missing includes; the number checker passes with 22
frozen figures present and 6 retracted figures all properly cued. §4.1's
descriptive statistics were recomputed rather than carried over, which caught a
wrong median (the old $25 is the recent panel; the historical panel is $20).
Remaining before submission: 86 [CITE-] placeholders, 5 figures,
model-paper.test.md (10 BLOCKED), master.test.md, and method.test.md R10.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 4 apparatus. Every <!-- FIGURE --> placeholder is gone and every [CITE-] placeholder now resolves. - 33-direct-matched-check.py: the direct base-to-terminal bilateral Jevons, which shares no machinery with GEKS (no chain, no transitivity correction, no link quarters, no regression, no imputation). Recent panel agrees to a median 2.7%; the historical panel has only 1-4 gigs surviving both endpoints and is reported as uninformative rather than omitted. Closes method R10 — that file is now 0 FAIL. - 34-figures.py: five standalone SVGs, embedded with numbered captions. Figure 4's precision curve was RECOMPUTED, and it was wrong: subsampling without replacement needs a (1 - n/N) correction, without which the curve understates the precision loss and reads zero at n=N. Corrected, ±5% needs ~900 (writing), 1,100 (design), 1,600 (video) and ~7,400 (coding) matched gigs — superseding the "850-2,500 per category" range quoted in four sections and on the site. The corrected curve also validates the published bootstrap SEs independently, agreeing to within 3 points in all four. - 35-bibliography.py + references.json: 63 entries, no unresolved keys, generating references.md into the draft. 7 entries are UNVERIFIED and all 7 are in §2 — a submission blocker, tracked as related-work R16. Also fixes Massenkoff & McCrory, previously keyed to the data provider. - render.py had no image support, so all five embeds would have rendered as literal markdown text. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
§3.8 carried the hedonic regression as prose — the headline numbers were there, but no reader could check a coefficient. Adds the estimating equation and a three-column table: (1) cross-section, (2) + quarter FE, (3) the volume slope re-estimated within-gig, each with t-statistics, R², n and clusters. The reversal that justifies the matched-model design is now a table row rather than a claim: ln(1+reviews) reads +0.022 (1.64), −0.001, and +0.133 (7.87) across the three columns. Two things the table forced in that the prose had left out: the second reading of "prior gigs" (seller gig counts, −0.051, t = −0.59, leaving every other coefficient unchanged) and the rating-scale sensitivity as three numbers rather than an assurance that the bug does not matter. User chose the paper over the live site when offered both — recorded as method U7 so it is not moved later without asking. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.