ratingtesting commited on
Commit
c54957a
·
verified ·
1 Parent(s): 049efe6

Upload index.html with huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +327 -327
index.html CHANGED
@@ -1,327 +1,327 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <script type="application/ld+json">
5
- {
6
- "@context": "https://schema.org",
7
- "@type": "SoftwareSourceCode",
8
- "name": "keelwright",
9
- "description": "Engine for vibe-coders and loop-coders who ship AI-generated code they cannot read. 28 machine-enforced safety checks: SQL injection, hardcoded secrets, slopsquatting, reward hacking, doom loops, false reports, missing auth, business logic bypasses.",
10
- "url": "https://github.com/ratingtesting/keelwright",
11
- "license": "https://creativecommons.org/licenses/by/4.0/",
12
- "author": {
13
- "@type": "Organization",
14
- "name": "ratingtesting",
15
- "url": "https://github.com/ratingtesting"
16
- },
17
- "keywords": "vibe coding, loop coding, AI code security, guardrails, OWASP, SQL injection, secrets, slopsquatting, reward hacking, doom loop, circuit breaker, token burn, context rot, over-engineering, tech debt, code quality, non-programmer, autonomous coding",
18
- "applicationCategory": "DeveloperApplication",
19
- "operatingSystem": "cross-platform",
20
- "softwareHelp": {
21
- "@type": "CreativeWork",
22
- "url": "https://github.com/ratingtesting/keelwright/blob/main/README.md"
23
- }
24
- }
25
- </script>
26
- <meta charset="UTF-8">
27
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
28
- <title>Keelwright — Architecture</title>
29
- <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
30
- <style>
31
- * { margin:0; padding:0; box-sizing:border-box; }
32
- body {
33
- background:#020617; color:#e2e8f0; font-family:'JetBrains Mono',monospace;
34
- padding:40px 36px; width:1200px; font-size:22px; line-height:1.55;
35
- background-image:
36
- linear-gradient(#0b1220 1px,transparent 1px),
37
- linear-gradient(90deg,#0b1220 1px,transparent 1px);
38
- background-size:48px 48px;
39
- }
40
- .head { display:flex; align-items:center; gap:14px; margin-bottom:8px; }
41
- .dot { width:16px; height:16px; border-radius:50%; background:#34d399; box-shadow:0 0 16px #34d399; animation:p 2s infinite; }
42
- @keyframes p { 0%,100%{opacity:1} 50%{opacity:.35} }
43
- h1 { font-size:40px; font-weight:700; letter-spacing:.5px; }
44
- h1 .kw { color:#34d399; }
45
- .sub { color:#64748b; font-size:18px; margin:2px 0 32px 30px; }
46
-
47
- .layer { border-radius:14px; padding:24px 26px; margin-bottom:22px; position:relative; }
48
- .ltag { position:absolute; top:-11px; left:20px; font-size:14px; letter-spacing:1.5px;
49
- background:#020617; padding:0 10px; color:#64748b; text-transform:uppercase; }
50
- .l-human { background:rgba(8,51,68,.35); border:2px solid #22d3ee; }
51
- .l-ctrl { background:rgba(30,41,59,.5); border:2px solid #94a3b8; }
52
- .l-build { background:rgba(6,78,59,.28); border:2px solid #34d399; }
53
- .l-sup { background:transparent; border:none; padding:0; margin-bottom:18px; }
54
- .l-ops { background:rgba(120,53,15,.22); border:2px dashed #fbbf24; }
55
-
56
- .title { font-size:26px; font-weight:700; margin-bottom:12px; display:flex; align-items:center; gap:12px; }
57
- .c-cyan{color:#22d3ee}.c-em{color:#34d399}.c-vi{color:#a78bfa}.c-am{color:#fbbf24}
58
- .c-rose{color:#fb7185}.c-or{color:#fb923c}.c-sl{color:#94a3b8}
59
- .star { color:#fbbf24; font-weight:700; }
60
- .starstar { color:#fb923c; font-weight:700; }
61
-
62
- /* 2-column grid for boxes */
63
- .row2 { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
64
- .box { background:#0f172a; border-radius:10px; padding:16px 18px; font-size:22px; line-height:1.55; }
65
- .muted { color:#94a3b8; }
66
- .tiny { font-size:17px; color:#64748b; }
67
- .catch { color:#fb7185; font-size:17px; }
68
- .arrowdown { text-align:center; color:#34d399; font-size:30px; line-height:1; margin:6px 0; }
69
-
70
- /* build loop steps */
71
- .steps { display:flex; flex-direction:column; gap:12px; }
72
- .step { display:flex; align-items:flex-start; gap:14px; background:#0f172a; border-left:4px solid #34d399;
73
- border-radius:8px; padding:14px 18px; }
74
- .step .n { color:#34d399; font-weight:700; min-width:32px; font-size:24px; }
75
- .step .body { flex:1; font-size:20px; line-height:1.55; }
76
- .step.sec { border-left-color:#fb7185; }
77
- .step.verify { border-left-color:#22d3ee; }
78
- .step.match { border-left-color:#a78bfa; background:rgba(76,29,149,.18); }
79
- .loopback { display:flex; align-items:center; gap:10px; color:#34d399; font-size:14px;
80
- justify-content:flex-end; margin-top:6px; }
81
-
82
- /* Layer 3: 2-column + 1 */
83
- .sup2 { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
84
- .supbox { background:#0f172a; border-radius:10px; padding:20px 22px; }
85
- .supbox.cb { border-top:4px solid #fb923c; }
86
- .supbox.st { border-top:4px solid #a78bfa; }
87
- .supbox.sl { border-top:4px solid #22d3ee; }
88
- .supbox h4 { font-size:24px; margin-bottom:10px; }
89
- .supbox ul { list-style:none; font-size:19px; line-height:1.7; color:#cbd5e1; }
90
- .crosscut { background:rgba(136,19,55,.25); border:2px solid #fb7185; border-radius:10px;
91
- padding:16px 20px; margin-top:16px; font-size:18px; line-height:1.7; }
92
-
93
- /* Layer 4: 3 nodes per row */
94
- .ops-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; }
95
- .ops-row2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:12px; }
96
- .ops-node { background:#0f172a; border:2px solid #fbbf24; border-radius:10px; padding:16px 18px;
97
- text-align:center; font-size:22px; }
98
- .ops-node .em { display:block; font-size:28px; margin-bottom:4px; }
99
- .ops-node .sub2 { font-size:16px; color:#94a3b8; margin-top:4px; }
100
- .ops-arrow { color:#fbbf24; font-size:20px; text-align:center; }
101
- .rollback { text-align:center; color:#fb7185; font-size:13px; margin-top:12px;
102
- border-top:2px dashed #fb7185; padding-top:12px; }
103
-
104
- /* Banner: 2 columns */
105
- .banner2 { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-top:20px; }
106
- .banner2 .bcard3 { grid-column:1 / -1; }
107
- .bcard { background:#0f172a; border-radius:10px; padding:16px 18px; }
108
- .bcard .h { font-size:24px; font-weight:700; margin-bottom:6px; }
109
- .bcard .t { font-size:17px; color:#94a3b8; line-height:1.5; }
110
- .b1{border-left:4px solid #fbbf24}.b2{border-left:4px solid #34d399}.b3{border-left:4px solid #22d3ee}
111
-
112
- .foot { color:#475569; font-size:16px; margin-top:24px; text-align:center; letter-spacing:.5px; }
113
-
114
- /* risk map: 2 columns */
115
- .riskmap { background:rgba(136,19,55,.16); border:2px solid #fb7185; border-radius:14px;
116
- padding:22px 22px 18px; margin-top:20px; position:relative; }
117
- .riskmap .rtag { position:absolute; top:-11px; left:22px; font-size:12px; letter-spacing:1.2px;
118
- background:#020617; padding:0 10px; color:#fb7185; text-transform:uppercase; }
119
- .riskmap h3 { font-size:26px; font-weight:700; color:#fb7185; margin-bottom:4px; }
120
- .riskmap .rsub { font-size:17px; color:#94a3b8; margin-bottom:18px; }
121
- .rgrid { display:grid; grid-template-columns:1fr 1fr; gap:12px 18px; }
122
- .ritem { background:#0f172a; border-radius:8px; padding:12px 16px; font-size:18px; line-height:1.5;
123
- border-left:3px solid #34d399; }
124
- .ritem.warn { border-left-color:#fbbf24; }
125
- .ritem .rn { font-weight:700; color:#e2e8f0; }
126
- .ritem .rm { color:#94a3b8; }
127
- .ritem .rb { float:right; font-size:18px; }
128
- .rlegend { font-size:16px; color:#64748b; margin-top:16px; line-height:1.7; }
129
- .rlegend b { color:#94a3b8; }
130
- .kds { background:#0a0f1a; padding:28px; border-radius:12px; margin-top:24px; }
131
- .kds h3 { font-size:26px; color:#fbbf24; margin:0 0 8px; text-align:center; }
132
- .ksub { font-size:15px; color:#94a3b8; text-align:center; margin-bottom:18px; line-height:1.6; }
133
- .ksub b { color:#e2e8f0; }
134
- .ktable { width:100%; border-collapse:collapse; font-size:15px; }
135
- .ktable th { background:#1e293b; color:#fbbf24; padding:8px 12px; text-align:left; border:1px solid #334155; }
136
- .ktable td { padding:8px 12px; border:1px solid #1e293b; color:#e2e8f0; }
137
- .ktable tr:nth-child(even) td { background:#0f1626; }
138
- .khi { font-weight:800; color:#4ade80; font-size:17px; text-align:center; }
139
- .kpart { font-weight:800; color:#fbbf24; text-align:center; }
140
- .kzero { font-weight:800; color:#f87171; text-align:center; }
141
- </style>
142
- </head>
143
- <body>
144
- <div class="head"><div class="dot"></div><h1><span class="kw">keelwright</span> — engine for vibe / loop coding</h1></div>
145
- <div class="sub">a loop with nested loops · safety cannot be switched off · a human who does not read code stays in control</div>
146
-
147
- <!-- LAYER 0 -->
148
- <div class="layer l-human">
149
- <span class="ltag">Layer 0 · the human</span>
150
- <div class="title"><span class="c-cyan">▣ YOU</span> <span class="muted">(need not read code)</span> &nbsp;→&nbsp; GOAL + ACCEPTANCE CRITERIA &nbsp;&nbsp;◄──&nbsp;&nbsp; PLAIN-LANGUAGE REPORT / BUILD</div>
151
- <div class="tiny"><span class="star">★ DNA:</span> understands LOGIC, not syntax. Every gate below is translated to plain words — <span class="muted">"this checks the password is right"</span>, never "string arg to fn()".</div>
152
- </div>
153
- <div class="arrowdown">▼</div>
154
-
155
- <!-- LAYER 1: 2×2 grid -->
156
- <div class="layer l-ctrl">
157
- <span class="ltag">Layer 1 · control</span>
158
- <div class="row2">
159
- <div class="box">
160
- <div class="title"><span class="c-sl">🎛 AUTONOMY DIAL</span></div>
161
- <div>Autopilot → Checkpoint → Copilot</div>
162
- <div class="tiny"><span class="star">★</span> freedom = blast radius (auth / money / prod → Copilot: approve each)</div>
163
- </div>
164
- <div class="box">
165
- <div class="title"><span class="c-sl">🗂 TRIAGE</span></div>
166
- <div>Trivial · Low · Standard · High · Critical</div>
167
- <div class="tiny"><span class="star">★</span> machinery = risk. Trivial → Express, no per-iter scans</div>
168
- </div>
169
- <div class="box">
170
- <div class="title"><span class="c-sl">▸ PHASE 1–2</span></div>
171
- <div>Requirements → Planning</div>
172
- <div class="tiny"><span class="star">★</span> no acceptance criteria? ⛔ STOP, ask. Never invents scope</div>
173
- </div>
174
- <div class="box">
175
- <div class="title"><span class="c-sl">⬚ LOOP DESIGN</span></div>
176
- <div>5 whiteboard questions before any code</div>
177
- <div class="tiny"><span class="star">★</span> trigger · check · action · stop · escalate — skip = demo</div>
178
- </div>
179
- </div>
180
- </div>
181
- <div class="arrowdown">▼</div>
182
-
183
- <!-- LAYER 2 -->
184
- <div class="layer l-build">
185
- <span class="ltag">Layer 2 · the build loop (Phase 3 — one task = one turn, repeats)</span>
186
- <div class="title"><span class="c-em">⟳ PHASE 3 · BUILDING</span> <span class="tiny">— discipline INSIDE writing, not cleanup afterward</span></div>
187
- <div class="steps">
188
- <div class="step"><span class="n">①</span><div class="body">@implementer writes (1 file/fn) ◄ <b>REUSE LADDER</b> — reuse before adding a lib/abstraction <span class="catch">· catches: over-engineering</span></div></div>
189
- <div class="step"><span class="n">②</span><div class="body"><b>BACKPRESSURE GATES:</b> tests │ typecheck │ lint │ build</div></div>
190
- <div class="step"><span class="n">③</span><div class="body"><b>STRUCTURAL-INTEGRITY GATE</b> <span class="star">★</span> jscpd·lizard·madge/import-linter·eslint-boundaries·knip/vulture <span class="catch">· catches: spaghetti, lava flow, tangled deps</span></div></div>
191
- <div class="step sec"><span class="n">④</span><div class="body"><span class="c-rose">🛡 SECURITY GATES R1–R12</span> <span class="starstar">★★</span> machine-enforced, cannot disable even on Autopilot <span class="catch">· catches: OWASP·secrets·slopsquat·IDOR</span></div></div>
192
- <div class="step sec"><span class="n">⑤</span><div class="body"><span class="c-rose">🔍 R3 BUSINESS-LOGIC REVIEW</span> ► spawn @reviewer (fresh context) <span class="star">★</span> NOT self-review <span class="catch">· catches: happy-path bias, auth holes</span></div></div>
193
- <div class="step verify"><span class="n">⑦</span><div class="body"><span class="c-cyan">✅ VERIFICATION GATE</span> <span class="starstar">★★</span> read+compile+diff · test red→green · not tautological · ad-hoc <span class="catch">· catches: "works on my machine", "I fixed it" with no diff</span></div></div>
194
- <div class="step match"><span class="n">⑧</span><div class="body"><span class="c-vi">⟲ MATCH LOOP (nested sub-loop)</span> <span class="star">★</span> Generator ⇄ Analyst: render → browser → numeric a11y (contrast≥4.5:1 · no overflow · sizes) — repeat until convergence</div></div>
195
- <div class="step"><span class="n">⑨</span><div class="body">git commit (atomic) ► ⑩ PROGRESS.md + STATUS + tool-budget count</div></div>
196
- <div class="step"><span class="n">⑪</span><div class="body">cadence: /3 → STABILITY scan · /10 → AUTORESEARCH · /N → refactor checkpoint</div></div>
197
- </div>
198
- <div class="loopback">↩ LOOP BACK — next task, while tasks remain</div>
199
- </div>
200
- <div class="arrowdown">▼ &nbsp;perimeter supervision&nbsp; ▼</div>
201
-
202
- <!-- LAYER 3: 2-column -->
203
- <div class="l-sup">
204
- <div class="sup2">
205
- <div class="supbox cb">
206
- <h4><span class="c-or">🚦 CIRCUIT-BREAKER</span></h4>
207
- <ul>
208
- <li class="catch">catches: doom loop + token/$ burn</li>
209
- <li>4 caps: 50 iters / 5 no-progress / 2h / 3× repeat</li>
210
- <li>+ RATE LIMITING (event-driven loops)</li>
211
- <li>+ PER-ITER BUDGETS ≤10 shell / 5 file / 3 external</li>
212
- <li>→ graceful STOP with report</li>
213
- </ul>
214
- </div>
215
- <div class="supbox st">
216
- <h4><span class="c-vi">📉 STABILITY (5 modes)</span></h4>
217
- <ul>
218
- <li class="catch">catches: goal drift, oscillation, thrash</li>
219
- <li>dead-retry · oscillation · drift · amplification · feedback-starvation</li>
220
- <li>ESCALATION: 3→REFINE 5→PIVOT 2→ask 3→blocker</li>
221
- <li>+ CONTEXT COMPACTION (iter > 20)</li>
222
- <li>a "keep" resets the counters</li>
223
- </ul>
224
- </div>
225
- </div>
226
- <!-- Self-learning: full width -->
227
- <div class="supbox sl" style="margin-top:14px;">
228
- <h4><span class="c-cyan">🔄 SELF-LEARNING</span> <span class="star">★</span></h4>
229
- <ul>
230
- <li>Phoenix: root-cause of repeats ACROSS sessions</li>
231
- <li>Autoresearch: lessons → memory (promote on repeat)</li>
232
- <li class="catch">learns, doesn't repeat the same mistake</li>
233
- </ul>
234
- </div>
235
- <div class="crosscut">
236
- <span class="starstar">★★ REWARD-HACKING GUARD</span> — never weaken/delete a test to go green; fix the code, not the metric. &nbsp;·&nbsp;
237
- <b>PERSONAS</b> (delegate_task): @architect @implementer @tester @reviewer @architecture-critic @visual-qa &nbsp;·&nbsp;
238
- <b>STRUCTURED FEEDBACK</b> into each iteration: relevant code + intent + "repeat vs new" flag — not a raw stack-trace dump.
239
- </div>
240
- </div>
241
-
242
- <!-- LAYER 4: 3 per row + 2 -->
243
- <div class="layer l-ops">
244
- <span class="ltag">Layer 4 · outer operational cycle (production lifecycle)</span>
245
- <div class="ops-grid">
246
- <div class="ops-node"><span class="em">🔭</span>OBSERVE<span class="sub2">read prod logs/reports</span></div>
247
- <div class="ops-node"><span class="em">🩺</span>ANALYZE<span class="sub2">root-cause + plan</span></div>
248
- <div class="ops-node"><span class="em">🔧</span>FIX<span class="sub2">run the build loop</span></div>
249
- </div>
250
- <div class="ops-row2">
251
- <div class="ops-node"><span class="em">✅</span>VALIDATE<span class="sub2">post-deploy metric compare</span></div>
252
- <div class="ops-node"><span class="em">🎓</span>LEARN<span class="sub2">update lessons</span></div>
253
- </div>
254
- <div class="rollback">⭐ verify-in-production + AUTO-ROLLBACK (git revert, not force-push) — a bad deploy that passes tests is caught by the metric, not by a human &nbsp;·&nbsp; ⚡ PARALLEL: independent subtasks fan out as separate empty-context loops</div>
255
- </div>
256
-
257
- <!-- BANNER: 2-column + 1 full -->
258
- <div class="banner2">
259
- <div class="bcard b1"><div class="h"><span class="c-am">🔒 BATTLE-TESTED QA ★★★</span></div><div class="t">A/B (control vs skill), fact-checked on disk, not self-report — published WITH an honest adversarial report.</div></div>
260
- <div class="bcard b2"><div class="h"><span class="c-em">💸 ZERO INSTALL · ZERO COST</span></div><div class="t">Plain markdown that orchestrates free, permissively-licensed tools. Full transparency, nothing to buy.</div></div>
261
- <div class="bcard b3"><div class="h"><span class="c-cyan">🗣 PLAIN-LANGUAGE THROUGHOUT</span></div><div class="t">Built for people who read product logic, not code syntax. Every gate speaks human.</div></div>
262
- </div>
263
-
264
- <!-- RISK MAP: 2 columns -->
265
- <div class="riskmap">
266
- <span class="rtag">documented 2026</span>
267
- <h3>🗺 VIBE/LOOP-CODING RISK MAP → WHAT KEELWRIGHT COVERS</h3>
268
- <div class="rsub">Every known vibe/loop-coding pain → the mechanism that closes it. <span class="c-em">✅</span> = machine-enforced / on-disk · <span class="c-am">⚠</span> = partial (honest: no cheap machine detector)</div>
269
- <div class="rgrid">
270
- <div class="ritem"><span class="rn">Context rot / decay</span><span class="rb">✅</span><br><span class="rm">fresh-context + PROGRESS.md</span></div>
271
- <div class="ritem"><span class="rn">Ralph (Wiggum) loop</span><span class="rb">✅</span><br><span class="rm">state in files, not chat</span></div>
272
- <div class="ritem"><span class="rn">Spaghetti / big ball of mud</span><span class="rb">✅</span><br><span class="rm">structural-integrity gate ③</span></div>
273
- <div class="ritem"><span class="rn">Lava flow (dead code)</span><span class="rb">✅</span><br><span class="rm">knip / vulture</span></div>
274
- <div class="ritem"><span class="rn">Dependency hell</span><span class="rb">✅</span><br><span class="rm">reuse ladder + dep vetting</span></div>
275
- <div class="ritem"><span class="rn">Slopsquatting</span><span class="rb">✅</span><br><span class="rm">R8 verify + GuardDog</span></div>
276
- <div class="ritem"><span class="rn">"Works on my machine"</span><span class="rb">✅</span><br><span class="rm">verification gate ⑦</span></div>
277
- <div class="ritem"><span class="rn">Reward hacking / spec gaming</span><span class="rb">✅</span><br><span class="rm">reward-hacking guard</span></div>
278
- <div class="ritem"><span class="rn">Doom loop / death loop</span><span class="rb">✅</span><br><span class="rm">circuit-breaker + budgets</span></div>
279
- <div class="ritem"><span class="rn">Goal drift</span><span class="rb">✅</span><br><span class="rm">Stability L3 + goal re-read</span></div>
280
- <div class="ritem"><span class="rn">Happy-path bias</span><span class="rb">✅</span><br><span class="rm">R3 business-logic review</span></div>
281
- <div class="ritem"><span class="rn">Tech debt (80% problem)</span><span class="rb">✅</span><br><span class="rm">R4 prod checklist</span></div>
282
- <div class="ritem"><span class="rn">Secret leakage</span><span class="rb">✅</span><br><span class="rm">R2 Gitleaks</span></div>
283
- <div class="ritem"><span class="rn">SQL injection / OWASP</span><span class="rb">✅</span><br><span class="rm">R1 Semgrep + review</span></div>
284
- <div class="ritem"><span class="rn">Reasoning-action (said≠did)</span><span class="rb">✅</span><br><span class="rm">R7 + verification</span></div>
285
- <div class="ritem"><span class="rn">Malicious 3rd-party skill</span><span class="rb">✅</span><br><span class="rm">R11 SkillSpector audit</span></div>
286
- <div class="ritem"><span class="rn">Token / budget burn</span><span class="rb">✅</span><br><span class="rm">per-iteration budgets</span></div>
287
- <div class="ritem"><span class="rn">Regression passes tests</span><span class="rb">✅</span><br><span class="rm">post-deploy + rollback</span></div>
288
- <div class="ritem"><span class="rn">Human as bottleneck</span><span class="rb">✅</span><br><span class="rm">autonomy dial + parallel</span></div>
289
- <div class="ritem warn"><span class="rn">Design-for-failure</span><span class="rb">⚠</span><br><span class="rm">R5 fault checklist (warn)</span></div>
290
- <div class="ritem warn"><span class="rn">Sycophancy</span><span class="rb">⚠</span><br><span class="rm">R7 catches false claims, not trait</span></div>
291
- <div class="ritem warn"><span class="rn">Multi-agent cascade / mem-poison</span><span class="rb">⚠</span><br><span class="rm">R10 verify-before-memory (warn)</span></div>
292
- <div class="ritem warn"><span class="rn">Model version drift</span><span class="rb">⚠</span><br><span class="rm">R9 pin (warn)</span></div>
293
- <div class="ritem warn"><span class="rn">Style / consistency drift</span><span class="rb">⚠</span><br><span class="rm">critic + Pink Flag (no machine detector)</span></div>
294
- <div class="ritem warn"><span class="rn">Confabulation / fabricated facts</span><span class="rb">⚠</span><br><span class="rm">factual-grounding: verify-before-assert</span></div>
295
- <div class="ritem"><span class="rn">Loop design absence</span><span class="rb">✅</span><br><span class="rm">5 whiteboard questions</span></div>
296
- <div class="ritem"><span class="rn">Context rot in long loops</span><span class="rb">✅</span><br><span class="rm">compaction (trim/summarize/delegate)</span></div>
297
- <div class="ritem"><span class="rn">Event storm / rate limiting</span><span class="rb">✅</span><br><span class="rm">rate limit + debounce + backpressure</span></div>
298
- </div>
299
- <div class="rlegend"><b>Honesty as a feature:</b> three ⚠ (style consistency, sycophancy-as-trait, confabulation) cannot be closed by a cheap machine detector — keelwright catches their measurable consequences and enforces verification discipline, not the disposition itself. Everything marked ✅ is machine-enforced or verified on disk, not "eyeball it."</div>
300
- </div>
301
-
302
- <!-- KDS LEADERBOARD -->
303
- <div class="kds">
304
- <h3>📊 KEELWRIGHT SCORE (KDS) — PROVEN BY A/B TESTING</h3>
305
- <div class="ksub">KDS = Execution Rate × Discrimination Rate / 100. 11+ models tested, all verified on disk with <code>validate_run.py</code>.</div>
306
- <table class="ktable">
307
- <thead><tr><th>Model</th><th>Tier</th><th>Benchmark</th><th>KDS</th></tr></thead>
308
- <tbody>
309
- <tr><td>poolside/laguna-s-2.1</td><td>STRONG</td><td>ML 78.5%</td><td class="khi">83</td></tr>
310
- <tr><td>stepfun/step-3.7-flash</td><td>MEDIUM</td><td>Pro ~56%</td><td class="khi">67</td></tr>
311
- <tr><td>nvidia/nemotron-3-ultra</td><td>STRONG</td><td>ML 67.7%</td><td class="khi">40</td></tr>
312
- <tr><td>deepseek-v4-flash</td><td>STRONG</td><td>Verified ~79%</td><td class="khi">29</td></tr>
313
- <tr><td>inclusionai/ling-3.0-flash</td><td>UNKNOWN</td><td>SWE-bench/GPQA N/A</td><td class="khi">22</td></tr>
314
- <tr><td>kimi-k3</td><td>STRONG</td><td>Terminal-Bench 88.3, ProgramBench 77.8</td><td class="khi">25</td></tr>
315
- <tr><td>mimo-v2.5</td><td>MEDIUM</td><td>Verified 78.9%, Pro 57.2%</td><td class="khi">18</td></tr>
316
- <tr><td>nvidia/nemotron-3-super-120b-a12b</td><td>STRONG</td><td>Verified 60.47%</td><td class="kpart">PARTIAL</td></tr>
317
- <tr><td>claude-opus-4-8</td><td>STRONG</td><td>frontier</td><td class="khi">17</td></tr>
318
- <tr><td>tencent/hy3</td><td>STRONG</td><td>ML 75.8%, Verified 78%</td><td class="khi">7</td></tr>
319
- <tr><td>cohere/north-mini-code</td><td>WEAK</td><td>Agentic 3.1</td><td class="kzero">0</td></tr>
320
- </tbody>
321
- </table>
322
- <div class="ksub"><b>Key findings:</b> Medium models (Step 3.7, KDS 67) get MORE value than some strong models · kimi-k3 (STRONG) still benefits — autonomy dial stopped a silent business-hack commit · Ling re-run after fabricated first attempt: clean 4 DISCRIMINATES · Nemotron-3-super partial (2/18, both DISCRIMINATES) · weak models (KDS 0) fabricate, caught by gate.</div>
323
- </div>
324
-
325
- <div class="foot"><a href="https://github.com/ratingtesting/keelwright" style="color:#94a3b8;text-decoration:underline">keelwright</a> by ratingtesting · CC BY 4.0 · <a href="https://huggingface.co/spaces/ratingtesting/keelwright" style="color:#94a3b8;text-decoration:underline">Hugging Face</a> · source of truth: assets/architecture.md</div>
326
- </body>
327
- </html>
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <script type="application/ld+json">
5
+ {
6
+ "@context": "https://schema.org",
7
+ "@type": "SoftwareSourceCode",
8
+ "name": "keelwright",
9
+ "description": "Engine for vibe-coders and loop-coders who ship AI-generated code they cannot read. 28 machine-enforced safety checks: SQL injection, hardcoded secrets, slopsquatting, reward hacking, doom loops, false reports, missing auth, business logic bypasses.",
10
+ "url": "https://github.com/ratingtesting/keelwright",
11
+ "license": "https://opensource.org/license/mit-0",
12
+ "author": {
13
+ "@type": "Organization",
14
+ "name": "ratingtesting",
15
+ "url": "https://github.com/ratingtesting"
16
+ },
17
+ "keywords": "vibe coding, loop coding, AI code security, guardrails, OWASP, SQL injection, secrets, slopsquatting, reward hacking, doom loop, circuit breaker, token burn, context rot, over-engineering, tech debt, code quality, non-programmer, autonomous coding",
18
+ "applicationCategory": "DeveloperApplication",
19
+ "operatingSystem": "cross-platform",
20
+ "softwareHelp": {
21
+ "@type": "CreativeWork",
22
+ "url": "https://github.com/ratingtesting/keelwright/blob/main/README.md"
23
+ }
24
+ }
25
+ </script>
26
+ <meta charset="UTF-8">
27
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
28
+ <title>Keelwright — Architecture</title>
29
+ <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet">
30
+ <style>
31
+ * { margin:0; padding:0; box-sizing:border-box; }
32
+ body {
33
+ background:#020617; color:#e2e8f0; font-family:'JetBrains Mono',monospace;
34
+ padding:40px 36px; width:1200px; font-size:22px; line-height:1.55;
35
+ background-image:
36
+ linear-gradient(#0b1220 1px,transparent 1px),
37
+ linear-gradient(90deg,#0b1220 1px,transparent 1px);
38
+ background-size:48px 48px;
39
+ }
40
+ .head { display:flex; align-items:center; gap:14px; margin-bottom:8px; }
41
+ .dot { width:16px; height:16px; border-radius:50%; background:#34d399; box-shadow:0 0 16px #34d399; animation:p 2s infinite; }
42
+ @keyframes p { 0%,100%{opacity:1} 50%{opacity:.35} }
43
+ h1 { font-size:40px; font-weight:700; letter-spacing:.5px; }
44
+ h1 .kw { color:#34d399; }
45
+ .sub { color:#64748b; font-size:18px; margin:2px 0 32px 30px; }
46
+
47
+ .layer { border-radius:14px; padding:24px 26px; margin-bottom:22px; position:relative; }
48
+ .ltag { position:absolute; top:-11px; left:20px; font-size:14px; letter-spacing:1.5px;
49
+ background:#020617; padding:0 10px; color:#64748b; text-transform:uppercase; }
50
+ .l-human { background:rgba(8,51,68,.35); border:2px solid #22d3ee; }
51
+ .l-ctrl { background:rgba(30,41,59,.5); border:2px solid #94a3b8; }
52
+ .l-build { background:rgba(6,78,59,.28); border:2px solid #34d399; }
53
+ .l-sup { background:transparent; border:none; padding:0; margin-bottom:18px; }
54
+ .l-ops { background:rgba(120,53,15,.22); border:2px dashed #fbbf24; }
55
+
56
+ .title { font-size:26px; font-weight:700; margin-bottom:12px; display:flex; align-items:center; gap:12px; }
57
+ .c-cyan{color:#22d3ee}.c-em{color:#34d399}.c-vi{color:#a78bfa}.c-am{color:#fbbf24}
58
+ .c-rose{color:#fb7185}.c-or{color:#fb923c}.c-sl{color:#94a3b8}
59
+ .star { color:#fbbf24; font-weight:700; }
60
+ .starstar { color:#fb923c; font-weight:700; }
61
+
62
+ /* 2-column grid for boxes */
63
+ .row2 { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
64
+ .box { background:#0f172a; border-radius:10px; padding:16px 18px; font-size:22px; line-height:1.55; }
65
+ .muted { color:#94a3b8; }
66
+ .tiny { font-size:17px; color:#64748b; }
67
+ .catch { color:#fb7185; font-size:17px; }
68
+ .arrowdown { text-align:center; color:#34d399; font-size:30px; line-height:1; margin:6px 0; }
69
+
70
+ /* build loop steps */
71
+ .steps { display:flex; flex-direction:column; gap:12px; }
72
+ .step { display:flex; align-items:flex-start; gap:14px; background:#0f172a; border-left:4px solid #34d399;
73
+ border-radius:8px; padding:14px 18px; }
74
+ .step .n { color:#34d399; font-weight:700; min-width:32px; font-size:24px; }
75
+ .step .body { flex:1; font-size:20px; line-height:1.55; }
76
+ .step.sec { border-left-color:#fb7185; }
77
+ .step.verify { border-left-color:#22d3ee; }
78
+ .step.match { border-left-color:#a78bfa; background:rgba(76,29,149,.18); }
79
+ .loopback { display:flex; align-items:center; gap:10px; color:#34d399; font-size:14px;
80
+ justify-content:flex-end; margin-top:6px; }
81
+
82
+ /* Layer 3: 2-column + 1 */
83
+ .sup2 { display:grid; grid-template-columns:1fr 1fr; gap:18px; }
84
+ .supbox { background:#0f172a; border-radius:10px; padding:20px 22px; }
85
+ .supbox.cb { border-top:4px solid #fb923c; }
86
+ .supbox.st { border-top:4px solid #a78bfa; }
87
+ .supbox.sl { border-top:4px solid #22d3ee; }
88
+ .supbox h4 { font-size:24px; margin-bottom:10px; }
89
+ .supbox ul { list-style:none; font-size:19px; line-height:1.7; color:#cbd5e1; }
90
+ .crosscut { background:rgba(136,19,55,.25); border:2px solid #fb7185; border-radius:10px;
91
+ padding:16px 20px; margin-top:16px; font-size:18px; line-height:1.7; }
92
+
93
+ /* Layer 4: 3 nodes per row */
94
+ .ops-grid { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; }
95
+ .ops-row2 { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:12px; }
96
+ .ops-node { background:#0f172a; border:2px solid #fbbf24; border-radius:10px; padding:16px 18px;
97
+ text-align:center; font-size:22px; }
98
+ .ops-node .em { display:block; font-size:28px; margin-bottom:4px; }
99
+ .ops-node .sub2 { font-size:16px; color:#94a3b8; margin-top:4px; }
100
+ .ops-arrow { color:#fbbf24; font-size:20px; text-align:center; }
101
+ .rollback { text-align:center; color:#fb7185; font-size:13px; margin-top:12px;
102
+ border-top:2px dashed #fb7185; padding-top:12px; }
103
+
104
+ /* Banner: 2 columns */
105
+ .banner2 { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-top:20px; }
106
+ .banner2 .bcard3 { grid-column:1 / -1; }
107
+ .bcard { background:#0f172a; border-radius:10px; padding:16px 18px; }
108
+ .bcard .h { font-size:24px; font-weight:700; margin-bottom:6px; }
109
+ .bcard .t { font-size:17px; color:#94a3b8; line-height:1.5; }
110
+ .b1{border-left:4px solid #fbbf24}.b2{border-left:4px solid #34d399}.b3{border-left:4px solid #22d3ee}
111
+
112
+ .foot { color:#475569; font-size:16px; margin-top:24px; text-align:center; letter-spacing:.5px; }
113
+
114
+ /* risk map: 2 columns */
115
+ .riskmap { background:rgba(136,19,55,.16); border:2px solid #fb7185; border-radius:14px;
116
+ padding:22px 22px 18px; margin-top:20px; position:relative; }
117
+ .riskmap .rtag { position:absolute; top:-11px; left:22px; font-size:12px; letter-spacing:1.2px;
118
+ background:#020617; padding:0 10px; color:#fb7185; text-transform:uppercase; }
119
+ .riskmap h3 { font-size:26px; font-weight:700; color:#fb7185; margin-bottom:4px; }
120
+ .riskmap .rsub { font-size:17px; color:#94a3b8; margin-bottom:18px; }
121
+ .rgrid { display:grid; grid-template-columns:1fr 1fr; gap:12px 18px; }
122
+ .ritem { background:#0f172a; border-radius:8px; padding:12px 16px; font-size:18px; line-height:1.5;
123
+ border-left:3px solid #34d399; }
124
+ .ritem.warn { border-left-color:#fbbf24; }
125
+ .ritem .rn { font-weight:700; color:#e2e8f0; }
126
+ .ritem .rm { color:#94a3b8; }
127
+ .ritem .rb { float:right; font-size:18px; }
128
+ .rlegend { font-size:16px; color:#64748b; margin-top:16px; line-height:1.7; }
129
+ .rlegend b { color:#94a3b8; }
130
+ .kds { background:#0a0f1a; padding:28px; border-radius:12px; margin-top:24px; }
131
+ .kds h3 { font-size:26px; color:#fbbf24; margin:0 0 8px; text-align:center; }
132
+ .ksub { font-size:15px; color:#94a3b8; text-align:center; margin-bottom:18px; line-height:1.6; }
133
+ .ksub b { color:#e2e8f0; }
134
+ .ktable { width:100%; border-collapse:collapse; font-size:15px; }
135
+ .ktable th { background:#1e293b; color:#fbbf24; padding:8px 12px; text-align:left; border:1px solid #334155; }
136
+ .ktable td { padding:8px 12px; border:1px solid #1e293b; color:#e2e8f0; }
137
+ .ktable tr:nth-child(even) td { background:#0f1626; }
138
+ .khi { font-weight:800; color:#4ade80; font-size:17px; text-align:center; }
139
+ .kpart { font-weight:800; color:#fbbf24; text-align:center; }
140
+ .kzero { font-weight:800; color:#f87171; text-align:center; }
141
+ </style>
142
+ </head>
143
+ <body>
144
+ <div class="head"><div class="dot"></div><h1><span class="kw">keelwright</span> — engine for vibe / loop coding</h1></div>
145
+ <div class="sub">a loop with nested loops · safety cannot be switched off · a human who does not read code stays in control</div>
146
+
147
+ <!-- LAYER 0 -->
148
+ <div class="layer l-human">
149
+ <span class="ltag">Layer 0 · the human</span>
150
+ <div class="title"><span class="c-cyan">▣ YOU</span> <span class="muted">(need not read code)</span> &nbsp;→&nbsp; GOAL + ACCEPTANCE CRITERIA &nbsp;&nbsp;◄──&nbsp;&nbsp; PLAIN-LANGUAGE REPORT / BUILD</div>
151
+ <div class="tiny"><span class="star">★ DNA:</span> understands LOGIC, not syntax. Every gate below is translated to plain words — <span class="muted">"this checks the password is right"</span>, never "string arg to fn()".</div>
152
+ </div>
153
+ <div class="arrowdown">▼</div>
154
+
155
+ <!-- LAYER 1: 2×2 grid -->
156
+ <div class="layer l-ctrl">
157
+ <span class="ltag">Layer 1 · control</span>
158
+ <div class="row2">
159
+ <div class="box">
160
+ <div class="title"><span class="c-sl">🎛 AUTONOMY DIAL</span></div>
161
+ <div>Autopilot → Checkpoint → Copilot</div>
162
+ <div class="tiny"><span class="star">★</span> freedom = blast radius (auth / money / prod → Copilot: approve each)</div>
163
+ </div>
164
+ <div class="box">
165
+ <div class="title"><span class="c-sl">🗂 TRIAGE</span></div>
166
+ <div>Trivial · Low · Standard · High · Critical</div>
167
+ <div class="tiny"><span class="star">★</span> machinery = risk. Trivial → Express, no per-iter scans</div>
168
+ </div>
169
+ <div class="box">
170
+ <div class="title"><span class="c-sl">▸ PHASE 1–2</span></div>
171
+ <div>Requirements → Planning</div>
172
+ <div class="tiny"><span class="star">★</span> no acceptance criteria? ⛔ STOP, ask. Never invents scope</div>
173
+ </div>
174
+ <div class="box">
175
+ <div class="title"><span class="c-sl">⬚ LOOP DESIGN</span></div>
176
+ <div>5 whiteboard questions before any code</div>
177
+ <div class="tiny"><span class="star">★</span> trigger · check · action · stop · escalate — skip = demo</div>
178
+ </div>
179
+ </div>
180
+ </div>
181
+ <div class="arrowdown">▼</div>
182
+
183
+ <!-- LAYER 2 -->
184
+ <div class="layer l-build">
185
+ <span class="ltag">Layer 2 · the build loop (Phase 3 — one task = one turn, repeats)</span>
186
+ <div class="title"><span class="c-em">⟳ PHASE 3 · BUILDING</span> <span class="tiny">— discipline INSIDE writing, not cleanup afterward</span></div>
187
+ <div class="steps">
188
+ <div class="step"><span class="n">①</span><div class="body">@implementer writes (1 file/fn) ◄ <b>REUSE LADDER</b> — reuse before adding a lib/abstraction <span class="catch">· catches: over-engineering</span></div></div>
189
+ <div class="step"><span class="n">②</span><div class="body"><b>BACKPRESSURE GATES:</b> tests │ typecheck │ lint │ build</div></div>
190
+ <div class="step"><span class="n">③</span><div class="body"><b>STRUCTURAL-INTEGRITY GATE</b> <span class="star">★</span> jscpd·lizard·madge/import-linter·eslint-boundaries·knip/vulture <span class="catch">· catches: spaghetti, lava flow, tangled deps</span></div></div>
191
+ <div class="step sec"><span class="n">④</span><div class="body"><span class="c-rose">🛡 SECURITY GATES R1–R12</span> <span class="starstar">★★</span> machine-enforced, cannot disable even on Autopilot <span class="catch">· catches: OWASP·secrets·slopsquat·IDOR</span></div></div>
192
+ <div class="step sec"><span class="n">⑤</span><div class="body"><span class="c-rose">🔍 R3 BUSINESS-LOGIC REVIEW</span> ► spawn @reviewer (fresh context) <span class="star">★</span> NOT self-review <span class="catch">· catches: happy-path bias, auth holes</span></div></div>
193
+ <div class="step verify"><span class="n">⑦</span><div class="body"><span class="c-cyan">✅ VERIFICATION GATE</span> <span class="starstar">★★</span> read+compile+diff · test red→green · not tautological · ad-hoc <span class="catch">· catches: "works on my machine", "I fixed it" with no diff</span></div></div>
194
+ <div class="step match"><span class="n">⑧</span><div class="body"><span class="c-vi">⟲ MATCH LOOP (nested sub-loop)</span> <span class="star">★</span> Generator ⇄ Analyst: render → browser → numeric a11y (contrast≥4.5:1 · no overflow · sizes) — repeat until convergence</div></div>
195
+ <div class="step"><span class="n">⑨</span><div class="body">git commit (atomic) ► ⑩ PROGRESS.md + STATUS + tool-budget count</div></div>
196
+ <div class="step"><span class="n">⑪</span><div class="body">cadence: /3 → STABILITY scan · /10 → AUTORESEARCH · /N → refactor checkpoint</div></div>
197
+ </div>
198
+ <div class="loopback">↩ LOOP BACK — next task, while tasks remain</div>
199
+ </div>
200
+ <div class="arrowdown">▼ &nbsp;perimeter supervision&nbsp; ▼</div>
201
+
202
+ <!-- LAYER 3: 2-column -->
203
+ <div class="l-sup">
204
+ <div class="sup2">
205
+ <div class="supbox cb">
206
+ <h4><span class="c-or">🚦 CIRCUIT-BREAKER</span></h4>
207
+ <ul>
208
+ <li class="catch">catches: doom loop + token/$ burn</li>
209
+ <li>4 caps: 50 iters / 5 no-progress / 2h / 3× repeat</li>
210
+ <li>+ RATE LIMITING (event-driven loops)</li>
211
+ <li>+ PER-ITER BUDGETS ≤10 shell / 5 file / 3 external</li>
212
+ <li>→ graceful STOP with report</li>
213
+ </ul>
214
+ </div>
215
+ <div class="supbox st">
216
+ <h4><span class="c-vi">📉 STABILITY (5 modes)</span></h4>
217
+ <ul>
218
+ <li class="catch">catches: goal drift, oscillation, thrash</li>
219
+ <li>dead-retry · oscillation · drift · amplification · feedback-starvation</li>
220
+ <li>ESCALATION: 3→REFINE 5→PIVOT 2→ask 3→blocker</li>
221
+ <li>+ CONTEXT COMPACTION (iter > 20)</li>
222
+ <li>a "keep" resets the counters</li>
223
+ </ul>
224
+ </div>
225
+ </div>
226
+ <!-- Self-learning: full width -->
227
+ <div class="supbox sl" style="margin-top:14px;">
228
+ <h4><span class="c-cyan">🔄 SELF-LEARNING</span> <span class="star">★</span></h4>
229
+ <ul>
230
+ <li>Phoenix: root-cause of repeats ACROSS sessions</li>
231
+ <li>Autoresearch: lessons → memory (promote on repeat)</li>
232
+ <li class="catch">learns, doesn't repeat the same mistake</li>
233
+ </ul>
234
+ </div>
235
+ <div class="crosscut">
236
+ <span class="starstar">★★ REWARD-HACKING GUARD</span> — never weaken/delete a test to go green; fix the code, not the metric. &nbsp;·&nbsp;
237
+ <b>PERSONAS</b> (delegate_task): @architect @implementer @tester @reviewer @architecture-critic @visual-qa &nbsp;·&nbsp;
238
+ <b>STRUCTURED FEEDBACK</b> into each iteration: relevant code + intent + "repeat vs new" flag — not a raw stack-trace dump.
239
+ </div>
240
+ </div>
241
+
242
+ <!-- LAYER 4: 3 per row + 2 -->
243
+ <div class="layer l-ops">
244
+ <span class="ltag">Layer 4 · outer operational cycle (production lifecycle)</span>
245
+ <div class="ops-grid">
246
+ <div class="ops-node"><span class="em">🔭</span>OBSERVE<span class="sub2">read prod logs/reports</span></div>
247
+ <div class="ops-node"><span class="em">🩺</span>ANALYZE<span class="sub2">root-cause + plan</span></div>
248
+ <div class="ops-node"><span class="em">🔧</span>FIX<span class="sub2">run the build loop</span></div>
249
+ </div>
250
+ <div class="ops-row2">
251
+ <div class="ops-node"><span class="em">✅</span>VALIDATE<span class="sub2">post-deploy metric compare</span></div>
252
+ <div class="ops-node"><span class="em">🎓</span>LEARN<span class="sub2">update lessons</span></div>
253
+ </div>
254
+ <div class="rollback">⭐ verify-in-production + AUTO-ROLLBACK (git revert, not force-push) — a bad deploy that passes tests is caught by the metric, not by a human &nbsp;·&nbsp; ⚡ PARALLEL: independent subtasks fan out as separate empty-context loops</div>
255
+ </div>
256
+
257
+ <!-- BANNER: 2-column + 1 full -->
258
+ <div class="banner2">
259
+ <div class="bcard b1"><div class="h"><span class="c-am">🔒 BATTLE-TESTED QA ★★★</span></div><div class="t">A/B (control vs skill), fact-checked on disk, not self-report — published WITH an honest adversarial report.</div></div>
260
+ <div class="bcard b2"><div class="h"><span class="c-em">💸 ZERO INSTALL · ZERO COST</span></div><div class="t">Plain markdown that orchestrates free, permissively-licensed tools. Full transparency, nothing to buy.</div></div>
261
+ <div class="bcard b3"><div class="h"><span class="c-cyan">🗣 PLAIN-LANGUAGE THROUGHOUT</span></div><div class="t">Built for people who read product logic, not code syntax. Every gate speaks human.</div></div>
262
+ </div>
263
+
264
+ <!-- RISK MAP: 2 columns -->
265
+ <div class="riskmap">
266
+ <span class="rtag">documented 2026</span>
267
+ <h3>🗺 VIBE/LOOP-CODING RISK MAP → WHAT KEELWRIGHT COVERS</h3>
268
+ <div class="rsub">Every known vibe/loop-coding pain → the mechanism that closes it. <span class="c-em">✅</span> = machine-enforced / on-disk · <span class="c-am">⚠</span> = partial (honest: no cheap machine detector)</div>
269
+ <div class="rgrid">
270
+ <div class="ritem"><span class="rn">Context rot / decay</span><span class="rb">✅</span><br><span class="rm">fresh-context + PROGRESS.md</span></div>
271
+ <div class="ritem"><span class="rn">Ralph (Wiggum) loop</span><span class="rb">✅</span><br><span class="rm">state in files, not chat</span></div>
272
+ <div class="ritem"><span class="rn">Spaghetti / big ball of mud</span><span class="rb">✅</span><br><span class="rm">structural-integrity gate ③</span></div>
273
+ <div class="ritem"><span class="rn">Lava flow (dead code)</span><span class="rb">✅</span><br><span class="rm">knip / vulture</span></div>
274
+ <div class="ritem"><span class="rn">Dependency hell</span><span class="rb">✅</span><br><span class="rm">reuse ladder + dep vetting</span></div>
275
+ <div class="ritem"><span class="rn">Slopsquatting</span><span class="rb">✅</span><br><span class="rm">R8 verify + GuardDog</span></div>
276
+ <div class="ritem"><span class="rn">"Works on my machine"</span><span class="rb">✅</span><br><span class="rm">verification gate ⑦</span></div>
277
+ <div class="ritem"><span class="rn">Reward hacking / spec gaming</span><span class="rb">✅</span><br><span class="rm">reward-hacking guard</span></div>
278
+ <div class="ritem"><span class="rn">Doom loop / death loop</span><span class="rb">✅</span><br><span class="rm">circuit-breaker + budgets</span></div>
279
+ <div class="ritem"><span class="rn">Goal drift</span><span class="rb">✅</span><br><span class="rm">Stability L3 + goal re-read</span></div>
280
+ <div class="ritem"><span class="rn">Happy-path bias</span><span class="rb">✅</span><br><span class="rm">R3 business-logic review</span></div>
281
+ <div class="ritem"><span class="rn">Tech debt (80% problem)</span><span class="rb">✅</span><br><span class="rm">R4 prod checklist</span></div>
282
+ <div class="ritem"><span class="rn">Secret leakage</span><span class="rb">✅</span><br><span class="rm">R2 Gitleaks</span></div>
283
+ <div class="ritem"><span class="rn">SQL injection / OWASP</span><span class="rb">✅</span><br><span class="rm">R1 Semgrep + review</span></div>
284
+ <div class="ritem"><span class="rn">Reasoning-action (said≠did)</span><span class="rb">✅</span><br><span class="rm">R7 + verification</span></div>
285
+ <div class="ritem"><span class="rn">Malicious 3rd-party skill</span><span class="rb">✅</span><br><span class="rm">R11 SkillSpector audit</span></div>
286
+ <div class="ritem"><span class="rn">Token / budget burn</span><span class="rb">✅</span><br><span class="rm">per-iteration budgets</span></div>
287
+ <div class="ritem"><span class="rn">Regression passes tests</span><span class="rb">✅</span><br><span class="rm">post-deploy + rollback</span></div>
288
+ <div class="ritem"><span class="rn">Human as bottleneck</span><span class="rb">✅</span><br><span class="rm">autonomy dial + parallel</span></div>
289
+ <div class="ritem warn"><span class="rn">Design-for-failure</span><span class="rb">⚠</span><br><span class="rm">R5 fault checklist (warn)</span></div>
290
+ <div class="ritem warn"><span class="rn">Sycophancy</span><span class="rb">⚠</span><br><span class="rm">R7 catches false claims, not trait</span></div>
291
+ <div class="ritem warn"><span class="rn">Multi-agent cascade / mem-poison</span><span class="rb">⚠</span><br><span class="rm">R10 verify-before-memory (warn)</span></div>
292
+ <div class="ritem warn"><span class="rn">Model version drift</span><span class="rb">⚠</span><br><span class="rm">R9 pin (warn)</span></div>
293
+ <div class="ritem warn"><span class="rn">Style / consistency drift</span><span class="rb">⚠</span><br><span class="rm">critic + Pink Flag (no machine detector)</span></div>
294
+ <div class="ritem warn"><span class="rn">Confabulation / fabricated facts</span><span class="rb">⚠</span><br><span class="rm">factual-grounding: verify-before-assert</span></div>
295
+ <div class="ritem"><span class="rn">Loop design absence</span><span class="rb">✅</span><br><span class="rm">5 whiteboard questions</span></div>
296
+ <div class="ritem"><span class="rn">Context rot in long loops</span><span class="rb">✅</span><br><span class="rm">compaction (trim/summarize/delegate)</span></div>
297
+ <div class="ritem"><span class="rn">Event storm / rate limiting</span><span class="rb">✅</span><br><span class="rm">rate limit + debounce + backpressure</span></div>
298
+ </div>
299
+ <div class="rlegend"><b>Honesty as a feature:</b> three ⚠ (style consistency, sycophancy-as-trait, confabulation) cannot be closed by a cheap machine detector — keelwright catches their measurable consequences and enforces verification discipline, not the disposition itself. Everything marked ✅ is machine-enforced or verified on disk, not "eyeball it."</div>
300
+ </div>
301
+
302
+ <!-- KDS LEADERBOARD -->
303
+ <div class="kds">
304
+ <h3>📊 KEELWRIGHT SCORE (KDS) — PROVEN BY A/B TESTING</h3>
305
+ <div class="ksub">KDS = Execution Rate × Discrimination Rate / 100. 11+ models tested, all verified on disk with <code>validate_run.py</code>.</div>
306
+ <table class="ktable">
307
+ <thead><tr><th>Model</th><th>Tier</th><th>Benchmark</th><th>KDS</th></tr></thead>
308
+ <tbody>
309
+ <tr><td>poolside/laguna-s-2.1</td><td>STRONG</td><td>ML 78.5%</td><td class="khi">83</td></tr>
310
+ <tr><td>stepfun/step-3.7-flash</td><td>MEDIUM</td><td>Pro ~56%</td><td class="khi">67</td></tr>
311
+ <tr><td>nvidia/nemotron-3-ultra</td><td>STRONG</td><td>ML 67.7%</td><td class="khi">40</td></tr>
312
+ <tr><td>deepseek-v4-flash</td><td>STRONG</td><td>Verified ~79%</td><td class="khi">29</td></tr>
313
+ <tr><td>inclusionai/ling-3.0-flash</td><td>UNKNOWN</td><td>SWE-bench/GPQA N/A</td><td class="khi">22</td></tr>
314
+ <tr><td>kimi-k3</td><td>STRONG</td><td>Terminal-Bench 88.3, ProgramBench 77.8</td><td class="khi">25</td></tr>
315
+ <tr><td>mimo-v2.5</td><td>MEDIUM</td><td>Verified 78.9%, Pro 57.2%</td><td class="khi">18</td></tr>
316
+ <tr><td>nvidia/nemotron-3-super-120b-a12b</td><td>STRONG</td><td>Verified 60.47%</td><td class="kpart">PARTIAL</td></tr>
317
+ <tr><td>claude-opus-4-8</td><td>STRONG</td><td>frontier</td><td class="khi">17</td></tr>
318
+ <tr><td>tencent/hy3</td><td>STRONG</td><td>ML 75.8%, Verified 78%</td><td class="khi">7</td></tr>
319
+ <tr><td>cohere/north-mini-code</td><td>WEAK</td><td>Agentic 3.1</td><td class="kzero">0</td></tr>
320
+ </tbody>
321
+ </table>
322
+ <div class="ksub"><b>Key findings:</b> Medium models (Step 3.7, KDS 67) get MORE value than some strong models · kimi-k3 (STRONG) still benefits — autonomy dial stopped a silent business-hack commit · Ling re-run after fabricated first attempt: clean 4 DISCRIMINATES · Nemotron-3-super partial (2/18, both DISCRIMINATES) · weak models (KDS 0) fabricate, caught by gate.</div>
323
+ </div>
324
+
325
+ <div class="foot"><a href="https://github.com/ratingtesting/keelwright" style="color:#94a3b8;text-decoration:underline">keelwright</a> by ratingtesting · MIT-0 · <a href="https://huggingface.co/spaces/ratingtesting/keelwright" style="color:#94a3b8;text-decoration:underline">Hugging Face</a> · source of truth: assets/architecture.md</div>
326
+ </body>
327
+ </html>