Deferred capture
Status: Superseded by records layer
Milestone: 3 — MCP query
Spec: Events §3, Sources §6
Package: modules/capture-classifier, pkg/classify
Goal
Capture events quickly before the semantic type is known, then classify later into properly typed journal events without mutating the original capture.
Interfaces
HTTP (gateway routes on capture-classifier):
POST /capture/{source} -> emit classify.pending
POST /classify -> emit typed event + classify.assigned
GET /pending -> list unclassified classify.pending events
MCP tools (registered on capture-classifier, aggregated by mcp-query):
classify_event(source_event_id, target_type, payload?)
list_unclassified_captures()
Event conventions
| Type | Purpose |
|---|---|
trove://type/classify/pending/1 |
Quick capture awaiting classification |
trove://type/classify/assigned/1 |
Link record: {source_event_id, target_event_id, target_type} |
Target types (e.g. trove://type/shortcuts/note/created/1) |
Properly typed classified event with _trove.derived_from |
Implementation notes
- Shared logic in
pkg/classify - Module uses
trovemodule.Corefor emit and query - MCP tools declared via
[[mcp.tools]]in manifest — see mcp-tools
Acceptance criteria
- [x]
POST /capture/shortcutsemitsclassify.pending - [x]
POST /classifyemits typed event andclassify.assigned - [x] Original pending event is never mutated
- [x] Double-classify rejected
- [x]
GET /pendingomits already-classified pending events - [x] MCP
classify_eventandlist_unclassified_captureswork via module tool registration - [x] iOS Shortcuts doc includes quick-capture recipe
Dependencies
- Blocked by: HTTP gateway, module runtime, MCP tool registration
- Blocks: two-week live test quick-capture workflows