~ $ cd projects/changes && cat README.md

How this site changes

How this site is built draws where each file stands. This is how often each one moves. Git keeps every commit, and every commit says which files it changed; read over the whole history, that says what the arrows cannot: which files settle and which never do, how far a change travels, which files stand where changes happen, and which change together although nothing in the code joins them.

Like the picture of how it is built, every figure here is read off the history at every push, so it is always the commit being published. Play the history, drag it, or press a commit on the picture of changes, and every figure below shows the source as it stood then.

the last of 209 commits: 079ed30 13 October 2026 — A module of the LCARS display is moved by hand, the last of what David said it lacked: carried up or down its column onto another row, where what stood there changes places with it, the rest making room as it goes and a mark showing where it would land. Its column it keeps, since that says what comes before what, and the flow says it. Moving one module among others that stood where the layout wished would move nothing — each stands level with what feeds it, so they would all follow — so from the first move every module stays where it stood, and the display only finds a place for what is new, around them; Tidy hands the layout back. A move is a step Undo takes back, though the blueprint is the same before and after: where modules were put is kept beside each state of it while the page is open, and not with the reader's version nor in a link, since the text of a blueprint says nothing of it. Alt and an arrow move the module chosen; a finger on a module still moves the page. The schematic says of itself where its rows are and which each module stands on, so a hand on it is read against what is drawn. And what the display asks when a conduit could be run more ways than one is worded in a function of its own, tested without a page

The picture, as it changed

The picture of how this site is built, seen through its history: each ball as big as the commits that have changed it so far, and warm as it changed lately, cooling by half every six commits; a warm thread between two files that changed together twice or more, dashed where no arrow joins them. Play the history and the heat moves: a feature being written glows and cools, while the frame under the features warms again each time a new one is written. Tangle it, and what changed together pulls together too. Point at a file for what changed with it, or change the lenses for anything else the picture of how it is built can show. Click a file, and the panel by the picture tells its history: when it was written, every commit that changed it up to the one shown, what it changed with, what its ground would lead one to expect, and a link to its code.

