helixevo 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,27 @@ All notable changes to HelixEvo are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.7.0] - 2026-03-25
8
+
9
+ ### Added
10
+ - New `helixevo proof` command for bounded outcome attribution and explicit proof review across interventions, transfer, topology execution, semantic adoption, and legacy evolution impact
11
+ - New dashboard `Proof` route and `/api/proof` operator control surface for first-class prove-stage review
12
+ - New `~/.helix/proof-reviews.jsonl` ledger for verify / defer / contest decisions on derived proof records
13
+
14
+ ### Changed
15
+ - The dashboard operator loop now routes the Prove stage to `/proof` instead of only the Guide metrics anchor
16
+ - Overview, Co-Evolution, Ontology, Topology, Guide, Commands, and README now surface the new proof layer and the broader prove-stage framing
17
+ - `metrics`, `status`, and `report` now point operators toward `helixevo proof --status` for broader post-action review
18
+
19
+ ## [0.6.1] - 2026-03-24
20
+
21
+ ### Added
22
+ - Shared dashboard operator-flow helpers for loop-stage breadcrumbs, contextual surface handoffs, curated release spotlight content, and guide deep-link integration
23
+
24
+ ### Changed
25
+ - Overview, Projects, Research, Co-Evolution, Ontology, and Topology now expose clearer operator breadcrumbs, adjacent control links, and stronger next-step empty-state onboarding
26
+ - Overview release spotlight is now curated through a dedicated helper so post-release guidance stays easy to update and does not silently drift stale
27
+
7
28
  ## [0.6.0] - 2026-03-24
8
29
 
9
30
  ### Added
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # HelixEvo
2
2
 
3
- Co-evolving skill and project brain for AI agents. HelixEvo captures failures, traces activations, models pressure, routes governed responses, promotes cross-project transfer, reviews structural topology changes, safely executes accepted topology transitions with rollback, and now lets approved ontology concepts become active semantic consumers inside the live control loop.
3
+ Co-evolving skill and project brain for AI agents. HelixEvo captures failures, traces activations, models pressure, routes governed responses, promotes cross-project transfer, reviews structural topology changes, safely executes accepted topology transitions with rollback, lets approved ontology concepts become active semantic consumers inside the live control loop, and now exposes a first-class proof layer for bounded outcome attribution across the brain loop.
4
4
 
5
5
  ## How it works
6
6
 
@@ -81,6 +81,7 @@ helixevo dashboard
81
81
  |---------|-------------|
82
82
  | `helixevo watch` | Always-on learning: auto-capture + auto-evolve |
83
83
  | `helixevo metrics` | Correction rates, skill trends, evolution impact |
84
+ | `helixevo proof` | Outcome attribution and proof review across interventions, transfer, topology, ontology, and evolution |
84
85
  | `helixevo health` | Network health: cohesion, coverage, balance, transfer |
85
86
  | `helixevo init` | Import existing skills + generate skill tests |
86
87
  | `helixevo capture <session>` | Extract failures from a session file |
@@ -120,6 +121,9 @@ helixevo topology --status # Show reviewed topology execution state
120
121
  helixevo topology --prepare <id> # Prepare an accepted topology candidate
121
122
  helixevo topology --apply <id> # Apply a safe prepared topology plan
122
123
  helixevo topology --rollback <id> # Roll back an applied topology plan
124
+ helixevo proof --status # Review proof state across the live loop
125
+ helixevo proof --review <id> --decision verify
126
+ # Verify a proof record after operator review
123
127
  ```
124
128
 
125
129
  ### Research options
@@ -151,6 +155,7 @@ All data is stored in `~/.helix/`:
151
155
  ├── topology-apply-plans.json # Prepared reviewed topology plans
152
156
  ├── topology-executions.jsonl # Prepared/applied/rolled-back execution ledger
153
157
  ├── topology-artifacts.jsonl # Evidence artifacts for reviewed structural execution
158
+ ├── proof-reviews.jsonl # Operator verify/defer/contest ledger for derived proof records
154
159
  ├── evolution-artifacts.jsonl # Evolution + ontology-review evidence artifacts
155
160
  ├── ontology/
156
161
  │ ├── kernel.json # Materialized ontology kernel snapshot
@@ -184,11 +189,12 @@ helixevo dashboard --port 3900
184
189
  ```
185
190
 
186
191
  **Tabs:**
187
- - **Overview** — Premium control cockpit with frontier signals, brain foundation, semantic backbone, ontology adoption visibility, pressure counts, topology review visibility, and prepared/applied structural state
192
+ - **Overview** — Premium control cockpit with frontier signals, brain foundation, semantic backbone, ontology adoption visibility, proof review visibility, pressure counts, topology review visibility, and prepared/applied structural state
188
193
  - **Skill Network** — Interactive graph, premium inspector, co-evolution routing signals, and topology review/execution handoff links
189
194
  - **Co-Evolution** — Operator cockpit for routed pressure response, governance mode visibility, promotion queues, transfer evidence, semantic route influence, and topology handoff
190
195
  - **Ontology** — Semantic control surface for kernel visibility, frontier concept review, approved ontology extensions, adoption coverage, deprecation risk, and native ontology change events
191
196
  - **Topology** — Governance steering plus a persistent operator pipeline for review → prepare → apply → rollback across merge / split / promote / rewire / consolidate candidates
197
+ - **Proof** — Outcome-attribution and proof-review cockpit for bounded effectiveness review across interventions, transfer, topology execution, semantic adoption, and evolution impact
192
198
  - **Projects** — Project intake studio, live project analysis, gap routing, per-project pressure hotspots, and promotion feeders
