An FRDS node is already a triple: nodeId → { prop → value }, with { r } as a reference. What differs is five choices.
| FRDS today | Facts | |
|---|---|---|
| Identity | every object and array is a node with a minted id | entities (module, task, workflow, commit, staging area, thread, goal, draft, version) have ids; everything else is an anonymous object value: written whole, never pointed at, never queried into, never partially protected |
| Vocabulary | any property on any node | declared predicates with a kind (scalar, text, ref, struct, blob) and cardinality (one or set) |
| Reverse index | none; server has no parent pointers | every ref indexed both ways; spawnedChildren, child, childStagingAreaIds disappear |
| Placement | nesting: groups.<id>.workflows, namespaces.<id>.modules |
a group / namespace fact on the subject |