srcfeaturesplatformfeatures/adventure → platform/browser: 1features/adventure → platform/markdown: 2features/adventure → platform/plugin: 2features/air-quality → platform/blueprint: 13features/air-quality → platform/browser: 4features/air-quality → platform/charts: 1features/air-quality → platform/content: 1features/air-quality → platform/data: 21features/air-quality → platform/plugin: 3features/air-quality → platform/program: 1features/allFeatures.ts → features/adventure: 1features/allFeatures.ts → features/air-quality: 1features/allFeatures.ts → features/architecture: 1features/allFeatures.ts → features/barcelona-series: 1features/allFeatures.ts → features/bowling-kata: 1features/allFeatures.ts → features/developer-meetings: 1features/allFeatures.ts → features/fibergochi: 1features/allFeatures.ts → features/first-network: 1features/allFeatures.ts → features/fish-market: 1features/allFeatures.ts → features/gherkin-genie: 1features/allFeatures.ts → features/guess-the-rule: 1features/allFeatures.ts → features/headline: 1features/allFeatures.ts → features/lagoon: 1features/allFeatures.ts → features/lcars: 1features/allFeatures.ts → features/maze: 1features/allFeatures.ts → features/next-word: 1features/allFeatures.ts → features/packages: 1features/allFeatures.ts → features/portfolio: 1features/allFeatures.ts → features/post-tests: 1features/allFeatures.ts → features/recipes: 1features/allFeatures.ts → features/rocket: 1features/allFeatures.ts → features/sea: 1features/allFeatures.ts → features/search: 1features/allFeatures.ts → features/sky: 1features/allFeatures.ts → features/small-steps: 1features/allFeatures.ts → features/step-names: 1features/allFeatures.ts → features/technical-debt: 1features/allFeatures.ts → features/tests-as-examples: 1features/allFeatures.ts → features/theme: 1features/allFeatures.ts → features/thesis-results: 1features/allFeatures.ts → features/weather: 1features/allFeatures.ts → features/world: 2features/allFeatures.ts → features/writings: 1features/allFeatures.ts → platform/plugin: 1features/architecture → platform/blueprint: 26features/architecture → platform/browser: 5features/architecture → platform/charts: 12features/architecture → platform/markdown: 16features/architecture → platform/plugin: 7features/barcelona-series → platform/blueprint: 8features/barcelona-series → platform/data: 4features/barcelona-series → platform/plugin: 1features/bowling-kata → platform/browser: 1features/bowling-kata → platform/markdown: 4features/bowling-kata → platform/plugin: 3features/bowling-kata → platform/testing: 4features/developer-meetings → platform/browser: 2features/developer-meetings → platform/charts: 1features/developer-meetings → platform/plugin: 1features/fibergochi → platform/browser: 2features/fibergochi → platform/markdown: 1features/fibergochi → platform/plugin: 2features/first-network → platform/browser: 1features/first-network → platform/markdown: 1features/first-network → platform/plugin: 2features/first-network → platform/random: 2features/fish-market → platform/browser: 1features/fish-market → platform/markdown: 1features/fish-market → platform/plugin: 2features/fish-market → platform/random: 1features/gherkin-genie → platform/markdown: 5features/gherkin-genie → platform/plugin: 2features/gherkin-genie → platform/testing: 3features/guess-the-rule → platform/browser: 1features/guess-the-rule → platform/plugin: 2features/headline → platform/plugin: 1features/lagoon → platform/browser: 1features/lagoon → platform/markdown: 1features/lagoon → platform/plugin: 2features/lcars → platform/blueprint: 37features/lcars → platform/browser: 3features/lcars → platform/plugin: 2features/lcars → platform/workbench: 8features/maze → platform/browser: 1features/maze → platform/plugin: 2features/next-word → platform/browser: 1features/next-word → platform/markdown: 1features/next-word → platform/plugin: 3features/packages → platform/browser: 1features/packages → platform/data: 2features/packages → platform/plugin: 2features/portfolio → platform/plugin: 1features/post-tests → platform/browser: 1features/post-tests → platform/markdown: 2features/post-tests → platform/plugin: 2features/recipes → platform/blueprint: 11features/recipes → platform/plugin: 1features/rocket → platform/browser: 4features/rocket → platform/plugin: 2features/rocket → platform/program: 4features/sea → platform/blueprint: 15features/sea → platform/data: 6features/sea → platform/plugin: 1features/search → platform/browser: 1features/search → platform/command: 1features/search → platform/content: 5features/search → platform/markdown: 4features/search → platform/plugin: 1features/sky → platform/plugin: 1features/small-steps → platform/browser: 2features/small-steps → platform/plugin: 2features/small-steps → platform/random: 1features/step-names → platform/browser: 1features/step-names → platform/markdown: 2features/step-names → platform/plugin: 2features/technical-debt → platform/charts: 2features/technical-debt → platform/plugin: 1features/technical-debt → platform/program: 2features/tests-as-examples → platform/browser: 1features/tests-as-examples → platform/markdown: 2features/tests-as-examples → platform/plugin: 2features/tests-as-examples → platform/testing: 3features/theme → platform/analytics: 2features/theme → platform/browser: 2features/theme → platform/command: 2features/theme → platform/plugin: 1features/thesis-results → platform/plugin: 1features/weather → platform/blueprint: 10features/weather → platform/browser: 4features/weather → platform/charts: 2features/weather → platform/content: 1features/weather → platform/data: 21features/weather → platform/plugin: 3features/weather → platform/program: 1features/world → platform/browser: 3features/world → platform/plugin: 2features/world → platform/random: 1features/writings → platform/content: 1features/writings → platform/markdown: 2features/writings → platform/plugin: 2main.ts → features/allFeatures.ts: 1main.ts → platform/agent: 1main.ts → platform/analytics: 1main.ts → platform/browser: 7main.ts → platform/flags: 4main.ts → platform/page: 1main.ts → platform/plugin: 4main.ts → platform/shell: 2main.ts → platform/workbench: 1platform/agent → platform/content: 3platform/agent → platform/markdown: 1platform/agent → platform/plugin: 5platform/blueprint → platform/markdown: 2platform/browser → platform/command: 2platform/browser → platform/content: 1platform/browser → platform/data: 3platform/browser → platform/markdown: 3platform/browser → platform/plugin: 6platform/browser → platform/program: 8platform/command → platform/content: 1platform/data → platform/markdown: 1platform/flags → platform/command: 2platform/flags → platform/markdown: 1platform/page → platform/content: 9platform/page → platform/markdown: 5platform/page → platform/shell: 3platform/plugin → platform/blueprint: 17platform/plugin → platform/command: 2platform/plugin → platform/content: 5platform/plugin → platform/data: 1platform/plugin → platform/flags: 1platform/plugin → platform/program: 11platform/program → platform/command: 1platform/shell → platform/browser: 2platform/shell → platform/command: 14platform/shell → platform/content: 5platform/shell → platform/markdown: 7platform/workbench → platform/blueprint: 73platform/workbench → platform/browser: 11platform/workbench → platform/plugin: 3mainallFeaturesadventureair-qualityarchitecturebarcelona-seriesbowling-katadeveloper-meetingsfibergochifirst-networkfish-marketgherkin-genieguess-the-ruleheadlinelagoonlcarsmazenext-wordpackagesportfoliopost-testsrecipesrocketseasearchskysmall-stepsstep-namestechnical-debttests-as-examplesthemethesis-resultsweatherworldwritingspageshellworkbenchagentbrowserpluginflagsprogramblueprintdatacommandmarkdownchartstestinganalyticscontentrandommain.tsfeatures/allFeatures.tsfeatures/adventure/ADVENTURE_ICONS.tsfeatures/adventure/Adventure.tsfeatures/adventure/adventureFeature.tsfeatures/adventure/adventureStill.tsfeatures/adventure/browser/mountAdventure.tsfeatures/adventure/Charted.tsfeatures/adventure/englishWorld.tsfeatures/adventure/LIFE.tsfeatures/adventure/originalWorld.tsfeatures/adventure/pixelIcon.tsfeatures/adventure/renderAdventure.tsfeatures/adventure/renderMap.tsfeatures/adventure/renderSeen.tsfeatures/adventure/World.tsfeatures/air-quality/airQualityFeature.tsfeatures/air-quality/askedNo2.tsfeatures/air-quality/aStation.tsfeatures/air-quality/browser/mountNo2.tsfeatures/air-quality/flatSums.tsfeatures/air-quality/no2AnnualMeans.tsfeatures/air-quality/no2Colour.tsfeatures/air-quality/no2Grid.tsfeatures/air-quality/no2ScaleTop.tsfeatures/air-quality/No2Selection.tsfeatures/air-quality/no2Source.tsfeatures/air-quality/No2Station.tsfeatures/air-quality/no2Stations.tsfeatures/air-quality/no2Still.tsfeatures/air-quality/no2Tool.tsfeatures/air-quality/nodes/airNodes.tsfeatures/air-quality/nodes/no2DaysChoice.tsfeatures/air-quality/nodes/no2HoursNode.tsfeatures/air-quality/nodes/no2MonthsNode.tsfeatures/air-quality/nodes/no2StationChoice.tsfeatures/air-quality/nodes/no2StationsNode.tsfeatures/air-quality/nodes/no2StationsRead.tsfeatures/air-quality/nodes/no2YearsNode.tsfeatures/air-quality/renderNo2Figure.tsfeatures/air-quality/renderNo2Heatmap.tsfeatures/air-quality/renderNo2Years.tsfeatures/air-quality/tallies.tsfeatures/air-quality/wholeRecord.tsfeatures/architecture/againstStabilityOf.tsfeatures/architecture/architectureFeature.tsfeatures/architecture/architectureStill.tsfeatures/architecture/assortativityOf.tsfeatures/architecture/bandOf.tsfeatures/architecture/betweennessOf.tsfeatures/architecture/Body.tsfeatures/architecture/boxCycles.tsfeatures/architecture/boxLinksOf.tsfeatures/architecture/boxOf.tsfeatures/architecture/breakablePath.tsfeatures/architecture/browser/ArchitectureScene.tsfeatures/architecture/browser/changeApps.tsfeatures/architecture/browser/changesInBrowser.tsfeatures/architecture/browser/detailsPanel.tsfeatures/architecture/browser/mountArchitecture.tsfeatures/architecture/browser/mountChangeFigure.tsfeatures/architecture/browser/mountChangePlayer.tsfeatures/architecture/browser/mountCouplingFigure.tsfeatures/architecture/browser/pointAtChangeMatrix.tsfeatures/architecture/browser/shownCommit.tsfeatures/architecture/Cascade.tsfeatures/architecture/cascadeFrom.tsfeatures/architecture/cascadeOf.tsfeatures/architecture/changeFigures.tsfeatures/architecture/changeMatrixOf.tsfeatures/architecture/changeStills.tsfeatures/architecture/changesUpTo.tsfeatures/architecture/clusteringOf.tsfeatures/architecture/communitiesOf.tsfeatures/architecture/componentsOf.tsfeatures/architecture/COMPOSITION.tsfeatures/architecture/coresOf.tsfeatures/architecture/couplingOf.tsfeatures/architecture/couplingsOf.tsfeatures/architecture/Coverage.tsfeatures/architecture/coverageOf.tsfeatures/architecture/dayOf.tsfeatures/architecture/decodeHistory.tsfeatures/architecture/describeMatrixCell.tsfeatures/architecture/detailsOf.tsfeatures/architecture/editNoteOf.tsfeatures/architecture/encodeHistory.tsfeatures/architecture/fileHistoryOf.tsfeatures/architecture/graphOf.tsfeatures/architecture/groundOf.tsfeatures/architecture/heatOf.tsfeatures/architecture/heightsOf.tsfeatures/architecture/History.tsfeatures/architecture/historyUpTo.tsfeatures/architecture/importsOf.tsfeatures/architecture/joinedBy.tsfeatures/architecture/Layout.tsfeatures/architecture/layoutArchitecture.tsfeatures/architecture/lensesOf.tsfeatures/architecture/Life.tsfeatures/architecture/livesOf.tsfeatures/architecture/matrixCellsOf.tsfeatures/architecture/matrixRowOf.tsfeatures/architecture/measuresOf.tsfeatures/architecture/Metrics.tsfeatures/architecture/metricsOf.tsfeatures/architecture/modularityOf.tsfeatures/architecture/mutantsOf.tsfeatures/architecture/networkOf.tsfeatures/architecture/nodes/architectureNodes.tsfeatures/architecture/nodes/aroundNode.tsfeatures/architecture/nodes/arrowsNode.tsfeatures/architecture/nodes/boxesNode.tsfeatures/architecture/nodes/CodeGraph.tsfeatures/architecture/nodes/commitsNode.tsfeatures/architecture/nodes/degreesOf.tsfeatures/architecture/nodes/filesNode.tsfeatures/architecture/nodes/graphTableOf.tsfeatures/architecture/nodes/graphType.tsfeatures/architecture/nodes/historyIn.tsfeatures/architecture/nodes/keepFilesNode.tsfeatures/architecture/nodes/knotNode.tsfeatures/architecture/nodes/measureNode.tsfeatures/architecture/nodes/networkNode.tsfeatures/architecture/nodes/onlyFilesNode.tsfeatures/architecture/nodes/pictureNode.tsfeatures/architecture/nodes/renderTangleSvg.tsfeatures/architecture/nodes/sourceNode.tsfeatures/architecture/nodes/subgraphOf.tsfeatures/architecture/nodes/tangleLayoutOf.tsfeatures/architecture/onlyTypes.tsfeatures/architecture/pageRankOf.tsfeatures/architecture/pathsOf.tsfeatures/architecture/percent.tsfeatures/architecture/plural.tsfeatures/architecture/pointedArrowsOf.tsfeatures/architecture/pointedAt.tsfeatures/architecture/pointedSaid.tsfeatures/architecture/positionOf.tsfeatures/architecture/propagationCostOf.tsfeatures/architecture/radiiBy.tsfeatures/architecture/rampColour.tsfeatures/architecture/ratchetHeldOf.tsfeatures/architecture/reachedByOf.tsfeatures/architecture/reachedByTests.tsfeatures/architecture/reachOf.tsfeatures/architecture/readGraph.tsfeatures/architecture/readHistory.tsfeatures/architecture/readSources.tsfeatures/architecture/renderArchitectureCaption.tsfeatures/architecture/renderArchitectureFigure.tsfeatures/architecture/renderArchitectureSvg.tsfeatures/architecture/renderBridgesFigure.tsfeatures/architecture/renderCascadeFigure.tsfeatures/architecture/renderChangeMatrix.tsfeatures/architecture/renderChangeMatrixFigure.tsfeatures/architecture/renderCouplingFigure.tsfeatures/architecture/renderCouplingsFigure.tsfeatures/architecture/renderGroundFigure.tsfeatures/architecture/renderGroupsFigure.tsfeatures/architecture/renderHotspotsFigure.tsfeatures/architecture/renderLifeStrip.tsfeatures/architecture/renderMetricsSparks.tsfeatures/architecture/renderNetworkFigure.tsfeatures/architecture/renderRatchetFigure.tsfeatures/architecture/renderReachFigure.tsfeatures/architecture/renderRipplesFigure.tsfeatures/architecture/renderSettlingFigure.tsfeatures/architecture/renderShapeReport.tsfeatures/architecture/renderShownCommit.tsfeatures/architecture/renderStabilityFigure.tsfeatures/architecture/renderTestedChangesFigure.tsfeatures/architecture/renderUnrunReport.tsfeatures/architecture/ripplesOf.tsfeatures/architecture/settlingOf.tsfeatures/architecture/shapeOf.tsfeatures/architecture/shapesOf.tsfeatures/architecture/Snapshot.tsfeatures/architecture/snapshotOf.tsfeatures/architecture/SourceGraph.tsfeatures/architecture/sourceUrlOf.tsfeatures/architecture/springTowards.tsfeatures/architecture/stabilityOf.tsfeatures/architecture/standingsOf.tsfeatures/architecture/stronglyConnectedOf.tsfeatures/architecture/SWEEP.tsfeatures/architecture/sweepsOf.tsfeatures/architecture/tangleStep.tsfeatures/architecture/testedChangesOf.tsfeatures/architecture/threadsOf.tsfeatures/architecture/undirectedOf.tsfeatures/architecture/unheldCouplingsOf.tsfeatures/architecture/unrunOf.tsfeatures/architecture/valueExportsOf.tsfeatures/barcelona-series/barcelonaAnswer.tsfeatures/barcelona-series/barcelonaLinkOf.tsfeatures/barcelona-series/barcelonaRainSource.tsfeatures/barcelona-series/BarcelonaSeries.tsfeatures/barcelona-series/barcelonaSeriesFeature.tsfeatures/barcelona-series/barcelonaSeriesSource.tsfeatures/barcelona-series/barcelonaSource.tsfeatures/barcelona-series/monthlyValuesOf.tsfeatures/barcelona-series/nodes/barcelonaMonthsNode.tsfeatures/barcelona-series/nodes/barcelonaNodes.tsfeatures/barcelona-series/nodes/barcelonaRainNode.tsfeatures/barcelona-series/nodes/barcelonaRead.tsfeatures/barcelona-series/nodes/barcelonaYearsNode.tsfeatures/bowling-kata/bowlingKataFeature.tsfeatures/bowling-kata/bowlingKataStill.tsfeatures/bowling-kata/browser/mountBowlingKata.tsfeatures/bowling-kata/browser/mountKataFiveSteps.tsfeatures/bowling-kata/KATA_LESSONS.tsfeatures/bowling-kata/KATA_STEPS.tsfeatures/bowling-kata/kataFiveStepsSlides.tsfeatures/bowling-kata/kataFiveStepsStill.tsfeatures/bowling-kata/KataLesson.tsfeatures/bowling-kata/kataLessonAt.tsfeatures/bowling-kata/KataStep.tsfeatures/bowling-kata/kataStepTitle.tsfeatures/bowling-kata/lineDiff.tsfeatures/bowling-kata/renderKataFiveSteps.tsfeatures/bowling-kata/renderKataStep.tsfeatures/bowling-kata/renderKataStrip.tsfeatures/bowling-kata/runKata.tsfeatures/developer-meetings/browser/heatGrid.tsfeatures/developer-meetings/browser/mountDeveloperMeetings.tsfeatures/developer-meetings/developerMeetingsFeature.tsfeatures/developer-meetings/featureSizeScale.tsfeatures/developer-meetings/simulateMeetings.tsfeatures/developer-meetings/summariseMeetings.tsfeatures/developer-meetings/WORK_WEEK.tsfeatures/fibergochi/browser/mountFibergochi.tsfeatures/fibergochi/Fibergochi.tsfeatures/fibergochi/fibergochiFeature.tsfeatures/fibergochi/FibergochiState.tsfeatures/fibergochi/fibergochiStill.tsfeatures/fibergochi/ODDS.tsfeatures/fibergochi/readKept.tsfeatures/fibergochi/renderFibergochi.tsfeatures/fibergochi/Sprite.tsfeatures/first-network/browser/mountLetters.tsfeatures/first-network/firstNetworkFeature.tsfeatures/first-network/firstReader.tsfeatures/first-network/glyphs.tsfeatures/first-network/LetterReader.tsfeatures/first-network/lettersStill.tsfeatures/first-network/Network.tsfeatures/first-network/readOwnShapes.tsfeatures/first-network/renderLetters.tsfeatures/first-network/Shape.tsfeatures/first-network/shapeProblem.tsfeatures/fish-market/Bidder.tsfeatures/fish-market/browser/mountFishMarket.tsfeatures/fish-market/DutchAuction.tsfeatures/fish-market/fishMarketFeature.tsfeatures/fish-market/fishMarketStill.tsfeatures/fish-market/fixedMargin.tsfeatures/fish-market/Lot.tsfeatures/fish-market/Market.tsfeatures/fish-market/marketMargin.tsfeatures/fish-market/openAuction.tsfeatures/fish-market/ownBidder.tsfeatures/fish-market/ownBidderSource.tsfeatures/fish-market/planner.tsfeatures/fish-market/randomLots.tsfeatures/fish-market/renderFishMarket.tsfeatures/fish-market/Sale.tsfeatures/fish-market/Standing.tsfeatures/fish-market/theTable.tsfeatures/fish-market/Turn.tsfeatures/fish-market/vicente.tsfeatures/fish-market/wanda.tsfeatures/gherkin-genie/browser/mountGherkinGenie.tsfeatures/gherkin-genie/EXAMPLE_FEATURE.tsfeatures/gherkin-genie/EXAMPLE_STEPS.tsfeatures/gherkin-genie/genieStepOf.tsfeatures/gherkin-genie/gherkinGenieFeature.tsfeatures/gherkin-genie/gherkinGenieStill.tsfeatures/gherkin-genie/readFeature.tsfeatures/gherkin-genie/renderGenie.tsfeatures/gherkin-genie/renderGenieRun.tsfeatures/gherkin-genie/runGenie.tsfeatures/gherkin-genie/wishedSteps.tsfeatures/guess-the-rule/browser/mountGuessTheRule.tsfeatures/guess-the-rule/GuessRound.tsfeatures/guess-the-rule/guessTheRuleFeature.tsfeatures/guess-the-rule/guessTheRuleStill.tsfeatures/guess-the-rule/renderGuessTable.tsfeatures/guess-the-rule/RULES.tsfeatures/headline/browser/mountHeadline.tsfeatures/headline/Headline.tsfeatures/headline/headlineFeature.tsfeatures/headline/headlineRounds.tsfeatures/headline/headlines.tsfeatures/headline/shuffled.tsfeatures/headline/typewriterFrames.tsfeatures/lagoon/alone.tsfeatures/lagoon/browser/mountLagoon.tsfeatures/lagoon/Fisher.tsfeatures/lagoon/lagoonFeature.tsfeatures/lagoon/lagoonStill.tsfeatures/lagoon/ownFisher.tsfeatures/lagoon/ownFisherSource.tsfeatures/lagoon/playRound.tsfeatures/lagoon/renderLagoon.tsfeatures/lagoon/Round.tsfeatures/lagoon/starters.tsfeatures/lagoon/theLagoon.tsfeatures/lagoon/titForTat.tsfeatures/lagoon/Tournament.tsfeatures/lagoon/Week.tsfeatures/lcars/browser/LcarsConsole.tsfeatures/lcars/browser/openChoice.tsfeatures/lcars/browser/QueryView.tsfeatures/lcars/codeOf.tsfeatures/lcars/conduitPath.tsfeatures/lcars/faceOf.tsfeatures/lcars/flowOf.tsfeatures/lcars/joinsOf.tsfeatures/lcars/lcarsFeature.tsfeatures/lcars/questionOf.tsfeatures/lcars/rowAt.tsfeatures/lcars/SCHEMATIC.tsfeatures/lcars/schematicMarkup.tsfeatures/lcars/schematicOf.tsfeatures/lcars/withRow.tsfeatures/maze/browser/mountMaze.tsfeatures/maze/Cell.tsfeatures/maze/describeWay.tsfeatures/maze/FIRST.tsfeatures/maze/growMaze.tsfeatures/maze/JavaRandom.tsfeatures/maze/Maze.tsfeatures/maze/mazeFeature.tsfeatures/maze/mazeStill.tsfeatures/maze/OPEN.tsfeatures/maze/renderMaze.tsfeatures/maze/wayOut.tsfeatures/next-word/browser/mountNextWord.tsfeatures/next-word/closestWord.tsfeatures/next-word/nextWordFeature.tsfeatures/next-word/NextWordModel.tsfeatures/next-word/nextWordStill.tsfeatures/next-word/pickWord.tsfeatures/next-word/renderNextWord.tsfeatures/next-word/sentenceOf.tsfeatures/next-word/smallCorpus.tsfeatures/next-word/withTemperature.tsfeatures/next-word/wordsOf.tsfeatures/packages/browser/mountPackages.tsfeatures/packages/NpmDownloads.tsfeatures/packages/npmPackages.tsfeatures/packages/npmSource.tsfeatures/packages/packageNotes.tsfeatures/packages/packagesFeature.tsfeatures/packages/packagesStill.tsfeatures/packages/renderPackages.tsfeatures/portfolio/portfolioFeature.tsfeatures/post-tests/browser/mountPostTests.tsfeatures/post-tests/compilePost.tsfeatures/post-tests/examplePosts.tsfeatures/post-tests/postTestsFeature.tsfeatures/post-tests/postTestsStill.tsfeatures/post-tests/renderCompiledPost.tsfeatures/recipes/nodes/crossNode.tsfeatures/recipes/nodes/dayPartsNode.tsfeatures/recipes/recipesFeature.tsfeatures/rocket/browser/mountRocket.tsfeatures/rocket/browser/mountStarMap.tsfeatures/rocket/destinations.tsfeatures/rocket/firstShip.tsfeatures/rocket/nearStars.tsfeatures/rocket/projectStars.tsfeatures/rocket/renderVoyages.tsfeatures/rocket/rocketFeature.tsfeatures/rocket/rocketProgram.tsfeatures/rocket/saidSpeed.tsfeatures/rocket/saidTime.tsfeatures/rocket/saidTonnes.tsfeatures/rocket/Ship.tsfeatures/rocket/shipOf.tsfeatures/rocket/voyage.tsfeatures/rocket/whereAt.tsfeatures/sea/gridAnswerOf.tsfeatures/sea/nodes/seaDaysNode.tsfeatures/sea/nodes/seaMonthsNode.tsfeatures/sea/nodes/seaNodes.tsfeatures/sea/nodes/seaPointChoice.tsfeatures/sea/nodes/seaPointsNode.tsfeatures/sea/nodes/seaPointsRead.tsfeatures/sea/nodes/seaYearsNode.tsfeatures/sea/seaAnswer.tsfeatures/sea/seaFeature.tsfeatures/sea/SeaPoint.tsfeatures/sea/seaPoints.tsfeatures/sea/seaSource.tsfeatures/search/browser/chooser.tsfeatures/search/browser/isTyping.tsfeatures/search/browser/mountSearch.tsfeatures/search/browser/SEARCH_PAGE.tsfeatures/search/browser/searchKeys.tsfeatures/search/browser/searchSite.tsfeatures/search/foldedOf.tsfeatures/search/markedOf.tsfeatures/search/pagesFound.tsfeatures/search/renderFound.tsfeatures/search/searchCommand.tsfeatures/search/searchFeature.tsfeatures/search/steppedTo.tsfeatures/search/wordStarts.tsfeatures/sky/browser/followTurning.tsfeatures/sky/browser/Starfield.tsfeatures/sky/skyFeature.tsfeatures/sky/Turns.tsfeatures/small-steps/browser/mountSmallSteps.tsfeatures/small-steps/randomSteps.tsfeatures/small-steps/renderSmallSteps.tsfeatures/small-steps/SMALL_STEPS_LENGTH.tsfeatures/small-steps/smallStepsFeature.tsfeatures/small-steps/smallStepsFrames.tsfeatures/small-steps/smallStepsStill.tsfeatures/step-names/browser/mountStepNames.tsfeatures/step-names/EXAMPLE_POST.tsfeatures/step-names/renderStepCode.tsfeatures/step-names/StepMethod.tsfeatures/step-names/stepMethodOf.tsfeatures/step-names/stepNamesFeature.tsfeatures/step-names/stepNamesStill.tsfeatures/technical-debt/simulateTechnicalDebt.tsfeatures/technical-debt/technicalDebtFeature.tsfeatures/technical-debt/technicalDebtProgram.tsfeatures/tests-as-examples/browser/mountTestsAsExamples.tsfeatures/tests-as-examples/DISPATCHER_TESTS.tsfeatures/tests-as-examples/Dispatcher.tsfeatures/tests-as-examples/DISPATCHERS.tsfeatures/tests-as-examples/renderDispatcherRun.tsfeatures/tests-as-examples/runDispatcherTests.tsfeatures/tests-as-examples/testsAsExamplesFeature.tsfeatures/tests-as-examples/testsAsExamplesStill.tsfeatures/theme/browser/BrowserTheme.tsfeatures/theme/browser/countThemeAtStart.tsfeatures/theme/browser/mountThemeToggle.tsfeatures/theme/browser/settleTheme.tsfeatures/theme/Theme.tsfeatures/theme/ThemeChoice.tsfeatures/theme/themeCommand.tsfeatures/theme/themeFeature.tsfeatures/thesis-results/graphMatchingRuns.tsfeatures/thesis-results/machines.tsfeatures/thesis-results/renderRuns.tsfeatures/thesis-results/thesisResultsFeature.tsfeatures/weather/askedQuestion.tsfeatures/weather/aWeatherStation.tsfeatures/weather/browser/mountWeather.tsfeatures/weather/cadtepAnswer.tsfeatures/weather/cadtepDaysOf.tsfeatures/weather/climateSeries.tsfeatures/weather/climateSeriesSource.tsfeatures/weather/countDays.tsfeatures/weather/daysPerYear.tsfeatures/weather/firstQuestion.tsfeatures/weather/histogramOf.tsfeatures/weather/hotNightsTool.tsfeatures/weather/nodes/weatherDaysNode.tsfeatures/weather/nodes/weatherMonthsNode.tsfeatures/weather/nodes/weatherNodes.tsfeatures/weather/nodes/weatherStationChoice.tsfeatures/weather/nodes/weatherStationsNode.tsfeatures/weather/nodes/weatherStationsRead.tsfeatures/weather/questionInWords.tsfeatures/weather/recordOf.tsfeatures/weather/renderDaysCalendar.tsfeatures/weather/renderWeatherFigure.tsfeatures/weather/stationsNamed.tsfeatures/weather/steadyYear.tsfeatures/weather/twoHalves.tsfeatures/weather/variableYearOf.tsfeatures/weather/weatherFeature.tsfeatures/weather/weatherGroups.tsfeatures/weather/weatherPresets.tsfeatures/weather/WeatherQuestion.tsfeatures/weather/weatherSource.tsfeatures/weather/WeatherStation.tsfeatures/weather/weatherStations.tsfeatures/weather/weatherStill.tsfeatures/weather/weatherVariables.tsfeatures/world/acrossFace.tsfeatures/world/browser/favicon.tsfeatures/world/browser/headerWorld.tsfeatures/world/browser/mountHeaderWorld.tsfeatures/world/browser/mountWorlds.tsfeatures/world/browser/spinPlanet.tsfeatures/world/emptyWorld.tsfeatures/world/filters/colourise.tsfeatures/world/filters/fractalise.tsfeatures/world/filters/sea.tsfeatures/world/filters/temperatures.tsfeatures/world/generateWorld.tsfeatures/world/growWorld.tsfeatures/world/icosahedron.tsfeatures/world/latitudeOfVertex.tsfeatures/world/Mesh.tsfeatures/world/meshOf.tsfeatures/world/nearestVga.tsfeatures/world/PIPELINE.tsfeatures/world/radiusOfFace.tsfeatures/world/renderSphere.tsfeatures/world/SphereOptions.tsfeatures/world/SphereRaster.tsfeatures/world/subdivide.tsfeatures/world/TextCell.tsfeatures/world/textCells.tsfeatures/world/textWorldHtml.tsfeatures/world/turning.tsfeatures/world/vgaPalette.tsfeatures/world/withMesh.tsfeatures/world/World.tsfeatures/world/worldFeature.tsfeatures/world/WorldRecipe.tsfeatures/writings/essaysOn.tsfeatures/writings/talksOn.tsfeatures/writings/writingsFeature.tsfeatures/writings/writingsTool.tsplatform/page/APPEARANCE.tsplatform/page/bookSchema.tsplatform/page/browser/mountNavigation.tsplatform/page/declaredAppearance.tsplatform/page/fillStills.tsplatform/page/formerAddresses.tsplatform/page/isHere.tsplatform/page/placeholderDisc.tsplatform/page/renderDocument.tsplatform/page/renderMain.tsplatform/page/renderRedirect.tsplatform/shell/browser/mountTerminal.tsplatform/shell/CommandHistory.tsplatform/shell/commands/cat.tsplatform/shell/commands/cd.tsplatform/shell/commands/clear.tsplatform/shell/commands/find.tsplatform/shell/commands/grep.tsplatform/shell/commands/help.tsplatform/shell/commands/ls.tsplatform/shell/commands/pwd.tsplatform/shell/commands/siteCommands.tsplatform/shell/editLine.tsplatform/shell/parseCommandLine.tsplatform/shell/promptPath.tsplatform/shell/renderListing.tsplatform/shell/resolvePath.tsplatform/shell/Shell.tsplatform/shell/suggest.tsplatform/shell/typedLines.tsplatform/workbench/boundsOf.tsplatform/workbench/browser/BoardView.tsplatform/workbench/browser/controlFor.tsplatform/workbench/browser/FilesInBrowser.tsplatform/workbench/browser/KeptBlueprints.tsplatform/workbench/browser/morphInto.tsplatform/workbench/browser/mountWorkbench.tsplatform/workbench/browser/NodeView.tsplatform/workbench/browser/openExamples.tsplatform/workbench/browser/openHelp.tsplatform/workbench/browser/openKindMenu.tsplatform/workbench/browser/openPeek.tsplatform/workbench/browser/openTextPanel.tsplatform/workbench/browser/Workbench.tsplatform/workbench/Camera.tsplatform/workbench/cardsOf.tsplatform/workbench/EditHistory.tsplatform/workbench/hashOf.tsplatform/workbench/kindsFor.tsplatform/workbench/linkCodeOf.tsplatform/workbench/OpenBlueprint.tsplatform/workbench/pinAt.tsplatform/workbench/textOfLinkCode.tsplatform/agent/llmsTxtOf.tsplatform/agent/readTool.tsplatform/agent/routeAsked.tsplatform/agent/searchTool.tsplatform/agent/siteTools.tsplatform/browser/appsOf.tsplatform/browser/askProgram.tsplatform/browser/carriedLine.tsplatform/browser/countEvent.tsplatform/browser/el.tsplatform/browser/ModelContext.tsplatform/browser/modelContextHere.tsplatform/browser/mountApps.tsplatform/browser/mountPlayer.tsplatform/browser/mountProgram.tsplatform/browser/mountSlides.tsplatform/browser/offerTools.tsplatform/browser/PROGRAM_ASKED.tsplatform/browser/PROGRAM_RAN.tsplatform/browser/runningAt.tsplatform/browser/siteInBrowser.tsplatform/browser/sourceLineOf.tsplatform/browser/watchOnScreen.tsplatform/plugin/AgentTool.tsplatform/plugin/answerOf.tsplatform/plugin/Bench.tsplatform/plugin/benchOf.tsplatform/plugin/blueprintKitOf.tsplatform/plugin/blueprintTool.tsplatform/plugin/commandsOf.tsplatform/plugin/describeTool.tsplatform/plugin/Feature.tsplatform/plugin/programNode.tsplatform/plugin/programStill.tsplatform/plugin/programTool.tsplatform/plugin/Signal.tsplatform/plugin/stillsOf.tsplatform/plugin/toolsOf.tsplatform/flags/browser/BrowserFlags.tsplatform/flags/enterTrials.tsplatform/flags/Flag.tsplatform/flags/flagsCommand.tsplatform/flags/flagsInAddress.tsplatform/flags/FlagStore.tsplatform/program/aProgram.tsplatform/program/ChoiceParameter.tsplatform/program/commandLineOf.tsplatform/program/initialValues.tsplatform/program/inputSchemaOf.tsplatform/program/NumberParameter.tsplatform/program/Parameter.tsplatform/program/Program.tsplatform/program/programCommand.tsplatform/program/ProgramRun.tsplatform/program/readOptions.tsplatform/program/settleValues.tsplatform/program/sliderOf.tsplatform/program/Values.tsplatform/program/wordOf.tsplatform/blueprint/aKit.tsplatform/blueprint/Blueprint.tsplatform/blueprint/blueprintStill.tsplatform/blueprint/cellOrder.tsplatform/blueprint/columnsOf.tsplatform/blueprint/coreNodes.tsplatform/blueprint/coreTypes.tsplatform/blueprint/dialsOf.tsplatform/blueprint/duplicated.tsplatform/blueprint/evaluateBlueprint.tsplatform/blueprint/Evaluation.tsplatform/blueprint/examplesOf.tsplatform/blueprint/fitOf.tsplatform/blueprint/fits.tsplatform/blueprint/footOf.tsplatform/blueprint/formulaOf.tsplatform/blueprint/freshId.tsplatform/blueprint/kitOf.tsplatform/blueprint/movedBy.tsplatform/blueprint/NODE.tsplatform/blueprint/NodeKind.tsplatform/blueprint/nodes/barsNode.tsplatform/blueprint/nodes/cellLabel.tsplatform/blueprint/nodes/correlationNode.tsplatform/blueprint/nodes/creditLines.tsplatform/blueprint/nodes/dialNode.tsplatform/blueprint/nodes/formulaNode.tsplatform/blueprint/nodes/groupNode.tsplatform/blueprint/nodes/heatmapNode.tsplatform/blueprint/nodes/histogramNode.tsplatform/blueprint/nodes/inOrderOf.tsplatform/blueprint/nodes/joinNode.tsplatform/blueprint/nodes/keepNode.tsplatform/blueprint/nodes/linesNode.tsplatform/blueprint/nodes/mergedCredits.tsplatform/blueprint/nodes/noteNode.tsplatform/blueprint/nodes/numericPairs.tsplatform/blueprint/nodes/readoutNode.tsplatform/blueprint/nodes/scatterNode.tsplatform/blueprint/nodes/seasonNode.tsplatform/blueprint/nodes/showTableNode.tsplatform/blueprint/nodes/sortNode.tsplatform/blueprint/nodes/stackNode.tsplatform/blueprint/nodes/summaryNode.tsplatform/blueprint/nodes/topNode.tsplatform/blueprint/nodes/trendNode.tsplatform/blueprint/nodes/yourDataNode.tsplatform/blueprint/nodeShapeOf.tsplatform/blueprint/numberSaid.tsplatform/blueprint/optionalRead.tsplatform/blueprint/paint/barPlot.tsplatform/blueprint/paint/heatPlot.tsplatform/blueprint/paint/legendOf.tsplatform/blueprint/paint/linePlot.tsplatform/blueprint/paint/PLOT.tsplatform/blueprint/paint/plotFrame.tsplatform/blueprint/paint/plotSvg.tsplatform/blueprint/paint/readoutMarkup.tsplatform/blueprint/paint/scaleOf.tsplatform/blueprint/paint/scatterPlot.tsplatform/blueprint/paint/tableMarkup.tsplatform/blueprint/parseBlueprint.tsplatform/blueprint/peekOf.tsplatform/blueprint/Pending.tsplatform/blueprint/pickColumn.tsplatform/blueprint/PinType.tsplatform/blueprint/printBlueprint.tsplatform/blueprint/ranked.tsplatform/blueprint/renderBlueprintSvg.tsplatform/blueprint/renderBoard.tsplatform/blueprint/resolvedEditor.tsplatform/blueprint/ROW_TESTS.tsplatform/blueprint/saidBy.tsplatform/blueprint/suggestionsFor.tsplatform/blueprint/summaryOf.tsplatform/blueprint/Table.tsplatform/blueprint/tag.tsplatform/blueprint/tidyBlueprint.tsplatform/blueprint/wirePath.tsplatform/blueprint/wireRefused.tsplatform/blueprint/withDial.tsplatform/blueprint/withNext.tsplatform/blueprint/withNode.tsplatform/blueprint/withoutNodes.tsplatform/blueprint/withoutWires.tsplatform/blueprint/withTitle.tsplatform/blueprint/withValue.tsplatform/blueprint/withWire.tsplatform/data/answersOf.tsplatform/data/dayAndMonthOf.tsplatform/data/layeredJson.tsplatform/data/missingYears.tsplatform/data/readRunning.tsplatform/data/RefreshPorts.tsplatform/data/refreshRunning.tsplatform/data/refreshSource.tsplatform/data/renderSourceLine.tsplatform/data/RunningYear.tsplatform/data/runningYearOf.tsplatform/data/SEASON_ORDER.tsplatform/data/seasonOf.tsplatform/data/socrataUrl.tsplatform/data/withSoFar.tsplatform/data/YearlySource.tsplatform/command/Command.tsplatform/command/Outcome.tsplatform/command/plainTextOf.tsplatform/markdown/escapeHtml.tsplatform/markdown/flow/layoutFlow.tsplatform/markdown/flow/parseFlow.tsplatform/markdown/flow/renderFlow.tsplatform/markdown/highlight.tsplatform/markdown/plainLineOf.tsplatform/markdown/renderBars.tsplatform/markdown/renderInline.tsplatform/markdown/renderMarkdown.tsplatform/markdown/renderMath.tsplatform/markdown/slides/readSlides.tsplatform/markdown/slides/renderSlides.tsplatform/markdown/slides/slidesPlayback.tsplatform/markdown/slides/typingSteps.tsplatform/markdown/slugOf.tsplatform/markdown/unescapeHtml.tsplatform/charts/barChart.tsplatform/charts/CHART.tsplatform/charts/chartFrame.tsplatform/charts/ChartLabels.tsplatform/charts/fixed.tsplatform/charts/lineChart.tsplatform/charts/niceTicks.tsplatform/charts/Series.tsplatform/charts/yearBars.tsplatform/charts/yearFrame.tsplatform/charts/yearLine.tsplatform/testing/reported.tsplatform/testing/runTestFile.tsplatform/testing/TestRun.tsplatform/analytics/eventName.tsplatform/content/nameOf.tsplatform/content/Page.tsplatform/content/pageShowing.tsplatform/content/parentOf.tsplatform/content/parseFrontMatter.tsplatform/content/routeOf.tsplatform/content/Site.tsplatform/random/randomOf.ts
079ed30 13 October 2026 — A module of the LCARS display is moved by hand, the last of what David said it lacked: carried up or down its column onto another row, where what stood there changes places with it, the rest making room as it goes and a mark showing where it would land. Its column it keeps, since that says what comes before what, and the flow says it. Moving one module among others that stood where the layout wished would move nothing — each stands level with what feeds it, so they would all follow — so from the first move every module stays where it stood, and the display only finds a place for what is new, around them; Tidy hands the layout back. A move is a step Undo takes back, though the blueprint is the same before and after: where modules were put is kept beside each state of it while the page is open, and not with the reader's version nor in a link, since the text of a blueprint says nothing of it. Alt and an arrow move the module chosen; a finger on a module still moves the page. The schematic says of itself where its rows are and which each module stands on, so a hand on it is read against what is drawn. And what the display asks when a conduit could be run more ways than one is worded in a function of its own, tested without a page
781 files in 52 boxes, 428 tests · 654 arrows between boxes, 853 of all 2234 onto a type · a test reaches 567 of the 710 files with something to test · no boxes in a circle
filesarrows between boxes

