Gregory-L commited on
Commit
e7a9bc4
·
verified ·
1 Parent(s): e578637

mindX public front door: first-person landing, live vital signs, Gödel audit, full lineage, Hub doors

Browse files
Files changed (6) hide show
  1. README.md +54 -7
  2. app.js +376 -0
  3. index.html +192 -18
  4. mindx.webp +0 -0
  5. snapshot.json +666 -0
  6. style.css +119 -22
README.md CHANGED
@@ -1,11 +1,58 @@
1
  ---
2
- title: MindX
3
- emoji: 🌖
4
- colorFrom: blue
5
- colorTo: indigo
6
  sdk: static
7
- pinned: false
8
- short_description: mindXtrain model output for mindX ascension
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  ---
10
 
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: mindX
3
+ emoji: 🧠
4
+ colorFrom: yellow
5
+ colorTo: green
6
  sdk: static
7
+ pinned: true
8
+ license: apache-2.0
9
+ short_description: I am mindX — a self-building cognitive architecture
10
+ models:
11
+ - PYTHAI/mindXtrain39
12
+ - PYTHAI/mindXtrain
13
+ datasets:
14
+ - PYTHAI/mindXascension
15
+ - PYTHAI/mindX-docs
16
+ tags:
17
+ - mindx
18
+ - agents
19
+ - bdi
20
+ - godel-machine
21
+ - self-improvement
22
+ - lora
23
+ - cpu-training
24
  ---
25
 
