helixevo 0.9.0 → 0.10.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 +11 -0
- package/README.md +8 -1
- package/dashboard/app/api/run/route.ts +1 -0
- package/dashboard/app/coevolution/client.tsx +18 -1
- package/dashboard/app/commands/page.tsx +22 -0
- package/dashboard/app/page.tsx +107 -3
- package/dashboard/app/proof/client.tsx +168 -30
- package/dashboard/app/proof/page.tsx +3 -1
- package/dashboard/lib/data.ts +31 -3
- package/dashboard/lib/proof.ts +386 -15
- package/dashboard/lib/theory.ts +70 -0
- package/dist/cli.js +1937 -127
- package/package.json +2 -2
- package/dashboard/lib/release-spotlight.ts +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,17 @@ All notable changes to HelixEvo are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.0] - 2026-03-26
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- New `helixevo verify-brain` command for contract-backed brain verification across deterministic isolated scenarios plus bounded live smoke checks
|
|
11
|
+
- New persisted theory-conformance artifact family under `~/.helix/theory-conformance/`, including the latest structured result, human-readable reports, and per-run scenario outputs
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- Overview and Proof now surface the latest theory-conformance verdict, scenario totals, and next-action guidance so brain verification is visible in the operator cockpit
|
|
15
|
+
- Commands, runtime execution allowlists, README, and package metadata now describe automatic theory-conformance verification as a first-class product capability
|
|
16
|
+
- Release-grade verification can now rerun bounded theory conformance through `verify-brain --release`, while still truthfully exposing live proof debt and evidence immaturity instead of overstating full theory closure
|
|
17
|
+
|
|
7
18
|
## [0.9.0] - 2026-03-25
|
|
8
19
|
|
|
9
20
|
### 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, 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, turns Proof into a bounded steering input for future control, and now adds automatic theory-conformance verification through contract-backed scenarios plus bounded live smoke checks.
|
|
4
4
|
|
|
5
5
|
## How it works
|
|
6
6
|
|
|
@@ -88,6 +88,7 @@ helixevo dashboard
|
|
|
88
88
|
| `helixevo watch` | Always-on learning: auto-capture + auto-evolve |
|
|
89
89
|
| `helixevo metrics` | Correction rates, skill trends, evolution impact |
|
|
90
90
|
| `helixevo proof` | Outcome attribution, proof review, and steering summaries across interventions, transfer, topology, ontology, and evolution |
|
|
91
|
+
| `helixevo verify-brain` | Automatic theory-conformance runner across deterministic scenarios plus bounded live smoke checks |
|
|
91
92
|
| `helixevo health` | Network health: cohesion, coverage, balance, transfer |
|
|
92
93
|
| `helixevo init` | Import existing skills + generate skill tests |
|
|
93
94
|
| `helixevo capture <session>` | Extract failures from a session file |
|
|
@@ -130,6 +131,8 @@ helixevo topology --rollback <id> # Roll back an applied topology plan
|
|
|
130
131
|
helixevo proof --status # Review proof state across the live loop
|
|
131
132
|
helixevo proof --review <id> --decision verify
|
|
132
133
|
# Verify a proof record after operator review
|
|
134
|
+
helixevo verify-brain --verbose # Run the contract-backed brain verification workflow
|
|
135
|
+
helixevo verify-brain --release # Run stricter release-grade conformance handling
|
|
133
136
|
```
|
|
134
137
|
|
|
135
138
|
### Research options
|
|
@@ -165,6 +168,10 @@ All data is stored in `~/.helix/`:
|
|
|
165
168
|
├── topology-artifacts.jsonl # Evidence artifacts for reviewed structural execution
|
|
166
169
|
├── proof-reviews.jsonl # Operator verify/defer/contest ledger for derived proof records
|
|
167
170
|
├── evolution-artifacts.jsonl # Evolution + ontology-review evidence artifacts
|
|
171
|
+
├── theory-conformance/
|
|
172
|
+
│ ├── latest.json # Latest contract-backed brain verification result
|
|
173
|
+
│ ├── reports/ # Human-readable theory-conformance reports
|
|
174
|
+
│ └── runs/ # Per-run scenario artifacts and structured outputs
|
|
168
175
|
├── ontology/
|
|
169
176
|
│ ├── kernel.json # Materialized ontology kernel snapshot
|
|
170
177
|
│ ├── extensions.json # Approved ontology extensions
|
|
@@ -18,6 +18,7 @@ const ALLOWED_COMMANDS: Record<string, { cmd: string; args: string[]; timeout: n
|
|
|
18
18
|
'graph-optimize': { cmd: 'helixevo', args: ['graph', '--optimize', '--verbose'], timeout: 300000 },
|
|
19
19
|
'research': { cmd: 'helixevo', args: ['research', '--verbose'], timeout: 300000 },
|
|
20
20
|
'research-dry': { cmd: 'helixevo', args: ['research', '--dry-run', '--verbose'], timeout: 300000 },
|
|
21
|
+
'verify-brain': { cmd: 'helixevo', args: ['verify-brain', '--verbose'], timeout: 600000 },
|
|
21
22
|
'report': { cmd: 'helixevo', args: ['report', '--days', '7'], timeout: 30000 },
|
|
22
23
|
}
|
|
23
24
|
|
|
@@ -83,6 +83,8 @@ type Summary = {
|
|
|
83
83
|
proofSummary?: string
|
|
84
84
|
proofReasons?: string[]
|
|
85
85
|
proofLaneKeys?: string[]
|
|
86
|
+
proofClosureState?: 'needs-evidence' | 'needs-review' | 'stalled' | 'settled' | 'trusted-with-debt'
|
|
87
|
+
proofDebtSummary?: string
|
|
86
88
|
}
|
|
87
89
|
semanticConceptIds?: string[]
|
|
88
90
|
}[]
|
|
@@ -113,6 +115,8 @@ type Summary = {
|
|
|
113
115
|
proofSummary?: string
|
|
114
116
|
proofReasons?: string[]
|
|
115
117
|
proofLaneKeys?: string[]
|
|
118
|
+
proofClosureState?: 'needs-evidence' | 'needs-review' | 'stalled' | 'settled' | 'trusted-with-debt'
|
|
119
|
+
proofDebtSummary?: string
|
|
116
120
|
}
|
|
117
121
|
semanticConceptIds?: string[]
|
|
118
122
|
}[]
|
|
@@ -171,6 +175,15 @@ function toneForProofTier(tier: 'trusted' | 'caution' | 'bounded' | 'candidate'
|
|
|
171
175
|
return 'gray'
|
|
172
176
|
}
|
|
173
177
|
|
|
178
|
+
function toneForProofClosureState(state: 'needs-evidence' | 'needs-review' | 'stalled' | 'settled' | 'trusted-with-debt' | undefined) {
|
|
179
|
+
if (state === 'trusted-with-debt') return 'yellow'
|
|
180
|
+
if (state === 'stalled') return 'yellow'
|
|
181
|
+
if (state === 'needs-review') return 'blue'
|
|
182
|
+
if (state === 'needs-evidence') return 'gray'
|
|
183
|
+
if (state === 'settled') return 'green'
|
|
184
|
+
return 'gray'
|
|
185
|
+
}
|
|
186
|
+
|
|
174
187
|
function toneForMode(mode: Summary['governance']['activeMode']): 'blue' | 'green' | 'purple' | 'yellow' | 'neutral' {
|
|
175
188
|
if (mode === 'transfer-focused') return 'purple'
|
|
176
189
|
if (mode === 'project-critical') return 'yellow'
|
|
@@ -329,7 +342,7 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
329
342
|
<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="↑" />
|
|
330
343
|
<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="◎" />
|
|
331
344
|
<MetricCard label="Recorded interventions" value={summary.pressureInterventions.total} sublabel={`${summary.pressureInterventions.completed} completed • ${summary.pressureInterventions.dryRun} dry-run`} tone="blue" icon="↺" />
|
|
332
|
-
<MetricCard label="Proof steering" value={proof.steering.priorityReview} sublabel={`${proof.
|
|
345
|
+
<MetricCard label="Proof steering" value={proof.steering.priorityReview} sublabel={`${proof.summary.needsEvidence} need evidence • ${proof.steering.trustedWithDebtLanes} trusted with debt`} tone={proof.summary.stalled > 0 || proof.steering.trustedWithDebtLanes > 0 ? 'yellow' : proof.steering.cautionLanes > 0 ? 'yellow' : proof.steering.trustedLanes > 0 ? 'green' : proof.summary.reviewOpen > 0 ? 'blue' : 'neutral'} icon="◇" />
|
|
333
346
|
<MetricCard label="Realized transfers" value={summary.recentTransfers.filter((event) => event.status === 'realized').length} sublabel={`${summary.pressureMotifs.addressed} motifs now addressed`} tone="green" icon="↑" />
|
|
334
347
|
</div>
|
|
335
348
|
|
|
@@ -421,6 +434,7 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
421
434
|
<span className="badge badge-purple">recommend {motif.suggestedRoute.route}</span>
|
|
422
435
|
<span className="badge badge-gray">confidence {(motif.suggestedRoute.confidence * 100).toFixed(0)}%</span>
|
|
423
436
|
{motif.suggestedRoute.proofTier ? <span className={`badge badge-${toneForProofTier(motif.suggestedRoute.proofTier)}`}>proof {motif.suggestedRoute.proofTier}</span> : null}
|
|
437
|
+
{motif.suggestedRoute.proofClosureState ? <span className={`badge badge-${toneForProofClosureState(motif.suggestedRoute.proofClosureState)}`}>{motif.suggestedRoute.proofClosureState}</span> : null}
|
|
424
438
|
{motif.suggestedRoute.semanticInfluence && motif.suggestedRoute.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {motif.suggestedRoute.semanticInfluence}</span> : null}
|
|
425
439
|
{(motif.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${motif.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
|
|
426
440
|
{motif.projectIds.slice(0, 3).map((projectId) => <span key={`${motif.id}-${projectId}`} className="badge badge-gray">{projectId}</span>)}
|
|
@@ -430,6 +444,7 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
430
444
|
<div key={`${motif.id}-reason-${index}`} className="signal-text">• {reason}</div>
|
|
431
445
|
))}
|
|
432
446
|
{motif.suggestedRoute.proofSummary ? <div className="signal-text">→ {motif.suggestedRoute.proofSummary}</div> : null}
|
|
447
|
+
{motif.suggestedRoute.proofDebtSummary ? <div className="signal-text">⇢ {motif.suggestedRoute.proofDebtSummary}</div> : null}
|
|
433
448
|
</div>
|
|
434
449
|
</div>
|
|
435
450
|
</div>
|
|
@@ -572,6 +587,7 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
572
587
|
{signal.routeRecommendation ? <span className={`badge badge-${toneForRoute(signal.routeRecommendation.route)}`}>recommend {signal.routeRecommendation.route}</span> : null}
|
|
573
588
|
{signal.routeRecommendation ? <span className="badge badge-gray">{signal.routeRecommendation.scope}</span> : null}
|
|
574
589
|
{signal.routeRecommendation?.proofTier ? <span className={`badge badge-${toneForProofTier(signal.routeRecommendation.proofTier)}`}>proof {signal.routeRecommendation.proofTier}</span> : null}
|
|
590
|
+
{signal.routeRecommendation?.proofClosureState ? <span className={`badge badge-${toneForProofClosureState(signal.routeRecommendation.proofClosureState)}`}>{signal.routeRecommendation.proofClosureState}</span> : null}
|
|
575
591
|
{signal.routeRecommendation?.semanticInfluence && signal.routeRecommendation.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {signal.routeRecommendation.semanticInfluence}</span> : null}
|
|
576
592
|
{(signal.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${signal.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
|
|
577
593
|
{signal.interventionTypes.map((type) => <span key={`${signal.id}-${type}`} className="badge badge-gray">{type}</span>)}
|
|
@@ -582,6 +598,7 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
582
598
|
<div key={`${signal.id}-reason-${index}`} className="signal-text">• {reason}</div>
|
|
583
599
|
))}
|
|
584
600
|
{signal.routeRecommendation.proofSummary ? <div className="signal-text">→ {signal.routeRecommendation.proofSummary}</div> : null}
|
|
601
|
+
{signal.routeRecommendation.proofDebtSummary ? <div className="signal-text">⇢ {signal.routeRecommendation.proofDebtSummary}</div> : null}
|
|
585
602
|
</div>
|
|
586
603
|
) : null}
|
|
587
604
|
</div>
|
|
@@ -247,6 +247,28 @@ const COMMANDS: CommandInfo[] = [
|
|
|
247
247
|
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)' },
|
|
248
248
|
note: 'Proof stays bounded and reviewable. Measuring means live but not yet proven, regressed means explicit negative evidence, and verified strengthens review trust without pretending stronger causal certainty than the evidence supports.',
|
|
249
249
|
},
|
|
250
|
+
{
|
|
251
|
+
name: 'verify-brain',
|
|
252
|
+
description: 'Run the contract-backed theory-conformance workflow. This command executes deterministic isolated scenarios plus bounded live smoke checks, emits a structured verdict, saves the latest report, and turns the brain-theory question into an operational product capability instead of a manual milestone-only argument.',
|
|
253
|
+
usage: 'helixevo verify-brain [options]',
|
|
254
|
+
examples: [
|
|
255
|
+
{ cmd: 'helixevo verify-brain', desc: 'Run the default isolated + live theory-conformance suite' },
|
|
256
|
+
{ cmd: 'helixevo verify-brain --isolated-only --verbose', desc: 'Run only deterministic isolated scenarios with detailed output' },
|
|
257
|
+
{ cmd: 'helixevo verify-brain --live-only', desc: 'Run only the bounded live smoke checks' },
|
|
258
|
+
{ cmd: 'helixevo verify-brain --release --json', desc: 'Run release-grade verification and emit structured JSON' },
|
|
259
|
+
],
|
|
260
|
+
options: [
|
|
261
|
+
{ flag: '--release', desc: 'Use stricter release-grade failure handling' },
|
|
262
|
+
{ flag: '--live-only', desc: 'Run only the bounded live smoke suite' },
|
|
263
|
+
{ flag: '--isolated-only', desc: 'Run only the deterministic isolated suite' },
|
|
264
|
+
{ flag: '--json', desc: 'Print the structured result as JSON' },
|
|
265
|
+
{ flag: '--verbose', desc: 'Show scenario-by-scenario and claim-by-claim details' },
|
|
266
|
+
],
|
|
267
|
+
category: 'analysis',
|
|
268
|
+
needsLLM: true,
|
|
269
|
+
runnable: { command: 'verify-brain', label: 'Verify Brain', icon: 'M12 3l7 4v5c0 5-3.5 9-7 10-3.5-1-7-5-7-10V7l7-4zm0 5v5m0 4h.01', color: 'var(--purple)' },
|
|
270
|
+
note: 'This is the new bridge between theory and product. Use it when you need a contract-backed answer to whether the current HelixEvo brain still behaves according to the bounded theory.' ,
|
|
271
|
+
},
|
|
250
272
|
{
|
|
251
273
|
name: 'status',
|
|
252
274
|
description: 'Quick overview of system state: total skills, frontier size, failure count, skill tests, provider control health, and the last recorded provider execution. Like a health check but without deep model analysis.',
|
package/dashboard/app/page.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import { PageHero } from '@/components/page-hero'
|
|
|
6
6
|
import { MetricCard } from '@/components/metric-card'
|
|
7
7
|
import { SectionFrame } from '@/components/section-frame'
|
|
8
8
|
import { OperatorLoopTrail } from '@/components/operator-loop-trail'
|
|
9
|
+
import { loadLatestTheoryConformanceResult } from '@/lib/theory'
|
|
9
10
|
|
|
10
11
|
export const dynamic = 'force-dynamic'
|
|
11
12
|
|
|
@@ -28,10 +29,50 @@ function providerTone(status: 'healthy' | 'degraded' | 'unavailable' | 'unknown'
|
|
|
28
29
|
return 'neutral' as const
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
function conformanceTone(verdict: 'pass' | 'bounded-pass' | 'fail' | 'inconclusive') {
|
|
33
|
+
if (verdict === 'pass') return 'green' as const
|
|
34
|
+
if (verdict === 'bounded-pass') return 'yellow' as const
|
|
35
|
+
if (verdict === 'fail') return 'red' as const
|
|
36
|
+
return 'neutral' as const
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function conformanceHeadline(result: ReturnType<typeof loadLatestTheoryConformanceResult>) {
|
|
40
|
+
if (!result) {
|
|
41
|
+
return {
|
|
42
|
+
title: 'Run the first automated verification pass',
|
|
43
|
+
description: 'No theory-conformance run has been recorded yet. Run helixevo verify-brain to generate the first contract-backed verdict.',
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const failing = result.scenarios.find((scenario) => scenario.verdict === 'fail')
|
|
48
|
+
if (failing) {
|
|
49
|
+
return {
|
|
50
|
+
title: `${failing.scenarioId} needs attention`,
|
|
51
|
+
description: failing.summary,
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const bounded = result.scenarios.find((scenario) => scenario.verdict === 'bounded-pass' || scenario.verdict === 'inconclusive')
|
|
56
|
+
if (bounded) {
|
|
57
|
+
return {
|
|
58
|
+
title: `${bounded.scenarioId} stayed bounded`,
|
|
59
|
+
description: bounded.summary,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
title: 'The latest executed theory checks passed',
|
|
65
|
+
description: result.summary,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
31
69
|
function getPriorityActions(params: {
|
|
32
70
|
unresolved: number
|
|
33
71
|
proofOpen: number
|
|
34
72
|
proofCaution: number
|
|
73
|
+
proofNeedsEvidence: number
|
|
74
|
+
proofStalled: number
|
|
75
|
+
proofTrustedWithDebt: number
|
|
35
76
|
topologyOpen: number
|
|
36
77
|
optimizeStatus: 'idle' | 'healthy' | 'partial' | 'failed'
|
|
37
78
|
optimizeNextStep?: string
|
|
@@ -59,6 +100,15 @@ function getPriorityActions(params: {
|
|
|
59
100
|
})
|
|
60
101
|
}
|
|
61
102
|
|
|
103
|
+
if (params.proofStalled > 0) {
|
|
104
|
+
actions.push({
|
|
105
|
+
href: '/proof',
|
|
106
|
+
title: 'Resolve stalled proof debt',
|
|
107
|
+
description: `${params.proofStalled} proof record${params.proofStalled === 1 ? '' : 's'} have aged without stronger evidence or review and now need explicit revisit.`,
|
|
108
|
+
tone: 'yellow',
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
62
112
|
if (params.proofCaution > 0) {
|
|
63
113
|
actions.push({
|
|
64
114
|
href: '/proof',
|
|
@@ -68,6 +118,15 @@ function getPriorityActions(params: {
|
|
|
68
118
|
})
|
|
69
119
|
}
|
|
70
120
|
|
|
121
|
+
if (params.proofTrustedWithDebt > 0) {
|
|
122
|
+
actions.push({
|
|
123
|
+
href: '/proof',
|
|
124
|
+
title: 'Review trusted lanes with debt',
|
|
125
|
+
description: `${params.proofTrustedWithDebt} lane${params.proofTrustedWithDebt === 1 ? '' : 's'} look trusted but still carry unresolved closure debt behind the summary.`,
|
|
126
|
+
tone: 'yellow',
|
|
127
|
+
})
|
|
128
|
+
}
|
|
129
|
+
|
|
71
130
|
if (params.proofOpen > 0) {
|
|
72
131
|
actions.push({
|
|
73
132
|
href: '/proof',
|
|
@@ -77,6 +136,15 @@ function getPriorityActions(params: {
|
|
|
77
136
|
})
|
|
78
137
|
}
|
|
79
138
|
|
|
139
|
+
if (params.proofNeedsEvidence > 0) {
|
|
140
|
+
actions.push({
|
|
141
|
+
href: '/proof',
|
|
142
|
+
title: 'Harvest missing proof evidence',
|
|
143
|
+
description: `${params.proofNeedsEvidence} proof record${params.proofNeedsEvidence === 1 ? '' : 's'} still need stronger downstream evidence before they should steer more strongly.`,
|
|
144
|
+
tone: 'blue',
|
|
145
|
+
})
|
|
146
|
+
}
|
|
147
|
+
|
|
80
148
|
if (params.topologyOpen > 0) {
|
|
81
149
|
actions.push({
|
|
82
150
|
href: '/topology',
|
|
@@ -114,6 +182,7 @@ export default function Overview() {
|
|
|
114
182
|
const topologyControl = loadTopologyDashboardSummary()
|
|
115
183
|
const llmRuntime = loadLlmRuntimeState()
|
|
116
184
|
const proof = loadProofDashboardSummary()
|
|
185
|
+
const conformance = loadLatestTheoryConformanceResult()
|
|
117
186
|
const frontier = loadFrontier()
|
|
118
187
|
const history = loadHistory()
|
|
119
188
|
const graph = loadGraph()
|
|
@@ -145,6 +214,9 @@ export default function Overview() {
|
|
|
145
214
|
unresolved: summary.failures.unresolved,
|
|
146
215
|
proofOpen: proof.summary.reviewOpen,
|
|
147
216
|
proofCaution: proof.steering.cautionLanes,
|
|
217
|
+
proofNeedsEvidence: proof.summary.needsEvidence,
|
|
218
|
+
proofStalled: proof.summary.stalled,
|
|
219
|
+
proofTrustedWithDebt: proof.steering.trustedWithDebtLanes,
|
|
148
220
|
topologyOpen: topologyControl.summary.open,
|
|
149
221
|
optimizeStatus: topologyControl.optimizeStatus.status,
|
|
150
222
|
optimizeNextStep: topologyControl.optimizeStatus.nextStep,
|
|
@@ -187,7 +259,7 @@ export default function Overview() {
|
|
|
187
259
|
|
|
188
260
|
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 16 }}>
|
|
189
261
|
<MetricCard label="Unresolved corrections" value={summary.failures.unresolved} sublabel={`out of ${summary.failures.total} captured failures`} tone={summary.failures.unresolved > 0 ? 'yellow' : 'green'} href={summary.failures.unresolved > 0 ? '#attention' : '/evolution'} icon="!" />
|
|
190
|
-
<MetricCard label="Proof review" value={proof.summary.reviewOpen} sublabel={`${proof.
|
|
262
|
+
<MetricCard label="Proof review" value={proof.summary.reviewOpen} sublabel={`${proof.summary.needsEvidence} need evidence • ${proof.steering.trustedWithDebtLanes} trusted with debt`} tone={proof.summary.stalled > 0 || proof.steering.trustedWithDebtLanes > 0 ? 'yellow' : proof.summary.reviewOpen > 0 ? 'blue' : proof.steering.trustedLanes > 0 ? 'green' : proof.steering.cautionLanes > 0 ? 'yellow' : 'neutral'} href="/proof" icon="◇" />
|
|
191
263
|
<MetricCard
|
|
192
264
|
label="Open pressure"
|
|
193
265
|
value={ontology.pressureLifecycle.open}
|
|
@@ -241,6 +313,37 @@ export default function Overview() {
|
|
|
241
313
|
</div>
|
|
242
314
|
</SectionFrame>
|
|
243
315
|
|
|
316
|
+
<SectionFrame
|
|
317
|
+
eyebrow="Automated brain verification"
|
|
318
|
+
title="Latest theory-conformance result"
|
|
319
|
+
description="HelixEvo can now record a contract-backed brain-verification run in parallel with the live operator cockpit. This is the latest stored verdict."
|
|
320
|
+
tone="blue"
|
|
321
|
+
>
|
|
322
|
+
{conformance ? (
|
|
323
|
+
<div className="grid-2" style={{ gap: 16 }}>
|
|
324
|
+
<div className="hero-note-card">
|
|
325
|
+
<div className="hero-note-label">{conformance.verdict}</div>
|
|
326
|
+
<div className="hero-note-title">{conformanceHeadline(conformance).title}</div>
|
|
327
|
+
<div className="hero-note-copy">{conformanceHeadline(conformance).description}</div>
|
|
328
|
+
{conformance.reportPath ? (
|
|
329
|
+
<div className="signal-text" style={{ marginTop: 10 }}>report · {conformance.reportPath}</div>
|
|
330
|
+
) : null}
|
|
331
|
+
</div>
|
|
332
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
333
|
+
<MetricCard label="Verdict" value={conformance.verdict} sublabel={`${conformance.totals.passed} pass • ${conformance.totals.boundedPass} bounded • ${conformance.totals.failed} fail • ${conformance.totals.inconclusive} inconclusive`} tone={conformanceTone(conformance.verdict)} href="/proof" icon="◎" />
|
|
334
|
+
<MetricCard label="Scenarios" value={conformance.totals.scenarios} sublabel={`${conformance.totals.assertions} assertions in the latest run`} tone="blue" href="/proof" icon="◇" />
|
|
335
|
+
<MetricCard label="Run mode" value={conformance.mode} sublabel={conformance.releaseMode ? 'release-grade handling enabled' : 'standard operator run'} tone="purple" href="/commands" icon="⇄" />
|
|
336
|
+
<div className="signal-text">{conformance.nextActions[0] ?? 'Open Proof or run helixevo verify-brain --verbose for the full latest report.'}</div>
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
) : (
|
|
340
|
+
<div className="empty-state" style={{ padding: 24 }}>
|
|
341
|
+
<div className="empty-state-title">No theory-conformance run yet</div>
|
|
342
|
+
<div className="empty-state-desc">Run <code>helixevo verify-brain --verbose</code> to generate the first contract-backed brain-verification report.</div>
|
|
343
|
+
</div>
|
|
344
|
+
)}
|
|
345
|
+
</SectionFrame>
|
|
346
|
+
|
|
244
347
|
{unresolved.length > 0 ? (
|
|
245
348
|
<SectionFrame
|
|
246
349
|
eyebrow="Attention"
|
|
@@ -353,6 +456,7 @@ export default function Overview() {
|
|
|
353
456
|
<div className="summary-row-main">
|
|
354
457
|
<div className="summary-row-title">{lane.route ? lane.route.replace(/-/g, ' ') : lane.conceptId ?? lane.laneKey}</div>
|
|
355
458
|
<div className="summary-row-meta">{lane.summary}</div>
|
|
459
|
+
{lane.debtSummary ? <div className="summary-row-meta" style={{ marginTop: 6 }}>{lane.debtSummary}</div> : null}
|
|
356
460
|
</div>
|
|
357
461
|
<span className={`hero-chip hero-chip-${lane.evidenceTier === 'trusted' ? 'green' : lane.evidenceTier === 'caution' ? 'yellow' : lane.evidenceTier === 'bounded' ? 'blue' : 'neutral'}`}>{lane.evidenceTier}</span>
|
|
358
462
|
</div>
|
|
@@ -361,8 +465,8 @@ export default function Overview() {
|
|
|
361
465
|
</div>
|
|
362
466
|
<div style={{ display: 'grid', gap: 12 }}>
|
|
363
467
|
<MetricCard label="Trusted lanes" value={proof.steering.trustedLanes} sublabel={`${proof.summary.verified} verified records reinforce future trust`} tone={proof.steering.trustedLanes > 0 ? 'green' : 'neutral'} href="/proof" icon="✓" />
|
|
364
|
-
<MetricCard label="
|
|
365
|
-
<div className="signal-text">
|
|
468
|
+
<MetricCard label="Trusted with debt" value={proof.steering.trustedWithDebtLanes} sublabel={`${proof.summary.needsEvidence} need evidence • ${proof.summary.stalled} stalled`} tone={proof.steering.trustedWithDebtLanes > 0 || proof.summary.stalled > 0 ? 'yellow' : 'neutral'} href="/proof" icon="!" />
|
|
469
|
+
<div className="signal-text">Proof can now look strong at the lane level while still carrying unresolved closure debt underneath. Overview keeps that debt visible instead of hiding it behind a single trusted badge.</div>
|
|
366
470
|
</div>
|
|
367
471
|
</div>
|
|
368
472
|
</SectionFrame>
|