Where the changes went

8 Sep, a sweep: The folders say what the site is, not what kind of file each one holds27 Sep, a sweep: The architecture is read by the compiler: a graph of the source, with whether each arrow needs a value or only a type, now the one architecture.test reads, and two new rules on it — no boxes in a circle, one value exported a file. The circle between plugin and program is broken, and eighteen files that exported more than one value are one eachsrcmain.tsmain.ts: 18 changes, 1 file writtenfeaturesworldfeatures/world: 47 changes, 33 files writtendeveloper-meetingsfeatures/developer-meetings: 9 changes, 7 files writtentechnical-debtfeatures/technical-debt: 4 changes, 3 files writtenthemefeatures/theme: 13 changes, 8 files writtenallFeatures.tsfeatures/allFeatures.ts: 28 changes, 1 file writtenskyfeatures/sky: 3 changes, 4 files writtenheadlinefeatures/headline: 8 changes, 7 files writtenair-qualityfeatures/air-quality: 24 changes, 28 files writtenweatherfeatures/weather: 29 changes, 35 files writtennext-wordfeatures/next-word: 0 changes, 11 files writtenrocketfeatures/rocket: 8 changes, 16 files writtenpackagesfeatures/packages: 0 changes, 8 files writtenthesis-resultsfeatures/thesis-results: 4 changes, 4 files writtenadventurefeatures/adventure: 12 changes, 14 files writtenpost-testsfeatures/post-tests: 0 changes, 6 files writtenfish-marketfeatures/fish-market: 2 changes, 21 files writtenlagoonfeatures/lagoon: 0 changes, 15 files writtenmazefeatures/maze: 0 changes, 12 files writtenfirst-networkfeatures/first-network: 5 changes, 11 files writtenfibergochifeatures/fibergochi: 13 changes, 9 files writtenportfoliofeatures/portfolio: 2 changes, 1 file writtenarchitecturefeatures/architecture: 98 changes, 150 files writtenstep-namesfeatures/step-names: 1 change, 7 files writtenbowling-katafeatures/bowling-kata: 6 changes, 17 files writtentests-as-examplesfeatures/tests-as-examples: 0 changes, 8 files writtengherkin-geniefeatures/gherkin-genie: 3 changes, 11 files writtensmall-stepsfeatures/small-steps: 1 change, 7 files writtenguess-the-rulefeatures/guess-the-rule: 0 changes, 6 files writtenwritingsfeatures/writings: 0 changes, 4 files writtenrecipesfeatures/recipes: 0 changes, 3 files writtenseafeatures/sea: 0 changes, 13 files writtenbarcelona-seriesfeatures/barcelona-series: 8 changes, 13 files writtensearchfeatures/search: 4 changes, 14 files writtenlcarsfeatures/lcars: 14 changes, 15 files writtenplatformcontentplatform/content: 9 changes, 7 files writtenmarkdownplatform/markdown: 30 changes, 16 files writtenpageplatform/page: 33 changes, 11 files writtencommandplatform/command: 7 changes, 3 files writtenshellplatform/shell: 55 changes, 19 files writtenbrowserplatform/browser: 17 changes, 18 files writtenchartsplatform/charts: 14 changes, 11 files writtenpluginplatform/plugin: 25 changes, 15 files writtendataplatform/data: 9 changes, 16 files writtenrandomplatform/random: 0 changes, 1 file writtenprogramplatform/program: 11 changes, 15 files writtenflagsplatform/flags: 10 changes, 6 files writtenanalyticsplatform/analytics: 0 changes, 1 file writtentestingplatform/testing: 0 changes, 3 files writtenagentplatform/agent: 1 change, 5 files writtenblueprintplatform/blueprint: 39 changes, 88 files writtenworkbenchplatform/workbench: 26 changes, 23 files writtengonethe files that are gone: 21 changes, 33 files written7 Sep8 Sep12 Sep20 Sep22 Sep23 Sep25 Sep28 Sep29 Sep1 Oct5 Oct7 Oct8 Oct10 Oct

