helixevo 0.5.0 → 0.6.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 CHANGED
@@ -4,6 +4,30 @@ All notable changes to HelixEvo are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.6.1] - 2026-03-24
8
+
9
+ ### Added
10
+ - Shared dashboard operator-flow helpers for loop-stage breadcrumbs, contextual surface handoffs, curated release spotlight content, and guide deep-link integration
11
+
12
+ ### Changed
13
+ - Overview, Projects, Research, Co-Evolution, Ontology, and Topology now expose clearer operator breadcrumbs, adjacent control links, and stronger next-step empty-state onboarding
14
+ - Overview release spotlight is now curated through a dedicated helper so post-release guidance stays easy to update and does not silently drift stale
15
+
16
+ ## [0.6.0] - 2026-03-24
17
+
18
+ ### Added
19
+ - Derived ontology adoption bindings for pressure signals, pressure motifs, route rationale, transfer events, and topology review candidates
20
+ - Ontology adoption summaries showing active concepts, binding coverage, semantically influenced routes, and deprecation-sensitive concepts
21
+ - Workflow-shaped dashboard navigation that now groups the product into Operate, Structure, and Reference surfaces
22
+ - New Guide semantic-control section and operator playbooks for frontier refresh, concept promotion, semantic adoption inspection, and careful deprecation
23
+ - New Commands operator recipes for project onboarding, pressure response, ontology adoption, and topology review/apply loops
24
+
25
+ ### Changed
26
+ - `helixevo ontology --status --verbose` now surfaces semantic adoption, active concept usage, unused extensions, and deprecation-risk visibility
27
+ - Overview, Co-Evolution, Ontology, and Topology now show where approved ontology concepts are actively shaping the live control loop
28
+ - The Ontology dashboard surface now reads as a semantic-control cockpit instead of only frontier control
29
+ - Strategy/master-plan docs are being refreshed so the roadmap shifts from governed ontology emergence toward governed ontology adoption and semantic control
30
+
7
31
  ## [0.5.0] - 2026-03-24
8
32
 
9
33
  ### 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 maintains a Pareto frontier of optimal skill configurations.
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.
4
4
 
5
5
  ## How it works
6
6
 
@@ -89,7 +89,7 @@ helixevo dashboard
89
89
  | `helixevo generalize` | Promote cross-project patterns ↑ |
90
90
  | `helixevo specialize --project <name>` | Create project-specific skills ↓ |
91
91
  | `helixevo graph` | View skill network in terminal |
92
- | `helixevo ontology` | Refresh, review, and govern ontology frontier concepts |
92
+ | `helixevo ontology` | Refresh, review, adopt, and inspect ontology concepts plus semantic control coverage |
93
93
  | `helixevo topology` | Prepare, apply, roll back, and inspect reviewed topology execution |
94
94
  | `helixevo research` | Proactive web research for skill improvement |
95
95
  | `helixevo dashboard [--port <n>]` | Open web dashboard, preferring localhost:3847 and falling forward if occupied |
@@ -110,7 +110,9 @@ helixevo graph --mermaid # Open in browser as Mermaid diagram
110
110
  helixevo graph --obsidian ~/vault # Sync to Obsidian vault
111
111
  helixevo graph --rebuild # Re-infer relationships (LLM call)
112
112
  helixevo graph --optimize # Detect structural candidates + refresh topology review queue
113
- helixevo ontology --status # Show ontology kernel / frontier / extension state
113
+ helixevo ontology --status # Show ontology kernel / frontier / extension / adoption state
114
+ helixevo ontology --status --verbose
115
+ # Show top active concepts, unused extensions, and deprecation-sensitive concepts
114
116
  helixevo ontology --refresh # Derive frontier concepts from recurring evidence
115
117
  helixevo ontology --review <id> --decision promote
116
118
  # Promote a reviewed frontier concept into approved extensions
@@ -182,10 +184,10 @@ helixevo dashboard --port 3900
182
184
  ```
183
185
 
184
186
  **Tabs:**
185
- - **Overview** — Premium control cockpit with frontier signals, brain foundation, semantic backbone, pressure counts, ontology frontier visibility, topology review visibility, and prepared/applied structural state
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
186
188
  - **Skill Network** — Interactive graph, premium inspector, co-evolution routing signals, and topology review/execution handoff links
187
- - **Co-Evolution** — Operator cockpit for routed pressure response, governance mode visibility, promotion queues, transfer evidence, and topology handoff
188
- - **Ontology** — Semantic control surface for kernel visibility, frontier concept review, approved ontology extensions, and native ontology change events
189
+ - **Co-Evolution** — Operator cockpit for routed pressure response, governance mode visibility, promotion queues, transfer evidence, semantic route influence, and topology handoff
190
+ - **Ontology** — Semantic control surface for kernel visibility, frontier concept review, approved ontology extensions, adoption coverage, deprecation risk, and native ontology change events
189
191
  - **Topology** — Governance steering plus a persistent operator pipeline for review → prepare → apply → rollback across merge / split / promote / rewire / consolidate candidates
190
192
  - **Projects** — Project intake studio, live project analysis, gap routing, per-project pressure hotspots, and promotion feeders
191
193
  - **Evolution** — Timeline of evolution runs with judge scores, artifact provenance, and activation-aware context
@@ -224,7 +226,8 @@ Failures → Cluster → Propose → Replay → Multi-Judge → Regression → C
224
226
 
225
227
  **Brain foundation:**
226
228
  - **Ontology** defines the stable semantic kernel for skills, projects, tasks, capabilities, artifacts, and mutations.
227
- - **Ontology frontier and extensions** let new semantic concepts emerge as provisional hypotheses, pass explicit review, and become approved extensions without free-form drift.
229
+ - **Ontology frontier and extensions** let new semantic concepts emerge as provisional hypotheses, pass explicit review, become approved extensions, and then appear as active semantic consumers in pressure, routing, transfer, and structural interpretation without free-form drift.
230
+ - **Semantic adoption visibility** shows which approved concepts are unused, active, deprecation-sensitive, or currently influencing live route rationale.
228
231
  - **Activation traces** record which skills and gaps were active during capture and project analysis.
229
232
  - **Pressure signals** turn failures and project gaps into explicit adaptation demand.
230
233
  - **Pressure interventions** record how HelixEvo responded across research, specialize, evolve, generalize, and manual-review lanes.
@@ -6,6 +6,9 @@ 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'
9
12
 
10
13
  type RunState = 'idle' | 'running' | 'success' | 'error' | 'stopped'
11
14
  type CommandName = 'evolve' | 'research' | 'generalize'
@@ -72,7 +75,10 @@ type Summary = {
72
75
  governanceMode: Summary['governance']['activeMode']
73
76
  triggeredBy: string
74
77
  reasons: string[]
78
+ semanticInfluence?: 'none' | 'explanatory' | 'weighted'
79
+ semanticConceptIds?: string[]
75
80
  }
81
+ semanticConceptIds?: string[]
76
82
  }[]
77
83
  promoteQueue: {
78
84
  id: string
@@ -94,11 +100,14 @@ type Summary = {
94
100
  governanceMode: Summary['governance']['activeMode']
95
101
  triggeredBy: string
96
102
  reasons: string[]
103
+ semanticInfluence?: 'none' | 'explanatory' | 'weighted'
104
+ semanticConceptIds?: string[]
97
105
  }
106
+ semanticConceptIds?: string[]
98
107
  }[]
99
108
  recentAddressed: { id: string; kind: string; projectId?: string; capability?: string; description?: string; addressedAt?: string; responseSummary: string; interventionTypes: PressureInterventionType[] }[]
100
109
  recentInterventions: { id: string; interventionType: PressureInterventionType; status: 'started' | 'completed' | 'failed' | 'dry-run'; impact: 'exploratory' | 'structural' | 'resolving' | 'none'; projectId?: string; capabilities?: string[]; reasonSummary: string; completedAt?: string; createdAt: string }[]
101
- recentTransfers: { id: string; timestamp: string; transferType: 'specialist-to-generalist' | 'generalist-to-project' | 'cross-project' | 'domain-transfer'; targetSkillIds?: string[]; capabilityIds?: string[]; motifIds?: string[]; status?: 'candidate' | 'realized' | 'rejected'; summary?: string }[]
110
+ recentTransfers: { id: string; timestamp: string; transferType: 'specialist-to-generalist' | 'generalist-to-project' | 'cross-project' | 'domain-transfer'; targetSkillIds?: string[]; capabilityIds?: string[]; motifIds?: string[]; status?: 'candidate' | 'realized' | 'rejected'; summary?: string; semanticConceptIds?: string[] }[]
102
111
  }
103
112
 
104
113
  interface Props {
@@ -109,6 +118,13 @@ interface Props {
109
118
  reviewOpen: number
110
119
  extensions: number
111
120
  changeEvents: number
121
+ adoption: {
122
+ activeConcepts: number
123
+ unusedExtensions: number
124
+ totalBindings: number
125
+ routesInfluenced: number
126
+ conceptsAtDeprecationRisk: number
127
+ }
112
128
  }
113
129
  }
114
130
  }
@@ -255,6 +271,7 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
255
271
  { label: `${summary.pressureMotifs.promotionReady} promotion-ready motifs`, tone: summary.pressureMotifs.promotionReady > 0 ? 'purple' : 'neutral' },
256
272
  { label: `${summary.topologyReviews.open} topology reviews`, tone: summary.topologyReviews.open > 0 ? 'yellow' : 'green' },
257
273
  { label: `${ontology.ontologyLoop.frontier} ontology frontier`, tone: ontology.ontologyLoop.reviewOpen > 0 ? 'blue' : 'neutral' },
274
+ { label: `${ontology.ontologyLoop.adoption.activeConcepts} active concepts`, tone: ontology.ontologyLoop.adoption.activeConcepts > 0 ? 'green' : 'neutral' },
258
275
  { label: `${summary.recentTransfers.length} recent transfers`, tone: summary.recentTransfers.length > 0 ? 'green' : 'neutral' },
259
276
  { label: formatMode(summary.governance.activeMode), tone: toneForMode(summary.governance.activeMode) },
260
277
  ]}
@@ -269,22 +286,26 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
269
286
  <span className="badge badge-gray">review threshold {(summary.governance.profile.reviewThreshold * 100).toFixed(0)}%</span>
270
287
  </div>
271
288
  </div>
272
- <div style={{ display: 'flex', gap: 10, flexWrap: 'wrap', justifyContent: 'flex-end' }}>
273
- <button onClick={() => handleRun('research')} disabled={runState === 'running'} className="badge badge-blue" style={{ border: 'none', cursor: 'pointer' }}>Run research</button>
274
- <button onClick={() => handleRun('evolve')} disabled={runState === 'running'} className="badge badge-green" style={{ border: 'none', cursor: 'pointer' }}>Run evolve</button>
275
- <button onClick={() => handleRun('generalize')} disabled={runState === 'running'} className="badge badge-purple" style={{ border: 'none', cursor: 'pointer' }}>Run generalize</button>
276
- <Link href="/ontology" className="badge badge-gray">Open ontology</Link>
277
- <Link href="/topology" className="badge badge-gray">Open topology</Link>
289
+ <div style={{ display: 'grid', gap: 10 }}>
290
+ <div style={{ display: 'flex', gap: 10, flexWrap: 'wrap', justifyContent: 'flex-end' }}>
291
+ <button onClick={() => handleRun('research')} disabled={runState === 'running'} className="badge badge-blue" style={{ border: 'none', cursor: 'pointer' }}>Run research</button>
292
+ <button onClick={() => handleRun('evolve')} disabled={runState === 'running'} className="badge badge-green" style={{ border: 'none', cursor: 'pointer' }}>Run evolve</button>
293
+ <button onClick={() => handleRun('generalize')} disabled={runState === 'running'} className="badge badge-purple" style={{ border: 'none', cursor: 'pointer' }}>Run generalize</button>
294
+ </div>
295
+ <SurfaceJumpLinks surface="coevolution" variant="compact" title="Response handoffs" />
278
296
  </div>
279
297
  </div>
280
298
  }
281
299
  />
282
300
 
301
+ <OperatorLoopTrail surface="coevolution" />
302
+
283
303
  <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(180px, 1fr))', gap: 16 }}>
284
304
  <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="!" />
285
305
  <MetricCard label="Promotion-ready motifs" value={summary.pressureMotifs.promotionReady} sublabel={`${summary.pressureMotifs.total} recurring motifs tracked`} tone="purple" icon="⇄" />
286
306
  <MetricCard label="Topology reviews" value={summary.topologyReviews.open} sublabel={`${summary.topologyReviews.accepted} accepted • ${summary.topologyReviews.deferred} deferred`} tone={summary.topologyReviews.open > 0 ? 'yellow' : 'green'} icon="◇" />
287
307
  <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="↑" />
308
+ <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="◎" />
288
309
  <MetricCard label="Recorded interventions" value={summary.pressureInterventions.total} sublabel={`${summary.pressureInterventions.completed} completed • ${summary.pressureInterventions.dryRun} dry-run`} tone="blue" icon="↺" />
289
310
  <MetricCard label="Realized transfers" value={summary.recentTransfers.filter((event) => event.status === 'realized').length} sublabel={`${summary.pressureMotifs.addressed} motifs now addressed`} tone="green" icon="↑" />
290
311
  </div>
@@ -376,6 +397,8 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
376
397
  <span className={`badge badge-${toneForLifecycle(motif.lifecycle)}`}>{motif.lifecycle}</span>
377
398
  <span className="badge badge-purple">recommend {motif.suggestedRoute.route}</span>
378
399
  <span className="badge badge-gray">confidence {(motif.suggestedRoute.confidence * 100).toFixed(0)}%</span>
400
+ {motif.suggestedRoute.semanticInfluence && motif.suggestedRoute.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {motif.suggestedRoute.semanticInfluence}</span> : null}
401
+ {(motif.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${motif.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
379
402
  {motif.projectIds.slice(0, 3).map((projectId) => <span key={`${motif.id}-${projectId}`} className="badge badge-gray">{projectId}</span>)}
380
403
  </div>
381
404
  <div style={{ display: 'grid', gap: 4, marginTop: 10 }}>
@@ -386,10 +409,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
386
409
  </div>
387
410
  </div>
388
411
  )) : (
389
- <div className="empty-state" style={{ padding: 24 }}>
390
- <div className="empty-state-title">No promotion-ready motifs yet</div>
391
- <div className="empty-state-desc">Recurring cross-project demand will appear here once the same pressure region repeats often enough to justify generalization.</div>
392
- </div>
412
+ <NextStepEmptyState
413
+ title="No promotion-ready motifs yet"
414
+ 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."
415
+ command="helixevo project-setup <path>"
416
+ pageLink={{ label: 'Open Projects', href: '/projects', tone: 'blue' }}
417
+ guideLink={{ label: 'Guide · Adaptation Loop', anchor: 'loop', tone: 'purple' }}
418
+ />
393
419
  )}
394
420
  </div>
395
421
  </SectionFrame>
@@ -413,10 +439,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
413
439
  <div className="metric-card-sublabel">{lane.resolving} resolving • {lane.exploratory} exploratory • {lane.none} non-resolving</div>
414
440
  </div>
415
441
  )) : (
416
- <div className="empty-state" style={{ gridColumn: '1 / -1', padding: 24 }}>
417
- <div className="empty-state-title">No intervention records yet</div>
418
- <div className="empty-state-desc">Run research, evolve, or generalize to start populating the governed response ledger.</div>
419
- </div>
442
+ <NextStepEmptyState
443
+ title="No intervention records yet"
444
+ description="The governed response ledger will start populating once pressure is routed into live research, evolve, or generalize work."
445
+ command="helixevo evolve"
446
+ pageLink={{ label: 'Open Research', href: '/research', tone: 'blue' }}
447
+ guideLink={{ label: 'Guide · Surface Map', anchor: 'surfaces', tone: 'purple' }}
448
+ />
420
449
  )}
421
450
  </div>
422
451
  </SectionFrame>
@@ -455,10 +484,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
455
484
  </div>
456
485
  </div>
457
486
  )) : (
458
- <div className="empty-state" style={{ padding: 24 }}>
459
- <div className="empty-state-title">No project response hotspots yet</div>
460
- <div className="empty-state-desc">Project-linked pressure will appear here once failures and project analysis produce current demand.</div>
461
- </div>
487
+ <NextStepEmptyState
488
+ title="No project response hotspots yet"
489
+ description="Project-linked pressure will appear here once failures and project analysis produce current demand for the response loop to act on."
490
+ command="helixevo project-setup <path>"
491
+ pageLink={{ label: 'Open Projects', href: '/projects', tone: 'blue' }}
492
+ guideLink={{ label: 'Guide · Quick Start', anchor: 'quickstart', tone: 'purple' }}
493
+ />
462
494
  )}
463
495
  </div>
464
496
  </SectionFrame>
@@ -477,16 +509,20 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
477
509
  <div className="summary-row-meta">{event.transferType} • {formatDate(event.timestamp)}</div>
478
510
  <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap', marginTop: 8 }}>
479
511
  <span className={`badge badge-${event.status === 'realized' ? 'green' : event.status === 'candidate' ? 'purple' : 'gray'}`}>{event.status ?? 'candidate'}</span>
512
+ {(event.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${event.id}-${conceptId}`} className="badge badge-green">{conceptId}</span>)}
480
513
  {(event.targetSkillIds ?? []).slice(0, 2).map((skill) => <span key={`${event.id}-${skill}`} className="badge badge-gray">{skill}</span>)}
481
514
  {(event.capabilityIds ?? []).slice(0, 2).map((capability) => <span key={`${event.id}-${capability}`} className="badge badge-gray">{capability}</span>)}
482
515
  </div>
483
516
  </div>
484
517
  </div>
485
518
  )) : (
486
- <div className="empty-state" style={{ padding: 24 }}>
487
- <div className="empty-state-title">No transfer evidence yet</div>
488
- <div className="empty-state-desc">Once recurring pressure is promoted into reusable generalized skill knowledge, realized transfer evidence will appear here.</div>
489
- </div>
519
+ <NextStepEmptyState
520
+ title="No transfer evidence yet"
521
+ description="Transfer evidence appears after recurring pressure is promoted into reusable generalized knowledge rather than staying trapped in local fixes."
522
+ command="helixevo generalize"
523
+ pageLink={{ label: 'Open Ontology', href: '/ontology', tone: 'green' }}
524
+ guideLink={{ label: 'Guide · Semantic Control', anchor: 'semanticcontrol', tone: 'purple' }}
525
+ />
490
526
  )}
491
527
  </div>
492
528
  </SectionFrame>
@@ -510,6 +546,8 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
510
546
  {signal.projectId ? <span className="badge badge-gray">{signal.projectId}</span> : null}
511
547
  {signal.routeRecommendation ? <span className={`badge badge-${toneForRoute(signal.routeRecommendation.route)}`}>recommend {signal.routeRecommendation.route}</span> : null}
512
548
  {signal.routeRecommendation ? <span className="badge badge-gray">{signal.routeRecommendation.scope}</span> : null}
549
+ {signal.routeRecommendation?.semanticInfluence && signal.routeRecommendation.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {signal.routeRecommendation.semanticInfluence}</span> : null}
550
+ {(signal.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${signal.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
513
551
  {signal.interventionTypes.map((type) => <span key={`${signal.id}-${type}`} className="badge badge-gray">{type}</span>)}
514
552
  </div>
515
553
  {signal.routeRecommendation?.reasons?.length ? (
@@ -528,10 +566,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
528
566
  </div>
529
567
  </div>
530
568
  )) : (
531
- <div className="empty-state" style={{ padding: 24 }}>
532
- <div className="empty-state-title">No open pressure backlog</div>
533
- <div className="empty-state-desc">Once pressure enters the system, open and in-progress items will be queued here with governed routing recommendations.</div>
534
- </div>
569
+ <NextStepEmptyState
570
+ title="No open pressure backlog"
571
+ description="Open and in-progress pressure will queue here once HelixEvo is observing real demand from projects, failures, or recurring motifs."
572
+ command="helixevo watch --project <name>"
573
+ pageLink={{ label: 'Open Projects', href: '/projects', tone: 'blue' }}
574
+ guideLink={{ label: 'Guide · Adaptation Loop', anchor: 'loop', tone: 'purple' }}
575
+ />
535
576
  )}
536
577
  </div>
537
578
  </SectionFrame>
@@ -558,10 +599,13 @@ export default function CoEvolutionClient({ summary, ontology }: Props) {
558
599
  </div>
559
600
  </div>
560
601
  )) : (
561
- <div className="empty-state" style={{ padding: 24 }}>
562
- <div className="empty-state-title">No response records yet</div>
563
- <div className="empty-state-desc">Command-level intervention records will appear here once the response loop starts operating.</div>
564
- </div>
602
+ <NextStepEmptyState
603
+ title="No response records yet"
604
+ description="Command-level intervention records will appear here once the response loop starts operating across research, evolve, generalize, or manual review."
605
+ command="helixevo research"
606
+ pageLink={{ label: 'Open Ontology', href: '/ontology', tone: 'green' }}
607
+ guideLink={{ label: 'Guide · Surface Map', anchor: 'surfaces', tone: 'purple' }}
608
+ />
565
609
  )}
566
610
  </div>
567
611
  </SectionFrame>
@@ -133,26 +133,27 @@ const COMMANDS: CommandInfo[] = [
133
133
  },
134
134
  {
135
135
  name: 'ontology',
136
- description: 'Govern the ontology frontier explicitly. Refresh provisional concepts from recurring evidence, review them with promote/reject/defer decisions, and deprecate approved extensions without allowing free-form semantic drift.',
136
+ description: 'Govern the ontology frontier explicitly and inspect semantic adoption. Refresh provisional concepts from recurring evidence, review them with promote/reject/defer decisions, and see which approved concepts are actively shaping pressure, routing, transfer, and topology interpretation.',
137
137
  usage: 'helixevo ontology [options]',
138
138
  examples: [
139
- { cmd: 'helixevo ontology --status', desc: 'Show kernel, frontier, extension, and change-log counts' },
139
+ { cmd: 'helixevo ontology --status', desc: 'Show kernel, frontier, extension, adoption, and change-log counts' },
140
+ { cmd: 'helixevo ontology --status --verbose', desc: 'Show top active concepts, unused extensions, and deprecation-sensitive concepts' },
140
141
  { cmd: 'helixevo ontology --refresh', desc: 'Derive frontier concepts from recurring capability, pressure, and topology evidence' },
141
142
  { cmd: 'helixevo ontology --review ontology_capability_ui --decision promote', desc: 'Promote a frontier concept into approved ontology extensions' },
142
- { cmd: 'helixevo ontology --deprecate ontology_capability_ui', desc: 'Deprecate an approved ontology extension' },
143
+ { cmd: 'helixevo ontology --deprecate ontology_capability_ui', desc: 'Deprecate an approved ontology extension with consumer-risk visibility' },
143
144
  ],
144
145
  options: [
145
- { flag: '--status', desc: 'Show ontology kernel, frontier, extension, and review state' },
146
+ { flag: '--status', desc: 'Show ontology kernel, frontier, extension, adoption, and review state' },
146
147
  { flag: '--refresh', desc: 'Refresh frontier concepts from recurring evidence' },
147
148
  { flag: '--review <conceptId>', desc: 'Review a frontier concept' },
148
149
  { flag: '--decision <promote|reject|defer>', desc: 'Decision for --review' },
149
150
  { flag: '--rationale <text>', desc: 'Optional review or deprecate rationale' },
150
151
  { flag: '--deprecate <conceptId>', desc: 'Deprecate an approved ontology extension' },
151
- { flag: '--verbose', desc: 'Show detailed frontier concepts, extensions, and change events' },
152
+ { flag: '--verbose', desc: 'Show detailed frontier concepts, active semantic consumers, and ontology changes' },
152
153
  ],
153
154
  category: 'network',
154
155
  needsLLM: false,
155
- note: 'Milestone 8 keeps ontology growth governed: concepts begin in the frontier, require explicit review, and only then become approved extensions.',
156
+ note: 'Milestone 9 keeps ontology growth governed while also showing semantic adoption: concepts begin in the frontier, become approved extensions through review, and then become visible as live consumers inside the control loop.',
156
157
  },
