Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
243 lines
9.0 KiB
JSON
243 lines
9.0 KiB
JSON
[
|
|
{
|
|
"id": "F001",
|
|
"description": "Create a dedicated ticket activity/audit table migration with tenant, ticket, event, actor, source, entity, changes, details, occurred_at, and created_at fields.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data / API / Integration Notes", "Functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F002",
|
|
"description": "Add tenant/ticket/time indexes that support efficient timeline reads for a single ticket.",
|
|
"implemented": true,
|
|
"prdRefs": ["Non-functional Requirements", "Data / API / Integration Notes"]
|
|
},
|
|
{
|
|
"id": "F003",
|
|
"description": "Define TypeScript types/constants for ticket activity event types, actor types, entity types, and sources.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data / API / Integration Notes"]
|
|
},
|
|
{
|
|
"id": "F004",
|
|
"description": "Align ticket activity event names with existing ticket domain events where practical.",
|
|
"implemented": true,
|
|
"prdRefs": ["Functional Requirements", "Data / API / Integration Notes"]
|
|
},
|
|
{
|
|
"id": "F005",
|
|
"description": "Implement a shared activity logging helper that writes with explicit tenant and works in normal and admin transactions.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data / API / Integration Notes", "Non-functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F006",
|
|
"description": "Ensure activity logging helper fails fast for transactional write failures while tolerating optional display-name enrichment failures.",
|
|
"implemented": true,
|
|
"prdRefs": ["Non-functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F007",
|
|
"description": "Implement curated ticket field diffing for status, priority, assignment/team, board, category/subcategory, client/contact, due date, title, response state, and close/reopen fields.",
|
|
"implemented": true,
|
|
"prdRefs": ["Field Diff Rules", "Functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F008",
|
|
"description": "Prevent no-op ticket updates from creating activity entries.",
|
|
"implemented": true,
|
|
"prdRefs": ["Field Diff Rules"]
|
|
},
|
|
{
|
|
"id": "F009",
|
|
"description": "Resolve display labels for curated field diffs where practical while retaining raw IDs in structured changes.",
|
|
"implemented": true,
|
|
"prdRefs": ["Field Diff Rules"]
|
|
},
|
|
{
|
|
"id": "F010",
|
|
"description": "Create activity entries for ticket creation paths used by UI/server actions and shared ticket model flows.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F011",
|
|
"description": "Create activity entries for general curated ticket update paths used by UI/server actions.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events", "Field Diff Rules"]
|
|
},
|
|
{
|
|
"id": "F012",
|
|
"description": "Create activity entries for REST API ticket create/update paths in TicketService.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data / API / Integration Notes", "Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F013",
|
|
"description": "Create activity entries for status changes, including closed and reopened transitions.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F014",
|
|
"description": "Create activity entries for priority changes.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F015",
|
|
"description": "Create activity entries for assignment, unassignment, and team assignment changes.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F016",
|
|
"description": "Create activity entries for board/status move actions.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F017",
|
|
"description": "Create activity entries for response state changes.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F018",
|
|
"description": "Create activity entries for public comment/customer-visible message creation.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events", "Timeline Scope"]
|
|
},
|
|
{
|
|
"id": "F019",
|
|
"description": "Create activity entries for internal note creation.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events", "Timeline Scope"]
|
|
},
|
|
{
|
|
"id": "F020",
|
|
"description": "Create metadata-only activity entries for comment/internal-note edits without storing full old/new body content.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events", "Data / API / Integration Notes"]
|
|
},
|
|
{
|
|
"id": "F021",
|
|
"description": "Create activity entries for customer replies from client portal paths.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F022",
|
|
"description": "Create activity entries for inbound email ticket creation with source and safe email metadata.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events", "Non-functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F023",
|
|
"description": "Create activity entries for inbound email reply/comment creation with source and safe email metadata.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events", "Non-functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F024",
|
|
"description": "Create activity entries for inbound email reopen transitions.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F025",
|
|
"description": "Create activity entries for bundle/master reopen from child reply behavior.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F026",
|
|
"description": "Create activity entries for ticket document attachment/removal flows where those mutations already exist.",
|
|
"implemented": true,
|
|
"prdRefs": ["Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F027",
|
|
"description": "Implement a ticket timeline read model that returns activity entries for a ticket sorted by occurrence time with stable tie-breaking.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data and API Behavior", "Timeline Scope"]
|
|
},
|
|
{
|
|
"id": "F028",
|
|
"description": "Have the timeline read model include or resolve current comment content for comment/note activity entries without duplicating old/new edit bodies.",
|
|
"implemented": true,
|
|
"prdRefs": ["UX / UI Notes", "Data and API Behavior"]
|
|
},
|
|
{
|
|
"id": "F029",
|
|
"description": "Enforce existing internal ticket read permissions on the timeline read path.",
|
|
"implemented": true,
|
|
"prdRefs": ["Security / Permissions"]
|
|
},
|
|
{
|
|
"id": "F030",
|
|
"description": "Do not expose the unified timeline to client portal users in v1.",
|
|
"implemented": true,
|
|
"prdRefs": ["Security / Permissions", "Timeline Scope"]
|
|
},
|
|
{
|
|
"id": "F031",
|
|
"description": "Add a unified internal activity timeline UI to the ticket detail experience.",
|
|
"implemented": true,
|
|
"prdRefs": ["UX / UI Notes", "Acceptance Criteria / Definition of Done"]
|
|
},
|
|
{
|
|
"id": "F032",
|
|
"description": "Render human-readable timeline entries for ticket creation, field changes, status/close/reopen, priority, assignment, response state, inbound email, and document events.",
|
|
"implemented": true,
|
|
"prdRefs": ["UX / UI Notes"]
|
|
},
|
|
{
|
|
"id": "F033",
|
|
"description": "Render public comments, customer replies, and internal notes chronologically within the unified timeline.",
|
|
"implemented": true,
|
|
"prdRefs": ["UX / UI Notes", "Timeline Scope"]
|
|
},
|
|
{
|
|
"id": "F034",
|
|
"description": "Display actor/source context on timeline entries, including user/contact/system/API/inbound email distinctions.",
|
|
"implemented": true,
|
|
"prdRefs": ["Timeline Scope", "UX / UI Notes"]
|
|
},
|
|
{
|
|
"id": "F035",
|
|
"description": "Handle tickets with no activity rows gracefully without requiring historical backfill.",
|
|
"implemented": true,
|
|
"prdRefs": ["Rollout / Migration", "Non-functional Requirements"]
|
|
},
|
|
{
|
|
"id": "F036",
|
|
"description": "Ensure timeline UI uses existing Alga UI components and unique IDs for interactive elements.",
|
|
"implemented": true,
|
|
"prdRefs": ["UX / UI Notes"]
|
|
},
|
|
{
|
|
"id": "F037",
|
|
"description": "Document activity event payload conventions and safe metadata rules for future ticket mutation paths.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data / API / Integration Notes", "Security / Permissions"]
|
|
},
|
|
{
|
|
"id": "F038",
|
|
"description": "Avoid storing raw full inbound email bodies or full old/new comment edit bodies in activity rows.",
|
|
"implemented": true,
|
|
"prdRefs": ["Non-functional Requirements", "Audited / Timeline Events"]
|
|
},
|
|
{
|
|
"id": "F039",
|
|
"description": "Ensure activity writes in inbound email/admin transaction paths pass explicit tenant and do not rely on `app.current_tenant` GUC.",
|
|
"implemented": true,
|
|
"prdRefs": ["Data / API / Integration Notes"]
|
|
},
|
|
{
|
|
"id": "F040",
|
|
"description": "Keep existing generic audit log helpers untouched except where consolidation is clearly safe and not required for ticket timeline v1.",
|
|
"implemented": true,
|
|
"prdRefs": ["Non-goals", "Existing Related Infrastructure"]
|
|
}
|
|
]
|