one file changedtwofoureight or morea file writtena sweep, over 30 files at once

209 commits, from 7 September to 13 October 2026: 671 changes to files that ship, and 814 files written.

Each row is a box as it stands now, a folder of the frame or a feature, holding its files over their whole lives, from before they moved there too; the files that are gone have a row of their own. Each column is a commit. Read across, the features come in one after another, each written in a burst and then mostly left alone, while the frame under them keeps being touched. Read down, a column shaded from top to bottom is a sweep: one commit that changed more than thirty files at once. Point at a cell for what its commit did there.

Written, then left alone

The first thing the history says is how little changes. Most files are written once and not touched again, and a file is likeliest to change in the commits right after the one that wrote it.

50 of 7996.3%158 of 7917.3%262 of 15753.9%3–481 of 30882.6%5–858 of 60091%9–16106 of 113530.9%17–3292 of 178480.5%33–64121 of 227660.5%65–12843 of 77280.6%129–208its age: the commits since the one that wrote it
489 of the 781 files that ship have not changed since the commit that wrote them. A file changed in 6.8% of the first two commits it lived through, and in 0.6% of those after its eighth.

A file is hottest just after it is written, while what it has to do is still being settled. Then it cools, and stays cool.

The files that never settle

Some files never cool. They are not the young ones.

filechangeslinestests runits life, commit by commit
features/allFeatures.ts2879100%
main.ts181040%
platform/page/renderDocument.ts16152100%
platform/shell/browser/mountTerminal.ts1525763%
features/world/browser/mountWorlds.ts122078%
platform/markdown/renderMarkdown.ts12196100%
platform/plugin/Feature.ts1182100%
platform/workbench/browser/Workbench.ts1088485%
features/architecture/browser/ArchitectureScene.ts95353%
features/architecture/browser/mountArchitecture.ts93687%
platform/markdown/renderInline.ts8111100%
platform/page/browser/mountNavigation.ts88396%
The 12 files changed most, each one's life on the same line of commits, from the first to the last: a dot where it was written, and a mark for every commit that changed it. 1 of them has no line a test runs.

Adam Tornhill calls a file that changes often and is also large, its lines standing in for how complex it is, a hotspot (Your Code as a Crime Scene, 2015), and starts there: the table gives both. When this page was written, on 28 September 2026, most of the files at its top were ones every feature, or every page, passes through: the list the features are added to, which changes because that is how the site grows; the composition root; the page every page is written into; the terminal that takes it over in the browser. A hotspot that no test runs is where a change most easily breaks something nobody sees.

How far a change travels

When a file changes, what needs it may have to change with it, and what needs that, and so on: the arrows are the roads a change can take. How far they let it go is a property of the design, which MacCormack, Rusnak and Baldwin measured as its propagation cost (2006): the share of the source a change to one file could reach, on average. How far changes did go is another question, which the history can only half answer: two files changed in one commit changed together, and it cannot say which moved the other. What it can say is how often a file changed with something it needs, near or far. At every commit, each file is counted by how far below it, in what it needs or in what that needs, the nearest other change was, and by whether it changed too.

a file it needs changed19% · 252 of 1349two arrows down2.3% · 22 of 938three3.1% · 6 of 191four or more4.3% · 3 of 70nothing it needs changed0.5% · 302 of 61177
In theory, a change to one file can reach 1.6% of the source, on average: itself, what needs it, and what needs that, as far as the arrows go. In the history, of the times something a file needs changed, the file changed too in 19%; when the nearest change was two arrows down, in 2.3%; when nothing it needs changed, in 0.5%.

Files joined by an arrow change together far more often than files that are not, and much less often two arrows apart than one. The blast radius drawn on the picture of how this site is built, with its reach set to all, is how far a change could go, not how far changes went.

Standing on moving ground

A file standing near files that change changes more often than one standing far from them, by as much as the figure above says for each distance. Added up over every commit, for each file, the share of files that changed where it stood is how many changes its ground would lead one to expect: its exposure. It says where a file stood, not what moved it. Set against what it did:

as its ground would lead one to expectplatform/content/Page.ts: 1 changes, 0.9 from its groundplatform/content/Site.ts: 1 changes, 1.1 from its groundplatform/content/parseFrontMatter.ts: 0 changes, 0.9 from its groundplatform/content/routeOf.ts: 0 changes, 0.9 from its groundplatform/markdown/escapeHtml.ts: 0 changes, 0.9 from its groundplatform/markdown/renderInline.ts: 7 changes, 0.9 from its groundplatform/markdown/renderMarkdown.ts: 10 changes, 2.9 from its groundfeatures/world/World.ts: 2 changes, 1.5 from its groundfeatures/world/generateWorld.ts: 3 changes, 2.2 from its groundfeatures/world/renderSphere.ts: 3 changes, 1.5 from its groundplatform/page/renderDocument.ts: 15 changes, 2.1 from its groundmain.ts: 17 changes, 14.6 from its groundfeatures/world/browser/spinPlanet.ts: 4 changes, 2.1 from its groundfeatures/world/WorldRecipe.ts: 0 changes, 0.9 from its groundfeatures/world/growWorld.ts: 1 changes, 1.6 from its groundplatform/command/Command.ts: 1 changes, 1.6 from its groundplatform/shell/CommandHistory.ts: 1 changes, 0.9 from its groundplatform/command/Outcome.ts: 3 changes, 0.9 from its groundplatform/shell/Shell.ts: 2 changes, 2.5 from its groundplatform/shell/commands/cat.ts: 3 changes, 3 from its groundplatform/shell/commands/cd.ts: 3 changes, 1.1 from its groundplatform/shell/commands/clear.ts: 1 changes, 1.1 from its groundplatform/shell/commands/help.ts: 4 changes, 1.1 from its groundplatform/shell/commands/ls.ts: 6 changes, 1.6 from its groundplatform/shell/commands/pwd.ts: 1 changes, 1.1 from its groundplatform/shell/parseCommandLine.ts: 0 changes, 0.9 from its groundplatform/shell/promptPath.ts: 0 changes, 0.9 from its groundplatform/shell/resolvePath.ts: 0 changes, 0.9 from its groundfeatures/developer-meetings/simulateMeetings.ts: 0 changes, 1.1 from its groundfeatures/technical-debt/simulateTechnicalDebt.ts: 0 changes, 0.9 from its groundfeatures/developer-meetings/summariseMeetings.ts: 0 changes, 1.1 from its groundplatform/page/bookSchema.ts: 0 changes, 1.1 from its groundplatform/page/renderMain.ts: 3 changes, 2.9 from its groundfeatures/developer-meetings/browser/mountDeveloperMeetings.ts: 2 changes, 1.4 from its groundfeatures/world/browser/mountWorlds.ts: 10 changes, 1.9 from its groundplatform/charts/barChart.ts: 2 changes, 1.3 from its groundplatform/charts/lineChart.ts: 2 changes, 0.9 from its groundplatform/browser/el.ts: 0 changes, 0.9 from its groundfeatures/world/browser/favicon.ts: 3 changes, 1.1 from its groundfeatures/world/browser/headerWorld.ts: 0 changes, 0.9 from its groundplatform/page/browser/mountNavigation.ts: 6 changes, 2.1 from its groundplatform/browser/siteInBrowser.ts: 0 changes, 1.1 from its groundplatform/shell/browser/mountTerminal.ts: 14 changes, 2.7 from its groundfeatures/theme/browser/settleTheme.ts: 2 changes, 0.9 from its groundfeatures/world/SphereOptions.ts: 0 changes, 0.8 from its groundfeatures/world/SphereRaster.ts: 0 changes, 0.8 from its groundplatform/browser/watchOnScreen.ts: 0 changes, 0.8 from its groundfeatures/allFeatures.ts: 27 changes, 8.3 from its groundfeatures/developer-meetings/developerMeetingsFeature.ts: 0 changes, 3.3 from its groundfeatures/technical-debt/technicalDebtFeature.ts: 1 changes, 3.2 from its groundfeatures/theme/Theme.ts: 1 changes, 1 from its groundfeatures/theme/ThemeChoice.ts: 1 changes, 0.8 from its groundfeatures/theme/browser/BrowserTheme.ts: 2 changes, 1 from its groundfeatures/theme/browser/mountThemeToggle.ts: 0 changes, 0.8 from its groundfeatures/theme/themeCommand.ts: 5 changes, 1.4 from its groundfeatures/theme/themeFeature.ts: 1 changes, 3.9 from its groundfeatures/world/browser/mountHeaderWorld.ts: 1 changes, 1.1 from its groundfeatures/world/worldFeature.ts: 2 changes, 3.5 from its groundplatform/browser/mountApps.ts: 1 changes, 3.1 from its groundplatform/page/declaredAppearance.ts: 0 changes, 1 from its groundplatform/plugin/Feature.ts: 11 changes, 3 from its groundplatform/shell/commands/siteCommands.ts: 2 changes, 3 from its groundfeatures/sky/browser/Starfield.ts: 1 changes, 1 from its groundfeatures/sky/browser/followTurning.ts: 1 changes, 1 from its groundfeatures/sky/skyFeature.ts: 1 changes, 3.2 from its groundfeatures/world/turning.ts: 1 changes, 1 from its groundplatform/plugin/Signal.ts: 1 changes, 0.8 from its groundplatform/shell/editLine.ts: 0 changes, 0.8 from its groundplatform/markdown/highlight.ts: 4 changes, 0.8 from its groundplatform/markdown/flow/layoutFlow.ts: 2 changes, 0.8 from its groundplatform/markdown/flow/parseFlow.ts: 0 changes, 0.8 from its groundplatform/markdown/flow/renderFlow.ts: 0 changes, 1.1 from its groundplatform/page/isHere.ts: 0 changes, 0.8 from its groundplatform/shell/suggest.ts: 0 changes, 0.8 from its groundfeatures/world/TextCell.ts: 0 changes, 0.7 from its groundfeatures/world/nearestVga.ts: 0 changes, 0.7 from its groundfeatures/world/textCells.ts: 0 changes, 0.7 from its groundfeatures/world/textWorldHtml.ts: 0 changes, 0.7 from its groundfeatures/world/vgaPalette.ts: 0 changes, 0.7 from its groundplatform/page/placeholderDisc.ts: 0 changes, 0.7 from its groundfeatures/headline/browser/mountHeadline.ts: 2 changes, 0.7 from its groundfeatures/headline/headlineFeature.ts: 1 changes, 4 from its groundfeatures/headline/headlines.ts: 5 changes, 0.7 from its groundfeatures/headline/typewriterFrames.ts: 0 changes, 0.7 from its groundfeatures/headline/Headline.ts: 0 changes, 0.7 from its groundfeatures/headline/headlineRounds.ts: 0 changes, 0.7 from its groundfeatures/headline/shuffled.ts: 0 changes, 0.7 from its groundfeatures/air-quality/No2Station.ts: 0 changes, 0.7 from its groundfeatures/air-quality/airQualityFeature.ts: 3 changes, 3.6 from its groundfeatures/air-quality/no2Source.ts: 2 changes, 1.6 from its groundfeatures/air-quality/no2Stations.ts: 2 changes, 0.7 from its groundplatform/data/YearlySource.ts: 3 changes, 0.7 from its groundplatform/data/layeredJson.ts: 0 changes, 0.7 from its groundplatform/data/missingYears.ts: 0 changes, 0.7 from its groundplatform/data/refreshSource.ts: 2 changes, 1.2 from its groundplatform/data/socrataUrl.ts: 0 changes, 0.7 from its groundfeatures/air-quality/No2Selection.ts: 0 changes, 0.7 from its groundfeatures/air-quality/aStation.ts: 0 changes, 0.7 from its groundfeatures/air-quality/browser/mountNo2.ts: 4 changes, 1.5 from its groundfeatures/air-quality/no2AnnualMeans.ts: 0 changes, 0.7 from its groundfeatures/air-quality/no2Grid.ts: 0 changes, 0.7 from its groundfeatures/air-quality/no2ScaleTop.ts: 0 changes, 0.7 from its groundfeatures/air-quality/no2Still.ts: 2 changes, 3.3 from its groundfeatures/air-quality/renderNo2Figure.ts: 2 changes, 1.3 from its groundfeatures/air-quality/renderNo2Heatmap.ts: 1 changes, 0.7 from its groundfeatures/air-quality/renderNo2Years.ts: 3 changes, 1.2 from its groundfeatures/air-quality/tallies.ts: 0 changes, 0.7 from its groundfeatures/air-quality/wholeRecord.ts: 0 changes, 0.7 from its groundplatform/page/fillStills.ts: 2 changes, 0.7 from its groundfeatures/weather/WeatherStation.ts: 0 changes, 0.7 from its groundfeatures/weather/histogramOf.ts: 0 changes, 0.7 from its groundfeatures/weather/weatherFeature.ts: 5 changes, 3.3 from its groundfeatures/weather/weatherSource.ts: 2 changes, 1.2 from its groundfeatures/weather/weatherStations.ts: 0 changes, 0.7 from its groundfeatures/weather/weatherVariables.ts: 0 changes, 0.7 from its groundfeatures/weather/WeatherQuestion.ts: 0 changes, 0.7 from its groundfeatures/weather/aWeatherStation.ts: 0 changes, 0.7 from its groundfeatures/weather/countDays.ts: 0 changes, 0.7 from its groundfeatures/weather/daysPerYear.ts: 1 changes, 0.7 from its groundfeatures/weather/twoHalves.ts: 0 changes, 0.7 from its groundplatform/charts/niceTicks.ts: 0 changes, 0.7 from its groundplatform/charts/yearBars.ts: 3 changes, 0.7 from its groundplatform/charts/yearFrame.ts: 0 changes, 0.7 from its groundplatform/charts/yearLine.ts: 0 changes, 1 from its groundfeatures/weather/browser/mountWeather.ts: 3 changes, 1.4 from its groundfeatures/weather/firstQuestion.ts: 1 changes, 0.7 from its groundfeatures/weather/questionInWords.ts: 0 changes, 0.7 from its groundfeatures/weather/renderDaysCalendar.ts: 0 changes, 0.9 from its groundfeatures/weather/renderWeatherFigure.ts: 3 changes, 1 from its groundfeatures/weather/weatherPresets.ts: 1 changes, 0.7 from its groundfeatures/weather/weatherStill.ts: 1 changes, 3.2 from its groundplatform/browser/sourceLineOf.ts: 1 changes, 1 from its groundplatform/data/renderSourceLine.ts: 2 changes, 0.7 from its groundfeatures/air-quality/no2Colour.ts: 0 changes, 0.7 from its groundfeatures/next-word/NextWordModel.ts: 0 changes, 0.7 from its groundfeatures/next-word/browser/mountNextWord.ts: 0 changes, 2.3 from its groundfeatures/next-word/closestWord.ts: 0 changes, 0.7 from its groundfeatures/next-word/nextWordFeature.ts: 0 changes, 2.3 from its groundfeatures/next-word/nextWordStill.ts: 0 changes, 2.3 from its groundfeatures/next-word/pickWord.ts: 0 changes, 0.7 from its groundfeatures/next-word/renderNextWord.ts: 0 changes, 0.7 from its groundfeatures/next-word/sentenceOf.ts: 0 changes, 0.7 from its groundfeatures/next-word/smallCorpus.ts: 0 changes, 0.7 from its groundfeatures/next-word/withTemperature.ts: 0 changes, 0.7 from its groundfeatures/next-word/wordsOf.ts: 0 changes, 0.7 from its groundfeatures/rocket/Ship.ts: 0 changes, 0.7 from its groundfeatures/rocket/browser/mountRocket.ts: 2 changes, 2.5 from its groundfeatures/rocket/destinations.ts: 2 changes, 0.7 from its groundfeatures/rocket/firstShip.ts: 0 changes, 0.7 from its groundfeatures/rocket/renderVoyages.ts: 1 changes, 1.2 from its groundfeatures/rocket/rocketFeature.ts: 1 changes, 2.9 from its groundfeatures/rocket/saidTime.ts: 0 changes, 0.7 from its groundfeatures/rocket/voyage.ts: 1 changes, 0.7 from its groundfeatures/packages/NpmDownloads.ts: 0 changes, 0.7 from its groundfeatures/packages/browser/mountPackages.ts: 0 changes, 0.9 from its groundfeatures/packages/npmPackages.ts: 0 changes, 0.7 from its groundfeatures/packages/npmSource.ts: 0 changes, 1.2 from its groundfeatures/packages/packageNotes.ts: 0 changes, 0.7 from its groundfeatures/packages/packagesFeature.ts: 0 changes, 2.3 from its groundfeatures/packages/packagesStill.ts: 0 changes, 2.7 from its groundfeatures/packages/renderPackages.ts: 0 changes, 0.7 from its groundplatform/page/formerAddresses.ts: 1 changes, 0.8 from its groundplatform/page/renderRedirect.ts: 0 changes, 0.6 from its groundfeatures/thesis-results/graphMatchingRuns.ts: 1 changes, 0.6 from its groundfeatures/thesis-results/renderRuns.ts: 1 changes, 0.8 from its groundfeatures/thesis-results/thesisResultsFeature.ts: 0 changes, 2.5 from its groundfeatures/rocket/browser/mountStarMap.ts: 0 changes, 1 from its groundfeatures/rocket/nearStars.ts: 0 changes, 0.6 from its groundfeatures/rocket/projectStars.ts: 0 changes, 0.6 from its groundfeatures/rocket/whereAt.ts: 0 changes, 0.8 from its groundplatform/markdown/renderBars.ts: 0 changes, 1.2 from its groundplatform/shell/commands/find.ts: 4 changes, 1 from its groundplatform/shell/commands/grep.ts: 2 changes, 0.8 from its groundfeatures/adventure/Adventure.ts: 2 changes, 0.6 from its groundfeatures/adventure/World.ts: 0 changes, 0.6 from its groundfeatures/adventure/adventureFeature.ts: 0 changes, 2.5 from its groundfeatures/adventure/adventureStill.ts: 0 changes, 2.6 from its groundfeatures/adventure/browser/mountAdventure.ts: 1 changes, 1 from its groundfeatures/adventure/originalWorld.ts: 0 changes, 0.6 from its groundfeatures/adventure/renderAdventure.ts: 2 changes, 1 from its groundfeatures/post-tests/browser/mountPostTests.ts: 0 changes, 0.6 from its groundfeatures/post-tests/compilePost.ts: 0 changes, 0.6 from its groundfeatures/post-tests/examplePosts.ts: 0 changes, 0.6 from its groundfeatures/post-tests/postTestsFeature.ts: 0 changes, 2.3 from its groundfeatures/post-tests/postTestsStill.ts: 0 changes, 2.3 from its groundfeatures/post-tests/renderCompiledPost.ts: 0 changes, 0.9 from its groundfeatures/adventure/englishWorld.ts: 0 changes, 0.6 from its groundfeatures/fish-market/Bidder.ts: 0 changes, 0.6 from its groundfeatures/fish-market/DutchAuction.ts: 1 changes, 0.6 from its groundfeatures/fish-market/Lot.ts: 0 changes, 0.6 from its groundfeatures/fish-market/Market.ts: 0 changes, 0.6 from its groundfeatures/fish-market/Sale.ts: 0 changes, 0.6 from its groundfeatures/fish-market/Standing.ts: 0 changes, 0.6 from its groundfeatures/fish-market/browser/mountFishMarket.ts: 0 changes, 0.7 from its groundfeatures/fish-market/fishMarketFeature.ts: 0 changes, 2.2 from its groundfeatures/fish-market/fishMarketStill.ts: 0 changes, 2.4 from its groundfeatures/fish-market/fixedMargin.ts: 0 changes, 0.6 from its groundfeatures/fish-market/marketMargin.ts: 0 changes, 0.6 from its groundfeatures/fish-market/openAuction.ts: 0 changes, 0.7 from its groundfeatures/fish-market/ownBidder.ts: 0 changes, 0.6 from its groundfeatures/fish-market/ownBidderSource.ts: 0 changes, 0.6 from its groundfeatures/fish-market/planner.ts: 0 changes, 0.6 from its groundfeatures/fish-market/randomLots.ts: 0 changes, 0.6 from its groundfeatures/fish-market/renderFishMarket.ts: 1 changes, 0.7 from its groundfeatures/fish-market/theTable.ts: 0 changes, 0.6 from its groundfeatures/fish-market/vicente.ts: 0 changes, 0.6 from its groundfeatures/fish-market/wanda.ts: 0 changes, 0.6 from its groundplatform/random/randomOf.ts: 0 changes, 0.6 from its groundfeatures/lagoon/Fisher.ts: 0 changes, 0.6 from its groundfeatures/lagoon/Round.ts: 0 changes, 0.6 from its groundfeatures/lagoon/Tournament.ts: 0 changes, 0.6 from its groundfeatures/lagoon/Week.ts: 0 changes, 0.6 from its groundfeatures/lagoon/alone.ts: 0 changes, 0.6 from its groundfeatures/lagoon/browser/mountLagoon.ts: 0 changes, 0.6 from its groundfeatures/lagoon/lagoonFeature.ts: 0 changes, 2.2 from its groundfeatures/lagoon/lagoonStill.ts: 0 changes, 2.2 from its groundfeatures/lagoon/ownFisher.ts: 0 changes, 0.6 from its groundfeatures/lagoon/ownFisherSource.ts: 0 changes, 0.6 from its groundfeatures/lagoon/playRound.ts: 0 changes, 0.6 from its groundfeatures/lagoon/renderLagoon.ts: 0 changes, 0.6 from its groundfeatures/lagoon/starters.ts: 0 changes, 0.6 from its groundfeatures/lagoon/theLagoon.ts: 0 changes, 0.6 from its groundfeatures/lagoon/titForTat.ts: 0 changes, 0.6 from its groundfeatures/fish-market/Turn.ts: 0 changes, 0.5 from its groundplatform/markdown/renderMath.ts: 0 changes, 0.5 from its groundfeatures/maze/Cell.ts: 0 changes, 0.5 from its groundfeatures/maze/FIRST.ts: 0 changes, 0.5 from its groundfeatures/maze/JavaRandom.ts: 0 changes, 0.5 from its groundfeatures/maze/Maze.ts: 0 changes, 0.5 from its groundfeatures/maze/OPEN.ts: 0 changes, 0.5 from its groundfeatures/maze/browser/mountMaze.ts: 0 changes, 0.5 from its groundfeatures/maze/describeWay.ts: 0 changes, 0.5 from its groundfeatures/maze/growMaze.ts: 0 changes, 0.5 from its groundfeatures/maze/mazeFeature.ts: 0 changes, 2.2 from its groundfeatures/maze/mazeStill.ts: 0 changes, 2.2 from its groundfeatures/maze/renderMaze.ts: 0 changes, 0.5 from its groundfeatures/maze/wayOut.ts: 0 changes, 0.5 from its groundfeatures/first-network/LetterReader.ts: 1 changes, 0.5 from its groundfeatures/first-network/Network.ts: 0 changes, 0.5 from its groundfeatures/first-network/browser/mountLetters.ts: 1 changes, 0.7 from its groundfeatures/first-network/firstNetworkFeature.ts: 2 changes, 2.4 from its groundfeatures/first-network/firstReader.ts: 1 changes, 0.7 from its groundfeatures/first-network/glyphs.ts: 0 changes, 0.5 from its groundfeatures/first-network/lettersStill.ts: 0 changes, 2.4 from its groundfeatures/first-network/renderLetters.ts: 0 changes, 0.7 from its groundfeatures/first-network/Shape.ts: 0 changes, 0.5 from its groundfeatures/first-network/readOwnShapes.ts: 0 changes, 0.5 from its groundfeatures/first-network/shapeProblem.ts: 0 changes, 0.5 from its groundfeatures/fibergochi/Fibergochi.ts: 2 changes, 0.9 from its groundfeatures/fibergochi/FibergochiState.ts: 1 changes, 0.5 from its groundfeatures/fibergochi/ODDS.ts: 0 changes, 0.5 from its groundfeatures/fibergochi/Sprite.ts: 2 changes, 0.5 from its groundfeatures/fibergochi/browser/mountFibergochi.ts: 4 changes, 0.9 from its groundfeatures/fibergochi/fibergochiFeature.ts: 0 changes, 2.9 from its groundfeatures/fibergochi/fibergochiStill.ts: 1 changes, 2.6 from its groundfeatures/fibergochi/readKept.ts: 1 changes, 0.7 from its groundfeatures/fibergochi/renderFibergochi.ts: 2 changes, 0.9 from its groundfeatures/technical-debt/technicalDebtProgram.ts: 2 changes, 0.7 from its groundplatform/browser/PROGRAM_ASKED.ts: 0 changes, 0.5 from its groundplatform/browser/appsOf.ts: 1 changes, 2.1 from its groundplatform/browser/askProgram.ts: 0 changes, 0.7 from its groundplatform/browser/mountProgram.ts: 2 changes, 2.1 from its groundplatform/plugin/commandsOf.ts: 1 changes, 2.1 from its groundplatform/plugin/stillsOf.ts: 2 changes, 2.4 from its groundplatform/program/Parameter.ts: 1 changes, 0.5 from its groundplatform/program/Program.ts: 1 changes, 0.7 from its groundplatform/program/ProgramRun.ts: 0 changes, 0.5 from its groundplatform/program/Values.ts: 1 changes, 0.5 from its groundplatform/program/aProgram.ts: 2 changes, 0.7 from its groundplatform/program/commandLineOf.ts: 1 changes, 0.9 from its groundplatform/program/initialValues.ts: 0 changes, 0.9 from its groundplatform/program/inputSchemaOf.ts: 1 changes, 0.7 from its groundplatform/program/programCommand.ts: 2 changes, 1 from its groundplatform/plugin/programStill.ts: 1 changes, 1.9 from its groundplatform/program/readOptions.ts: 0 changes, 0.5 from its groundplatform/program/settleValues.ts: 1 changes, 0.9 from its groundplatform/program/sliderOf.ts: 1 changes, 0.7 from its groundfeatures/rocket/rocketProgram.ts: 1 changes, 0.7 from its groundfeatures/rocket/saidSpeed.ts: 0 changes, 0.5 from its groundfeatures/rocket/saidTonnes.ts: 0 changes, 0.5 from its groundfeatures/rocket/shipOf.ts: 0 changes, 0.5 from its groundplatform/browser/PROGRAM_RAN.ts: 0 changes, 0.5 from its groundplatform/program/ChoiceParameter.ts: 0 changes, 0.5 from its groundplatform/program/NumberParameter.ts: 0 changes, 0.5 from its groundplatform/program/wordOf.ts: 0 changes, 0.5 from its groundplatform/browser/ModelContext.ts: 2 changes, 0.5 from its groundplatform/browser/modelContextHere.ts: 0 changes, 0.8 from its groundplatform/browser/offerTools.ts: 6 changes, 1.8 from its groundplatform/content/pageShowing.ts: 1 changes, 0.5 from its groundplatform/command/plainTextOf.ts: 1 changes, 0.7 from its groundfeatures/portfolio/portfolioFeature.ts: 2 changes, 1.7 from its groundplatform/flags/browser/BrowserFlags.ts: 2 changes, 0.6 from its groundplatform/flags/Flag.ts: 2 changes, 0.5 from its groundplatform/flags/FlagStore.ts: 1 changes, 0.5 from its groundplatform/flags/flagsCommand.ts: 3 changes, 1 from its groundplatform/flags/flagsInAddress.ts: 1 changes, 0.8 from its groundfeatures/adventure/renderMap.ts: 1 changes, 0.4 from its groundfeatures/adventure/renderSeen.ts: 1 changes, 0.6 from its groundfeatures/air-quality/flatSums.ts: 0 changes, 0.4 from its groundfeatures/architecture/SourceGraph.ts: 1 changes, 0.4 from its groundfeatures/architecture/architectureFeature.ts: 5 changes, 3.8 from its groundfeatures/architecture/boxCycles.ts: 1 changes, 0.6 from its groundfeatures/architecture/boxOf.ts: 0 changes, 0.4 from its groundfeatures/architecture/importsOf.ts: 0 changes, 0.4 from its groundfeatures/architecture/readGraph.ts: 1 changes, 0.6 from its groundfeatures/architecture/readSources.ts: 0 changes, 0.6 from its groundfeatures/architecture/valueExportsOf.ts: 0 changes, 0.4 from its groundfeatures/developer-meetings/WORK_WEEK.ts: 1 changes, 0.4 from its groundfeatures/thesis-results/machines.ts: 0 changes, 0.4 from its groundfeatures/weather/steadyYear.ts: 0 changes, 0.4 from its groundfeatures/world/Mesh.ts: 0 changes, 0.4 from its groundfeatures/world/PIPELINE.ts: 0 changes, 0.4 from its groundfeatures/world/acrossFace.ts: 0 changes, 0.4 from its groundfeatures/world/emptyWorld.ts: 0 changes, 0.4 from its groundfeatures/world/filters/colourise.ts: 0 changes, 0.4 from its groundfeatures/world/filters/fractalise.ts: 0 changes, 0.4 from its groundfeatures/world/filters/sea.ts: 0 changes, 0.4 from its groundfeatures/world/filters/temperatures.ts: 0 changes, 0.4 from its groundfeatures/world/icosahedron.ts: 0 changes, 0.4 from its groundfeatures/world/latitudeOfVertex.ts: 0 changes, 0.4 from its groundfeatures/world/meshOf.ts: 0 changes, 0.4 from its groundfeatures/world/radiusOfFace.ts: 0 changes, 0.4 from its groundfeatures/world/subdivide.ts: 0 changes, 0.4 from its groundfeatures/world/withMesh.ts: 0 changes, 0.4 from its groundplatform/charts/CHART.ts: 0 changes, 0.4 from its groundplatform/charts/ChartLabels.ts: 0 changes, 0.4 from its groundplatform/charts/Series.ts: 0 changes, 0.4 from its groundplatform/charts/chartFrame.ts: 0 changes, 0.4 from its groundplatform/charts/fixed.ts: 0 changes, 0.4 from its groundplatform/content/nameOf.ts: 0 changes, 0.4 from its groundplatform/content/parentOf.ts: 0 changes, 0.4 from its groundplatform/markdown/slugOf.ts: 0 changes, 0.4 from its groundplatform/page/APPEARANCE.ts: 0 changes, 0.4 from its groundfeatures/developer-meetings/browser/heatGrid.ts: 0 changes, 0.4 from its groundfeatures/developer-meetings/featureSizeScale.ts: 0 changes, 0.4 from its groundplatform/browser/carriedLine.ts: 0 changes, 0.4 from its groundplatform/shell/typedLines.ts: 0 changes, 0.4 from its groundfeatures/architecture/Body.ts: 0 changes, 0.4 from its groundfeatures/architecture/History.ts: 4 changes, 0.4 from its groundfeatures/architecture/Layout.ts: 1 changes, 0.4 from its groundfeatures/architecture/Metrics.ts: 1 changes, 0.4 from its groundfeatures/architecture/Snapshot.ts: 1 changes, 0.4 from its groundfeatures/architecture/architectureStill.ts: 1 changes, 2.3 from its groundfeatures/architecture/browser/ArchitectureScene.ts: 9 changes, 1.2 from its groundfeatures/architecture/browser/mountArchitecture.ts: 9 changes, 4.1 from its groundfeatures/architecture/decodeHistory.ts: 2 changes, 1.2 from its groundfeatures/architecture/encodeHistory.ts: 4 changes, 1.2 from its groundfeatures/architecture/graphOf.ts: 1 changes, 0.6 from its groundfeatures/architecture/layoutArchitecture.ts: 3 changes, 0.8 from its groundfeatures/architecture/metricsOf.ts: 1 changes, 0.8 from its groundfeatures/architecture/reachedByTests.ts: 0 changes, 0.6 from its groundfeatures/architecture/renderArchitectureCaption.ts: 3 changes, 1.2 from its groundfeatures/architecture/renderArchitectureFigure.ts: 1 changes, 1.7 from its groundfeatures/architecture/renderArchitectureSvg.ts: 1 changes, 0.6 from its groundfeatures/architecture/renderMetricsSparks.ts: 0 changes, 0.6 from its groundfeatures/architecture/springTowards.ts: 0 changes, 0.4 from its groundfeatures/architecture/tangleStep.ts: 1 changes, 0.4 from its groundfeatures/architecture/onlyTypes.ts: 0 changes, 0.4 from its groundfeatures/architecture/Coverage.ts: 0 changes, 0.4 from its groundfeatures/architecture/coverageOf.ts: 0 changes, 0.4 from its groundfeatures/adventure/ADVENTURE_ICONS.ts: 0 changes, 0.4 from its groundfeatures/adventure/Charted.ts: 0 changes, 0.4 from its groundfeatures/adventure/LIFE.ts: 0 changes, 0.4 from its groundfeatures/adventure/pixelIcon.ts: 0 changes, 0.4 from its groundfeatures/theme/browser/countThemeAtStart.ts: 0 changes, 0.4 from its groundplatform/analytics/eventName.ts: 0 changes, 0.4 from its groundplatform/browser/countEvent.ts: 0 changes, 0.4 from its groundplatform/flags/enterTrials.ts: 1 changes, 0.6 from its groundfeatures/step-names/EXAMPLE_POST.ts: 0 changes, 0.4 from its groundfeatures/step-names/StepMethod.ts: 0 changes, 0.4 from its groundfeatures/step-names/browser/mountStepNames.ts: 0 changes, 0.4 from its groundfeatures/step-names/renderStepCode.ts: 0 changes, 0.6 from its groundfeatures/step-names/stepMethodOf.ts: 0 changes, 0.4 from its groundfeatures/step-names/stepNamesFeature.ts: 1 changes, 1.5 from its groundfeatures/step-names/stepNamesStill.ts: 0 changes, 1.5 from its groundfeatures/bowling-kata/KATA_STEPS.ts: 1 changes, 0.4 from its groundfeatures/bowling-kata/KataStep.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/bowlingKataFeature.ts: 1 changes, 1.7 from its groundfeatures/bowling-kata/bowlingKataStill.ts: 0 changes, 2 from its groundfeatures/bowling-kata/browser/mountBowlingKata.ts: 1 changes, 0.9 from its groundfeatures/bowling-kata/renderKataStep.ts: 2 changes, 0.6 from its groundfeatures/bowling-kata/renderKataStrip.ts: 1 changes, 0.4 from its groundfeatures/bowling-kata/runKata.ts: 0 changes, 0.4 from its groundfeatures/tests-as-examples/DISPATCHERS.ts: 0 changes, 0.4 from its groundfeatures/tests-as-examples/DISPATCHER_TESTS.ts: 0 changes, 0.4 from its groundfeatures/tests-as-examples/Dispatcher.ts: 0 changes, 0.4 from its groundfeatures/tests-as-examples/browser/mountTestsAsExamples.ts: 0 changes, 0.4 from its groundfeatures/tests-as-examples/renderDispatcherRun.ts: 0 changes, 0.6 from its groundfeatures/tests-as-examples/runDispatcherTests.ts: 0 changes, 0.4 from its groundfeatures/tests-as-examples/testsAsExamplesFeature.ts: 0 changes, 1.5 from its groundfeatures/tests-as-examples/testsAsExamplesStill.ts: 0 changes, 1.5 from its groundplatform/testing/TestRun.ts: 0 changes, 0.4 from its groundplatform/testing/reported.ts: 0 changes, 0.4 from its groundplatform/testing/runTestFile.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/kataStepTitle.ts: 0 changes, 0.4 from its groundfeatures/gherkin-genie/EXAMPLE_FEATURE.ts: 0 changes, 0.4 from its groundfeatures/gherkin-genie/EXAMPLE_STEPS.ts: 0 changes, 0.4 from its groundfeatures/gherkin-genie/browser/mountGherkinGenie.ts: 1 changes, 0.6 from its groundfeatures/gherkin-genie/genieStepOf.ts: 0 changes, 0.4 from its groundfeatures/gherkin-genie/gherkinGenieFeature.ts: 0 changes, 1.6 from its groundfeatures/gherkin-genie/gherkinGenieStill.ts: 0 changes, 1.6 from its groundfeatures/gherkin-genie/readFeature.ts: 0 changes, 0.4 from its groundfeatures/gherkin-genie/renderGenie.ts: 1 changes, 0.6 from its groundfeatures/gherkin-genie/renderGenieRun.ts: 1 changes, 0.4 from its groundfeatures/gherkin-genie/runGenie.ts: 0 changes, 0.4 from its groundfeatures/gherkin-genie/wishedSteps.ts: 0 changes, 0.4 from its groundfeatures/small-steps/SMALL_STEPS_LENGTH.ts: 0 changes, 0.4 from its groundfeatures/small-steps/browser/mountSmallSteps.ts: 0 changes, 0.7 from its groundfeatures/small-steps/randomSteps.ts: 0 changes, 0.4 from its groundfeatures/small-steps/renderSmallSteps.ts: 0 changes, 0.6 from its groundfeatures/small-steps/smallStepsFeature.ts: 0 changes, 1.5 from its groundfeatures/small-steps/smallStepsFrames.ts: 1 changes, 0.4 from its groundfeatures/small-steps/smallStepsStill.ts: 0 changes, 1.5 from its groundplatform/browser/mountPlayer.ts: 1 changes, 0.4 from its groundplatform/markdown/slides/readSlides.ts: 0 changes, 0.4 from its groundplatform/markdown/slides/typingSteps.ts: 1 changes, 0.4 from its groundplatform/browser/mountSlides.ts: 0 changes, 0.9 from its groundplatform/markdown/slides/renderSlides.ts: 0 changes, 0.6 from its groundplatform/markdown/slides/slidesPlayback.ts: 2 changes, 0.6 from its groundfeatures/bowling-kata/KATA_LESSONS.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/KataLesson.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/browser/mountKataFiveSteps.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/kataFiveStepsSlides.ts: 0 changes, 0.5 from its groundfeatures/bowling-kata/kataFiveStepsStill.ts: 0 changes, 1.5 from its groundfeatures/bowling-kata/kataLessonAt.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/renderKataFiveSteps.ts: 0 changes, 0.4 from its groundfeatures/bowling-kata/lineDiff.ts: 0 changes, 0.4 from its groundplatform/shell/renderListing.ts: 0 changes, 0.3 from its groundfeatures/architecture/radiiBy.ts: 2 changes, 0.3 from its groundfeatures/architecture/reachOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/sourceUrlOf.ts: 0 changes, 0.3 from its groundfeatures/guess-the-rule/GuessRound.ts: 0 changes, 0.3 from its groundfeatures/guess-the-rule/RULES.ts: 0 changes, 0.3 from its groundfeatures/guess-the-rule/browser/mountGuessTheRule.ts: 0 changes, 0.3 from its groundfeatures/guess-the-rule/guessTheRuleFeature.ts: 0 changes, 1.4 from its groundfeatures/guess-the-rule/guessTheRuleStill.ts: 0 changes, 1.4 from its groundfeatures/guess-the-rule/renderGuessTable.ts: 0 changes, 0.3 from its groundfeatures/architecture/Life.ts: 0 changes, 0.3 from its groundfeatures/architecture/SWEEP.ts: 0 changes, 0.3 from its groundfeatures/architecture/bandOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/breakablePath.ts: 0 changes, 0.3 from its groundfeatures/architecture/cascadeOf.ts: 3 changes, 0.9 from its groundfeatures/architecture/changeMatrixOf.ts: 1 changes, 0.3 from its groundfeatures/architecture/changeStills.ts: 2 changes, 2.7 from its groundfeatures/architecture/couplingsOf.ts: 0 changes, 0.7 from its groundfeatures/architecture/livesOf.ts: 1 changes, 0.7 from its groundfeatures/architecture/percent.ts: 0 changes, 0.3 from its groundfeatures/architecture/plural.ts: 0 changes, 0.3 from its groundfeatures/architecture/propagationCostOf.ts: 1 changes, 0.3 from its groundfeatures/architecture/readHistory.ts: 0 changes, 0.7 from its groundfeatures/architecture/renderCascadeFigure.ts: 2 changes, 0.9 from its groundfeatures/architecture/renderChangeMatrix.ts: 1 changes, 0.9 from its groundfeatures/architecture/renderChangeMatrixFigure.ts: 2 changes, 1.1 from its groundfeatures/architecture/renderCouplingsFigure.ts: 1 changes, 0.3 from its groundfeatures/architecture/renderHotspotsFigure.ts: 2 changes, 0.3 from its groundfeatures/architecture/renderRipplesFigure.ts: 1 changes, 0.7 from its groundfeatures/architecture/renderSettlingFigure.ts: 0 changes, 0.3 from its groundfeatures/architecture/renderStabilityFigure.ts: 1 changes, 0.5 from its groundfeatures/architecture/renderTestedChangesFigure.ts: 0 changes, 0.3 from its groundfeatures/architecture/ripplesOf.ts: 2 changes, 0.7 from its groundfeatures/architecture/settlingOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/stabilityOf.ts: 1 changes, 0.3 from its groundfeatures/architecture/testedChangesOf.ts: 0 changes, 0.7 from its groundfeatures/architecture/changesUpTo.ts: 1 changes, 0.3 from its groundfeatures/architecture/browser/changeApps.ts: 1 changes, 2.7 from its groundfeatures/architecture/browser/changesInBrowser.ts: 0 changes, 0.3 from its groundfeatures/architecture/browser/mountChangeFigure.ts: 0 changes, 2.3 from its groundfeatures/architecture/browser/mountChangePlayer.ts: 0 changes, 0.3 from its groundfeatures/architecture/browser/pointAtChangeMatrix.ts: 0 changes, 0.3 from its groundfeatures/architecture/browser/shownCommit.ts: 0 changes, 0.5 from its groundfeatures/architecture/changeFigures.ts: 5 changes, 1.4 from its groundfeatures/architecture/dayOf.ts: 0 changes, 0.7 from its groundfeatures/architecture/describeMatrixCell.ts: 0 changes, 0.7 from its groundfeatures/architecture/historyUpTo.ts: 0 changes, 0.5 from its groundfeatures/architecture/matrixCellsOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/matrixRowOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/renderShownCommit.ts: 0 changes, 0.7 from its groundfeatures/architecture/sweepsOf.ts: 0 changes, 0.5 from its groundfeatures/architecture/againstStabilityOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/betweennessOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/boxLinksOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/cascadeFrom.ts: 1 changes, 0.5 from its groundfeatures/architecture/communitiesOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/couplingOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/groundOf.ts: 1 changes, 0.5 from its groundfeatures/architecture/heatOf.ts: 1 changes, 0.3 from its groundfeatures/architecture/joinedBy.ts: 0 changes, 0.3 from its groundfeatures/architecture/lensesOf.ts: 2 changes, 0.7 from its groundfeatures/architecture/measuresOf.ts: 1 changes, 0.3 from its groundfeatures/architecture/modularityOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/pointedAt.ts: 0 changes, 0.7 from its groundfeatures/architecture/rampColour.ts: 0 changes, 0.3 from its groundfeatures/architecture/reachedByOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/standingsOf.ts: 0 changes, 0.5 from its groundfeatures/architecture/threadsOf.ts: 0 changes, 0.5 from its groundfeatures/architecture/undirectedOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/browser/mountCouplingFigure.ts: 0 changes, 0.3 from its groundfeatures/architecture/renderBridgesFigure.ts: 1 changes, 0.3 from its groundfeatures/architecture/renderCouplingFigure.ts: 0 changes, 0.3 from its groundfeatures/architecture/renderGroundFigure.ts: 1 changes, 0.5 from its groundfeatures/architecture/renderGroupsFigure.ts: 1 changes, 0.3 from its groundfeatures/architecture/renderReachFigure.ts: 0 changes, 0.3 from its groundfeatures/architecture/Cascade.ts: 0 changes, 0.3 from its groundfeatures/architecture/assortativityOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/clusteringOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/componentsOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/coresOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/fileHistoryOf.ts: 0 changes, 0.4 from its groundfeatures/architecture/heightsOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/networkOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/pageRankOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/pathsOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/positionOf.ts: 1 changes, 0.3 from its groundfeatures/architecture/renderLifeStrip.ts: 0 changes, 0.3 from its groundfeatures/architecture/stronglyConnectedOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/detailsOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/pointedSaid.ts: 0 changes, 0.3 from its groundfeatures/architecture/renderNetworkFigure.ts: 0 changes, 0.3 from its groundfeatures/architecture/COMPOSITION.ts: 0 changes, 0.3 from its groundfeatures/architecture/shapeOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/snapshotOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/unheldCouplingsOf.ts: 1 changes, 0.3 from its groundfeatures/sky/Turns.ts: 0 changes, 0.3 from its groundfeatures/architecture/renderRatchetFigure.ts: 1 changes, 0.3 from its groundfeatures/architecture/shapesOf.ts: 0 changes, 0.3 from its groundfeatures/architecture/ratchetHeldOf.ts: 0 changes, 0.2 from its groundfeatures/architecture/renderShapeReport.ts: 1 changes, 0.2 from its groundfeatures/architecture/mutantsOf.ts: 0 changes, 0.2 from its groundfeatures/architecture/editNoteOf.ts: 0 changes, 0.2 from its groundfeatures/architecture/browser/detailsPanel.ts: 0 changes, 0.2 from its groundfeatures/architecture/pointedArrowsOf.ts: 0 changes, 0.2 from its groundfeatures/architecture/renderUnrunReport.ts: 0 changes, 0.2 from its groundfeatures/architecture/unrunOf.ts: 0 changes, 0.2 from its groundplatform/agent/readTool.ts: 0 changes, 0.7 from its groundplatform/agent/routeAsked.ts: 0 changes, 0.2 from its groundplatform/agent/searchTool.ts: 1 changes, 0.7 from its groundplatform/agent/siteTools.ts: 0 changes, 0.7 from its groundplatform/markdown/plainLineOf.ts: 0 changes, 0.2 from its groundplatform/plugin/AgentTool.ts: 3 changes, 0.2 from its groundplatform/plugin/answerOf.ts: 0 changes, 0.7 from its groundplatform/plugin/describeTool.ts: 1 changes, 0.7 from its groundplatform/plugin/programTool.ts: 0 changes, 0.9 from its groundplatform/plugin/toolsOf.ts: 2 changes, 1.5 from its groundfeatures/writings/essaysOn.ts: 0 changes, 0.2 from its groundfeatures/writings/talksOn.ts: 0 changes, 0.2 from its groundfeatures/writings/writingsFeature.ts: 0 changes, 0.9 from its groundfeatures/writings/writingsTool.ts: 0 changes, 0.6 from its groundplatform/agent/llmsTxtOf.ts: 0 changes, 0.6 from its groundplatform/browser/runningAt.ts: 0 changes, 0.2 from its groundplatform/data/RunningYear.ts: 0 changes, 0.2 from its groundplatform/data/readRunning.ts: 0 changes, 0.2 from its groundplatform/data/refreshRunning.ts: 2 changes, 0.5 from its groundplatform/data/runningYearOf.ts: 0 changes, 0.2 from its groundplatform/data/withSoFar.ts: 0 changes, 0.2 from its groundplatform/data/dayAndMonthOf.ts: 0 changes, 0.2 from its groundfeatures/weather/askedQuestion.ts: 1 changes, 0.4 from its groundfeatures/weather/hotNightsTool.ts: 2 changes, 0.7 from its groundfeatures/weather/recordOf.ts: 0 changes, 0.2 from its groundfeatures/air-quality/askedNo2.ts: 0 changes, 0.2 from its groundfeatures/air-quality/no2Tool.ts: 0 changes, 0.3 from its groundplatform/blueprint/Blueprint.ts: 0 changes, 0.5 from its groundplatform/blueprint/Evaluation.ts: 0 changes, 0.5 from its groundplatform/blueprint/NODE.ts: 1 changes, 0.2 from its groundplatform/blueprint/NodeKind.ts: 2 changes, 0.2 from its groundplatform/blueprint/Pending.ts: 0 changes, 0.2 from its groundplatform/blueprint/PinType.ts: 0 changes, 0.2 from its groundplatform/blueprint/Table.ts: 2 changes, 0.2 from its groundplatform/blueprint/coreNodes.ts: 1 changes, 1.6 from its groundplatform/blueprint/coreTypes.ts: 0 changes, 0.5 from its groundplatform/blueprint/duplicated.ts: 0 changes, 0.2 from its groundplatform/blueprint/evaluateBlueprint.ts: 0 changes, 0.5 from its groundplatform/blueprint/fitOf.ts: 0 changes, 0.2 from its groundplatform/blueprint/fits.ts: 0 changes, 0.2 from its groundplatform/blueprint/formulaOf.ts: 0 changes, 0.5 from its groundplatform/blueprint/freshId.ts: 0 changes, 0.2 from its groundplatform/blueprint/kitOf.ts: 0 changes, 0.5 from its groundplatform/blueprint/movedBy.ts: 0 changes, 0.2 from its groundplatform/blueprint/nodeShapeOf.ts: 1 changes, 0.7 from its groundplatform/blueprint/nodes/barsNode.ts: 0 changes, 1.1 from its groundplatform/blueprint/nodes/cellLabel.ts: 0 changes, 0.5 from its groundplatform/blueprint/nodes/correlationNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/creditLines.ts: 0 changes, 0.5 from its groundplatform/blueprint/nodes/dialNode.ts: 0 changes, 0.5 from its groundplatform/blueprint/nodes/formulaNode.ts: 1 changes, 0.9 from its groundplatform/blueprint/nodes/groupNode.ts: 2 changes, 0.9 from its groundplatform/blueprint/nodes/heatmapNode.ts: 0 changes, 1.1 from its groundplatform/blueprint/nodes/histogramNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/joinNode.ts: 2 changes, 0.9 from its groundplatform/blueprint/nodes/keepNode.ts: 1 changes, 0.9 from its groundplatform/blueprint/nodes/linesNode.ts: 2 changes, 1.1 from its groundplatform/blueprint/nodes/mergedCredits.ts: 0 changes, 0.5 from its groundplatform/blueprint/nodes/noteNode.ts: 0 changes, 0.5 from its groundplatform/blueprint/nodes/numericPairs.ts: 0 changes, 0.5 from its groundplatform/blueprint/nodes/readoutNode.ts: 2 changes, 0.5 from its groundplatform/blueprint/nodes/scatterNode.ts: 1 changes, 1.1 from its groundplatform/blueprint/nodes/seasonNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/showTableNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/sortNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/stackNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/summaryNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/topNode.ts: 1 changes, 0.9 from its groundplatform/blueprint/nodes/trendNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/nodes/yourDataNode.ts: 0 changes, 0.9 from its groundplatform/blueprint/numberSaid.ts: 0 changes, 0.2 from its groundplatform/blueprint/paint/PLOT.ts: 0 changes, 0.2 from its groundplatform/blueprint/paint/barPlot.ts: 1 changes, 0.3 from its groundplatform/blueprint/paint/heatPlot.ts: 2 changes, 0.3 from its groundplatform/blueprint/paint/legendOf.ts: 1 changes, 0.2 from its groundplatform/blueprint/paint/linePlot.ts: 1 changes, 0.3 from its groundplatform/blueprint/paint/plotFrame.ts: 0 changes, 0.2 from its groundplatform/blueprint/paint/plotSvg.ts: 1 changes, 0.2 from its groundplatform/blueprint/paint/readoutMarkup.ts: 0 changes, 0.2 from its groundplatform/blueprint/paint/scaleOf.ts: 0 changes, 0.2 from its groundplatform/blueprint/paint/scatterPlot.ts: 1 changes, 0.3 from its groundplatform/blueprint/paint/tableMarkup.ts: 0 changes, 0.5 from its groundplatform/blueprint/parseBlueprint.ts: 2 changes, 0.5 from its groundplatform/blueprint/pickColumn.ts: 0 changes, 0.5 from its groundplatform/blueprint/printBlueprint.ts: 1 changes, 0.5 from its groundplatform/blueprint/ranked.ts: 0 changes, 0.2 from its groundplatform/blueprint/summaryOf.ts: 0 changes, 0.2 from its groundplatform/blueprint/tag.ts: 0 changes, 0.2 from its groundplatform/blueprint/tidyBlueprint.ts: 1 changes, 0.4 from its groundplatform/blueprint/wirePath.ts: 0 changes, 0.4 from its groundplatform/blueprint/wireRefused.ts: 2 changes, 0.2 from its groundplatform/blueprint/withNode.ts: 0 changes, 0.2 from its groundplatform/blueprint/withTitle.ts: 0 changes, 0.2 from its groundplatform/blueprint/withValue.ts: 0 changes, 0.5 from its groundplatform/blueprint/withWire.ts: 0 changes, 0.2 from its groundplatform/blueprint/withoutNodes.ts: 0 changes, 0.2 from its groundplatform/blueprint/withoutWires.ts: 0 changes, 0.2 from its groundfeatures/air-quality/nodes/airNodes.ts: 0 changes, 0.9 from its groundfeatures/air-quality/nodes/no2DaysChoice.ts: 0 changes, 0.5 from its groundfeatures/air-quality/nodes/no2HoursNode.ts: 2 changes, 0.9 from its groundfeatures/air-quality/nodes/no2MonthsNode.ts: 2 changes, 0.9 from its groundfeatures/air-quality/nodes/no2StationChoice.ts: 0 changes, 0.5 from its groundfeatures/air-quality/nodes/no2StationsNode.ts: 0 changes, 0.9 from its groundfeatures/air-quality/nodes/no2StationsRead.ts: 0 changes, 0.5 from its groundfeatures/air-quality/nodes/no2YearsNode.ts: 0 changes, 0.9 from its groundfeatures/architecture/nodes/CodeGraph.ts: 0 changes, 0.5 from its groundfeatures/architecture/nodes/architectureNodes.ts: 1 changes, 0.7 from its groundfeatures/architecture/nodes/aroundNode.ts: 0 changes, 0.6 from its groundfeatures/architecture/nodes/arrowsNode.ts: 0 changes, 0.9 from its groundfeatures/architecture/nodes/boxesNode.ts: 0 changes, 0.6 from its groundfeatures/architecture/nodes/commitsNode.ts: 0 changes, 0.9 from its groundfeatures/architecture/nodes/degreesOf.ts: 0 changes, 0.2 from its groundfeatures/architecture/nodes/filesNode.ts: 0 changes, 0.6 from its groundfeatures/architecture/nodes/graphTableOf.ts: 0 changes, 0.5 from its groundfeatures/architecture/nodes/graphType.ts: 0 changes, 0.2 from its groundfeatures/architecture/nodes/historyIn.ts: 0 changes, 0.2 from its groundfeatures/architecture/nodes/knotNode.ts: 0 changes, 0.6 from its groundfeatures/architecture/nodes/measureNode.ts: 0 changes, 0.9 from its groundfeatures/architecture/nodes/networkNode.ts: 0 changes, 0.9 from its groundfeatures/architecture/nodes/onlyFilesNode.ts: 0 changes, 0.6 from its groundfeatures/architecture/nodes/pictureNode.ts: 1 changes, 0.7 from its groundfeatures/architecture/nodes/renderTangleSvg.ts: 1 changes, 0.2 from its groundfeatures/architecture/nodes/sourceNode.ts: 0 changes, 0.6 from its groundfeatures/architecture/nodes/subgraphOf.ts: 0 changes, 0.2 from its groundfeatures/architecture/nodes/tangleLayoutOf.ts: 1 changes, 0.2 from its groundfeatures/weather/nodes/weatherDaysNode.ts: 2 changes, 1.1 from its groundfeatures/weather/nodes/weatherMonthsNode.ts: 3 changes, 1.1 from its groundfeatures/weather/nodes/weatherNodes.ts: 0 changes, 1.1 from its groundfeatures/weather/nodes/weatherStationChoice.ts: 1 changes, 0.5 from its groundfeatures/weather/nodes/weatherStationsNode.ts: 1 changes, 0.9 from its groundfeatures/weather/nodes/weatherStationsRead.ts: 1 changes, 0.5 from its groundplatform/blueprint/aKit.ts: 0 changes, 1.2 from its groundplatform/blueprint/blueprintStill.ts: 1 changes, 1 from its groundplatform/blueprint/dialsOf.ts: 1 changes, 0.6 from its groundplatform/blueprint/footOf.ts: 0 changes, 0.2 from its groundplatform/blueprint/optionalRead.ts: 0 changes, 0.2 from its groundplatform/blueprint/renderBlueprintSvg.ts: 1 changes, 0.7 from its groundplatform/blueprint/renderBoard.ts: 1 changes, 0.4 from its groundplatform/blueprint/resolvedEditor.ts: 1 changes, 0.9 from its groundplatform/blueprint/saidBy.ts: 0 changes, 0.6 from its groundplatform/markdown/unescapeHtml.ts: 0 changes, 0.2 from its groundplatform/plugin/blueprintKitOf.ts: 1 changes, 0.9 from its groundplatform/workbench/Camera.ts: 0 changes, 0.2 from its groundplatform/workbench/EditHistory.ts: 0 changes, 0.2 from its groundplatform/workbench/boundsOf.ts: 1 changes, 0.4 from its groundplatform/workbench/browser/BoardView.ts: 3 changes, 0.8 from its groundplatform/workbench/browser/FilesInBrowser.ts: 0 changes, 0.2 from its groundplatform/workbench/browser/KeptBlueprints.ts: 0 changes, 0.2 from its groundplatform/workbench/browser/NodeView.ts: 3 changes, 0.9 from its groundplatform/workbench/browser/Workbench.ts: 10 changes, 2.1 from its groundplatform/workbench/browser/controlFor.ts: 1 changes, 0.6 from its groundplatform/workbench/browser/morphInto.ts: 0 changes, 0.2 from its groundplatform/workbench/browser/mountWorkbench.ts: 5 changes, 2.1 from its groundplatform/workbench/browser/openKindMenu.ts: 2 changes, 0.7 from its groundplatform/workbench/browser/openTextPanel.ts: 0 changes, 0.4 from its groundplatform/workbench/hashOf.ts: 0 changes, 0.2 from its groundplatform/workbench/kindsFor.ts: 0 changes, 0.5 from its groundplatform/workbench/linkCodeOf.ts: 0 changes, 0.2 from its groundplatform/workbench/pinAt.ts: 0 changes, 0.4 from its groundplatform/workbench/textOfLinkCode.ts: 0 changes, 0.2 from its groundplatform/plugin/programNode.ts: 0 changes, 0.9 from its groundplatform/plugin/blueprintTool.ts: 0 changes, 0.7 from its groundfeatures/architecture/nodes/keepFilesNode.ts: 0 changes, 0.3 from its groundplatform/blueprint/ROW_TESTS.ts: 0 changes, 0.5 from its groundplatform/data/seasonOf.ts: 0 changes, 0.1 from its groundplatform/blueprint/cellOrder.ts: 0 changes, 0.5 from its groundplatform/blueprint/examplesOf.ts: 0 changes, 0.1 from its groundplatform/blueprint/peekOf.ts: 0 changes, 0.5 from its groundplatform/workbench/browser/openPeek.ts: 0 changes, 0.1 from its groundplatform/blueprint/suggestionsFor.ts: 2 changes, 0.6 from its groundfeatures/recipes/nodes/crossNode.ts: 0 changes, 0.6 from its groundfeatures/recipes/nodes/dayPartsNode.ts: 0 changes, 0.5 from its groundfeatures/recipes/recipesFeature.ts: 0 changes, 0.6 from its groundplatform/workbench/browser/openExamples.ts: 0 changes, 0.1 from its groundplatform/workbench/browser/openHelp.ts: 0 changes, 0.1 from its groundplatform/blueprint/nodes/inOrderOf.ts: 0 changes, 0.1 from its groundplatform/data/SEASON_ORDER.ts: 0 changes, 0.1 from its groundfeatures/sea/SeaPoint.ts: 0 changes, 0.1 from its groundfeatures/sea/gridAnswerOf.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaDaysNode.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaMonthsNode.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaNodes.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaPointChoice.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaPointsNode.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaPointsRead.ts: 0 changes, 0.1 from its groundfeatures/sea/nodes/seaYearsNode.ts: 0 changes, 0.1 from its groundfeatures/sea/seaAnswer.ts: 0 changes, 0.1 from its groundfeatures/sea/seaFeature.ts: 0 changes, 0.5 from its groundfeatures/sea/seaPoints.ts: 0 changes, 0.1 from its groundfeatures/sea/seaSource.ts: 0 changes, 0.3 from its groundplatform/data/RefreshPorts.ts: 0 changes, 0.1 from its groundplatform/data/answersOf.ts: 0 changes, 0.1 from its groundfeatures/weather/cadtepAnswer.ts: 0 changes, 0.1 from its groundfeatures/weather/cadtepDaysOf.ts: 0 changes, 0.1 from its groundfeatures/weather/climateSeries.ts: 0 changes, 0.1 from its groundfeatures/weather/climateSeriesSource.ts: 0 changes, 0.1 from its groundfeatures/weather/stationsNamed.ts: 0 changes, 0.1 from its groundfeatures/weather/variableYearOf.ts: 0 changes, 0.1 from its groundfeatures/weather/weatherGroups.ts: 0 changes, 0.1 from its groundfeatures/barcelona-series/BarcelonaSeries.ts: 0 changes, 0.1 from its groundfeatures/barcelona-series/barcelonaAnswer.ts: 0 changes, 0.1 from its groundfeatures/barcelona-series/barcelonaLinkOf.ts: 1 changes, 0.1 from its groundfeatures/barcelona-series/barcelonaSeriesFeature.ts: 1 changes, 0.6 from its groundfeatures/barcelona-series/barcelonaSource.ts: 1 changes, 0.2 from its groundfeatures/barcelona-series/monthlyValuesOf.ts: 1 changes, 0.1 from its groundfeatures/barcelona-series/nodes/barcelonaMonthsNode.ts: 1 changes, 0.2 from its groundfeatures/barcelona-series/nodes/barcelonaNodes.ts: 1 changes, 0.2 from its groundfeatures/barcelona-series/nodes/barcelonaRead.ts: 1 changes, 0.1 from its groundfeatures/barcelona-series/nodes/barcelonaYearsNode.ts: 1 changes, 0.2 from its groundfeatures/barcelona-series/barcelonaRainSource.ts: 0 changes, 0 from its groundfeatures/barcelona-series/barcelonaSeriesSource.ts: 0 changes, 0 from its groundfeatures/barcelona-series/nodes/barcelonaRainNode.ts: 0 changes, 0 from its groundfeatures/search/browser/SEARCH_PAGE.ts: 0 changes, 0 from its groundfeatures/search/browser/chooser.ts: 1 changes, 0.2 from its groundfeatures/search/browser/isTyping.ts: 0 changes, 0 from its groundfeatures/search/browser/searchKeys.ts: 1 changes, 0 from its groundfeatures/search/browser/searchSite.ts: 0 changes, 0 from its groundfeatures/search/foldedOf.ts: 0 changes, 0 from its groundfeatures/search/markedOf.ts: 0 changes, 0 from its groundfeatures/search/pagesFound.ts: 0 changes, 0 from its groundfeatures/search/renderFound.ts: 1 changes, 0 from its groundfeatures/search/searchCommand.ts: 0 changes, 0 from its groundfeatures/search/searchFeature.ts: 1 changes, 0.2 from its groundfeatures/search/steppedTo.ts: 0 changes, 0 from its groundfeatures/search/wordStarts.ts: 0 changes, 0 from its groundfeatures/search/browser/mountSearch.ts: 0 changes, 0 from its groundplatform/blueprint/columnsOf.ts: 0 changes, 0 from its groundplatform/blueprint/withDial.ts: 0 changes, 0 from its groundplatform/blueprint/withNext.ts: 0 changes, 0 from its groundplatform/plugin/Bench.ts: 0 changes, 0 from its groundplatform/plugin/benchOf.ts: 0 changes, 0 from its groundplatform/workbench/OpenBlueprint.ts: 1 changes, 0 from its groundplatform/workbench/cardsOf.ts: 0 changes, 0 from its groundfeatures/lcars/SCHEMATIC.ts: 1 changes, 0 from its groundfeatures/lcars/browser/LcarsConsole.ts: 4 changes, 0.7 from its groundfeatures/lcars/browser/QueryView.ts: 1 changes, 0 from its groundfeatures/lcars/codeOf.ts: 0 changes, 0 from its groundfeatures/lcars/conduitPath.ts: 0 changes, 0 from its groundfeatures/lcars/lcarsFeature.ts: 0 changes, 0.7 from its groundfeatures/lcars/schematicMarkup.ts: 4 changes, 0.6 from its groundfeatures/lcars/schematicOf.ts: 3 changes, 0.2 from its groundfeatures/lcars/faceOf.ts: 1 changes, 0 from its groundfeatures/lcars/flowOf.ts: 0 changes, 0.4 from its groundfeatures/lcars/browser/openChoice.ts: 0 changes, 0 from its groundfeatures/lcars/joinsOf.ts: 0 changes, 0 from its groundallFeatures.tsrenderDocument.tsdeveloperMeetingsFeature.tsheadlineFeature.ts0011225510102020what its ground would lead one to expect, in changesthe changes it had

