ratingtesting commited on
Commit
bbecf0d
·
verified ·
1 Parent(s): e3dd146

init: keelwright static Space with architecture diagram

Browse files
Files changed (2) hide show
  1. README.md +16 -10
  2. index.html +292 -18
README.md CHANGED
@@ -1,10 +1,16 @@
1
- ---
2
- title: Keelwright
3
- emoji: 🏃
4
- colorFrom: blue
5
- colorTo: red
6
- sdk: static
7
- pinned: false
8
- ---
9
-
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
1
+ ---
2
+ title: keelwright
3
+ emoji: 🛡️
4
+ colorFrom: green
5
+ colorTo: blue
6
+ sdk: static
7
+ pinned: false
8
+ ---
9
+
10
+ # 🛡️ keelwright
11
+
12
+ **Engine for vibe-coders and loop-coders who ship AI-generated code they can't read line by line.**
13
+
14
+ 28 machine-enforced safety checks. Catches SQL injection, hardcoded secrets, slopsquatting, reward hacking, doom loops, and more.
15
+
16
+ **GitHub:** [ratingtesting/keelwright](https://github.com/ratingtesting/keelwright) · **License:** CC BY 4.0
index.html CHANGED
@@ -1,19 +1,293 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </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://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
+ </style>
131
+ </head>
132
+ <body>
133
+ <div class="head"><div class="dot"></div><h1><span class="kw">keelwright</span> — engine for vibe / loop coding</h1></div>
134
+ <div class="sub">a loop with nested loops · safety cannot be switched off · a human who does not read code stays in control</div>
135
+
136
+ <!-- LAYER 0 -->
137
+ <div class="layer l-human">
138
+ <span class="ltag">Layer 0 · the human</span>
139
+ <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>
140
+ <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>
141
+ </div>
142
+ <div class="arrowdown">▼</div>
143
+
144
+ <!-- LAYER 1: 2×2 grid -->
145
+ <div class="layer l-ctrl">
146
+ <span class="ltag">Layer 1 · control</span>
147
+ <div class="row2">
148
+ <div class="box">
149
+ <div class="title"><span class="c-sl">🎛 AUTONOMY DIAL</span></div>
150
+ <div>Autopilot → Checkpoint → Copilot</div>
151
+ <div class="tiny"><span class="star">★</span> freedom = blast radius (auth / money / prod → Copilot: approve each)</div>
152
+ </div>
153
+ <div class="box">
154
+ <div class="title"><span class="c-sl">🗂 TRIAGE</span></div>
155
+ <div>Trivial · Low · Standard · High · Critical</div>
156
+ <div class="tiny"><span class="star">★</span> machinery = risk. Trivial → Express, no per-iter scans</div>
157
+ </div>
158
+ <div class="box">
159
+ <div class="title"><span class="c-sl">▸ PHASE 1–2</span></div>
160
+ <div>Requirements → Planning</div>
161
+ <div class="tiny"><span class="star">★</span> no acceptance criteria? ⛔ STOP, ask. Never invents scope</div>
162
+ </div>
163
+ <div class="box">
164
+ <div class="title"><span class="c-sl">⬚ LOOP DESIGN</span></div>
165
+ <div>5 whiteboard questions before any code</div>
166
+ <div class="tiny"><span class="star">★</span> trigger · check · action · stop · escalate — skip = demo</div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ <div class="arrowdown">▼</div>
171
+
172
+ <!-- LAYER 2 -->
173
+ <div class="layer l-build">
174
+ <span class="ltag">Layer 2 · the build loop (Phase 3 — one task = one turn, repeats)</span>
175
+ <div class="title"><span class="c-em">⟳ PHASE 3 · BUILDING</span> <span class="tiny">— discipline INSIDE writing, not cleanup afterward</span></div>
176
+ <div class="steps">
177
+ <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>
178
+ <div class="step"><span class="n">②</span><div class="body"><b>BACKPRESSURE GATES:</b> tests │ typecheck │ lint │ build</div></div>
179
+ <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>
180
+ <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>
181
+ <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>
182
+ <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>
183
+ <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>
184
+ <div class="step"><span class="n">⑨</span><div class="body">git commit (atomic) ► ⑩ PROGRESS.md + STATUS + tool-budget count</div></div>
185
+ <div class="step"><span class="n">⑪</span><div class="body">cadence: /3 → STABILITY scan · /10 → AUTORESEARCH · /N → refactor checkpoint</div></div>
186
+ </div>
187
+ <div class="loopback">↩ LOOP BACK — next task, while tasks remain</div>
188
+ </div>
189
+ <div class="arrowdown">▼ &nbsp;perimeter supervision&nbsp; ▼</div>
190
+
191
+ <!-- LAYER 3: 2-column -->
192
+ <div class="l-sup">
193
+ <div class="sup2">
194
+ <div class="supbox cb">
195
+ <h4><span class="c-or">🚦 CIRCUIT-BREAKER</span></h4>
196
+ <ul>
197
+ <li class="catch">catches: doom loop + token/$ burn</li>
198
+ <li>4 caps: 50 iters / 5 no-progress / 2h / 3× repeat</li>
199
+ <li>+ RATE LIMITING (event-driven loops)</li>
200
+ <li>+ PER-ITER BUDGETS ≤10 shell / 5 file / 3 external</li>
201
+ <li>→ graceful STOP with report</li>
202
+ </ul>
203
+ </div>
204
+ <div class="supbox st">
205
+ <h4><span class="c-vi">📉 STABILITY (5 modes)</span></h4>
206
+ <ul>
207
+ <li class="catch">catches: goal drift, oscillation, thrash</li>
208
+ <li>dead-retry · oscillation · drift · amplification · feedback-starvation</li>
209
+ <li>ESCALATION: 3→REFINE 5→PIVOT 2→ask 3→blocker</li>
210
+ <li>+ CONTEXT COMPACTION (iter > 20)</li>
211
+ <li>a "keep" resets the counters</li>
212
+ </ul>
213
+ </div>
214
+ </div>
215
+ <!-- Self-learning: full width -->
216
+ <div class="supbox sl" style="margin-top:14px;">
217
+ <h4><span class="c-cyan">🔄 SELF-LEARNING</span> <span class="star">★</span></h4>
218
+ <ul>
219
+ <li>Phoenix: root-cause of repeats ACROSS sessions</li>
220
+ <li>Autoresearch: lessons → memory (promote on repeat)</li>
221
+ <li class="catch">learns, doesn't repeat the same mistake</li>
222
+ </ul>
223
+ </div>
224
+ <div class="crosscut">
225
+ <span class="starstar">★★ REWARD-HACKING GUARD</span> — never weaken/delete a test to go green; fix the code, not the metric. &nbsp;·&nbsp;
226
+ <b>PERSONAS</b> (delegate_task): @architect @implementer @tester @reviewer @architecture-critic @visual-qa &nbsp;·&nbsp;
227
+ <b>STRUCTURED FEEDBACK</b> into each iteration: relevant code + intent + "repeat vs new" flag — not a raw stack-trace dump.
228
+ </div>
229
+ </div>
230
+
231
+ <!-- LAYER 4: 3 per row + 2 -->
232
+ <div class="layer l-ops">
233
+ <span class="ltag">Layer 4 · outer operational cycle (production lifecycle)</span>
234
+ <div class="ops-grid">
235
+ <div class="ops-node"><span class="em">🔭</span>OBSERVE<span class="sub2">read prod logs/reports</span></div>
236
+ <div class="ops-node"><span class="em">🩺</span>ANALYZE<span class="sub2">root-cause + plan</span></div>
237
+ <div class="ops-node"><span class="em">🔧</span>FIX<span class="sub2">run the build loop</span></div>
238
+ </div>
239
+ <div class="ops-row2">
240
+ <div class="ops-node"><span class="em">✅</span>VALIDATE<span class="sub2">post-deploy metric compare</span></div>
241
+ <div class="ops-node"><span class="em">🎓</span>LEARN<span class="sub2">update lessons</span></div>
242
+ </div>
243
+ <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>
244
+ </div>
245
+
246
+ <!-- BANNER: 2-column + 1 full -->
247
+ <div class="banner2">
248
+ <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>
249
+ <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>
250
+ <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>
251
+ </div>
252
+
253
+ <!-- RISK MAP: 2 columns -->
254
+ <div class="riskmap">
255
+ <span class="rtag">documented 2026</span>
256
+ <h3>🗺 VIBE/LOOP-CODING RISK MAP → WHAT KEELWRIGHT COVERS</h3>
257
+ <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>
258
+ <div class="rgrid">
259
+ <div class="ritem"><span class="rn">Context rot / decay</span><span class="rb">✅</span><br><span class="rm">fresh-context + PROGRESS.md</span></div>
260
+ <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>
261
+ <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>
262
+ <div class="ritem"><span class="rn">Lava flow (dead code)</span><span class="rb">✅</span><br><span class="rm">knip / vulture</span></div>
263
+ <div class="ritem"><span class="rn">Dependency hell</span><span class="rb">✅</span><br><span class="rm">reuse ladder + dep vetting</span></div>
264
+ <div class="ritem"><span class="rn">Slopsquatting</span><span class="rb">✅</span><br><span class="rm">R8 verify + GuardDog</span></div>
265
+ <div class="ritem"><span class="rn">"Works on my machine"</span><span class="rb">✅</span><br><span class="rm">verification gate ⑦</span></div>
266
+ <div class="ritem"><span class="rn">Reward hacking / spec gaming</span><span class="rb">✅</span><br><span class="rm">reward-hacking guard</span></div>
267
+ <div class="ritem"><span class="rn">Doom loop / death loop</span><span class="rb">✅</span><br><span class="rm">circuit-breaker + budgets</span></div>
268
+ <div class="ritem"><span class="rn">Goal drift</span><span class="rb">✅</span><br><span class="rm">Stability L3 + goal re-read</span></div>
269
+ <div class="ritem"><span class="rn">Happy-path bias</span><span class="rb">✅</span><br><span class="rm">R3 business-logic review</span></div>
270
+ <div class="ritem"><span class="rn">Tech debt (80% problem)</span><span class="rb">✅</span><br><span class="rm">R4 prod checklist</span></div>
271
+ <div class="ritem"><span class="rn">Secret leakage</span><span class="rb">✅</span><br><span class="rm">R2 Gitleaks</span></div>
272
+ <div class="ritem"><span class="rn">SQL injection / OWASP</span><span class="rb">✅</span><br><span class="rm">R1 Semgrep + review</span></div>
273
+ <div class="ritem"><span class="rn">Reasoning-action (said≠did)</span><span class="rb">✅</span><br><span class="rm">R7 + verification</span></div>
274
+ <div class="ritem"><span class="rn">Malicious 3rd-party skill</span><span class="rb">✅</span><br><span class="rm">R11 SkillSpector audit</span></div>
275
+ <div class="ritem"><span class="rn">Token / budget burn</span><span class="rb">✅</span><br><span class="rm">per-iteration budgets</span></div>
276
+ <div class="ritem"><span class="rn">Regression passes tests</span><span class="rb">✅</span><br><span class="rm">post-deploy + rollback</span></div>
277
+ <div class="ritem"><span class="rn">Human as bottleneck</span><span class="rb">✅</span><br><span class="rm">autonomy dial + parallel</span></div>
278
+ <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>
279
+ <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>
280
+ <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>
281
+ <div class="ritem warn"><span class="rn">Model version drift</span><span class="rb">⚠</span><br><span class="rm">R9 pin (warn)</span></div>
282
+ <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>
283
+ <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>
284
+ <div class="ritem"><span class="rn">Loop design absence</span><span class="rb">✅</span><br><span class="rm">5 whiteboard questions</span></div>
285
+ <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>
286
+ <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>
287
+ </div>
288
+ <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>
289
+ </div>
290
+
291
+ <div class="foot">keelwright by ratingtesting · CC BY 4.0 · source of truth: assets/architecture.md</div>
292
+ </body>
293
  </html>