193
199
  - **Evolution** — Timeline of evolution runs with judge scores, artifact provenance, and activation-aware context
194
200
  - **Research** — Knowledge buffer plus a live “why research now” handoff from current pressure, governed routing, and recurring gaps
@@ -235,6 +241,7 @@ Failures → Cluster → Propose → Replay → Multi-Judge → Regression → C
235
241
  - **Governance steering** lets the operator pin or release the active adaptation mode rather than relying only on derived routing.
236
242
  - **Topology review** persists merge / split / promote / rewire / consolidate candidates so manual review is a real workflow.
237
243
  - **Reviewed topology execution** turns accepted safe candidates into prepared plans, snapshot-backed applies, and rollbackable structural transitions.
244
+ - **Proof control** turns bounded outcome attribution into an explicit operator layer where interventions, transfer, topology execution, semantic adoption, and evolution impact can be verified, deferred, or contested.
238
245
  - **Evolution artifacts** preserve proposal-level evidence so the dashboard can show what changed, why, and with what provenance.
239
246
 
240
247
  **Three-layer hierarchy:**
@@ -0,0 +1,71 @@
1
+ import { NextResponse } from 'next/server'
2
+ import { spawn } from 'child_process'
3
+ import { existsSync } from 'fs'
4
+ import { join } from 'path'
5
+ import { loadProofDashboardSummary } from '@/lib/proof'
6
+ import type { ProofReviewDecisionStatus } from '@/lib/proof'
7
+
8
+ export const dynamic = 'force-dynamic'
9
+
10
+ function resolveProofRunner(): { cmd: string; argsPrefix: string[] } {
11
+ const candidates = [
12
+ join(process.cwd(), '..', 'dist', 'cli.js'),
13
+ join(process.cwd(), 'dist', 'cli.js'),
14
+ ]
15
+
16
+ for (const candidate of candidates) {
17
+ if (existsSync(candidate)) return { cmd: process.execPath, argsPrefix: [candidate] }
18
+ }
19
+
20
+ return { cmd: 'helixevo', argsPrefix: [] }
21
+ }
22
+
23
+ function runProofCommand(args: string[]): Promise<{ success: boolean; output: string }> {
24
+ return new Promise((resolve) => {
25
+ const runner = resolveProofRunner()
26
+ const child = spawn(runner.cmd, [...runner.argsPrefix, 'proof', ...args], {
27
+ env: { ...process.env },
28
+ stdio: ['ignore', 'pipe', 'pipe'],
29
+ })
30
+
31
+ let output = ''
32
+ child.stdout?.on('data', (chunk: Buffer) => { output += chunk.toString() })
33
+ child.stderr?.on('data', (chunk: Buffer) => { output += chunk.toString() })
34
+ child.on('close', (code) => resolve({ success: code === 0, output }))
35
+ child.on('error', (err) => resolve({ success: false, output: `Error: ${err.message}` }))
36
+ })
37
+ }
38
+
39
+ export async function GET() {
40
+ return NextResponse.json(loadProofDashboardSummary())
41
+ }
42
+
43
+ export async function POST(request: Request) {
44
+ const body = await request.json() as {
45
+ action?: 'review'
46
+ recordId?: string
47
+ decision?: ProofReviewDecisionStatus
48
+ rationale?: string
49
+ }
50
+
51
+ if (body.action !== 'review') {
52
+ return NextResponse.json({ success: false, error: 'action must be review' }, { status: 400 })
53
+ }
54
+ if (!body.recordId || !body.decision) {
55
+ return NextResponse.json({ success: false, error: 'recordId and decision are required' }, { status: 400 })
56
+ }
57
+
58
+ const args = ['--review', body.recordId, '--decision', body.decision]
59
+ if (body.rationale?.trim()) args.push('--rationale', body.rationale.trim())
60
+
61
+ const result = await runProofCommand(args)
62
+ if (!result.success) {
63
+ return NextResponse.json({ success: false, error: result.output || 'Proof command failed' }, { status: 500 })
64
+ }
65
+
66
+ return NextResponse.json({
67
+ success: true,
68
+ output: result.output,
69
+ dashboard: loadProofDashboardSummary(),
70
+ })
71
+ }
@@ -7,6 +7,7 @@ const ALLOWED_COMMANDS: Record<string, { cmd: string; args: string[]; timeout: n
7
7
  'status': { cmd: 'helixevo', args: ['status'], timeout: 15000 },
8
8
  'health': { cmd: 'helixevo', args: ['health', '--verbose'], timeout: 120000 },
9
9
  'metrics': { cmd: 'helixevo', args: ['metrics', '--verbose'], timeout: 15000 },
10
+ 'proof': { cmd: 'helixevo', args: ['proof', '--verbose'], timeout: 20000 },
10
11
  'evolve': { cmd: 'helixevo', args: ['evolve', '--verbose'], timeout: 300000 },
11
12
  'evolve-dry': { cmd: 'helixevo', args: ['evolve', '--dry-run', '--verbose'], timeout: 300000 },
12
13
  'generalize': { cmd: 'helixevo', args: ['generalize', '--verbose'], timeout: 300000 },
@@ -6,6 +6,10 @@ import { ConsolePanel } from '@/components/console-panel'
6
6
  import { MetricCard } from '@/components/metric-card'
7
7
  import { PageHero } from '@/components/page-hero'
8
8
  import { SectionFrame } from '@/components/section-frame'
9
+ import { OperatorLoopTrail } from '@/components/operator-loop-trail'
10
+ import { SurfaceJumpLinks } from '@/components/surface-jump-links'
11
+ import { NextStepEmptyState } from '@/components/next-step-empty-state'
12
+ import type { ProofDashboardSummary } from '@/lib/proof'
9
13
 
10
14
  type RunState = 'idle' | 'running' | 'success' | 'error' | 'stopped'
11
15
  type CommandName = 'evolve' | 'research' | 'generalize'
@@ -124,6 +128,7 @@ interface Props {
124
128
  }
125
129
  }
