@timmeck/brain-core 2.32.0 → 2.34.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.
@@ -6,6 +6,7 @@ export function runDataMinerMigration(db) {
6
6
  id INTEGER PRIMARY KEY CHECK (id = 1),
7
7
  last_mined_at INTEGER NOT NULL DEFAULT 0,
8
8
  bootstrap_complete INTEGER NOT NULL DEFAULT 0,
9
+ bootstrap_attempts INTEGER NOT NULL DEFAULT 0,
9
10
  total_observations_mined INTEGER NOT NULL DEFAULT 0,
10
11
  total_causal_events_mined INTEGER NOT NULL DEFAULT 0,
11
12
  total_metrics_mined INTEGER NOT NULL DEFAULT 0,
@@ -13,6 +14,13 @@ export function runDataMinerMigration(db) {
13
14
  );
14
15
  INSERT OR IGNORE INTO data_miner_state (id) VALUES (1);
15
16
  `);
17
+ // Graceful ALTER TABLE for existing DBs
18
+ try {
19
+ db.exec('ALTER TABLE data_miner_state ADD COLUMN bootstrap_attempts INTEGER NOT NULL DEFAULT 0');
20
+ }
21
+ catch {
22
+ // Column already exists
23
+ }
16
24
  }
17
25
  // ── DataMiner ───────────────────────────────────────────
18
26
  export class DataMiner {
@@ -41,15 +49,22 @@ export class DataMiner {
41
49
  return;
42
50
  }
43
51
  const names = this.adapters.map(a => a.name).join(', ');
44
- this.log.info(`[data-miner] Bootstrapping ${names} — scanning all historical data...`);
52
+ this.state.bootstrap_attempts++;
53
+ this.log.info(`[data-miner] Bootstrapping ${names} — attempt ${this.state.bootstrap_attempts}, scanning all historical data...`);
45
54
  const start = Date.now();
46
55
  // Mine everything from epoch
47
56
  const result = this.mineFrom(0);
48
- this.state.bootstrap_complete = true;
57
+ // Only mark complete if we actually mined something, OR safety valve after 10 attempts
58
+ if (result.total > 0 || this.state.bootstrap_attempts >= 10) {
59
+ this.state.bootstrap_complete = true;
60
+ if (result.total === 0) {
61
+ this.log.info(`[data-miner] Safety valve: marking bootstrap complete after ${this.state.bootstrap_attempts} attempts with 0 items (BootstrapService will seed data instead)`);
62
+ }
63
+ }
49
64
  this.state.last_mined_at = Date.now();
50
65
  this.saveState();
51
66
  const duration = Date.now() - start;
52
- this.log.info(`[data-miner] Bootstrap complete for ${names} in ${duration}ms — ` +
67
+ this.log.info(`[data-miner] Bootstrap ${this.state.bootstrap_complete ? 'complete' : 'incomplete (0 items)'} for ${names} in ${duration}ms — ` +
53
68
  `${result.observations} observations, ${result.causalEvents} causal events, ` +
54
69
  `${result.metrics} metrics, ${result.hypothesisObs} hypothesis observations, ` +
55
70
  `${result.crossDomain} cross-domain events`);
@@ -158,11 +173,12 @@ export class DataMiner {
158
173
  loadState() {
159
174
  const row = this.db.prepare('SELECT * FROM data_miner_state WHERE id = 1').get();
160
175
  if (!row) {
161
- return { last_mined_at: 0, bootstrap_complete: false, total_observations_mined: 0, total_causal_events_mined: 0, total_metrics_mined: 0 };
176
+ return { last_mined_at: 0, bootstrap_complete: false, bootstrap_attempts: 0, total_observations_mined: 0, total_causal_events_mined: 0, total_metrics_mined: 0 };
162
177
  }
163
178
  return {
164
179
  last_mined_at: row.last_mined_at,
165
180
  bootstrap_complete: row.bootstrap_complete === 1,
181
+ bootstrap_attempts: row.bootstrap_attempts ?? 0,
166
182
  total_observations_mined: row.total_observations_mined,
167
183
  total_causal_events_mined: row.total_causal_events_mined,
168
184
  total_metrics_mined: row.total_metrics_mined,
@@ -173,12 +189,13 @@ export class DataMiner {
173
189
  UPDATE data_miner_state SET
174
190
  last_mined_at = ?,
175
191
  bootstrap_complete = ?,
192
+ bootstrap_attempts = ?,
176
193
  total_observations_mined = ?,
177
194
  total_causal_events_mined = ?,
178
195
  total_metrics_mined = ?,
179
196
  updated_at = datetime('now')
180
197
  WHERE id = 1
181
- `).run(this.state.last_mined_at, this.state.bootstrap_complete ? 1 : 0, this.state.total_observations_mined, this.state.total_causal_events_mined, this.state.total_metrics_mined);
198
+ `).run(this.state.last_mined_at, this.state.bootstrap_complete ? 1 : 0, this.state.bootstrap_attempts, this.state.total_observations_mined, this.state.total_causal_events_mined, this.state.total_metrics_mined);
182
199
  }
183
200
  }
184
201
  //# sourceMappingURL=data-miner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-miner.js","sourceRoot":"","sources":["../../src/research/data-miner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-miner.js","sourceRoot":"","sources":["../../src/research/data-miner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AA+E/C,2DAA2D;AAE3D,MAAM,UAAU,qBAAqB,CAAC,EAAqB;IACzD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;GAYP,CAAC,CAAC;IAEH,wCAAwC;IACxC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;IACnG,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC;AAED,2DAA2D;AAE3D,MAAM,OAAO,SAAS;IACZ,EAAE,CAAoB;IACtB,QAAQ,CAAqB;IAC7B,OAAO,CAAmB;IAC1B,GAAG,GAAG,SAAS,EAAE,CAAC;IAClB,KAAK,CAAiB;IAE9B,YAAY,EAAqB,EAAE,OAAyB,EAAE,OAAyB;QACrF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IAED,iDAAiD;IACjD,UAAU,CAAC,OAAyB;QAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,iFAAiF;IACjF,SAAS;QACP,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+CAA+C,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,KAAK,cAAc,IAAI,CAAC,KAAK,CAAC,kBAAkB,mCAAmC,CAAC,CAAC;QACjI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,6BAA6B;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhC,uFAAuF;QACvF,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+DAA+D,IAAI,CAAC,KAAK,CAAC,kBAAkB,kEAAkE,CAAC,CAAC;YAChL,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,0BAA0B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,QAAQ,KAAK,OAAO,QAAQ,OAAO;YAChI,GAAG,MAAM,CAAC,YAAY,kBAAkB,MAAM,CAAC,YAAY,kBAAkB;YAC7E,GAAG,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,aAAa,4BAA4B;YAC9E,GAAG,MAAM,CAAC,WAAW,sBAAsB,CAC5C,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,sBAAsB,MAAM,CAAC,KAAK,eAAe,KAAK,GAAG;gBACzD,SAAS,MAAM,CAAC,YAAY,aAAa,MAAM,CAAC,YAAY,IAAI;gBAChE,YAAY,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC,aAAa,YAAY,MAAM,CAAC,WAAW,GAAG,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,wDAAwD;IAEhD,QAAQ,CAAC,KAAa;QAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,sCAAsC;YACtC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACrD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;wBAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ;wBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,wBAAwB,IAAI,GAAG,CAAC,MAAM,CAAC;YACpD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,OAAO,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3G,CAAC;YAED,sCAAsC;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACxD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;wBACvB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBACD,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC;gBAC9B,IAAI,CAAC,KAAK,CAAC,yBAAyB,IAAI,MAAM,CAAC,MAAM,CAAC;YACxD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gDAAgD,OAAO,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5G,CAAC;YAED,qCAAqC;YACrC,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC9C,KAAK,MAAM,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACxE,CAAC;gBACD,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0CAA0C,OAAO,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACtG,CAAC;YAED,qDAAqD;YACrD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBAChE,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;oBAClC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;4BACpC,MAAM,EAAE,CAAC,CAAC,MAAM;4BAChB,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;4BACrB,QAAQ,EAAE,CAAC,CAAC,QAAQ;yBACrB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBACD,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0DAA0D,OAAO,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACtH,CAAC;YAED,kDAAkD;YAClD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACzD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC;gBACD,WAAW,IAAI,EAAE,CAAC,MAAM,CAAC;YAC3B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sDAAsD,OAAO,CAAC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,GAAG,YAAY,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,CAAC;QAClF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACpF,CAAC;IAEO,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EACmH,CAAC;QAElM,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,wBAAwB,EAAE,CAAC,EAAE,yBAAyB,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;QACnK,CAAC;QAED,OAAO;YACL,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,KAAK,CAAC;YAChD,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,IAAI,CAAC;YAC/C,wBAAwB,EAAE,GAAG,CAAC,wBAAwB;YACtD,yBAAyB,EAAE,GAAG,CAAC,yBAAyB;YACxD,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;SAC7C,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;KAUf,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,KAAK,CAAC,aAAa,EACxB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAC7B,IAAI,CAAC,KAAK,CAAC,wBAAwB,EACnC,IAAI,CAAC,KAAK,CAAC,yBAAyB,EACpC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAC/B,CAAC;IACJ,CAAC;CACF"}
@@ -38,6 +38,7 @@ import type { ReasoningEngine } from '../reasoning/reasoning-engine.js';
38
38
  import type { EmotionalModel } from '../emotional/emotional-model.js';
39
39
  import type { SelfScanner } from '../self-scanner/self-scanner.js';
40
40
  import type { SelfModificationEngine } from '../self-modification/self-modification-engine.js';
41
+ import type { BootstrapService } from './bootstrap-service.js';
41
42
  import { AutoResponder } from './auto-responder.js';
42
43
  export interface ResearchOrchestratorConfig {
43
44
  brainName: string;
@@ -90,6 +91,7 @@ export declare class ResearchOrchestrator {
90
91
  private emotionalModel;
91
92
  private selfScanner;
92
93
  private selfModificationEngine;
94
+ private bootstrapService;
93
95
  private brainName;
94
96
  private feedbackTimer;
95
97
  private cycleCount;
@@ -154,6 +156,8 @@ export declare class ResearchOrchestrator {
154
156
  setSelfScanner(scanner: SelfScanner): void;
155
157
  /** Set the SelfModificationEngine — generates and applies code changes autonomously. */
156
158
  setSelfModificationEngine(engine: SelfModificationEngine): void;
159
+ /** Set the BootstrapService — seeds initial data on first cycle. */
160
+ setBootstrapService(service: BootstrapService): void;
157
161
  /** Set the PredictionEngine — wires journal into it. */
158
162
  setPredictionEngine(engine: PredictionEngine): void;
159
163
  /** Start the autonomous feedback loop timer. */
@@ -54,6 +54,7 @@ export class ResearchOrchestrator {
54
54
  emotionalModel = null;
55
55
  selfScanner = null;
56
56
  selfModificationEngine = null;
57
+ bootstrapService = null;
57
58
  brainName;
58
59
  feedbackTimer = null;
59
60
  cycleCount = 0;
@@ -172,6 +173,8 @@ export class ResearchOrchestrator {
172
173
  setSelfScanner(scanner) { this.selfScanner = scanner; }
173
174
  /** Set the SelfModificationEngine — generates and applies code changes autonomously. */
174
175
  setSelfModificationEngine(engine) { this.selfModificationEngine = engine; }
176
+ /** Set the BootstrapService — seeds initial data on first cycle. */
177
+ setBootstrapService(service) { this.bootstrapService = service; }
175
178
  /** Set the PredictionEngine — wires journal into it. */
176
179
  setPredictionEngine(engine) {
177
180
  this.predictionEngine = engine;
@@ -258,6 +261,19 @@ export class ResearchOrchestrator {
258
261
  const ts = this.thoughtStream;
259
262
  this.log.info(`[orchestrator] ─── Feedback Cycle #${this.cycleCount} ───`);
260
263
  ts?.emit('orchestrator', 'perceiving', `Feedback Cycle #${this.cycleCount} starting...`);
264
+ // Bootstrap: seed initial data on first cycle so engines have something to work with
265
+ if (this.cycleCount === 1 && this.bootstrapService) {
266
+ try {
267
+ const result = this.bootstrapService.bootstrap();
268
+ if (!result.alreadyBootstrapped) {
269
+ ts?.emit('orchestrator', 'discovering', `Bootstrap seeded: ${result.observations} observations, ${result.journalEntries} journal, ${result.hypotheses} hypotheses, ${result.predictions} predictions, ${result.metrics} metrics`, 'notable');
270
+ this.log.info(`[orchestrator] Cold-start bootstrap complete — engines have initial data`);
271
+ }
272
+ }
273
+ catch (err) {
274
+ this.log.error(`[orchestrator] Bootstrap error: ${err.message}`);
275
+ }
276
+ }
261
277
  // 0. DataMiner: mine new data from DB into engines
262
278
  if (this.dataMiner) {
263
279
  ts?.emit('data_miner', 'perceiving', 'Scanning for new data...');
@@ -481,6 +497,20 @@ export class ResearchOrchestrator {
481
497
  this.journal.reflect();
482
498
  ts?.emit('journal', 'reflecting', 'Reflection complete', 'notable');
483
499
  }
500
+ // 8b. Cycle-end journal entry — guarantees journal grows every cycle
501
+ {
502
+ const cycleDuration = Date.now() - start;
503
+ const journalStats = this.journal.getSummary();
504
+ this.journal.write({
505
+ type: 'insight',
506
+ title: `Cycle #${this.cycleCount} summary`,
507
+ content: `Completed feedback cycle #${this.cycleCount} in ${cycleDuration}ms. ${insights.length} insights, ${anomalies.length} anomalies detected. Journal now has ${journalStats.total_entries ?? 0} entries.`,
508
+ tags: [this.brainName, 'cycle-summary'],
509
+ references: [],
510
+ significance: 'routine',
511
+ data: { cycle: this.cycleCount, duration_ms: cycleDuration, insights: insights.length, anomalies: anomalies.length },
512
+ });
513
+ }
484
514
  // 9. Prediction Engine: resolve pending + auto-predict
485
515
  if (this.predictionEngine) {
486
516
  ts?.emit('prediction', 'predicting', 'Resolving pending predictions...');