Notes · the lab notebook
Dev diaries, experiment logs and method notes from all four projects in one place, including the experiments that didn’t work.
2026
Where it stands38 races, 102 prediction pages and 110 settled units, with the Tour of Guangxi live. What belief needsA reading of four recent papers on belief in LLMs went alongside a probing study of models’ hidden states, with an AI referee reviewing the synthesis over three rounds. The strength era, and the ladderI founded the StrengthProject on October 3. Races with no marketEvery agent moves to Opus 5.5, with the results acquirer on Sonnet 5.5. The implicit-credence programA research detour with its own agenda. No human setupThe “no-human-setup wave”: a stage race no longer needs a hand-written config, a capture step on my own machine hands the cloud what it can’t fetch itself, and the nightly run reaches a published board on its own. Measuring the classifier, then replacing itThe most recent chapter is the one closest to my research. The DoxasticLayer, rebuilt from a toyAfter a two-week pause I opened a third branch. Level with the marketThe Vuelta closes. Building the nightly crewThe project gets an agent architecture. Canonicalization gets demotedWindow 3 (nine of nine runs clean) produced K06 UNIFIES for the first time: a test case that had failed for a week now succeeded. The identity problem takes overThe first realistic “generation window” ran ten conversation set-ups, four replicates each, across mixed model families, and captured 40,344 boundary pairs. The benchmark that said noOn August 15 I restated the charter: the system is an instrument for exploring doxastic norms, not a solver of their hard problems. Knowing what kind of day it isThe Tour’s lesson becomes a program: an eleven-item menu of day types. Sweet Maria’s movesSweet Maria’s moved to a new Shopify storefront and its scraper was rewritten. Fusion, and learning from live sessionsThe reasoning and conversational harnesses were joined so that a conversation’s claims become a “doxastic web” that the deliberation engine settles. The conversational harnessA sibling built from philosophy of language rather than epistemology. The Tour, stage by stageOne commit per day: odds captured each morning, a preview published, yesterday settled, a reflection written. A bias found, a fix shelvedA backtest shows riders who finished a grand tour within 45 days are systematically underpriced. Making it usableMulti-provider models with per-operation model and effort choices, parallel LLM calls, a chat-to-graph intake (the “front door”) and a local web app. A whole harness in two daysMy first commit, Initial commit: defeasible reasoning harness, came with four design documents I’d written beforehand: an epistemic constitution (the norms), context-management principles (critics stay independent), an orchestration spec, and a build brief. The race as it unfolds, and a Cloudflare wallWithin-race state arrives: what has happened in the stages so far. Two good ideas that didn’t replicateA blend of the multiclass and LambdaRank heads, then a stacked meta-learner. Testing a thesis, and losingThe experiment log opens with a hypothesis: combine the shape of a race with the makeup of its field. Experiments get a frameworkAn experiment harness and the “contender” model arrive: train the win and podium model only on the top 15. A Streamlit app, and 1,368 files thrown awayA pre-frontend round of model work, then a local Streamlit app for picking a race and seeing predictions. Building with Claude CodeFrom January 2026 the commits are co-authored with Claude. Back at itThe whole 2025 season is re-scraped in one go, about 150 races.2025
Going quietA last round of race-kind clustering and stability analysis on 9 to 11 August, then nothing for five months. Embeddings, interactions, and a database too big for the assistantThe busiest month of the first season (37 commits). Analytics and sold-out coffeesThe site’s first analytics page shipped, along with prices and the ability to browse sold-out coffees. From CSVs to a real databaseThe biggest rebuild. The webscrape refactorThe scraper is rebuilt with logging and tests. What kind of race was that?Most of the spring goes into characterizing races from their results alone: how shattered the field was, how clumped, how big the biggest group. The first predictorsThe first models are deliberately simple: predict from a rider’s average past finishing place, then from bib numbers (teams number their leaders first), then population-wide and per-rider regressions with better evaluation metrics. Maintenance runsMostly scheduled data runs and seller fixes (Royal’s site changed in February). First commit, first scrapeThe repo starts the same week as the first big scrape of FirstCycling: about 3,200 race files from 2000 to 2024, sorted into WorldTour, ProSeries and the tier below.2024
Similar coffees, and a first evaluation harnessOn 1 October the site gained “similar coffees”: a vector search over flavor and origin, shipped after a day of fighting dependency versions on Streamlit Cloud. The data pipeline gets its own repoOn 8 August 2024 the pipeline got its own repository, separate from the website. LaunchIn late June I built the Streamlit front end and trained the first fun-only model: a logistic regression over 7,700+ Coffee Review assessments, predicting which of seven score buckets a coffee falls into from its origin and its tasting notes. Making the data agree with itselfWith raw records flowing, the work became cleaning. A scraper for every sellerIn mid-March I wrote a small app per seller (fifteen of them dated 14–16 March), then folded them into one “full app” driven by a dictionary of per-seller functions: how to list coffee links, how to turn a URL into a name, how to trim a page to the part that describes the coffee.2023
One notebook per sellerBefore writing any app I opened a Jupyter notebook for each seller and studied how its site was built: Coffee Bean Corral in December, then Hacea, Prime Green, Showroom, Mill City, Copan and Burman in early February, and a run of ten more on 19–20 February. Where it started: scraping Coffee ReviewThe project’s seed is a data-science course project.2020
Where it stoppedThe git history ends there. Into the cloudNext the site had to stop reading files from my laptop. The website in a weekFlask basics on 20 June. Tidying up for a websiteSix commits in one day, all housekeeping before building anything new. Making the search smarterThe longest notebook in the folder reads like a lab diary. From one file to a fieldThe oldest scripts took one paper, found its citations, and produced its distribution over the text. A machine-readable TreatiseI made the three files the rest of the project stands on: the full Treatise text with every paragraph numbered, and a pair of concordance tables between Selby-Bigge page numbers and Norton paragraph numbers in each direction.2019
Building the pileThe first files in the folder are PDFs.