fix(regression): repair 5 regressions from second round, close B10/B12/B15/B16
Round 2 regression fixes:
- B10 (INV-2 outbox, CRITICAL): wiring.ts — switch durable events
from eventBus.publish (live-only) to eventIngestor.ingest (persistent)
for debug.record.created and memory.promoted. Add required RuntimeEvent
fields (id, source, route).
- B12 (Scheduler events, CRITICAL): Scheduler.ts — replace all 4
eventBus.publish calls with eventIngestor.ingest + registered event
types (task.started/task.failed/agent.lost/agent.cancelled).
Remove unregistered task.status.changed references.
- B15 (duplicate ProjectionClient): remove orphan tui/src/ProjectionClient.ts
(zero references, superseded by runtime/src/projection/ProjectionClient.ts
re-exported via @aircoding/runtime barrel).
- RuntimeApp: wire Scheduler→WorkerManager in constructor; document
start() bootstrap→recover→hydrate→ready sequence (DD §22.2).
- createRuntime: read project_id from .air/shared/project.json
(DD §6.1 stable UUID), fallback to Date.now() only if not initialized.
- B16 (api_key strict): ProviderManager.get_or_create_adapter now calls
ModelConfigLoader.validate() before passing raw api_key to adapter.
Also fix from R1 regression:
- ArchitectureDesigner: replace broken additive-heuristic risk scoring
(single runtime file→replan, large refactor→confirmation only) with
change-scope classification (contracts→confirmation, breaking→escalate,
large→replan, safe→silent_continue). Remove dead evaluate_risk().
- MainAgent test: update confirmation test from old state name
AWAITING_CONFIRMATION to canonical CONFIRMING (B13 state machine fix).
Test: 148/148 pass (regression + e2e + llm + toolchain-cpp).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>