Skip to content

Allow Historical Resolution Dates via Resolution Events #27

Description

@evkw

Summary

Signals are often resolved in reality before they are resolved in Hermes. Users may batch-update signals days or weeks later, causing inaccurate reporting and timeline data.

Introduce event-based resolution tracking so Hermes can accurately represent:

  • When work was actually completed
  • When Hermes was updated

This preserves historical accuracy and aligns with the long-term timeline/event-driven direction of the platform.


Problem

Current behaviour stores a single resolvedOn date on the Signal.

Example:

  • Work completed: 8 May
  • Signal marked resolved in Hermes: 15 May

Current result:

resolvedOn = 15 May

This produces inaccurate:

  • Timeline history
  • Daily summaries
  • Reporting
  • Stream-based analysis

The historical record should reflect when the work was actually completed.


Proposed Solution

Resolution Becomes an Event

When resolving a signal, create a resolution event containing the actual completion date.

Example:

SignalEvent
-----------
type: RESOLVED
occurredAt: 2026-05-08
createdAt: 2026-05-15

Meaning:

  • Work was completed on 8 May
  • User recorded the event on 15 May

Signal Model Behaviour

Signal.resolvedOn remains for query performance and filtering.

However it becomes a derived/convenience field populated from the latest resolution event.

Rules:

  • Resolving a signal creates a RESOLVED event
  • Reopening a signal clears resolvedOn
  • Re-resolving creates a new RESOLVED event
  • resolvedOn is updated to match the latest active resolution event

UI Changes

Resolve Dialog

Replace one-click resolve with:

Resolve Signal

Completed On:
[ Date Picker ]

[ Resolve ]

Defaults:

  • Today

User may select:

  • Today
  • Any past date

Restrictions:

  • Cannot be before signal creation date
  • Cannot be in the future

Timeline Benefits

Future timeline views become significantly more useful.

Example:

Created
↓
Progressed
↓
Progressed
↓
Resolved (occurred 8 May)
↓
Recorded in Hermes (15 May)

This accurately reflects reality rather than user administration behaviour.


Event Types

New event:

RESOLVED

Existing:

REOPENED

No additional event types required initially.


Acceptance Criteria

  • User can select a completion date when resolving a signal
  • Resolution creates a RESOLVED event
  • Event stores actual completion date in occurredAt
  • resolvedOn is updated from the resolution event
  • User can reopen a signal
  • Reopening clears resolvedOn
  • Resolution date cannot be before signal creation
  • Resolution date cannot be in the future
  • Existing reporting uses resolvedOn without behavioural changes
  • Timeline displays actual completion date rather than record creation date

Notes

This enhancement improves historical accuracy without significantly increasing user effort and establishes a foundation for future timeline, reporting, and analytics features.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions