{
  "schemaVersion": 2,
  "date": "2026.08.15",
  "publishedAt": "2026-08-15T13:25:04-07:00",
  "timeZone": "America/Los_Angeles",
  "title": "Queue cards gain event-backed lifecycle dates",
  "publicationStatus": "Implemented, validated, and live",
  "executiveSummary": [
    "Every idea card in Hiro's Ranked Ideas queue now shows when the idea was added and its actual progress dates, including investigation, first candidate attempt, canary start, terminal outcome, and latest activity when those milestones exist.",
    "The dates are derived from Hiro's immutable append-only event ledger, so the improvement applies to historical queue records as well as newly added ideas.",
    "The live current candidate was verified with an August 14 added date and August 15 investigation and first-attempt dates after Hiro restarted on the new code.",
    "All 586 repository tests passed, the live circuit breaker remained closed, and browser inspection confirmed the lifecycle dates render on the Ranked Ideas page."
  ],
  "workstreams": [
    {
      "title": "Event-backed lifecycle model",
      "status": "Completed",
      "details": [
        "Added a bulk lifecycle derivation method that reads idea creation metadata and the append-only events table in event order.",
        "Mapped idea_queued to Added, investigation_started to Investigated, potential_confirmed to First attempted, and candidate_tests_passed to Canary started.",
        "Mapped implementation, rejection, and supersession event families to their corresponding terminal dates while retaining Latest activity for every record.",
        "Used creation and update timestamps only as safe fallbacks for records whose historical event coverage predates a milestone."
      ]
    },
    {
      "title": "Ranked Ideas interface",
      "status": "Completed",
      "details": [
        "Added a compact wrapping lifecycle row to every queue card.",
        "Cards suppress milestones that were never reached, so a waiting idea shows Added and Latest activity while progressed or terminal records show the additional applicable dates.",
        "Dates use the existing dashboard local-time formatter and the timeline has an accessible Idea lifecycle dates label.",
        "The lifecycle appears consistently in Waiting, Active, Retrying, Implemented, Rejected, Superseded, and the unfiltered queue view because all use the shared card renderer."
      ]
    },
    {
      "title": "Historical backfill and live rollout",
      "status": "Completed",
      "details": [
        "No database migration or guessed timestamp generation was required; the existing immutable event ledger supplies historical milestones on read.",
        "Hiro restarted successfully after the implementation commit, and both API ports returned on the updated process.",
        "The continuous-improvement endpoint returned lifecycle data for all 118 queue records and kept the promotion circuit breaker closed."
      ]
    }
  ],
  "decisions": [
    "Treat the append-only event ledger as the source of truth rather than adding mutable date columns that could drift from the audit history.",
    "Define First attempted as the first potential_confirmed transition, when an investigated idea becomes an actionable candidate, rather than counting investigation alone as an attempt.",
    "Show only milestones an idea actually reached instead of filling missing stages with misleading placeholders.",
    "Compute all lifecycle values in one bulk query so the dashboard does not introduce one database query per queue card.",
    "Develop and run focused tests in an isolated worktree while the live promotion loop remained active, then integrate one validated commit into the main branch."
  ],
  "validation": [
    {
      "check": "Focused lifecycle and dashboard tests",
      "status": "passed",
      "result": "Twenty-four focused tests passed, including new coverage for full implemented lifecycles, rejection dates, supersession dates, and required queue-card labels."
    },
    {
      "check": "Authoritative full Hiro suite",
      "status": "passed",
      "result": "All 586 tests passed in 163.52 seconds in Hiro's real pinned environment."
    },
    {
      "check": "Live API backfill",
      "status": "passed",
      "result": "The live API reported 118 ideas with lifecycle objects. The current candidate reported Added at 2026-08-14T23:22:22.214893+00:00, Investigated at 2026-08-15T20:08:12.872669+00:00, and First attempted at 2026-08-15T20:08:12.899856+00:00."
    },
    {
      "check": "Live browser rendering",
      "status": "passed",
      "result": "The Ranked Ideas view visibly rendered Added, Investigated, First attempted, and Latest activity in local time for the active card."
    },
    {
      "check": "Runtime health",
      "status": "passed",
      "result": "Hiro restarted on the new commit, ports 8001 and 8765 listened on the same validated child process, and the continuous-improvement circuit breaker remained closed."
    }
  ],
  "currentState": [
    "Every queue API record includes a lifecycle object derived from durable evidence.",
    "Every Ranked Ideas card shows Added and Latest activity, plus all lifecycle milestones the idea actually reached.",
    "Historical records receive dates without rewriting the queue database.",
    "The implementation is live at Hiro commit 8e19fd0 and the promotion loop remains operational."
  ],
  "limitations": [
    "Very old records can show only Added and Latest activity if the corresponding milestone event was never written; Hiro does not fabricate missing history.",
    "First attempted records the start of the first candidate attempt, while the existing attempt count remains the source for the number of completed retries.",
    "The dashboard formats timestamps in the browser's local timezone; the API and event ledger retain ISO 8601 UTC offsets."
  ],
  "nextSteps": [
    "Use the new dates to identify queue aging, long investigation intervals, and slow candidate-to-canary transitions.",
    "Consider aggregate cycle-time summaries only after enough implemented ideas exist to make those statistics meaningful.",
    "Continue preserving all lifecycle transitions through the append-only event ledger."
  ]
}
