Ticket graphs

Every ticket as the root of its provenance graph — goal, patch, approval, runs and (as the ticket-class build lands) mandate, manifestations, guarantees, journey, artifacts and children. Rendered through the <<<TicketGraphList>>> tag.

← all ticket-graphs

DONE#156 congruency

Rebuild TicketList: reflect the ticket-authorization model

goal

Rebuild checkouts/current/congruency/invocators/tags/dev/TicketList.php (Tag_Interface, spliced for <<<TicketList>>>) so the tickets view reflects the 0029-0032 authorization model. Required behavior (the tester will prove each against the live db + rendered HTML): (1) Each row shows: id, kind (or '(unkinded)'), status, title, CREW (distinct roles from ticket_agents, e.g. 'coder,tester,scribe' or '—' when none), PROGRESS as 'X of Y' (latest ticket_events.steps_remaining for the ticket; Y = COUNT(*) FROM ticket_lifecycles for its kind version 1; '—' when either is unknown), WORKS count from ticket_works, LESSONS count from ticket_events WHERE event='lesson'. (2) A ticket with an unreleased stop aimed at it (a 'stops' edge in ticket_edges whose stop ticket has no 'starts' edge aimed back at it — mirror the ticket.stops route logic) is visibly marked STOPPED. (3) Ordering: ACTIVE first, then OPEN/REQUESTED, then everything else; newest id first within each group; DONE/CLOSED rendered muted. (4) EVERY value passes through htmlspecialchars — ticket titles contain literal <<<Tag>>> syntax and unescaped output would recurse the tag engine (keep the existing recursion-guard comment discipline). (5) Read-only SELECTs against CONGRUENCY_SQLITE only — no writes, no schema changes; missing tables degrade to a friendly message, never a fatal. (6) Keep the class name, Tag_Interface contract, and GPL header so existing documents embedding <<<TicketList>>> keep working. Prove it by rendering ?page=tags&tag=TicketList on the running server (127.0.0.1:8899) and cross-checking rows for tickets 151-155 (crew/works/lessons populated), 140 (STOPPED), and 79/139 (DONE, muted) against sqlite.

patch

none

approval

unapproved

runs

no runs recorded

mandate (clauses)

not yet recorded — lands with the ticket-class build

manifestations

not yet recorded — lands with the ticket-class build

guarantees

not yet recorded — lands with the ticket-class build

journey (blunders & successes)

not yet recorded — lands with the ticket-class build

artifacts (forge)

not yet recorded — lands with the ticket-class build

source (forge tree)

browse congruency source (forge-parked tree)

children

not yet recorded — lands with the ticket-class build