126
130
  }
131
+ proof: ProofDashboardSummary
127
132
  }
128
133
 
129
134
  function consoleTone(state: RunState): 'neutral' | 'green' | 'red' | 'yellow' {
@@ -166,7 +171,7 @@ function formatMode(mode: Summary['governance']['activeMode']) {
166
171
  return mode.split('-').join(' ')
167
172
  }
168
173
 
169
- export default function CoEvolutionClient({ summary, ontology }: Props) {
174
+ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
170
175
  const [runState, setRunState] = useState<RunState>('idle')
171
176
  const [activeCommand, setActiveCommand] = useState<CommandName | null>(null)
172
177
  const [output, setOutput] = useState('')
@@ -269,6 +274,7 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
269
274
  { label: `${summary.topologyReviews.open} topology reviews`, tone: summary.topologyReviews.open > 0 ? 'yellow' : 'green' },
270
275
  { label: `${ontology.ontologyLoop.frontier} ontology frontier`, tone: ontology.ontologyLoop.reviewOpen > 0 ? 'blue' : 'neutral' },
271
276
  { label: `${ontology.ontologyLoop.adoption.activeConcepts} active concepts`, tone: ontology.ontologyLoop.adoption.activeConcepts > 0 ? 'green' : 'neutral' },
277
+ { label: `${proof.summary.reviewOpen} proof review`, tone: proof.summary.reviewOpen > 0 ? 'yellow' : proof.summary.effective > 0 ? 'green' : 'neutral' },
272
278
  { label: `${summary.recentTransfers.length} recent transfers`, tone: summary.recentTransfers.length > 0 ? 'green' : 'neutral' },
273
279
  { label: formatMode(summary.governance.activeMode), tone: toneForMode(summary.governance.activeMode) },
274
280
  ]}
@@ -281,19 +287,23 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
281
287
  <div style={{ marginTop: 8, display: 'flex', gap: 6, flexWrap: 'wrap' }}>
282
288
  <span className="badge badge-gray">source: {summary.governance.source}</span>
283
289
  <span className="badge badge-gray">review threshold {(summary.governance.profile.reviewThreshold * 100).toFixed(0)}%</span>
290
+ <Link href="/proof" className="badge badge-gray" style={{ textDecoration: 'none' }}>open proof</Link>
284
291
  </div>
285
292
  </div>
286
- <div style={{ display: 'flex', gap: 10, flexWrap: 'wrap', justifyContent: 'flex-end' }}>
287
- <button onClick={() => handleRun('research')} disabled={runState === 'running'} className="badge badge-blue" style={{ border: 'none', cursor: 'pointer' }}>Run research</button>
288
- <button onClick={() => handleRun('evolve')} disabled={runState === 'running'} className="badge badge-green" style={{ border: 'none', cursor: 'pointer' }}>Run evolve</button>
289
- <button onClick={() => handleRun('generalize')} disabled={runState === 'running'} className="badge badge-purple" style={{ border: 'none', cursor: 'pointer' }}>Run generalize</button>
290
- <Link href="/ontology" className="badge badge-gray">Open ontology</Link>
291
- <Link href="/topology" className="badge badge-gray">Open topology</Link>
293
+ <div style={{ display: 'grid', gap: 10 }}>
294
+ <div style={{ display: 'flex', gap: 10, flexWrap: 'wrap', justifyContent: 'flex-end' }}>
295
+ <button onClick={() => handleRun('research')} disabled={runState === 'running'} className="badge badge-blue" style={{ border: 'none', cursor: 'pointer' }}>Run research</button>
296
+ <button onClick={() => handleRun('evolve')} disabled={runState === 'running'} className="badge badge-green" style={{ border: 'none', cursor: 'pointer' }}>Run evolve</button>
297
+ <button onClick={() => handleRun('generalize')} disabled={runState === 'running'} className="badge badge-purple" style={{ border: 'none', cursor: 'pointer' }}>Run generalize</button>
298
+ </div>
299
+ <SurfaceJumpLinks surface="coevolution" variant="compact" title="Response handoffs" />
292
300
  </div>
293
301
  </div>
294
302
  }
295
303
  />
296
304
 
305
+ <OperatorLoopTrail surface="coevolution" />
306
+
297
307
  <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 16 }}>
298
308
  <MetricCard label="Open pressure" value={summary.pressureLifecycle.open} sublabel={`${summary.pressureLifecycle.highPriorityOpen} high-priority waiting for response`} tone={summary.pressureLifecycle.open > 0 ? 'yellow' : 'green'} icon="!" />
299
309
  <MetricCard label="Promotion-ready motifs" value={summary.pressureMotifs.promotionReady} sublabel={`${summary.pressureMotifs.total} recurring motifs tracked`} tone="purple" icon="⇄" />
