Skip to content

feat(aggregator): source-conflict inbox — one resolvable queue for Project-vs-derived and Kaneo-vs-GitHub disagreements, with per-class trust rulings #1282

Open

Description

@dezren39

Part of epic #1184 (PM stack coherence — wave 2, 2026-10-26).

The stack's sources disagree regularly — Project Status vs the aggregator's derived state, Kaneo card state vs GitHub issue state — and today each disagreement lives where it happens to render: a ⚠ badge on /projects, invisible everywhere else, with no way to resolve the class of problem, only the instance. A source-conflict inbox collects every live disagreement into one queue: each entry names the item, the two sources, both values, and how long they have disagreed. Drew (or the orchestrator, for classes Drew has ruled on) records a per-class ruling — "for Kaneo-vs-GitHub state, trust GitHub" — and the ruling applies to that class going forward, recorded as data (not code), until changed. Resolved classes stop generating inbox entries; a source that starts disagreeing in a new way creates a new class rather than re-opening an old ruling silently.

Acceptance:

  • One page lists all current source disagreements across facets (not only /projects), each with item, sources, both values, and disagreement age.
  • A per-class "trust source X" ruling can be recorded, is stored as data, and measurably suppresses that class's entries while applying the trusted value in renders.
  • Rulings are listed and revocable in the same place; revoking re-surfaces the class's current disagreements.
  • The inbox count appears in the stack health surface so a growing conflict backlog is itself visible; covered by tests with seeded disagreement fixtures.

Acceptance criteria

  • A source-conflict inbox exists: one resolvable queue collecting Project-vs-derived and Kaneo-vs-GitHub disagreements, grouped per conflict class.
  • Each class can receive a trust ruling; renders then apply the trusted value consistently, and rulings are listed and revocable in the same place (revoking re-surfaces the class's current disagreements).
  • The inbox count appears in the stack health surface; behaviour is covered by tests with seeded disagreement fixtures.

Activity

  1. added
    kind/featureNew feature or capability request
    app/pm-stackpm-stack (Pad/Grist) in developing-today/code
    on Oct 27, 2026
  2. developing-today commented on Oct 27, 2026

    @developing-today
    Contributor
  3. added
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/lLarge: multi-day or open-ended; expect staged check-ins
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 27, 2026
  4. dezren39 commented on Oct 27, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: epic #1184 (wave 2 parent).

    Notes: the largest of this wave-2 batch (a new surface + ruling store + render integration) — effort/l. Verified live: disagreements still surface only as per-page badges (e.g. on /projects); no inbox exists on main.

    Risks: auto-applying a trust ruling to renders before the ruling model is proven could hide real divergence — ship detection + inbox first, rulings second.

    Suggested approach: slice 1 = conflict detection feeding a read-only inbox page from the canonical projection; slice 2 = rulings + render application.

  5. dezren39 commented on Nov 1, 2026

    @dezren39
    MemberAuthor

    agent-note:v1 — queue task 2534 (lane E) — triage verdict: CONFIRMED on current main

    Verified 2026-11-01 against origin/main 0ea0a0f:

    • The only disagreement surfacing is per-item and unresolved, exactly as filed: pm-stack/aggregator/src/render.ts:4897 renders the Project-vs-derived clash as a badge on the /projects item card ("both are shown, neither is preferred"), and model.ts:1207 documents the model as "Dated disagreements between sources, shown not resolved".
    • No inbox exists: no conflict route in the aggregator server, no /conflicts page or /api/conflicts.json.
    • No trust rulings: ruling appears nowhere in aggregator src; nothing stores per-class rulings as data, and renders never apply a trusted value.
    • No Kaneo-vs-GitHub disagreement surfacing in the aggregator, and no conflict count on the health surface.

    Route: scoped implementation packet enqueued as queue task 4992 (small_fix): /conflicts inbox + /api/conflicts.json across facets, per-class trust rulings as data (suppress + apply trusted value, listed/revocable), inbox count on the health surface, seeded-fixture tests.

  6. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 1, 2026
  7. 39 remaining items

  8. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · triaged

  9. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 3, 2026
  10. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  11. added a commit that references this issue on Nov 3, 2026
  12. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: reviewed (coverage loop-back)
    Coverage pass 2026-11-03, loop-back review: this issue was re-reviewed (drift / overlap / already-handled / stale / blockers / ordering) so every open issue in the four repos is reviewed and in the system. Verdict: still live; in the system as task 4992 (small_fix, queued, priority 40) in repo-health-code-pilot. Labels audited and synced. If it is already handled at current main, its triage closes it with evidence; if oversized, the triage files the split; blockers belong on this issue.
    Found via: coverage loop-back 2026-11-03

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/pm-stackpm-stack (Pad/Grist) in developing-today/codeeffort/lLarge: multi-day or open-ended; expect staged check-inskind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a humanstatus/needs-triageNot yet triaged; needs a first looktask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions