Redesign system interconnections display: group by health, inline diagnoses
Remove misleading Reputation -> Era Gates connection (score 0 meant "already sufficient," not broken). Add diagnosis and eventLabel fields to each connection. Group output: broken links first with [!!] and plain-language explanation, then healthy links as compact one-liners. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -205,15 +205,35 @@ export function printConsoleReport(result: SimulationResult, config: SimulationC
|
||||
console.log('');
|
||||
|
||||
// --- System Interconnections ---
|
||||
console.log(`System Interconnections (overall: ${interconnections.overallScore.toFixed(1)}/10):`);
|
||||
for (const c of interconnections.connections) {
|
||||
console.log(`System Interconnections (${interconnections.overallScore.toFixed(1)}/10):`);
|
||||
const broken = interconnections.connections.filter(c => c.score <= 2);
|
||||
const moderate = interconnections.connections.filter(c => c.score >= 3 && c.score <= 6);
|
||||
const healthy = interconnections.connections.filter(c => c.score >= 7);
|
||||
|
||||
if (broken.length === 0 && moderate.length === 0) {
|
||||
console.log(` All ${interconnections.connections.length} links healthy.`);
|
||||
} else {
|
||||
if (broken.length > 0) {
|
||||
console.log(' Broken:');
|
||||
for (const c of broken) {
|
||||
const bar = '#'.repeat(c.score) + '-'.repeat(10 - c.score);
|
||||
console.log(` ${pad(`${c.from} -> ${c.to}`, 30)} [${bar}] ${c.score}/10 (${c.events} events)`);
|
||||
console.log(` [!!] ${pad(`${c.from} -> ${c.to}`, 28)} [${bar}] ${String(c.score).padStart(2)}/10`);
|
||||
console.log(` ${c.diagnosis}`);
|
||||
}
|
||||
}
|
||||
if (moderate.length > 0) {
|
||||
console.log(' Moderate:');
|
||||
for (const c of moderate) {
|
||||
const bar = '#'.repeat(c.score) + '-'.repeat(10 - c.score);
|
||||
console.log(` [~~] ${pad(`${c.from} -> ${c.to}`, 28)} [${bar}] ${String(c.score).padStart(2)}/10 ${c.diagnosis}`);
|
||||
}
|
||||
}
|
||||
if (healthy.length > 0) {
|
||||
console.log(' Healthy:');
|
||||
for (const c of healthy) {
|
||||
const bar = '#'.repeat(c.score) + '-'.repeat(10 - c.score);
|
||||
console.log(` [ok] ${pad(`${c.from} -> ${c.to}`, 28)} [${bar}] ${String(c.score).padStart(2)}/10 (${c.events} ${c.eventLabel})`);
|
||||
}
|
||||
if (interconnections.deadLinks.length > 0) {
|
||||
console.log(` [!] Dead links (no observed effect):`);
|
||||
for (const d of interconnections.deadLinks) {
|
||||
console.log(` ${d.from} -> ${d.to}: ${d.evidence}`);
|
||||
}
|
||||
}
|
||||
console.log('');
|
||||
|
||||
@@ -6,7 +6,9 @@ export interface SystemConnection {
|
||||
to: string;
|
||||
score: number;
|
||||
evidence: string;
|
||||
diagnosis: string;
|
||||
events: number;
|
||||
eventLabel: string;
|
||||
}
|
||||
|
||||
export interface InterconnectionResult {
|
||||
@@ -139,11 +141,16 @@ export function analyzeSystemInterconnections(
|
||||
}
|
||||
}
|
||||
const score = events > 0 ? scoreFromDelta(totalDelta, events, 5) : 0;
|
||||
const avgDelta = events > 0 ? (totalDelta / events).toFixed(1) : '0';
|
||||
connections.push({
|
||||
from: 'Research', to: 'Model Capability', score, events,
|
||||
eventLabel: 'research completions',
|
||||
evidence: events > 0
|
||||
? `${events} research completions, avg capability delta: ${(totalDelta / events).toFixed(1)}`
|
||||
? `${events} research completions, avg capability delta: ${avgDelta}`
|
||||
: 'No research completions observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No research completions observed'
|
||||
: `Research completions did not improve model capability (avg delta: ${avgDelta})`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -162,9 +169,13 @@ export function analyzeSystemInterconnections(
|
||||
const score = events > 0 && totalDelta > 0 ? Math.min(10, Math.round((totalDelta / events / 100) * 10)) : 0;
|
||||
connections.push({
|
||||
from: 'Research', to: 'Infrastructure', score, events,
|
||||
eventLabel: 'research completions',
|
||||
evidence: events > 0
|
||||
? `${events} research completions, avg FLOPS delta: ${(totalDelta / events).toFixed(0)}`
|
||||
: 'No research completions observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No research completions observed'
|
||||
: `Research completions did not increase compute FLOPS`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -181,11 +192,16 @@ export function analyzeSystemInterconnections(
|
||||
}
|
||||
}
|
||||
const score = events > 0 ? scoreFromDelta(totalDelta, events, 3) : 0;
|
||||
const avgChange = events > 0 ? (totalDelta / events).toFixed(1) : '0';
|
||||
connections.push({
|
||||
from: 'Talent', to: 'Training', score, events,
|
||||
eventLabel: 'hiring spikes',
|
||||
evidence: events > 0
|
||||
? `${events} hiring spikes, avg capability change: ${(totalDelta / events).toFixed(1)}`
|
||||
? `${events} hiring spikes, avg capability change: ${avgChange}`
|
||||
: 'No significant hiring events observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No significant hiring events observed'
|
||||
: `Hiring had no effect on training capability (avg delta: ${avgChange})`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -204,9 +220,13 @@ export function analyzeSystemInterconnections(
|
||||
const score = events > 0 && totalDelta > 0 ? Math.min(10, Math.round((totalDelta / events) * 5)) : 0;
|
||||
connections.push({
|
||||
from: 'Talent', to: 'Enterprise', score, events,
|
||||
eventLabel: 'hiring spikes',
|
||||
evidence: events > 0
|
||||
? `${events} hiring spikes, avg enterprise contract delta: ${(totalDelta / events).toFixed(1)}`
|
||||
: 'No hiring events observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No hiring events observed'
|
||||
: `Hiring did not lead to enterprise contracts`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -225,9 +245,13 @@ export function analyzeSystemInterconnections(
|
||||
const score = events > 0 ? Math.min(10, Math.max(0, Math.round((totalDelta / events) * 20))) : 0;
|
||||
connections.push({
|
||||
from: 'Infrastructure', to: 'Revenue', score, events,
|
||||
eventLabel: 'compute expansions',
|
||||
evidence: events > 0
|
||||
? `${events} compute growth events, avg revenue growth: ${((totalDelta / events) * 100).toFixed(1)}%`
|
||||
: 'No compute growth events observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No compute growth events observed'
|
||||
: `Compute growth did not increase revenue`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -249,9 +273,13 @@ export function analyzeSystemInterconnections(
|
||||
const score = events > 0 ? Math.min(10, Math.max(0, Math.round((totalDelta / events) * 10))) : 0;
|
||||
connections.push({
|
||||
from: 'Models', to: 'Revenue', score, events,
|
||||
eventLabel: 'model deployments',
|
||||
evidence: events > 0
|
||||
? `${events} model deployments, avg revenue change: ${((totalDelta / events) * 100).toFixed(1)}%`
|
||||
: 'No model deployments observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No model deployments observed'
|
||||
: `Model deployments did not increase revenue`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -270,34 +298,13 @@ export function analyzeSystemInterconnections(
|
||||
const score = events > 0 && totalDelta > 0 ? Math.min(10, Math.round((totalDelta / events) * 5)) : 0;
|
||||
connections.push({
|
||||
from: 'Models', to: 'Enterprise', score, events,
|
||||
eventLabel: 'model deployments',
|
||||
evidence: events > 0
|
||||
? `${events} deployments, avg enterprise contract delta: ${(totalDelta / events).toFixed(1)}`
|
||||
: 'No model deployments observed',
|
||||
});
|
||||
}
|
||||
|
||||
// Reputation → Era gates
|
||||
{
|
||||
let score = 0;
|
||||
const eraChanges = [];
|
||||
for (let i = 1; i < metrics.length; i++) {
|
||||
if (metrics[i].era !== metrics[i - 1].era) {
|
||||
eraChanges.push({ tick: metrics[i].tick, repBefore: metrics[i - 1].reputation });
|
||||
}
|
||||
}
|
||||
if (eraChanges.length > 0) {
|
||||
let bindingCount = 0;
|
||||
for (const ec of eraChanges) {
|
||||
const before = findMetricAtTick(metrics, ec.tick - 120);
|
||||
if (before && (ec.repBefore - before.reputation) > 1) bindingCount++;
|
||||
}
|
||||
score = Math.min(10, Math.round((bindingCount / eraChanges.length) * 10));
|
||||
}
|
||||
connections.push({
|
||||
from: 'Reputation', to: 'Era Gates', score, events: eraChanges.length,
|
||||
evidence: eraChanges.length > 0
|
||||
? `${eraChanges.length} era transitions observed`
|
||||
: 'No era transitions observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No model deployments observed'
|
||||
: `Model deployments did not attract enterprise contracts`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -320,9 +327,13 @@ export function analyzeSystemInterconnections(
|
||||
const score = events > 0 ? Math.min(10, Math.max(0, Math.round((totalDelta / events) * 10))) : 0;
|
||||
connections.push({
|
||||
from: 'Funding', to: 'Growth', score, events,
|
||||
eventLabel: 'funding rounds',
|
||||
evidence: events > 0
|
||||
? `${events} funding rounds, avg revenue growth: ${((totalDelta / events) * 100).toFixed(1)}%`
|
||||
: 'No funding rounds observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: events === 0 ? 'No funding rounds observed'
|
||||
: `Funding rounds did not boost revenue`,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -338,11 +349,16 @@ export function analyzeSystemInterconnections(
|
||||
}
|
||||
}
|
||||
const score = totalSamples > 0 ? Math.min(10, Math.round((wellUtilizedCount / totalSamples) * 10)) : 0;
|
||||
const pct = totalSamples > 0 ? ((wellUtilizedCount / totalSamples) * 100).toFixed(1) : '0';
|
||||
connections.push({
|
||||
from: 'Compute', to: 'Serving', score, events: totalSamples,
|
||||
eventLabel: 'utilization samples',
|
||||
evidence: totalSamples > 0
|
||||
? `${wellUtilizedCount}/${totalSamples} samples with healthy utilization (20-95%)`
|
||||
: 'No compute capacity observed',
|
||||
diagnosis: score >= 7 ? 'Strong link'
|
||||
: totalSamples === 0 ? 'No compute capacity observed'
|
||||
: `Only ${wellUtilizedCount}/${totalSamples} samples (${pct}%) in healthy utilization range (20-95%)`,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ interface WorkerResult {
|
||||
revenueStreamDiversity: number;
|
||||
};
|
||||
systemInterconnections: {
|
||||
connections: Array<{ from: string; to: string; score: number; evidence: string; events: number }>;
|
||||
connections: Array<{ from: string; to: string; score: number; evidence: string; diagnosis: string; events: number; eventLabel: string }>;
|
||||
overallScore: number;
|
||||
};
|
||||
cashFlow: { bankruptcyRisks: number };
|
||||
|
||||
Reference in New Issue
Block a user