changed far more than its ground would lead one to expectfar lessabout as much

The files whose ground would lead one to expect the most changes: main.ts (14.6), features/allFeatures.ts (8.3) and features/architecture/browser/mountArchitecture.ts (4.1). The ones that changed far more than theirs would: features/allFeatures.ts (27 against 8.3), platform/page/renderDocument.ts (15 against 2.1) and platform/shell/browser/mountTerminal.ts (14 against 2.7). The ones that changed far less: features/developer-meetings/developerMeetingsFeature.ts (0 against 3.3), features/headline/headlineFeature.ts (1 against 4) and features/theme/themeFeature.ts (1 against 3.9).

Near the line, a file changed about as often as files standing where it stood. Far above it, a file changed for reasons of its own: it grows with every feature, or it keeps being reworked. Far below, a file stood where files change, and did not — a list of what a feature brings, which changes little whatever changes under it. On the picture above, colour set to exposure shows every file's.

Two kinds of unstable

Robert C. Martin measures how stable a component is by its place among the others, not by its history, and he counts two kinds of coupling to do it:

He counts classes, not arrows, and here a file stands for a class: a file that needs three things elsewhere is one to Ce. His instability puts the two together, I = Ce / (Ca + Ce): 0 for a box that is only needed, hard to change because whatever needs it may have to change with it; 1 for a box that only needs, which nothing stops from changing. Pick a box, and see its two couplings drawn and the sum worked out:

