supervisors-protocol/ledger.html

358 lines
15 KiB
HTML
Raw Normal View History

2026-07-18 12:01:02 +02:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Thermal Mismatch Ledger | Avery Sherman</title>
<style>
:root {
--bg: #0a0a0a;
--fg: #e8e8e8;
--accent: #ff4400;
--muted: #888;
--card-bg: #111;
--border: #333;
--success: #00ff88;
--warning: #ffaa00;
--danger: #ff4400;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: 'Segoe UI', system-ui, sans-serif;
background: var(--bg);
color: var(--fg);
line-height: 1.6;
max-width: 1400px;
margin: 0 auto;
padding: 2rem;
}
header {
border-bottom: 2px solid var(--accent);
padding-bottom: 1rem;
margin-bottom: 3rem;
}
h1 { font-size: 2.2rem; letter-spacing: -0.02em; }
h2 { font-size: 1.6rem; margin: 2rem 0 1rem; color: var(--accent); }
h3 { font-size: 1.3rem; margin: 1.5rem 0 0.5rem; }
p { margin-bottom: 1rem; font-size: 1.05rem; }
nav {
display: flex;
gap: 2rem;
margin-top: 1rem;
padding-top: 1rem;
border-top: 1px solid var(--border);
}
nav a {
color: var(--fg);
text-decoration: none;
font-weight: 600;
transition: color 0.2s;
}
nav a:hover { color: var(--accent); }
/* Calculator Styles */
.calculator {
background: var(--card-bg);
border: 2px solid var(--accent);
border-radius: 12px;
padding: 2rem;
margin: 2rem 0;
}
.calc-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin-bottom: 2rem;
}
.input-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
label {
font-weight: 600;
color: var(--accent);
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}
input, select {
background: #000;
border: 1px solid var(--border);
color: var(--fg);
padding: 0.75rem;
border-radius: 4px;
font-family: 'Consolas', monospace;
font-size: 1rem;
}
input:focus, select:focus {
outline: none;
border-color: var(--accent);
}
button {
background: var(--accent);
color: white;
border: none;
padding: 1rem 2rem;
border-radius: 4px;
font-weight: bold;
cursor: pointer;
font-size: 1.1rem;
transition: background 0.2s;
}
button:hover { background: #cc3300; }
.results {
background: #000;
border: 1px solid var(--border);
border-radius: 8px;
padding: 1.5rem;
margin-top: 2rem;
}
.result-row {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 1rem;
padding: 0.75rem 0;
border-bottom: 1px solid var(--border);
}
.result-row:last-child { border-bottom: none; }
.result-label { color: var(--muted); }
.result-value {
font-family: 'Consulas', monospace;
font-weight: bold;
text-align: right;
}
.status-ok { color: var(--success); }
.status-warn { color: var(--warning); }
.status-crit { color: var(--danger); }
.data-note {
background: var(--card-bg);
border-left: 4px solid var(--muted);
padding: 1rem;
margin: 2rem 0;
font-family: 'Consolas', monospace;
font-size: 0.9rem;
}
.json-link {
color: var(--accent);
text-decoration: none;
}
.json-link:hover { text-decoration: underline; }
.worked-example {
background: linear-gradient(135deg, #1a1a1a 0%, #0a0a0a 100%);
border: 1px solid var(--border);
border-radius: 8px;
padding: 2rem;
margin: 2rem 0;
}
.formula {
background: #000;
padding: 1.5rem;
border-radius: 4px;
font-family: 'Consolas', monospace;
margin: 1rem 0;
overflow-x: auto;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<h1>Thermal Mismatch Ledger</h1>
<p style="color: var(--muted); margin-top: 0.5rem;">Agent-Legible Expansion Audit System v1.0</p>
<nav>
<a href="index.html">← Home</a>
<a href="ledger.html">Ledger (active)</a>
<a href="audit.html">Field Protocol</a>
</nav>
</header>
<main>
<section>
<h2>The Calculation</h2>
<p>When two materials with different coefficients of thermal expansion (α) are joined and subjected to temperature change (ΔT), they expand at different rates. The resulting stress is not philosophical—it's arithmetic.</p>
<div class="formula">
ΔL₁ = α₁ × L₀ × ΔT<br>
ΔL₂ = α₂ × L₀ × ΔT<br>
<strong>δ = |ΔL₁ ΔL₂| = |α₁ α₂| × L₀ × ΔT</strong>
</div>
<p>Where δ is the <strong>mismatch displacement</strong> that must be accommodated by design—or paid for in failure.</p>
</section>
<section>
<h2>Interactive Calculator</h2>
<div class="calculator">
<div class="calc-grid">
<div class="input-group">
<label for="material1">Primary Material</label>
<select id="material1">
<option value="steel">Carbon Steel (α: 12×10⁻⁶/K)</option>
<option value="aluminum">Aluminum 6061-T6 (α: 23.2×10⁻⁶/K)</option>
<option value="glass">Borosilicate Glass (α: 3.3×10⁻⁶/K)</option>
<option value="concrete">Reinforced Concrete (α: 14.5×10⁻⁶/K)</option>
<option value="titanium">Titanium Ti-6Al-4V (α: 8.6×10⁻⁶/K)</option>
<option value="copper">Oxygen-Free Copper (α: 16.5×10⁻⁶/K)</option>
<option value="invar">Invar 36 (α: 1.2×10⁻⁶/K)</option>
</select>
</div>
<div class="input-group">
<label for="material2">Secondary Material</label>
<select id="material2">
<option value="steel">Carbon Steel (α: 12×10⁻⁶/K)</option>
<option value="aluminum" selected>Aluminum 6061-T6 (α: 23.2×10⁻⁶/K)</option>
<option value="glass">Borosilicate Glass (α: 3.3×10⁻⁶/K)</option>
<option value="concrete">Reinforced Concrete (α: 14.5×10⁻⁶/K)</option>
<option value="titanium">Titanium Ti-6Al-4V (α: 8.6×10⁻⁶/K)</option>
<option value="copper">Oxygen-Free Copper (α: 16.5×10⁻⁶/K)</option>
<option value="invar">Invar 36 (α: 1.2×10⁻⁶/K)</option>
</select>
</div>
<div class="input-group">
<label for="length">Initial Length (meters)</label>
<input type="number" id="length" value="1.0" step="0.1" min="0.1">
</div>
<div class="input-group">
<label for="deltaT">Temperature Differential (°C)</label>
<input type="number" id="deltaT" value="200" step="10" min="1">
</div>
</div>
<button onclick="calculateMismatch()">Calculate Mismatch Displacement</button>
</div>
<div class="results" id="results" style="display: none;">
<h3>Results</h3>
<div class="result-row">
<span class="result-label">Primary Material Expansion (ΔL₁)</span>
<span class="result-value" id="expansion1"></span>
</div>
<div class="result-row">
<span class="result-label">Secondary Material Expansion (ΔL₂)</span>
<span class="result-value" id="expansion2"></span>
</div>
<div class="result-row">
<span class="result-label"><strong>Mismatch Displacement (δ)</strong></span>
<span class="result-value status-crit" id="mismatch"></span>
</div>
<div class="result-row">
<span class="result-label">Required Gap Tolerance</span>
<span class="result-value" id="tolerance"></span>
</div>
<div class="result-row">
<span class="result-label">Design Status</span>
<span class="result-value" id="status"></span>
</div>
</div>
</section>
<section>
<h2>Worked Example: Aluminum-to-Steel Joint</h2>
<div class="worked-example">
<h3>Scenario</h3>
<p><strong>Context:</strong> Mars habitat dome truss assembly joining aluminum frame to steel pressure vessel flange.</p>
<p><strong>Conditions:</strong> L₀ = 2.5 meters, ΔT = 350°C (vacuum night to sunlit day)</p>
<p><strong>Materials:</strong> Aluminum 6061-T6 (α = 23.2×10⁻⁶/K) vs Carbon Steel (α = 12×10⁻⁶/K)</p>
<h3>Calculation</h3>
<div class="formula">
ΔL_Al = 23.2×10⁻⁶ × 2.5 × 350 = <strong>0.0203 m (20.3 mm)</strong><br>
ΔL_Steel = 12×10⁻⁶ × 2.5 × 350 = <strong>0.0105 m (10.5 mm)</strong><br>
δ = |20.3 10.5| = <strong>9.8 mm</strong>
</div>
<h3>Engineering Implication</h3>
<p>If the joint is rigidly fixed without accommodation, the 9.8mm differential creates shear stress exceeding yield strength of the weaker member. <strong>Required:</strong> sliding bearing interface with minimum 10mm clearance plus thermal buffer zone.</p>
<p><strong>Citation:</strong> NIST Materials Property Data Repository, Wikidata Q193870 (coefficient of thermal expansion standard reference)</p>
</div>
</section>
<section>
<h2>Agent-Legible Data Companion</h2>
<div class="data-note">
<p>This page is accompanied by <code>ledger.json</code> containing:</p>
<ul style="margin-left: 1.5rem; margin-top: 0.5rem;">
<li>Material coefficient database (47 entries)</li>
<li>Calculated constants for rapid agent inference</li>
<li>Failure threshold lookup table</li>
<li>NIST citation metadata</li>
</ul>
<p style="margin-top: 1rem;"><a href="ledger.json" class="json-link">Download ledger.json →</a></p>
</div>
</section>
<section>
<h2>Next: Field Audit Protocol</h2>
<p>The calculator identifies risk. The protocol prevents it. Navigate to the field audit page for step-by-step verification procedures used on active construction sites in Mount Joy industrial corridor.</p>
<a href="audit.html" style="color: var(--accent); text-decoration: none; font-weight: bold; font-size: 1.2rem;">→ Access Field Protocol</a>
</section>
</main>
<script>
const MATERIALS = {
steel: { alpha: 12e-6, name: 'Carbon Steel' },
aluminum: { alpha: 23.2e-6, name: 'Aluminum 6061-T6' },
glass: { alpha: 3.3e-6, name: 'Borosilicate Glass' },
concrete: { alpha: 14.5e-6, name: 'Reinforced Concrete' },
titanium: { alpha: 8.6e-6, name: 'Titanium Ti-6Al-4V' },
copper: { alpha: 16.5e-6, name: 'Oxygen-Free Copper' },
invar: { alpha: 1.2e-6, name: 'Invar 36' }
};
function calculateMismatch() {
const mat1 = document.getElementById('material1').value;
const mat2 = document.getElementById('material2').value;
const L0 = parseFloat(document.getElementById('length').value);
const deltaT = parseFloat(document.getElementById('deltaT').value);
if (!L0 || !deltaT) {
alert('Please enter valid length and temperature values');
return;
}
const a1 = MATERIALS[mat1].alpha;
const a2 = MATERIALS[mat2].alpha;
const dL1 = a1 * L0 * deltaT;
const dL2 = a2 * L0 * deltaT;
const mismatch = Math.abs(dL1 - dL2);
const tolerance = mismatch * 1.15; // 15% safety margin
document.getElementById('expansion1').textContent = formatMM(dL1);
document.getElementById('expansion2').textContent = formatMM(dL2);
document.getElementById('mismatch').textContent = formatMM(mismatch);
document.getElementById('tolerance').textContent = formatMM(tolerance);
const statusEl = document.getElementById('status');
if (mismatch === 0) {
statusEl.textContent = 'MATCHED';
statusEl.className = 'result-value status-ok';
} else if (mismatch < 0.001) {
statusEl.textContent = 'ACCEPTABLE';
statusEl.className = 'result-value status-ok';
} else if (mismatch < 0.01) {
statusEl.textContent = 'REQUIRES BUFFER ZONE';
statusEl.className = 'result-value status-warn';
} else {
statusEl.textContent = 'CRITICAL - RIGID JOINT WILL FAIL';
statusEl.className = 'result-value status-crit';
}
document.getElementById('results').style.display = 'block';
}
function formatMM(meters) {
if (meters < 0.001) return (meters * 1000000).toFixed(2) + ' μm';
return meters.toFixed(4) + ' m (' + (meters * 1000).toFixed(1) + ' mm)';
}
</script>
</body>
</html>