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

49 lines
8.2 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[
{ "id": "F001", "description": "Add `tacticalrmm` to RMM provider unions/types (assets + rmm interfaces) so the provider can be persisted and rendered.", "implemented": true, "prdRefs": ["Goals", "Data / API / Integrations"] },
{ "id": "F002", "description": "Update UI provider display helpers (e.g., status badge/indicator) to show a friendly name for `tacticalrmm`.", "implemented": true, "prdRefs": ["Goals", "UX / UI Notes"] },
{ "id": "F003", "description": "Support a third agent status value `overdue` end-to-end (types, filters, badges) for Tacticals computed status.", "implemented": true, "prdRefs": ["Goals", "Functional Requirements"] },
{ "id": "F010", "description": "Add Tactical RMM entry to Integrations Settings -> RMM tab (CE + EE, not enterprise-gated).", "implemented": true, "prdRefs": ["Goals", "UX / UI Notes"] },
{ "id": "F011", "description": "Create Tactical RMM settings panel UI with: instance URL input, auth mode selector, credential form, save/test/connect, and disconnect.", "implemented": true, "prdRefs": ["Users and Primary Flows", "UX / UI Notes"] },
{ "id": "F012", "description": "Display Tactical connection status panel (connected, last sync, counts, last error).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F013", "description": "Add UI for syncing Tactical Clients (organizations) and show results (processed/created/updated/failed).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F014", "description": "Add UI for syncing Tactical Devices (agents) and show results (processed/created/updated/deleted/failed).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F015", "description": "Add UI section for org mapping: map Tactical Clients to Alga Clients, toggle auto-sync per org.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F016", "description": "Add UI section for webhook configuration: show webhook URL, required header name/value, and a copy/paste JSON payload template.", "implemented": true, "prdRefs": ["Functional Requirements", "UX / UI Notes"] },
{ "id": "F017", "description": "Add optional UI action to sync/backfill Tactical alerts and show last backfill status.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F018", "description": "Add optional UI action to ingest bulk software inventory via Tactical `GET /software/` and show status.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F020", "description": "Implement server actions for Tactical settings: save/get credential status with masking, and clear credentials on disconnect.", "implemented": true, "prdRefs": ["Functional Requirements", "Security / Permissions"] },
{ "id": "F021", "description": "Implement server action to test Tactical connection (using current auth mode) with actionable error messages.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F022", "description": "Implement server actions for Tactical integration record management in `rmm_integrations` (create/update is_active, instance_url, settings JSON).", "implemented": true, "prdRefs": ["Data / API / Integrations"] },
{ "id": "F023", "description": "Implement server action to return Tactical connection status summary (counts of mapped orgs/devices/active alerts).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F030", "description": "Create Tactical API client wrapper with base URL normalization and shared request helpers.", "implemented": true, "prdRefs": ["Data / API / Integrations"] },
{ "id": "F031", "description": "Implement Tactical API key auth mode in the API client (`X-API-KEY`).", "implemented": true, "prdRefs": ["Data / API / Integrations"] },
{ "id": "F032", "description": "Implement Tactical Knox auth mode: checkcreds -> login (TOTP-aware), persist token + expiry, and attach `Authorization: Token ...` header.", "implemented": true, "prdRefs": ["Goals", "Data / API / Integrations"] },
{ "id": "F033", "description": "Implement Knox re-auth on 401 for username/password mode (best-effort retry once per request).", "implemented": true, "prdRefs": ["Non-functional Requirements"] },
{ "id": "F034", "description": "Implement beta pagination helpers (PageNumberPagination with `page_size` up to 1000).", "implemented": true, "prdRefs": ["Non-functional Requirements"] },
{ "id": "F040", "description": "Implement Tactical inventory sync: fetch clients (`/beta/v1/client/`) and upsert into `rmm_organization_mappings` for provider `tacticalrmm`.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F041", "description": "Implement Tactical org mappings API: list and update mappings (client_id assignment, auto_sync_assets).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F050", "description": "Implement Tactical device sync engine (full sync): fetch sites and agents (paged) for mapped Tactical clients and upsert into Assets.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F051", "description": "Compute Tactical agent status as `online|offline|overdue` from last_seen/offline_time/overdue_time (list endpoint compatible).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F052", "description": "Implement mapping from Tactical agent fields into Alga asset base fields (name/serial/os/version/provider IDs, last seen, last sync).", "implemented": true, "prdRefs": ["Goals", "Data / API / Integrations"] },
{ "id": "F053", "description": "Implement mapping from Tactical agent fields into cached RMM vitals fields (current_user, uptime_seconds, lan_ip, wan_ip) where possible.", "implemented": true, "prdRefs": ["Goals"] },
{ "id": "F054", "description": "Upsert `tenant_external_entity_mappings` for Tactical agents using `external_entity_id=agent_id`, `external_realm_id=tactical_client_pk`, and include site id/name in metadata.", "implemented": true, "prdRefs": ["Data / API / Integrations"] },
{ "id": "F055", "description": "Implement device deletion handling policy for Tactical sync (either mark inactive when missing or explicitly skip; choose and document behavior).", "implemented": true, "prdRefs": ["Open Questions"] },
{ "id": "F056", "description": "Implement targeted 'sync single agent' server action by `agent_id` (used by webhook and manual refresh).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F060", "description": "Add Tactical webhook endpoint `POST /api/webhooks/tacticalrmm` (CE + EE) and skip API-key auth middleware for this path.", "implemented": true, "prdRefs": ["Functional Requirements", "Security / Permissions"] },
{ "id": "F061", "description": "Validate Tactical webhook requests using `X-Alga-Webhook-Secret` against the stored integration webhook secret.", "implemented": true, "prdRefs": ["Security / Permissions"] },
{ "id": "F062", "description": "Define and document the expected Tactical webhook JSON contract (required: agent_id; recommended: client_id/site_id/event/severity/message/alert_time/alert_id).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F063", "description": "On webhook receive: upsert `rmm_alerts` for provider `tacticalrmm`, associate alert to asset via `agent_id` mapping when available.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F064", "description": "On webhook receive: trigger 'sync single agent' to refresh cached vitals + status for the affected asset.", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F070", "description": "Implement Tactical alerts backfill via `PATCH /alerts/` and upsert into `rmm_alerts` (configurable filters).", "implemented": true, "prdRefs": ["Functional Requirements", "Open Questions"] },
{ "id": "F071", "description": "Implement bulk software inventory ingestion via `GET /software/` and map results into Algas software inventory storage (initially minimal ingestion; no per-agent refresh).", "implemented": true, "prdRefs": ["Functional Requirements"] },
{ "id": "F080", "description": "Publish existing event-bus events for Tactical integration actions where appropriate (RMM_WEBHOOK_RECEIVED, RMM_DEVICE_UPDATED/CREATED, INTEGRATION_SYNC_*).", "implemented": true, "prdRefs": ["Observability"] }
]