1
0

Save point: expanded AMA to AMERICAN MEDICAL ASSOCIATION + mesh network connectivity fix (4 nearest neighbors + BFS partition repair)

This commit is contained in:
avi
2026-05-14 17:30:11 -05:00
parent 16797b04e8
commit 8296dd819e

View File

@@ -1839,7 +1839,7 @@
typeHtmlCalmly(txt,"THE CARNEGIE FOUNDATION COMMISSIONED THE FLEXNER REPORT. IT EVALUATED EVERY MEDICAL SCHOOL IN AMERICA. HALF WERE SHUT DOWN — PARTICULARLY THOSE TRAINING WOMEN, BLACK DOCTORS, AND RURAL PRACTITIONERS.",()=>{ typeHtmlCalmly(txt,"THE CARNEGIE FOUNDATION COMMISSIONED THE FLEXNER REPORT. IT EVALUATED EVERY MEDICAL SCHOOL IN AMERICA. HALF WERE SHUT DOWN — PARTICULARLY THOSE TRAINING WOMEN, BLACK DOCTORS, AND RURAL PRACTITIONERS.",()=>{
const t2=setTimeout(()=>{ const t2=setTimeout(()=>{
txt.innerHTML+="\n\n"; txt.innerHTML+="\n\n";
typeHtmlCalmly(txt,"THE AMA TOOK CONTROL OF MEDICAL LICENSING. MEDICINE BECAME A GATEKEPT PROFESSION.",()=>{ typeHtmlCalmly(txt,"THE AMERICAN MEDICAL ASSOCIATION TOOK CONTROL OF MEDICAL LICENSING. MEDICINE BECAME A GATEKEPT PROFESSION.",()=>{
showNextBtn('next10a');showNextBtn('sources10a'); showNextBtn('next10a');showNextBtn('sources10a');
},undefined,undefined,h10c); },undefined,undefined,h10c);
},800); },800);
@@ -2028,7 +2028,7 @@
txt.innerHTML+="\n\n"; txt.innerHTML+="\n\n";
vis.classList.add('visible'); vis.classList.add('visible');
let html='<table class="comp-table"><tr><th></th><th>TRADITIONAL</th><th>DECENTRALIZED</th></tr>'; let html='<table class="comp-table"><tr><th></th><th>TRADITIONAL</th><th>DECENTRALIZED</th></tr>';
html+='<tr><td>GATEKEEPERS</td><td>✅ YES — AMA, FDA, INSURANCE</td><td>❌ NONE</td></tr>'; html+='<tr><td>GATEKEEPERS</td><td>✅ YES — AMERICAN MEDICAL ASSOCIATION, FDA, INSURANCE</td><td>❌ NONE</td></tr>';
html+='<tr><td>YOUR DATA</td><td>OWNED BY THE SYSTEM</td><td>YOU CONTROL</td></tr>'; html+='<tr><td>YOUR DATA</td><td>OWNED BY THE SYSTEM</td><td>YOU CONTROL</td></tr>';
html+='<tr><td>INNOVATION</td><td>APPROVAL-BASED</td><td>PRACTICE-BASED</td></tr>'; html+='<tr><td>INNOVATION</td><td>APPROVAL-BASED</td><td>PRACTICE-BASED</td></tr>';
html+='<tr><td>COST</td><td>$4.1T AND RISING</td><td>MARKET-BASED</td></tr>'; html+='<tr><td>COST</td><td>$4.1T AND RISING</td><td>MARKET-BASED</td></tr>';
@@ -2651,7 +2651,50 @@
.filter(n => n.id !== node.id && n.online) .filter(n => n.id !== node.id && n.online)
.map(n => ({ node: n, dist: Math.hypot(n.x - node.x, n.y - node.y) })) .map(n => ({ node: n, dist: Math.hypot(n.x - node.x, n.y - node.y) }))
.sort((a, b) => a.dist - b.dist); .sort((a, b) => a.dist - b.dist);
node.connections = distances.slice(0, 3).map(d => d.node.id); node.connections = distances.slice(0, 4).map(d => d.node.id);
}
ensureConnectivity();
}
function ensureConnectivity() {
const online = meshState.nodes.filter(n => n.online);
if (online.length < 2) return;
const adj = {};
for (const node of online) {
adj[node.id] = node.connections.filter(cid => {
const cn = meshState.nodes.find(n => n.id === cid);
return cn && cn.online;
});
}
const visited = new Set();
const queue = [online[0].id];
visited.add(online[0].id);
while (queue.length) {
const cur = queue.shift();
for (const nb of (adj[cur] || [])) {
if (!visited.has(nb)) {
visited.add(nb);
queue.push(nb);
}
}
}
const unreachable = online.filter(n => !visited.has(n.id));
for (const orphan of unreachable) {
let best = null;
let bestDist = Infinity;
for (const node of meshState.nodes) {
if (!node.online || !visited.has(node.id)) continue;
const d = Math.hypot(orphan.x - node.x, orphan.y - node.y);
if (d < bestDist) {
bestDist = d;
best = node;
}
}
if (best) {
orphan.connections.push(best.id);
best.connections.push(orphan.id);
visited.add(orphan.id);
}
} }
} }