Skip to content

kbc: residual selfcheck tickets need a kind field, dedup, and must not surface as owner question cards #432

Description

@LikiosSedo

Observed (adoption run, siflow-test, 2026-07-22)

After the repair budget was spent, the question inbox contained multiple cards all titled "自检残留待处理", each dumping raw SELFCHECK lint output (broken_link / body_source_malformed …) at the end user, alongside real content contradictions. One run produced 55+ cards of which a large fraction were infra residuals; several duplicate residual cards accumulated across rounds (content-fingerprint dedup misses because the residual text shifts every round).

Problems

  1. Residual tickets carry no kind — content contradictions (owner-decidable) and mechanical lint residue (agent/operator work) land in the same user-facing queue.
  2. Dedup by content fingerprint fails across repair rounds → duplicate residual cards.
  3. The correct owner action for residuals is almost always "再修一轮" — i.e. it is not an owner decision at all.

Proposal

  • Ticket schema: kind: contradiction | infra_residual (box writes it; code-filed residual tickets are always infra_residual).
  • infra_residual routes to the maintainer/ops surface (LEDGER + status line), not the question inbox; auto-continue repair while budget remains (see fix(kbc): scale L1 auto-repair budget with open-violation workload #430 for workload-scaled budget).
  • Dedup residual tickets by violation identity (page+kind set), not full-text fingerprint.

sicore side (inbox rendering/filtering by kind) needs a matching change — filed separately.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions