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

1403 lines
35 KiB
JSON

[
{
"id": "F001",
"description": "Docs: Author PRD for scheduled tasks (endpoint-based)",
"implemented": true,
"prdRefs": [
"PRD#Summary"
]
},
{
"id": "F002",
"description": "Docs: Add scratchpad decisions/constraints for scheduled tasks",
"implemented": true,
"prdRefs": [
"PRD#Summary"
]
},
{
"id": "F003",
"description": "Docs: Document schedule execution contract (synthetic HTTP payload)",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F004",
"description": "Docs: Document remap-on-update policy and override UX",
"implemented": true,
"prdRefs": [
"PRD#Requirements"
]
},
{
"id": "F005",
"description": "Docs: Add operator notes for cleanup/no-cascades constraints",
"implemented": true,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F006",
"description": "DB: Create table `extension_api_endpoint` with unique (version_id, method, path)",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F007",
"description": "DB: Create table `tenant_extension_schedule` keyed by install_id + endpoint_id",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F008",
"description": "DB: Add indexes for tenant/install lookups on schedules",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F009",
"description": "DB: Add nullable fields for last_run_at/status/error on schedules",
"implemented": true,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F010",
"description": "DB: Add fields to store external schedule handle id (Temporal schedule id / pgboss schedule name)",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F011",
"description": "DB: Add optional payload_json to schedule definition",
"implemented": true,
"prdRefs": [
"PRD#Functional Requirements"
]
},
{
"id": "F012",
"description": "DB: Add soft-delete support (deleted_at) for schedules (optional)",
"implemented": false,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F013",
"description": "DB: Add schedule_id to extension execution logs for correlation (new column or separate table)",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F014",
"description": "DB: Add audit log records for schedule CRUD actions",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F015",
"description": "DB: Add constraints/guards for max schedule name length and cron/timezone string lengths",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F016",
"description": "Registry: Normalize and persist manifest endpoints into `extension_api_endpoint` when creating a version",
"implemented": true,
"prdRefs": [
"PRD#Endpoint materialization"
]
},
{
"id": "F017",
"description": "Registry: Ensure endpoint normalization (method uppercasing, path begins with /)",
"implemented": true,
"prdRefs": [
"PRD#Endpoint materialization"
]
},
{
"id": "F018",
"description": "Registry: De-duplicate endpoints by (method,path) during ingest",
"implemented": true,
"prdRefs": [
"PRD#Endpoint materialization"
]
},
{
"id": "F019",
"description": "Registry: Backfill endpoints for existing versions (one-time job or lazy materialization)",
"implemented": true,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F020",
"description": "Registry: Provide query to list endpoints for a version_id",
"implemented": true,
"prdRefs": [
"PRD#APIs (EE)"
]
},
{
"id": "F021",
"description": "Registry: Provide query to list endpoints for an install (resolve version_id -> endpoints)",
"implemented": true,
"prdRefs": [
"PRD#APIs (EE)"
]
},
{
"id": "F022",
"description": "Registry: Standardize endpoint source of truth (avoid divergence between api vs api_endpoints)",
"implemented": true,
"prdRefs": [
"PRD#Discoveries / Constraints"
]
},
{
"id": "F023",
"description": "API: Add endpoint listing API for extension settings dropdown (tenant-scoped)",
"implemented": true,
"prdRefs": [
"PRD#APIs (EE)"
]
},
{
"id": "F024",
"description": "API: Validate that returned endpoints match the currently installed version for the tenant",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F025",
"description": "API: Add pagination/search for endpoints list (optional)",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F026",
"description": "Schedule API: List schedules for an extension install",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F027",
"description": "Schedule API: Create schedule (endpoint_id + cron + timezone + enabled)",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F028",
"description": "Schedule API: Update schedule fields (cron/timezone/enabled/name/payload/endpoint)",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F029",
"description": "Schedule API: Delete schedule and underlying job-runner schedule (no cascades)",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F030",
"description": "Schedule API: Run-now endpoint to trigger immediate execution",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F031",
"description": "Schedule API: Input validation for cron string and timezone",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F032",
"description": "Schedule API: Input validation that endpoint_id belongs to the install\u2019s version_id",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F033",
"description": "Schedule API: Enforce max schedules per install",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F034",
"description": "Schedule API: Enforce minimum frequency / deny too-frequent cron expressions",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F035",
"description": "Schedule API: Enforce rate limit for run-now calls",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F036",
"description": "Schedule API: Return structured errors suitable for UI display (field-level)",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F037",
"description": "Schedule API: Authorization checks aligned with extension settings access",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F038",
"description": "Server actions: Add getExtensionEndpoints action for UI (if not using route directly)",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F039",
"description": "Server actions: Add getExtensionSchedules action for settings UI",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F040",
"description": "Server actions: Add create/update/delete schedule actions",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F041",
"description": "Server actions: Add run-now action",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F042",
"description": "Jobs: Define schedule job type for 'scheduled extension invocation'",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F043",
"description": "Jobs: Register schedule job handler in job handler registry",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F044",
"description": "Jobs: Use IJobRunner.scheduleRecurringJob to create durable schedule (Temporal schedule in EE)",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F045",
"description": "Jobs: Choose stable singleton key naming for schedules (install_id + schedule_id)",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F046",
"description": "Jobs: Persist external schedule handle id on schedule record",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F047",
"description": "Jobs: Support enable/disable by pausing/deleting underlying schedule and recreating as needed",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F048",
"description": "Jobs: Implement run-now as immediate job trigger separate from recurring schedule",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F049",
"description": "Runner invoke: Implement internal helper to call Runner /v1/execute with synthetic http payload",
"implemented": true,
"prdRefs": [
"PRD#Execution payload to Runner"
]
},
{
"id": "F050",
"description": "Runner invoke: Load install config by install_id (providers, secrets, config, content hash)",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F051",
"description": "Runner invoke: Build context that includes schedule_id + trigger type + invocation id",
"implemented": true,
"prdRefs": [
"PRD#Execution payload to Runner"
]
},
{
"id": "F052",
"description": "Runner invoke: Serialize payload_json into request body_b64 (JSON)",
"implemented": true,
"prdRefs": [
"PRD#Execution payload to Runner"
]
},
{
"id": "F053",
"description": "Runner invoke: Apply same header filtering rules as gateway (or define schedule-specific allowlist)",
"implemented": false,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F054",
"description": "Runner invoke: Enforce timeout and size limits for scheduled invocations",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F055",
"description": "Runner invoke: Capture response status/body for logs and schedule last_run fields",
"implemented": true,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F056",
"description": "Execution control: Default 'no overlap' per schedule (lock/lease)",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F057",
"description": "Execution control: Add idempotency key per run-now invocation",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F058",
"description": "Execution control: Retry policy for schedule runs (job runner retries + recorded attempts)",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F059",
"description": "Execution control: Decide catch-up semantics after downtime (skip/backfill/run-once)",
"implemented": false,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F060",
"description": "Remap: Implement remap procedure on extension install update by matching (method,path)",
"implemented": true,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F061",
"description": "Remap: Block extension version update if any schedule cannot be remapped",
"implemented": true,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F062",
"description": "Remap: Return structured error containing schedule ids and missing endpoints",
"implemented": true,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F063",
"description": "Remap: Add override action to disable affected schedules and proceed with update",
"implemented": true,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F064",
"description": "Remap: Record remap actions in audit log",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F065",
"description": "Remap: Ensure remap is transactional with the install update (all-or-nothing)",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F066",
"description": "Cleanup: On extension uninstall, delete all schedules and underlying runner schedules",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F067",
"description": "Cleanup: On install disable, disable schedules (policy: keep config, stop execution)",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F068",
"description": "Cleanup: On tenant delete, ensure schedules are cleaned up via admin tooling/jobs",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F069",
"description": "Cleanup: On schedule delete, delete Temporal schedule/pgboss schedule and clear external id",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F070",
"description": "Cleanup: Add reconciliation job to detect orphan schedules and clean them",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F071",
"description": "Security: Enforce permissions for schedule CRUD and run-now (tenant admin only)",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F072",
"description": "Security: Enforce that only endpoints from installed version are selectable",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F073",
"description": "Security: Validate path parameter endpoints are disallowed or require static substitution",
"implemented": true,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F074",
"description": "Security: Apply per-tenant caps for number of schedules and invocation rate",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F075",
"description": "Security: Store only non-sensitive schedule fields; encourage using install secrets for credentials",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F076",
"description": "Observability: Write execution logs for schedule runs with schedule_id correlation",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F077",
"description": "Observability: Update schedule last_run_at/status/error after each run",
"implemented": true,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F078",
"description": "Observability: Emit metrics (runs, failures, duration) for scheduled invocations",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F079",
"description": "Observability: Add UI surface for recent run history (optional v1)",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F080",
"description": "Observability: Add audit events for schedule CRUD and run-now",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F081",
"description": "UI: Add 'Schedules' section to ExtensionSettings screen",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F082",
"description": "UI: List schedules with endpoint, cron, timezone, enabled, last run",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F083",
"description": "UI: Add schedule creation UI with endpoint dropdown",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F084",
"description": "UI: Add schedule edit UI",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F085",
"description": "UI: Add enable/disable toggle and confirm flows",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F086",
"description": "UI: Add delete schedule confirm flow",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F087",
"description": "UI: Add run-now action and toast feedback",
"implemented": true,
"prdRefs": [
"PRD#Users and Primary Flows"
]
},
{
"id": "F088",
"description": "UI: Cron validation feedback and help text",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F089",
"description": "UI: Timezone selector with tenant default fallback",
"implemented": false,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F090",
"description": "UI: Optional JSON payload editor with validation",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F091",
"description": "UI: Display endpoint invalidation after upgrade (schedule marked invalid)",
"implemented": false,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F092",
"description": "UI: Display upgrade-blocking error with affected schedules and remediation actions",
"implemented": false,
"prdRefs": [
"PRD#Users and Primary Flows"
]
},
{
"id": "F093",
"description": "API: Add install update endpoint that triggers remap and can be blocked",
"implemented": true,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F094",
"description": "API: Add 'disable affected schedules and proceed' endpoint (override)",
"implemented": true,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F095",
"description": "Validation: Add cron parser/validator in backend (shared util)",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F096",
"description": "Validation: Add timezone validator against IANA tz database",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F097",
"description": "Validation: Ensure schedule payload_json size limit",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F098",
"description": "Validation: Ensure schedule names are unique per install (optional)",
"implemented": true,
"prdRefs": [
"PRD#Functional Requirements"
]
},
{
"id": "F099",
"description": "Performance: Ensure schedule list queries are indexed and tenant-scoped",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F100",
"description": "Performance: Avoid N+1 queries when loading endpoints and schedules for settings UI",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F101",
"description": "Compat: Ensure CE behavior is safe (either disable schedules or use PgBossJobRunner when available)",
"implemented": false,
"prdRefs": [
"PRD#Non-goals"
]
},
{
"id": "F102",
"description": "Compat: Feature flag scheduled tasks UI for staged rollout",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F103",
"description": "Ops: Add admin tool to list schedules per tenant/extension for support",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F104",
"description": "Ops: Add admin tool to manually disable all schedules for a tenant (kill switch)",
"implemented": false,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F105",
"description": "Ops: Add admin tool to backfill endpoints for a version id",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F106",
"description": "Data integrity: Prevent deleting an endpoint row that is referenced by an active schedule (enforced in service)",
"implemented": false,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F107",
"description": "Data integrity: Ensure schedule create uses a transaction to persist schedule + create durable runner schedule",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F108",
"description": "Data integrity: Ensure schedule update is transactional with rescheduling operations",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F109",
"description": "Data integrity: Ensure schedule delete is transactional with runner schedule deletion",
"implemented": false,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F110",
"description": "Execution: Enforce that scheduled invocations set x-alga-tenant/x-alga-extension context consistently",
"implemented": true,
"prdRefs": [
"PRD#Execution payload to Runner"
]
},
{
"id": "F111",
"description": "Execution: Ensure scheduled invocations do not include a user context (or use a system user identity)",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F112",
"description": "Execution: Add schedule-specific request_id generation and correlation ids",
"implemented": true,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F113",
"description": "UX: Add copyable curl-like debug view of schedule invocation request (optional)",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F114",
"description": "UX: Show next-run time (best-effort) using cron parsing and timezone",
"implemented": false,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F115",
"description": "UX: Inline warning when endpoint contains path params (disallow or require input)",
"implemented": false,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F116",
"description": "Rollback: Ensure schedule execution is paused when extension install is disabled",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F117",
"description": "Rollback: Ensure schedule execution uses the currently installed content_hash (not cached stale)",
"implemented": true,
"prdRefs": [
"PRD#Problem"
]
},
{
"id": "F118",
"description": "Testing: Add unit tests for endpoint materialization normalization",
"implemented": false,
"prdRefs": [
"PRD#Acceptance Criteria (Definition of Done)"
]
},
{
"id": "F119",
"description": "Testing: Add unit tests for remap logic",
"implemented": false,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F120",
"description": "Testing: Add integration tests for schedule CRUD APIs",
"implemented": false,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F121",
"description": "Testing: Add integration tests for run-now invocation hitting Runner stub",
"implemented": false,
"prdRefs": [
"PRD#Execution payload to Runner"
]
},
{
"id": "F122",
"description": "Testing: Add E2E tests for ExtensionSettings schedule UI",
"implemented": false,
"prdRefs": [
"PRD#Users and Primary Flows"
]
},
{
"id": "F123",
"description": "Migration: Add data migration/backfill script to populate extension_api_endpoint from existing extension_version.api_endpoints",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F124",
"description": "Migration: Add safe idempotent backfill behavior for repeated runs",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F125",
"description": "Policy: Define schedule concurrency policy (forbid overlap) and implement locking",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F126",
"description": "Policy: Define retry/backoff defaults for schedule runs and expose in UI (optional)",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F127",
"description": "Policy: Define schedule pause behavior on repeated failures (optional)",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F128",
"description": "API: Add endpoint to validate cron/timezone before saving (optional)",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F129",
"description": "API: Add endpoint to preview next N run times for a schedule (optional)",
"implemented": false,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F130",
"description": "Support: Add schedule export/import for tenant migrations (optional)",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F131",
"description": "Hardening: Ensure schedule create/update/delete are safe under concurrent requests (optimistic locking)",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F132",
"description": "Hardening: Add per-schedule revision/version field to prevent lost updates",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F133",
"description": "Hardening: Ensure schedule execution fails gracefully when install config cannot be loaded",
"implemented": true,
"prdRefs": [
"PRD#Reliability"
]
},
{
"id": "F134",
"description": "Hardening: Ensure schedule execution handles Runner timeouts cleanly and records status",
"implemented": true,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F135",
"description": "Hardening: Ensure schedule deletion handles missing runner schedule handle (idempotent)",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F136",
"description": "UI: Add empty state for schedules when none exist",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F137",
"description": "UI: Add loading states and error states for schedules list",
"implemented": true,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F138",
"description": "UI: Add permissions-gated UI (hide schedules if user lacks rights)",
"implemented": false,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F139",
"description": "Docs: Add developer documentation for scheduling endpoint invocation semantics",
"implemented": true,
"prdRefs": [
"PRD#Data / API / Integrations"
]
},
{
"id": "F140",
"description": "Docs: Add operator documentation for remap failures and override flow",
"implemented": true,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F141",
"description": "Telemetry: Tag schedule runs with schedule_id in logs and metrics consistently",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F142",
"description": "Telemetry: Add per-schedule failure count and last_success_at fields (optional)",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F143",
"description": "Compliance: Ensure schedule CRUD actions are auditable and retained",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F144",
"description": "API: Add endpoint to fetch a single schedule by id",
"implemented": true,
"prdRefs": [
"PRD#Schedule CRUD and execution"
]
},
{
"id": "F145",
"description": "API: Add endpoint to bulk-disable schedules for an install",
"implemented": false,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F146",
"description": "Remap: Provide preview endpoint to show remap results before applying update",
"implemented": false,
"prdRefs": [
"PRD#Users and Primary Flows"
]
},
{
"id": "F147",
"description": "Remap: Ensure schedules that were disabled remain disabled after remap",
"implemented": true,
"prdRefs": [
"PRD#Remap on extension update"
]
},
{
"id": "F148",
"description": "Scheduler: Add periodic health check that underlying Temporal schedules exist for enabled DB schedules",
"implemented": false,
"prdRefs": [
"PRD#Reliability"
]
},
{
"id": "F149",
"description": "Scheduler: Auto-repair missing schedule handles (optional)",
"implemented": false,
"prdRefs": [
"PRD#Reliability"
]
},
{
"id": "F150",
"description": "Gateway parity: Reuse gateway header/body size limits for scheduled invocations",
"implemented": false,
"prdRefs": [
"PRD#Execution payload to Runner"
]
},
{
"id": "F151",
"description": "Gateway parity: Reuse gateway timeout config for scheduled invocations (EXT_GATEWAY_TIMEOUT_MS)",
"implemented": true,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F152",
"description": "UX: Show which version the endpoint selection is based on (installed version)",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F153",
"description": "UX: Show warning when changing endpoint selection will affect schedule semantics",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F154",
"description": "Infra: Ensure Temporal schedule IDs are globally unique and deterministic",
"implemented": false,
"prdRefs": [
"PRD#Non-functional Requirements"
]
},
{
"id": "F155",
"description": "Infra: Ensure CE/pgboss schedule naming avoids collisions per tenant",
"implemented": false,
"prdRefs": [
"PRD#Compat"
]
},
{
"id": "F156",
"description": "API: Add admin-only endpoint to list schedules across tenants (support)",
"implemented": false,
"prdRefs": [
"PRD#Ops"
]
},
{
"id": "F157",
"description": "API: Add admin-only endpoint to delete a schedule by id (support)",
"implemented": false,
"prdRefs": [
"PRD#Ops"
]
},
{
"id": "F158",
"description": "Docs: Add migration notes for backfilling endpoints and verifying schedules",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F159",
"description": "Docs: Add troubleshooting guide for schedule executions (common errors)",
"implemented": false,
"prdRefs": [
"PRD#Commands / Runbooks"
]
},
{
"id": "F160",
"description": "Definition: Decide whether schedules can target only GET/POST or all methods",
"implemented": true,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F161",
"description": "Definition: Decide whether schedules can include query params (v1 likely no)",
"implemented": true,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F162",
"description": "Definition: Decide whether schedules can target endpoints with path params (v1 likely no)",
"implemented": true,
"prdRefs": [
"PRD#Open Questions"
]
},
{
"id": "F163",
"description": "Hardening: Ensure schedule create/update validates extension is installed and enabled",
"implemented": true,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F164",
"description": "Hardening: Ensure schedule execution checks install is enabled before invoking",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F165",
"description": "Hardening: Ensure uninstall path cleans schedules before deleting tenant_extension_install row",
"implemented": true,
"prdRefs": [
"PRD#Cleanup (no cascades)"
]
},
{
"id": "F166",
"description": "Observability: Surface last_error in UI with truncation and copy affordance",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F167",
"description": "Observability: Provide link from schedule row to extension debug stream (if available)",
"implemented": false,
"prdRefs": [
"PRD#Observability"
]
},
{
"id": "F168",
"description": "UX: Add confirmation modal for extension update override that disables schedules",
"implemented": false,
"prdRefs": [
"PRD#Users and Primary Flows"
]
},
{
"id": "F169",
"description": "UX: Add inline indicator when endpoint list is empty (no schedulable endpoints)",
"implemented": false,
"prdRefs": [
"PRD#UX / UI Notes"
]
},
{
"id": "F170",
"description": "Rollout: Add feature flag and staged enablement per tenant",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F171",
"description": "Rollout: Add migration checklist for production (tables + backfill + permissions)",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F172",
"description": "Compliance: Ensure schedule payload_json does not permit secrets injection beyond install secrets",
"implemented": false,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F173",
"description": "Compliance: Ensure schedule execution does not bypass capability/provider grants",
"implemented": false,
"prdRefs": [
"PRD#Security / Permissions"
]
},
{
"id": "F174",
"description": "Quality: Add `validate_plan.py` checks to CI for plan folder (optional)",
"implemented": false,
"prdRefs": [
"PRD#Rollout / Migration"
]
},
{
"id": "F175",
"description": "Quality: Add smoke test that a basic schedule triggers a runner invocation end-to-end in dev",
"implemented": false,
"prdRefs": [
"PRD#Acceptance Criteria (Definition of Done)"
]
}
]