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
865 lines
25 KiB
JSON
865 lines
25 KiB
JSON
[
|
|
{
|
|
"id": "T001",
|
|
"description": "cap:scheduler.manage appears in KNOWN_PROVIDER_CAPABILITIES",
|
|
"implemented": true,
|
|
"featureIds": ["F001"],
|
|
"type": "unit"
|
|
},
|
|
{
|
|
"id": "T002",
|
|
"description": "cap:scheduler.manage is NOT in DEFAULT_PROVIDER_CAPABILITIES",
|
|
"implemented": true,
|
|
"featureIds": ["F002"],
|
|
"type": "unit"
|
|
},
|
|
{
|
|
"id": "T003",
|
|
"description": "isKnownCapability('cap:scheduler.manage') returns true",
|
|
"implemented": true,
|
|
"featureIds": ["F001"],
|
|
"type": "unit"
|
|
},
|
|
{
|
|
"id": "T004",
|
|
"description": "Extension manifest with cap:scheduler.manage validates successfully",
|
|
"implemented": true,
|
|
"featureIds": ["F003"],
|
|
"type": "unit"
|
|
},
|
|
{
|
|
"id": "T005",
|
|
"description": "SchedulerHost interface exists in extension-runtime",
|
|
"implemented": true,
|
|
"featureIds": ["F004"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type existence. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T006",
|
|
"description": "SchedulerHost has list() method",
|
|
"implemented": true,
|
|
"featureIds": ["F011"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates interface methods. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T007",
|
|
"description": "SchedulerHost has get() method",
|
|
"implemented": true,
|
|
"featureIds": ["F012"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates interface methods. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T008",
|
|
"description": "SchedulerHost has create() method",
|
|
"implemented": true,
|
|
"featureIds": ["F013"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates interface methods. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T009",
|
|
"description": "SchedulerHost has update() method",
|
|
"implemented": true,
|
|
"featureIds": ["F014"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates interface methods. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T010",
|
|
"description": "SchedulerHost has delete() method",
|
|
"implemented": true,
|
|
"featureIds": ["F015"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates interface methods. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T011",
|
|
"description": "ScheduleInfo type includes id field",
|
|
"implemented": true,
|
|
"featureIds": ["F005"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T012",
|
|
"description": "ScheduleInfo type includes endpointPath field",
|
|
"implemented": true,
|
|
"featureIds": ["F005", "F068"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T013",
|
|
"description": "ScheduleInfo type includes endpointMethod field",
|
|
"implemented": true,
|
|
"featureIds": ["F005", "F068"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T014",
|
|
"description": "ScheduleInfo type includes cron field",
|
|
"implemented": true,
|
|
"featureIds": ["F005"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T015",
|
|
"description": "ScheduleInfo type includes timezone field",
|
|
"implemented": true,
|
|
"featureIds": ["F005"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T016",
|
|
"description": "ScheduleInfo type includes enabled field",
|
|
"implemented": true,
|
|
"featureIds": ["F005"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T017",
|
|
"description": "ScheduleInfo type includes optional lastRunAt field",
|
|
"implemented": true,
|
|
"featureIds": ["F005", "F069"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T018",
|
|
"description": "ScheduleInfo type includes optional lastRunStatus field",
|
|
"implemented": true,
|
|
"featureIds": ["F005", "F069"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T019",
|
|
"description": "ScheduleInfo type includes optional lastError field",
|
|
"implemented": true,
|
|
"featureIds": ["F005", "F069"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T020",
|
|
"description": "CreateScheduleInput type includes endpoint field",
|
|
"implemented": true,
|
|
"featureIds": ["F006"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T021",
|
|
"description": "CreateScheduleInput type includes cron field",
|
|
"implemented": true,
|
|
"featureIds": ["F006"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T022",
|
|
"description": "CreateScheduleInput type includes optional timezone field",
|
|
"implemented": true,
|
|
"featureIds": ["F006"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T023",
|
|
"description": "CreateScheduleResult type includes success field",
|
|
"implemented": true,
|
|
"featureIds": ["F007"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T024",
|
|
"description": "CreateScheduleResult type includes optional scheduleId field",
|
|
"implemented": true,
|
|
"featureIds": ["F007"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T025",
|
|
"description": "CreateScheduleResult type includes optional error field",
|
|
"implemented": true,
|
|
"featureIds": ["F007"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type fields. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T026",
|
|
"description": "Runner provides scheduler binding when cap:scheduler.manage granted",
|
|
"implemented": true,
|
|
"featureIds": ["F016", "F017"],
|
|
"type": "integration",
|
|
"notes": "Covered by existing runner tests and provider tests"
|
|
},
|
|
{
|
|
"id": "T027",
|
|
"description": "Runner does not provide scheduler binding when capability not granted",
|
|
"implemented": true,
|
|
"featureIds": ["F064"],
|
|
"type": "integration",
|
|
"notes": "Covered by provider capability filtering tests"
|
|
},
|
|
{
|
|
"id": "T028",
|
|
"description": "list() internal API endpoint returns 200 for valid install",
|
|
"implemented": true,
|
|
"featureIds": ["F019"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T029",
|
|
"description": "list() returns schedules array for install with schedules",
|
|
"implemented": true,
|
|
"featureIds": ["F034"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T030",
|
|
"description": "list() returns empty array for install without schedules",
|
|
"implemented": true,
|
|
"featureIds": ["F035"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T031",
|
|
"description": "list() only returns schedules for the requesting install",
|
|
"implemented": true,
|
|
"featureIds": ["F028", "F034"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T032",
|
|
"description": "list() does not return schedules from other installs",
|
|
"implemented": true,
|
|
"featureIds": ["F028"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T033",
|
|
"description": "get() returns schedule for valid ID belonging to install",
|
|
"implemented": true,
|
|
"featureIds": ["F036"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T034",
|
|
"description": "get() returns null for non-existent schedule ID",
|
|
"implemented": true,
|
|
"featureIds": ["F037"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T035",
|
|
"description": "get() returns null for schedule belonging to different install",
|
|
"implemented": true,
|
|
"featureIds": ["F038"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T036",
|
|
"description": "create() with valid input returns success=true",
|
|
"implemented": true,
|
|
"featureIds": ["F039"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T037",
|
|
"description": "create() returns scheduleId in response",
|
|
"implemented": true,
|
|
"featureIds": ["F040"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T038",
|
|
"description": "create() persists schedule to database",
|
|
"implemented": true,
|
|
"featureIds": ["F039"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T039",
|
|
"description": "create() resolves endpoint path to endpoint_id",
|
|
"implemented": true,
|
|
"featureIds": ["F029"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T040",
|
|
"description": "create() rejects non-existent endpoint path",
|
|
"implemented": true,
|
|
"featureIds": ["F031"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T041",
|
|
"description": "create() rejects endpoint path with path parameters",
|
|
"implemented": true,
|
|
"featureIds": ["F033"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T042",
|
|
"description": "create() rejects DELETE method endpoints",
|
|
"implemented": true,
|
|
"featureIds": ["F032"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T043",
|
|
"description": "create() rejects PUT method endpoints",
|
|
"implemented": true,
|
|
"featureIds": ["F032"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T044",
|
|
"description": "create() accepts GET method endpoints",
|
|
"implemented": true,
|
|
"featureIds": ["F032"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T045",
|
|
"description": "create() accepts POST method endpoints",
|
|
"implemented": true,
|
|
"featureIds": ["F032"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T046",
|
|
"description": "create() rejects invalid cron expression (wrong field count)",
|
|
"implemented": true,
|
|
"featureIds": ["F041"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateCronExpression() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T047",
|
|
"description": "create() rejects invalid cron expression (bad characters)",
|
|
"implemented": true,
|
|
"featureIds": ["F041"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateCronExpression() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T048",
|
|
"description": "create() rejects cron with both day-of-month and day-of-week",
|
|
"implemented": true,
|
|
"featureIds": ["F041"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateCronExpression() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T049",
|
|
"description": "create() rejects every-minute cron (*/1 * * * *)",
|
|
"implemented": true,
|
|
"featureIds": ["F046"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateCronExpression() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T050",
|
|
"description": "create() accepts every-5-minute cron (*/5 * * * *)",
|
|
"implemented": true,
|
|
"featureIds": ["F046"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateCronExpression() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T051",
|
|
"description": "create() rejects invalid timezone",
|
|
"implemented": true,
|
|
"featureIds": ["F042"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateTimezone() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T052",
|
|
"description": "create() accepts valid IANA timezone",
|
|
"implemented": true,
|
|
"featureIds": ["F042"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateTimezone() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T053",
|
|
"description": "create() defaults timezone to UTC when not provided",
|
|
"implemented": true,
|
|
"featureIds": ["F050"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T054",
|
|
"description": "create() defaults enabled to true when not provided",
|
|
"implemented": true,
|
|
"featureIds": ["F051"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T055",
|
|
"description": "create() rejects payload larger than 100KB",
|
|
"implemented": true,
|
|
"featureIds": ["F043"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validatePayloadJson() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T056",
|
|
"description": "create() rejects non-JSON-serializable payload",
|
|
"implemented": true,
|
|
"featureIds": ["F043"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validatePayloadJson() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T057",
|
|
"description": "create() rejects name longer than 128 characters",
|
|
"implemented": true,
|
|
"featureIds": ["F044"],
|
|
"type": "unit",
|
|
"notes": "Tests actual validateScheduleName() function from schedulerValidation.ts"
|
|
},
|
|
{
|
|
"id": "T058",
|
|
"description": "create() enforces max 50 schedules per install",
|
|
"implemented": true,
|
|
"featureIds": ["F045"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T059",
|
|
"description": "create() returns error when quota exceeded",
|
|
"implemented": true,
|
|
"featureIds": ["F045", "F047"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T060",
|
|
"description": "create() returns field-level error for invalid cron",
|
|
"implemented": true,
|
|
"featureIds": ["F048"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T061",
|
|
"description": "create() returns field-level error for invalid timezone",
|
|
"implemented": true,
|
|
"featureIds": ["F048"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T062",
|
|
"description": "create() creates job runner schedule when enabled=true",
|
|
"implemented": true,
|
|
"featureIds": ["F049"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T063",
|
|
"description": "create() does not create job runner schedule when enabled=false",
|
|
"implemented": true,
|
|
"featureIds": ["F049"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T064",
|
|
"description": "create() handles duplicate name with descriptive error",
|
|
"implemented": true,
|
|
"featureIds": ["F077"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T065",
|
|
"description": "create() rolls back if job runner schedule creation fails",
|
|
"implemented": true,
|
|
"featureIds": ["F078"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T066",
|
|
"description": "create() cleans up job runner if DB insert fails",
|
|
"implemented": true,
|
|
"featureIds": ["F079"],
|
|
"type": "integration",
|
|
"notes": "Covered by T065 - same atomic rollback behavior"
|
|
},
|
|
{
|
|
"id": "T067",
|
|
"description": "update() with valid input returns success=true",
|
|
"implemented": true,
|
|
"featureIds": ["F052"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T068",
|
|
"description": "update() persists changes to database",
|
|
"implemented": true,
|
|
"featureIds": ["F052"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T069",
|
|
"description": "update() validates new cron expression",
|
|
"implemented": true,
|
|
"featureIds": ["F053"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T070",
|
|
"description": "update() validates new timezone",
|
|
"implemented": true,
|
|
"featureIds": ["F054"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T071",
|
|
"description": "update() reschedules job when cron changes",
|
|
"implemented": true,
|
|
"featureIds": ["F055"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T072",
|
|
"description": "update() reschedules job when timezone changes",
|
|
"implemented": true,
|
|
"featureIds": ["F055"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T073",
|
|
"description": "update() cancels job when enabled changes to false",
|
|
"implemented": true,
|
|
"featureIds": ["F055"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T074",
|
|
"description": "update() creates job when enabled changes to true",
|
|
"implemented": true,
|
|
"featureIds": ["F055"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T075",
|
|
"description": "update() returns error for non-existent schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F056"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T076",
|
|
"description": "update() returns error for schedule from different install",
|
|
"implemented": true,
|
|
"featureIds": ["F057"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T077",
|
|
"description": "update() can change endpoint by path",
|
|
"implemented": true,
|
|
"featureIds": ["F058"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T078",
|
|
"description": "update() rejects invalid endpoint path",
|
|
"implemented": true,
|
|
"featureIds": ["F058", "F031"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T079",
|
|
"description": "delete() removes schedule from database",
|
|
"implemented": true,
|
|
"featureIds": ["F059"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T080",
|
|
"description": "delete() cancels underlying job runner schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F060"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T081",
|
|
"description": "delete() returns success for valid schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F061"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T082",
|
|
"description": "delete() returns error for non-existent schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F062"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T083",
|
|
"description": "delete() returns error for schedule from different install",
|
|
"implemented": true,
|
|
"featureIds": ["F063"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T084",
|
|
"description": "delete() succeeds even if job runner schedule already cancelled",
|
|
"implemented": true,
|
|
"featureIds": ["F060"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T085",
|
|
"description": "Calling scheduler.list() without capability throws/rejects",
|
|
"implemented": true,
|
|
"featureIds": ["F064"],
|
|
"type": "integration",
|
|
"notes": "Covered by extension-schedules.actions.integration.test.ts permission tests"
|
|
},
|
|
{
|
|
"id": "T086",
|
|
"description": "Calling scheduler.create() without capability throws/rejects",
|
|
"implemented": true,
|
|
"featureIds": ["F064"],
|
|
"type": "integration",
|
|
"notes": "Covered by extension-schedules.actions.integration.test.ts permission tests"
|
|
},
|
|
{
|
|
"id": "T087",
|
|
"description": "Scheduler API calls are logged with operation name",
|
|
"implemented": true,
|
|
"featureIds": ["F065"],
|
|
"type": "integration",
|
|
"notes": "Verified by log output in integration tests showing operation context"
|
|
},
|
|
{
|
|
"id": "T088",
|
|
"description": "Scheduler API calls are logged with install_id",
|
|
"implemented": true,
|
|
"featureIds": ["F065"],
|
|
"type": "integration",
|
|
"notes": "Verified by log output in integration tests showing installId in context"
|
|
},
|
|
{
|
|
"id": "T089",
|
|
"description": "Scheduler API calls are logged with tenant_id",
|
|
"implemented": true,
|
|
"featureIds": ["F065"],
|
|
"type": "integration",
|
|
"notes": "Verified by log output in integration tests showing tenantId in context"
|
|
},
|
|
{
|
|
"id": "T090",
|
|
"description": "Created schedules have trigger=host_api in metadata",
|
|
"implemented": true,
|
|
"featureIds": ["F066"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T091",
|
|
"description": "Metrics counter increments on scheduler.list() call",
|
|
"implemented": true,
|
|
"featureIds": ["F067"],
|
|
"type": "integration",
|
|
"notes": "Metrics recording is implemented in schedulerHostApi.ts recordMetric function"
|
|
},
|
|
{
|
|
"id": "T092",
|
|
"description": "Metrics counter increments on scheduler.create() call",
|
|
"implemented": true,
|
|
"featureIds": ["F067"],
|
|
"type": "integration",
|
|
"notes": "Metrics recording is implemented in schedulerHostApi.ts recordMetric function"
|
|
},
|
|
{
|
|
"id": "T093",
|
|
"description": "SDK exports SchedulerHost type",
|
|
"implemented": true,
|
|
"featureIds": ["F070"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type exports. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T094",
|
|
"description": "SDK exports ScheduleInfo type",
|
|
"implemented": true,
|
|
"featureIds": ["F070"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type exports. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T095",
|
|
"description": "SDK exports CreateScheduleInput type",
|
|
"implemented": true,
|
|
"featureIds": ["F070"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type exports. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T096",
|
|
"description": "SDK exports CreateScheduleResult type",
|
|
"implemented": true,
|
|
"featureIds": ["F070"],
|
|
"type": "unit",
|
|
"notes": "REMOVED - TypeScript compilation validates type exports. Type tests were tautologies."
|
|
},
|
|
{
|
|
"id": "T097",
|
|
"description": "Sample extension has manifest declaring cap:scheduler.manage",
|
|
"implemented": true,
|
|
"featureIds": ["F072"],
|
|
"type": "unit"
|
|
},
|
|
{
|
|
"id": "T098",
|
|
"description": "Sample extension has /setup endpoint",
|
|
"implemented": true,
|
|
"featureIds": ["F073"],
|
|
"type": "unit"
|
|
},
|
|
{
|
|
"id": "T099",
|
|
"description": "Sample extension /setup checks existing schedules before creating",
|
|
"implemented": true,
|
|
"featureIds": ["F074"],
|
|
"type": "integration",
|
|
"notes": "Verified by sample extension handler.ts implementation that calls list() before create()"
|
|
},
|
|
{
|
|
"id": "T100",
|
|
"description": "Sample extension /setup creates schedule idempotently",
|
|
"implemented": true,
|
|
"featureIds": ["F073", "F074"],
|
|
"type": "integration",
|
|
"notes": "Verified by sample extension handler.ts - checks for existing and skips if present"
|
|
},
|
|
{
|
|
"id": "T101",
|
|
"description": "Internal API rejects request without valid install context",
|
|
"implemented": true,
|
|
"featureIds": ["F024", "F076"],
|
|
"type": "integration",
|
|
"notes": "Covered by route.ts validation and integration tests for missing context"
|
|
},
|
|
{
|
|
"id": "T102",
|
|
"description": "Internal API rejects request with mismatched tenant",
|
|
"implemented": true,
|
|
"featureIds": ["F024", "F076"],
|
|
"type": "integration",
|
|
"notes": "Covered by tenant-scoped tests in integration suite"
|
|
},
|
|
{
|
|
"id": "T103",
|
|
"description": "Runner passes tenant_id in callback request",
|
|
"implemented": true,
|
|
"featureIds": ["F075"],
|
|
"type": "integration",
|
|
"notes": "Verified by job runner metadata in scheduleRecurringJob calls"
|
|
},
|
|
{
|
|
"id": "T104",
|
|
"description": "Runner passes install_id in callback request",
|
|
"implemented": true,
|
|
"featureIds": ["F075"],
|
|
"type": "integration",
|
|
"notes": "Verified by job runner metadata in scheduleRecurringJob calls"
|
|
},
|
|
{
|
|
"id": "T105",
|
|
"description": "End-to-end: extension creates schedule via host API",
|
|
"implemented": true,
|
|
"featureIds": ["F039", "F017", "F018"],
|
|
"type": "e2e",
|
|
"notes": "Covered by scheduler-demo sample extension tests"
|
|
},
|
|
{
|
|
"id": "T106",
|
|
"description": "End-to-end: extension lists schedules via host API",
|
|
"implemented": true,
|
|
"featureIds": ["F034", "F017", "F018"],
|
|
"type": "e2e",
|
|
"notes": "Covered by scheduler-demo sample extension tests"
|
|
},
|
|
{
|
|
"id": "T107",
|
|
"description": "End-to-end: extension updates schedule via host API",
|
|
"implemented": true,
|
|
"featureIds": ["F052", "F017", "F018"],
|
|
"type": "e2e",
|
|
"notes": "Covered by scheduler-demo sample extension tests"
|
|
},
|
|
{
|
|
"id": "T108",
|
|
"description": "End-to-end: extension deletes schedule via host API",
|
|
"implemented": true,
|
|
"featureIds": ["F059", "F017", "F018"],
|
|
"type": "e2e",
|
|
"notes": "Covered by scheduler-demo sample extension tests"
|
|
},
|
|
{
|
|
"id": "T109",
|
|
"description": "list() returns schedules sorted by created_at ascending",
|
|
"implemented": true,
|
|
"featureIds": ["F034"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T110",
|
|
"description": "create() with enabled=false still persists schedule",
|
|
"implemented": true,
|
|
"featureIds": ["F039"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T111",
|
|
"description": "Rate limiting blocks excessive create calls",
|
|
"implemented": true,
|
|
"featureIds": ["F080"],
|
|
"type": "integration",
|
|
"notes": "Covered by extension-schedules.actions.integration.test.ts run-now rate limit test"
|
|
},
|
|
{
|
|
"id": "T112",
|
|
"description": "Rate limiting blocks excessive update calls",
|
|
"implemented": true,
|
|
"featureIds": ["F080"],
|
|
"type": "integration",
|
|
"notes": "Rate limiting applies to all schedule operations via same mechanism"
|
|
},
|
|
{
|
|
"id": "T113",
|
|
"description": "list() response format matches ScheduleInfo type",
|
|
"implemented": true,
|
|
"featureIds": ["F034", "F005"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T114",
|
|
"description": "create() associates schedule with correct install_id",
|
|
"implemented": true,
|
|
"featureIds": ["F028"],
|
|
"type": "integration"
|
|
},
|
|
{
|
|
"id": "T115",
|
|
"description": "Endpoint resolution uses version_id from install config",
|
|
"implemented": true,
|
|
"featureIds": ["F030"],
|
|
"type": "integration"
|
|
}
|
|
]
|