Skip to content

Fragment-review UI — surface new sub_aspect bindings on WatchedItem detail (diff-on-view) #163

@gregoryfoster

Description

@gregoryfoster

Context

The InfoItem-first design (Section 5.3 of docs/plans/2026-05-15-watched-item-infoitem-first-design.md) called for a "diff-on-view" UI on each WatchedItem detail page:

When Archiver gains a new sub_aspect binding under an InfoItem the operator has subscribed to, the WatchedItem detail page surfaces 'N new sub_aspects available' and a one-click 'add Watches for these' action.

The watched_items.last_reviewed_at column was added in commit 57307ad for this purpose but currently has no UI surface.

Scope

On the WatchedItem detail page (forthcoming via #161):

  1. Detect new bindings. On render, call archiver.get_info_item(info_item_id) and partition info_item_sources by created_at:
    • Bindings with created_at > watched_item.last_reviewed_at are "new since last review."
    • If none, show "All sub_aspects reviewed" status.
  2. Review prompt. Surface "N new sub_aspects available" banner with:
    • Per-binding row (selector, role, created_at).
    • Bulk "Add Watches for these" action that creates Watches with sensible defaults (resolved via the live-inheritance chain).
    • "Mark all reviewed" action that stamps last_reviewed_at = now without creating Watches.
  3. Audit log entries for add_watch_from_review and mark_reviewed so the operator can trace why Watches were created.

Acceptance

  • WatchedItem detail page shows "N new sub_aspects available since YYYY-MM-DD" when Archiver added bindings after last_reviewed_at.
  • Operator can bulk-create Watches for any subset and the action is auditable.
  • Operator can mark-reviewed without creating Watches (signal "I've seen these and chose not to watch").
  • "Mark reviewed" stamps last_reviewed_at = now atomically.

Depends on

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions