helixevo 0.4.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@ All notable changes to HelixEvo are documented here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.6.0] - 2026-03-24
8
+
9
+ ### Added
10
+ - Derived ontology adoption bindings for pressure signals, pressure motifs, route rationale, transfer events, and topology review candidates
11
+ - Ontology adoption summaries showing active concepts, binding coverage, semantically influenced routes, and deprecation-sensitive concepts
12
+ - Workflow-shaped dashboard navigation that now groups the product into Operate, Structure, and Reference surfaces
13
+ - New Guide semantic-control section and operator playbooks for frontier refresh, concept promotion, semantic adoption inspection, and careful deprecation
14
+ - New Commands operator recipes for project onboarding, pressure response, ontology adoption, and topology review/apply loops
15
+
16
+ ### Changed
17
+ - `helixevo ontology --status --verbose` now surfaces semantic adoption, active concept usage, unused extensions, and deprecation-risk visibility
18
+ - Overview, Co-Evolution, Ontology, and Topology now show where approved ontology concepts are actively shaping the live control loop
19
+ - The Ontology dashboard surface now reads as a semantic-control cockpit instead of only frontier control
20
+ - Strategy/master-plan docs are being refreshed so the roadmap shifts from governed ontology emergence toward governed ontology adoption and semantic control
21
+
22
+ ## [0.5.0] - 2026-03-24
23
+
24
+ ### Added
25
+ - New `helixevo ontology` command for ontology frontier status, refresh, review, and deprecation control
26
+ - New `~/.helix/ontology/` persistence model with kernel snapshot, frontier concepts, approved extensions, review decisions, and native ontology change events
27
+ - New `/ontology` dashboard route and `/api/ontology` operator control surface for governed semantic review
28
+
29
+ ### Changed
30
+ - Overview semantic-backbone summaries now expose hybrid native + derived ontology state instead of only compatibility-era framing
31
+ - Dashboard Guide, Commands, and README now document ontology frontier control alongside co-evolution and topology control
32
+
7
33
  ## [0.4.1] - 2026-03-24
8
34
 
9
35
  ### 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, 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,6 +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, adopt, and inspect ontology concepts plus semantic control coverage |
92
93
  | `helixevo topology` | Prepare, apply, roll back, and inspect reviewed topology execution |
93
94
  | `helixevo research` | Proactive web research for skill improvement |
94
95
  | `helixevo dashboard [--port <n>]` | Open web dashboard, preferring localhost:3847 and falling forward if occupied |
@@ -109,6 +110,12 @@ helixevo graph --mermaid # Open in browser as Mermaid diagram
109
110
  helixevo graph --obsidian ~/vault # Sync to Obsidian vault
110
111
  helixevo graph --rebuild # Re-infer relationships (LLM call)
111
112
  helixevo graph --optimize # Detect structural candidates + refresh topology review queue
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
116
+ helixevo ontology --refresh # Derive frontier concepts from recurring evidence
117
+ helixevo ontology --review <id> --decision promote
118
+ # Promote a reviewed frontier concept into approved extensions
112
119
  helixevo topology --status # Show reviewed topology execution state
113
120
  helixevo topology --prepare <id> # Prepare an accepted topology candidate
114
121
  helixevo topology --apply <id> # Apply a safe prepared topology plan
@@ -144,7 +151,13 @@ All data is stored in `~/.helix/`:
144
151
  ├── topology-apply-plans.json # Prepared reviewed topology plans
145
152
  ├── topology-executions.jsonl # Prepared/applied/rolled-back execution ledger
146
153
  ├── topology-artifacts.jsonl # Evidence artifacts for reviewed structural execution
147
- ├── evolution-artifacts.jsonl # Evolution evidence artifacts per proposal/iteration
154
+ ├── evolution-artifacts.jsonl # Evolution + ontology-review evidence artifacts
155
+ ├── ontology/
156
+ │ ├── kernel.json # Materialized ontology kernel snapshot
157
+ │ ├── extensions.json # Approved ontology extensions
158
+ │ ├── frontier.json # Provisional frontier concepts awaiting review
159
+ │ ├── reviews.jsonl # Ontology review decisions
160
+ │ └── change-log.jsonl # Native ontology change events
148
161
  ├── frontier.json # Pareto frontier (top-k configurations)
149
162
  ├── evolution-history.json # All evolution runs + proposals
150
163
  ├── skill-tests.jsonl # Regression test cases
@@ -171,9 +184,10 @@ helixevo dashboard --port 3900
171
184
  ```
172
185
 
173
186
  **Tabs:**
174
- - **Overview** — Premium control cockpit with frontier signals, brain foundation, semantic backbone, pressure counts, 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
175
188
  - **Skill Network** — Interactive graph, premium inspector, co-evolution routing signals, and topology review/execution handoff links
176
- - **Co-Evolution** — Operator cockpit for routed pressure response, governance mode visibility, promotion queues, transfer evidence, and topology handoff
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
177
191
  - **Topology** — Governance steering plus a persistent operator pipeline for review → prepare → apply → rollback across merge / split / promote / rewire / consolidate candidates
178
192
  - **Projects** — Project intake studio, live project analysis, gap routing, per-project pressure hotspots, and promotion feeders
179
193
  - **Evolution** — Timeline of evolution runs with judge scores, artifact provenance, and activation-aware context
@@ -212,6 +226,8 @@ Failures → Cluster → Propose → Replay → Multi-Judge → Regression → C
212
226
 
213
227
  **Brain foundation:**
214
228
  - **Ontology** defines the stable semantic kernel for skills, projects, tasks, capabilities, artifacts, and mutations.
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.
215
231
  - **Activation traces** record which skills and gaps were active during capture and project analysis.
216
232
  - **Pressure signals** turn failures and project gaps into explicit adaptation demand.
217
233
  - **Pressure interventions** record how HelixEvo responded across research, specialize, evolve, generalize, and manual-review lanes.
@@ -0,0 +1,89 @@
1
+ import { NextResponse } from 'next/server'
2
+ import { spawn } from 'child_process'
3
+ import { existsSync } from 'fs'
4
+ import { join } from 'path'
5
+ import { loadOntologyControlSummary } from '@/lib/data'
6
+
7
+ export const dynamic = 'force-dynamic'
8
+
9
+ function resolveOntologyRunner(): { cmd: string; argsPrefix: string[] } {
10
+ const candidates = [
11
+ join(process.cwd(), '..', 'dist', 'cli.js'),
12
+ join(process.cwd(), 'dist', 'cli.js'),
13
+ ]
14
+
15
+ for (const candidate of candidates) {
16
+ if (existsSync(candidate)) return { cmd: process.execPath, argsPrefix: [candidate] }
17
+ }
18
+
19
+ return { cmd: 'helixevo', argsPrefix: [] }
20
+ }
21
+
22
+ function runOntologyCommand(args: string[]): Promise<{ success: boolean; output: string }> {
23
+ return new Promise((resolve) => {
24
+ const runner = resolveOntologyRunner()
25
+ const child = spawn(runner.cmd, [...runner.argsPrefix, 'ontology', ...args], {
26
+ env: { ...process.env },
27
+ stdio: ['ignore', 'pipe', 'pipe'],
28
+ })
29
+
30
+ let output = ''
31
+ child.stdout?.on('data', (chunk: Buffer) => {
32
+ output += chunk.toString()
33
+ })
34
+ child.stderr?.on('data', (chunk: Buffer) => {
35
+ output += chunk.toString()
36
+ })
37
+ child.on('close', (code) => {
38
+ resolve({ success: code === 0, output })
39
+ })
40
+ child.on('error', (err) => {
41
+ resolve({ success: false, output: `Error: ${err.message}` })
42
+ })
43
+ })
44
+ }
45
+
46
+ export async function GET() {
47
+ return NextResponse.json(loadOntologyControlSummary())
48
+ }
49
+
50
+ export async function POST(request: Request) {
51
+ const body = await request.json() as {
52
+ action?: 'refresh' | 'review' | 'deprecate'
53
+ conceptId?: string
54
+ decision?: 'promote' | 'reject' | 'defer'
55
+ rationale?: string
56
+ }
57
+
58
+ if (!body.action) {
59
+ return NextResponse.json({ success: false, error: 'action is required' }, { status: 400 })
60
+ }
61
+
62
+ let args: string[] = []
63
+ if (body.action === 'refresh') {
64
+ args = ['--refresh']
65
+ } else if (body.action === 'review') {
66
+ if (!body.conceptId || !body.decision) {
67
+ return NextResponse.json({ success: false, error: 'conceptId and decision are required for review' }, { status: 400 })
68
+ }
69
+ args = ['--review', body.conceptId, '--decision', body.decision]
70
+ if (body.rationale?.trim()) args.push('--rationale', body.rationale.trim())
71
+ } else if (body.action === 'deprecate') {
72
+ if (!body.conceptId) {
73
+ return NextResponse.json({ success: false, error: 'conceptId is required for deprecate' }, { status: 400 })
74
+ }
75
+ args = ['--deprecate', body.conceptId]
76
+ if (body.rationale?.trim()) args.push('--rationale', body.rationale.trim())
77
+ }
78
+
79
+ const result = await runOntologyCommand(args)
80
+ if (!result.success) {
81
+ return NextResponse.json({ success: false, error: result.output || 'Ontology command failed' }, { status: 500 })
82
+ }
83
+
84
+ return NextResponse.json({
85
+ success: true,
86
+ output: result.output,
87
+ dashboard: loadOntologyControlSummary(),
88
+ })
89
+ }
@@ -72,7 +72,10 @@ type Summary = {
72
72
  governanceMode: Summary['governance']['activeMode']
73
73
  triggeredBy: string
74
74
  reasons: string[]
75
+ semanticInfluence?: 'none' | 'explanatory' | 'weighted'
76
+ semanticConceptIds?: string[]
75
77
  }
78
+ semanticConceptIds?: string[]
76
79
  }[]
77
80
  promoteQueue: {
78
81
  id: string
@@ -94,15 +97,33 @@ type Summary = {
94
97
  governanceMode: Summary['governance']['activeMode']
95
98
  triggeredBy: string
96
99
  reasons: string[]
100
+ semanticInfluence?: 'none' | 'explanatory' | 'weighted'
101
+ semanticConceptIds?: string[]
97
102
  }
103
+ semanticConceptIds?: string[]
98
104
  }[]
99
105
  recentAddressed: { id: string; kind: string; projectId?: string; capability?: string; description?: string; addressedAt?: string; responseSummary: string; interventionTypes: PressureInterventionType[] }[]
100
106
  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 }[]
107
+ 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
108
  }
103
109
 
104
110
  interface Props {
105
111
  summary: Summary
112
+ ontology: {
113
+ ontologyLoop: {
114
+ frontier: number
115
+ reviewOpen: number
116
+ extensions: number
117
+ changeEvents: number
118
+ adoption: {
119
+ activeConcepts: number
120
+ unusedExtensions: number
121
+ totalBindings: number
122
+ routesInfluenced: number
123
+ conceptsAtDeprecationRisk: number
124
+ }
125
+ }
126
+ }
106
127
  }
107
128
 
108
129
  function consoleTone(state: RunState): 'neutral' | 'green' | 'red' | 'yellow' {
@@ -145,7 +166,7 @@ function formatMode(mode: Summary['governance']['activeMode']) {
145
166
  return mode.split('-').join(' ')
146
167
  }
147
168
 
148
- export default function CoEvolutionClient({ summary }: Props) {
169
+ export default function CoEvolutionClient({ summary, ontology }: Props) {
149
170
  const [runState, setRunState] = useState<RunState>('idle')
150
171
  const [activeCommand, setActiveCommand] = useState<CommandName | null>(null)
151
172
  const [output, setOutput] = useState('')
@@ -246,6 +267,8 @@ export default function CoEvolutionClient({ summary }: Props) {
246
267
  { label: `${summary.pressureLifecycle.open} open`, tone: summary.pressureLifecycle.open > 0 ? 'yellow' : 'green' },
247
268
  { label: `${summary.pressureMotifs.promotionReady} promotion-ready motifs`, tone: summary.pressureMotifs.promotionReady > 0 ? 'purple' : 'neutral' },
248
269
  { label: `${summary.topologyReviews.open} topology reviews`, tone: summary.topologyReviews.open > 0 ? 'yellow' : 'green' },
270
+ { label: `${ontology.ontologyLoop.frontier} ontology frontier`, tone: ontology.ontologyLoop.reviewOpen > 0 ? 'blue' : 'neutral' },
271
+ { label: `${ontology.ontologyLoop.adoption.activeConcepts} active concepts`, tone: ontology.ontologyLoop.adoption.activeConcepts > 0 ? 'green' : 'neutral' },
249
272
  { label: `${summary.recentTransfers.length} recent transfers`, tone: summary.recentTransfers.length > 0 ? 'green' : 'neutral' },
250
273
  { label: formatMode(summary.governance.activeMode), tone: toneForMode(summary.governance.activeMode) },
251
274
  ]}
@@ -264,6 +287,7 @@ export default function CoEvolutionClient({ summary }: Props) {
264
287
  <button onClick={() => handleRun('research')} disabled={runState === 'running'} className="badge badge-blue" style={{ border: 'none', cursor: 'pointer' }}>Run research</button>
265
288
  <button onClick={() => handleRun('evolve')} disabled={runState === 'running'} className="badge badge-green" style={{ border: 'none', cursor: 'pointer' }}>Run evolve</button>
266
289
  <button onClick={() => handleRun('generalize')} disabled={runState === 'running'} className="badge badge-purple" style={{ border: 'none', cursor: 'pointer' }}>Run generalize</button>
290
+ <Link href="/ontology" className="badge badge-gray">Open ontology</Link>
267
291
  <Link href="/topology" className="badge badge-gray">Open topology</Link>
268
292
  </div>
269
293
  </div>
@@ -275,6 +299,7 @@ export default function CoEvolutionClient({ summary }: Props) {
275
299
  <MetricCard label="Promotion-ready motifs" value={summary.pressureMotifs.promotionReady} sublabel={`${summary.pressureMotifs.total} recurring motifs tracked`} tone="purple" icon="⇄" />
276
300
  <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="◇" />
277
301
  <MetricCard label="Prepared topology" value={summary.topologyExecution.prepared} sublabel={`${summary.topologyExecution.applied} applied • ${summary.topologyExecution.rolledBack} rolled back`} tone={summary.topologyExecution.prepared > 0 ? 'blue' : summary.topologyExecution.applied > 0 ? 'green' : 'neutral'} icon="↑" />
302
+ <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="◎" />
278
303
  <MetricCard label="Recorded interventions" value={summary.pressureInterventions.total} sublabel={`${summary.pressureInterventions.completed} completed • ${summary.pressureInterventions.dryRun} dry-run`} tone="blue" icon="↺" />
279
304
  <MetricCard label="Realized transfers" value={summary.recentTransfers.filter((event) => event.status === 'realized').length} sublabel={`${summary.pressureMotifs.addressed} motifs now addressed`} tone="green" icon="↑" />
280
305
  </div>
@@ -366,6 +391,8 @@ export default function CoEvolutionClient({ summary }: Props) {
366
391
  <span className={`badge badge-${toneForLifecycle(motif.lifecycle)}`}>{motif.lifecycle}</span>
367
392
  <span className="badge badge-purple">recommend {motif.suggestedRoute.route}</span>
368
393
  <span className="badge badge-gray">confidence {(motif.suggestedRoute.confidence * 100).toFixed(0)}%</span>
394
+ {motif.suggestedRoute.semanticInfluence && motif.suggestedRoute.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {motif.suggestedRoute.semanticInfluence}</span> : null}
395
+ {(motif.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${motif.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
369
396
  {motif.projectIds.slice(0, 3).map((projectId) => <span key={`${motif.id}-${projectId}`} className="badge badge-gray">{projectId}</span>)}
370
397
  </div>
371
398
  <div style={{ display: 'grid', gap: 4, marginTop: 10 }}>
@@ -467,6 +494,7 @@ export default function CoEvolutionClient({ summary }: Props) {
467
494
  <div className="summary-row-meta">{event.transferType} • {formatDate(event.timestamp)}</div>
468
495
  <div style={{ display: 'flex', gap: 6, flexWrap: 'wrap', marginTop: 8 }}>
469
496
  <span className={`badge badge-${event.status === 'realized' ? 'green' : event.status === 'candidate' ? 'purple' : 'gray'}`}>{event.status ?? 'candidate'}</span>
497
+ {(event.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${event.id}-${conceptId}`} className="badge badge-green">{conceptId}</span>)}
470
498
  {(event.targetSkillIds ?? []).slice(0, 2).map((skill) => <span key={`${event.id}-${skill}`} className="badge badge-gray">{skill}</span>)}
471
499
  {(event.capabilityIds ?? []).slice(0, 2).map((capability) => <span key={`${event.id}-${capability}`} className="badge badge-gray">{capability}</span>)}
472
500
  </div>
@@ -500,6 +528,8 @@ export default function CoEvolutionClient({ summary }: Props) {
500
528
  {signal.projectId ? <span className="badge badge-gray">{signal.projectId}</span> : null}
501
529
  {signal.routeRecommendation ? <span className={`badge badge-${toneForRoute(signal.routeRecommendation.route)}`}>recommend {signal.routeRecommendation.route}</span> : null}
502
530
  {signal.routeRecommendation ? <span className="badge badge-gray">{signal.routeRecommendation.scope}</span> : null}
531
+ {signal.routeRecommendation?.semanticInfluence && signal.routeRecommendation.semanticInfluence !== 'none' ? <span className="badge badge-green">semantic {signal.routeRecommendation.semanticInfluence}</span> : null}
532
+ {(signal.semanticConceptIds ?? []).slice(0, 2).map((conceptId) => <span key={`${signal.id}-${conceptId}`} className="badge badge-gray">{conceptId}</span>)}
503
533
  {signal.interventionTypes.map((type) => <span key={`${signal.id}-${type}`} className="badge badge-gray">{type}</span>)}
504
534
  </div>
505
535
  {signal.routeRecommendation?.reasons?.length ? (
@@ -1,9 +1,10 @@
1
- import { loadCoEvolutionSummary } from '@/lib/data'
1
+ import { loadCoEvolutionSummary, loadOntologySummary } from '@/lib/data'
2
2
  import CoEvolutionClient from './client'
3
3
 
4
4
  export const dynamic = 'force-dynamic'
5
5
 
6
6
  export default function CoEvolutionPage() {
7
7
  const summary = loadCoEvolutionSummary()
8
- return <CoEvolutionClient summary={summary} />
8
+ const ontology = loadOntologySummary()
9
+ return <CoEvolutionClient summary={summary} ontology={ontology} />
9
10
  }
@@ -131,6 +131,30 @@ const COMMANDS: CommandInfo[] = [
131
131
  needsLLM: true,
132
132
  runnable: { command: 'graph-rebuild', label: 'Rebuild Graph', icon: 'M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1', color: 'var(--purple)' },
133
133
  },
134
+ {
135
+ name: 'ontology',
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
+ usage: 'helixevo ontology [options]',
138
+ examples: [
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' },
141
+ { cmd: 'helixevo ontology --refresh', desc: 'Derive frontier concepts from recurring capability, pressure, and topology evidence' },
142
+ { cmd: 'helixevo ontology --review ontology_capability_ui --decision promote', desc: 'Promote a frontier concept into approved ontology extensions' },
143
+ { cmd: 'helixevo ontology --deprecate ontology_capability_ui', desc: 'Deprecate an approved ontology extension with consumer-risk visibility' },
144
+ ],
145
+ options: [
146
+ { flag: '--status', desc: 'Show ontology kernel, frontier, extension, adoption, and review state' },
147
+ { flag: '--refresh', desc: 'Refresh frontier concepts from recurring evidence' },
148
+ { flag: '--review <conceptId>', desc: 'Review a frontier concept' },
149
+ { flag: '--decision <promote|reject|defer>', desc: 'Decision for --review' },
150
+ { flag: '--rationale <text>', desc: 'Optional review or deprecate rationale' },
151
+ { flag: '--deprecate <conceptId>', desc: 'Deprecate an approved ontology extension' },
152
+ { flag: '--verbose', desc: 'Show detailed frontier concepts, active semantic consumers, and ontology changes' },
153
+ ],
154
+ category: 'network',
155
+ needsLLM: false,
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.',
157
+ },
134
158
  {
135
159
  name: 'topology',
136
160
  description: 'Move reviewed topology candidates through an explicit structural execution pipeline. Prepare accepted candidates, apply only the safe subset, inspect snapshots and artifacts, and roll back applied structural overrides when needed.',
@@ -292,6 +316,33 @@ const WORKFLOW = [
292
316
  { label: 'health', desc: 'Assess quality', tone: 'blue' as const },
293
317
  ]
294
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
+
295
346
  const CATEGORIES: Array<{
296
347
  id: CommandInfo['category']
297
348
  label: string
@@ -300,7 +351,7 @@ const CATEGORIES: Array<{
300
351
  }> = [
301
352
  { id: 'core', label: 'Core workflow', tone: 'purple', description: 'The commands that initialize HelixEvo and keep it learning continuously.' },
302
353
  { id: 'evolution', label: 'Evolution', tone: 'green', description: 'Mutation, promotion, and specialization controls for active skill improvement.' },
303
- { 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.' },
304
355
  { id: 'analysis', label: 'Analysis & reports', tone: 'yellow', description: 'Operational reads on system quality, trends, reports, and health.' },
305
356
  { id: 'system', label: 'System', tone: 'neutral', description: 'Supporting commands for capture, dashboard access, and environment-level actions.' },
306
357
  ]
@@ -338,8 +389,8 @@ export default function CommandsPage() {
338
389
  actions={
339
390
  <div className="hero-note-card">
340
391
  <div className="hero-note-label">Recommended operating loop</div>
341
- <div className="hero-note-title">Init → Watch → EvolveGeneralizeGraph → Health</div>
342
- <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>
343
394
  </div>
344
395
  }
345
396
  />
@@ -379,6 +430,32 @@ export default function CommandsPage() {
379
430
  </div>
380
431
  </SectionFrame>
381
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
+
382
459
  {CATEGORIES.map(category => {
383
460
  const commands = COMMANDS.filter(command => command.category === category.id)
384
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>
@@ -467,6 +471,11 @@ helixevo topology --status`}</Code>
467
471
  desc: 'Inspect the network and, with --optimize, refresh topology review candidates for structural issues and opportunities.',
468
472
  flags: ['--mermaid', '--obsidian <vault>', '--rebuild', '--optimize', '--verbose'],
469
473
  },
474
+ {
475
+ cmd: 'helixevo ontology',
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.',
477
+ flags: ['--status', '--refresh', '--review <conceptId>', '--decision <promote|reject|defer>', '--rationale <text>', '--deprecate <conceptId>', '--verbose'],
478
+ },
470
479
  {
471
480
  cmd: 'helixevo topology',
472
481
  desc: 'Move accepted topology review through prepare, apply, and rollback. This is the explicit control surface for reviewed structural execution.',
@@ -531,7 +540,7 @@ helixevo topology --status`}</Code>
531
540
  <h3 className="guide-h3">Brain foundation</h3>
532
541
  <div className="grid-2" style={{ gap: 12, marginBottom: 20 }}>
533
542
  {[
534
- ['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.'],
535
544
  ['Activation traces', 'var(--green)', 'Observation memory showing which skills and gaps were active when capture or project analysis occurred.'],
536
545
  ['Pressure signals', 'var(--yellow)', 'Explicit adaptation demand derived from failures and project gaps.'],
537
546
  ['Interventions', 'var(--purple)', 'The response ledger across research, specialize, evolve, generalize, and manual-review lanes.'],
@@ -565,8 +574,8 @@ helixevo topology --status`}</Code>
565
574
  {
566
575
  title: '1. Semantic layer',
567
576
  color: 'var(--blue)',
568
- desc: 'Ontology and invariants define what kinds of things HelixEvo can talk about and persist truthfully.',
569
- 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.'
570
579
  },
571
580
  {
572
581
  title: '2. Observation layer',
@@ -661,13 +670,69 @@ helixevo topology --status`}</Code>
661
670
  </Callout>
662
671
  </Section>
663
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
+
664
728
  {/* ─── Surface Map ─── */}
665
729
  <Section id="surfaces" title="Dashboard Surface Map" subtitle="Each tab is a different control or observability surface for the same brain.">
666
730
  <div className="grid-2" style={{ gap: 12 }}>
667
731
  {[
668
732
  ['Overview', 'var(--blue)', 'Top-level cockpit for frontier state, brain foundation, pressure totals, topology review counts, and prepared/applied structural state.'],
669
- ['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.'],
670
734
  ['Skill Network', 'var(--green)', 'Graph-level understanding: relationships, co-evolution signals, inspector context, and structural handoff links.'],
735
+ ['Ontology', 'var(--blue)', 'Semantic control surface for kernel visibility, frontier review, approved extensions, semantic adoption coverage, consumer summaries, and ontology change events.'],
671
736
  ['Topology', 'var(--yellow)', 'Governed plasticity surface for review decisions, accepted-ready queue, prepared plans, apply, rollback, and execution history.'],
672
737
  ['Projects', 'var(--blue)', 'Project intake and project-aware pressure surface. Best for capability gaps, activation traces, and promotion feeders.'],
673
738
  ['Research', 'var(--purple)', 'Discovery-oriented view grounded in current pressure and routed recommendations rather than disconnected idea generation.'],
@@ -681,8 +746,8 @@ helixevo topology --status`}</Code>
681
746
  ))}
682
747
  </div>
683
748
  <Callout type="tip">
684
- If you are debugging current state, the best sequence is usually: <strong>Overview → Co-Evolution → Topology → Skill Network → Projects / Research</strong>.
685
- 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.
686
751
  </Callout>
687
752
  </Section>
688
753
 
@@ -1080,6 +1145,12 @@ generation: 3
1080
1145
  ├── skill-graph.json # Cached network (nodes + edges + ontology version)
1081
1146
  ├── canary-registry.json # Active canary deployments
1082
1147
  ├── knowledge-buffer.json # Research discoveries + drafts
1148
+ ├── ontology/
1149
+ │ ├── kernel.json # Materialized ontology kernel snapshot
1150
+ │ ├── extensions.json # Approved ontology extensions
1151
+ │ ├── frontier.json # Provisional frontier concepts awaiting review
1152
+ │ ├── reviews.jsonl # Ontology review decisions
1153
+ │ └── change-log.jsonl # Native ontology change events
1083
1154
  ├── general/ # Skills (SKILL.md files)
1084
1155
  │ ├── my-skill/SKILL.md
1085
1156
  │ └── ...
@@ -1091,6 +1162,7 @@ generation: 3
1091
1162
  {[
1092
1163
  ['Observation memory', 'var(--blue)', 'failures.jsonl + activation-traces.jsonl capture what happened, where it happened, and which skills were active.'],
1093
1164
  ['Pressure & response memory', 'var(--yellow)', 'pressure-signals.jsonl + pressure-interventions.jsonl + transfer-events.jsonl describe demand, routing, and reusable promotion evidence.'],
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.'],
1094
1166
  ['Governance & review memory', 'var(--purple)', 'governance-state.json + topology-review-candidates.json + topology-review-decisions.jsonl preserve why structural decisions are being made.'],
1095
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.'],
1096
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.'],
@@ -1171,7 +1243,8 @@ generation: 3
1171
1243
  <ul className="guide-list" style={{ marginTop: 8 }}>
1172
1244
  <li>full-spectrum autonomous destructive self-restructuring</li>
1173
1245
  <li>broad automatic merge / split / prune application</li>
1174
- <li>fully operational dynamic ontology evolution</li>
1246
+ <li>broad automatic semantic remapping across historical data</li>
1247
+ <li>full kernel mutation or free-form ontology drift</li>
1175
1248
  <li>complete autonomous structural governance without operator oversight</li>
1176
1249
  </ul>
1177
1250
  </div>