helixevo 0.8.1 → 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 +22 -0
- package/README.md +12 -5
- package/dashboard/app/api/run/route.ts +1 -0
- package/dashboard/app/coevolution/client.tsx +40 -1
- package/dashboard/app/commands/page.tsx +22 -0
- package/dashboard/app/page.tsx +144 -1
- package/dashboard/app/proof/client.tsx +224 -17
- package/dashboard/app/proof/page.tsx +3 -1
- package/dashboard/lib/data.ts +159 -13
- package/dashboard/lib/proof.ts +651 -23
- package/dashboard/lib/theory.ts +70 -0
- package/dist/cli.js +3035 -912
- package/package.json +2 -2
- package/dashboard/lib/release-spotlight.ts +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,28 @@ 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
|
+
|
|
18
|
+
## [0.9.0] - 2026-03-25
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
- Proof steering summaries with explicit evidence tiers — `trusted`, `caution`, `bounded`, and `candidate` — so proved outcomes can be surfaced as route-level and semantic-control influence instead of remaining only a descriptive ledger
|
|
22
|
+
- Candidate-vs-priority proof queue separation so dry-run and insufficient-evidence records stay visible without crowding higher-leverage review
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- Pressure route recommendations now consume bounded proof steering after semantic influence, allowing weak evidence to stay bounded, cautionary evidence to bias toward review, and verified/effective evidence to strengthen trust modestly
|
|
26
|
+
- Overview, Proof, and Co-Evolution now expose prove-to-steer closure directly, including trusted/caution lane visibility and proof-aware route rationale
|
|
27
|
+
- `status`, `proof --status --verbose`, and the public README now describe Proof as a bounded steering input into the next governed loop rather than only a post-action review surface
|
|
28
|
+
|
|
7
29
|
## [0.8.1] - 2026-03-25
|
|
8
30
|
|
|
9
31
|
### Changed
|
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, and now
|
|
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
|
|
|
@@ -87,7 +87,8 @@ helixevo dashboard
|
|
|
87
87
|
|---------|-------------|
|
|
88
88
|
| `helixevo watch` | Always-on learning: auto-capture + auto-evolve |
|
|
89
89
|
| `helixevo metrics` | Correction rates, skill trends, evolution impact |
|
|
90
|
-
| `helixevo proof` | Outcome attribution
|
|
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
|
|
@@ -199,10 +206,10 @@ helixevo dashboard --port 3900
|
|
|
199
206
|
**Tabs:**
|
|
200
207
|
- **Overview** — Premium control cockpit with frontier signals, brain foundation, provider-control truth, semantic backbone, ontology adoption visibility, proof review visibility, pressure counts, topology review visibility, and prepared/applied structural state
|
|
201
208
|
- **Skill Network** — Interactive graph, premium inspector, co-evolution routing signals, and topology review/execution handoff links
|
|
202
|
-
- **Co-Evolution** — Operator cockpit for routed pressure response, governance mode visibility, promotion queues, transfer evidence, semantic route influence, and topology handoff
|
|
209
|
+
- **Co-Evolution** — Operator cockpit for routed pressure response, governance mode visibility, promotion queues, transfer evidence, semantic route influence, proof-aware route rationale, and topology handoff
|
|
203
210
|
- **Ontology** — Semantic control surface for kernel visibility, frontier concept review, approved ontology extensions, adoption coverage, deprecation risk, and native ontology change events
|
|
204
211
|
- **Topology** — Governance steering plus a persistent operator pipeline for review → prepare → apply → rollback across merge / split / promote / rewire / consolidate candidates
|
|
205
|
-
- **Proof** — Outcome-attribution and proof-
|
|
212
|
+
- **Proof** — Outcome-attribution, review, and proof-steering cockpit for bounded effectiveness across interventions, transfer, topology execution, semantic adoption, and evolution impact
|
|
206
213
|
- **Projects** — Project intake studio, live project analysis, gap routing, per-project pressure hotspots, and promotion feeders
|
|
207
214
|
- **Evolution** — Timeline of evolution runs with judge scores, artifact provenance, and activation-aware context
|
|
208
215
|
- **Research** — Knowledge buffer plus a live “why research now” handoff from current pressure, governed routing, and recurring gaps
|
|
@@ -249,7 +256,7 @@ Failures → Cluster → Propose → Replay → Multi-Judge → Regression → C
|
|
|
249
256
|
- **Governance steering** lets the operator pin or release the active adaptation mode rather than relying only on derived routing.
|
|
250
257
|
- **Topology review** persists merge / split / promote / rewire / consolidate candidates so manual review is a real workflow.
|
|
251
258
|
- **Reviewed topology execution** turns accepted safe candidates into prepared plans, snapshot-backed applies, and rollbackable structural transitions.
|
|
252
|
-
- **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.
|
|
259
|
+
- **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, then fed back into future control through bounded proof steering.
|
|
253
260
|
- **Evolution artifacts** preserve proposal-level evidence so the dashboard can show what changed, why, and with what provenance.
|
|
254
261
|
|
|
255
262
|
**Three-layer hierarchy:**
|
|
@@ -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
|
|
|
@@ -78,6 +78,13 @@ type Summary = {
|
|
|
78
78
|
reasons: string[]
|
|
79
79
|
semanticInfluence?: 'none' | 'explanatory' | 'weighted'
|
|
80
80
|
semanticConceptIds?: string[]
|
|
81
|
+
proofInfluence?: 'none' | 'explanatory' | 'weighted'
|
|
82
|
+
proofTier?: 'trusted' | 'caution' | 'bounded' | 'candidate'
|
|
83
|
+
proofSummary?: string
|
|
84
|
+
proofReasons?: string[]
|
|
85
|
+
proofLaneKeys?: string[]
|
|
86
|
+
proofClosureState?: 'needs-evidence' | 'needs-review' | 'stalled' | 'settled' | 'trusted-with-debt'
|
|
87
|
+
proofDebtSummary?: string
|
|
81
88
|
}
|
|
82
89
|
semanticConceptIds?: string[]
|
|
83
90
|
}[]
|
|
@@ -103,6 +110,13 @@ type Summary = {
|
|
|
103
110
|
reasons: string[]
|
|
104
111
|
semanticInfluence?: 'none' | 'explanatory' | 'weighted'
|
|
105
112
|
semanticConceptIds?: string[]
|
|
113
|
+
proofInfluence?: 'none' | 'explanatory' | 'weighted'
|
|
114
|
+
proofTier?: 'trusted' | 'caution' | 'bounded' | 'candidate'
|
|
115
|
+
proofSummary?: string
|
|
116
|
+
proofReasons?: string[]
|
|
117
|
+
proofLaneKeys?: string[]
|
|
118
|
+
proofClosureState?: 'needs-evidence' | 'needs-review' | 'stalled' | 'settled' | 'trusted-with-debt'
|
|
119
|
+
proofDebtSummary?: string
|
|
106
120
|
}
|
|
107
121
|
semanticConceptIds?: string[]
|
|
108
122
|
}[]
|
|
@@ -153,6 +167,23 @@ function toneForRoute(route: PressureInterventionType) {
|
|
|
153
167
|
return 'gray'
|
|
154
168
|
}
|
|
155
169
|
|
|
170
|
+
function toneForProofTier(tier: 'trusted' | 'caution' | 'bounded' | 'candidate' | undefined) {
|
|
171
|
+
if (tier === 'trusted') return 'green'
|
|
172
|
+
if (tier === 'caution') return 'yellow'
|
|
173
|
+
if (tier === 'bounded') return 'blue'
|
|
174
|
+
if (tier === 'candidate') return 'gray'
|
|
175
|
+
return 'gray'
|
|
176
|
+
}
|
|
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
|
+
|
|
156
187
|
function toneForMode(mode: Summary['governance']['activeMode']): 'blue' | 'green' | 'purple' | 'yellow' | 'neutral' {
|
|
157
188
|
if (mode === 'transfer-focused') return 'purple'
|
|
158
189
|
if (mode === 'project-critical') return 'yellow'
|
|
@@ -311,7 +342,7 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
311
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="↑" />
|
|
312
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="◎" />
|
|
313
344
|
<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
|
|
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="◇" />
|
|
315
346
|
<MetricCard label="Realized transfers" value={summary.recentTransfers.filter((event) => event.status === 'realized').length} sublabel={`${summary.pressureMotifs.addressed} motifs now addressed`} tone="green" icon="↑" />
|
|
316
347
|
</div>
|
|
317
348
|
|
|
@@ -402,6 +433,8 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
402
433
|
<span className={`badge badge-${toneForLifecycle(motif.lifecycle)}`}>{motif.lifecycle}</span>
|
|
403
434
|
<span className="badge badge-purple">recommend {motif.suggestedRoute.route}</span>
|
|
404
435
|
<span className="badge badge-gray">confidence {(motif.suggestedRoute.confidence * 100).toFixed(0)}%</span>
|
|
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}
|
|
405
438
|
{motif.suggestedRoute.semanticInfluence && motif.suggestedRoute.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {motif.suggestedRoute.semanticInfluence}</span> : null}
|
|
406
439
|
{(motif.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${motif.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
|
|
407
440
|
{motif.projectIds.slice(0, 3).map((projectId) => <span key={`${motif.id}-${projectId}`} className="badge badge-gray">{projectId}</span>)}
|
|
@@ -410,6 +443,8 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
410
443
|
{motif.suggestedRoute.reasons.slice(0, 2).map((reason, index) => (
|
|
411
444
|
<div key={`${motif.id}-reason-${index}`} className="signal-text">• {reason}</div>
|
|
412
445
|
))}
|
|
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}
|
|
413
448
|
</div>
|
|
414
449
|
</div>
|
|
415
450
|
</div>
|
|
@@ -551,6 +586,8 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
551
586
|
{signal.projectId ? <span className="badge badge-gray">{signal.projectId}</span> : null}
|
|
552
587
|
{signal.routeRecommendation ? <span className={`badge badge-${toneForRoute(signal.routeRecommendation.route)}`}>recommend {signal.routeRecommendation.route}</span> : null}
|
|
553
588
|
{signal.routeRecommendation ? <span className="badge badge-gray">{signal.routeRecommendation.scope}</span> : null}
|
|
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}
|
|
554
591
|
{signal.routeRecommendation?.semanticInfluence && signal.routeRecommendation.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {signal.routeRecommendation.semanticInfluence}</span> : null}
|
|
555
592
|
{(signal.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${signal.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
|
|
556
593
|
{signal.interventionTypes.map((type) => <span key={`${signal.id}-${type}`} className="badge badge-gray">{type}</span>)}
|
|
@@ -560,6 +597,8 @@ export default function CoEvolutionClient({ summary, ontology, proof }: Props) {
|
|
|
560
597
|
{signal.routeRecommendation.reasons.slice(0, 2).map((reason, index) => (
|
|
561
598
|
<div key={`${signal.id}-reason-${index}`} className="signal-text">• {reason}</div>
|
|
562
599
|
))}
|
|
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}
|
|
563
602
|
</div>
|
|
564
603
|
) : null}
|
|
565
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,9 +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
|
|
72
|
+
proofCaution: number
|
|
73
|
+
proofNeedsEvidence: number
|
|
74
|
+
proofStalled: number
|
|
75
|
+
proofTrustedWithDebt: number
|
|
34
76
|
topologyOpen: number
|
|
35
77
|
optimizeStatus: 'idle' | 'healthy' | 'partial' | 'failed'
|
|
36
78
|
optimizeNextStep?: string
|
|
@@ -58,6 +100,33 @@ function getPriorityActions(params: {
|
|
|
58
100
|
})
|
|
59
101
|
}
|
|
60
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
|
+
|
|
112
|
+
if (params.proofCaution > 0) {
|
|
113
|
+
actions.push({
|
|
114
|
+
href: '/proof',
|
|
115
|
+
title: 'Inspect cautionary proof steering',
|
|
116
|
+
description: `${params.proofCaution} proof lane${params.proofCaution === 1 ? '' : 's'} currently reduce trust or increase review bias for the next control step.`,
|
|
117
|
+
tone: 'yellow',
|
|
118
|
+
})
|
|
119
|
+
}
|
|
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
|
+
|
|
61
130
|
if (params.proofOpen > 0) {
|
|
62
131
|
actions.push({
|
|
63
132
|
href: '/proof',
|
|
@@ -67,6 +136,15 @@ function getPriorityActions(params: {
|
|
|
67
136
|
})
|
|
68
137
|
}
|
|
69
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
|
+
|
|
70
148
|
if (params.topologyOpen > 0) {
|
|
71
149
|
actions.push({
|
|
72
150
|
href: '/topology',
|
|
@@ -104,6 +182,7 @@ export default function Overview() {
|
|
|
104
182
|
const topologyControl = loadTopologyDashboardSummary()
|
|
105
183
|
const llmRuntime = loadLlmRuntimeState()
|
|
106
184
|
const proof = loadProofDashboardSummary()
|
|
185
|
+
const conformance = loadLatestTheoryConformanceResult()
|
|
107
186
|
const frontier = loadFrontier()
|
|
108
187
|
const history = loadHistory()
|
|
109
188
|
const graph = loadGraph()
|
|
@@ -134,6 +213,10 @@ export default function Overview() {
|
|
|
134
213
|
const priorityActions = getPriorityActions({
|
|
135
214
|
unresolved: summary.failures.unresolved,
|
|
136
215
|
proofOpen: proof.summary.reviewOpen,
|
|
216
|
+
proofCaution: proof.steering.cautionLanes,
|
|
217
|
+
proofNeedsEvidence: proof.summary.needsEvidence,
|
|
218
|
+
proofStalled: proof.summary.stalled,
|
|
219
|
+
proofTrustedWithDebt: proof.steering.trustedWithDebtLanes,
|
|
137
220
|
topologyOpen: topologyControl.summary.open,
|
|
138
221
|
optimizeStatus: topologyControl.optimizeStatus.status,
|
|
139
222
|
optimizeNextStep: topologyControl.optimizeStatus.nextStep,
|
|
@@ -176,7 +259,7 @@ export default function Overview() {
|
|
|
176
259
|
|
|
177
260
|
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 16 }}>
|
|
178
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="!" />
|
|
179
|
-
<MetricCard label="Proof review" value={proof.summary.reviewOpen} sublabel={`${proof.summary.
|
|
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="◇" />
|
|
180
263
|
<MetricCard
|
|
181
264
|
label="Open pressure"
|
|
182
265
|
value={ontology.pressureLifecycle.open}
|
|
@@ -230,6 +313,37 @@ export default function Overview() {
|
|
|
230
313
|
</div>
|
|
231
314
|
</SectionFrame>
|
|
232
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
|
+
|
|
233
347
|
{unresolved.length > 0 ? (
|
|
234
348
|
<SectionFrame
|
|
235
349
|
eyebrow="Attention"
|
|
@@ -328,6 +442,35 @@ export default function Overview() {
|
|
|
328
442
|
</SectionFrame>
|
|
329
443
|
) : null}
|
|
330
444
|
|
|
445
|
+
<SectionFrame
|
|
446
|
+
eyebrow="Proof steering"
|
|
447
|
+
title="What proved outcomes are changing now"
|
|
448
|
+
description="Proof now separates trusted, cautionary, bounded, and candidate evidence so the next governed loop can steer more honestly instead of treating every proof record as equally strong."
|
|
449
|
+
tone="blue"
|
|
450
|
+
actions={<Link href="/proof" className="badge badge-gray">Open proof control</Link>}
|
|
451
|
+
>
|
|
452
|
+
<div className="grid-2" style={{ gap: 16 }}>
|
|
453
|
+
<div className="summary-list">
|
|
454
|
+
{proof.steering.routeLanes.slice(0, 3).map((lane) => (
|
|
455
|
+
<div key={lane.laneKey} className="summary-row">
|
|
456
|
+
<div className="summary-row-main">
|
|
457
|
+
<div className="summary-row-title">{lane.route ? lane.route.replace(/-/g, ' ') : lane.conceptId ?? lane.laneKey}</div>
|
|
458
|
+
<div className="summary-row-meta">{lane.summary}</div>
|
|
459
|
+
{lane.debtSummary ? <div className="summary-row-meta" style={{ marginTop: 6 }}>{lane.debtSummary}</div> : null}
|
|
460
|
+
</div>
|
|
461
|
+
<span className={`hero-chip hero-chip-${lane.evidenceTier === 'trusted' ? 'green' : lane.evidenceTier === 'caution' ? 'yellow' : lane.evidenceTier === 'bounded' ? 'blue' : 'neutral'}`}>{lane.evidenceTier}</span>
|
|
462
|
+
</div>
|
|
463
|
+
))}
|
|
464
|
+
{proof.steering.routeLanes.length === 0 ? <div className="signal-text">No route-level proof steering yet.</div> : null}
|
|
465
|
+
</div>
|
|
466
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
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="✓" />
|
|
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>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
</SectionFrame>
|
|
473
|
+
|
|
331
474
|
<SectionFrame
|
|
332
475
|
eyebrow="Brain summary"
|
|
333
476
|
title="Semantic backbone"
|