157
158
  {
158
159
  name: 'topology',
@@ -315,6 +316,33 @@ const WORKFLOW = [
315
316
  { label: 'health', desc: 'Assess quality', tone: 'blue' as const },
316
317
  ]
317
318
 
319
+ const WORKFLOW_RECIPES = [
320
+ {
321
+ title: 'New project onboarding',
322
+ tone: 'blue' as const,
323
+ summary: 'Stand up project context, detect capability gaps, and create the first routed pressure picture.',
324
+ steps: ['helixevo project-setup <path>', 'helixevo research --project <path>', 'helixevo specialize --project <name>'],
325
+ },
326
+ {
327
+ title: 'Pressure-response loop',
328
+ tone: 'purple' as const,
329
+ summary: 'Capture real demand, let governance route the response, then apply the right lane.',
330
+ steps: ['helixevo watch --project <name>', 'helixevo evolve', 'helixevo generalize'],
331
+ },
332
+ {
333
+ title: 'Ontology adoption loop',
334
+ tone: 'green' as const,
335
+ summary: 'Move from recurring evidence to approved concepts and inspect live semantic adoption.',
336
+ steps: ['helixevo ontology --refresh', 'helixevo ontology --review <conceptId> --decision promote', 'helixevo ontology --status --verbose'],
337
+ },
338
+ {
339
+ title: 'Topology review / apply loop',
340
+ tone: 'yellow' as const,
341
+ summary: 'Refresh structural review candidates, prepare accepted safe plans, apply them, and keep rollback available.',
342
+ steps: ['helixevo graph --optimize', 'helixevo topology --prepare <candidateId>', 'helixevo topology --apply <planId>'],
343
+ },
344
+ ]
345
+
318
346
  const CATEGORIES: Array<{
319
347
  id: CommandInfo['category']
320
348
  label: string
@@ -323,7 +351,7 @@ const CATEGORIES: Array<{
323
351
  }> = [
324
352
  { id: 'core', label: 'Core workflow', tone: 'purple', description: 'The commands that initialize HelixEvo and keep it learning continuously.' },
325
353
  { id: 'evolution', label: 'Evolution', tone: 'green', description: 'Mutation, promotion, and specialization controls for active skill improvement.' },
326
- { id: 'network', label: 'Network & research', tone: 'blue', description: 'Graph maintenance, discovery, and relationship mapping across the skill ecosystem.' },
354
+ { id: 'network', label: 'Structure, ontology & research', tone: 'blue', description: 'Graph maintenance, semantic control, structural review, and discovery across the skill ecosystem.' },
327
355
  { id: 'analysis', label: 'Analysis & reports', tone: 'yellow', description: 'Operational reads on system quality, trends, reports, and health.' },
328
356
  { id: 'system', label: 'System', tone: 'neutral', description: 'Supporting commands for capture, dashboard access, and environment-level actions.' },
329
357
  ]
@@ -361,8 +389,8 @@ export default function CommandsPage() {
361
389
  actions={
362
390
  <div className="hero-note-card">
363
391
  <div className="hero-note-label">Recommended operating loop</div>
364
- <div className="hero-note-title">Init → Watch → EvolveGeneralizeGraph → Health</div>
365
- <div className="hero-note-copy">Use the Commands page as the practical bridge between HelixEvo’s CLI and the premium dashboard cockpit.</div>
392
+ <div className="hero-note-title">Project Setup → Watch → Co-EvolutionOntologyTopology</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>
366
394
  </div>
367
395
  }
368
396
  />
@@ -402,6 +430,32 @@ export default function CommandsPage() {
402
430
  </div>
403
431
  </SectionFrame>
404
432
 
433
+ <SectionFrame
434
+ eyebrow="Operator recipes"
435
+ 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."
437
+ tone="blue"
438
+ >
439
+ <div className="grid-2" style={{ gap: 14 }}>
440
+ {WORKFLOW_RECIPES.map((recipe) => (
441
+ <div key={recipe.title} className="card" style={{ padding: '18px 18px 16px' }}>
442
+ <div style={{ display: 'flex', alignItems: 'center', gap: 8, flexWrap: 'wrap', marginBottom: 8 }}>
443
+ <span className={`hero-chip hero-chip-${recipe.tone}`}>{recipe.title}</span>
444
+ </div>
445
+ <div style={{ fontSize: 12.5, color: 'var(--text-dim)', lineHeight: 1.65, marginBottom: 12 }}>{recipe.summary}</div>
446
+ <div style={{ display: 'grid', gap: 8 }}>
447
+ {recipe.steps.map((step, index) => (
448
+ <div key={step} style={{ padding: '10px 12px', borderRadius: 14, background: 'rgba(255,255,255,0.72)', border: '1px solid var(--border)' }}>
449
+ <div style={{ fontSize: 10.5, fontWeight: 700, color: 'var(--text-muted)', textTransform: 'uppercase', letterSpacing: 0.9, marginBottom: 4 }}>Step {index + 1}</div>
450
+ <code style={{ fontFamily: 'var(--font-mono)', fontSize: 11.5, color: 'var(--text)' }}>$ {step}</code>
451
+ </div>
452
+ ))}
453
+ </div>
454
+ </div>
455
+ ))}
456
+ </div>
457
+ </SectionFrame>
458
+
405
459
  {CATEGORIES.map(category => {
406
460
  const commands = COMMANDS.filter(command => command.category === category.id)
407
461
  if (commands.length === 0) return null
@@ -11,6 +11,7 @@ const TOC = [
11
11
  { id: 'architecture', label: 'Architecture', icon: '◎' },
12
12
  { id: 'brainstack', label: 'Brain Stack', icon: '◈' },
13
13
  { id: 'loop', label: 'Adaptation Loop', icon: '↺' },
14
+ { id: 'semanticcontrol', label: 'Semantic Control', icon: '◉' },
14
15
  { id: 'surfaces', label: 'Surface Map', icon: '▦' },
15
16
  { id: 'watch', label: 'Always-On Learning', icon: '⚡' },
16
17
  { id: 'evolution', label: 'Evolution Pipeline', icon: '⟳' },
@@ -246,6 +247,7 @@ export default function GuidePage() {
246
247
  <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap' }}>
247
248
  <a href="#quickstart" className="hero-chip hero-chip-blue" style={{ textDecoration: 'none' }}>Quick Start</a>
248
249
  <a href="#brainstack" className="hero-chip hero-chip-green" style={{ textDecoration: 'none' }}>Brain Stack</a>
250
+ <a href="#semanticcontrol" className="hero-chip hero-chip-blue" style={{ textDecoration: 'none' }}>Semantic Control</a>
249
251
  <a href="#surfaces" className="hero-chip hero-chip-purple" style={{ textDecoration: 'none' }}>Surface Map</a>
250
252
  </div>
251
253
  </div>
@@ -277,6 +279,7 @@ export default function GuidePage() {
277
279
  <span className="hero-chip hero-chip-blue">v{VERSION}</span>
278
280
  <span className="hero-chip hero-chip-purple">{TOC.length} sections</span>
279
281
  <span className="hero-chip hero-chip-green">operator path + theory path</span>
282
+ <span className="hero-chip hero-chip-blue">semantic control reference</span>
280
283
  <span className="hero-chip hero-chip-yellow">governed plasticity reference</span>
281
284
  </div>
282
285
 
@@ -296,6 +299,7 @@ export default function GuidePage() {
296
299
  <div style={{ display: 'flex', gap: 8, flexWrap: 'wrap' }}>
297
300
  <a href="#quickstart" className="hero-chip hero-chip-blue" style={{ textDecoration: 'none' }}>Quick Start</a>
298
301
  <a href="#brainstack" className="hero-chip hero-chip-purple" style={{ textDecoration: 'none' }}>Brain Stack</a>
302
+ <a href="#semanticcontrol" className="hero-chip hero-chip-blue" style={{ textDecoration: 'none' }}>Semantic Control</a>
299
303
  <a href="#surfaces" className="hero-chip hero-chip-green" style={{ textDecoration: 'none' }}>Surface Map</a>
300
304
  <a href="#maturity" className="hero-chip hero-chip-yellow" style={{ textDecoration: 'none' }}>Safety</a>
301
305
  </div>
@@ -469,7 +473,7 @@ helixevo topology --status`}</Code>
469
473
  },
470
474
  {
471
475
  cmd: 'helixevo ontology',
472
- desc: 'Govern the ontology frontier explicitly. Refresh concept hypotheses from recurring evidence, review them with promote/reject/defer decisions, and deprecate approved extensions without allowing free-form semantic drift.',
476
+ desc: 'Govern the ontology frontier explicitly and inspect semantic adoption. Refresh concept hypotheses from recurring evidence, review them with promote/reject/defer decisions, and see which approved concepts are actively shaping pressure, routing, transfer, and topology interpretation.',
473
477
  flags: ['--status', '--refresh', '--review <conceptId>', '--decision <promote|reject|defer>', '--rationale <text>', '--deprecate <conceptId>', '--verbose'],
474
478
  },
475
479
  {
@@ -536,7 +540,7 @@ helixevo topology --status`}</Code>
536
540
  <h3 className="guide-h3">Brain foundation</h3>
537
541
  <div className="grid-2" style={{ gap: 12, marginBottom: 20 }}>
538
542
  {[
539
- ['Ontology', 'var(--blue)', 'Stable semantic kernel for skills, projects, tasks, capabilities, artifacts, and mutations.'],
543
+ ['Ontology', 'var(--blue)', 'Stable semantic kernel plus approved extensions that can now become active semantic consumers in pressure, routing, transfer, and topology interpretation.'],
540
544
  ['Activation traces', 'var(--green)', 'Observation memory showing which skills and gaps were active when capture or project analysis occurred.'],
541
545
  ['Pressure signals', 'var(--yellow)', 'Explicit adaptation demand derived from failures and project gaps.'],
542
546
  ['Interventions', 'var(--purple)', 'The response ledger across research, specialize, evolve, generalize, and manual-review lanes.'],
@@ -570,8 +574,8 @@ helixevo topology --status`}</Code>
570
574
  {
571
575
  title: '1. Semantic layer',
572
576
  color: 'var(--blue)',
573
- desc: 'Ontology and invariants define what kinds of things HelixEvo can talk about and persist truthfully.',
574
- where: 'Visible in: ontology-aware graph summaries, skill metadata, and brain foundation summaries.'
577
+ desc: 'Ontology and invariants define what kinds of things HelixEvo can talk about and persist truthfully, and approved extensions can now feed back into live interpretation rather than remaining passive review outcomes.',
578
+ where: 'Visible in: ontology-aware graph summaries, semantic adoption counts, route rationale, and brain foundation summaries.'
575
579
  },
576
580
  {
577
581
  title: '2. Observation layer',
@@ -666,14 +670,69 @@ helixevo topology --status`}</Code>
666
670
  </Callout>
667
671
  </Section>
668
672
 
673
+
674
+ {/* ─── Semantic Control ─── */}
675
+ <Section id="semanticcontrol" title="Ontology Adoption + Semantic Control" subtitle="Milestone 8 made ontology reviewable; Milestone 9 made approved concepts behaviorally meaningful inside the live control loop.">
676
+ <p className="guide-text">
677
+ The key post-M9 change is that approved ontology extensions are no longer just semantic ledger entries. They can now bind into
678
+ recurring pressure, motifs, route rationale, transfer interpretation, and topology review context while still remaining subordinate
679
+ to governance and evidence.
680
+ </p>
681
+ <p className="guide-text">
682
+ A concise way to think about the ontology lifecycle now is: <strong>frontier hypothesis → review decision → approved extension → active semantic consumer → optional deprecation</strong>.
683
+ Promotion is what turns reviewed semantics into live semantic control. Deprecation is what safely withdraws that influence when the concept is no longer trustworthy or useful.
684
+ </p>
685
+ <div className="grid-2" style={{ gap: 12, marginBottom: 18 }}>
686
+ {[
687
+ ['Emergence', 'var(--blue)', 'Recurring evidence creates frontier concepts, but frontier creation alone does not yet imply live semantic adoption.'],
688
+ ['Adoption', 'var(--green)', 'Promoted concepts begin appearing as active semantic consumers across signals, motifs, and route rationale.'],
689
+ ['Bounded influence', 'var(--yellow)', 'Ontology can sharpen explanation and confidence inside the existing governance envelope; it does not bypass safety or invent arbitrary routes.'],
690
+ ['Withdrawal', 'var(--purple)', 'Deprecation remains explicit and operator-visible, with consumer warnings before semantic influence is retired.'],
691
+ ].map(([title, color, desc]) => (
692
+ <div key={String(title)} className="guide-dimension-card" style={{ borderLeftColor: String(color) }}>
693
+ <div style={{ fontSize: 12, fontWeight: 700, color: String(color), letterSpacing: 0.2 }}>{title}</div>
694
+ <div style={{ fontSize: 12, color: 'var(--text-dim)', marginTop: 6, lineHeight: 1.6 }}>{desc}</div>
695
+ </div>
696
+ ))}
697
+ </div>
698
+ <h3 className="guide-h3">Operator playbooks</h3>
699
+ <div className="grid-3" style={{ gap: 12, marginBottom: 18 }}>
700
+ <div className="card" style={{ padding: '16px 16px 14px' }}>
701
+ <div style={{ fontSize: 12, fontWeight: 700, color: 'var(--blue)', marginBottom: 8 }}>Recurring pressure → adoption</div>
702
+ <Code title="Terminal">{`helixevo ontology --refresh
703
+ helixevo ontology --review <conceptId> --decision promote
704
+ helixevo ontology --status --verbose`}</Code>
705
+ <div style={{ fontSize: 12, color: 'var(--text-dim)', lineHeight: 1.6 }}>Use this when recurring pressure or motif evidence looks stable enough to deserve an approved semantic family.</div>
706
+ </div>
707
+ <div className="card" style={{ padding: '16px 16px 14px' }}>
708
+ <div style={{ fontSize: 12, fontWeight: 700, color: 'var(--green)', marginBottom: 8 }}>Check live semantic consumers</div>
709
+ <div style={{ fontSize: 12, color: 'var(--text-dim)', lineHeight: 1.6, marginBottom: 10 }}>Compare these surfaces together:</div>
710
+ <ul className="guide-list" style={{ marginBottom: 0 }}>
711
+ <li><strong>/ontology</strong> for adoption counts, unused extensions, and deprecation-sensitive concepts</li>
712
+ <li><strong>/coevolution</strong> for semantically influenced routes and backlog rationale</li>
713
+ <li><strong>/topology</strong> when structural review candidates start clustering around the same semantic family</li>
714
+ </ul>
715
+ </div>
716
+ <div className="card" style={{ padding: '16px 16px 14px' }}>
717
+ <div style={{ fontSize: 12, fontWeight: 700, color: 'var(--yellow)', marginBottom: 8 }}>Deprecate carefully</div>
718
+ <Code title="Terminal">{`helixevo ontology --status --verbose
719
+ helixevo ontology --deprecate <conceptId>`}</Code>
720
+ <div style={{ fontSize: 12, color: 'var(--text-dim)', lineHeight: 1.6 }}>Always inspect active semantic consumers first. A deprecation warning means the concept is still shaping the live control loop and should be retired intentionally.</div>
721
+ </div>
722
+ </div>
723
+ <Callout type="info">
724
+ The safest mental model is: <strong>M8 governs semantic emergence, M9 governs semantic adoption</strong>. Together they create a semantic loop where concepts can emerge, be reviewed, influence live cognition, and then be retired without silent drift.
725
+ </Callout>
726
+ </Section>
727
+
669
728
  {/* ─── Surface Map ─── */}
670
729
  <Section id="surfaces" title="Dashboard Surface Map" subtitle="Each tab is a different control or observability surface for the same brain.">
671
730
  <div className="grid-2" style={{ gap: 12 }}>
672
731
  {[
673
732
  ['Overview', 'var(--blue)', 'Top-level cockpit for frontier state, brain foundation, pressure totals, topology review counts, and prepared/applied structural state.'],
674
- ['Co-Evolution', 'var(--purple)', 'The response cockpit. Use it to inspect routed pressure, governance mode, promotion queue, interventions, and transfer evidence.'],
733
+ ['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.'],
675
734
  ['Skill Network', 'var(--green)', 'Graph-level understanding: relationships, co-evolution signals, inspector context, and structural handoff links.'],
676
- ['Ontology', 'var(--blue)', 'Semantic control surface for kernel visibility, frontier review, approved extensions, and ontology change events.'],
735
+ ['Ontology', 'var(--blue)', 'Semantic control surface for kernel visibility, frontier review, approved extensions, semantic adoption coverage, consumer summaries, and ontology change events.'],
677
736
  ['Topology', 'var(--yellow)', 'Governed plasticity surface for review decisions, accepted-ready queue, prepared plans, apply, rollback, and execution history.'],
678
737
  ['Projects', 'var(--blue)', 'Project intake and project-aware pressure surface. Best for capability gaps, activation traces, and promotion feeders.'],
679
738
  ['Research', 'var(--purple)', 'Discovery-oriented view grounded in current pressure and routed recommendations rather than disconnected idea generation.'],
@@ -687,8 +746,8 @@ helixevo topology --status`}</Code>
687
746
  ))}
688
747
  </div>
689
748
  <Callout type="tip">
690
- If you are debugging current state, the best sequence is usually: <strong>Overview → Co-Evolution → Topology → Skill Network → Projects / Research</strong>.
691
- That path mirrors the stack from summary → routed demand → structural review/execution → graph context → project or discovery detail.
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.
692
751
  </Callout>
693
752
  </Section>
694
753
 
@@ -1103,7 +1162,7 @@ generation: 3
1103
1162
  {[
1104
1163
  ['Observation memory', 'var(--blue)', 'failures.jsonl + activation-traces.jsonl capture what happened, where it happened, and which skills were active.'],
1105
1164
  ['Pressure & response memory', 'var(--yellow)', 'pressure-signals.jsonl + pressure-interventions.jsonl + transfer-events.jsonl describe demand, routing, and reusable promotion evidence.'],
1106
- ['Ontology frontier memory', 'var(--blue)', 'ontology/kernel.json + ontology/frontier.json + ontology/extensions.json + ontology/reviews.jsonl + ontology/change-log.jsonl preserve semantic kernel state, provisional concepts, approved extensions, and review/change lineage.'],
1165
+ ['Ontology frontier memory', 'var(--blue)', 'ontology/kernel.json + ontology/frontier.json + ontology/extensions.json + ontology/reviews.jsonl + ontology/change-log.jsonl preserve semantic kernel state, provisional concepts, approved extensions, and review/change lineage while semantic adoption is derived from active runtime/control objects rather than a parallel ontology-usage ledger.'],
1107
1166
  ['Governance & review memory', 'var(--purple)', 'governance-state.json + topology-review-candidates.json + topology-review-decisions.jsonl preserve why structural decisions are being made.'],
1108
1167
  ['Topology execution memory', 'var(--green)', 'topology-overrides.json + topology-snapshots.json + topology-apply-plans.json + topology-executions.jsonl + topology-artifacts.jsonl preserve reviewed structural execution and rollback.'],
1109
1168
  ['Evaluation & frontier memory', 'var(--blue)', 'evolution-history.json + evolution-artifacts.jsonl + skill-tests.jsonl + canary-registry.json + frontier.json preserve proof, guardrails, and best configurations.'],