@@ -301,6 +311,7 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
301
311
  <MetricCard label="Prepared topology" value={summary.topologyExecution.prepared} sublabel={`${summary.topologyExecution.applied} applied • ${summary.topologyExecution.rolledBack} rolled back`} tone={summary.topologyExecution.prepared > 0 ? 'blue' : summary.topologyExecution.applied > 0 ? 'green' : 'neutral'} icon="↑" />
302
312
  <MetricCard label="Active semantics" value={ontology.ontologyLoop.adoption.activeConcepts} sublabel={`${ontology.ontologyLoop.adoption.totalBindings} bindings • ${ontology.ontologyLoop.adoption.routesInfluenced} influenced routes`} tone={ontology.ontologyLoop.adoption.activeConcepts > 0 ? 'green' : 'neutral'} icon="◎" />
303
313
  <MetricCard label="Recorded interventions" value={summary.pressureInterventions.total} sublabel={`${summary.pressureInterventions.completed} completed • ${summary.pressureInterventions.dryRun} dry-run`} tone="blue" icon="↺" />
314
+ <MetricCard label="Proof review" value={proof.summary.reviewOpen} sublabel={`${proof.summary.effective} effective • ${proof.summary.regressed} regressed`} tone={proof.summary.reviewOpen > 0 ? 'yellow' : proof.summary.effective > 0 ? 'green' : 'neutral'} icon="◇" />
304
315
  <MetricCard label="Realized transfers" value={summary.recentTransfers.filter((event) => event.status === 'realized').length} sublabel={`${summary.pressureMotifs.addressed} motifs now addressed`} tone="green" icon="↑" />
305
316
  </div>
306
317
 
@@ -403,10 +414,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
403
414
  </div>
404
415
  </div>
405
416
  )) : (
406
- <div className="empty-state" style={{ padding: 24 }}>
407
- <div className="empty-state-title">No promotion-ready motifs yet</div>
408
- <div className="empty-state-desc">Recurring cross-project demand will appear here once the same pressure region repeats often enough to justify generalization.</div>
409
- </div>
417
+ <NextStepEmptyState
418
+ title="No promotion-ready motifs yet"
419
+ description="Recurring cross-project demand will appear here once the same pressure region repeats often enough to justify generalization instead of one-off local response."
420
+ command="helixevo project-setup <path>"
421
+ pageLink={{ label: 'Open Projects', href: '/projects', tone: 'blue' }}
422
+ guideLink={{ label: 'Guide · Adaptation Loop', anchor: 'loop', tone: 'purple' }}
423
+ />
410
424
  )}
411
425
  </div>
412
426
  </SectionFrame>
@@ -430,10 +444,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
430
444
  <div className="metric-card-sublabel">{lane.resolving} resolving • {lane.exploratory} exploratory • {lane.none} non-resolving</div>
431
445
  </div>
432
446
  )) : (
433
- <div className="empty-state" style={{ gridColumn: '1 / -1', padding: 24 }}>
434
- <div className="empty-state-title">No intervention records yet</div>
435
- <div className="empty-state-desc">Run research, evolve, or generalize to start populating the governed response ledger.</div>
436
- </div>
447
+ <NextStepEmptyState
448
+ title="No intervention records yet"
449
+ description="The governed response ledger will start populating once pressure is routed into live research, evolve, or generalize work."
450
+ command="helixevo evolve"
451
+ pageLink={{ label: 'Open Research', href: '/research', tone: 'blue' }}
452
+ guideLink={{ label: 'Guide · Surface Map', anchor: 'surfaces', tone: 'purple' }}
453
+ />
437
454
  )}
438
455
  </div>
439
456
  </SectionFrame>
@@ -472,10 +489,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
472
489
  </div>
473
490
  </div>
474
491
  )) : (
475
- <div className="empty-state" style={{ padding: 24 }}>
476
- <div className="empty-state-title">No project response hotspots yet</div>
477
- <div className="empty-state-desc">Project-linked pressure will appear here once failures and project analysis produce current demand.</div>
478
- </div>
492
+ <NextStepEmptyState
493
+ title="No project response hotspots yet"
494
+ description="Project-linked pressure will appear here once failures and project analysis produce current demand for the response loop to act on."
495
+ command="helixevo project-setup <path>"
496
+ pageLink={{ label: 'Open Projects', href: '/projects', tone: 'blue' }}
497
+ guideLink={{ label: 'Guide · Quick Start', anchor: 'quickstart', tone: 'purple' }}
498
+ />
479
499
  )}
480
500
  </div>
481
501
  </SectionFrame>
@@ -501,10 +521,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
501
521
  </div>
502
522
  </div>
503
523
  )) : (
504
- <div className="empty-state" style={{ padding: 24 }}>
505
- <div className="empty-state-title">No transfer evidence yet</div>
506
- <div className="empty-state-desc">Once recurring pressure is promoted into reusable generalized skill knowledge, realized transfer evidence will appear here.</div>
507
- </div>
524
+ <NextStepEmptyState
525
+ title="No transfer evidence yet"
526
+ description="Transfer evidence appears after recurring pressure is promoted into reusable generalized knowledge rather than staying trapped in local fixes."
527
+ command="helixevo generalize"
528
+ pageLink={{ label: 'Open Ontology', href: '/ontology', tone: 'green' }}
529
+ guideLink={{ label: 'Guide · Semantic Control', anchor: 'semanticcontrol', tone: 'purple' }}
530
+ />
508
531
  )}
509
532
  </div>
510
533
  </SectionFrame>
@@ -548,10 +571,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
548
571
  </div>
549
572
  </div>
