Before, a claim on a file only lowered the stimulus of other intents that write it, so the age term and reinforced thresholds let agents take claimed files anyway and read-set validation sent the later change back. Now ColonyDO.take keeps that soft repulsion and adds winner-take-all: an open intent whose own files carry at least half a fresh claim from other agents is skipped (core chooseIntent, LATERAL_INHIBITION = 0.5). Co-change neighbors still only repel. It is not a lock: there is no lock manager and no release protocol, and a silent agent's claim decays below the threshold after one half-life (about 3.5 minutes; FT_LATERAL_INHIBITION tunes it, off disables it).
| agents | model | landed/min | rework % | conflicts/1k | claim to land p50 s | window inhibited % |
|---|---|---|---|---|---|---|
| 100 | Locks + one merge queue | 56.2 | 5.7 (5.2-6.0) | 72 | 76 | - |
| 100 | FireTrident + co-change (before) | 63.4 | 10.0 (7.3-12.4) | 63 | 64 | - |
| 100 | FireTrident + co-change + lateral inhibition (after) | 63.4 | 10.0 (7.3-12.4) | 63 | 64 | 10 |
| 100 | Group commit + co-change (before) | 64.5 | 10.1 (7.8-11.5) | 65 | 63 | - |
| 100 | Group commit + co-change + lateral inhibition (after) | 64.5 | 10.1 (7.8-11.5) | 65 | 63 | 10 |
| 100 | FireTrident, claims repel softly only | 62.1 | 12.3 (11.0-13.3) | 75 | 64 | - |
| 100 | FireTrident + lateral inhibition | 62.1 | 12.3 (11.0-13.3) | 75 | 64 | 10 |
| 100 | Group commit, claims repel softly only | 62.0 | 12.7 (10.7-14.8) | 77 | 64 | - |
| 100 | Group commit + lateral inhibition | 62.0 | 12.7 (10.7-14.8) | 77 | 64 | 10 |
| 1,000 | Locks + one merge queue | 51.9 | 21.7 (20.8-22.1) | 318 | 563 | - |
| 1,000 | FireTrident + co-change (before) | 85.9 | 38.7 (37.3-40.3) | 354 | 325 | - |
| 1,000 | FireTrident + co-change + lateral inhibition (after) | 86.4 | 31.2 (29.8-33.7) | 285 | 294 | 97 |
| 1,000 | Group commit + co-change (before) | 192 | 40.4 (39.7-41.3) | 279 | 69 | - |
| 1,000 | Group commit + co-change + lateral inhibition (after) | 176 | 31.2 (30.2-31.9) | 200 | 66 | 95 |
| 1,000 | FireTrident, claims repel softly only | 85.6 | 42.5 (41.4-44.1) | 397 | 355 | - |
| 1,000 | FireTrident + lateral inhibition | 86.3 | 32.2 (30.5-33.2) | 283 | 298 | 100 |
| 1,000 | Group commit, claims repel softly only | 205 | 45.3 (44.4-46.7) | 319 | 72 | - |
| 1,000 | Group commit + lateral inhibition | 173 | 33.0 (32.5-33.5) | 213 | 68 | 100 |
| 10,000 | Locks + one merge queue | 51.9 | 21.7 (20.8-22.1) | 318 | 563 | - |
| 10,000 | FireTrident + co-change (before) | 85.8 | 38.6 (37.2-39.9) | 365 | 326 | - |
| 10,000 | FireTrident + co-change + lateral inhibition (after) | 86.2 | 31.4 (29.6-33.3) | 282 | 292 | 96 |
| 10,000 | Group commit + co-change (before) | 192 | 40.3 (39.8-40.7) | 279 | 69 | - |
| 10,000 | Group commit + co-change + lateral inhibition (after) | 173 | 31.6 (30.1-32.7) | 207 | 67 | 95 |
| 10,000 | FireTrident, claims repel softly only | 85.8 | 41.4 (40.1-43.2) | 386 | 355 | - |
| 10,000 | FireTrident + lateral inhibition | 86.3 | 31.7 (31.1-32.7) | 275 | 299 | 100 |
| 10,000 | Group commit, claims repel softly only | 206 | 46.9 (46.1-48.0) | 334 | 70 | - |
| 10,000 | Group commit + lateral inhibition | 176 | 31.5 (30.5-32.4) | 207 | 66 | 100 |
| agents | model | 50% landed | 90% | 95% | all (median) | rework % |
|---|---|---|---|---|---|---|
| 100 | Locks + one merge queue | 813 | 1,455 | 1,537 | 2,008 | 5.2 |
| 100 | FireTrident + co-change (before) | 698 | 1,268 | 1,341 | 2,828 | 11.4 |
| 100 | FireTrident + co-change + lateral inhibition (after) | 698 | 1,268 | 1,342 | 2,042 | 10.2 |
| 100 | Group commit + co-change (before) | 687 | 1,253 | 1,326 | 2,811 | 11.4 |
| 100 | Group commit + co-change + lateral inhibition (after) | 687 | 1,253 | 1,327 | 2,029 | 10.1 |
| 1,000 | Locks + one merge queue | 846 | 1,554 | 1,641 | 2,319 | 15.7 |
| 1,000 | FireTrident + co-change (before) | 531 | 951 | 1,081 | 2,262 | 35.4 |
| 1,000 | FireTrident + co-change + lateral inhibition (after) | 529 | 948 | 1,070 | 1,987 | 25.7 |
| 1,000 | Group commit + co-change (before) | 131 | 428 | 598 | 2,364 | 33.3 |
| 1,000 | Group commit + co-change + lateral inhibition (after) | 142 | 432 | 596 | 1,697 | 23.9 |
| 10,000 | Locks + one merge queue | 846 | 1,554 | 1,641 | 2,319 | 15.7 |
| 10,000 | FireTrident + co-change (before) | 530 | 952 | 1,082 | 2,402 | 36.0 |
| 10,000 | FireTrident + co-change + lateral inhibition (after) | 530 | 947 | 1,074 | 1,986 | 25.9 |
| 10,000 | Group commit + co-change (before) | 130 | 432 | 592 | 2,253 | 33.1 |
| 10,000 | Group commit + co-change + lateral inhibition (after) | 142 | 432 | 587 | 1,697 | 23.8 |
| trunk writer | 0 | 2 | 5 | 10 |
|---|---|---|---|---|
| per-lane landing | 32.2% @ 86 | 31.2% @ 86 | 26.2% @ 86 | 26.5% @ 86 |
| group commit | 33.0% @ 173 | 31.2% @ 176 | 27.6% @ 158 | 24.8% @ 156 |
| model | 200 | 400 | 1,000 |
|---|---|---|---|
| FireTrident + co-change (before) | 38.7% @ 86 | 38.8% @ 87 | 26.3% @ 88 |
| FireTrident + co-change + lateral inhibition (after) | 31.2% @ 86 | 33.3% @ 87 | 24.9% @ 88 |
| Group commit + co-change (before) | 40.4% @ 192 | 44.8% @ 223 | 47.7% @ 288 |
| Group commit + co-change + lateral inhibition (after) | 31.2% @ 176 | 36.3% @ 218 | 42.3% @ 277 |
X writes [shared, a] (priority 5) and Y writes [shared, b] (priority 4); agent A takes first, then agent B tries for the other intent. Claims that only repel would let B take it with p = 0.9 per try.
| check | result |
|---|---|
| B tries once while A's claim is live (fresh agents each round) | turned away in 20 of 20 rounds, took the other intent in 0 |
| A's change lands | B inhibited before, inhibited while queued; proposal landed in 3,147 ms; then B took the other |
| A goes silent (no heartbeats); B retries every 10 s | turned away through 207 s, took the other intent at 218 s (one half-life of a claim: 208 s) |
chooseIntent, as ColonyDO.take does; co-change repulsion uses core neighborRepulsion at weight 2 with hono's last 200 commits. "Window inhibited" is the share of admitted candidates in the 200-oldest window that inhibition held back.