[ { "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" } ]