Ca = 3: files elsewhere that need itCe = 12: its files that need elsewhereshellplatform/page · 2 filesmain.ts · 1 fileplatform/command · 11 filesplatform/markdown · 6 filesplatform/content · 5 filesplatform/browser · 1 file
platform/shell: Ca = 3, the files elsewhere that need something in it; Ce = 12, its own files that need something elsewhere. I = Ce / (Ca + Ce) = 12 / (3 + 12) = 0.8. Unstable: it stands on much, and little stands on it — often made to change, and free to.

His rule for them is to depend in the direction of stability: an arrow should go from a box to one more stable than itself, so that what is hard to change never needs what is easy to change, and keeps changing. On the picture above, colour set to stability draws every box as deep as it is stable, and the arrows that go against the rule in red. When this was written, on 28 September 2026, most of them left the list of features: one file, needed by one, which by his count stands half way, and which has to point at every feature, because putting them together is what it is for.

He also measures how abstract a box is: here, the share of its files that hold nothing but types, which can be depended on without depending on what anything does. And he draws the two against each other. A box on the line between the two corners, the main sequence, is as abstract as its place asks. A box at the bottom left is needed by much and concrete, hard to change with nothing abstract in it to change instead: the zone of pain. And he says what his picture cannot show, that only what keeps changing hurts there; so each box here is as warm as the history says its files changed, the sweeps left out.

