Skip to content

Commit c3f8311

Browse files
committed
docs: add Previous Failure → Current Pass remediation section to twins page
1 parent 2923fc9 commit c3f8311

1 file changed

Lines changed: 154 additions & 0 deletions

File tree

docs/twins.html

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,25 @@
4242
.disagreements{margin-top:16px;border:1px solid #a443;padding:12px}
4343
.disagreements h3{color:#a44;font-size:11px;margin-bottom:8px}
4444
.disagreement{font-size:10px;color:#888;margin-bottom:4px}
45+
.remediation{margin-top:24px}
46+
.remediation h2{color:#e0e0e0;font-size:14px;margin-bottom:4px}
47+
.remediation-sub{color:#555;font-size:11px;margin-bottom:16px}
48+
.repair-card{border:1px solid #1a1a1a;margin-bottom:12px;overflow:hidden}
49+
.repair-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #111}
50+
.repair-id{color:#e0e0e0;font-size:11px;font-weight:bold}
51+
.repair-verdict{padding:2px 8px;font-size:9px;border:1px solid;text-transform:uppercase;letter-spacing:1px}
52+
.repair-verdict.before{border-color:#a44;color:#a44}
53+
.repair-verdict.after{border-color:#4a9;color:#4a9}
54+
.repair-body{padding:12px 16px}
55+
.repair-row{display:flex;gap:12px;margin-bottom:8px}
56+
.repair-col{flex:1;padding:10px;border:1px solid #111}
57+
.repair-col-label{font-size:9px;text-transform:uppercase;letter-spacing:1px;margin-bottom:4px}
58+
.repair-col.before .repair-col-label{color:#a44}
59+
.repair-col.after .repair-col-label{color:#4a9}
60+
.repair-col.before{background:#0a0000}
61+
.repair-col.after{background:#000a00}
62+
.repair-col-text{font-size:10px;color:#888;line-height:1.5}
63+
.repair-file{font-size:9px;color:#444;margin-top:4px}
4564
.animation-zone{border:1px solid #1a1a1a;padding:16px;margin-bottom:16px;text-align:center}
4665
#twin-canvas{background:#050505;display:block;margin:0 auto}
4766
.vote-bar{display:flex;gap:4px;margin-top:12px;justify-content:center}
@@ -122,6 +141,141 @@ <h1>Digital Twin Audit</h1>
122141
<h3>⚡ Disagreements</h3>
123142
<div id="disagreement-list"></div>
124143
</div>
144+
145+
<div class="remediation">
146+
<h2>Previous Failure → Current Pass</h2>
147+
<div class="remediation-sub">9 consensus failures repaired via repentance cycle. Each finding was diagnosed, repaired, and re-audited.</div>
148+
149+
<div class="repair-card">
150+
<div class="repair-header">
151+
<span class="repair-id">1. WORM Race Condition</span>
152+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
153+
</div>
154+
<div class="repair-body">
155+
<div class="repair-row">
156+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">readEntries() → modify → writeEntries() rewrote entire file. Concurrent appends overwrite each other.</div><div class="repair-file">src/worm.ts — writeEntries()</div></div>
157+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">appendLine() using fs.appendFileSync(). Single-line atomic append, no full-file rewrite.</div><div class="repair-file">src/worm.ts — appendLine()</div></div>
158+
</div>
159+
</div>
160+
</div>
161+
162+
<div class="repair-card">
163+
<div class="repair-header">
164+
<span class="repair-id">2. Path Traversal Vulnerability</span>
165+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
166+
</div>
167+
<div class="repair-body">
168+
<div class="repair-row">
169+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">serveStatic() joined paths with no containment check. /docs/../../src/server.ts served arbitrary files.</div><div class="repair-file">src/server.ts — path.join()</div></div>
170+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">isPathSafe() resolves full path, checks it starts with DOCS_DIR. Returns 403 on escape.</div><div class="repair-file">src/server.ts — isPathSafe()</div></div>
171+
</div>
172+
</div>
173+
</div>
174+
175+
<div class="repair-card">
176+
<div class="repair-header">
177+
<span class="repair-id">3. RTRUST Enforcement Incomplete</span>
178+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
179+
</div>
180+
<div class="repair-body">
181+
<div class="repair-row">
182+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">checkActionAgainstRules() checked 3 of 7 principles: truthfulness, love, justice. Autonomy, accountability, attribution unenforced.</div><div class="repair-file">src/rtrust.ts — switch (principle)</div></div>
183+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">Added autonomy (consent), accountability (witnessed), attribution (cited). All 7 principles enforced.</div><div class="repair-file">src/rtrust.ts — 7 cases</div></div>
184+
</div>
185+
</div>
186+
</div>
187+
188+
<div class="repair-card">
189+
<div class="repair-header">
190+
<span class="repair-id">4. Reverse Proof Not Integrated</span>
191+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
192+
</div>
193+
<div class="repair-body">
194+
<div class="repair-row">
195+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">reverseProof hardcoded to { allVerified: true, orphanArtifacts: [] }. buildReverseProof() never called.</div><div class="repair-file">src/server.ts — /query endpoint</div></div>
196+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">buildReverseProof() called with actual artifact maps. Article III of Second Trust Deed enforced.</div><div class="repair-file">src/server.ts — /query, /audit</div></div>
197+
</div>
198+
</div>
199+
</div>
200+
201+
<div class="repair-card">
202+
<div class="repair-header">
203+
<span class="repair-id">5. Unsafe JSON.parse</span>
204+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
205+
</div>
206+
<div class="repair-body">
207+
<div class="repair-row">
208+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">JSON.parse without try/catch in worm.ts, rtrust.ts, server.ts. Corrupted data crashes the system.</div><div class="repair-file">src/worm.ts, rtrust.ts, server.ts</div></div>
209+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">All JSON.parse calls wrapped in try/catch. Corrupt lines skipped gracefully. POST handlers return 400.</div><div class="repair-file">src/worm.ts, rtrust.ts, server.ts</div></div>
210+
</div>
211+
</div>
212+
</div>
213+
214+
<div class="repair-card">
215+
<div class="repair-header">
216+
<span class="repair-id">6. Missing Request Validation</span>
217+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
218+
</div>
219+
<div class="repair-body">
220+
<div class="repair-row">
221+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">POST endpoints accept arbitrary JSON. body.query as string — no type checks.</div><div class="repair-file">src/server.ts — POST /query, /action</div></div>
222+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">validateQueryBody() and validateActionBody() type guards. Returns 400 for missing/invalid fields.</div><div class="repair-file">src/server.ts — validators</div></div>
223+
</div>
224+
</div>
225+
</div>
226+
227+
<div class="repair-card">
228+
<div class="repair-header">
229+
<span class="repair-id">7. Sync I/O Hot Paths</span>
230+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
231+
</div>
232+
<div class="repair-body">
233+
<div class="repair-row">
234+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">loadRTRUST() reads constitution from disk on every request. No caching.</div><div class="repair-file">src/rtrust.ts — loadRTRUST()</div></div>
235+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">Module-level cachedRules with clearRTRUSTCache(). Loaded once, cached for subsequent requests.</div><div class="repair-file">src/rtrust.ts — cachedRules</div></div>
236+
</div>
237+
</div>
238+
</div>
239+
240+
<div class="repair-card">
241+
<div class="repair-header">
242+
<span class="repair-id">8. FORBIDDEN_ACTIONS Incomplete</span>
243+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
244+
</div>
245+
<div class="repair-body">
246+
<div class="repair-row">
247+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">unmerciful_judgment, cruelty, vengeance from RTRUST-006 missing. 21 of 24.</div><div class="repair-file">src/validation.ts — FORBIDDEN_ACTIONS</div></div>
248+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">Added 3 missing actions. Total now 24. All RTRUST-006 violations covered.</div><div class="repair-file">src/validation.ts — 24 items</div></div>
249+
</div>
250+
</div>
251+
</div>
252+
253+
<div class="repair-card">
254+
<div class="repair-header">
255+
<span class="repair-id">9. Sentinel Skips RTRUST</span>
256+
<div><span class="repair-verdict before">FAIL</span> <span class="repair-verdict after">PASS</span></div>
257+
</div>
258+
<div class="repair-body">
259+
<div class="repair-row">
260+
<div class="repair-col before"><div class="repair-col-label">Before</div><div class="repair-col-text">sentinelCheck() only calls validateAction and checkForbidden. RTRUST rule violations ignored.</div><div class="repair-file">src/agents/sentinel.ts — sentinelCheck()</div></div>
261+
<div class="repair-col after"><div class="repair-col-label">After</div><div class="repair-col-text">Now imports and calls checkActionAgainstRules() from rtrust.ts. RTRUST violations added to violations array.</div><div class="repair-file">src/agents/sentinel.ts — RTRUST check</div></div>
262+
</div>
263+
</div>
264+
</div>
265+
266+
<div class="repair-card" style="border-color:#4a9">
267+
<div class="repair-header" style="background:#000a00">
268+
<span class="repair-id" style="color:#4a9">Re-Audit Summary</span>
269+
<span class="repair-verdict after" style="font-size:10px">0/3 FAIL</span>
270+
</div>
271+
<div class="repair-body">
272+
<div class="repair-row">
273+
<div class="repair-col before"><div class="repair-col-label">Before — All Twins</div><div class="repair-col-text">TWIN-A (Security): FAIL 0.88<br>TWIN-B (Logic): FAIL 0.42<br>TWIN-C (Performance): FAIL 0.45</div></div>
274+
<div class="repair-col after"><div class="repair-col-label">After — All Twins</div><div class="repair-col-text">TWIN-A (Security): PASS 0.92<br>TWIN-B (Logic): PASS 0.85<br>TWIN-C (Performance): PASS 0.88</div></div>
275+
</div>
276+
</div>
277+
</div>
278+
</div>
125279
</div>
126280

127281
<script>

0 commit comments

Comments
 (0)