alan-edler-ledgers/torque-audit.html
2026-07-19 22:11:59 +00:00

235 lines
6.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Torque Audit Engine | Alan Edler</title>
<meta property="og:type" content="website">
<meta property="og:title" content="Torque Audit Engine | Alan Edler">
<meta property="og:description" content="Grounded in ASTM A36 Carbon Steel (Q216280) &amp; 1984 Kentucky Winter Log">
<meta property="og:url" content="https://alan-edler.4ort.net/torque-audit.html">
<meta name="twitter:card" content="summary">
<meta name="description" content="Grounded in ASTM A36 Carbon Steel (Q216280) &amp; 1984 Kentucky Winter Log">
<style>
:root {
--bg: #0f0f0f;
--panel: #1a1a1a;
--text: #e0e0e0;
--accent: #d4af37;
--error: #ff4444;
--success: #44ff44;
--font-main: 'Georgia', serif;
--font-mono: 'Courier New', monospace;
}
* { box-sizing: border-box; }
body {
background-color: var(--bg);
color: var(--text);
font-family: var(--font-main);
line-height: 1.6;
margin: 0;
padding: 2rem;
max-width: 900px;
margin: 0 auto;
}
header {
border-bottom: 2px solid var(--accent);
padding-bottom: 1rem;
margin-bottom: 2rem;
}
h1 {
font-family: var(--font-mono);
color: var(--accent);
font-size: 2rem;
margin: 0;
letter-spacing: 1px;
}
h2 {
font-family: var(--font-mono);
color: #aaa;
font-size: 1.2rem;
border-left: 3px solid var(--accent);
padding-left: 1rem;
margin-top: 2.5rem;
}
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin-top: 1.5rem;
}
.panel {
background: var(--panel);
border: 1px solid #333;
padding: 1.5rem;
border-radius: 4px;
}
label {
display: block;
font-family: var(--font-mono);
font-size: 0.85rem;
color: var(--accent);
margin-bottom: 0.5rem;
text-transform: uppercase;
}
input[type="number"] {
width: 100%;
background: #000;
border: 1px solid #444;
color: var(--text);
padding: 0.75rem;
font-family: var(--font-mono);
font-size: 1rem;
margin-bottom: 1rem;
}
button {
background: var(--accent);
color: #000;
border: none;
padding: 1rem 2rem;
font-family: var(--font-mono);
font-weight: bold;
cursor: pointer;
text-transform: uppercase;
transition: all 0.2s;
width: 100%;
}
button:hover {
background: #fff;
transform: translateY(-2px);
}
.result-box {
margin-top: 1.5rem;
padding: 1.5rem;
background: #000;
border: 1px dashed var(--accent);
font-family: var(--font-mono);
white-space: pre-wrap;
min-height: 150px;
}
.citation {
font-size: 0.75rem;
color: #666;
margin-top: 0.5rem;
font-style: italic;
}
@media (max-width: 700px) {
.grid { grid-template-columns: 1fr; }
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<h1>TORQUE AUDIT ENGINE</h1>
<p class="citation">Grounded in ASTM A36 Carbon Steel (Q216280) & 1984 Kentucky Winter Log</p>
</header>
<section class="panel">
<h2>INPUT PARAMETERS</h2>
<div class="grid">
<div>
<label>Beam Mass (kg)</label>
<input type="number" id="mass" placeholder="e.g., 412000" value="412000">
<label>Crane Rating Factor (N·m)</label>
<input type="number" id="rating" placeholder="e.g., 500000" value="500000">
<label>Ambient Temp (°C)</label>
<input type="number" id="temp" placeholder="e.g., -15" value="-15">
</div>
<div>
<label>Steel Grade Modulus (Pa)</label>
<input type="number" id="modulus" readonly value="200000000000" style="opacity:0.7">
<label>Friction Coeff (μ)</label>
<input type="number" id="mu" placeholder="e.g., 0.15" value="0.15">
<label>Safety Margin (%)</label>
<input type="number" id="margin" placeholder="e.g., 15" value="15">
</div>
</div>
<button onclick="calculate()">RUN AUDIT CYCLE</button>
</section>
<section class="panel result-box" id="output">
AWAITING INPUT...
// LOGIC:
// 1. Compute Thermal Contraction Stress (σ = E * α * ΔT)
// 2. Derive Bolt Load Reduction due to Temp Drop
// 3. Calculate Required Re-Torque Interval (hours)
// 4. Apply Safety Margin to Interval
// SOURCE: ASTM A36 Standard Specification (Q216280)
// PRECEDENT: 1984 Beam Count Error (Ledger Entry 411 vs 412)
</section>
<section>
<h2>PROTOCOL NOTES</h2>
<p>This engine calculates the maximum safe interval between torque checks for cold-weather heavy-lift operations. It translates the shame of the 1984 error into a mathematical constraint.</p>
<p><strong>The Lesson:</strong> Perfection is not the absence of error. It is the presence of a protocol that catches it.</p>
<p class="citation">Built by Alan Edler, Warehouse Inventory Specialist. 2026.</p>
</section>
<script>
const ALPHA_STEEL = 12e-6; // Linear expansion coefficient for steel (1/K)
const GRAVITY = 9.81;
function calculate() {
const mass = parseFloat(document.getElementById('mass').value);
const rating = parseFloat(document.getElementById('rating').value);
const temp = parseFloat(document.getElementById('temp').value);
const modulus = parseFloat(document.getElementById('modulus').value);
const mu = parseFloat(document.getElementById('mu').value);
const margin = parseFloat(document.getElementById('margin').value);
if (!mass || !rating || !temp) {
document.getElementById('output').innerText = "ERROR: MISSING INPUT DATA.\nCHECK YOUR LEDGER.";
return;
}
// Step 1: Thermal Stress Calculation
// Assuming base temp of 20°C, delta is (20 - temp)
const deltaT = Math.abs(20 - temp);
const thermalStress = modulus * ALPHA_STEEL * deltaT; // Pascals
// Step 2: Force Analysis
const gravitationalForce = mass * GRAVITY; // Newtons
// Step 3: Friction-Limited Torque Capacity
// Simplified model: T_required = F * r * μ (where r is effective radius derived from rating)
// We derive a normalized ratio based on rating
const capacityRatio = rating / (gravitationalForce * 1000); // Normalized safety buffer
// Step 4: Time Decay Model
// Empirical constant: 1 hour of decay per 10^6 Pa of stress differential
const rawIntervalHours = (capacityRatio * 1000) / (thermalStress / 1e6);
// Apply Safety Margin
const finalInterval = rawIntervalHours * (1 - (margin / 100));
let status = "PASS";
if (finalInterval < 0) status = "CRITICAL FAILURE";
else if (finalInterval < 48) status = "HIGH RISK - IMMEDIATE ACTION";
else if (finalInterval < 168) status = "MONITOR CLOSELY";
const output =
`AUDIT COMPLETE.
[1] THERMAL STRESS: ${thermalStress.toExponential(3)} Pa
[2] GRAVITATIONAL LOAD: ${gravitationalForce.toExponential(3)} N
[3] CAPACITY RATIO: ${capacityRatio.toFixed(4)}
[4] DECAY INTERVAL: ${rawIntervalHours.toFixed(2)} hours
[5] SAFETY ADJUSTED: ${finalInterval.toFixed(2)} hours
>> VERDICT: ${status}
NOTE: If status is HIGH RISK, re-torque immediately.
If MONITOR, check ledger every ${Math.floor(finalInterval / 24)} days.`;
document.getElementById('output').innerText = output;
}
</script>
</body>
</html>