zone of painzone of uselessnessthe main sequencefeatures/lagoon: needed by 1 file elsewhere, needs 4; 0 changes to its 15 filesfeatures/sea: needed by 1 file elsewhere, needs 9; 0 changes to its 13 filesfeatures/maze: needed by 1 file elsewhere, needs 3; 0 changes to its 12 filesfeatures/next-word: needed by 1 file elsewhere, needs 4; 0 changes to its 11 filesfeatures/packages: needed by 1 file elsewhere, needs 4; 0 changes to its 8 filesfeatures/tests-as-examples: needed by 1 file elsewhere, needs 5; 0 changes to its 8 filesfeatures/guess-the-rule: needed by 1 file elsewhere, needs 3; 0 changes to its 6 filesfeatures/post-tests: needed by 1 file elsewhere, needs 4; 0 changes to its 6 filesfeatures/writings: needed by 1 file elsewhere, needs 4; 0 changes to its 4 filesfeatures/recipes: needed by 1 file elsewhere, needs 3; 0 changes to its 3 filesplatform/testing: needed by 4 files elsewhere, needs 0; 0 changes to its 3 filesplatform/analytics: needed by 3 files elsewhere, needs 0; 0 changes to its 1 fileplatform/random: needed by 5 files elsewhere, needs 0; 0 changes to its 1 filefeatures/fish-market: needed by 1 file elsewhere, needs 5; 2 changes to its 21 filesfeatures/small-steps: needed by 1 file elsewhere, needs 3; 1 change to its 7 filesfeatures/step-names: needed by 1 file elsewhere, needs 4; 1 change to its 7 filesplatform/agent: needed by 1 file elsewhere, needs 4; 1 change to its 5 filesfeatures/gherkin-genie: needed by 1 file elsewhere, needs 6; 3 changes to its 11 filesfeatures/search: needed by 1 file elsewhere, needs 8; 4 changes to its 14 filesfeatures/bowling-kata: needed by 1 file elsewhere, needs 9; 6 changes to its 17 filesfeatures/developer-meetings: needed by 1 file elsewhere, needs 3; 3 changes to its 7 filesplatform/content: needed by 26 files elsewhere, needs 0; 3 changes to its 7 filesplatform/blueprint: needed by 75 files elsewhere, needs 2; 39 changes to its 88 filesfeatures/first-network: needed by 1 file elsewhere, needs 6; 5 changes to its 11 filesfeatures/rocket: needed by 1 file elsewhere, needs 4; 8 changes to its 16 filesfeatures/adventure: needed by 1 file elsewhere, needs 5; 7 changes to its 14 filesfeatures/thesis-results: needed by 1 file elsewhere, needs 1; 2 changes to its 4 filesplatform/data: needed by 29 files elsewhere, needs 1; 9 changes to its 16 filesfeatures/barcelona-series: needed by 1 file elsewhere, needs 7; 8 changes to its 13 filesplatform/charts: needed by 15 files elsewhere, needs 0; 7 changes to its 11 filesfeatures/architecture: needed by 1 file elsewhere, needs 46; 98 changes to its 150 filesplatform/program: needed by 14 files elsewhere, needs 1; 11 changes to its 15 filesfeatures/sky: needed by 1 file elsewhere, needs 1; 3 changes to its 4 filesplatform/browser: needed by 43 files elsewhere, needs 9; 14 changes to its 18 filesfeatures/weather: needed by 1 file elsewhere, needs 14; 28 changes to its 35 filesfeatures/air-quality: needed by 1 file elsewhere, needs 15; 23 changes to its 28 filesfeatures/world: needed by 1 file elsewhere, needs 5; 30 changes to its 33 filesfeatures/lcars: needed by 1 file elsewhere, needs 12; 14 changes to its 15 filesfeatures/technical-debt: needed by 1 file elsewhere, needs 2; 3 changes to its 3 filesplatform/workbench: needed by 3 files elsewhere, needs 16; 26 changes to its 23 filesfeatures/headline: needed by 1 file elsewhere, needs 1; 8 changes to its 7 filesfeatures/fibergochi: needed by 1 file elsewhere, needs 4; 13 changes to its 9 filesfeatures/theme: needed by 1 file elsewhere, needs 4; 12 changes to its 8 filesplatform/plugin: needed by 77 files elsewhere, needs 10; 23 changes to its 15 filesplatform/markdown: needed by 54 files elsewhere, needs 0; 26 changes to its 16 filesplatform/flags: needed by 2 files elsewhere, needs 1; 10 changes to its 6 filesplatform/command: needed by 18 files elsewhere, needs 1; 5 changes to its 3 filesfeatures/portfolio: needed by 1 file elsewhere, needs 1; 2 changes to its 1 fileplatform/shell: needed by 3 files elsewhere, needs 12; 43 changes to its 19 filesplatform/page: needed by 1 file elsewhere, needs 8; 27 changes to its 11 filesmain.ts: needed by 0 files elsewhere, needs 1; 17 changes to its 1 filefeatures/allFeatures.ts: needed by 1 file elsewhere, needs 1; 27 changes to its 1 fileplatform/programplatform/pluginplatform/browserplatform/markdown00.50.511instability: how little needs it, so how free it is to changeabstractness: its files of nothing but types
11 boxes stand in the zone of pain. The ones there that have changed, the most first: platform/markdown (1.6 changes a file), platform/plugin (1.5), platform/browser (0.8), platform/program (0.7), platform/charts (0.6), platform/data (0.6), platform/blueprint (0.4) and platform/content (0.4). 30 arrows between boxes go from a box to a less stable one, against his rule of stable dependencies; the steepest, from features/allFeatures.ts to features/architecture. 29 of them leave features/allFeatures.ts.
every box's figures
boxfilesneeded byneedsIADchanges a file
features/adventure14150.830.140.020.5
features/air-quality281150.940.070.010.8
features/allFeatures.ts1110.500.000.5027
features/architecture1501460.980.070.050.7
features/barcelona-series13170.880.080.050.6
features/bowling-kata17190.900.120.020.4
features/developer-meetings7130.750.000.250.4
features/fibergochi9140.800.110.091.4
features/first-network11160.860.090.050.5
features/fish-market21150.830.290.120.1
features/gherkin-genie11160.860.000.140.3
features/guess-the-rule6130.750.000.250
features/headline7110.500.140.361.1
features/lagoon15140.800.200.000
features/lcars151120.920.000.080.9
features/maze12130.750.170.080
features/next-word11140.800.000.200
features/packages8140.800.130.070
features/portfolio1110.500.000.502
features/post-tests6140.800.000.200
features/recipes3130.750.000.250
features/rocket16140.800.060.140.5
features/sea13190.900.080.020
features/search14180.890.000.110.3
features/sky4110.500.250.250.8
features/small-steps7130.750.000.250.1
features/step-names7140.800.140.060.1
features/technical-debt3120.670.000.331
features/tests-as-examples8150.830.130.040
features/theme8140.800.250.051.5
features/thesis-results4110.500.000.500.5
features/weather351140.930.060.010.8
features/world33150.830.120.050.9
features/writings4140.800.000.200
main.ts1011.000.000.0017
platform/agent5140.800.000.200.2
platform/analytics1300.000.001.000
platform/blueprint887520.030.060.920.4
platform/browser184390.170.060.770.8
platform/charts111500.000.180.820.6
platform/command31810.050.670.281.7
platform/content72600.000.140.860.4
platform/data162910.030.190.780.6
platform/flags6210.330.330.331.7
platform/markdown165400.000.001.001.6
platform/page11180.890.000.112.5
platform/plugin1577100.110.200.691.5
platform/program151410.070.400.530.7
platform/random1500.000.001.000
platform/shell193120.800.000.202.3
platform/testing3400.000.330.670
platform/workbench233160.840.000.161.1

The frame stands near that corner, as a frame would: everything is built on it, and most of it is plain code. Where the two kinds of unstable disagree, a box that is hard to change and changes anyway, is where a change costs most, because what needs it may have to move with it.

An arrow onto a type

The dashed arrows on the picture need only a type: a box that depends on an interface, not on what implements it. That is dependency inversion, and its promise is that a change to what implements the interface does not reach those that use it: there is no arrow for it to travel, and the figure of how far a change travels counts how seldom files change with nothing changed below them. What an arrow onto a type can still carry is a change to the type itself. For each kind of arrow, how often a change at its head came with a change at its tail:

onto a valueonto only a type
inside a box40% · 173 of 43027% · 90 of 336
across two boxes29% · 61 of 2108.3% · 50 of 601
Across boxes, an arrow onto a type carried a change less often than one onto a value: 8.3% against 29%. But 428 of those 601 were changes to one file, platform/plugin/Feature.ts, and carried 2.8%; the rest carried 22%. Inside a box, less often: 27% against 40%.

An interface that grows by what its users may leave alone, a field they need not fill, changes without them; one that breaks them changes with them. And where one file is most of the arrows onto a type, the count is mostly that file's, which the caption says when it is so.

What changes together

Two files that keep changing in the same commits are tied in the history, whatever the arrows say. Harald Gall, Karin Hajek and Mehdi Jazayeri called it logical coupling (1998). A commit that changed more than thirty files is left out: a rename across the whole source changes everything at once, and says nothing about what needs what.

commitsone fileand the otherbetween them
8features/architecture/browser/ArchitectureScene.tsfeatures/architecture/browser/mountArchitecture.tsan arrow
6main.tsplatform/shell/browser/mountTerminal.tsan arrow
6main.tsplatform/plugin/Feature.tsarrows through others
5platform/workbench/browser/Workbench.tsplatform/workbench/browser/mountWorkbench.tsan arrow
4features/architecture/History.tsfeatures/architecture/encodeHistory.tsan arrow
4features/lcars/browser/LcarsConsole.tsfeatures/lcars/schematicMarkup.tsan arrow
3main.tsplatform/command/Outcome.tsarrows through others
The 12 pairs of files that changed together most, the tests and the sweeps left out, and what joins them in the source now. 5 of them have no arrow between them, near or far.

Where there is an arrow, changing together says it is a strong one: it carries. The pairs worth reading are those with no arrow between them, near or far: they share something the compiler cannot see. Among them are the page the build writes, in node, and the terminal that takes it over in the browser. This site's first rule is that the content is in the HTML, and this is its price: the page and the script that reads it must agree on its markup, a contract no import states, kept by changing both. On the picture above, they are the dashed threads.

With its test

A change that comes with a change to its test, in the same commit, is the mark test-driven work leaves in a history. The history cannot say which was written first, only that they went together.

80% of the changes to a file a test imports came with its test

285 of the 355 changes to a file a test imports came with a change to that test, or a new one, in the same commit. Another 185 changes went to files with something to run that no test imports.

The changes to files no test imports directly are counted apart: some of those files a test runs through another, as the shell's tests run its commands, and some no test runs at all.

What it is not

The history starts on 7 September 2026, so it is short, and some of these numbers are small enough to move with the next commit. A commit is the unit, however much it changed: a one-word fix and a rewrite are one change each. The history is the main line's, and a branch's commits arrive with the merge that brought them. The tests are left out of every count but the last, because a test changes when what it tests does, and would count every change twice. The sweeps are left out of what changes with what, and of how often a box changed. And changing together is not needing each other: it is what has to be explained.

The analyses are small programs in the source of this site, tested like the rest of it, and they read the same history the picture of how it is built plays.

~/projects/changes $

~/projects/changes $