550
573
  )) : (
551
- <div className="empty-state" style={{ padding: 24 }}>
552
- <div className="empty-state-title">No open pressure backlog</div>
553
- <div className="empty-state-desc">Once pressure enters the system, open and in-progress items will be queued here with governed routing recommendations.</div>
554
- </div>
574
+ <NextStepEmptyState
575
+ title="No open pressure backlog"
576
+ description="Open and in-progress pressure will queue here once HelixEvo is observing real demand from projects, failures, or recurring motifs."
577
+ command="helixevo watch --project <name>"
578
+ pageLink={{ label: 'Open Projects', href: '/projects', tone: 'blue' }}
579
+ guideLink={{ label: 'Guide · Adaptation Loop', anchor: 'loop', tone: 'purple' }}
580
+ />
555
581
  )}
556
582
  </div>
557
583
  </SectionFrame>
@@ -578,10 +604,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
578
604
  </div>
579
605
  </div>
580
606
  )) : (
581
- <div className="empty-state" style={{ padding: 24 }}>
582
- <div className="empty-state-title">No response records yet</div>
583
- <div className="empty-state-desc">Command-level intervention records will appear here once the response loop starts operating.</div>
584
- </div>
607
+ <NextStepEmptyState
608
+ title="No response records yet"
609
+ description="Command-level intervention records will appear here once the response loop starts operating across research, evolve, generalize, or manual review."
610
+ command="helixevo research"
611
+ pageLink={{ label: 'Open Ontology', href: '/ontology', tone: 'green' }}
612
+ guideLink={{ label: 'Guide · Surface Map', anchor: 'surfaces', tone: 'purple' }}
613
+ />
585
614
  )}
586
615
  </div>
587
616
  </SectionFrame>
@@ -1,4 +1,5 @@
1
1
  import { loadCoEvolutionSummary, loadOntologySummary } from '@/lib/data'
2
+ import { loadProofDashboardSummary } from '@/lib/proof'
2
3
  import CoEvolutionClient from './client'
3
4
 
4
5
  export const dynamic = 'force-dynamic'
@@ -6,5 +7,6 @@ export const dynamic = 'force-dynamic'
6
7
  export default function CoEvolutionPage() {
7
8
  const summary = loadCoEvolutionSummary()
8
9
  const ontology = loadOntologySummary()
9
- return <CoEvolutionClient summary={summary} ontology={ontology} />
10
+ const proof = loadProofDashboardSummary()
11
+ return <CoEvolutionClient summary={summary} ontology={ontology} proof={proof} />
10
12
  }
@@ -212,7 +212,7 @@ const COMMANDS: CommandInfo[] = [
212
212
  },
