#1368

Roadmap: Signal tiers

Opensalmonumbrellaopened 12d ago

The people sweep and activity model in #534 provide the base for maintenance driven by real interactions. Tracking each profile by hand does not scale, while tracking an entire imported address book gives every saved contact the same maintenance treatment. This issue tracks Signal tiers so each focused pull request can stay reviewable without losing the larger context.

The ten-part implementation below is open for review. It builds on existing tracking, brief enrollment, activity projection, and consented enrichment; the complete tier workflow has not landed yet.

Outcomes

  • Derive explainable maintenance tiers from two-way messages, direct meeting days, channel breadth, and recency. Each decision shows the evidence, exclusions, and manual choices behind it.
  • Use three configurable defaults: Tier 1 enables tracking, briefs, and scheduled enrichment eligibility; Tier 2 enables tracking; Tier 3 adds no automatic maintenance. Manual grants remain independent of the computed tier.
  • Preview decisions before applying them, inspect a person's explanation and history, and review high-signal unsaved participants as promotion candidates.
  • Preserve deliberate tracking, brief enrollment, and lane opt-outs through reevaluation, merges, splits, and exports.
  • Keep scheduled evaluation bounded and resumable, with the same decisions available through the CLI and HTTP API and read-only explanations through MCP.

Delivery sequence

All ten PRs are currently open. Merge in order, 1 → 10; later PRs include prerequisites in their upstream diff and retain a separate review boundary in their descriptions.

  1. Evaluate interaction signals with configurable rules, exclusions, calendar grace periods, and explanations (#1344).
  2. Persist manual/automatic provenance, lane opt-outs, applied authority, preview observations, and audit history on both backends, including preservation through merges and exact splits (#1345).
  3. Derive bounded, paged signals and unlinked participant candidates from the activity projection, with readiness checks and distinct audience counts (#1346).
  4. Preserve manual tracking and brief decisions, record explicit opt-outs, and protect exact manual enrichment work from automatic tracking removal (#1347).
  5. Carry tier intent and history through person merges, exact splits, subset exports, and permanent deletion (#1348).
  6. Gate scheduled enrichment on manual tracking or applied tier eligibility while retaining provider consent, limits, and independent manual-run authority (#1349).
  7. Apply decisions through frozen, resumable runs with separate preview state, audit events, reset support, and guards against stale continuations (#1350).
  8. Expose previews, bounded apply, reset, history, candidates, explanations, and lane preferences through HTTP and generated clients (#1351).
  9. Add person tiers commands and the read-only get_person_tier MCP tool (#1352).
  10. Schedule bounded evaluation that yields to interactive requests, retains previews, and documents the opt-in rollout (#1353).

After the stack lands, rollout starts with previews and record-only scheduling, then explicit opt-in apply. Directory badges and filters, broader meeting co-presence credit, optional relationship-temperature context, and enrichment-status counts remain separate follow-ups.

Design constraints

  • Signal follows resolved participant bindings. Names in message bodies, subjects, snippets, or transcripts never count. Unlinked candidates do not create, link, or merge profiles automatically.
  • SQLite and PostgreSQL remain behaviorally equivalent. Metadata queries are paged and reuse the activity projection without changing relationship scoring.
  • Two-way message counts exclude meetings; meeting days and channel breadth contribute separately. Lists, large inbound audiences, owner identities, automated-only addresses, and calendar resources have explicit exclusions.
  • Manual choices always win. Automation changes only its own grants; explicit lane opt-outs survive later evaluations. Existing grants retain manual provenance.
  • Preview observations grant no authority. Both enabled and apply default to false; turning apply off freezes applied authority rather than revoking it.
  • Promotions apply immediately. Demotions require a grace period and are deferred when activity is incomplete or exact manual enrichment work still needs tracking.
  • Tiers grant eligibility, not consent or budget. Existing provider policies, suppressions, fact pins, and spending caps remain in force. No new provider or consent flow is introduced.
  • Resumed pages retain frozen evaluation inputs. Reset and newer manual applies prevent stale runs from restoring old decisions.

Adjacent

  • #534: the broader People and CardDAV roadmap; Signal tiers supplies its interaction-driven tracking step.
  • #628: scheduled people maintenance, whose sweep, briefs, and enrichment use the resulting grants.
  • #639: Directory workspace; tier badges and filtering are separate UI work.

Activity

1
salmonumbrella12d ago

@rodboev Signal tiers uses real interactions to decide which contacts get tracking, briefs, and enrichment, while preserving manual choices.