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
253 lines
7.8 KiB
JSON
253 lines
7.8 KiB
JSON
[
|
|
{
|
|
"id": "F001",
|
|
"description": "Add `tickets.master_ticket_id` to represent master/child bundle linkage.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F002",
|
|
"description": "Index child lookups by `(tenant, master_ticket_id)`.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F003",
|
|
"description": "Persist per-master bundle settings: `mode` and `reopen_on_child_reply`.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F004",
|
|
"description": "Persist idempotency keys for mirrored bundle updates to avoid duplicate mirrors.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F005",
|
|
"description": "Mark mirrored bundle comments as `is_system_generated`.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F006",
|
|
"description": "Expose bundle fields on ticket and comment API types (master linkage, rollups, system-generated flag).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F007",
|
|
"description": "Enforce: a ticket can belong to at most one bundle at a time.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F008",
|
|
"description": "Enforce: prevent cycles in bundle linkage (no ticket can be its own ancestor).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F009",
|
|
"description": "Enforce: bundling is same-tenant only (tenant-isolated under existing RLS patterns).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F010",
|
|
"description": "Permission-gate bundle management operations (create/add/remove/promote/unbundle).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F011",
|
|
"description": "Restrict bundling operations to users who can update all involved tickets.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F012",
|
|
"description": "Create a bundle from 2+ selected tickets by selecting a master and mode (default: sync updates).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F013",
|
|
"description": "Add a child ticket to an existing bundle.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F014",
|
|
"description": "Remove a child ticket from a bundle (unlink only that ticket).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F015",
|
|
"description": "Unbundle a master ticket (detach all children and remove settings).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F016",
|
|
"description": "Promote a child ticket to become the new master while retaining bundle membership.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F017",
|
|
"description": "Fetch bundle membership (master + children) and bundle settings for ticket detail views.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F018",
|
|
"description": "Update per-bundle settings (mode, reopen-on-reply) from the master ticket UI.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F019",
|
|
"description": "Ticket list supports a toggle between “Bundled view” (collapsed bundles) and “Individual view” (grouped tickets).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F020",
|
|
"description": "Persist the user's bundle view preference (local storage is acceptable).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F021",
|
|
"description": "Bundled view hides child rows and shows only master/standalone tickets.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F022",
|
|
"description": "Bundled view searching can match against child ticket identifiers/titles and returns the master.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F023",
|
|
"description": "Bundled view filtering (status/priority/board/client) remains correct for bundle-aware results.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F024",
|
|
"description": "Individual view groups children under their master when both appear in the result set.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F025",
|
|
"description": "Child rows show a “Bundled” indicator that references the master ticket number when shown outside an expanded group.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F026",
|
|
"description": "Bulk selection enables “Bundle Tickets” when 2+ tickets are selected.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F027",
|
|
"description": "Bundle modal allows selecting a master from the selection and choosing whether to sync updates.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F028",
|
|
"description": "Master ticket shows a bundle panel with child list and navigation links.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F029",
|
|
"description": "Master bundle panel supports add child, remove child, promote child to master, and unbundle actions.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F030",
|
|
"description": "Child tickets display a banner linking to their master ticket.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F031",
|
|
"description": "Child workflow fields (status/assignment/priority) are locked in the UI by default.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F032",
|
|
"description": "Server enforces locked workflow fields for bundled children (cannot change status/assignment/priority directly).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F033",
|
|
"description": "Child tickets keep their current status when bundled (no automatic closure/transition).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F034",
|
|
"description": "Master conversation surfaces inbound child public replies as view-only, child-attributed items (not duplicated onto the master).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F035",
|
|
"description": "Aggregated child replies do not create additional outbound emails by themselves.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F036",
|
|
"description": "In sync-updates mode, master status/assignment/priority updates propagate to all children.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F037",
|
|
"description": "In sync-updates mode, master closure fields propagate to children (closed_at/closed_by).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F038",
|
|
"description": "In sync-updates mode, master public comments are mirrored onto children as system-generated comments.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F039",
|
|
"description": "Mirrored comments are idempotent and do not duplicate on retries.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F040",
|
|
"description": "Internal notes on the master are not mirrored to children by default.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F041",
|
|
"description": "System-generated mirrored comments cannot be edited or deleted (UI + server enforcement).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F042",
|
|
"description": "Prevent creating time entries on bundled children (time is logged on the master).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F043",
|
|
"description": "Public master updates notify all child requesters by default (email fanout to child requesters; dedupe by email).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F044",
|
|
"description": "When a child is removed from a bundle, future updates/notifications follow normal rules for that child.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F045",
|
|
"description": "Optionally notify all child requesters when the master is closed (closure fanout policy).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F046",
|
|
"description": "Reopen-on-reply: if enabled, an inbound child reply can reopen the master ticket.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F047",
|
|
"description": "Bundles may span multiple clients/companies within the same tenant (no same-client constraint).",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F048",
|
|
"description": "UI clearly indicates when a bundle spans multiple clients/companies and surfaces per-child client context.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F049",
|
|
"description": "Bundling across multiple clients shows a warning/confirmation step before completing the bundle/add-child action.",
|
|
"implemented": true
|
|
},
|
|
{
|
|
"id": "F050",
|
|
"description": "Bundle operations surface clear validation errors in the UI (e.g., already bundled, same-tenant requirement).",
|
|
"implemented": true
|
|
}
|
|
]
|