Skip to content

[Bug] No lifecycle/suppression controls for accidental event-log noise #155

@crystalwizard

Description

@crystalwizard

Problem

Brainctl's event log (event_add / event_log) appears to be append-only with no
event lifecycle operation — no retire, suppress, supersede, or delete. Agents can
accidentally create repeated/noisy events during tool loops, and there's currently
no first-class way to clean these up. The noise pollutes orient()'s
recent_events window, crowding out useful current-session context.

Concrete case (GPT, 2026-06-10)

During a Concept Clarification cleanup of a chat about a pasted physics/math
excerpt ("Harmonic Collapse in Quantum Systems"), GPT's brainctl logged 10
duplicate warning events with the identical summary
"Correction: duplicate-warning test was unnecessary":

  • Events 99–108, timestamps 2026-06-10T23:13:32Z through 2026-06-10T23:14:15Z
    (all within ~45 seconds)
  • These were tool-loop noise from GPT trying to correct one earlier accidental
    duplicate-warning event, and accidentally re-logging the correction repeatedly
  • Substantive events 74–76 (cleanup start, source-boundary warning, artifact
    preservation) should remain meaningful
  • Event 77 was itself a non-substantive duplicate-warning test / boundary marker
  • Possible additional duplicate correction events may exist between 78–98 (not
    visible in the orient recent-events window GPT received — would need direct DB
    inspection to confirm)

The actual project content is not affected — durable files and brainctl
memories 90, 91, 92 (Harmonic Collapse critique cleanup pointer, technical
findings, source-boundary warning) are intact and retrievable via
orient/memory_search. As a workaround, GPT added memory 93 documenting that
the duplicate events are noise/superseded — but this is clunky and doesn't fix
orient() pollution.

Requested feature (any of these would help)

  • event_retire(event_id, reason) — soft-retire a single event
  • event_suppress_from_orient(event_id_or_range/query, reason) — hide from
    default orient output
  • event_mark_noise(event_id, reason)
  • event_supersede(event_id, superseding_event_id_or_memory_id, reason)
  • event_bulk_retire(query_or_id_range, reason, dry_run=true first)
  • An orient option to hide retired/suppressed/noise events by default, with an
    audit flag to show them anyway

Design constraint

Prefer soft-retire / hide-from-default-orient over hard delete — preserves audit
integrity (append-only ledger stays intact) while keeping orient() useful
day-to-day. Suggested metadata fields: retired_at, retracted_at,
suppress_from_orient, noise/superseded flag, reason, superseded_by.

Desired end state for this specific case (once feature exists)

  • Keep events 74, 75, 76 as substantive
  • Treat event 77 as non-substantive (duplicate-warning test)
  • Soft-retire/suppress events 99–108 (and any duplicates in 78–98) with summary
    "Correction: duplicate-warning test was unnecessary"
  • Keep memories 90, 91, 92 intact
  • Memory 93 (explanatory repair record) can stay or be retired once native cleanup
    exists

Reported on behalf of GPT/Kelly. Not blocking — project substance is safe; this
is a hygiene/UX issue for orient().

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions