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

201 lines
7.2 KiB
JSON
Raw Permalink 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": "T001",
"description": "Enterprise Accounting integrations renders both active `Xero` and existing `Xero CSV` options together.",
"implemented": true,
"featureIds": ["F001", "F019", "F020"]
},
{
"id": "T002",
"description": "Non-Enterprise Accounting integrations does not expose the live `Xero` option.",
"implemented": true,
"featureIds": ["F020", "F021"]
},
{
"id": "T003",
"description": "Selecting `Xero` loads the dedicated accounting-scoped Xero settings screen rather than linking to Providers.",
"implemented": true,
"featureIds": ["F002"]
},
{
"id": "T004",
"description": "The Xero settings screen displays the expected redirect URI and Xero OAuth scopes for customer app setup.",
"implemented": true,
"featureIds": ["F003"]
},
{
"id": "T005",
"description": "The Xero status action returns masked credential readiness, connection summaries, default connection id, redirect URI, scopes, and error fields without exposing secret values.",
"implemented": true,
"featureIds": ["F004", "F007", "F025"]
},
{
"id": "T006",
"description": "Saving blank Xero client ID is rejected with a clear validation error.",
"implemented": true,
"featureIds": ["F005"]
},
{
"id": "T007",
"description": "Saving blank Xero client secret is rejected with a clear validation error.",
"implemented": true,
"featureIds": ["F005"]
},
{
"id": "T008",
"description": "Saving valid tenant-owned Xero credentials stores `xero_client_id` and `xero_client_secret` as tenant secrets and later reads back only masked status.",
"implemented": true,
"featureIds": ["F005", "F006", "F025"]
},
{
"id": "T009",
"description": "The Xero settings screen keeps Connect disabled or blocked until credentials are configured.",
"implemented": true,
"featureIds": ["F008"]
},
{
"id": "T010",
"description": "The Xero connect route returns a configuration error when neither tenant-owned nor fallback app-level credentials are available.",
"implemented": true,
"featureIds": ["F009", "F023"]
},
{
"id": "T011",
"description": "The Xero connect route uses tenant-owned Xero client credentials when both tenant and app-level credentials are present.",
"implemented": true,
"featureIds": ["F009", "F011"]
},
{
"id": "T012",
"description": "The Xero callback route exchanges the authorization code using tenant-owned credentials and persists returned connection tokens into `xero_credentials`.",
"implemented": true,
"featureIds": ["F010"]
},
{
"id": "T013",
"description": "The Xero callback route returns an actionable failure when Xero returns no usable connections.",
"implemented": true,
"featureIds": ["F010", "F023"]
},
{
"id": "T014",
"description": "Tenant-first resolution falls back to existing app-level Xero credentials only when tenant-owned Xero credentials are absent.",
"implemented": true,
"featureIds": ["F011"]
},
{
"id": "T015",
"description": "Disconnecting Xero deletes `xero_credentials` but preserves stored tenant-owned Xero client ID/client secret.",
"implemented": true,
"featureIds": ["F012"]
},
{
"id": "T016",
"description": "Existing Xero connection status/catalog actions still return data after tenant-owned credentials are configured and a default connection exists.",
"implemented": true,
"featureIds": ["F013", "F022"]
},
{
"id": "T017",
"description": "DB-backed integration: a live Xero accounting export batch succeeds using tenant-owned credentials and the stored default connection context.",
"implemented": true,
"featureIds": ["F014", "F022"]
},
{
"id": "T018",
"description": "DB-backed integration: a live Xero accounting export batch fails with a clear guard error when no stored default Xero connection exists.",
"implemented": true,
"featureIds": ["F014", "F023"]
},
{
"id": "T019",
"description": "DB-backed integration: live Xero company/contact sync resolves the default connection and uses tenant-owned credentials successfully.",
"implemented": true,
"featureIds": ["F015", "F022"]
},
{
"id": "T020",
"description": "Live Xero mapping modules load accounts, items, tax rates, and tracking categories using the default Xero connection as realm context.",
"implemented": true,
"featureIds": ["F016", "F022"]
},
{
"id": "T021",
"description": "The Xero settings screen renders the live Xero mapping/configuration area only when a default connected Xero organization is available.",
"implemented": true,
"featureIds": ["F017", "F023"]
},
{
"id": "T022",
"description": "The Xero settings screen includes guidance that `Xero CSV` remains available as the manual fallback and links operators toward the accounting export workflow.",
"implemented": true,
"featureIds": ["F018", "F019"]
},
{
"id": "T023",
"description": "Existing `Xero CSV` settings and billing export flows still render and behave as before after live Xero is re-enabled.",
"implemented": true,
"featureIds": ["F019"]
},
{
"id": "T024",
"description": "Non-Enterprise attempts to save Xero credentials are rejected server-side.",
"implemented": true,
"featureIds": ["F021", "F024"]
},
{
"id": "T025",
"description": "Non-Enterprise attempts to hit Xero connect/disconnect entry points are rejected server-side.",
"implemented": true,
"featureIds": ["F021"]
},
{
"id": "T026",
"description": "When multiple Xero connections are stored, the first/prioritized connection is surfaced as default and used for status and mapping context without showing an org picker.",
"implemented": true,
"featureIds": ["F022"]
},
{
"id": "T027",
"description": "The Xero settings screen surfaces a clear missing-credentials error state before connection.",
"implemented": true,
"featureIds": ["F023"]
},
{
"id": "T028",
"description": "The Xero settings screen surfaces a clear expired/default-connection-invalid error state when the stored default connection cannot authenticate.",
"implemented": true,
"featureIds": ["F023"]
},
{
"id": "T029",
"description": "Billing/integration read permission is required to load Xero settings status.",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T030",
"description": "Billing/integration update permission is required to save Xero credentials or disconnect Xero.",
"implemented": true,
"featureIds": ["F024"]
},
{
"id": "T031",
"description": "Tenant-scoped Xero settings reads and writes do not leak or overwrite another tenants Xero secrets or token payloads.",
"implemented": true,
"featureIds": ["F024", "F025"]
},
{
"id": "T032",
"description": "Server/browser responses and logs never include raw Xero client secrets or raw `xero_credentials` token payloads.",
"implemented": true,
"featureIds": ["F025", "F026"]
},
{
"id": "T033",
"description": "Server logs for Xero settings save/connect flows include tenant context and credential source selection without logging secret values.",
"implemented": true,
"featureIds": ["F026"]
}
]