helixevo 0.8.0 → 0.8.1
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 +8 -0
- package/dashboard/app/page.tsx +148 -189
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,14 @@ All notable changes to HelixEvo are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.8.1] - 2026-03-25
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- Overview now behaves more like an essential operator cockpit and gives higher priority to live operator state over release/reference framing
|
|
11
|
+
- Unresolved corrections now surface earlier in the landing flow when active, ahead of quick actions and semantic summary content
|
|
12
|
+
- Healthy provider state remains compact on Overview while fallback/deviation cases are explained more explicitly and truthfully
|
|
13
|
+
- Semantic backbone now reads as a compact brain summary instead of a dense secondary dashboard, with direct control links into co-evolution, ontology, topology, and proof
|
|
14
|
+
|
|
7
15
|
## [0.8.0] - 2026-03-25
|
|
8
16
|
|
|
9
17
|
### Added
|
package/dashboard/app/page.tsx
CHANGED
|
@@ -6,8 +6,6 @@ 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 { SurfaceJumpLinks } from '@/components/surface-jump-links'
|
|
10
|
-
import { CURRENT_RELEASE_SPOTLIGHT } from '@/lib/release-spotlight'
|
|
11
9
|
|
|
12
10
|
export const dynamic = 'force-dynamic'
|
|
13
11
|
|
|
@@ -114,6 +112,25 @@ export default function Overview() {
|
|
|
114
112
|
const recentRuns = history.iterations.slice(-4).reverse()
|
|
115
113
|
const topSkills = [...graph.nodes].sort((a, b) => b.score - a.score).slice(0, 10)
|
|
116
114
|
const defaultProvider = llmRuntime.providers[llmRuntime.defaultProvider]
|
|
115
|
+
const lastExecutionUsedFallback = Boolean(llmRuntime.lastExecution?.fallbackUsed)
|
|
116
|
+
const isProviderDegraded =
|
|
117
|
+
defaultProvider.status === 'degraded' ||
|
|
118
|
+
defaultProvider.status === 'unavailable'
|
|
119
|
+
const showProviderAttention = isProviderDegraded || lastExecutionUsedFallback
|
|
120
|
+
const providerAttentionTone = defaultProvider.status === 'unavailable' ? 'red' : 'yellow'
|
|
121
|
+
const providerAttentionEyebrow = isProviderDegraded ? 'Provider attention' : 'Recent provider deviation'
|
|
122
|
+
const providerAttentionTitle = defaultProvider.status === 'unavailable'
|
|
123
|
+
? 'Backend recovery needed'
|
|
124
|
+
: isProviderDegraded
|
|
125
|
+
? 'Live backend truth'
|
|
126
|
+
: 'Fallback used recently'
|
|
127
|
+
const providerAttentionDescription = isProviderDegraded
|
|
128
|
+
? lastExecutionUsedFallback
|
|
129
|
+
? 'The default provider currently needs attention and a recent provider-backed run used explicit fallback. Review runtime health before treating execution as fully healthy or default-aligned.'
|
|
130
|
+
: 'The default provider currently needs attention. Review runtime health before treating provider-backed execution as fully healthy.'
|
|
131
|
+
: llmRuntime.lastExecution?.usedProvider
|
|
132
|
+
? `A recent provider-backed run did not stay on the selected default provider. The default remained ${providerLabel(llmRuntime.defaultProvider)}, but the last successful execution used ${providerLabel(llmRuntime.lastExecution.usedProvider)}. Review provider health and fallback policy before assuming default-provider execution.`
|
|
133
|
+
: 'A recent provider-backed run used explicit fallback instead of staying on the selected default provider. Review provider health and fallback policy before assuming default-provider execution.'
|
|
117
134
|
const priorityActions = getPriorityActions({
|
|
118
135
|
unresolved: summary.failures.unresolved,
|
|
119
136
|
proofOpen: proof.summary.reviewOpen,
|
|
@@ -133,14 +150,9 @@ export default function Overview() {
|
|
|
133
150
|
title="Dashboard"
|
|
134
151
|
description="Monitor the live state of your self-evolving skill ecosystem, launch high-value actions, and trace how failures turn into frontier-worthy improvements."
|
|
135
152
|
chips={[
|
|
136
|
-
{ label: `${summary.skills.total} skills`, tone: 'purple' },
|
|
137
153
|
{ label: `${summary.failures.unresolved} unresolved corrections`, tone: summary.failures.unresolved > 0 ? 'yellow' : 'green' },
|
|
138
|
-
{ label: `${summary.evolution.runs} evolution runs`, tone: 'blue' },
|
|
139
|
-
{ label: `${frontier.programs.length}/${frontier.capacity} frontier slots`, tone: 'green' },
|
|
140
|
-
{ label: `${coevolution.pressureMotifs.promotionReady} promotion-ready motifs`, tone: coevolution.pressureMotifs.promotionReady > 0 ? 'purple' : 'neutral' },
|
|
141
|
-
{ label: `${coevolution.topologyReviews.open} topology reviews`, tone: coevolution.topologyReviews.open > 0 ? 'yellow' : 'green' },
|
|
142
|
-
{ label: `${coevolution.topologyExecution.prepared} prepared structural plans`, tone: coevolution.topologyExecution.prepared > 0 ? 'blue' : 'neutral' },
|
|
143
154
|
{ label: `${proof.summary.reviewOpen} proof reviews`, tone: proof.summary.reviewOpen > 0 ? 'yellow' : proof.summary.effective > 0 ? 'green' : 'neutral' },
|
|
155
|
+
{ label: `${coevolution.topologyReviews.open} topology reviews`, tone: coevolution.topologyReviews.open > 0 ? 'yellow' : 'green' },
|
|
144
156
|
{ label: `${providerLabel(llmRuntime.defaultProvider)} ${defaultProvider.status}`, tone: providerTone(defaultProvider.status) },
|
|
145
157
|
{ label: `mode: ${coevolution.governance.activeMode.replace(/-/g, ' ')}`, tone: coevolution.governance.activeMode === 'transfer-focused' ? 'purple' : coevolution.governance.activeMode === 'project-critical' ? 'yellow' : 'blue' },
|
|
146
158
|
]}
|
|
@@ -162,38 +174,98 @@ export default function Overview() {
|
|
|
162
174
|
|
|
163
175
|
<OperatorLoopTrail surface="overview" />
|
|
164
176
|
|
|
165
|
-
<div
|
|
166
|
-
<MetricCard label="Total skills" value={summary.skills.total} sublabel={`${summary.skills.evolved} evolved • ${summary.skillTests} skill tests`} tone="purple" href="/network" icon="◆" />
|
|
167
|
-
<MetricCard label="Accepted proposals" value={summary.evolution.accepted} sublabel={`${summary.evolution.rejected} rejected`} tone="green" href="/evolution" icon="✓" />
|
|
177
|
+
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 16 }}>
|
|
168
178
|
<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="!" />
|
|
169
|
-
<MetricCard label="Discoveries" value={summary.buffer.discoveries} sublabel={`${summary.buffer.drafts} drafts in progress`} tone="blue" href="/research" icon="◎" />
|
|
170
|
-
<MetricCard label="Frontier candidates" value={frontier.programs.length} sublabel={`${summary.canaries} active canaries`} tone="neutral" href="/frontier" icon="▲" />
|
|
171
179
|
<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'} href="/proof" icon="◇" />
|
|
180
|
+
<MetricCard
|
|
181
|
+
label="Open pressure"
|
|
182
|
+
value={ontology.pressureLifecycle.open}
|
|
183
|
+
sublabel={`${ontology.pressureLifecycle.inProgress} in progress • ${ontology.pressureLifecycle.addressed} addressed`}
|
|
184
|
+
tone={ontology.pressureLifecycle.open > 0 ? 'yellow' : 'green'}
|
|
185
|
+
href="/coevolution"
|
|
186
|
+
icon="!"
|
|
187
|
+
/>
|
|
188
|
+
<MetricCard
|
|
189
|
+
label="Topology review"
|
|
190
|
+
value={ontology.topologyReviews.open}
|
|
191
|
+
sublabel={`${ontology.topologyExecution.prepared} prepared • ${ontology.topologyExecution.applied} applied`}
|
|
192
|
+
tone={ontology.topologyReviews.open > 0 ? 'yellow' : ontology.topologyExecution.applied > 0 ? 'green' : 'blue'}
|
|
193
|
+
href="/topology"
|
|
194
|
+
icon="⇄"
|
|
195
|
+
/>
|
|
196
|
+
<MetricCard
|
|
197
|
+
label="Ontology frontier"
|
|
198
|
+
value={ontology.ontologyLoop.frontier}
|
|
199
|
+
sublabel={`${ontology.ontologyLoop.reviewOpen} open • ${ontology.ontologyLoop.extensions} approved extensions`}
|
|
200
|
+
tone={ontology.ontologyLoop.reviewOpen > 0 ? 'yellow' : ontology.ontologyLoop.extensions > 0 ? 'blue' : 'neutral'}
|
|
201
|
+
href="/ontology"
|
|
202
|
+
icon="◎"
|
|
203
|
+
/>
|
|
204
|
+
<MetricCard
|
|
205
|
+
label="Active semantic concepts"
|
|
206
|
+
value={ontology.ontologyLoop.adoption.activeConcepts}
|
|
207
|
+
sublabel={`${ontology.ontologyLoop.adoption.totalBindings} bindings • ${ontology.ontologyLoop.adoption.routesInfluenced} influenced routes`}
|
|
208
|
+
tone={ontology.ontologyLoop.adoption.activeConcepts > 0 ? 'green' : 'neutral'}
|
|
209
|
+
href="/ontology"
|
|
210
|
+
icon="⇄"
|
|
211
|
+
/>
|
|
172
212
|
</div>
|
|
173
213
|
|
|
174
214
|
<SectionFrame
|
|
175
|
-
eyebrow=
|
|
176
|
-
title=
|
|
177
|
-
description=
|
|
215
|
+
eyebrow="Priority now"
|
|
216
|
+
title="Top ranked next actions"
|
|
217
|
+
description="This layer compresses the live loop into the most important operator moves right now instead of leaving everything as flat dashboard signal."
|
|
178
218
|
tone="blue"
|
|
179
219
|
>
|
|
180
|
-
<div className="
|
|
181
|
-
|
|
182
|
-
{
|
|
183
|
-
<div
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
))}
|
|
191
|
-
</div>
|
|
192
|
-
</div>
|
|
193
|
-
<SurfaceJumpLinks surface="overview" variant="panel" title="Jump into the updated loop" />
|
|
220
|
+
<div className="summary-list">
|
|
221
|
+
{priorityActions.map((action, index) => (
|
|
222
|
+
<Link key={`${action.href}-${index}`} href={action.href} className="summary-row">
|
|
223
|
+
<div className="summary-row-main">
|
|
224
|
+
<div className="summary-row-title">{index + 1}. {action.title}</div>
|
|
225
|
+
<div className="summary-row-meta">{action.description}</div>
|
|
226
|
+
</div>
|
|
227
|
+
<span className={`hero-chip hero-chip-${action.tone}`}>open</span>
|
|
228
|
+
</Link>
|
|
229
|
+
))}
|
|
194
230
|
</div>
|
|
195
231
|
</SectionFrame>
|
|
196
232
|
|
|
233
|
+
{unresolved.length > 0 ? (
|
|
234
|
+
<SectionFrame
|
|
235
|
+
eyebrow="Attention"
|
|
236
|
+
title="Unresolved corrections"
|
|
237
|
+
description="These user corrections have been captured but not yet folded back into the skill network."
|
|
238
|
+
tone="yellow"
|
|
239
|
+
className="anchor-target"
|
|
240
|
+
>
|
|
241
|
+
<div id="attention" className="signal-list">
|
|
242
|
+
{unresolved.slice(0, 5).map((failure, index) => (
|
|
243
|
+
<div key={`${failure.id}-${index}`} className="signal-row signal-row-attention">
|
|
244
|
+
<div className="signal-dot" />
|
|
245
|
+
<div style={{ flex: 1 }}>
|
|
246
|
+
<div className="signal-title">
|
|
247
|
+
{failure.userRequest.slice(0, 120)}
|
|
248
|
+
{failure.userRequest.length > 120 ? '…' : ''}
|
|
249
|
+
</div>
|
|
250
|
+
<div className="signal-text">
|
|
251
|
+
Correction: {failure.correction.slice(0, 180)}
|
|
252
|
+
{failure.correction.length > 180 ? '…' : ''}
|
|
253
|
+
</div>
|
|
254
|
+
<div style={{ display: 'flex', gap: 8, flexWrap: 'wrap', marginTop: 10 }}>
|
|
255
|
+
<span className="badge badge-yellow">{failure.correctionType}</span>
|
|
256
|
+
{failure.project ? <span className="badge badge-gray">{failure.project}</span> : null}
|
|
257
|
+
<span className="badge badge-gray">{new Date(failure.timestamp).toLocaleDateString()}</span>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
</div>
|
|
261
|
+
))}
|
|
262
|
+
{unresolved.length > 5 ? (
|
|
263
|
+
<div className="signal-text" style={{ textAlign: 'center' }}>+{unresolved.length - 5} more unresolved corrections</div>
|
|
264
|
+
) : null}
|
|
265
|
+
</div>
|
|
266
|
+
</SectionFrame>
|
|
267
|
+
) : null}
|
|
268
|
+
|
|
197
269
|
<SectionFrame
|
|
198
270
|
eyebrow="Execution layer"
|
|
199
271
|
title="Quick actions"
|
|
@@ -209,100 +281,60 @@ export default function Overview() {
|
|
|
209
281
|
/>
|
|
210
282
|
</SectionFrame>
|
|
211
283
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
<div className="summary-row-
|
|
227
|
-
|
|
284
|
+
{showProviderAttention ? (
|
|
285
|
+
<SectionFrame
|
|
286
|
+
eyebrow={providerAttentionEyebrow}
|
|
287
|
+
title={providerAttentionTitle}
|
|
288
|
+
description={providerAttentionDescription}
|
|
289
|
+
tone={providerAttentionTone}
|
|
290
|
+
actions={<Link href="/commands" className="badge badge-gray">Open commands</Link>}
|
|
291
|
+
>
|
|
292
|
+
<div className="grid-2" style={{ gap: 16 }}>
|
|
293
|
+
<div className="summary-list">
|
|
294
|
+
{(['claude-code', 'codex', 'ollama'] as const).map((provider) => {
|
|
295
|
+
const snapshot = llmRuntime.providers[provider]
|
|
296
|
+
return (
|
|
297
|
+
<div key={provider} className="summary-row">
|
|
298
|
+
<div className="summary-row-main">
|
|
299
|
+
<div className="summary-row-title">{providerLabel(provider)}</div>
|
|
300
|
+
<div className="summary-row-meta">{snapshot.summary}</div>
|
|
301
|
+
{snapshot.nextStep ? <div className="summary-row-meta" style={{ marginTop: 6 }}>Next: {snapshot.nextStep}</div> : null}
|
|
302
|
+
</div>
|
|
303
|
+
<span className={`hero-chip hero-chip-${providerTone(snapshot.status)}`}>{snapshot.status}</span>
|
|
228
304
|
</div>
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
<div className="signal-text">Commands, status, and dashboard surfaces now track whether execution stayed on the selected provider, degraded, or used an explicit fallback path.</div>
|
|
305
|
+
)
|
|
306
|
+
})}
|
|
307
|
+
</div>
|
|
308
|
+
<div style={{ display: 'grid', gap: 12 }}>
|
|
309
|
+
<MetricCard
|
|
310
|
+
label="Default provider"
|
|
311
|
+
value={providerLabel(llmRuntime.defaultProvider)}
|
|
312
|
+
sublabel={`fallback: ${llmRuntime.fallbackPolicy}${llmRuntime.fallbackOrder.length > 0 ? ` • ${llmRuntime.fallbackOrder.map((provider) => providerLabel(provider)).join(' → ')}` : ''}`}
|
|
313
|
+
tone={providerTone(defaultProvider.status)}
|
|
314
|
+
href="/commands"
|
|
315
|
+
icon="☍"
|
|
316
|
+
/>
|
|
317
|
+
<MetricCard
|
|
318
|
+
label="Last provider run"
|
|
319
|
+
value={llmRuntime.lastExecution?.usedProvider ? providerLabel(llmRuntime.lastExecution.usedProvider) : 'None'}
|
|
320
|
+
sublabel={llmRuntime.lastExecution ? llmRuntime.lastExecution.summary : 'No provider-backed execution has been recorded yet.'}
|
|
321
|
+
tone={llmRuntime.lastExecution?.success ? 'green' : llmRuntime.lastExecution ? 'yellow' : 'neutral'}
|
|
322
|
+
href="/commands"
|
|
323
|
+
icon="↺"
|
|
324
|
+
/>
|
|
325
|
+
<div className="signal-text">Commands, status, and dashboard surfaces now track whether execution stayed on the selected provider, degraded, or used an explicit fallback path.</div>
|
|
326
|
+
</div>
|
|
252
327
|
</div>
|
|
253
|
-
</
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
<SectionFrame
|
|
257
|
-
eyebrow="Priority now"
|
|
258
|
-
title="Top ranked next actions"
|
|
259
|
-
description="This layer compresses the live loop into the most important operator moves right now instead of leaving everything as flat dashboard signal."
|
|
260
|
-
tone="blue"
|
|
261
|
-
>
|
|
262
|
-
<div className="summary-list">
|
|
263
|
-
{priorityActions.map((action, index) => (
|
|
264
|
-
<Link key={`${action.href}-${index}`} href={action.href} className="summary-row">
|
|
265
|
-
<div className="summary-row-main">
|
|
266
|
-
<div className="summary-row-title">{index + 1}. {action.title}</div>
|
|
267
|
-
<div className="summary-row-meta">{action.description}</div>
|
|
268
|
-
</div>
|
|
269
|
-
<span className={`hero-chip hero-chip-${action.tone}`}>open</span>
|
|
270
|
-
</Link>
|
|
271
|
-
))}
|
|
272
|
-
</div>
|
|
273
|
-
</SectionFrame>
|
|
328
|
+
</SectionFrame>
|
|
329
|
+
) : null}
|
|
274
330
|
|
|
275
331
|
<SectionFrame
|
|
276
|
-
eyebrow="Brain
|
|
332
|
+
eyebrow="Brain summary"
|
|
277
333
|
title="Semantic backbone"
|
|
278
|
-
description="
|
|
334
|
+
description="Compact summary of pressure, response, structural review, ontology growth, and semantic adoption across the living brain."
|
|
279
335
|
actions={<span className="badge badge-gray">{ontology.source === 'hybrid-native-derived' ? `Ontology ${ontology.specVersion} · hybrid native + derived` : ontology.source === 'graph' ? `Ontology ${ontology.specVersion}` : 'Compatibility-derived'}</span>}
|
|
280
336
|
>
|
|
281
337
|
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 16 }}>
|
|
282
|
-
<MetricCard
|
|
283
|
-
label="Generalist skills"
|
|
284
|
-
value={ontology.skillRoles.generalist}
|
|
285
|
-
sublabel={`${ontology.stabilityStates.stable} stable abstractions`}
|
|
286
|
-
tone="purple"
|
|
287
|
-
href="/network"
|
|
288
|
-
icon="◎"
|
|
289
|
-
/>
|
|
290
|
-
<MetricCard
|
|
291
|
-
label="Project specialists"
|
|
292
|
-
value={ontology.skillRoles.specialist}
|
|
293
|
-
sublabel={`${ontology.plasticityStates.candidate} candidate rewires`}
|
|
294
|
-
tone="blue"
|
|
295
|
-
href="/projects"
|
|
296
|
-
icon="◉"
|
|
297
|
-
/>
|
|
298
|
-
<MetricCard
|
|
299
|
-
label="Hybrid bridges"
|
|
300
|
-
value={ontology.skillRoles.hybrid}
|
|
301
|
-
sublabel={`${ontology.plasticityStates.volatile} volatile transitions`}
|
|
302
|
-
tone="green"
|
|
303
|
-
href="/network"
|
|
304
|
-
icon="⇄"
|
|
305
|
-
/>
|
|
306
338
|
<MetricCard
|
|
307
339
|
label="Open pressure"
|
|
308
340
|
value={ontology.pressureLifecycle.open}
|
|
@@ -319,14 +351,6 @@ export default function Overview() {
|
|
|
319
351
|
href="/coevolution"
|
|
320
352
|
icon="↺"
|
|
321
353
|
/>
|
|
322
|
-
<MetricCard
|
|
323
|
-
label="Pressure motifs"
|
|
324
|
-
value={ontology.pressureMotifs.total}
|
|
325
|
-
sublabel={`${ontology.pressureMotifs.promotionReady} promotion-ready • ${ontology.transferEvents.realized} realized transfers`}
|
|
326
|
-
tone="purple"
|
|
327
|
-
href="/coevolution"
|
|
328
|
-
icon="⇄"
|
|
329
|
-
/>
|
|
330
354
|
<MetricCard
|
|
331
355
|
label="Topology review"
|
|
332
356
|
value={ontology.topologyReviews.open}
|
|
@@ -351,81 +375,16 @@ export default function Overview() {
|
|
|
351
375
|
href="/ontology"
|
|
352
376
|
icon="⇄"
|
|
353
377
|
/>
|
|
354
|
-
<MetricCard
|
|
355
|
-
label="Observed mutation verbs"
|
|
356
|
-
value={ontology.mutationOperationsObserved}
|
|
357
|
-
sublabel={ontology.observedMutationActions.length > 0 ? ontology.observedMutationActions.join(' • ') : 'Waiting for evolution history'}
|
|
358
|
-
tone="yellow"
|
|
359
|
-
href="/evolution"
|
|
360
|
-
icon="◇"
|
|
361
|
-
/>
|
|
362
378
|
</div>
|
|
363
379
|
|
|
364
380
|
<div style={{ display: 'flex', gap: 8, flexWrap: 'wrap', marginTop: 16 }}>
|
|
365
|
-
<span className="badge badge-gray">{ontology.relationFamiliesObserved} relation families live in the graph</span>
|
|
366
|
-
<span className="badge badge-gray">{ontology.evidenceBackedProposals} proposals already carry judge + regression evidence</span>
|
|
367
|
-
<span className="badge badge-gray">{ontology.artifacts.total} evolution artifacts ({ontology.artifacts.native} native • {ontology.artifacts.derived} derived)</span>
|
|
368
|
-
<span className="badge badge-gray">{ontology.activationTraces.total} activation traces ({ontology.activationTraces.native} native • {ontology.activationTraces.derived} derived)</span>
|
|
369
|
-
<span className="badge badge-gray">{ontology.pressureSignals.total} pressure signals ({ontology.pressureSignals.native} native • {ontology.pressureSignals.derived} derived)</span>
|
|
370
|
-
<span className="badge badge-gray">{ontology.pressureInterventions.total} response interventions logged</span>
|
|
371
|
-
<span className="badge badge-gray">{ontology.pressureLifecycle.open} open • {ontology.pressureLifecycle.inProgress} in progress • {ontology.pressureLifecycle.addressed} addressed</span>
|
|
372
381
|
<Link href="/coevolution" className="badge badge-blue" style={{ textDecoration: 'none' }}>Open co-evolution control</Link>
|
|
373
|
-
<span className="badge badge-gray">{coevolution.topProjects.length} pressured project hotspots</span>
|
|
374
|
-
<span className="badge badge-gray">{coevolution.crossProjectGapAreas.length} cross-project gap motifs</span>
|
|
375
|
-
<span className="badge badge-gray">{ontology.pressureMotifs.promotionReady} motifs currently recommend generalize</span>
|
|
376
|
-
<span className="badge badge-gray">{ontology.transferEvents.total} transfer events logged ({ontology.transferEvents.realized} realized)</span>
|
|
377
|
-
<span className="badge badge-gray">ontology → {ontology.ontologyLoop.frontier} frontier • {ontology.ontologyLoop.extensions} extensions • {ontology.ontologyLoop.changeEvents} changes</span>
|
|
378
|
-
<span className="badge badge-gray">semantic adoption → {ontology.ontologyLoop.adoption.activeConcepts} active concepts • {ontology.ontologyLoop.adoption.totalBindings} bindings • {ontology.ontologyLoop.adoption.routesInfluenced} influenced routes</span>
|
|
379
|
-
<span className="badge badge-gray">deprecation risk → {ontology.ontologyLoop.adoption.conceptsAtDeprecationRisk} concepts • {ontology.ontologyLoop.adoption.unusedExtensions} unused extensions</span>
|
|
380
|
-
<span className="badge badge-gray">topology → {ontology.topologyReviews.open} open • {ontology.topologyReviews.accepted} accepted • {ontology.topologyReviews.generatedFromManualReview} manual-route</span>
|
|
381
|
-
<span className="badge badge-gray">execution → {ontology.topologyExecution.prepared} prepared • {ontology.topologyExecution.applied} applied • {ontology.topologyExecution.rolledBack} rolled back</span>
|
|
382
|
-
<span className="badge badge-gray">proof → {proof.summary.total} total • {proof.summary.effective} effective • {proof.summary.reviewOpen} open review</span>
|
|
383
382
|
<Link href="/ontology" className="badge badge-blue" style={{ textDecoration: 'none' }}>Open ontology control</Link>
|
|
384
383
|
<Link href="/topology" className="badge badge-blue" style={{ textDecoration: 'none' }}>Open topology control</Link>
|
|
385
384
|
<Link href="/proof" className="badge badge-blue" style={{ textDecoration: 'none' }}>Open proof control</Link>
|
|
386
|
-
<span className="badge badge-gray">governance: {ontology.governance.activeMode.replace(/-/g, ' ')} ({ontology.governance.source})</span>
|
|
387
|
-
<span className="badge badge-gray">routes → research {ontology.governedRoutes.research} • specialize {ontology.governedRoutes.specialize} • evolve {ontology.governedRoutes.evolve} • generalize {ontology.governedRoutes.generalize} • manual-review {ontology.governedRoutes['manual-review']}</span>
|
|
388
|
-
<span className="badge badge-gray">{ontology.enrichedSkillNodes} skills carry explicit brain metadata</span>
|
|
389
|
-
<span className="badge badge-gray">{ontology.annotatedFailures.pressureSignals} failures annotated with pressure signals</span>
|
|
390
385
|
</div>
|
|
391
386
|
</SectionFrame>
|
|
392
387
|
|
|
393
|
-
{unresolved.length > 0 ? (
|
|
394
|
-
<SectionFrame
|
|
395
|
-
eyebrow="Attention"
|
|
396
|
-
title="Unresolved corrections"
|
|
397
|
-
description="These user corrections have been captured but not yet folded back into the skill network."
|
|
398
|
-
tone="yellow"
|
|
399
|
-
className="anchor-target"
|
|
400
|
-
>
|
|
401
|
-
<div id="attention" className="signal-list">
|
|
402
|
-
{unresolved.slice(0, 5).map((failure, index) => (
|
|
403
|
-
<div key={`${failure.id}-${index}`} className="signal-row signal-row-attention">
|
|
404
|
-
<div className="signal-dot" />
|
|
405
|
-
<div style={{ flex: 1 }}>
|
|
406
|
-
<div className="signal-title">
|
|
407
|
-
{failure.userRequest.slice(0, 120)}
|
|
408
|
-
{failure.userRequest.length > 120 ? '…' : ''}
|
|
409
|
-
</div>
|
|
410
|
-
<div className="signal-text">
|
|
411
|
-
Correction: {failure.correction.slice(0, 180)}
|
|
412
|
-
{failure.correction.length > 180 ? '…' : ''}
|
|
413
|
-
</div>
|
|
414
|
-
<div style={{ display: 'flex', gap: 8, flexWrap: 'wrap', marginTop: 10 }}>
|
|
415
|
-
<span className="badge badge-yellow">{failure.correctionType}</span>
|
|
416
|
-
{failure.project ? <span className="badge badge-gray">{failure.project}</span> : null}
|
|
417
|
-
<span className="badge badge-gray">{new Date(failure.timestamp).toLocaleDateString()}</span>
|
|
418
|
-
</div>
|
|
419
|
-
</div>
|
|
420
|
-
</div>
|
|
421
|
-
))}
|
|
422
|
-
{unresolved.length > 5 ? (
|
|
423
|
-
<div className="signal-text" style={{ textAlign: 'center' }}>+{unresolved.length - 5} more unresolved corrections</div>
|
|
424
|
-
) : null}
|
|
425
|
-
</div>
|
|
426
|
-
</SectionFrame>
|
|
427
|
-
) : null}
|
|
428
|
-
|
|
429
388
|
<div className="grid-2">
|
|
430
389
|
<SectionFrame
|
|
431
390
|
eyebrow="Frontier"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "helixevo",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Co-evolving skill and project brain for AI agents, with reliable provider-aware actuation, ontology-aware learning, governed response, rollbackable topology control, bounded proof control, and a premium dashboard.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|