This repository has been archived on 2026-06-01. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
nerve/.knowledge/signal-routing.md
T
xiaoju fc7fc9158c docs: update all docs/conventions for stateful sense, remove stale refs
Phase 4 of RFC #308: Stateful Sense refactor.

- CLAUDE.md: updated diagram, tables, examples (no more Signal)
- Cleaned stale Signal Bus / DrizzleDB / _signals / retention refs
  across READMEs, .cursor rules, copilot instructions, .knowledge
- Removed drizzle-orm from core package.json (no longer used)
- Updated pnpm-lock.yaml

Refs #308
2026-05-01 10:09:01 +00:00

1.1 KiB

Sense compute → workflow (RFC #308)

Stateful senses no longer emit signals or pass outputs through routeSenseComputeOutput. The worker runs compute(state) and returns { state, workflow }.

Flow

Sense worker: compute(state) → { state, workflow }
                    ↓
          persist state JSON (data/senses/<name>.json)
                    ↓
          IPC compute-result → kernel
                    ↓
     workflow !== null → parseWorkflowTrigger (validation) → workflowManager.startWorkflow
     scheduler.onSenseCompleted(senseName) → dependents with `on: [senseName]`

Workflow trigger shape

When workflow is non-null it must be a plain object validated by parseWorkflowTrigger() in packages/core/src/sense.ts:

  • name: non-empty string
  • maxRounds: integer ≥ 1
  • prompt: string
  • dryRun: boolean

Invalid triggers are rejected by the daemon when handling the worker message (workflow is not started).

Scheduling

Other senses list this sense under on in nerve.yaml to be scheduled when this sense completes a successful compute (see sense scheduler reverse-index in the daemon).