Hermes 284313f908
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
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

218 lines
7.0 KiB
JSON

[
{
"id": "T001",
"mode": "automated",
"description": "Availability registry: registered resolver is invoked with (knex, tenantId); module whose availabilityKey has no resolver is unavailable (fail closed); resolver throwing marks module unavailable without propagating (catalog listing does not throw).",
"implemented": true,
"featureIds": [
"F001",
"F002"
]
},
{
"id": "T002",
"mode": "automated",
"description": "rmmIntegrationAvailability: true for active+connected rmm_integrations row of the matching provider; false when inactive, connected_at null, row absent, or provider mismatched.",
"implemented": true,
"featureIds": [
"F003"
]
},
{
"id": "T003",
"mode": "automated",
"description": "NinjaOne migration parity: designer catalog output (group, actions, ordering) identical before/after for a connected NinjaOne tenant; app:ninjaone absent for a disconnected tenant.",
"implemented": true,
"featureIds": [
"F005",
"F002"
]
},
{
"id": "T004",
"mode": "automated",
"description": "registerIntegrationWorkflowModule idempotency: invoking registration twice yields no duplicate module tiles, actions, or resolvers.",
"implemented": true,
"featureIds": [
"F004"
]
},
{
"id": "T005",
"mode": "automated",
"description": "Catalog gating matrix: with tactical+level connected and huntress+teams not, exactly app:tacticalrmm and app:levelio appear alongside core groups; connecting/disconnecting flips tiles accordingly.",
"implemented": true,
"featureIds": [
"F002",
"F013",
"F019",
"F023",
"F029"
]
},
{
"id": "T006",
"mode": "automated",
"description": "NinjaOne run_script handler: happy path passes type/id/parameters/runAs to client and returns vendor response; vendor 4xx surfaces status + message without credentials; scripting_options returns discovery list.",
"implemented": true,
"featureIds": [
"F006",
"F007",
"F032"
]
},
{
"id": "T007",
"mode": "automated",
"description": "Tactical handlers (mocked client): agents.find/get mapping; scripts.list returns id+name+shell; run_script returns output; run_command and reboot mark side-effects; not-connected integration yields actionable error.",
"implemented": true,
"featureIds": [
"F008",
"F009",
"F010",
"F011",
"F012",
"F032"
]
},
{
"id": "T008",
"mode": "automated",
"description": "TacticalRmmClient new wrappers: correct method/path/payload for getAgent, listScripts, runScript, runCommand, reboot under both api_key and Knox auth modes.",
"implemented": true,
"featureIds": [
"F008"
]
},
{
"id": "T009",
"mode": "automated",
"description": "Level handlers (mocked client): devices.find group filter pass-through; alerts.resolve posts to /v2/alerts/{id}/resolve; automations.trigger posts token + device_ids[] and maps no-webhook-trigger failure to actionable error; run_status returns run state.",
"implemented": true,
"featureIds": [
"F014",
"F015",
"F016",
"F017",
"F018",
"F032"
]
},
{
"id": "T010",
"mode": "automated",
"description": "Huntress thin client: Basic auth header from tenant secrets; min-interval spacing enforced; 429 retried with backoff then surfaced; incidents.resolve sends the write call; reads map filters correctly.",
"implemented": true,
"featureIds": [
"F020",
"F021",
"F022",
"F032"
]
},
{
"id": "T011",
"mode": "automated",
"description": "Teams handlers: notify_user errors actionably when user lacks linked Microsoft account; send_dm errors actionably when no conversation reference exists; post_to_channel errors actionably when app not installed in team; happy paths invoke delivery/bot connector with expected payloads (mocked).",
"implemented": true,
"featureIds": [
"F024",
"F025",
"F026",
"F027",
"F028",
"F032"
]
},
{
"id": "T012",
"mode": "automated",
"description": "Teams availability resolver: available only when install_status='active' AND add-on active; either missing => unavailable.",
"implemented": true,
"featureIds": [
"F024"
]
},
{
"id": "T013",
"mode": "automated",
"description": "scheduling.create_entry: creates entry visible via model layer with assignee/ticket link; validation errors for unknown user and end-before-start; output includes entry id.",
"implemented": true,
"featureIds": [
"F030"
]
},
{
"id": "T014",
"mode": "manual",
"description": "Local-test stack: connect/disconnect Tactical and Level; verify palette tiles appear/disappear in the designer without restart artifacts; NinjaOne tile unchanged throughout.",
"implemented": false,
"featureIds": [
"F002",
"F005",
"F013",
"F019"
]
},
{
"id": "T015",
"mode": "manual",
"description": "Local-test stack with Tactical mock server: workflow runs tacticalrmm.scripts.list then agents.run_script; script output visible in run inspector and usable in a downstream ticket note step.",
"implemented": false,
"featureIds": [
"F011",
"F012"
]
},
{
"id": "T016",
"mode": "manual",
"description": "Teams test tenant: notify_user lands in activity feed; send_dm arrives from bot; post_to_channel posts in a channel of a team with the app installed and errors actionably in one without.",
"implemented": false,
"featureIds": [
"F025",
"F026",
"F027",
"F028"
]
},
{
"id": "T017",
"mode": "manual",
"description": "scheduling.create_entry from a workflow: entry appears on the dispatch board for the assignee and (when a calendar is connected) syncs to the external calendar.",
"implemented": false,
"featureIds": [
"F030"
]
},
{
"id": "T018",
"mode": "manual",
"description": "Designer icons: the four new tiles render their integration logos at palette and node sizes (no missing-icon fallback).",
"implemented": false,
"featureIds": [
"F031"
]
},
{
"id": "T019",
"mode": "automated",
"description": "GroupedActionConfigSection: disconnected banner renders for available=false records with action select still enabled; no banner when available is true or unspecified (core records). Catalog action returns available=false record for disconnected first-party integration (T003/T004 updated).",
"implemented": true,
"featureIds": [
"F033",
"F035"
]
},
{
"id": "T020",
"mode": "manual",
"description": "Live editor: with a saved workflow using Tactical actions, disconnect Tactical; reload designer: tile absent from palette, step shows Disconnected badge, config panel shows banner and remains editable; reconnect restores tile and clears badge/banner.",
"implemented": false,
"featureIds": [
"F033",
"F034",
"F035"
]
}
]