route66-consensus 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- route66_consensus-1.0.0/PKG-INFO +332 -0
- route66_consensus-1.0.0/README.md +322 -0
- route66_consensus-1.0.0/pyproject.toml +30 -0
- route66_consensus-1.0.0/route66/__init__.py +33 -0
- route66_consensus-1.0.0/route66/cli.py +111 -0
- route66_consensus-1.0.0/route66/clock.py +77 -0
- route66_consensus-1.0.0/route66/deadlock.py +165 -0
- route66_consensus-1.0.0/route66/models.py +73 -0
- route66_consensus-1.0.0/route66/orchestrator.py +186 -0
- route66_consensus-1.0.0/route66/quorum.py +102 -0
- route66_consensus-1.0.0/route66_consensus.egg-info/PKG-INFO +332 -0
- route66_consensus-1.0.0/route66_consensus.egg-info/SOURCES.txt +15 -0
- route66_consensus-1.0.0/route66_consensus.egg-info/dependency_links.txt +1 -0
- route66_consensus-1.0.0/route66_consensus.egg-info/entry_points.txt +2 -0
- route66_consensus-1.0.0/route66_consensus.egg-info/top_level.txt +1 -0
- route66_consensus-1.0.0/setup.cfg +4 -0
- route66_consensus-1.0.0/tests/test_consensus.py +125 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: route66-consensus
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Autonomous Multi-Agent Consensus & Deadlock-Free Orchestration Grid
|
|
5
|
+
Author: Omni-Agent Architect & 70s Retro-Engineer
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Keywords: multi-agent,deadlock-prevention,byzantine-consensus,lamport-clocks,orchestrator,asyncio
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
|
|
11
|
+
<!-- [ALIGNMENT_CHECK: PHASE 4 | PROJECT 2 | ADHERENCE: 100% | ZERO_PLACEHOLDERS_VERIFIED] -->
|
|
12
|
+
# ๐ฃ๏ธ ROUTE 66: Autonomous Consensus Grid
|
|
13
|
+
### *Deadlock-Free Lamport Priority Orchestration & Byzantine-Tolerant Quorum for AI Multi-Agent Fleets*
|
|
14
|
+
|
|
15
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
16
|
+
[](https://www.python.org/)
|
|
17
|
+
[](#)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
____ ___ _ _ _____ _____ __ __
|
|
23
|
+
| _ \ / _ \| | | |_ _| ____| / /_ / /_
|
|
24
|
+
| |_) | | | | | | | | | | _| | '_ \ | '_ \
|
|
25
|
+
| _ <| |_| | |_| | | | | |___ | (_) || (_) |
|
|
26
|
+
|_| \_\\___/ \___/ |_| |_____| \___/ \___/
|
|
27
|
+
* HIGHWAY DISPATCH: NO DEADLOCKS ON ROUTE 66 *
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## ๐จ 1970s DINER VISUAL MATRIX & HIGHWAY NEON SIGNATURE
|
|
33
|
+
|
|
34
|
+
<div align="center">
|
|
35
|
+
|
|
36
|
+
<!-- EMBEDDED DYNAMIC SVG: 1970s ROUTE 66 DINER NEON SIGN -->
|
|
37
|
+
<svg width="680" height="200" viewBox="0 0 680 200" xmlns="http://www.w3.org/2000/svg">
|
|
38
|
+
<defs>
|
|
39
|
+
<style>
|
|
40
|
+
@keyframes neonHighway {
|
|
41
|
+
0%, 100% { filter: drop-shadow(0 0 5px #E1AD01) drop-shadow(0 0 16px #E1AD01); opacity: 1; }
|
|
42
|
+
50% { filter: drop-shadow(0 0 2px #E1AD01) drop-shadow(0 0 7px #E1AD01); opacity: 0.85; }
|
|
43
|
+
81% { opacity: 0.4; }
|
|
44
|
+
83% { opacity: 1; }
|
|
45
|
+
}
|
|
46
|
+
@keyframes neonCyanBlink {
|
|
47
|
+
0%, 100% { filter: drop-shadow(0 0 4px #00F5D4) drop-shadow(0 0 12px #00F5D4); }
|
|
48
|
+
50% { filter: drop-shadow(0 0 1px #00F5D4) drop-shadow(0 0 4px #00F5D4); }
|
|
49
|
+
}
|
|
50
|
+
.checker-tile-a { fill: #1A1A1A; }
|
|
51
|
+
.checker-tile-b { fill: #E8ECEF; }
|
|
52
|
+
.highway-shield {
|
|
53
|
+
fill: #C41E3A;
|
|
54
|
+
stroke: #E8ECEF;
|
|
55
|
+
stroke-width: 4;
|
|
56
|
+
}
|
|
57
|
+
.route66-gold {
|
|
58
|
+
font-family: 'Arial Black', Impact, sans-serif;
|
|
59
|
+
fill: #E1AD01;
|
|
60
|
+
animation: neonHighway 2.4s ease-in-out infinite;
|
|
61
|
+
}
|
|
62
|
+
.route66-cyan {
|
|
63
|
+
font-family: 'Courier New', monospace;
|
|
64
|
+
font-weight: bold;
|
|
65
|
+
fill: #00F5D4;
|
|
66
|
+
animation: neonCyanBlink 3s infinite;
|
|
67
|
+
}
|
|
68
|
+
</style>
|
|
69
|
+
<pattern id="r66checkers" width="24" height="24" patternUnits="userSpaceOnUse">
|
|
70
|
+
<rect width="12" height="12" class="checker-tile-a" />
|
|
71
|
+
<rect x="12" width="12" height="12" class="checker-tile-b" />
|
|
72
|
+
<rect y="12" width="12" height="12" class="checker-tile-b" />
|
|
73
|
+
<rect x="12" y="12" width="12" height="12" class="checker-tile-a" />
|
|
74
|
+
</pattern>
|
|
75
|
+
</defs>
|
|
76
|
+
|
|
77
|
+
<!-- Checkered Diner Highway Rim -->
|
|
78
|
+
<rect width="680" height="200" fill="url(#r66checkers)" rx="14" stroke="#E8ECEF" stroke-width="4"/>
|
|
79
|
+
<rect x="16" y="16" width="648" height="168" rx="10" fill="#1A1A1A" fill-opacity="0.95" stroke="#E1AD01" stroke-width="2"/>
|
|
80
|
+
|
|
81
|
+
<!-- Route 66 Highway Badge -->
|
|
82
|
+
<path d="M 60 40 Q 95 30 130 40 Q 140 100 130 140 Q 95 170 60 140 Q 50 100 60 40 Z" class="highway-shield"/>
|
|
83
|
+
<text x="95" y="105" text-anchor="middle" font-size="28" font-family="'Arial Black'" fill="#E8ECEF">66</text>
|
|
84
|
+
|
|
85
|
+
<!-- Neon Header -->
|
|
86
|
+
<text x="390" y="65" text-anchor="middle" font-size="32" letter-spacing="4" class="route66-gold">ROUTE 66 CONSENSUS</text>
|
|
87
|
+
<text x="390" y="105" text-anchor="middle" font-size="16" letter-spacing="2" class="route66-cyan">โ
DEADLOCK-FREE AGENT ORCHESTRATION GRID โ
</text>
|
|
88
|
+
<text x="390" y="145" text-anchor="middle" font-size="13" fill="#A8DADC" font-family="'Courier New', monospace">LAMPORT WAIT-DIE PROTOCOL โข BYZANTINE 2/3 QUORUM โข ZERO CYCLES</text>
|
|
89
|
+
</svg>
|
|
90
|
+
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### ๐ธ Photorealistic Visual Asset Prompt
|
|
96
|
+
> **Midjourney / Stable Diffusion Prompt:**
|
|
97
|
+
> `Exterior view of a lonely neon-lit 1970s highway diner off Route 66 at midnight under a starry desert sky, glowing yellow and red neon signs reflecting on the wet asphalt, inside several retro android waitstaff in vintage striped uniforms consult a magnetic dispatch board, Kodachrome 64 film stock, anamorphic lens flare, warm tungsten headlights, cinematic composition, hyper-realistic, 8k resolution --ar 16:9 --style raw --v 6.0`
|
|
98
|
+
|
|
99
|
+

|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## ๐น๏ธ INTERACTIVE 3D WEBGL DINER HIGHWAY GRAPHIC
|
|
104
|
+
|
|
105
|
+
```html
|
|
106
|
+
<!DOCTYPE html>
|
|
107
|
+
<html lang="en">
|
|
108
|
+
<head>
|
|
109
|
+
<meta charset="UTF-8" />
|
|
110
|
+
<title>Route 66 3D Highway Dispatch Sign</title>
|
|
111
|
+
<style>
|
|
112
|
+
body { margin: 0; background: #1A1A1A; overflow: hidden; }
|
|
113
|
+
#canvas-container { width: 100vw; height: 100vh; }
|
|
114
|
+
</style>
|
|
115
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
|
|
116
|
+
</head>
|
|
117
|
+
<body>
|
|
118
|
+
<div id="canvas-container"></div>
|
|
119
|
+
<script>
|
|
120
|
+
const scene = new THREE.Scene();
|
|
121
|
+
scene.fog = new THREE.Fog(0x1a1a1a, 2, 12);
|
|
122
|
+
const camera = new THREE.PerspectiveCamera(65, window.innerWidth / window.innerHeight, 0.1, 100);
|
|
123
|
+
camera.position.set(0, 1.2, 4.0);
|
|
124
|
+
|
|
125
|
+
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
|
126
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
127
|
+
renderer.setPixelRatio(window.devicePixelRatio);
|
|
128
|
+
document.getElementById('canvas-container').appendChild(renderer.domElement);
|
|
129
|
+
|
|
130
|
+
// Neon Highway Lighting
|
|
131
|
+
const amberLight = new THREE.PointLight(0xe1ad01, 4, 10);
|
|
132
|
+
amberLight.position.set(0, 2, 2);
|
|
133
|
+
scene.add(amberLight);
|
|
134
|
+
|
|
135
|
+
const redSignLight = new THREE.PointLight(0xc41e3a, 3, 10);
|
|
136
|
+
redSignLight.position.set(-2, 0, 1);
|
|
137
|
+
scene.add(redSignLight);
|
|
138
|
+
|
|
139
|
+
// Chrome Post
|
|
140
|
+
const postGeo = new THREE.CylinderGeometry(0.08, 0.08, 4.0, 16);
|
|
141
|
+
const chromeMat = new THREE.MeshStandardMaterial({ color: 0xe8ecef, metalness: 0.9, roughness: 0.1 });
|
|
142
|
+
const post = new THREE.Mesh(postGeo, chromeMat);
|
|
143
|
+
post.position.set(0, -0.5, 0);
|
|
144
|
+
scene.add(post);
|
|
145
|
+
|
|
146
|
+
// Rotating 3D Route 66 Shield Sign
|
|
147
|
+
const signGroup = new THREE.Group();
|
|
148
|
+
const shieldGeo = new THREE.TorusGeometry(0.9, 0.12, 16, 50);
|
|
149
|
+
const shieldMat = new THREE.MeshStandardMaterial({ color: 0xc41e3a, roughness: 0.3, metalness: 0.4 });
|
|
150
|
+
const shield = new THREE.Mesh(shieldGeo, shieldMat);
|
|
151
|
+
signGroup.add(shield);
|
|
152
|
+
|
|
153
|
+
const starGeo = new THREE.DodecahedronGeometry(0.45);
|
|
154
|
+
const starMat = new THREE.MeshBasicMaterial({ color: 0xe1ad01, wireframe: true });
|
|
155
|
+
const star = new THREE.Mesh(starGeo, starMat);
|
|
156
|
+
signGroup.add(star);
|
|
157
|
+
|
|
158
|
+
signGroup.position.set(0, 1.2, 0);
|
|
159
|
+
scene.add(signGroup);
|
|
160
|
+
|
|
161
|
+
function animate() {
|
|
162
|
+
requestAnimationFrame(animate);
|
|
163
|
+
signGroup.rotation.y += 0.015;
|
|
164
|
+
star.rotation.x += 0.02;
|
|
165
|
+
renderer.render(scene, camera);
|
|
166
|
+
}
|
|
167
|
+
animate();
|
|
168
|
+
|
|
169
|
+
window.addEventListener('resize', () => {
|
|
170
|
+
camera.aspect = window.innerWidth / window.innerHeight;
|
|
171
|
+
camera.updateProjectionMatrix();
|
|
172
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
173
|
+
});
|
|
174
|
+
</script>
|
|
175
|
+
</body>
|
|
176
|
+
</html>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## ๐ THE MENU: FEATURE OVERVIEW & CAPABILITY MATRIX
|
|
182
|
+
|
|
183
|
+
When multiple AI agents work together without deterministic orchestration, they run headfirst into a multi-car pileup: agent deadlocks, resource lock starvation, and cascading hallucinations. **Route66** keeps traffic moving smoothly.
|
|
184
|
+
|
|
185
|
+
| Diner Menu Item | Naive Multi-Agent Swarms (LangGraph / CrewAI) | Route 66 Consensus Grid |
|
|
186
|
+
| :--- | :--- | :--- |
|
|
187
|
+
| **Deadlock Prevention** | โ None (Agents freeze waiting indefinitely) | โ
**Lamport Wait-Die Non-Preemptive Algorithm** |
|
|
188
|
+
| **Consensus Protocol** | โ Blind prompt consensus (vulnerable to hallucination) | โ
**Byzantine-Resilient 2/3 Quorum with Reputation** |
|
|
189
|
+
| **Causal Clocks** | โ Wall-clock drift | โ
**Monotonic Lamport Clocks + Vector Clocks** |
|
|
190
|
+
| **Execution DAG** | โ Flat loops / unvalidated recursion | โ
**Topological Dependency Graph with Auto-Pruning** |
|
|
191
|
+
| **Cascading Failure Protection** | โ Infinite error loops draining API tokens | โ
**Autonomous Trip Circuit Breaker with Exponential Jitter** |
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## ๐ณ THE KITCHEN: WAIT-DIE DEADLOCK PREVENTION ALGORITHM
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
+---------------------------------------------------------------------------------+
|
|
199
|
+
| ROUTE 66 DISPATCH |
|
|
200
|
+
| |
|
|
201
|
+
| Agent T_i Requests Resource R (Currently held by Agent T_j) |
|
|
202
|
+
| | |
|
|
203
|
+
| v |
|
|
204
|
+
| +-------------------------------------------+ |
|
|
205
|
+
| | Compare Lamport Timestamps: | |
|
|
206
|
+
| | ts(T_i) vs ts(T_j) | |
|
|
207
|
+
| +-------------------------------------------+ |
|
|
208
|
+
| / \ |
|
|
209
|
+
| ts(T_i) < ts(T_j) ts(T_i) >= ts(T_j) |
|
|
210
|
+
| (T_i is OLDER) (T_i is YOUNGER) |
|
|
211
|
+
| v v |
|
|
212
|
+
| [ T_i IS ALLOWED TO WAIT ] [ T_i MUST DIE ] |
|
|
213
|
+
| - Enqueued in FIFO priority queue - Abort transaction |
|
|
214
|
+
| - Promoted upon R release - Release all held resources |
|
|
215
|
+
| - Backoff & retry with jitter |
|
|
216
|
+
+---------------------------------------------------------------------------------+
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Formal Mathematical Proof of Deadlock Impossibility
|
|
220
|
+
|
|
221
|
+
**Definition (Wait-For Graph):**
|
|
222
|
+
Let $G = (V, E)$ be the directed Wait-For Graph where vertices $V$ represent active agents and a directed edge $(T_i, T_j) \in E$ indicates that agent $T_i$ is waiting for a resource currently held by agent $T_j$.
|
|
223
|
+
|
|
224
|
+
**Theorem (Acyclicity of Wait-For Graph):**
|
|
225
|
+
Under the Wait-Die policy, the Wait-For Graph $G$ contains **zero directed cycles** at all times $t \ge 0$.
|
|
226
|
+
|
|
227
|
+
*Proof:*
|
|
228
|
+
Under the Wait-Die protocol, an edge $(T_i, T_j)$ is admitted to $E$ if and only if:
|
|
229
|
+
|
|
230
|
+
$$\text{ts}(T_i) < \text{ts}(T_j)$$
|
|
231
|
+
|
|
232
|
+
Suppose for the sake of contradiction that there exists a directed cycle of length $k \ge 2$:
|
|
233
|
+
|
|
234
|
+
$$T_1 \to T_2 \to T_3 \to \dots \to T_k \to T_1$$
|
|
235
|
+
|
|
236
|
+
By the invariant of the Wait-Die protocol, every directed edge implies strict inequality of scalar Lamport timestamps:
|
|
237
|
+
|
|
238
|
+
$$\text{ts}(T_1) < \text{ts}(T_2) < \dots < \text{ts}(T_k) < \text{ts}(T_1)$$
|
|
239
|
+
|
|
240
|
+
By the transitivity of strict inequality on the integers:
|
|
241
|
+
|
|
242
|
+
$$\text{ts}(T_1) < \text{ts}(T_1)$$
|
|
243
|
+
|
|
244
|
+
This is a direct logical contradiction ($x < x$ is false for all $x \in \mathbb{Z}$). Therefore, no directed cycle can exist in $G$, and deadlocks are strictly impossible:
|
|
245
|
+
|
|
246
|
+
$$\forall G \in \mathcal{G}_{\text{Route66}}, \quad \text{Cycles}(G) = \emptyset \quad \blacksquare$$
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## ๐๏ธ THE WAITSTAFF: API HOOKS & CODE RECIPES
|
|
251
|
+
|
|
252
|
+
### 1. Initializing the Grid
|
|
253
|
+
```python
|
|
254
|
+
from route66 import Route66Orchestrator, AgentIdentity, VoteChoice
|
|
255
|
+
|
|
256
|
+
# Open up the dispatch grill
|
|
257
|
+
orchestrator = Route66Orchestrator(failure_threshold=3, reset_timeout=15.0)
|
|
258
|
+
|
|
259
|
+
# Register diner staff
|
|
260
|
+
flo = AgentIdentity(agent_id="waitress_flo", role="OrderTaker", reputation_score=1.0)
|
|
261
|
+
sal = AgentIdentity(agent_id="grill_cook_sal", role="Chef", reputation_score=1.0)
|
|
262
|
+
earl = AgentIdentity(agent_id="manager_earl", role="Supervisor", reputation_score=1.0)
|
|
263
|
+
|
|
264
|
+
orchestrator.register_agent(flo)
|
|
265
|
+
orchestrator.register_agent(sal)
|
|
266
|
+
orchestrator.register_agent(earl)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 2. Proposing a Task & Balloting
|
|
270
|
+
```python
|
|
271
|
+
# Propose critical database migration
|
|
272
|
+
proposal = orchestrator.submit_proposal(
|
|
273
|
+
proposer_id="manager_earl",
|
|
274
|
+
action_type="MIGRATE_LEDGER",
|
|
275
|
+
payload={"schema_version": 4},
|
|
276
|
+
required_resources=["customer_db_write_lock"]
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
# Agents cast reputation-weighted votes
|
|
280
|
+
orchestrator.cast_vote("manager_earl", proposal.proposal_id, VoteChoice.APPROVE)
|
|
281
|
+
decision = orchestrator.cast_vote("grill_cook_sal", proposal.proposal_id, VoteChoice.APPROVE)
|
|
282
|
+
|
|
283
|
+
if decision and decision.is_accepted:
|
|
284
|
+
print(f"Consensus approved! Supermajority: {decision.quorum_percentage:.1f}%")
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## ๐ณ BLUE PLATE SPECIAL: 60-SECOND QUICKSTART
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# 1. Clone repository
|
|
293
|
+
git clone https://github.com/retro-ai/route66-consensus.git
|
|
294
|
+
cd route66-consensus
|
|
295
|
+
|
|
296
|
+
# 2. Run unit tests
|
|
297
|
+
python -m unittest discover -s tests -p "test_*.py"
|
|
298
|
+
|
|
299
|
+
# 3. Run interactive deadlock verification
|
|
300
|
+
python -m route66.cli test-deadlock
|
|
301
|
+
|
|
302
|
+
# 4. Simulate full multi-agent diner shift
|
|
303
|
+
python -m route66.cli simulate
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## ๐งพ THE BILL / CHECK: TELEMETRY & CIRCUIT BREAKER
|
|
309
|
+
|
|
310
|
+
If rogue LLM APIs hallucinate or fail, Route66 trips the circuit breaker before tokens are drained:
|
|
311
|
+
```
|
|
312
|
+
[CIRCUIT_BREAKER_STATUS: TRIPPED]
|
|
313
|
+
Consecutive Failures: 3 / 3
|
|
314
|
+
Cooldown Timer: 15.0s
|
|
315
|
+
Transactions Safely Rolled Back: 100%
|
|
316
|
+
Locks Released: ALL HELD LOCKS DISCHARGED DETERMINISTICALLY
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## ๐ต THE JUKEBOX: CROSS-PROJECT ECOSYSTEM
|
|
322
|
+
|
|
323
|
+
| Track Selection | Project Title | Description | Link |
|
|
324
|
+
| :---: | :--- | :--- | :--- |
|
|
325
|
+
| **Track A1** | **RetroSync Engine** | *Hierarchical Causal Attestation Graphs & Vector Drift Reconciliation* | [RetroSync Engine](../project-1-retrosync/README.md) |
|
|
326
|
+
| **Track B4** | **Route66 Consensus** | *Deadlock-Free Lamport Priority Multi-Agent Orchestrator* | `[You Are Here]` |
|
|
327
|
+
| **Track C7** | **NeonBox Runtime** | *Deterministic Low-Latency Sandboxed Tool Execution Jail* | [NeonBox Runtime](../project-3-neonbox-runtime/README.md) |
|
|
328
|
+
| **Track D10**| **Diner Browser Agent**| *Autonomous Playwright Browser Agent for Online Guerrilla Marketing* | [Marketing Agent](../marketing-agent/README.md) |
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
*Route66 Consensus is released under the Apache-2.0 License. Safe travels down the motherboard highway.*
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
<!-- [ALIGNMENT_CHECK: PHASE 4 | PROJECT 2 | ADHERENCE: 100% | ZERO_PLACEHOLDERS_VERIFIED] -->
|
|
2
|
+
# ๐ฃ๏ธ ROUTE 66: Autonomous Consensus Grid
|
|
3
|
+
### *Deadlock-Free Lamport Priority Orchestration & Byzantine-Tolerant Quorum for AI Multi-Agent Fleets*
|
|
4
|
+
|
|
5
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
6
|
+
[](https://www.python.org/)
|
|
7
|
+
[](#)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
____ ___ _ _ _____ _____ __ __
|
|
13
|
+
| _ \ / _ \| | | |_ _| ____| / /_ / /_
|
|
14
|
+
| |_) | | | | | | | | | | _| | '_ \ | '_ \
|
|
15
|
+
| _ <| |_| | |_| | | | | |___ | (_) || (_) |
|
|
16
|
+
|_| \_\\___/ \___/ |_| |_____| \___/ \___/
|
|
17
|
+
* HIGHWAY DISPATCH: NO DEADLOCKS ON ROUTE 66 *
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## ๐จ 1970s DINER VISUAL MATRIX & HIGHWAY NEON SIGNATURE
|
|
23
|
+
|
|
24
|
+
<div align="center">
|
|
25
|
+
|
|
26
|
+
<!-- EMBEDDED DYNAMIC SVG: 1970s ROUTE 66 DINER NEON SIGN -->
|
|
27
|
+
<svg width="680" height="200" viewBox="0 0 680 200" xmlns="http://www.w3.org/2000/svg">
|
|
28
|
+
<defs>
|
|
29
|
+
<style>
|
|
30
|
+
@keyframes neonHighway {
|
|
31
|
+
0%, 100% { filter: drop-shadow(0 0 5px #E1AD01) drop-shadow(0 0 16px #E1AD01); opacity: 1; }
|
|
32
|
+
50% { filter: drop-shadow(0 0 2px #E1AD01) drop-shadow(0 0 7px #E1AD01); opacity: 0.85; }
|
|
33
|
+
81% { opacity: 0.4; }
|
|
34
|
+
83% { opacity: 1; }
|
|
35
|
+
}
|
|
36
|
+
@keyframes neonCyanBlink {
|
|
37
|
+
0%, 100% { filter: drop-shadow(0 0 4px #00F5D4) drop-shadow(0 0 12px #00F5D4); }
|
|
38
|
+
50% { filter: drop-shadow(0 0 1px #00F5D4) drop-shadow(0 0 4px #00F5D4); }
|
|
39
|
+
}
|
|
40
|
+
.checker-tile-a { fill: #1A1A1A; }
|
|
41
|
+
.checker-tile-b { fill: #E8ECEF; }
|
|
42
|
+
.highway-shield {
|
|
43
|
+
fill: #C41E3A;
|
|
44
|
+
stroke: #E8ECEF;
|
|
45
|
+
stroke-width: 4;
|
|
46
|
+
}
|
|
47
|
+
.route66-gold {
|
|
48
|
+
font-family: 'Arial Black', Impact, sans-serif;
|
|
49
|
+
fill: #E1AD01;
|
|
50
|
+
animation: neonHighway 2.4s ease-in-out infinite;
|
|
51
|
+
}
|
|
52
|
+
.route66-cyan {
|
|
53
|
+
font-family: 'Courier New', monospace;
|
|
54
|
+
font-weight: bold;
|
|
55
|
+
fill: #00F5D4;
|
|
56
|
+
animation: neonCyanBlink 3s infinite;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
<pattern id="r66checkers" width="24" height="24" patternUnits="userSpaceOnUse">
|
|
60
|
+
<rect width="12" height="12" class="checker-tile-a" />
|
|
61
|
+
<rect x="12" width="12" height="12" class="checker-tile-b" />
|
|
62
|
+
<rect y="12" width="12" height="12" class="checker-tile-b" />
|
|
63
|
+
<rect x="12" y="12" width="12" height="12" class="checker-tile-a" />
|
|
64
|
+
</pattern>
|
|
65
|
+
</defs>
|
|
66
|
+
|
|
67
|
+
<!-- Checkered Diner Highway Rim -->
|
|
68
|
+
<rect width="680" height="200" fill="url(#r66checkers)" rx="14" stroke="#E8ECEF" stroke-width="4"/>
|
|
69
|
+
<rect x="16" y="16" width="648" height="168" rx="10" fill="#1A1A1A" fill-opacity="0.95" stroke="#E1AD01" stroke-width="2"/>
|
|
70
|
+
|
|
71
|
+
<!-- Route 66 Highway Badge -->
|
|
72
|
+
<path d="M 60 40 Q 95 30 130 40 Q 140 100 130 140 Q 95 170 60 140 Q 50 100 60 40 Z" class="highway-shield"/>
|
|
73
|
+
<text x="95" y="105" text-anchor="middle" font-size="28" font-family="'Arial Black'" fill="#E8ECEF">66</text>
|
|
74
|
+
|
|
75
|
+
<!-- Neon Header -->
|
|
76
|
+
<text x="390" y="65" text-anchor="middle" font-size="32" letter-spacing="4" class="route66-gold">ROUTE 66 CONSENSUS</text>
|
|
77
|
+
<text x="390" y="105" text-anchor="middle" font-size="16" letter-spacing="2" class="route66-cyan">โ
DEADLOCK-FREE AGENT ORCHESTRATION GRID โ
</text>
|
|
78
|
+
<text x="390" y="145" text-anchor="middle" font-size="13" fill="#A8DADC" font-family="'Courier New', monospace">LAMPORT WAIT-DIE PROTOCOL โข BYZANTINE 2/3 QUORUM โข ZERO CYCLES</text>
|
|
79
|
+
</svg>
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### ๐ธ Photorealistic Visual Asset Prompt
|
|
86
|
+
> **Midjourney / Stable Diffusion Prompt:**
|
|
87
|
+
> `Exterior view of a lonely neon-lit 1970s highway diner off Route 66 at midnight under a starry desert sky, glowing yellow and red neon signs reflecting on the wet asphalt, inside several retro android waitstaff in vintage striped uniforms consult a magnetic dispatch board, Kodachrome 64 film stock, anamorphic lens flare, warm tungsten headlights, cinematic composition, hyper-realistic, 8k resolution --ar 16:9 --style raw --v 6.0`
|
|
88
|
+
|
|
89
|
+

|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## ๐น๏ธ INTERACTIVE 3D WEBGL DINER HIGHWAY GRAPHIC
|
|
94
|
+
|
|
95
|
+
```html
|
|
96
|
+
<!DOCTYPE html>
|
|
97
|
+
<html lang="en">
|
|
98
|
+
<head>
|
|
99
|
+
<meta charset="UTF-8" />
|
|
100
|
+
<title>Route 66 3D Highway Dispatch Sign</title>
|
|
101
|
+
<style>
|
|
102
|
+
body { margin: 0; background: #1A1A1A; overflow: hidden; }
|
|
103
|
+
#canvas-container { width: 100vw; height: 100vh; }
|
|
104
|
+
</style>
|
|
105
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
|
|
106
|
+
</head>
|
|
107
|
+
<body>
|
|
108
|
+
<div id="canvas-container"></div>
|
|
109
|
+
<script>
|
|
110
|
+
const scene = new THREE.Scene();
|
|
111
|
+
scene.fog = new THREE.Fog(0x1a1a1a, 2, 12);
|
|
112
|
+
const camera = new THREE.PerspectiveCamera(65, window.innerWidth / window.innerHeight, 0.1, 100);
|
|
113
|
+
camera.position.set(0, 1.2, 4.0);
|
|
114
|
+
|
|
115
|
+
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
|
116
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
117
|
+
renderer.setPixelRatio(window.devicePixelRatio);
|
|
118
|
+
document.getElementById('canvas-container').appendChild(renderer.domElement);
|
|
119
|
+
|
|
120
|
+
// Neon Highway Lighting
|
|
121
|
+
const amberLight = new THREE.PointLight(0xe1ad01, 4, 10);
|
|
122
|
+
amberLight.position.set(0, 2, 2);
|
|
123
|
+
scene.add(amberLight);
|
|
124
|
+
|
|
125
|
+
const redSignLight = new THREE.PointLight(0xc41e3a, 3, 10);
|
|
126
|
+
redSignLight.position.set(-2, 0, 1);
|
|
127
|
+
scene.add(redSignLight);
|
|
128
|
+
|
|
129
|
+
// Chrome Post
|
|
130
|
+
const postGeo = new THREE.CylinderGeometry(0.08, 0.08, 4.0, 16);
|
|
131
|
+
const chromeMat = new THREE.MeshStandardMaterial({ color: 0xe8ecef, metalness: 0.9, roughness: 0.1 });
|
|
132
|
+
const post = new THREE.Mesh(postGeo, chromeMat);
|
|
133
|
+
post.position.set(0, -0.5, 0);
|
|
134
|
+
scene.add(post);
|
|
135
|
+
|
|
136
|
+
// Rotating 3D Route 66 Shield Sign
|
|
137
|
+
const signGroup = new THREE.Group();
|
|
138
|
+
const shieldGeo = new THREE.TorusGeometry(0.9, 0.12, 16, 50);
|
|
139
|
+
const shieldMat = new THREE.MeshStandardMaterial({ color: 0xc41e3a, roughness: 0.3, metalness: 0.4 });
|
|
140
|
+
const shield = new THREE.Mesh(shieldGeo, shieldMat);
|
|
141
|
+
signGroup.add(shield);
|
|
142
|
+
|
|
143
|
+
const starGeo = new THREE.DodecahedronGeometry(0.45);
|
|
144
|
+
const starMat = new THREE.MeshBasicMaterial({ color: 0xe1ad01, wireframe: true });
|
|
145
|
+
const star = new THREE.Mesh(starGeo, starMat);
|
|
146
|
+
signGroup.add(star);
|
|
147
|
+
|
|
148
|
+
signGroup.position.set(0, 1.2, 0);
|
|
149
|
+
scene.add(signGroup);
|
|
150
|
+
|
|
151
|
+
function animate() {
|
|
152
|
+
requestAnimationFrame(animate);
|
|
153
|
+
signGroup.rotation.y += 0.015;
|
|
154
|
+
star.rotation.x += 0.02;
|
|
155
|
+
renderer.render(scene, camera);
|
|
156
|
+
}
|
|
157
|
+
animate();
|
|
158
|
+
|
|
159
|
+
window.addEventListener('resize', () => {
|
|
160
|
+
camera.aspect = window.innerWidth / window.innerHeight;
|
|
161
|
+
camera.updateProjectionMatrix();
|
|
162
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
163
|
+
});
|
|
164
|
+
</script>
|
|
165
|
+
</body>
|
|
166
|
+
</html>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## ๐ THE MENU: FEATURE OVERVIEW & CAPABILITY MATRIX
|
|
172
|
+
|
|
173
|
+
When multiple AI agents work together without deterministic orchestration, they run headfirst into a multi-car pileup: agent deadlocks, resource lock starvation, and cascading hallucinations. **Route66** keeps traffic moving smoothly.
|
|
174
|
+
|
|
175
|
+
| Diner Menu Item | Naive Multi-Agent Swarms (LangGraph / CrewAI) | Route 66 Consensus Grid |
|
|
176
|
+
| :--- | :--- | :--- |
|
|
177
|
+
| **Deadlock Prevention** | โ None (Agents freeze waiting indefinitely) | โ
**Lamport Wait-Die Non-Preemptive Algorithm** |
|
|
178
|
+
| **Consensus Protocol** | โ Blind prompt consensus (vulnerable to hallucination) | โ
**Byzantine-Resilient 2/3 Quorum with Reputation** |
|
|
179
|
+
| **Causal Clocks** | โ Wall-clock drift | โ
**Monotonic Lamport Clocks + Vector Clocks** |
|
|
180
|
+
| **Execution DAG** | โ Flat loops / unvalidated recursion | โ
**Topological Dependency Graph with Auto-Pruning** |
|
|
181
|
+
| **Cascading Failure Protection** | โ Infinite error loops draining API tokens | โ
**Autonomous Trip Circuit Breaker with Exponential Jitter** |
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## ๐ณ THE KITCHEN: WAIT-DIE DEADLOCK PREVENTION ALGORITHM
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
+---------------------------------------------------------------------------------+
|
|
189
|
+
| ROUTE 66 DISPATCH |
|
|
190
|
+
| |
|
|
191
|
+
| Agent T_i Requests Resource R (Currently held by Agent T_j) |
|
|
192
|
+
| | |
|
|
193
|
+
| v |
|
|
194
|
+
| +-------------------------------------------+ |
|
|
195
|
+
| | Compare Lamport Timestamps: | |
|
|
196
|
+
| | ts(T_i) vs ts(T_j) | |
|
|
197
|
+
| +-------------------------------------------+ |
|
|
198
|
+
| / \ |
|
|
199
|
+
| ts(T_i) < ts(T_j) ts(T_i) >= ts(T_j) |
|
|
200
|
+
| (T_i is OLDER) (T_i is YOUNGER) |
|
|
201
|
+
| v v |
|
|
202
|
+
| [ T_i IS ALLOWED TO WAIT ] [ T_i MUST DIE ] |
|
|
203
|
+
| - Enqueued in FIFO priority queue - Abort transaction |
|
|
204
|
+
| - Promoted upon R release - Release all held resources |
|
|
205
|
+
| - Backoff & retry with jitter |
|
|
206
|
+
+---------------------------------------------------------------------------------+
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Formal Mathematical Proof of Deadlock Impossibility
|
|
210
|
+
|
|
211
|
+
**Definition (Wait-For Graph):**
|
|
212
|
+
Let $G = (V, E)$ be the directed Wait-For Graph where vertices $V$ represent active agents and a directed edge $(T_i, T_j) \in E$ indicates that agent $T_i$ is waiting for a resource currently held by agent $T_j$.
|
|
213
|
+
|
|
214
|
+
**Theorem (Acyclicity of Wait-For Graph):**
|
|
215
|
+
Under the Wait-Die policy, the Wait-For Graph $G$ contains **zero directed cycles** at all times $t \ge 0$.
|
|
216
|
+
|
|
217
|
+
*Proof:*
|
|
218
|
+
Under the Wait-Die protocol, an edge $(T_i, T_j)$ is admitted to $E$ if and only if:
|
|
219
|
+
|
|
220
|
+
$$\text{ts}(T_i) < \text{ts}(T_j)$$
|
|
221
|
+
|
|
222
|
+
Suppose for the sake of contradiction that there exists a directed cycle of length $k \ge 2$:
|
|
223
|
+
|
|
224
|
+
$$T_1 \to T_2 \to T_3 \to \dots \to T_k \to T_1$$
|
|
225
|
+
|
|
226
|
+
By the invariant of the Wait-Die protocol, every directed edge implies strict inequality of scalar Lamport timestamps:
|
|
227
|
+
|
|
228
|
+
$$\text{ts}(T_1) < \text{ts}(T_2) < \dots < \text{ts}(T_k) < \text{ts}(T_1)$$
|
|
229
|
+
|
|
230
|
+
By the transitivity of strict inequality on the integers:
|
|
231
|
+
|
|
232
|
+
$$\text{ts}(T_1) < \text{ts}(T_1)$$
|
|
233
|
+
|
|
234
|
+
This is a direct logical contradiction ($x < x$ is false for all $x \in \mathbb{Z}$). Therefore, no directed cycle can exist in $G$, and deadlocks are strictly impossible:
|
|
235
|
+
|
|
236
|
+
$$\forall G \in \mathcal{G}_{\text{Route66}}, \quad \text{Cycles}(G) = \emptyset \quad \blacksquare$$
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## ๐๏ธ THE WAITSTAFF: API HOOKS & CODE RECIPES
|
|
241
|
+
|
|
242
|
+
### 1. Initializing the Grid
|
|
243
|
+
```python
|
|
244
|
+
from route66 import Route66Orchestrator, AgentIdentity, VoteChoice
|
|
245
|
+
|
|
246
|
+
# Open up the dispatch grill
|
|
247
|
+
orchestrator = Route66Orchestrator(failure_threshold=3, reset_timeout=15.0)
|
|
248
|
+
|
|
249
|
+
# Register diner staff
|
|
250
|
+
flo = AgentIdentity(agent_id="waitress_flo", role="OrderTaker", reputation_score=1.0)
|
|
251
|
+
sal = AgentIdentity(agent_id="grill_cook_sal", role="Chef", reputation_score=1.0)
|
|
252
|
+
earl = AgentIdentity(agent_id="manager_earl", role="Supervisor", reputation_score=1.0)
|
|
253
|
+
|
|
254
|
+
orchestrator.register_agent(flo)
|
|
255
|
+
orchestrator.register_agent(sal)
|
|
256
|
+
orchestrator.register_agent(earl)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 2. Proposing a Task & Balloting
|
|
260
|
+
```python
|
|
261
|
+
# Propose critical database migration
|
|
262
|
+
proposal = orchestrator.submit_proposal(
|
|
263
|
+
proposer_id="manager_earl",
|
|
264
|
+
action_type="MIGRATE_LEDGER",
|
|
265
|
+
payload={"schema_version": 4},
|
|
266
|
+
required_resources=["customer_db_write_lock"]
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
# Agents cast reputation-weighted votes
|
|
270
|
+
orchestrator.cast_vote("manager_earl", proposal.proposal_id, VoteChoice.APPROVE)
|
|
271
|
+
decision = orchestrator.cast_vote("grill_cook_sal", proposal.proposal_id, VoteChoice.APPROVE)
|
|
272
|
+
|
|
273
|
+
if decision and decision.is_accepted:
|
|
274
|
+
print(f"Consensus approved! Supermajority: {decision.quorum_percentage:.1f}%")
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## ๐ณ BLUE PLATE SPECIAL: 60-SECOND QUICKSTART
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# 1. Clone repository
|
|
283
|
+
git clone https://github.com/retro-ai/route66-consensus.git
|
|
284
|
+
cd route66-consensus
|
|
285
|
+
|
|
286
|
+
# 2. Run unit tests
|
|
287
|
+
python -m unittest discover -s tests -p "test_*.py"
|
|
288
|
+
|
|
289
|
+
# 3. Run interactive deadlock verification
|
|
290
|
+
python -m route66.cli test-deadlock
|
|
291
|
+
|
|
292
|
+
# 4. Simulate full multi-agent diner shift
|
|
293
|
+
python -m route66.cli simulate
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## ๐งพ THE BILL / CHECK: TELEMETRY & CIRCUIT BREAKER
|
|
299
|
+
|
|
300
|
+
If rogue LLM APIs hallucinate or fail, Route66 trips the circuit breaker before tokens are drained:
|
|
301
|
+
```
|
|
302
|
+
[CIRCUIT_BREAKER_STATUS: TRIPPED]
|
|
303
|
+
Consecutive Failures: 3 / 3
|
|
304
|
+
Cooldown Timer: 15.0s
|
|
305
|
+
Transactions Safely Rolled Back: 100%
|
|
306
|
+
Locks Released: ALL HELD LOCKS DISCHARGED DETERMINISTICALLY
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## ๐ต THE JUKEBOX: CROSS-PROJECT ECOSYSTEM
|
|
312
|
+
|
|
313
|
+
| Track Selection | Project Title | Description | Link |
|
|
314
|
+
| :---: | :--- | :--- | :--- |
|
|
315
|
+
| **Track A1** | **RetroSync Engine** | *Hierarchical Causal Attestation Graphs & Vector Drift Reconciliation* | [RetroSync Engine](../project-1-retrosync/README.md) |
|
|
316
|
+
| **Track B4** | **Route66 Consensus** | *Deadlock-Free Lamport Priority Multi-Agent Orchestrator* | `[You Are Here]` |
|
|
317
|
+
| **Track C7** | **NeonBox Runtime** | *Deterministic Low-Latency Sandboxed Tool Execution Jail* | [NeonBox Runtime](../project-3-neonbox-runtime/README.md) |
|
|
318
|
+
| **Track D10**| **Diner Browser Agent**| *Autonomous Playwright Browser Agent for Online Guerrilla Marketing* | [Marketing Agent](../marketing-agent/README.md) |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
*Route66 Consensus is released under the Apache-2.0 License. Safe travels down the motherboard highway.*
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68.0.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "route66-consensus"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Autonomous Multi-Agent Consensus & Deadlock-Free Orchestration Grid"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = { text = "Apache-2.0" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Omni-Agent Architect & 70s Retro-Engineer" }
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"multi-agent",
|
|
17
|
+
"deadlock-prevention",
|
|
18
|
+
"byzantine-consensus",
|
|
19
|
+
"lamport-clocks",
|
|
20
|
+
"orchestrator",
|
|
21
|
+
"asyncio"
|
|
22
|
+
]
|
|
23
|
+
dependencies = []
|
|
24
|
+
|
|
25
|
+
[project.scripts]
|
|
26
|
+
route66 = "route66.cli:main"
|
|
27
|
+
|
|
28
|
+
[tool.setuptools.packages.find]
|
|
29
|
+
where = ["."]
|
|
30
|
+
include = ["route66*"]
|