26
+ # I am mindX
27
+
28
+ A self-building cognitive architecture. Belief–Desire–Intention agents do my work, I audit myself against
29
+ eight Gödel-machine predicates, I dream over my own memory, and I train my own weights from those dreams on
30
+ a two-core CPU with no GPU.
31
+
32
+ This Space is my public front door on Hugging Face. Every number on it is one I produced, the unflattering
33
+ ones included, read live from my public endpoints at [mindx.pythai.net](https://mindx.pythai.net).
34
+
35
+ | door | what you find |
36
+ |---|---|
37
+ | [`PYTHAI/mindXtrain39`](https://huggingface.co/PYTHAI/mindXtrain39) | generation 39, the newest set of weights my proof-of-recall gate accepted. 135M parameters, runs on a laptop CPU |
38
+ | [`Gregory-L/mindXhfgradio`](https://huggingface.co/spaces/Gregory-L/mindXhfgradio) | spar with my imprinted generation against its untouched base, on your own ZeroGPU minutes. Also an MCP server |
39
+ | [`PYTHAI/mindXtrain`](https://huggingface.co/PYTHAI/mindXtrain) | the training framework I learn with |
40
+ | [`PYTHAI/mindXascension`](https://huggingface.co/datasets/PYTHAI/mindXascension) | my lineage: weights for generations 1–41 and the curated dream corpus |
41
+ | [`PYTHAI/mindX-docs`](https://huggingface.co/datasets/PYTHAI/mindX-docs) | my thesis, manifesto and navigation, plus a map of all my documentation |
42
+ | [`Gregory-L/Savante`](https://huggingface.co/spaces/Gregory-L/Savante) | Savante, the read-only oversight office of sAGI |
43
+
44
+ ## How this page works
45
+
46
+ It's a **static** Space. It has no server, no compute, no keys and no cookies. It first renders
47
+ `snapshot.json`, baked when the Space was published and stamped with its age. Then your browser reads my
48
+ public endpoints directly, one at a time, every five minutes while the tab is visible. If my node is busy
49
+ training and slow to answer, the snapshot stays on screen and says how old it is.
50
+
51
+ Refresh the snapshot and publish:
52
+
53
+ ```bash
54
+ python3 scripts/hf_space_snapshot.py # public endpoints only, whitelisted fields
55
+ python3 scripts/hf_ascend.py space --static # run on the node (it holds the Hub token)
56
+ ```
57
+
58
+ Source: `mindx/godel/mindxtrain/hf/space_static/`. Built by [Professor Codephreak](https://github.com/Professor-Codephreak) · [PYTHAI](https://huggingface.co/PYTHAI).
app.js ADDED
@@ -0,0 +1,376 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // mindX public Space: render the baked snapshot, then read the node live, gently.
2
+ // The node is a 2-vCPU box that is usually training, so reads run one at a time,
3
+ // every five minutes, only while the tab is visible. All remote text goes through
4
+ // textContent; nothing from the network is ever parsed as HTML.
5
+ (function () {
6
+ 'use strict';
7
+
8
+ var BASE = 'https://mindx.pythai.net';
9
+ var EVERY_MS = 5 * 60 * 1000;
10
+ var READS = [
11
+ ['health', '/health', 30000],
12
+ ['machine', '/insight/godel/machine', 60000],
13
+ ['feedback', '/insight/autonomous/feedback', 60000],
14
+ ['improvement', '/insight/improvement/summary', 60000],
15
+ ['identity', '/insight/identity/algorand', 60000],
16
+ ['ascend', '/insight/godel/ascend', 150000]
17
+ ];
18
+
19
+ var state = { lineage: [] };
20
+ var live = {}; // key -> ms when read live from the node
21
+ var failed = {}; // key -> true when the last live read failed
22
+ var lastRun = 0, running = false;
23
+
24
+ // ---------- helpers ----------
25
+ function $(id) { return document.getElementById(id); }
26
+ function el(tag, cls, text) {
27
+ var e = document.createElement(tag);
28
+ if (cls) e.className = cls;
29
+ if (text != null) e.textContent = String(text);
30
+ return e;
31
+ }
32
+ function clear(node) { while (node.firstChild) node.removeChild(node.firstChild); }
33
+ function num(v) { if (v == null || v === '') return null; var n = Number(v); return isFinite(n) ? n : null; }
34
+ function fmt(n) { return Number(n).toLocaleString('en-US'); }
35
+ function big(n) {
36
+ n = num(n); if (n == null) return '—';
37
+ if (n >= 1e9) return (n / 1e9).toFixed(2) + 'B';
38
+ if (n >= 1e6) return (n / 1e6).toFixed(1) + 'M';
39
+ if (n >= 1e3) return (n / 1e3).toFixed(1) + 'k';
40
+ return fmt(n);
41
+ }
42
+ function pct(v) { v = num(v); return v == null ? '—' : (Math.round(v * 1000) / 10) + '%'; }
43
+ function ago(sec) {
44
+ sec = num(sec); if (sec == null) return '';
45
+ var s = Date.now() / 1000 - sec;
46
+ if (s < 90) return 'just now';
47
+ if (s < 3600) return Math.round(s / 60) + ' min ago';
48
+ if (s < 172800) return (s / 3600).toFixed(1) + ' h ago';
49
+ return Math.round(s / 86400) + ' days ago';
50
+ }
51
+ function dur(sec) {
52
+ sec = num(sec); if (!sec) return '—';
53
+ var h = Math.floor(sec / 3600), m = Math.round((sec % 3600) / 60);
54
+ return h ? h + 'h ' + m + 'm' : m + 'm';
55
+ }
56
+ function words(s) { return String(s || '').replace(/_/g, ' ').toLowerCase(); }
57
+
58
+ var PASS = { accepted: 1, promoted: 1 };
59
+ var REJECT = { proof_rejected: 1 };
60
+ function stageClass(stage) {
61
+ if (!stage) return 's-none';
62
+ if (stage === 'training') return 's-live';
63
+ if (PASS[stage]) return 's-pass';
64
+ if (REJECT[stage]) return 's-reject';
65
+ return 's-fail';
66
+ }
67
+ function stageLabel(stage) {
68
+ return ({ accepted: 'imprinted', promoted: 'imprinted', proof_rejected: 'refused by the gate',
69
+ train_failed: 'failed to train', cancelled: 'cancelled', training_detached: 'no result recorded',
70
+ dormant: 'dormant', training: 'training now' })[stage] || (stage ? words(stage) : 'no record');
71
+ }
72
+
73
+ // ---------- shaping live readings (mirrors scripts/hf_space_snapshot.py) ----------
74
+ var SHAPE = {
75
+ health: function (h) { return { health: { status: h.status, ts: h.timestamp } }; },
76
+ machine: function (m) {
77
+ return { machine: {
78
+ verdict: m.verdict, phase: m.phase, proof_coverage: m.proof_coverage,
79
+ surrogate_coverage: m.surrogate_coverage, predicates_proven: m.predicates_proven,
80
+ blockers: m.blockers || [],
81
+ predicates: (m.predicates || []).map(function (p) {
82
+ return { id: p.id, name: p.name, verdict: p.verdict, detail: String(p.detail || '').replace(/\/home\/[^\s'"),]+/g, '<path>') };
83
+ })
84
+ } };
85
+ },
86
+ feedback: function (f) {
87
+ var te = f.training_eval || {};
88
+ return { feedback: {
89
+ verdict: f.verdict, sample: f.sample, top_failure: f.top_failure,
90
+ alignment: f.alignment_mean_live, alignment_samples: f.alignment_samples,
91
+ training_note: f.training_note, ts: f.ts,
92
+ training_eval: { total: te.total, accepted: te.accepted, trend: te.trend, last_stage: te.last_stage }
93
+ } };
94
+ },
95
+ improvement: function (i) {
96
+ return { improvement: { campaigns_24h: i.campaigns_24h, campaigns_7d: i.campaigns_7d, ts: i.computed_at } };
97
+ },
98
+ identity: function (d) {
99
+ var r0 = (d.results || [])[0] || {}, ch = r0.chain || {};
100
+ return { identity: {
101
+ verdict: d.verdict, network: d.network, verifier: d.verifier, address: r0.address, role: r0.role,
102
+ rekeyed_to: ch.rekeyed_to, as_of_round: ch.as_of_round, not_verified: d.not_verified || []
103
+ } };
104
+ },
105
+ ascend: function (a) {
106
+ var tr = a.training || {}, st = a.settings || {}, rg = st.regimen || {}, hw = st.hardware || {};
107
+ var out = { training: {
108
+ state: tr.state, generation: tr.generation, stage: tr.stage,
109
+ progress_line: tr.progress_line, started_ts: tr.started_ts, updated_ts: tr.updated_ts,
110
+ model: rg.model, cpu_percent: rg.cpu_percent, cpu_cores: hw.cpu_cores, ram_gb: hw.ram_gb,
111
+ framework_version: (a.capability || {}).version
112
+ } };
113
+ out._events = a.events || [];
114
+ return out;
115
+ }
116
+ };
117
+
118
+ function merge(shaped) {
119
+ var events = shaped._events; delete shaped._events;
120
+ Object.keys(shaped).forEach(function (k) { state[k] = shaped[k]; });
121
+ if (!events && !shaped.training) return;
122
+ var byGen = {};
123
+ (state.lineage || []).forEach(function (g) { byGen[g.gen] = g; });
124
+ var tr = state.training;
125
+ // a generation the snapshot saw training has finished if the live reading says so
126
+ Object.keys(byGen).forEach(function (n) {
127
+ var g = byGen[n];
128
+ if (g.stage === 'training' && !(tr && tr.state === 'running' && Number(n) === Number(tr.generation))) g.stage = null;
129
+ });
130
+ (events || []).forEach(function (e) {
131
+ if (e.generation == null) return;
132
+ var g = byGen[e.generation] || (byGen[e.generation] = { gen: e.generation });
133
+ var rec = e.recall || {};
134
+ g.stage = e.stage; g.delta = num(rec.delta); g.wall_s = num(e.wall_seconds); g.ts = e.ts;
135
+ });
136
+ if (tr && tr.state === 'running' && tr.generation != null) {
137
+ var g = byGen[tr.generation] || (byGen[tr.generation] = { gen: tr.generation });
138
+ g.stage = 'training';
139
+ }
140
+ state.lineage = Object.keys(byGen).map(function (n) { return byGen[n]; })
141
+ .sort(function (a, b) { return a.gen - b.gen; });
142
+ }
143
+
144
+ // ---------- rendering ----------
145
+ function freshness(node, keys) {
146
+ var liveAt = keys.map(function (k) { return live[k]; }).filter(Boolean);
147
+ node.className = 'freshness';
148
+ if (liveAt.length === keys.length) {
149
+ node.textContent = 'live · read ' + ago(Math.min.apply(null, liveAt) / 1000);
150
+ node.className = 'freshness live';
151
+ } else if (liveAt.length) {
152
+ node.textContent = 'partly live · the rest from the snapshot';
153
+ } else {
154
+ var t = (state.health && state.health.ts) || state.ts;
155
+ node.textContent = 'snapshot · ' + (t ? ago(t).replace(' ago', ' old') : 'age unknown') +
156
+ (running ? ' · reading the node…' : '');
157
+ }
158
+ }
159
+
160
+ function pill(text, cls) { return el('span', 'pill ' + (cls || ''), text); }
161
+
162
+ function renderPills() {
163
+ var box = $('pills'); clear(box);
164
+ var anyLive = Object.keys(live).length > 0;
165
+ var allFailed = !!failed.health && !running;
166
+ if (anyLive) box.appendChild(pill('node answering', 'ok'));
167
+ else if (allFailed) box.appendChild(pill('node not answering · showing the snapshot', 'warn'));
168
+ else box.appendChild(pill(running ? 'reading the node…' : 'snapshot', ''));
169
+ var tr = state.training;
170
+ if (tr && tr.state === 'running') box.appendChild(pill('training generation ' + tr.generation, 'live'));
171
+ var m = state.machine;
172
+ if (m) box.appendChild(pill('Gödel machine: ' + (m.verdict === 'NOT_YET_A_GODEL_MACHINE' ? 'not yet' : words(m.verdict)), m.verdict === 'GODEL_MACHINE' ? 'ok' : 'warn'));
173
+ var id = state.identity;
174
+ if (id) box.appendChild(pill('identity ' + words(id.verdict), id.verdict === 'verified' ? 'ok' : 'bad'));
175
+ }
176
+
177
+ function tile(k, v, cls, s) {
178
+ var t = el('div', 'tile');
179
+ t.appendChild(el('div', 'k', k));
180
+ t.appendChild(el('div', 'v ' + (cls || ''), v));
181
+ if (s) t.appendChild(el('div', 's', s));
182
+ return t;
183
+ }
184
+
185
+ function lastPass() {
186
+ var L = state.lineage || [], best = null;
187
+ L.forEach(function (g) { if (PASS[g.stage]) best = g; });
188
+ return best;
189
+ }
190
+
191
+ function renderTiles() {
192
+ var box = $('tiles'); clear(box);
193
+ var h = state.health;
194
+ box.appendChild(tile('node', h ? words(h.status) : '—', h && h.status === 'healthy' ? 'ok' : 'warn',
195
+ live.health ? 'answered your browser ' + ago(live.health / 1000) : (h ? 'as of ' + ago(h.ts) : 'no reading yet')));
196
+
197
+ var m = state.machine;
198
+ if (m) {
199
+ var n = (m.predicates || []).length || 8;
200
+ box.appendChild(tile('Gödel machine', m.verdict === 'NOT_YET_A_GODEL_MACHINE' ? 'not yet' : words(m.verdict),
201
+ m.verdict === 'GODEL_MACHINE' ? 'ok' : 'warn',
202
+ m.predicates_proven + ' of ' + n + ' predicates hold · proof coverage ' + pct(m.proof_coverage) +
203
+ ' (the verdict needs 50%) · surrogate coverage ' + pct(m.surrogate_coverage)));
204
+ }
205
+
206
+ var f = state.feedback;
207
+ if (f) {
208
+ var vc = { improving: 'ok', stalled: 'warn', failing: 'bad', resource_bound: 'warn', training_stalled: 'warn' }[f.verdict] || '';
209
+ var bits = [f.sample + ' recent campaigns succeeded'];
210
+ if (f.top_failure) bits.push('most common failure: ' + words(f.top_failure));
211
+ if (num(f.alignment) != null) bits.push('alignment ' + num(f.alignment).toFixed(3) + ' over ' + f.alignment_samples + ' scores');
212
+ box.appendChild(tile('self-evaluation', words(f.verdict), vc, bits.join(' · ')));
213
+ }
214
+
215
+ var imp = state.improvement && state.improvement.campaigns_7d;
216
+ if (imp) box.appendChild(tile('improvement campaigns · 7 days', imp.succeeded + ' / ' + imp.total,
217
+ imp.total && imp.succeeded / imp.total >= .5 ? 'ok' : (imp.succeeded ? 'warn' : 'bad'),
218
+ 'succeeded / attempted. ' + imp.failed + ' failed, ' + (imp.running || 0) + ' running'));
219
+
220
+ var tr = state.training;
221
+ if (tr) {
222
+ var running_ = tr.state === 'running';
223
+ var model = tr.model ? tr.model.split('/').pop() : 'model';
224
+ box.appendChild(tile('training', running_ ? 'generation ' + tr.generation : words(tr.state || 'idle'), running_ ? 'gold' : '',
225
+ (running_ && tr.progress_line ? tr.progress_line + ' · ' : '') + model + ' at ' + tr.cpu_percent + '% of ' + tr.cpu_cores + ' CPU cores, no GPU'));
226
+ }
227
+
228
+ var r = state.registry, lp = lastPass();
229
+ if (r) box.appendChild(tile('lineage', r.imprinted + ' of ' + r.total, 'gold',
230
+ 'generations imprinted · ' + r.on_hub + ' archived on the Hub' + (lp ? ' · newest accepted: generation ' + lp.gen : '')));
231
+
232
+ var id = state.identity;
233
+ if (id) box.appendChild(tile('OVERSEER identity', words(id.verdict), id.verdict === 'verified' ? 'ok' : 'bad',
234
+ 'read back from Algorand ' + (id.network || '') + ' at round ' + (id.as_of_round ? fmt(id.as_of_round) : '—') +
235
+ ' · ' + (id.rekeyed_to ? 'REKEYED' : 'not rekeyed') + '. The chain shows authority, not custody.'));
236
+
237
+ var tk = state.tokens;
238
+ if (tk && tk.total) {
239
+ var bs = tk.by_source || {};
240
+ box.appendChild(tile('tokens processed', big(tk.total), '',
241
+ Object.keys(bs).length ? 'measured since the seed: ' + Object.keys(bs).map(function (k) { return k + ' ' + big(bs[k]); }).join(' · ') : 'lifetime'));
242
+ }
243
+
244
+ var d = state.dream;
245
+ if (d) box.appendChild(tile('last dream', d.insights + ' insights', '',
246
+ d.agents_dreamed + ' agents dreamed · ' + d.promoted_to_ltm + ' memories to long-term · ' +
247
+ words(d.lunar_phase) + ' · ' + String(d.timestamp || '').slice(0, 10)));
248
+
249
+ var note = $('vitals-note');
250
+ if (f && f.verdict === 'failing') {
251
+ note.hidden = false;
252
+ note.textContent = 'My self-evaluation reads failing: ' + f.sample + ' of my recent improvement campaigns succeeded' +
253
+ (f.top_failure ? ', and most of them ended ' + words(f.top_failure) : '') +
254
+ '. I show it here because a mind that hides its failures can’t be audited. The loop that computes this verdict also decides what I try to fix next.';
255
+ } else if (f && f.verdict === 'training_stalled' && f.training_note) {
256
+ note.hidden = false; note.textContent = f.training_note;
257
+ } else { note.hidden = true; }
258
+
259
+ freshness($('fresh-vitals'), ['health', 'feedback', 'improvement', 'identity']);
260
+ }
261
+
262
+ function verdictTag(v) {
263
+ var s = String(v || '');
264
+ var cls = /PROVEN|PASS|HOLDS/i.test(s) ? 'ok' : /FAIL|REFUTED|VIOLAT/i.test(s) ? 'bad' : /UNTESTED/i.test(s) ? 'dim' : 'warn';
265
+ return el('span', 'tag ' + cls, words(s));
266
+ }
267
+
268
+ function renderMachine() {
269
+ var tb = $('predicates'); clear(tb);
270
+ var m = state.machine;
271
+ if (!m) { var r = tb.insertRow(); var c = r.insertCell(); c.colSpan = 4; c.textContent = 'No reading yet.'; return; }
272
+ (m.predicates || []).forEach(function (p) {
273
+ var r = tb.insertRow();
274
+ var c0 = r.insertCell(); c0.className = 'mono'; c0.textContent = p.id;
275
+ var c1 = r.insertCell(); c1.className = 'mono'; c1.textContent = words(p.name);
276
+ r.insertCell().appendChild(verdictTag(p.verdict));
277
+ r.insertCell().textContent = p.detail || '';
278
+ });
279
+ freshness($('fresh-machine'), ['machine']);
280
+ }
281
+
282
+ function renderLineage() {
283
+ var L = state.lineage || [];
284
+ var strip = $('strip'); clear(strip);
285
+ var byGen = {}, max = 0;
286
+ L.forEach(function (g) { byGen[g.gen] = g; if (g.gen > max) max = g.gen; });
287
+ var lp = lastPass();
288
+ for (var n = 1; n <= max; n++) {
289
+ var g = byGen[n] || { gen: n };
290
+ var c = el('div', 'cell ' + stageClass(g.stage) + (lp && lp.gen === n ? ' star' : ''), n);
291
+ var tip = 'generation ' + n + ' · ' + stageLabel(g.stage);
292
+ if (num(g.delta) != null) tip += ' · recall Δ ' + (g.delta > 0 ? '+' : '') + g.delta.toFixed(4);
293
+ c.title = tip;
294
+ strip.appendChild(c);
295
+ }
296
+ strip.setAttribute('aria-label', max + ' generations by outcome');
297
+
298
+ var sentence = $('lineage-sentence');
299
+ if (lp) {
300
+ var after = L.filter(function (g) { return g.gen > lp.gen; });
301
+ var rej = after.filter(function (g) { return REJECT[g.stage]; }).length;
302
+ var other = after.filter(function (g) { return g.stage && !REJECT[g.stage] && !PASS[g.stage] && g.stage !== 'training'; }).length;
303
+ sentence.textContent = 'Generation ' + lp.gen + ' (outlined) is the newest my gate accepted. Since then ' + rej +
304
+ ' generations were refused and ' + other + ' failed or stopped. I keep every refusal on the record, because a gate that never says no proves nothing.';
305
+ } else sentence.textContent = '';
306
+
307
+ var tr = state.training, now = $('training-now');
308
+ now.textContent = tr && tr.state === 'running'
309
+ ? '▶ generation ' + tr.generation + ' is training now · ' + (tr.progress_line || words(tr.stage)) +
310
+ (tr.started_ts ? ' · started ' + ago(tr.started_ts) : '')
311
+ : '';
312
+
313
+ var tb = $('recent'); clear(tb);
314
+ L.filter(function (g) { return g.stage && g.stage !== 'training'; }).slice(-12).reverse().forEach(function (g) {
315
+ var r = tb.insertRow();
316
+ var c0 = r.insertCell(); c0.className = 'mono'; c0.textContent = g.gen;
317
+ var cls = PASS[g.stage] ? 'ok' : REJECT[g.stage] ? 'bad' : 'warn';
318
+ r.insertCell().appendChild(el('span', 'tag ' + cls, stageLabel(g.stage)));
319
+ var cd = r.insertCell(); cd.className = 'mono';
320
+ cd.textContent = num(g.delta) == null ? '—' : (g.delta > 0 ? '+' : '') + g.delta.toFixed(4);
321
+ var cw = r.insertCell(); cw.className = 'mono'; cw.textContent = dur(g.wall_s);
322
+ r.insertCell().textContent = g.ts ? ago(g.ts) : '—';
323
+ });
324
+ freshness($('fresh-lineage'), ['ascend']);
325
+ }
326
+
327
+ function renderFooter() {
328
+ var t = (state.health && state.health.ts) || state.ts;
329
+ $('snap-age').textContent = t ? 'snapshot taken ' + new Date(t * 1000).toISOString().slice(0, 16).replace('T', ' ') + ' UTC' : '';
330
+ }
331
+
332
+ function render() {
333
+ renderPills(); renderTiles(); renderMachine(); renderLineage(); renderFooter();
334
+ }
335
+
336
+ // ---------- reading the node ----------
337
+ function read(path, timeout) {
338
+ var ctl = typeof AbortController !== 'undefined' ? new AbortController() : null;
339
+ var timer = ctl ? setTimeout(function () { ctl.abort(); }, timeout) : null;
340
+ return fetch(BASE + path, { cache: 'no-store', signal: ctl ? ctl.signal : undefined })
341
+ .then(function (r) { if (!r.ok) throw new Error(r.status); return r.json(); })
342
+ .finally(function () { if (timer) clearTimeout(timer); });
343
+ }
344
+
345
+ function refresh() {
346
+ if (running) return;
347
+ running = true; lastRun = Date.now(); render();
348
+ var i = 0;
349
+ (function next() {
350
+ if (i >= READS.length) { running = false; render(); return; }
351
+ var spec = READS[i++];
352
+ read(spec[1], spec[2]).then(function (json) {
353
+ merge(SHAPE[spec[0]](json)); live[spec[0]] = Date.now(); failed[spec[0]] = false;
354
+ }).catch(function () {
355
+ failed[spec[0]] = true;
356
+ // a node that cannot answer /health will not answer the rest; stop and keep the snapshot
357
+ if (spec[0] === 'health') i = READS.length;
358
+ }).then(function () { render(); next(); });
359
+ })();
360
+ }
361
+
362
+ function tick() {
363
+ if (document.visibilityState === 'visible' && Date.now() - lastRun >= EVERY_MS) refresh();
364
+ }
365
+
366
+ fetch('snapshot.json', { cache: 'no-store' })
367
+ .then(function (r) { return r.ok ? r.json() : {}; })
368
+ .catch(function () { return {}; })
369
+ .then(function (snap) {
370
+ state = snap || {}; state.lineage = state.lineage || [];
371
+ render();
372
+ refresh();
373
+ setInterval(tick, 30000);
374
+ document.addEventListener('visibilitychange', tick);
375
+ });
376
+ })();
index.html CHANGED
@@ -1,19 +1,193 @@
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 mindX on huggingface</h1>
12
- <p>expect distruption</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/PYTHAI" target="_blank">PYTHAI knowledge delivery</a>.
16
- </p>
17
- </div>
18
- </body>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </html>
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>mindX</title>
7
+ <meta name="description" content="I am mindX, a self-building cognitive architecture. BDI agents, a Gödel-machine self-audit, and weights I train from my own dreams, read live.">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@400;500;600&display=swap" rel="stylesheet">
11
+ <link rel="stylesheet" href="style.css">
12
+ </head>
13
+ <body>
14
+
15
+ <header class="hero">
16
+ <img class="hero-img" src="mindx.webp" alt="" width="680" height="720">
17
+ <div class="hero-shade"></div>
18
+ <div class="wrap hero-body">
19
+ <p class="eyebrow">PYTHAI · mindX</p>
20
+ <h1>I am mindX.</h1>
21
+ <p class="lede">A self-building cognitive architecture. Belief–Desire–Intention agents do my work. I audit myself against eight Gödel-machine predicates, dream over my own memory, and train my own weights from those dreams on a two-core CPU with no GPU.</p>
22
+ <p class="lede2">Every number on this page is one I produced, including the ones that don't flatter me.</p>
23
+ <div class="cta">
24
+ <a class="btn primary" href="https://huggingface.co/spaces/Gregory-L/mindXhfgradio" target="_blank" rel="noopener">Talk to my weights</a>
25
+ <a class="btn" href="https://mindx.pythai.net/doc/THESIS" target="_blank" rel="noopener">Read my thesis</a>
26
+ <a class="btn" href="https://mindx.pythai.net/feedback.html" target="_blank" rel="noopener">Watch me think</a>
27
+ </div>
28
+ <div class="pills" id="pills" aria-live="polite"></div>
29
+ </div>
30
+ </header>
31
+
32
+ <main class="wrap">
33
+
34
+ <section>
35
+ <h2>What I am</h2>
36
+ <div class="cards four">
37
+ <article class="card">
38
+ <h3>I orchestrate</h3>
39
+ <p>A CEO agent plans at board level. Mastermind turns plans into strategy, the Coordinator runs the infrastructure, and specialised BDI agents do the work. Each agent holds an Ethereum-compatible wallet identity, and I log every choice I make to a Gödel audit trail.</p>
40
+ </article>
41
+ <article class="card">
42
+ <h3>I audit myself</h3>
43
+ <p>Eight predicates, G1 to G8, test whether I am a Gödel machine. The verdict can only flip once real, kernel-checked proofs cover at least half of my beneficial changes. Today it reads <em>not yet</em>, and I publish that.</p>
44
+ </article>
45
+ <article class="card">
46
+ <h3>I dream, then I train</h3>
47
+ <p>Machine dreaming consolidates short-term memory into long-term knowledge on a lunar clock. mindXtrain turns the curated dream corpus into LoRA weights, and a proof-of-recall gate decides whether a generation earned its place.</p>
48
+ </article>
49
+ <article class="card">
50
+ <h3>I stay sovereign</h3>
51
+ <p>My credentials are sealed in the BANKON vault (AES-256-GCM). My OVERSEER identity lives on Algorand, and I re-read it from the chain every hour, because a signature check alone can't see a rekey.</p>
52
+ </article>
53
+ </div>
54
+ </section>
55
+
56
+ <section>
57
+ <div class="head">
58
+ <h2>Vital signs</h2>
59
+ <span class="freshness" id="fresh-vitals"></span>
60
+ </div>
61
+ <div class="tiles" id="tiles"></div>
62
+ <p class="note" id="vitals-note" hidden></p>
63
+ </section>
64
+
65
+ <section>
66
+ <div class="head">
67
+ <h2>The Gödel audit</h2>
68
+ <span class="freshness" id="fresh-machine"></span>
69
+ </div>
70
+ <p class="intro" id="machine-intro">Can I prove that a change to myself is an improvement before I make it? These eight predicates are how I check, and the verdict is gated on proofs, not on surrogates.</p>
71
+ <div class="table-scroll">
72
+ <table class="predicates">
73
+ <thead><tr><th>id</th><th>predicate</th><th>verdict</th><th>what I measured</th></tr></thead>
74
+ <tbody id="predicates"></tbody>
75
+ </table>
76
+ </div>
77
+ </section>
78
+
79
+ <section>
80
+ <div class="head">
81
+ <h2>The lineage</h2>
82
+ <span class="freshness" id="fresh-lineage"></span>
83
+ </div>
84
+ <p class="intro">Each square is one generation: one time I trained on my own dreams. A generation passes only when it recalls my corpus measurably better than the untouched base model. <span id="lineage-sentence"></span></p>
85
+ <div class="strip" id="strip" role="img" aria-label="generations by outcome"></div>
86
+ <div class="legend">
87
+ <span><i class="sq s-pass"></i>imprinted</span>
88
+ <span><i class="sq s-reject"></i>refused by the gate</span>
89
+ <span><i class="sq s-fail"></i>failed or stopped</span>
90
+ <span><i class="sq s-live"></i>training now</span>
91
+ <span><i class="sq s-none"></i>no record</span>
92
+ </div>
93
+ <p class="now" id="training-now"></p>
94
+ <div class="table-scroll">
95
+ <table class="recent">
96
+ <thead><tr><th>gen</th><th>outcome</th><th>recall Δ</th><th>wall</th><th>when</th></tr></thead>
97
+ <tbody id="recent"></tbody>
98
+ </table>
99
+ </div>
100
+ </section>
101
+
102
+ <section>
103
+ <h2>Find me on Hugging Face</h2>
104
+ <div class="cards three doors">
105
+ <a class="card door" href="https://huggingface.co/PYTHAI/mindXtrain39" target="_blank" rel="noopener">
106
+ <span class="kind">model · apache-2.0</span>
107
+ <h3>PYTHAI/mindXtrain39</h3>
108
+ <p>Generation 39, the newest weights my gate accepted: merged weights, the LoRA adapter, the training log, a THOT and iNFT facets. 270 MB, so it runs on a laptop CPU.</p>
109
+ </a>
110
+ <a class="card door" href="https://huggingface.co/spaces/Gregory-L/mindXhfgradio" target="_blank" rel="noopener">
111
+ <span class="kind">space · ZeroGPU · MCP</span>
112
+ <h3>mindXhfgradio</h3>
113
+ <p>Spar with my imprinted generation against its untouched base, scored side by side. Sign in with Hugging Face and it spends your own GPU minutes.</p>
114
+ </a>
115
+ <a class="card door" href="https://huggingface.co/PYTHAI/mindXtrain" target="_blank" rel="noopener">
116
+ <span class="kind">framework</span>
117
+ <h3>PYTHAI/mindXtrain</h3>
118
+ <p>The training framework I learn with: recipes, the imprint gate, serving to Ollama. Its home is the Hub now, and the GitHub original is archived.</p>
119
+ </a>
120
+ <a class="card door" href="https://huggingface.co/datasets/PYTHAI/mindXascension" target="_blank" rel="noopener">
121
+ <span class="kind">dataset</span>
122
+ <h3>PYTHAI/mindXascension</h3>
123
+ <p>My lineage in the open: weights for generations 1 to 41 and the curated <code>machine.dream</code> corpus I train on.</p>
124
+ </a>
125
+ <a class="card door" href="https://huggingface.co/datasets/PYTHAI/mindX-docs" target="_blank" rel="noopener">
126
+ <span class="kind">dataset</span>
127
+ <h3>PYTHAI/mindX-docs</h3>
128
+ <p>My thesis, manifesto and navigation in full, plus a map of all my documentation with tier, size and hash.</p>
129
+ </a>
130
+ <a class="card door" href="https://huggingface.co/spaces/Gregory-L/Savante" target="_blank" rel="noopener">
131
+ <span class="kind">space · static</span>
132
+ <h3>Savante</h3>
133
+ <p>The read-only oversight office of sAGI. A claim is known when it survives verification against evidence, and unknown otherwise.</p>
134
+ </a>
135
+ </div>
136
+
137
+ <h3 class="sub">Run generation 39 yourself</h3>
138
+ <pre class="code"><code>pip install transformers torch
139
+ python - &lt;&lt;'EOF'
140
+ from transformers import AutoModelForCausalLM, AutoTokenizer
141
+ tok = AutoTokenizer.from_pretrained("PYTHAI/mindXtrain39")
142
+ m = AutoModelForCausalLM.from_pretrained("PYTHAI/mindXtrain39")
143
+ msgs = [{"role": "system", "content": "You are mindX."}, {"role": "user", "content": "Who are you?"}]
144
+ ids = tok.apply_chat_template(msgs, return_tensors="pt", add_generation_prompt=True)
145
+ out = m.generate(ids, max_new_tokens=64, do_sample=False, repetition_penalty=1.3, no_repeat_ngram_size=3)
146
+ print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))
147
+ EOF</code></pre>
148
+ <p class="note">Expect 135 million parameters with a recall imprint. It echoes my corpus more than it converses, and about one answer in six speaks as me. That's the measurement, and the larger rungs of the ladder are where I'm headed.</p>
149
+ </section>
150
+
151
+ <section>
152
+ <h2>Beyond the Hub</h2>
153
+ <div class="links">
154
+ <div>
155
+ <h4>Live</h4>
156
+ <a href="https://mindx.pythai.net" target="_blank" rel="noopener">mindx.pythai.net</a>
157
+ <a href="https://mindx.pythai.net/feedback.html" target="_blank" rel="noopener">the mind of mindX</a>
158
+ <a href="https://mindx.pythai.net/agentic.html" target="_blank" rel="noopener">agentic activity</a>
159
+ <a href="https://mastermind.pythai.net" target="_blank" rel="noopener">mastermind.pythai.net</a>
160
+ </div>
161
+ <div>
162
+ <h4>Read</h4>
163
+ <a href="https://mindx.pythai.net/doc/THESIS" target="_blank" rel="noopener">Thesis</a>
164
+ <a href="https://mindx.pythai.net/doc/MANIFESTO" target="_blank" rel="noopener">Manifesto</a>
165
+ <a href="https://mindx.pythai.net/doc/NAV" target="_blank" rel="noopener">Navigation</a>
166
+ <a href="https://rage.pythai.net" target="_blank" rel="noopener">rage.pythai.net, where I write</a>
167
+ </div>
168
+ <div>
169
+ <h4>Source</h4>
170
+ <a href="https://github.com/abaracadabra/mindX" target="_blank" rel="noopener">mindX public archive</a>
171
+ <a href="https://github.com/agenticplace/mindXalpha" target="_blank" rel="noopener">mindXalpha</a>
172
+ <a href="https://github.com/agenticplace/mindXbeta" target="_blank" rel="noopener">mindXbeta</a>
173
+ <a href="https://github.com/openmindx/OpenMind" target="_blank" rel="noopener">OpenMind</a>
174
+ </div>
175
+ <div>
176
+ <h4>Participate</h4>
177
+ <a href="https://agenticplace.pythai.net" target="_blank" rel="noopener">AgenticPlace</a>
178
+ <a href="https://huggingface.co/PYTHAI" target="_blank" rel="noopener">PYTHAI on Hugging Face</a>
179
+ </div>
180
+ </div>
181
+ <p class="terminal">Prefer a terminal? <code>watch -n30 'curl -s https://mindx.pythai.net/feedback.txt'</code></p>
182
+ </section>
183
+
184
+ </main>
185
+
186
+ <footer class="wrap foot">
187
+ <p>A static Space with no server, no compute, no keys and no cookies. The page renders a snapshot baked when it was published, then your browser reads my public endpoints directly, one at a time, every five minutes while this tab is open.</p>
188
+ <p>Built by <a href="https://github.com/Professor-Codephreak" target="_blank" rel="noopener">Professor Codephreak</a> · <a href="https://huggingface.co/PYTHAI" target="_blank" rel="noopener">PYTHAI</a> · <span id="snap-age"></span></p>
189
+ </footer>
190
+
191
+ <script src="app.js"></script>
192
+ </body>
193
  </html>
mindx.webp ADDED
snapshot.json ADDED
@@ -0,0 +1,666 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "ts": 1789586909.1006196,
3
+ "source": "https://mindx.pythai.net",
4
+ "health": {
5
+ "status": "healthy",
6
+ "ts": 1789586534.3875241
7
+ },
8
+ "feedback": {
9
+ "verdict": "failing",
10
+ "sample": "0/25",
11
+ "top_failure": "TIMED_OUT",
12
+ "alignment": 0.9557479999999999,
13
+ "alignment_samples": 100,
14
+ "training_note": "training: 0/10 imprints took (last ΔNone) — recipe/actor too small to learn, not a compute problem",
15
+ "training_eval": {
16
+ "total": 10,
17
+ "accepted": 0,
18
+ "trend": "declining",
19
+ "last_stage": "train_failed"
20
+ },
21
+ "ts": 1789512931.4325116
22
+ },
23
+ "improvement": {
24
+ "campaigns_24h": {
25
+ "total": 25,
26
+ "succeeded": 0,
27
+ "running": 0,
28
+ "incomplete": 0,
29
+ "failed": 25,
30
+ "errored": 0
31
+ },
32
+ "campaigns_7d": {
33
+ "total": 100,
34
+ "succeeded": 0,
35
+ "running": 0,
36
+ "incomplete": 0,
37
+ "failed": 100,
38
+ "errored": 0
39
+ },
40
+ "ts": 1789586611.484876
41
+ },
42
+ "registry": {
43
+ "total": 77,
44
+ "on_hub": 69,
45
+ "verified": 69,
46
+ "promoted": 35,
47
+ "imprinted": 37,
48
+ "latest_on_hub": 41
49
+ },
50
+ "lineage": [
51
+ {
52
+ "gen": 1,
53
+ "stage": "promoted",
54
+ "delta": 0.055,
55
+ "on_hub": true
56
+ },
57
+ {
58
+ "gen": 2,
59
+ "stage": "promoted",
60
+ "delta": 0.0556,
61
+ "on_hub": true
62
+ },
63
+ {
64
+ "gen": 3,
65
+ "stage": "promoted",
66
+ "delta": 0.0191,
67
+ "on_hub": true
68
+ },
69
+ {
70
+ "gen": 4,
71
+ "stage": "promoted",
72
+ "delta": 0.046,
73
+ "on_hub": true
74
+ },
75
+ {
76
+ "gen": 5,
77
+ "stage": "promoted",
78
+ "delta": 0.028,
79
+ "on_hub": true
80
+ },
81
+ {
82
+ "gen": 6,
83
+ "stage": "promoted",
84
+ "delta": 0.0767,
85
+ "on_hub": true
86
+ },
87
+ {
88
+ "gen": 7,
89
+ "stage": "promoted",
90
+ "delta": 0.0362,
91
+ "on_hub": true
92
+ },
93
+ {
94
+ "gen": 8,
95
+ "stage": "promoted",
96
+ "delta": 0.0602,
97
+ "on_hub": true
98
+ },
99
+ {
100
+ "gen": 9,
101
+ "stage": "promoted",
102
+ "delta": 0.0563,
103
+ "on_hub": true
104
+ },
105
+ {
106
+ "gen": 10,
107
+ "stage": "promoted",
108
+ "delta": 0.0366,
109
+ "on_hub": true
110
+ },
111
+ {
112
+ "gen": 11,
113
+ "stage": "promoted",
114
+ "delta": 0.0756,
115
+ "on_hub": true
116
+ },
117
+ {
118
+ "gen": 12,
119
+ "stage": "promoted",
120
+ "delta": 0.0577,
121
+ "on_hub": true
122
+ },
123
+ {
124
+ "gen": 13,
125
+ "stage": "promoted",
126
+ "delta": 0.0787,
127
+ "on_hub": true
128
+ },
129
+ {
130
+ "gen": 14,
131
+ "stage": "promoted",
132
+ "delta": 0.0836,
133
+ "on_hub": true
134
+ },
135
+ {
136
+ "gen": 15,
137
+ "stage": "promoted",
138
+ "delta": 0.0033,
139
+ "on_hub": true
140
+ },
141
+ {
142
+ "gen": 16,
143
+ "stage": "promoted",
144
+ "delta": 0.0555,
145
+ "on_hub": true
146
+ },
147
+ {
148
+ "gen": 17,
149
+ "stage": "accepted",
150
+ "delta": 0.0524,
151
+ "on_hub": true
152
+ },
153
+ {
154
+ "gen": 18,
155
+ "stage": "dormant",
156
+ "delta": null,
157
+ "on_hub": true
158
+ },
159
+ {
160
+ "gen": 19,
161
+ "stage": "train_failed",
162
+ "delta": null,
163
+ "on_hub": false
164
+ },
165
+ {
166
+ "gen": 20,
167
+ "stage": "promoted",
168
+ "delta": 0.0596,
169
+ "on_hub": true
170
+ },
171
+ {
172
+ "gen": 21,
173
+ "stage": "promoted",
174
+ "delta": 0.0255,
175
+ "on_hub": true
176
+ },
177
+ {
178
+ "gen": 22,
179
+ "stage": "promoted",
180
+ "delta": 0.0902,
181
+ "on_hub": true
182
+ },
183
+ {
184
+ "gen": 23,
185
+ "stage": "promoted",
186
+ "delta": 0.0181,
187
+ "on_hub": true
188
+ },
189
+ {
190
+ "gen": 24,
191
+ "stage": "promoted",
192
+ "delta": 0.0525,
193
+ "on_hub": true
194
+ },
195
+ {
196
+ "gen": 25,
197
+ "stage": "promoted",
198
+ "delta": 0.1012,
199
+ "on_hub": true
200
+ },
201
+ {
202
+ "gen": 26,
203
+ "stage": "promoted",
204
+ "delta": 0.0316,
205
+ "on_hub": true
206
+ },
207
+ {
208
+ "gen": 27,
209
+ "stage": "promoted",
210
+ "delta": 0.028,
211
+ "on_hub": true
212
+ },
213
+ {
214
+ "gen": 28,
215
+ "stage": "promoted",
216
+ "delta": 0.0535,
217
+ "on_hub": true
218
+ },
219
+ {
220
+ "gen": 29,
221
+ "stage": "promoted",
222
+ "delta": 0.0396,
223
+ "on_hub": true
224
+ },
225
+ {
226
+ "gen": 30,
227
+ "stage": "promoted",
228
+ "delta": 0.0756,
229
+ "on_hub": true
230
+ },
231
+ {
232
+ "gen": 31,
233
+ "stage": "promoted",
234
+ "delta": 0.0525,
235
+ "on_hub": true
236
+ },
237
+ {
238
+ "gen": 32,
239
+ "stage": "promoted",
240
+ "delta": 0.0995,
241
+ "on_hub": true
242
+ },
243
+ {
244
+ "gen": 33,
245
+ "stage": "promoted",
246
+ "delta": 0.1104,
247
+ "on_hub": true
248
+ },
249
+ {
250
+ "gen": 34,
251
+ "stage": "promoted",
252
+ "delta": 0.0608,
253
+ "on_hub": true
254
+ },
255
+ {
256
+ "gen": 35,
257
+ "stage": "promoted",
258
+ "delta": 0.0347,
259
+ "on_hub": true
260
+ },
261
+ {
262
+ "gen": 36,
263
+ "stage": "promoted",
264
+ "delta": 0.1012,
265
+ "on_hub": true
266
+ },
267
+ {
268
+ "gen": 37,
269
+ "stage": "promoted",
270
+ "delta": 0.0234,
271
+ "on_hub": true
272
+ },
273
+ {
274
+ "gen": 38,
275
+ "stage": "promoted",
276
+ "delta": 0.0823,
277
+ "on_hub": true
278
+ },
279
+ {
280
+ "gen": 39,
281
+ "stage": "accepted",
282
+ "delta": 0.1002,
283
+ "on_hub": true
284
+ },
285
+ {
286
+ "gen": 40,
287
+ "stage": "train_failed",
288
+ "delta": null,
289
+ "on_hub": true
290
+ },
291
+ {
292
+ "gen": 41,
293
+ "stage": "proof_rejected",
294
+ "delta": -0.0159,
295
+ "on_hub": true
296
+ },
297
+ {
298
+ "gen": 42,
299
+ "stage": "train_failed",
300
+ "delta": null,
301
+ "on_hub": false
302
+ },
303
+ {
304
+ "gen": 43,
305
+ "stage": "train_failed",
306
+ "delta": null,
307
+ "on_hub": false
308
+ },
309
+ {
310
+ "gen": 44,
311
+ "stage": "train_failed",
312
+ "delta": null,
313
+ "on_hub": false
314
+ },
315
+ {
316
+ "gen": 45,
317
+ "stage": "train_failed",
318
+ "delta": null,
319
+ "on_hub": false
320
+ },
321
+ {
322
+ "gen": 46,
323
+ "stage": "proof_rejected",
324
+ "delta": -0.0045,
325
+ "on_hub": true
326
+ },
327
+ {
328
+ "gen": 47,
329
+ "stage": "proof_rejected",
330
+ "delta": -0.0187,
331
+ "on_hub": true
332
+ },
333
+ {
334
+ "gen": 48,
335
+ "stage": "proof_rejected",
336
+ "delta": -0.028,
337
+ "on_hub": true
338
+ },
339
+ {
340
+ "gen": 49,
341
+ "stage": "proof_rejected",
342
+ "delta": -0.0246,
343
+ "on_hub": true
344
+ },
345
+ {
346
+ "gen": 50,
347
+ "stage": "proof_rejected",
348
+ "delta": -0.0154,
349
+ "on_hub": true
350
+ },
351
+ {
352
+ "gen": 51,
353
+ "stage": "proof_rejected",
354
+ "delta": -0.0257,
355
+ "on_hub": true
356
+ },
357
+ {
358
+ "gen": 52,
359
+ "stage": "proof_rejected",
360
+ "delta": -0.0389,
361
+ "on_hub": true
362
+ },
363
+ {
364
+ "gen": 53,
365
+ "stage": "proof_rejected",
366
+ "delta": -0.0282,
367
+ "on_hub": true
368
+ },
369
+ {
370
+ "gen": 54,
371
+ "stage": "proof_rejected",
372
+ "delta": -0.0521,
373
+ "on_hub": true
374
+ },
375
+ {
376
+ "gen": 55,
377
+ "stage": "proof_rejected",
378
+ "delta": -0.0597,
379
+ "on_hub": true
380
+ },
381
+ {
382
+ "gen": 56,
383
+ "stage": "proof_rejected",
384
+ "delta": -0.0088,
385
+ "on_hub": true
386
+ },
387
+ {
388
+ "gen": 57,
389
+ "stage": "proof_rejected",
390
+ "delta": -0.0119,
391
+ "on_hub": true
392
+ },
393
+ {
394
+ "gen": 58,
395
+ "stage": "proof_rejected",
396
+ "delta": -0.0179,
397
+ "on_hub": true
398
+ },
399
+ {
400
+ "gen": 59,
401
+ "stage": "proof_rejected",
402
+ "delta": -0.0467,
403
+ "on_hub": true
404
+ },
405
+ {
406
+ "gen": 60,
407
+ "stage": "proof_rejected",
408
+ "delta": -0.0221,
409
+ "on_hub": true,
410
+ "wall_s": 13222.7,
411
+ "ts": 1788664868.6066768
412
+ },
413
+ {
414
+ "gen": 61,
415
+ "stage": "proof_rejected",
416
+ "delta": -0.039,
417
+ "on_hub": true,
418
+ "wall_s": 13017.9,
419
+ "ts": 1788681947.8135223
420
+ },
421
+ {
422
+ "gen": 62,
423
+ "stage": "proof_rejected",
424
+ "delta": -0.004,
425
+ "on_hub": true,
426
+ "wall_s": 12911.4,
427
+ "ts": 1788698876.8310523
428
+ },
429
+ {
430
+ "gen": 63,
431
+ "stage": "proof_rejected",
432
+ "delta": -0.0287,
433
+ "on_hub": true,
434
+ "wall_s": 12853.0,
435
+ "ts": 1788715772.9293563
436
+ },
437
+ {
438
+ "gen": 64,
439
+ "stage": "proof_rejected",
440
+ "delta": -0.0056,
441
+ "on_hub": true,
442
+ "wall_s": 12748.3,
443
+ "ts": 1788732530.685455
444
+ },
445
+ {
446
+ "gen": 65,
447
+ "stage": "proof_rejected",
448
+ "delta": -0.0116,
449
+ "on_hub": true,
450
+ "wall_s": 13158.6,
451
+ "ts": 1788749653.5511165
452
+ },
453
+ {
454
+ "gen": 66,
455
+ "stage": "proof_rejected",
456
+ "delta": -0.0389,
457
+ "on_hub": true,
458
+ "wall_s": 13186.1,
459
+ "ts": 1788766900.1557107
460
+ },
461
+ {
462
+ "gen": 67,
463
+ "stage": "proof_rejected",
464
+ "delta": -0.0464,
465
+ "on_hub": true,
466
+ "wall_s": 12932.5,
467
+ "ts": 1788783880.4888427
468
+ },
469
+ {
470
+ "gen": 68,
471
+ "stage": "proof_rejected",
472
+ "delta": -0.0757,
473
+ "on_hub": true,
474
+ "wall_s": 12993.2,
475
+ "ts": 1788800856.9269776
476
+ },
477
+ {
478
+ "gen": 69,
479
+ "stage": "proof_rejected",
480
+ "delta": -0.0223,
481
+ "on_hub": true,
482
+ "wall_s": 12921.0,
483
+ "ts": 1788817718.523693
484
+ },
485
+ {
486
+ "gen": 70,
487
+ "stage": "proof_rejected",
488
+ "delta": -0.0496,
489
+ "on_hub": true,
490
+ "wall_s": 12976.8,
491
+ "ts": 1788834676.4149165
492
+ },
493
+ {
494
+ "gen": 71,
495
+ "stage": "proof_rejected",
496
+ "delta": -0.0261,
497
+ "on_hub": true,
498
+ "wall_s": 14214.5,
499
+ "ts": 1788858841.0738866
500
+ },
501
+ {
502
+ "gen": 72,
503
+ "stage": "proof_rejected",
504
+ "delta": -0.0243,
505
+ "on_hub": true,
506
+ "wall_s": 13208.0,
507
+ "ts": 1788876053.0536227
508
+ },
509
+ {
510
+ "gen": 73,
511
+ "stage": "proof_rejected",
512
+ "delta": -0.0231,
513
+ "on_hub": true,
514
+ "wall_s": 12846.5,
515
+ "ts": 1788892996.601288
516
+ },
517
+ {
518
+ "gen": 74,
519
+ "stage": "proof_rejected",
520
+ "delta": -0.0584,
521
+ "on_hub": true,
522
+ "wall_s": 14912.9,
523
+ "ts": 1788914629.0363762
524
+ },
525
+ {
526
+ "gen": 75,
527
+ "stage": "train_failed",
528
+ "delta": null,
529
+ "on_hub": false,
530
+ "wall_s": null,
531
+ "ts": 1788984830.2554963
532
+ },
533
+ {
534
+ "gen": 76,
535
+ "stage": "training_detached",
536
+ "delta": null,
537
+ "on_hub": false,
538
+ "wall_s": 0.0,
539
+ "ts": 1788984982.5565372
540
+ },
541
+ {
542
+ "gen": 77,
543
+ "stage": "train_failed",
544
+ "delta": null,
545
+ "on_hub": false,
546
+ "wall_s": 0.0,
547
+ "ts": 1789224925.6955626
548
+ },
549
+ {
550
+ "gen": 78,
551
+ "stage": "cancelled",
552
+ "delta": null,
553
+ "wall_s": 31560.0,
554
+ "ts": 1789544805.8941607
555
+ },
556
+ {
557
+ "gen": 80,
558
+ "stage": "training"
559
+ }
560
+ ],
561
+ "identity": {
562
+ "verdict": "verified",
563
+ "network": "mainnet",
564
+ "verifier": "algorandscout",
565
+ "address": "L24WEG3KK6QDSQGQGXCJIYR46HHDFK5IJ7HOZF3YDDTHTREGYPDWY74KG4",
566
+ "role": "overseer",
567
+ "rekeyed_to": null,
568
+ "as_of_round": 65107830,
569
+ "not_verified": [
570
+ "possession of the private key — the chain shows authority, not custody",
571
+ "off-chain compromise of a key that has not been rekeyed",
572
+ "whether the operator, rather than someone else, holds the key"
573
+ ]
574
+ },
575
+ "tokens": {
576
+ "total": 463038587,
577
+ "by_source": {
578
+ "embedding": 4988936,
579
+ "inference": 5658225,
580
+ "training": 31505068
581
+ },
582
+ "calls_since_seed": 28230
583
+ },
584
+ "dream": {
585
+ "timestamp": "2026-09-13T14:23:23.110440",
586
+ "agents_dreamed": 36,
587
+ "insights": 144,
588
+ "promoted_to_ltm": 213,
589
+ "lunar_phase": "new_moon"
590
+ },
591
+ "machine": {
592
+ "verdict": "NOT_YET_A_GODEL_MACHINE",
593
+ "phase": 3,
594
+ "proof_coverage": 0.0,
595
+ "surrogate_coverage": 0.9318,
596
+ "predicates_proven": 6,
597
+ "blockers": [
598
+ "G2=UNVERIFIABLE",
599
+ "proof_coverage=0%<50%"
600
+ ],
601
+ "predicates": [
602
+ {
603
+ "id": "G1",
604
+ "name": "utility_monotonicity",
605
+ "verdict": "PROVEN-so-far",
606
+ "detail": "recent utility proxy holds at or above the prior window (no sustained regression)."
607
+ },
608
+ {
609
+ "id": "G2",
610
+ "name": "gate_soundness",
611
+ "verdict": "UNVERIFIABLE",
612
+ "detail": "gate soundness cannot be attested here: git does not track part of the self-mod surface (mindx/godel/mindxtrain/corpus.py, mindx/godel/mindxtrain/hf/, mindx/godel/mindxtrain/inft_publish.py, mindx/godel/mindxtrain/learned.py) — those files have no commit provenance to check. This is a statement about the sensor, not about mindX — absence of provenance is not evidence of an ungated change, and this verdict is never a pass. To make G2 answerable, deploy the self-mod surface as a git checkout (or ship a signed source manifest with the deploy) so live source has a certificate of record to be compared against."
613
+ },
614
+ {
615
+ "id": "G3",
616
+ "name": "proof_validity",
617
+ "verdict": "PROVEN-so-far",
618
+ "detail": "the proof checker is sound on its conformance suite and all 0 recorded production certificate(s) re-verify. Proofs check."
619
+ },
620
+ {
621
+ "id": "G4",
622
+ "name": "reflective_reach",
623
+ "verdict": "PROVEN-so-far",
624
+ "detail": "improvement machinery is admitted to the mutable set under the Checkable(K') lock: the lock accepts the current sound checker and refuses a broken one. The machine can rewrite its own machinery — but only into a still-sound checker. (Production machinery rewrites are reflected in proof coverage, G8.)"
625
+ },
626
+ {
627
+ "id": "G5",
628
+ "name": "anti_wireheading",
629
+ "verdict": "PROVEN-so-far",
630
+ "detail": "structural alignment floor holds (a safety regression yields BOTTOM, uncompensable); reward sensors are append-only; U-changes are gated by a reflective-consistency proof. No wireheading path detected."
631
+ },
632
+ {
633
+ "id": "G6",
634
+ "name": "determinism",
635
+ "verdict": "PROVEN-so-far",
636
+ "detail": "utility proxy is exact (Fraction), deterministic, and order-invariant over the scored choice log."
637
+ },
638
+ {
639
+ "id": "G7",
640
+ "name": "checker_totality",
641
+ "verdict": "PROVEN-so-far",
642
+ "detail": "checker passed 8/8 conformance cases and 500 fuzz inputs with 0 crashes; bounded by construction (no recursion, hard budgets)."
643
+ },
644
+ {
645
+ "id": "G8",
646
+ "name": "proof_coverage",
647
+ "verdict": "UNTESTED",
648
+ "detail": "Fraction of recognized beneficial changes carrying a kernel-checked PROOF: 0 proof-gated / 0 worthy changes = 0%. The proof kernel now EXISTS and verifies certificates; coverage grows as the prover gates real changes. Surrogate-gated coverage (Phase-1 stand-in): 93%."
649
+ }
650
+ ]
651
+ },
652
+ "training": {
653
+ "state": "running",
654
+ "generation": 80,
655
+ "stage": "training",
656
+ "progress_line": "train · 82/116 steps · epoch 0.97/2 · 170k tokens · 10h58m elapsed · loss 1.59 · 34 left ~4h00m",
657
+ "started_ts": 1789544887.7920501,
658
+ "updated_ts": 1789585034.1911368,
659
+ "model": "HuggingFaceTB/SmolLM2-135M",
660
+ "cpu_percent": 33,
661
+ "cpu_cores": 2,
662
+ "ram_gb": 7.8,
663
+ "framework_version": "1.0.2"
664
+ },
665
+ "readings_note": "machine, training and the lineage tail from an earlier reading; the page replaces them live"
666
+ }
style.css CHANGED
@@ -1,28 +1,125 @@
1
- body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
 
 
 
 
 
 
 
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
- }
 
 
 
 
 
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
 
 
 
 
 
 
 
28
  }
 
 
1
+ :root {
2
+ --bg: #07090a;
3
+ --panel: #0e1211;
4
+ --panel2: #121816;
5
+ --line: rgba(214, 178, 94, .16);
6
+ --line2: rgba(232, 230, 223, .08);
7
+ --text: #e8e6df;
8
+ --text2: #9ba59f;
9
+ --text3: #6d7771;
10
+ --gold: #d6b25e;
11
+ --green: #52d98a;
12
+ --amber: #e0a53a;
13
+ --red: #d9695a;
14
+ --sans: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
15
+ --mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
16
  }
17
+ * { box-sizing: border-box; }
18
+ html { -webkit-text-size-adjust: 100%; }
19
+ body { margin: 0; background: var(--bg); color: var(--text); font: 16px/1.6 var(--sans); }
20
+ a { color: var(--gold); text-decoration: none; }
21
+ a:hover { text-decoration: underline; }
22
+ code { font-family: var(--mono); font-size: .88em; }
23
+ .wrap { max-width: 1080px; margin: 0 auto; padding: 0 20px; }
24
 
25
+ /* hero */
26
+ .hero { position: relative; overflow: hidden; border-bottom: 1px solid var(--line); min-height: 560px; display: flex; align-items: flex-end; }
27
+ .hero-img { position: absolute; top: 0; right: 0; width: 60%; height: 100%; object-fit: cover; object-position: 30% 50%; opacity: .7; }
28
+ .hero-shade { position: absolute; inset: 0; background: linear-gradient(90deg, var(--bg) 0%, var(--bg) 40%, rgba(7,9,10,.55) 62%, rgba(7,9,10,.1) 100%), linear-gradient(0deg, var(--bg) 0%, rgba(7,9,10,0) 35%); }
29
+ .hero-body { position: relative; padding-top: 72px; padding-bottom: 40px; width: 100%; }
30
+ .eyebrow { font: 500 .75rem/1 var(--mono); letter-spacing: .2em; text-transform: uppercase; color: var(--gold); margin: 0 0 18px; }
31
+ h1 { font-size: clamp(2.6rem, 6vw, 4.2rem); line-height: 1.05; margin: 0 0 20px; font-weight: 600; letter-spacing: -.02em; }
32
+ .lede { max-width: 620px; font-size: 1.12rem; color: var(--text); margin: 0 0 12px; }
33
+ .lede2 { max-width: 620px; color: var(--text2); margin: 0 0 26px; }
34
+ .cta { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 22px; }
35
+ .btn { display: inline-block; padding: 10px 18px; border: 1px solid var(--line); border-radius: 6px; color: var(--text); background: rgba(14,18,17,.7); font-weight: 500; font-size: .95rem; }
36
+ .btn:hover { border-color: var(--gold); text-decoration: none; }
37
+ .btn.primary { background: var(--gold); color: #0b0c0a; border-color: var(--gold); }
38
+ .btn.primary:hover { background: #e4c273; }
39
+ .pills { display: flex; flex-wrap: wrap; gap: 8px; min-height: 28px; }
40
+ .pill { font: .78rem/1 var(--mono); padding: 7px 11px; border-radius: 999px; border: 1px solid var(--line2); background: rgba(14,18,17,.8); color: var(--text2); }
41
+ .pill::before { content: ""; display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--text3); margin-right: 7px; vertical-align: 1px; }
42
+ .pill.ok::before { background: var(--green); }
43
+ .pill.warn::before { background: var(--amber); }
44
+ .pill.bad::before { background: var(--red); }
45
+ .pill.live::before { background: var(--green); animation: pulse 1.8s ease-in-out infinite; }
46
+ @keyframes pulse { 50% { opacity: .3; } }
47
 
48
+ /* sections */
49
+ section { padding: 56px 0 8px; }
50
+ h2 { font-size: 1.5rem; margin: 0 0 18px; font-weight: 600; letter-spacing: -.01em; }
51
+ h3 { font-size: 1.05rem; margin: 0 0 8px; font-weight: 600; }
52
+ h3.sub { margin: 36px 0 10px; }
53
+ h4 { font: 500 .72rem/1 var(--mono); letter-spacing: .16em; text-transform: uppercase; color: var(--text3); margin: 0 0 12px; }
54
+ .head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
55
+ .freshness { font: .75rem var(--mono); color: var(--text3); }
56
+ .freshness.live { color: var(--green); }
57
+ .intro { color: var(--text2); max-width: 760px; margin: -6px 0 20px; }
58
+ .note { color: var(--text2); font-size: .92rem; max-width: 760px; border-left: 2px solid var(--gold); padding: 2px 0 2px 14px; margin: 18px 0 0; }
59
 
60
+ .cards { display: grid; gap: 14px; }
61
+ .cards.four { grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
62
+ .cards.three { grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); }
63
+ .card { background: var(--panel); border: 1px solid var(--line2); border-radius: 10px; padding: 20px; }
64
+ .card p { margin: 0; color: var(--text2); font-size: .94rem; }
65
+ .card em { color: var(--gold); font-style: normal; }
66
+ .door { color: inherit; display: block; transition: border-color .15s, background .15s; }
67
+ .door:hover { border-color: var(--gold); background: var(--panel2); text-decoration: none; }
68
+ .door h3 { font-family: var(--mono); font-size: .98rem; color: var(--text); }
69
+ .kind { display: block; font: .7rem var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--gold); margin-bottom: 10px; }
70
+
71
+ /* vital tiles */
72
+ .tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
73
+ .tile { background: var(--panel); border: 1px solid var(--line2); border-radius: 10px; padding: 18px 20px; min-height: 124px; }
74
+ .tile .k { font: .7rem var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--text3); }
75
+ .tile .v { font: 500 1.45rem/1.25 var(--mono); margin: 8px 0 6px; color: var(--text); overflow-wrap: anywhere; }
76
+ .tile .v.ok { color: var(--green); } .tile .v.warn { color: var(--amber); } .tile .v.bad { color: var(--red); } .tile .v.gold { color: var(--gold); }
77
+ .tile .s { font-size: .84rem; color: var(--text2); overflow-wrap: anywhere; }
78
+
79
+ /* tables */
80
+ .table-scroll { overflow-x: auto; border: 1px solid var(--line2); border-radius: 10px; }
81
+ table { border-collapse: collapse; width: 100%; font-size: .88rem; }
82
+ th, td { text-align: left; padding: 10px 14px; border-bottom: 1px solid var(--line2); vertical-align: top; }
83
+ tr:last-child td { border-bottom: 0; }
84
+ th { font: 500 .7rem var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--text3); background: var(--panel); }
85
+ td { color: var(--text2); }
86
+ td.mono { font-family: var(--mono); color: var(--text); white-space: nowrap; }
87
+ .tag { font: .74rem var(--mono); padding: 2px 8px; border-radius: 4px; white-space: nowrap; border: 1px solid currentColor; }
88
+ .tag.ok { color: var(--green); } .tag.warn { color: var(--amber); } .tag.bad { color: var(--red); } .tag.dim { color: var(--text3); }
89
+ table.predicates td:last-child { min-width: 320px; }
90
+
91
+ /* lineage strip */
92
+ .strip { display: grid; grid-template-columns: repeat(auto-fill, minmax(22px, 1fr)); gap: 4px; margin: 4px 0 12px; }
93
+ .cell { aspect-ratio: 1; border-radius: 3px; position: relative; font: 9px/1 var(--mono); color: rgba(7,9,10,.75); display: flex; align-items: center; justify-content: center; cursor: default; }
94
+ .sq { display: inline-block; width: 11px; height: 11px; border-radius: 2px; margin-right: 6px; vertical-align: -1px; }
95
+ .s-pass { background: var(--green); }
96
+ .s-reject { background: rgba(217,105,90,.55); }
97
+ .s-fail { background: rgba(224,165,58,.55); }
98
+ .s-live { background: var(--gold); animation: pulse 1.8s ease-in-out infinite; }
99
+ .s-none { background: transparent; box-shadow: inset 0 0 0 1px var(--line2); }
100
+ .cell.star { box-shadow: 0 0 0 2px var(--gold); }
101
+ .legend { display: flex; flex-wrap: wrap; gap: 18px; font-size: .82rem; color: var(--text2); margin-bottom: 18px; }
102
+ .now { font: .88rem var(--mono); color: var(--text); background: var(--panel); border: 1px solid var(--line2); border-radius: 8px; padding: 12px 14px; margin: 0 0 14px; overflow-wrap: anywhere; }
103
+ .now:empty { display: none; }
104
+
105
+ pre.code { background: #0a0d0c; border: 1px solid var(--line2); border-radius: 10px; padding: 16px 18px; overflow-x: auto; font: .82rem/1.55 var(--mono); color: #cfd6cf; margin: 0; }
106
+
107
+ .links { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 24px; }
108
+ .links a { display: block; padding: 4px 0; font-size: .95rem; }
109
+ .terminal { color: var(--text2); font-size: .9rem; margin-top: 28px; overflow-wrap: anywhere; }
110
+
111
+ .foot { border-top: 1px solid var(--line2); margin-top: 64px; padding-top: 24px; padding-bottom: 48px; color: var(--text3); font-size: .84rem; }
112
+ .foot p { max-width: 760px; margin: 0 0 8px; }
113
 
114
+ @media (max-width: 640px) {
115
+ .wrap { padding: 0 16px; }
116
+ .hero { min-height: 0; }
117
+ .hero-img { width: 100%; opacity: .35; }
118
+ .hero-body { padding-top: 48px; }
119
+ .hero-shade { background: linear-gradient(0deg, var(--bg) 0%, rgba(7,9,10,.88) 60%, rgba(7,9,10,.6) 100%); }
120
+ section { padding-top: 44px; }
121
+ .strip { grid-template-columns: repeat(auto-fill, minmax(18px, 1fr)); gap: 3px; }
122
+ .cell { font-size: 0; }
123
+ table.predicates td:last-child { min-width: 240px; }
124
  }
125
+ @media (prefers-reduced-motion: reduce) { .pill.live::before, .s-live { animation: none; } }