feat(people): add person fact ledger and automatic resolution - #677
Conversation
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
e7ad00d to
60d65fd
Compare
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
roborev: Combined Review (
|
e28c28d to
070b426
Compare
roborev: Combined Review (
|
070b426 to
b25a00e
Compare
roborev: Combined Review (
|
b25a00e to
8f9ba92
Compare
roborev: Combined Review (
|
8f9ba92 to
865a022
Compare
roborev: Combined Review (
|
865a022 to
b3f89e7
Compare
roborev: Combined Review (
|
b3f89e7 to
6532499
Compare
roborev: Combined Review (
|
6532499 to
69082da
Compare
roborev: Combined Review (
|
69082da to
7db62f9
Compare
roborev: Combined Review (
|
7db62f9 to
367e65c
Compare
roborev: Combined Review (
|
- fix(people): harden person fact resolution - fix(people): preserve invalid fact generations - fix(people): retain unsupported target rejections - test(people): mark fact callbacks as helpers - fix(people): preserve rejection-only reruns - fix(people): harden attribute fact projection - fix(people): verify submitted fact descriptors - fix(people): preserve fact validation precedence - fix(people): preserve fact projection boundaries - fix(people): preserve inferred fact boundaries - fix(people): reconcile fact competition - fix(people): harden fact replay and tracking - fix(people): harden employment fact replay - fix(people): bind rejected evidence identity - Merge origin/main into feat/person-fact-ledger - ci: justify SQLite directory creation - fix(people): preserve external fact updates - fix(people): preserve fact failure precedence - fix(people): pin detached employment projections - fix(people): bound fact target hydration - fix(people): preserve manual fact boundaries - fix(people): preserve causal fact ordering - ci(docs): allow current macOS relationship rasterization - ci(docs): scope relationship raster allowances - fix(people): preserve fact retirement state - fix(people): migrate organization domains to IDNA - fix(people): preserve fact projection identity - fix(people): reject future freshness bonuses - fix(people): preserve manual fact pins Generated with Codex Co-authored-by: Wes McKinney <wesmckinn+git@gmail.com> Co-authored-by: Codex <codex@users.noreply.github.com>
367e65c to
d70ff79
Compare
roborev: Combined Review (
|
|
not fixing |
## What changed - Add a provider-neutral OpenAI-compatible evaluator with deterministic evidence packets, bounded prompts, and exact structured-output parsing. - Add an immutable per-person change journal with a commit-order clock, cursor lanes per source lane and program/catalog fingerprint, and fenced work claiming with leases. - Publish journal changes transactionally from source mutations (messages, bodies, recipients, rosters, bindings) with coalesced work rows, and suppress publication for untracked people. - Add budget reservations with pre-call reservation, exact post-call reconciliation, daily UTC accounting, and release-before-network restore. - Add the production worker and sink: prepared-wire requests, atomic claim/apply/cursor advance, consent revocation fencing, retry/backstop windows, and run/attempt history. - Add scheduler, CLI, daemon, and API wiring, plus a fail-closed Codex adapter gated behind an exact native-standalone attestation registry (empty by default; no Codex path is enabled). - Prove the contract with frozen evaluation and SQLite/PostgreSQL state-machine parity tests asserting exact claims, decisions, resolution rows, usage, and cursor coordinates. ## Why The person fact ledger from #677 needs a durable, provider-neutral producer that keeps curated attributes current from the archive without a review workflow. This adds the tracked-person-only incremental sweep required by #628: deterministic evidence, crash-safe orchestration, hard budget fences, and fail-closed external-provider containment. ## Usage ```sh msgvault person sweep status msgvault person sweep run --person <id> msgvault person sweep history <id> ``` The sweep is disabled by default and requires explicit provider consent. Stacked on #677. Refs #628 Co-authored-by: Rusty Shackleford <salmonumbrella@users.noreply.github.com>
What changed
msgvault person facts; there is no candidate queue or review workflow.Why
Msgvault already has continuously updated person activity and embeddings, but it did not have a durable way to turn supported facts into profile updates without losing evidence, replayability, manual overrides, or history. This adds that write layer first, so later archive sweeps and external enrichment providers can submit the same typed claims and get deterministic automatic resolution.
Usage
Refs #628