Fleet changelogs · dev.ecs0.net
rdmbair15m5-changelog-20260923-1002-tyrell-cli-ticket-engine

rdmbair15m5-changelog-20260923-1002-tyrell-cli-ticket-engine

Delivered tyrell-cli command-line face and TyrellTicketEngine per FEAT-20260901-43.

Scope

Changes & Implementation

  1. TyrellTicketEngine Actor (Sources/TyrellCore/Tickets/TyrellTicketEngine.swift):
    • listTickets: Dynamic disk scanning with filtering by status, project, severity, and parent.
    • showTicket: Retrieves summary and full markdown content.
    • nextTicket: Atomic select-and-claim algorithm that filters open unassigned tickets, sorts by severity rank (critical > high > medium > low) then creation time, and claims with lease. Resolves INCIDENT-20260901-07.
    • claimTicket: Atomic lease acquisition with collision prevention when active unexpired lease is held.
    • resolveTicket: Updates frontmatter, appends delivery evidence, and moves ticket file from open/ to resolved/.
    • detectUnticketedWork: Heuristic Git status inspection; if dirty modifications exist with zero active ticket claims, auto-opens a new TASK-<date>-<seq> ticket.
  2. CLI Subcommands (Sources/tyrell/Tyrell.swift):
    • tyrell ticket list [--project <proj>] [--status <status>] [--severity <sev>] [--json]
    • tyrell ticket show <ID> [--json]
    • tyrell ticket next [--project <proj>] [--as <who>] [--lease <mins>] [--json]
    • tyrell ticket claim <ID> [--as <who>] [--lease <mins>] [--note <note>] [--force] [--json]
    • tyrell ticket resolve <ID> --reason <reason> [--evidence <evidence>] [--as <who>] [--force] [--json]
    • tyrell ticket auto-open [--repo <path>] [--as <who>] [--json]
    • tyrell ticket audit ... (preserves existing auditor functionality)
  3. REV-20260901-03 Conformance:
    • Zero hardcoded hostnames (rdmsm4x, rdmbair15m5, etc.), tailnet domains, or /Users/richh paths.
    • Uses dynamic TyrellBootstrap.shared.ticketStoreRootURL, FileManager.default.homeDirectoryForCurrentUser, and Host.current().
  4. Unit Tests (Tests/TyrellCoreTests/TyrellTicketEngineTests.swift):
    • 5/5 test cases passed (listing, atomic next selection, collision rejection, resolution move, zero hardcoded identity conformance).

Verification Evidence