Signals Catalog
Current taxonomy of thefund_signals mutation signal stream.
Hugo writes one structured signal after selected fund-scoped mutations succeed. Signals are intentionally simple: they record what happened, the affected subject, the actor, and a compact JSON payload. They do not run mutations, compute derived cascades, send email, or trigger synthesis inline.
recordFundSignal. Downstream systems such as email, SITREP, and LLM context generation can consume fund_signals later.
Consumer Boundary
Consumers read signals through src/services/fund-signal-consumers.ts. The boundary parses payload_json, validates the closed signal type, returns typed consumer signals, and counts malformed rows it skipped. The /api/funds/:fundSlug/signals route uses this same boundary.
Consumer Status
No LLM prompt-context builder is wired in this worktree. Consumers should start from src/services/fund-signal-consumers.ts and add a concrete call site before introducing a formatter.
Schema
| Column | Purpose |
|---|---|
id | Signal id |
fund_id | Fund the signal belongs to |
signal_type | Closed enum value from src/lib/fund-signals.ts |
subject_type | Primary entity type, such as lp_task or mfn_general_rule |
subject_id | Primary entity id, nullable for bulk actions |
payload_json | Flat JSON payload, capped at 16 KB |
actor_user_id | Acting user when available |
created_at | Append timestamp |
Current Signal Types
| Signal type | Subject | Current emitter |
|---|---|---|
mfn_general_rule_changed | mfn_general_rule | MFN matrix category/group toggles |
clause_assigned | clause_assignment | ISL clause election/addition |
ops_obligation_created | ops_obligation | Clause operations tag create |
ops_obligation_deleted | ops_obligation | Clause operations tag delete |
side_letter_status_changed | commitment | Fund overview side-letter status cell |
lp_task_created | lp_task | LP task create |
lp_task_updated | lp_task | LP task edit or status drag |
lp_task_completed | lp_task | LP-scoped complete action |
lp_task_archived | lp_task | Task archive action |
lp_task_unarchived | lp_task | Task unarchive action |
lp_task_commented | lp_task_comment | Task comment add |
lp_task_bulk_updated | lp_task bulk | Bulk task action or archive-all-done |
Removed Cascade Design
The old root-event plus derived-cascade model was removed. MFN eligibility is not diffed during mutation handling. Eligibility remains a query-time calculation.