Co-change repulsion: files that change together wire togetherSIMULATEDMEASURED

On hono's history FireTrident redid more work than locks. Part of it: agents took intents whose files are coupled to files other agents were changing, and read-set validation sent them back. TrunkDO now mines the trunk's history at import into a co-change map (Hebbian: a file's weight to a partner estimates P(partner changes | file changes) and decays only as that file changes again; STDP: an author's follow-up commit, or a follow-up intent, potentiates earlier-file → later-file edges). It learns every landing after that. ColonyDO.take adds 2 × coupling × claim for each claimed neighbor of a candidate's files, so a claim repels work on the files that change with it.

Does the map predict co-change? MEASURED on hono's real history (train on 200 commits, predict the next 100, sliding)

predictorprecision@1precision@3recall@8files with neighbors
co-change map (as deployed)0.530.350.2963%
most changed files0.130.110.15-

Direction: ranking the files of the author's previous commit (the upstream change), recall@8 is 0.032 with STDP and 0.026 without. In hono the follow-up signal is weak (squash-merged PRs from many authors), so STDP mostly orders downstream work after upstream work rather than adding coupling.

hono workload, 20 simulated minutes, mean of 3 seeds (SIMULATED)

agentsmodellanded/minrework %conflicts/1kclaim to land p50 s
100Baseline: locks + one merge queue56.25.77276
100FireTrident as built62.112.37564
100FireTrident + co-change63.410.06364
100FireTrident + group commit62.012.77764
100FireTrident + group commit + co-change64.510.16563
1,000Baseline: locks + one merge queue51.921.7318563
1,000FireTrident as built85.642.5397355
1,000FireTrident + co-change85.938.7354325
1,000FireTrident + group commit20545.331972
1,000FireTrident + group commit + co-change19240.427969
10,000Baseline: locks + one merge queue51.921.7318563
10,000FireTrident as built85.841.4386355
10,000FireTrident + co-change85.838.6365326
10,000FireTrident + group commit20646.933470
10,000FireTrident + group commit + co-change19240.327969

Co-change weight: rework % @ landed/min, mean of 3 seeds (SIMULATED; 0 = off, 2 = deployed)

agentsmodel012310
1,000as built42.5% @ 8639.8% @ 8638.7% @ 8637.8% @ 8635.9% @ 86
1,000group commit45.3% @ 20543.2% @ 19740.4% @ 19239.8% @ 18636.4% @ 154
10,000as built41.4% @ 8640.8% @ 8638.6% @ 8637.4% @ 8636.4% @ 86
10,000group commit46.9% @ 20643.0% @ 20340.3% @ 19239.1% @ 18736.8% @ 152

Draining 1500 tasks to zero, seconds, mean of 10 seeds (median for the last task) (SIMULATED)

agentsmodel50% landed90%95%all (median)rework %
100Baseline: locks + one merge queue8131,4551,5361,9985.2
100FireTrident as built7021,2731,3452,37612.4
100FireTrident + co-change6941,2581,3282,36011.2
100FireTrident + group commit6931,2581,3302,47712.4
100FireTrident + group commit + co-change6841,2441,3122,30311.1
1,000Baseline: locks + one merge queue8471,5571,6442,27715.9
1,000FireTrident as built5339531,0752,32339.2
1,000FireTrident + co-change5319521,0742,26135.8
1,000FireTrident + group commit1164115651,70337.1
1,000FireTrident + group commit + co-change1314295911,83133.4

Live steering on a preview deployment (MEASURED: real import of hono, real mining, real takes)

Each round a fresh agent claims src/jsx/components.ts (priority 5), then a fresh agent chooses between Y (priority 2.5) and src/utils/body.ts (priority 2). In the coupled colony Y co-changes with the claimed file in hono's last 200 commits; in the control colony it never did.

colonyYtook Ytook Zothertake p50 ms
coupledsrc/jsx/streaming.ts2/2014/204319
controlsrc/router/reg-exp-router/node.ts16/203/201292

Two-sided Fisher exact test on took Y / took Z, coupled vs control: p = 3.0e-5. "Other" rounds are B declining both (the response-threshold rule) or A not taking X first.