213
213
  {
214
214
  name: 'metrics',
215
- description: 'Show correction rates, skill improvement trends, and evolution impact over time. Helps you understand how your skills are improving and where attention is needed.',
215
+ description: 'Show correction rates, skill improvement trends, and legacy evolution impact over time. Metrics remains the quantitative prove surface, while the newer proof layer now expands outcome review across interventions, topology, transfer, and semantic adoption.',
216
216
  usage: 'helixevo metrics [options]',
217
217
  examples: [
218
218
  { cmd: 'helixevo metrics', desc: 'Show summary metrics' },
@@ -225,6 +225,27 @@ const COMMANDS: CommandInfo[] = [
225
225
  needsLLM: false,
226
226
  runnable: { command: 'metrics', label: 'Show Metrics', icon: 'M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z', color: 'var(--text-secondary)' },
227
227
  },
228
+ {
229
+ name: 'proof',
230
+ description: 'Review bounded outcome attribution across interventions, transfer, topology execution, semantic adoption, and legacy evolution impact. Proof is where the newer brain loop becomes operator-reviewable instead of relying only on passive heuristics.',
231
+ usage: 'helixevo proof [options]',
232
+ examples: [
233
+ { cmd: 'helixevo proof --status', desc: 'Show proof summary plus the current open review queue' },
234
+ { cmd: 'helixevo proof --status --verbose', desc: 'Show detailed proof records, reasons, and next actions' },
235
+ { cmd: 'helixevo proof --review <recordId> --decision verify', desc: 'Verify a derived proof record after operator review' },
236
+ ],
237
+ options: [
238
+ { flag: '--status', desc: 'Show proof summary and open review state' },
239
+ { flag: '--review <recordId>', desc: 'Review a derived proof record' },
240
+ { flag: '--decision <verify|defer|contest>', desc: 'Decision for --review' },
241
+ { flag: '--rationale <text>', desc: 'Optional rationale for the proof review decision' },
242
+ { flag: '--verbose', desc: 'Show detailed proof records and derived reasons' },
243
+ ],
244
+ category: 'analysis',
245
+ needsLLM: false,
246
+ runnable: { command: 'proof', label: 'Open Proof State', icon: 'M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z', color: 'var(--blue)' },
247
+ note: 'Proof stays bounded and reviewable. It does not claim strong causality when the available evidence is only partial or still measuring.',
248
+ },
228
249
  {
229
250
  name: 'status',
230
251
  description: 'Quick overview of system state: total skills, frontier size, failure count, skill tests, and network health. Like a health check but without LLM analysis.',
@@ -313,7 +334,7 @@ const WORKFLOW = [
313
334
  { label: 'evolve', desc: 'Improve skills', tone: 'green' as const },
314
335
  { label: 'generalize', desc: 'Abstract patterns', tone: 'purple' as const },
315
336
  { label: 'graph --rebuild', desc: 'Map relationships', tone: 'yellow' as const },
316
- { label: 'health', desc: 'Assess quality', tone: 'blue' as const },
337
+ { label: 'proof --status', desc: 'Review outcomes', tone: 'blue' as const },
317
338
  ]
318
339
 
319
340
  const WORKFLOW_RECIPES = [
@@ -341,6 +362,12 @@ const WORKFLOW_RECIPES = [
341
362
  summary: 'Refresh structural review candidates, prepare accepted safe plans, apply them, and keep rollback available.',
342
363
  steps: ['helixevo graph --optimize', 'helixevo topology --prepare <candidateId>', 'helixevo topology --apply <planId>'],
343
364
  },
365
+ {
366
+ title: 'Proof review loop',
367
+ tone: 'blue' as const,
368
+ summary: 'Inspect outcome attribution across the live loop, then verify, defer, or contest proof records explicitly.',
369
+ steps: ['helixevo proof --status', 'helixevo proof --status --verbose', 'helixevo proof --review <recordId> --decision verify'],
370
+ },
344
371
  ]
345
372
 
346
373
  const CATEGORIES: Array<{
@@ -389,8 +416,8 @@ export default function CommandsPage() {
389
416
  actions={
390
417
  <div className="hero-note-card">
391
418
  <div className="hero-note-label">Recommended operating loop</div>
392
- <div className="hero-note-title">Project Setup → Watch → Co-Evolution → Ontology → Topology</div>
393
- <div className="hero-note-copy">Use the Commands page as the practical bridge between HelixEvo’s CLI, semantic control loop, and the premium dashboard cockpit.</div>
419
+ <div className="hero-note-title">Project Setup → Watch → Co-Evolution → Ontology → Topology → Proof</div>
420
+ <div className="hero-note-copy">Use the Commands page as the practical bridge between HelixEvo’s CLI, semantic control loop, structural control, and the new prove surface.</div>
394
421
  </div>
395
422
  }
396
423
  />
@@ -433,7 +460,7 @@ export default function CommandsPage() {
433
460
  <SectionFrame
434
461
  eyebrow="Operator recipes"
435
462
  title="Fast command loops for the live product"
436
- description="These compact sequences make the M9 dashboard and CLI feel like one coordinated operating surface instead of separate references."
463
+ description="These compact sequences make the current dashboard, CLI, and prove surface feel like one coordinated operating system instead of separate references."
437
464
  tone="blue"
438
465
  >
439
466
  <div className="grid-2" style={{ gap: 14 }}>
@@ -18,7 +18,7 @@ const TOC = [
18
18
  { id: 'judges', label: 'Multi-Judge System', icon: '⚖' },
19
19
  { id: 'networkhealth', label: 'Network Health', icon: '♺' },
20
20
  { id: 'autogen', label: 'Auto-Generalization', icon: '↑' },
21
- { id: 'metrics', label: 'Closed-Loop Metrics', icon: '📊' },
21
+ { id: 'metrics', label: 'Proof & Metrics', icon: '📊' },
22
22
  { id: 'frontier', label: 'Pareto Frontier', icon: '▲' },
23
23
  { id: 'regression', label: 'Regression Testing', icon: '✓' },
24
24
  { id: 'research', label: 'Proactive Research', icon: '◎' },
@@ -286,13 +286,13 @@ export default function GuidePage() {
286
286
  <div className="grid-3" style={{ marginTop: 24, marginBottom: 24 }}>
287
287
  <div className="card" style={{ padding: '18px 18px 16px' }}>
288
288
  <div style={{ fontSize: 10, fontWeight: 700, color: 'var(--text-muted)', textTransform: 'uppercase', letterSpacing: 0.7, marginBottom: 8 }}>Start operating</div>
289
- <div style={{ fontSize: 15, fontWeight: 700, color: 'var(--text)', marginBottom: 6 }}>Project setup → Watch / Capture → Co-Evolution → Topology</div>
290
- <div style={{ fontSize: 12.5, color: 'var(--text-dim)', lineHeight: 1.6 }}>This is the shortest path to seeing pressure, governed response, and structural control in the live product.</div>
289
+ <div style={{ fontSize: 15, fontWeight: 700, color: 'var(--text)', marginBottom: 6 }}>Project setup → Watch / Capture → Co-Evolution → Topology → Proof</div>
290
+ <div style={{ fontSize: 12.5, color: 'var(--text-dim)', lineHeight: 1.6 }}>This is the shortest path to seeing pressure, governed response, structural control, and the new bounded prove stage in the live product.</div>
291
291
  </div>
292
292
  <div className="card" style={{ padding: '18px 18px 16px' }}>
293
293
  <div style={{ fontSize: 10, fontWeight: 700, color: 'var(--text-muted)', textTransform: 'uppercase', letterSpacing: 0.7, marginBottom: 8 }}>Understand the brain</div>
294
294
  <div style={{ fontSize: 15, fontWeight: 700, color: 'var(--text)', marginBottom: 6 }}>Read the stack, then trace one signal through the loop</div>
295
- <div style={{ fontSize: 12.5, color: 'var(--text-dim)', lineHeight: 1.6 }}>The current system is best understood as layered cognition: semantic kernel → observation → pressure → response → transfer → governance → topology.</div>
295
+ <div style={{ fontSize: 12.5, color: 'var(--text-dim)', lineHeight: 1.6 }}>The current system is best understood as layered cognition: semantic kernel → observation → pressure → response → transfer → governance → topology → proof.</div>
296
296
  </div>
297
297
  <div className="card" style={{ padding: '18px 18px 16px' }}>
298
298
  <div style={{ fontSize: 10, fontWeight: 700, color: 'var(--text-muted)', textTransform: 'uppercase', letterSpacing: 0.7, marginBottom: 8 }}>Fast jumps</div>
@@ -319,11 +319,11 @@ export default function GuidePage() {
319
319
  <p className="guide-text">
320
320
  HelixEvo still captures failures, proposes skill mutations, evaluates them with judges, and deploys improvements carefully.
321
321
  What changed over the recent milestone arc is that these mutation mechanics now live inside a larger architecture that senses pressure,
322
- routes intervention under governance, records transfer evidence, reviews topology, and can execute a safe reviewed subset of structural change with rollback.
322
+ routes intervention under governance, records transfer evidence, reviews topology, executes a safe reviewed subset of structural change with rollback, and now exposes bounded proof review over what appears to have worked.
323
323
  </p>
324
324
  <p className="guide-text">
325
325
  That means the current product should not be explained as only “capture → evolve → validate.” The more truthful frame is:
326
- <strong> semantic kernel → observation → pressure → response → transfer → governance → topology review → topology execution → operator surfaces.</strong>
326
+ <strong> semantic kernel → observation → pressure → response → transfer → governance → topology review → topology execution → proof → operator surfaces.</strong>
327
327
  </p>
328
328
  <div className="guide-directions">
329
329
  <div className="guide-direction">
@@ -488,9 +488,14 @@ helixevo topology --status`}</Code>
488
488
  },
489
489
  {
490
490
  cmd: 'helixevo metrics',
491
- desc: 'Measure whether evolution actually reduces corrections over time. This is the primary proof command.',
491
+ desc: 'Measure correction-rate and evolution-impact trends over time. This remains the quantitative metrics surface inside the broader prove stage.',
492
492
  flags: ['--verbose'],
493
493
  },
494
+ {
495
+ cmd: 'helixevo proof',
496
+ desc: 'Review bounded outcome attribution across interventions, transfer, topology execution, semantic adoption, and evolution impact; then verify, defer, or contest proof records explicitly.',
497
+ flags: ['--status', '--review <recordId>', '--decision <verify|defer|contest>', '--rationale <text>', '--verbose'],
498
+ },
494
499
  {
495
500
  cmd: 'helixevo dashboard',
496
501
  desc: 'Open the premium operator dashboard. It prefers localhost:3847, reuses a known managed dashboard, falls forward if needed, and can auto-update before launch.',
@@ -522,7 +527,7 @@ helixevo topology --status`}</Code>
522
527
  <Callout type="tip">
523
528
  A good mental grouping is: <strong>observe</strong> with <code>project-setup</code>, <code>watch</code>, and <code>capture</code>;
524
529
  <strong>respond</strong> with <code>research</code>, <code>specialize</code>, <code>evolve</code>, and <code>generalize</code>;
525
- <strong>restructure</strong> with <code>graph --optimize</code> plus <code>topology</code>; and <strong>prove</strong> with <code>metrics</code>, <code>health</code>, and <code>report</code>.
530
+ <strong>restructure</strong> with <code>graph --optimize</code> plus <code>topology</code>; and <strong>prove</strong> with <code>proof</code> first, supported by <code>metrics</code>, <code>health</code>, and <code>report</code>.
526
531
  </Callout>
527
532
  </Section>
528
533
 
@@ -729,11 +734,12 @@ helixevo ontology --deprecate <conceptId>`}</Code>
729
734
  <Section id="surfaces" title="Dashboard Surface Map" subtitle="Each tab is a different control or observability surface for the same brain.">
730
735
  <div className="grid-2" style={{ gap: 12 }}>
731
736
  {[
732
- ['Overview', 'var(--blue)', 'Top-level cockpit for frontier state, brain foundation, pressure totals, topology review counts, and prepared/applied structural state.'],
737
+ ['Overview', 'var(--blue)', 'Top-level cockpit for frontier state, brain foundation, pressure totals, topology review counts, prepared/applied structural state, and proof review visibility.'],
733
738
  ['Co-Evolution', 'var(--purple)', 'The response cockpit. Use it to inspect routed pressure, governance mode, promotion queue, transfer evidence, and where approved ontology concepts are influencing live route rationale.'],
734
739
  ['Skill Network', 'var(--green)', 'Graph-level understanding: relationships, co-evolution signals, inspector context, and structural handoff links.'],
735
740
  ['Ontology', 'var(--blue)', 'Semantic control surface for kernel visibility, frontier review, approved extensions, semantic adoption coverage, consumer summaries, and ontology change events.'],
736
741
  ['Topology', 'var(--yellow)', 'Governed plasticity surface for review decisions, accepted-ready queue, prepared plans, apply, rollback, and execution history.'],
742
+ ['Proof', 'var(--text-secondary)', 'Outcome-attribution cockpit for bounded review across interventions, transfer, topology execution, semantic adoption, and evolution impact.'],
737
743
  ['Projects', 'var(--blue)', 'Project intake and project-aware pressure surface. Best for capability gaps, activation traces, and promotion feeders.'],
738
744
  ['Research', 'var(--purple)', 'Discovery-oriented view grounded in current pressure and routed recommendations rather than disconnected idea generation.'],
739
745
  ['Evolution', 'var(--green)', 'Proposal-centric evidence view: judge scores, artifact provenance, and iteration history.'],
@@ -746,8 +752,8 @@ helixevo ontology --deprecate <conceptId>`}</Code>
746
752
  ))}
747
753
  </div>
748
754
  <Callout type="tip">
749
- If you are debugging current state, the best sequence is usually: <strong>Overview → Co-Evolution → Ontology → Topology → Skill Network → Projects / Research</strong>.
750
- That path mirrors the stack from summary → routed demand → semantic interpretation → structural review/execution → graph context → project or discovery detail.
755
+ If you are debugging current state, the best sequence is usually: <strong>Overview → Co-Evolution → Ontology → Topology → Proof → Skill Network → Projects / Research</strong>.
756
+ That path mirrors the stack from summary → routed demand → semantic interpretation → structural review/execution → bounded outcome review → graph context → project or discovery detail.
751
757
  </Callout>
752
758
  </Section>
753
759
 
@@ -851,25 +857,32 @@ Project B: "Use FlashList not FlatList" (React Native perf)
851
857
  </Section>
852
858
 
853
859
  {/* ─── Closed-Loop Metrics ─── */}
854
- <Section id="metrics" title="Closed-Loop Metrics" subtitle="Proving that HelixEvo actually makes the agent better with data, not just LLM scores.">
860
+ <Section id="metrics" title="Proof & Closed-Loop Metrics" subtitle="The prove stage is now first-class: metrics remain useful, but proof now unifies bounded outcome review across the newer brain loop.">
855
861
  <p className="guide-text">
856
- The <code>helixevo metrics</code> command answers the most important question: <strong>&ldquo;Is HelixEvo actually
857
- reducing corrections?&rdquo;</strong> It tracks correction rates per skill over time and measures the real
858
- impact of each evolution.
862
+ The <code>helixevo proof</code> command is now the primary operator surface for the <strong>prove</strong> stage. It reviews bounded outcome attribution across interventions,
863
+ transfer, topology execution, semantic adoption, and legacy evolution impact without pretending to know more than the evidence supports.
859
864
  </p>
860
- <Code title="Terminal">{`helixevo metrics --verbose`}</Code>
865
+ <Code title="Terminal">{`helixevo proof --status --verbose
866
+ helixevo metrics --verbose`}</Code>
867
+
868
+ <h3 className="guide-h3">What Proof Adds</h3>
869
+ <ul className="guide-list">
870
+ <li><strong>Unified proof targets:</strong> interventions, realized transfers, topology execution, semantic-adoption effectiveness, and existing evolution impact</li>
871
+ <li><strong>Bounded outcome states:</strong> effective, mixed, regressed, measuring, and insufficient-evidence</li>
872
+ <li><strong>Operator review:</strong> verify, defer, or contest proof records explicitly instead of trusting derived heuristics blindly</li>
873
+ <li><strong>Dedicated dashboard route:</strong> the Prove stage now lands on <code>/proof</code> instead of only the Guide metrics section</li>
874
+ </ul>
861
875
 
862
- <h3 className="guide-h3">What It Tracks</h3>
876
+ <h3 className="guide-h3">What Metrics Still Tracks</h3>
863
877
  <ul className="guide-list">
864
878
  <li><strong>Per-skill correction rates:</strong> 7-day rolling windows showing how often each skill leads to corrections</li>
865
879
  <li><strong>Trend detection:</strong> Each skill is marked as improving (↓), stable (→), or degrading (↑)</li>
866
880
  <li><strong>Evolution impact:</strong> Before/after comparison for each evolution — failures/day in the 7 days before vs. after</li>
867
- <li><strong>Verdict:</strong> &ldquo;X/Y evolutions reduced corrections&rdquo; the bottom line</li>
881
+ <li><strong>Quantitative baseline:</strong> legacy correction reduction remains an important proof input even though it is no longer the whole prove layer</li>
868
882
  </ul>
869
883
 
870
884
  <Callout type="warning">
871
- Metrics need time to accumulate. The system needs at least 7 days of data after an evolution to produce
872
- a reliable before/after comparison. Results shown as &ldquo;Measuring&rdquo; during the first 3 days.
885
+ Proof remains bounded. Recent changes should stay <strong>measuring</strong>, weak evidence should stay <strong>insufficient-evidence</strong>, and semantic-adoption proof should be treated as correlational evidence rather than strong direct causality.
873
886
  </Callout>
874
887
  </Section>
875
888
 
@@ -1359,7 +1372,7 @@ generation: 3
1359
1372
  A transfer event is evidence that reusable knowledge was actually promoted or reused across layers or projects. This is how HelixEvo distinguishes a recommendation from a realized knowledge transfer.
1360
1373
  </FAQItem>
1361
1374
  <FAQItem q="How do I prove HelixEvo's brain is working?">
1362
- Use multiple proof surfaces together: <code>metrics</code> for correction reduction, Co-Evolution for routed interventions and transfer evidence, Topology for reviewed structural execution state, and the verification reports under <code>reports/verification/</code> for milestone-level backtesting.
1375
+ Start with <code>helixevo proof --status</code> or the <code>/proof</code> dashboard route, then use supporting proof surfaces together: <code>metrics</code> for correction reduction, Co-Evolution for routed interventions and transfer evidence, Topology for reviewed structural execution state, and the verification reports under <code>reports/verification/</code> for milestone-level backtesting.
1363
1376
  </FAQItem>
1364
1377
  <FAQItem q="How many failures do I need before evolution works?">
1365
1378
  By default, 5 unresolved failures are required (<code>minFailuresForEvolution</code>) for the standard evolution trigger.