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
371 lines
12 KiB
JSON
371 lines
12 KiB
JSON
[
|
|
{
|
|
"id": "F001",
|
|
"description": "Register crm.create_interaction_type version 1 with type_name, icon, display_order, if_exists, and idempotency inputs",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_interaction_type"
|
|
]
|
|
},
|
|
{
|
|
"id": "F002",
|
|
"description": "Implement idempotent tenant-scoped interaction type creation with next display_order fallback and created_by attribution",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_interaction_type"
|
|
]
|
|
},
|
|
{
|
|
"id": "F003",
|
|
"description": "Enforce settings:update permission for crm.create_interaction_type because activity types are tenant CRM taxonomy configuration",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_interaction_type",
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F004",
|
|
"description": "Register crm.update_activity_status version 1 with activity_id, status_id/status_name, reason, and no-op inputs",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.update_activity_status"
|
|
]
|
|
},
|
|
{
|
|
"id": "F005",
|
|
"description": "Implement crm.update_activity_status target activity validation and interaction status resolution",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.update_activity_status"
|
|
]
|
|
},
|
|
{
|
|
"id": "F006",
|
|
"description": "Implement crm.update_activity_status mutation/no-op behavior with before/current status output and audit",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.update_activity_status",
|
|
"Observability"
|
|
]
|
|
},
|
|
{
|
|
"id": "F007",
|
|
"description": "Register crm.create_quote version 1 with constrained quote creation schema and optional idempotency key",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote"
|
|
]
|
|
},
|
|
{
|
|
"id": "F008",
|
|
"description": "Validate crm.create_quote client/contact/date/currency inputs using existing quote schema rules where safe",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote"
|
|
]
|
|
},
|
|
{
|
|
"id": "F009",
|
|
"description": "Scope crm.create_quote v1 to quote header creation only; quote items use crm.add_quote_item and template creation uses crm.create_quote_from_template",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote",
|
|
"Requirements > crm.add_quote_item",
|
|
"Requirements > crm.create_quote_from_template",
|
|
"Open Questions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F010",
|
|
"description": "Implement shared-runtime-safe crm.create_quote header persistence, output summary, and audit without inline quote item creation",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F011",
|
|
"description": "Enforce billing create/read authorization for crm.create_quote equivalent to existing quote actions",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F012",
|
|
"description": "Register crm.find_quotes version 1 with quote_id, quote_number, client_id, status, date, template, pagination, and on_empty filters",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.find_quotes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F013",
|
|
"description": "Implement crm.find_quotes tenant-scoped quote lookup/search with pagination and safe bounded-query behavior",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.find_quotes"
|
|
]
|
|
},
|
|
{
|
|
"id": "F014",
|
|
"description": "Enforce billing read and quote authorization-kernel filtering for crm.find_quotes",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.find_quotes",
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F015",
|
|
"description": "Register crm.submit_quote_for_approval version 1 with quote_id, optional comment/reason, and no-op input",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.submit_quote_for_approval"
|
|
]
|
|
},
|
|
{
|
|
"id": "F016",
|
|
"description": "Implement crm.submit_quote_for_approval draft-only status transition, template guard, no-op behavior, quote activity/audit, and output summary",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.submit_quote_for_approval"
|
|
]
|
|
},
|
|
{
|
|
"id": "F017",
|
|
"description": "Enforce billing update/read authorization for crm.submit_quote_for_approval equivalent to existing quote actions",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F018",
|
|
"description": "Register crm.convert_quote version 1 with quote_id, target, and no-op input",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.convert_quote"
|
|
]
|
|
},
|
|
{
|
|
"id": "F019",
|
|
"description": "Implement crm.convert_quote validation for quote existence, non-template status, conversion eligibility, and no-op behavior",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.convert_quote"
|
|
]
|
|
},
|
|
{
|
|
"id": "F020",
|
|
"description": "Call shared-safe quote conversion services for contract, invoice, and contract_and_invoice targets and return target IDs",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.convert_quote",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F021",
|
|
"description": "Enforce billing create/update/read authorization for crm.convert_quote equivalent to existing quote conversion actions",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F022",
|
|
"description": "Register crm.tag_activity version 1 with activity_id, tags, if_exists, and idempotency inputs",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.tag_activity"
|
|
]
|
|
},
|
|
{
|
|
"id": "F023",
|
|
"description": "Validate crm.tag_activity target interaction exists in tenant; v1 scope is interaction-only because clients/contacts use their own module tag actions",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.tag_activity"
|
|
]
|
|
},
|
|
{
|
|
"id": "F024",
|
|
"description": "Implement tag text validation, tag definition creation, and idempotent tag mapping insertion for crm.tag_activity",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.tag_activity"
|
|
]
|
|
},
|
|
{
|
|
"id": "F025",
|
|
"description": "Enforce interaction update and tag create permissions for crm.tag_activity",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.tag_activity",
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F026",
|
|
"description": "Emit TAG_DEFINITION_CREATED and TAG_APPLIED for new crm.tag_activity changes through lazy event publication with deterministic keys",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.tag_activity",
|
|
"Observability"
|
|
]
|
|
},
|
|
{
|
|
"id": "F027",
|
|
"description": "Drop crm.create_client_note from follow-up implementation scope in favor of clients.add_note and a future contacts.add_note action",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Non-goals",
|
|
"Rollout / Migration",
|
|
"Open Questions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F031",
|
|
"description": "Add workflow picker metadata to supported follow-up CRM action UUID fields",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"UX / UI Notes",
|
|
"Cross-cutting Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F032",
|
|
"description": "Expose selected follow-up CRM actions through registerCrmActions and designer catalog without new catalog seed changes",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Cross-cutting Requirements",
|
|
"Acceptance Criteria (Definition of Done)"
|
|
]
|
|
},
|
|
{
|
|
"id": "F033",
|
|
"description": "Use shared workflow action helpers for tenant transaction, permissions, audit, action errors, and standard error rethrowing",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Cross-cutting Requirements"
|
|
]
|
|
},
|
|
{
|
|
"id": "F034",
|
|
"description": "Preserve crm.create_activity_note and first-pass CRM action behavior while adding follow-up actions",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Cross-cutting Requirements",
|
|
"Rollout / Migration"
|
|
]
|
|
},
|
|
{
|
|
"id": "F035",
|
|
"description": "Document resolved scope and package-boundary decisions in the scratchpad before implementation completion, including interaction-only crm.tag_activity scope and quote event stance",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Open Questions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F036",
|
|
"description": "Register crm.add_quote_item version 1 with quote_id, line item fields, and optional idempotency key",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.add_quote_item"
|
|
]
|
|
},
|
|
{
|
|
"id": "F037",
|
|
"description": "Validate crm.add_quote_item target quote exists, belongs to tenant, is editable, and is not a template unless explicitly allowed",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.add_quote_item"
|
|
]
|
|
},
|
|
{
|
|
"id": "F038",
|
|
"description": "Validate crm.add_quote_item line item fields using existing quote item schema rules for quantity, price, discounts, recurring billing, optional selection, and tax fields",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.add_quote_item",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F039",
|
|
"description": "Implement shared-runtime-safe crm.add_quote_item persistence, display_order assignment, financial recalculation, output summary, and audit",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.add_quote_item",
|
|
"Data / API / Integrations",
|
|
"Observability"
|
|
]
|
|
},
|
|
{
|
|
"id": "F040",
|
|
"description": "Enforce billing update/read authorization for crm.add_quote_item equivalent to existing quote item update/create behavior",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.add_quote_item",
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F041",
|
|
"description": "Register crm.create_quote_from_template version 1 with template_id, client/contact/date override fields, and optional idempotency key",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote_from_template"
|
|
]
|
|
},
|
|
{
|
|
"id": "F042",
|
|
"description": "Validate crm.create_quote_from_template template quote exists in tenant, is marked as template, and target client/contact overrides are valid",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote_from_template"
|
|
]
|
|
},
|
|
{
|
|
"id": "F043",
|
|
"description": "Implement shared-runtime-safe crm.create_quote_from_template behavior by extracting or reusing existing template creation logic without importing withAuth server actions",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote_from_template",
|
|
"Cross-cutting Requirements",
|
|
"Data / API / Integrations"
|
|
]
|
|
},
|
|
{
|
|
"id": "F044",
|
|
"description": "Copy template quote header and item data safely for crm.create_quote_from_template, recalculate totals, return created quote/item summaries, and write audit",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote_from_template",
|
|
"Observability"
|
|
]
|
|
},
|
|
{
|
|
"id": "F045",
|
|
"description": "Enforce billing create/read authorization for crm.create_quote_from_template equivalent to existing quote template creation behavior",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Requirements > crm.create_quote_from_template",
|
|
"Security / Permissions"
|
|
]
|
|
},
|
|
{
|
|
"id": "F046",
|
|
"description": "For quote pipeline actions, emit existing quote workflow events only if schemas/builders already exist; otherwise rely on audit logs and quote activities without adding new event schemas",
|
|
"implemented": true,
|
|
"prdRefs": [
|
|
"Observability",
|
|
"Open Questions"
|
|
]
|
|
}
|
|
]
|