@nextsparkjs/theme-default 0.1.0-beta.2 → 0.1.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -4
- package/templates/(public)/page.tsx +1 -1
- package/tests/cypress/e2e/_devtools/access.bdd.md +262 -0
- package/tests/cypress/e2e/_devtools/access.cy.ts +171 -0
- package/tests/cypress/e2e/_devtools/navigation.bdd.md +261 -0
- package/tests/cypress/e2e/_devtools/navigation.cy.ts +157 -0
- package/tests/cypress/e2e/_devtools/pages.bdd.md +303 -0
- package/tests/cypress/e2e/_devtools/pages.cy.ts +184 -0
- package/tests/cypress/e2e/_docs/README.md +215 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin-teams.narration.json +155 -0
- package/tests/cypress/e2e/_docs/tutorials/sector7-superadmin.cy.ts +390 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.doc.cy.ts +349 -0
- package/tests/cypress/e2e/_docs/tutorials/teams-system.narration.json +165 -0
- package/tests/cypress/e2e/_selectors/auth.cy.ts +306 -0
- package/tests/cypress/e2e/_selectors/billing.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-mobile.cy.ts +113 -0
- package/tests/cypress/e2e/_selectors/dashboard-navigation.cy.ts +89 -0
- package/tests/cypress/e2e/_selectors/dashboard-sidebar.cy.ts +60 -0
- package/tests/cypress/e2e/_selectors/dashboard-topnav.cy.ts +146 -0
- package/tests/cypress/e2e/_selectors/devtools.cy.ts +210 -0
- package/tests/cypress/e2e/_selectors/global-search.cy.ts +88 -0
- package/tests/cypress/e2e/_selectors/pages-editor.cy.ts +179 -0
- package/tests/cypress/e2e/_selectors/posts-editor.cy.ts +282 -0
- package/tests/cypress/e2e/_selectors/public.cy.ts +112 -0
- package/tests/cypress/e2e/_selectors/settings-api-keys.cy.ts +228 -0
- package/tests/cypress/e2e/_selectors/settings-billing.cy.ts +105 -0
- package/tests/cypress/e2e/_selectors/settings-layout.cy.ts +119 -0
- package/tests/cypress/e2e/_selectors/settings-password.cy.ts +71 -0
- package/tests/cypress/e2e/_selectors/settings-profile.cy.ts +82 -0
- package/tests/cypress/e2e/_selectors/settings-teams.cy.ts +68 -0
- package/tests/cypress/e2e/_selectors/superadmin.cy.ts +185 -0
- package/tests/cypress/e2e/_selectors/tasks.cy.ts +242 -0
- package/tests/cypress/e2e/_selectors/taxonomies.cy.ts +126 -0
- package/tests/cypress/e2e/_selectors/teams.cy.ts +142 -0
- package/tests/cypress/e2e/_superadmin/all-teams.bdd.md +261 -0
- package/tests/cypress/e2e/_superadmin/all-teams.cy.ts +177 -0
- package/tests/cypress/e2e/_superadmin/all-users.bdd.md +406 -0
- package/tests/cypress/e2e/_superadmin/all-users.cy.ts +294 -0
- package/tests/cypress/e2e/_superadmin/dashboard.bdd.md +235 -0
- package/tests/cypress/e2e/_superadmin/dashboard.cy.ts +149 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.bdd.md +290 -0
- package/tests/cypress/e2e/_superadmin/subscriptions-overview.cy.ts +194 -0
- package/tests/cypress/e2e/ai/ai-usage.cy.ts +209 -0
- package/tests/cypress/e2e/ai/chat-api.cy.ts +107 -0
- package/tests/cypress/e2e/ai/guardrails.cy.ts +332 -0
- package/tests/cypress/e2e/api/billing/BillingAPIController.js +319 -0
- package/tests/cypress/e2e/api/billing/check-action.cy.ts +326 -0
- package/tests/cypress/e2e/api/billing/checkout.cy.ts +358 -0
- package/tests/cypress/e2e/api/billing/lifecycle.cy.ts +423 -0
- package/tests/cypress/e2e/api/billing/plans/README.md +345 -0
- package/tests/cypress/e2e/api/billing/plans/business.cy.ts +412 -0
- package/tests/cypress/e2e/api/billing/plans/downgrade.cy.ts +510 -0
- package/tests/cypress/e2e/api/billing/plans/fixtures/billing-plans.json +163 -0
- package/tests/cypress/e2e/api/billing/plans/free.cy.ts +500 -0
- package/tests/cypress/e2e/api/billing/plans/pro.cy.ts +497 -0
- package/tests/cypress/e2e/api/billing/plans/starter.cy.ts +342 -0
- package/tests/cypress/e2e/api/billing/portal.cy.ts +313 -0
- package/tests/cypress/e2e/api/devtools/registries.bdd.md +300 -0
- package/tests/cypress/e2e/api/devtools/registries.cy.ts +368 -0
- package/tests/cypress/e2e/api/entities/blocks-scope.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/customers-crud.cy.ts +648 -0
- package/tests/cypress/e2e/api/entities/customers-metas.cy.ts +839 -0
- package/tests/cypress/e2e/api/entities/pages-crud.cy.ts +425 -0
- package/tests/cypress/e2e/api/entities/pages-status.cy.ts +335 -0
- package/tests/cypress/e2e/api/entities/post-categories-crud.cy.ts +610 -0
- package/tests/cypress/e2e/api/entities/posts-crud.cy.ts +709 -0
- package/tests/cypress/e2e/api/entities/posts-status.cy.ts +396 -0
- package/tests/cypress/e2e/api/entities/tasks-crud.cy.ts +602 -0
- package/tests/cypress/e2e/api/entities/tasks-metas.cy.ts +878 -0
- package/tests/cypress/e2e/api/entities/users-crud.cy.ts +469 -0
- package/tests/cypress/e2e/api/entities/users-metas.cy.ts +913 -0
- package/tests/cypress/e2e/api/entities/users-security.cy.ts +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.bdd.md +375 -0
- package/tests/cypress/e2e/api/scheduled-actions/cron-endpoint.cy.ts +346 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.bdd.md +451 -0
- package/tests/cypress/e2e/api/scheduled-actions/devtools-endpoint.cy.ts +447 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.bdd.md +649 -0
- package/tests/cypress/e2e/api/scheduled-actions/scheduling.cy.ts +333 -0
- package/tests/cypress/e2e/api/settings/api-keys.crud.cy.ts +923 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/app-roles/developer-login.cy.ts +144 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.bdd.md +118 -0
- package/tests/cypress/e2e/uat/auth/app-roles/superadmin-login.cy.ts +84 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.bdd.md +288 -0
- package/tests/cypress/e2e/uat/auth/custom-roles/editor-login.cy.ts +188 -0
- package/tests/cypress/e2e/uat/auth/login-logout.bdd.md +160 -0
- package/tests/cypress/e2e/uat/auth/login-logout.cy.ts +116 -0
- package/tests/cypress/e2e/uat/auth/password-reset.bdd.md +289 -0
- package/tests/cypress/e2e/uat/auth/password-reset.cy.ts +200 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.bdd.md +225 -0
- package/tests/cypress/e2e/uat/auth/team-roles/admin-login.cy.ts +148 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.bdd.md +251 -0
- package/tests/cypress/e2e/uat/auth/team-roles/member-login.cy.ts +163 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.bdd.md +231 -0
- package/tests/cypress/e2e/uat/auth/team-roles/owner-login.cy.ts +141 -0
- package/tests/cypress/e2e/uat/billing/extended.bdd.md +273 -0
- package/tests/cypress/e2e/uat/billing/extended.cy.ts +209 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.bdd.md +407 -0
- package/tests/cypress/e2e/uat/billing/feature-gates.cy.ts +307 -0
- package/tests/cypress/e2e/uat/billing/page.bdd.md +329 -0
- package/tests/cypress/e2e/uat/billing/page.cy.ts +250 -0
- package/tests/cypress/e2e/uat/billing/status.bdd.md +190 -0
- package/tests/cypress/e2e/uat/billing/status.cy.ts +145 -0
- package/tests/cypress/e2e/uat/billing/team-switch.bdd.md +156 -0
- package/tests/cypress/e2e/uat/billing/team-switch.cy.ts +122 -0
- package/tests/cypress/e2e/uat/billing/usage.bdd.md +218 -0
- package/tests/cypress/e2e/uat/billing/usage.cy.ts +176 -0
- package/tests/cypress/e2e/uat/blocks/hero.bdd.md +124 -0
- package/tests/cypress/e2e/uat/blocks/hero.cy.ts +56 -0
- package/tests/cypress/e2e/uat/devtools/api-tester.cy.ts +390 -0
- package/tests/cypress/e2e/uat/entities/customers/member.bdd.md +275 -0
- package/tests/cypress/e2e/uat/entities/customers/member.cy.ts +122 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.bdd.md +243 -0
- package/tests/cypress/e2e/uat/entities/customers/owner.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.bdd.md +476 -0
- package/tests/cypress/e2e/uat/entities/pages/block-crud.cy.ts +486 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.bdd.md +460 -0
- package/tests/cypress/e2e/uat/entities/pages/block-editor.cy.ts +301 -0
- package/tests/cypress/e2e/uat/entities/pages/list.bdd.md +432 -0
- package/tests/cypress/e2e/uat/entities/pages/list.cy.ts +273 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.bdd.md +696 -0
- package/tests/cypress/e2e/uat/entities/pages/public-rendering.cy.ts +340 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.bdd.md +161 -0
- package/tests/cypress/e2e/uat/entities/posts/categories-api-aware.cy.ts +104 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.bdd.md +375 -0
- package/tests/cypress/e2e/uat/entities/posts/categories.cy.ts +241 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.bdd.md +429 -0
- package/tests/cypress/e2e/uat/entities/posts/editor.cy.ts +257 -0
- package/tests/cypress/e2e/uat/entities/posts/list.bdd.md +340 -0
- package/tests/cypress/e2e/uat/entities/posts/list.cy.ts +177 -0
- package/tests/cypress/e2e/uat/entities/posts/public.bdd.md +614 -0
- package/tests/cypress/e2e/uat/entities/posts/public.cy.ts +249 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.bdd.md +222 -0
- package/tests/cypress/e2e/uat/entities/tasks/member.cy.ts +165 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.bdd.md +419 -0
- package/tests/cypress/e2e/uat/entities/tasks/owner.cy.ts +191 -0
- package/tests/cypress/e2e/uat/roles/editor-role.bdd.md +552 -0
- package/tests/cypress/e2e/uat/roles/editor-role.cy.ts +210 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.bdd.md +450 -0
- package/tests/cypress/e2e/uat/roles/member-restrictions.cy.ts +189 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.bdd.md +530 -0
- package/tests/cypress/e2e/uat/roles/owner-full-crud.cy.ts +247 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.bdd.md +736 -0
- package/tests/cypress/e2e/uat/scheduled-actions/devtools-ui.cy.ts +740 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.bdd.md +553 -0
- package/tests/cypress/e2e/uat/teams/roles-matrix.cy.ts +185 -0
- package/tests/cypress/e2e/uat/teams/switcher.bdd.md +1151 -0
- package/tests/cypress/e2e/uat/teams/switcher.cy.ts +497 -0
- package/tests/cypress/e2e/uat/teams/team-switcher.md +198 -0
- package/tests/cypress/fixtures/blocks.json +218 -0
- package/tests/cypress/fixtures/entities.json +78 -0
- package/tests/cypress/fixtures/page-builder.json +21 -0
- package/tests/cypress/src/components/CategoriesPOM.ts +382 -0
- package/tests/cypress/src/components/CustomersPOM.ts +439 -0
- package/tests/cypress/src/components/DevKeyringPOM.ts +160 -0
- package/tests/cypress/src/components/EntityForm.ts +375 -0
- package/tests/cypress/src/components/EntityList.ts +389 -0
- package/tests/cypress/src/components/PageBuilderPOM.ts +710 -0
- package/tests/cypress/src/components/PostEditorPOM.ts +370 -0
- package/tests/cypress/src/components/PostsListPOM.ts +223 -0
- package/tests/cypress/src/components/PublicPagePOM.ts +447 -0
- package/tests/cypress/src/components/PublicPostPOM.ts +146 -0
- package/tests/cypress/src/components/TasksPOM.ts +272 -0
- package/tests/cypress/src/components/TeamSwitcherPOM.ts +450 -0
- package/tests/cypress/src/components/index.ts +21 -0
- package/tests/cypress/src/controllers/ApiKeysAPIController.js +178 -0
- package/tests/cypress/src/controllers/BaseAPIController.js +317 -0
- package/tests/cypress/src/controllers/CustomerAPIController.js +251 -0
- package/tests/cypress/src/controllers/PagesAPIController.js +226 -0
- package/tests/cypress/src/controllers/PostsAPIController.js +250 -0
- package/tests/cypress/src/controllers/TaskAPIController.js +240 -0
- package/tests/cypress/src/controllers/UsersAPIController.js +242 -0
- package/tests/cypress/src/controllers/index.js +25 -0
- package/tests/cypress/src/core/AuthPOM.ts +450 -0
- package/tests/cypress/src/core/BasePOM.ts +86 -0
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +576 -0
- package/tests/cypress/src/core/DashboardEntityPOM.ts +692 -0
- package/tests/cypress/src/core/index.ts +14 -0
- package/tests/cypress/src/entities/CustomersPOM.ts +172 -0
- package/tests/cypress/src/entities/PagesPOM.ts +137 -0
- package/tests/cypress/src/entities/PostsPOM.ts +137 -0
- package/tests/cypress/src/entities/TasksPOM.ts +176 -0
- package/tests/cypress/src/entities/index.ts +14 -0
- package/tests/cypress/src/features/BillingPOM.ts +385 -0
- package/tests/cypress/src/features/DashboardPOM.ts +245 -0
- package/tests/cypress/src/features/DevtoolsPOM.ts +739 -0
- package/tests/cypress/src/features/PageBuilderPOM.ts +263 -0
- package/tests/cypress/src/features/PostEditorPOM.ts +313 -0
- package/tests/cypress/src/features/ScheduledActionsPOM.ts +463 -0
- package/tests/cypress/src/features/SettingsPOM.ts +362 -0
- package/tests/cypress/src/features/SuperadminPOM.ts +331 -0
- package/tests/cypress/src/features/SuperadminTeamRolesPOM.ts +285 -0
- package/tests/cypress/src/features/index.ts +28 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +177 -0
- package/tests/cypress/src/index.ts +101 -0
- package/tests/cypress/src/pages/dashboard/Dashboard.js +677 -0
- package/tests/cypress/src/pages/dashboard/DashboardPage.js +43 -0
- package/tests/cypress/src/pages/dashboard/DashboardStats.js +546 -0
- package/tests/cypress/src/pages/dashboard/index.js +6 -0
- package/tests/cypress/src/pages/index.js +5 -0
- package/tests/cypress/src/pages/public/FeaturesPage.js +28 -0
- package/tests/cypress/src/pages/public/LandingPage.js +69 -0
- package/tests/cypress/src/pages/public/PricingPage.js +33 -0
- package/tests/cypress/src/pages/public/index.js +6 -0
- package/tests/cypress/src/selectors.ts +46 -0
- package/tests/cypress/src/session-helpers.ts +500 -0
- package/tests/cypress/support/doc-commands.ts +260 -0
- package/tests/cypress.config.ts +150 -0
- package/tests/jest/components/post-header.test.tsx +377 -0
- package/tests/jest/config/role-config.test.ts +529 -0
- package/tests/jest/jest.config.ts +81 -0
- package/tests/jest/langchain/COVERAGE.md +372 -0
- package/tests/jest/langchain/guardrails.test.ts +465 -0
- package/tests/jest/langchain/streaming.test.ts +367 -0
- package/tests/jest/langchain/token-tracker.test.ts +455 -0
- package/tests/jest/langchain/tracer-callbacks.test.ts +881 -0
- package/tests/jest/langchain/tracer.test.ts +823 -0
- package/tests/jest/user-roles/role-helpers.test.ts +432 -0
- package/tests/jest/validation/categories.test.ts +429 -0
- package/tests/jest/validation/posts.test.ts +546 -0
- package/tests/tsconfig.json +15 -0
- package/LICENSE +0 -21
|
@@ -0,0 +1,649 @@
|
|
|
1
|
+
---
|
|
2
|
+
feature: Scheduled Actions Scheduling API
|
|
3
|
+
priority: critical
|
|
4
|
+
tags: [api, feat-scheduled-actions, scheduling, lifecycle, regression]
|
|
5
|
+
grepTags: ["@api", "@feat-scheduled-actions"]
|
|
6
|
+
coverage: 22 tests
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Scheduled Actions Scheduling API
|
|
10
|
+
|
|
11
|
+
> Documentation tests for the scheduled-actions library. These tests verify the scheduling API, status transitions, error handling, and registry functions through documented behavior.
|
|
12
|
+
|
|
13
|
+
## Functions Covered
|
|
14
|
+
|
|
15
|
+
| Function | Description |
|
|
16
|
+
|----------|-------------|
|
|
17
|
+
| `scheduleAction(actionType, payload, options)` | Schedule one-time action |
|
|
18
|
+
| `scheduleRecurringAction(actionType, payload, interval, options)` | Schedule recurring action |
|
|
19
|
+
| `registerScheduledAction(name, handler, options)` | Register action handler |
|
|
20
|
+
| `getAllRegisteredActions()` | List registered actions |
|
|
21
|
+
| `isActionRegistered(name)` | Check if action is registered |
|
|
22
|
+
| `cleanupOldActions(retentionDays)` | Cleanup old actions |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## @test SCHED_DB_001: Should have scheduledActions table available
|
|
27
|
+
|
|
28
|
+
### Metadata
|
|
29
|
+
- **Priority:** Critical
|
|
30
|
+
- **Type:** Infrastructure
|
|
31
|
+
- **Tags:** api, scheduled-actions, database
|
|
32
|
+
- **AC:** AC-1
|
|
33
|
+
|
|
34
|
+
```gherkin:en
|
|
35
|
+
Scenario: Database table exists
|
|
36
|
+
|
|
37
|
+
Given the application is deployed
|
|
38
|
+
Then the scheduledActions table should exist
|
|
39
|
+
And it should have required columns: id, teamId, actionType, status, payload, scheduledAt
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```gherkin:es
|
|
43
|
+
Scenario: Tabla de base de datos existe
|
|
44
|
+
|
|
45
|
+
Given la aplicacion esta desplegada
|
|
46
|
+
Then la tabla scheduledActions deberia existir
|
|
47
|
+
And deberia tener columnas requeridas: id, teamId, actionType, status, payload, scheduledAt
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## @test SCHED_SCHEDULE_010: Should schedule one-time action
|
|
53
|
+
|
|
54
|
+
### Metadata
|
|
55
|
+
- **Priority:** Critical
|
|
56
|
+
- **Type:** Functional
|
|
57
|
+
- **Tags:** api, scheduled-actions, one-time
|
|
58
|
+
- **AC:** AC-4
|
|
59
|
+
|
|
60
|
+
```gherkin:en
|
|
61
|
+
Scenario: Schedule one-time action
|
|
62
|
+
|
|
63
|
+
Given I have a valid action type
|
|
64
|
+
When I call scheduleAction(actionType, payload, options)
|
|
65
|
+
Then a new action should be created
|
|
66
|
+
And the status should be pending
|
|
67
|
+
And the action ID should be returned
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```gherkin:es
|
|
71
|
+
Scenario: Programar accion unica
|
|
72
|
+
|
|
73
|
+
Given tengo un tipo de accion valido
|
|
74
|
+
When llamo scheduleAction(actionType, payload, options)
|
|
75
|
+
Then una nueva accion deberia crearse
|
|
76
|
+
And el status deberia ser pending
|
|
77
|
+
And el ID de la accion deberia retornarse
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## @test SCHED_SCHEDULE_011: Should default to immediate execution when no scheduledAt
|
|
83
|
+
|
|
84
|
+
### Metadata
|
|
85
|
+
- **Priority:** Normal
|
|
86
|
+
- **Type:** Functional
|
|
87
|
+
- **Tags:** api, scheduled-actions, defaults
|
|
88
|
+
- **AC:** AC-4
|
|
89
|
+
|
|
90
|
+
```gherkin:en
|
|
91
|
+
Scenario: Default scheduledAt is NOW()
|
|
92
|
+
|
|
93
|
+
Given I call scheduleAction without scheduledAt option
|
|
94
|
+
Then the action should be scheduled for immediate processing
|
|
95
|
+
And scheduledAt should default to current time
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```gherkin:es
|
|
99
|
+
Scenario: scheduledAt por defecto es NOW()
|
|
100
|
+
|
|
101
|
+
Given llamo scheduleAction sin opcion scheduledAt
|
|
102
|
+
Then la accion deberia programarse para procesamiento inmediato
|
|
103
|
+
And scheduledAt deberia ser el tiempo actual por defecto
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## @test SCHED_SCHEDULE_020: Should schedule recurring action
|
|
109
|
+
|
|
110
|
+
### Metadata
|
|
111
|
+
- **Priority:** Critical
|
|
112
|
+
- **Type:** Functional
|
|
113
|
+
- **Tags:** api, scheduled-actions, recurring
|
|
114
|
+
- **AC:** AC-5
|
|
115
|
+
|
|
116
|
+
```gherkin:en
|
|
117
|
+
Scenario: Schedule recurring action
|
|
118
|
+
|
|
119
|
+
Given I have a valid action type
|
|
120
|
+
When I call scheduleRecurringAction(actionType, payload, interval, options)
|
|
121
|
+
Then a recurring action should be created
|
|
122
|
+
And it should create a new action after completion
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```gherkin:es
|
|
126
|
+
Scenario: Programar accion recurrente
|
|
127
|
+
|
|
128
|
+
Given tengo un tipo de accion valido
|
|
129
|
+
When llamo scheduleRecurringAction(actionType, payload, interval, options)
|
|
130
|
+
Then una accion recurrente deberia crearse
|
|
131
|
+
And deberia crear una nueva accion despues de completar
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## @test SCHED_SCHEDULE_021: Should support hourly recurring interval
|
|
137
|
+
|
|
138
|
+
### Metadata
|
|
139
|
+
- **Priority:** Normal
|
|
140
|
+
- **Type:** Functional
|
|
141
|
+
- **Tags:** api, scheduled-actions, recurring, hourly
|
|
142
|
+
- **AC:** AC-5
|
|
143
|
+
|
|
144
|
+
```gherkin:en
|
|
145
|
+
Scenario: Hourly recurring interval
|
|
146
|
+
|
|
147
|
+
Given I schedule a recurring action with interval "hourly"
|
|
148
|
+
Then the next action should be scheduled +1 hour from completion
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```gherkin:es
|
|
152
|
+
Scenario: Intervalo recurrente por hora
|
|
153
|
+
|
|
154
|
+
Given programo una accion recurrente con intervalo "hourly"
|
|
155
|
+
Then la siguiente accion deberia programarse +1 hora desde la completacion
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## @test SCHED_SCHEDULE_022: Should support daily recurring interval
|
|
161
|
+
|
|
162
|
+
### Metadata
|
|
163
|
+
- **Priority:** Normal
|
|
164
|
+
- **Type:** Functional
|
|
165
|
+
- **Tags:** api, scheduled-actions, recurring, daily
|
|
166
|
+
- **AC:** AC-5
|
|
167
|
+
|
|
168
|
+
```gherkin:en
|
|
169
|
+
Scenario: Daily recurring interval
|
|
170
|
+
|
|
171
|
+
Given I schedule a recurring action with interval "daily"
|
|
172
|
+
Then the next action should be scheduled +1 day from completion
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```gherkin:es
|
|
176
|
+
Scenario: Intervalo recurrente diario
|
|
177
|
+
|
|
178
|
+
Given programo una accion recurrente con intervalo "daily"
|
|
179
|
+
Then la siguiente accion deberia programarse +1 dia desde la completacion
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## @test SCHED_SCHEDULE_023: Should support weekly recurring interval
|
|
185
|
+
|
|
186
|
+
### Metadata
|
|
187
|
+
- **Priority:** Normal
|
|
188
|
+
- **Type:** Functional
|
|
189
|
+
- **Tags:** api, scheduled-actions, recurring, weekly
|
|
190
|
+
- **AC:** AC-5
|
|
191
|
+
|
|
192
|
+
```gherkin:en
|
|
193
|
+
Scenario: Weekly recurring interval
|
|
194
|
+
|
|
195
|
+
Given I schedule a recurring action with interval "weekly"
|
|
196
|
+
Then the next action should be scheduled +7 days from completion
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```gherkin:es
|
|
200
|
+
Scenario: Intervalo recurrente semanal
|
|
201
|
+
|
|
202
|
+
Given programo una accion recurrente con intervalo "weekly"
|
|
203
|
+
Then la siguiente accion deberia programarse +7 dias desde la completacion
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## @test SCHED_STATUS_030: Should start with pending status
|
|
209
|
+
|
|
210
|
+
### Metadata
|
|
211
|
+
- **Priority:** Critical
|
|
212
|
+
- **Type:** Functional
|
|
213
|
+
- **Tags:** api, scheduled-actions, status
|
|
214
|
+
- **AC:** AC-4
|
|
215
|
+
|
|
216
|
+
```gherkin:en
|
|
217
|
+
Scenario: Initial status is pending
|
|
218
|
+
|
|
219
|
+
Given I schedule a new action
|
|
220
|
+
Then the status should be "pending"
|
|
221
|
+
And the processor will pick it up on next run
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
```gherkin:es
|
|
225
|
+
Scenario: Status inicial es pending
|
|
226
|
+
|
|
227
|
+
Given programo una nueva accion
|
|
228
|
+
Then el status deberia ser "pending"
|
|
229
|
+
And el procesador la tomara en la siguiente ejecucion
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## @test SCHED_STATUS_031: Should transition to running when processing
|
|
235
|
+
|
|
236
|
+
### Metadata
|
|
237
|
+
- **Priority:** Critical
|
|
238
|
+
- **Type:** Functional
|
|
239
|
+
- **Tags:** api, scheduled-actions, status, transition
|
|
240
|
+
- **AC:** AC-2
|
|
241
|
+
|
|
242
|
+
```gherkin:en
|
|
243
|
+
Scenario: Status transitions to running
|
|
244
|
+
|
|
245
|
+
Given a pending action is picked up by the processor
|
|
246
|
+
Then the status should change to "running"
|
|
247
|
+
And this prevents duplicate processing
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
```gherkin:es
|
|
251
|
+
Scenario: Status cambia a running
|
|
252
|
+
|
|
253
|
+
Given una accion pending es tomada por el procesador
|
|
254
|
+
Then el status deberia cambiar a "running"
|
|
255
|
+
And esto previene procesamiento duplicado
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## @test SCHED_STATUS_032: Should transition to completed on success
|
|
261
|
+
|
|
262
|
+
### Metadata
|
|
263
|
+
- **Priority:** Critical
|
|
264
|
+
- **Type:** Functional
|
|
265
|
+
- **Tags:** api, scheduled-actions, status, success
|
|
266
|
+
- **AC:** AC-7
|
|
267
|
+
|
|
268
|
+
```gherkin:en
|
|
269
|
+
Scenario: Status transitions to completed on success
|
|
270
|
+
|
|
271
|
+
Given a running action executes successfully
|
|
272
|
+
Then the status should change to "completed"
|
|
273
|
+
And AC-7 completed actions are marked correctly
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
```gherkin:es
|
|
277
|
+
Scenario: Status cambia a completed en exito
|
|
278
|
+
|
|
279
|
+
Given una accion running se ejecuta exitosamente
|
|
280
|
+
Then el status deberia cambiar a "completed"
|
|
281
|
+
And AC-7 acciones completadas se marcan correctamente
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## @test SCHED_STATUS_033: Should transition to failed on error
|
|
287
|
+
|
|
288
|
+
### Metadata
|
|
289
|
+
- **Priority:** Critical
|
|
290
|
+
- **Type:** Functional
|
|
291
|
+
- **Tags:** api, scheduled-actions, status, error
|
|
292
|
+
- **AC:** AC-6
|
|
293
|
+
|
|
294
|
+
```gherkin:en
|
|
295
|
+
Scenario: Status transitions to failed on error
|
|
296
|
+
|
|
297
|
+
Given a running action encounters an error
|
|
298
|
+
Then the status should change to "failed"
|
|
299
|
+
And the error message should be stored
|
|
300
|
+
And AC-6 failed actions are marked with error message
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
```gherkin:es
|
|
304
|
+
Scenario: Status cambia a failed en error
|
|
305
|
+
|
|
306
|
+
Given una accion running encuentra un error
|
|
307
|
+
Then el status deberia cambiar a "failed"
|
|
308
|
+
And el mensaje de error deberia guardarse
|
|
309
|
+
And AC-6 acciones fallidas se marcan con mensaje de error
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
## @test SCHED_ERROR_040: Should store error message on failure
|
|
315
|
+
|
|
316
|
+
### Metadata
|
|
317
|
+
- **Priority:** Critical
|
|
318
|
+
- **Type:** Error Handling
|
|
319
|
+
- **Tags:** api, scheduled-actions, error
|
|
320
|
+
- **AC:** AC-6
|
|
321
|
+
|
|
322
|
+
```gherkin:en
|
|
323
|
+
Scenario: Error message is stored
|
|
324
|
+
|
|
325
|
+
Given an action fails during processing
|
|
326
|
+
Then the error message should be stored in errorMessage column
|
|
327
|
+
And it should contain the error stack trace or message
|
|
328
|
+
And it should be available for debugging
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
```gherkin:es
|
|
332
|
+
Scenario: Mensaje de error se almacena
|
|
333
|
+
|
|
334
|
+
Given una accion falla durante el procesamiento
|
|
335
|
+
Then el mensaje de error deberia guardarse en la columna errorMessage
|
|
336
|
+
And deberia contener el stack trace o mensaje de error
|
|
337
|
+
And deberia estar disponible para debugging
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## @test SCHED_ERROR_041: Should handle unknown action types
|
|
343
|
+
|
|
344
|
+
### Metadata
|
|
345
|
+
- **Priority:** Critical
|
|
346
|
+
- **Type:** Error Handling
|
|
347
|
+
- **Tags:** api, scheduled-actions, unknown-action
|
|
348
|
+
- **AC:** AC-10
|
|
349
|
+
|
|
350
|
+
```gherkin:en
|
|
351
|
+
Scenario: Unknown action types are handled
|
|
352
|
+
|
|
353
|
+
Given an action has an unregistered action type
|
|
354
|
+
When the processor tries to execute it
|
|
355
|
+
Then the action should fail
|
|
356
|
+
And the error should be "No handler registered for action: unknown:action"
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
```gherkin:es
|
|
360
|
+
Scenario: Tipos de accion desconocidos se manejan
|
|
361
|
+
|
|
362
|
+
Given una accion tiene un tipo de accion no registrado
|
|
363
|
+
When el procesador intenta ejecutarla
|
|
364
|
+
Then la accion deberia fallar
|
|
365
|
+
And el error deberia ser "No handler registered for action: unknown:action"
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## @test SCHED_ERROR_042: Should handle timeout protection
|
|
371
|
+
|
|
372
|
+
### Metadata
|
|
373
|
+
- **Priority:** Critical
|
|
374
|
+
- **Type:** Error Handling
|
|
375
|
+
- **Tags:** api, scheduled-actions, timeout
|
|
376
|
+
- **AC:** AC-21
|
|
377
|
+
|
|
378
|
+
```gherkin:en
|
|
379
|
+
Scenario: Timeout protection implemented
|
|
380
|
+
|
|
381
|
+
Given an action handler takes too long
|
|
382
|
+
When the timeout is exceeded (default 30 seconds)
|
|
383
|
+
Then the action should fail
|
|
384
|
+
And the error should be "Action timed out after 30000ms"
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
```gherkin:es
|
|
388
|
+
Scenario: Proteccion de timeout implementada
|
|
389
|
+
|
|
390
|
+
Given un handler de accion toma demasiado tiempo
|
|
391
|
+
When el timeout es excedido (default 30 segundos)
|
|
392
|
+
Then la accion deberia fallar
|
|
393
|
+
And el error deberia ser "Action timed out after 30000ms"
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## @test SCHED_REGISTRY_050: Should provide registry function
|
|
399
|
+
|
|
400
|
+
### Metadata
|
|
401
|
+
- **Priority:** Critical
|
|
402
|
+
- **Type:** Functional
|
|
403
|
+
- **Tags:** api, scheduled-actions, registry
|
|
404
|
+
- **AC:** AC-8
|
|
405
|
+
|
|
406
|
+
```gherkin:en
|
|
407
|
+
Scenario: Registry function is provided
|
|
408
|
+
|
|
409
|
+
Given the scheduled-actions library is available
|
|
410
|
+
Then registerScheduledAction function should be exported
|
|
411
|
+
And it should accept name, handler, and options parameters
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
```gherkin:es
|
|
415
|
+
Scenario: Funcion de registro es proporcionada
|
|
416
|
+
|
|
417
|
+
Given la libreria scheduled-actions esta disponible
|
|
418
|
+
Then la funcion registerScheduledAction deberia exportarse
|
|
419
|
+
And deberia aceptar parametros name, handler y options
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## @test SCHED_REGISTRY_051: Should allow handler registration
|
|
425
|
+
|
|
426
|
+
### Metadata
|
|
427
|
+
- **Priority:** Critical
|
|
428
|
+
- **Type:** Functional
|
|
429
|
+
- **Tags:** api, scheduled-actions, handler
|
|
430
|
+
- **AC:** AC-9
|
|
431
|
+
|
|
432
|
+
```gherkin:en
|
|
433
|
+
Scenario: Handlers can be registered
|
|
434
|
+
|
|
435
|
+
Given I want to register a new action handler
|
|
436
|
+
When I call registerScheduledAction(name, handler, options)
|
|
437
|
+
Then the handler should be registered
|
|
438
|
+
And it should be available for processing
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
```gherkin:es
|
|
442
|
+
Scenario: Handlers pueden registrarse
|
|
443
|
+
|
|
444
|
+
Given quiero registrar un nuevo handler de accion
|
|
445
|
+
When llamo registerScheduledAction(name, handler, options)
|
|
446
|
+
Then el handler deberia registrarse
|
|
447
|
+
And deberia estar disponible para procesamiento
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## @test SCHED_REGISTRY_052: Should list registered actions
|
|
453
|
+
|
|
454
|
+
### Metadata
|
|
455
|
+
- **Priority:** Normal
|
|
456
|
+
- **Type:** Functional
|
|
457
|
+
- **Tags:** api, scheduled-actions, registry
|
|
458
|
+
- **AC:** AC-8
|
|
459
|
+
|
|
460
|
+
```gherkin:en
|
|
461
|
+
Scenario: Can list registered actions
|
|
462
|
+
|
|
463
|
+
Given actions have been registered
|
|
464
|
+
When I call getAllRegisteredActions()
|
|
465
|
+
Then I should receive an array of action names
|
|
466
|
+
And it should be usable for DevTools UI and monitoring
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
```gherkin:es
|
|
470
|
+
Scenario: Puede listar acciones registradas
|
|
471
|
+
|
|
472
|
+
Given se han registrado acciones
|
|
473
|
+
When llamo getAllRegisteredActions()
|
|
474
|
+
Then deberia recibir un array de nombres de acciones
|
|
475
|
+
And deberia ser usable para DevTools UI y monitoreo
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## @test SCHED_REGISTRY_053: Should check if action is registered
|
|
481
|
+
|
|
482
|
+
### Metadata
|
|
483
|
+
- **Priority:** Normal
|
|
484
|
+
- **Type:** Functional
|
|
485
|
+
- **Tags:** api, scheduled-actions, validation
|
|
486
|
+
- **AC:** AC-8
|
|
487
|
+
|
|
488
|
+
```gherkin:en
|
|
489
|
+
Scenario: Can check if action is registered
|
|
490
|
+
|
|
491
|
+
Given I want to validate an action type
|
|
492
|
+
When I call isActionRegistered(name)
|
|
493
|
+
Then I should receive a boolean
|
|
494
|
+
And this can be used for validation before scheduling
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
```gherkin:es
|
|
498
|
+
Scenario: Puede verificar si accion esta registrada
|
|
499
|
+
|
|
500
|
+
Given quiero validar un tipo de accion
|
|
501
|
+
When llamo isActionRegistered(name)
|
|
502
|
+
Then deberia recibir un boolean
|
|
503
|
+
And esto puede usarse para validacion antes de programar
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## @test SCHED_CLEANUP_060: Should cleanup old completed actions
|
|
509
|
+
|
|
510
|
+
### Metadata
|
|
511
|
+
- **Priority:** Normal
|
|
512
|
+
- **Type:** Maintenance
|
|
513
|
+
- **Tags:** api, scheduled-actions, cleanup
|
|
514
|
+
|
|
515
|
+
```gherkin:en
|
|
516
|
+
Scenario: Old actions are cleaned up
|
|
517
|
+
|
|
518
|
+
Given there are old completed and failed actions
|
|
519
|
+
When cleanupOldActions is called (default 7 days retention)
|
|
520
|
+
Then actions older than retention period should be deleted
|
|
521
|
+
And this is called automatically by the cron endpoint
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
```gherkin:es
|
|
525
|
+
Scenario: Acciones antiguas se limpian
|
|
526
|
+
|
|
527
|
+
Given hay acciones completadas y fallidas antiguas
|
|
528
|
+
When se llama cleanupOldActions (default 7 dias retencion)
|
|
529
|
+
Then acciones mas antiguas que el periodo de retencion deberian eliminarse
|
|
530
|
+
And esto se llama automaticamente por el endpoint cron
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
---
|
|
534
|
+
|
|
535
|
+
## @test SCHED_CLEANUP_061: Should preserve pending and running actions
|
|
536
|
+
|
|
537
|
+
### Metadata
|
|
538
|
+
- **Priority:** Critical
|
|
539
|
+
- **Type:** Safety
|
|
540
|
+
- **Tags:** api, scheduled-actions, cleanup, safety
|
|
541
|
+
|
|
542
|
+
```gherkin:en
|
|
543
|
+
Scenario: Active actions are preserved
|
|
544
|
+
|
|
545
|
+
Given cleanup is running
|
|
546
|
+
Then only completed and failed actions should be affected
|
|
547
|
+
And pending and running actions should never be deleted
|
|
548
|
+
And this ensures no active actions are lost
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
```gherkin:es
|
|
552
|
+
Scenario: Acciones activas se preservan
|
|
553
|
+
|
|
554
|
+
Given el cleanup esta ejecutandose
|
|
555
|
+
Then solo acciones completed y failed deberian afectarse
|
|
556
|
+
And acciones pending y running nunca deberian eliminarse
|
|
557
|
+
And esto asegura que no se pierdan acciones activas
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
---
|
|
561
|
+
|
|
562
|
+
## @test SCHED_FLOW_100: Should complete full action lifecycle
|
|
563
|
+
|
|
564
|
+
### Metadata
|
|
565
|
+
- **Priority:** Critical
|
|
566
|
+
- **Type:** Integration
|
|
567
|
+
- **Tags:** api, scheduled-actions, lifecycle
|
|
568
|
+
- **AC:** AC-4, AC-6, AC-7
|
|
569
|
+
|
|
570
|
+
```gherkin:en
|
|
571
|
+
Scenario: Full action lifecycle
|
|
572
|
+
|
|
573
|
+
Given I schedule a new action
|
|
574
|
+
When the cron processes it
|
|
575
|
+
Then the lifecycle should be:
|
|
576
|
+
1. SCHEDULE: status = pending
|
|
577
|
+
2. PROCESS: status = running
|
|
578
|
+
3. EXECUTE: handler is called
|
|
579
|
+
4. COMPLETE: status = completed OR failed
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
```gherkin:es
|
|
583
|
+
Scenario: Ciclo de vida completo de accion
|
|
584
|
+
|
|
585
|
+
Given programo una nueva accion
|
|
586
|
+
When el cron la procesa
|
|
587
|
+
Then el ciclo de vida deberia ser:
|
|
588
|
+
1. SCHEDULE: status = pending
|
|
589
|
+
2. PROCESS: status = running
|
|
590
|
+
3. EXECUTE: handler es llamado
|
|
591
|
+
4. COMPLETE: status = completed O failed
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
---
|
|
595
|
+
|
|
596
|
+
## @test SCHED_FLOW_101: Should handle recurring action lifecycle
|
|
597
|
+
|
|
598
|
+
### Metadata
|
|
599
|
+
- **Priority:** Critical
|
|
600
|
+
- **Type:** Integration
|
|
601
|
+
- **Tags:** api, scheduled-actions, recurring, lifecycle
|
|
602
|
+
- **AC:** AC-5
|
|
603
|
+
|
|
604
|
+
```gherkin:en
|
|
605
|
+
Scenario: Recurring action lifecycle
|
|
606
|
+
|
|
607
|
+
Given I schedule a recurring action
|
|
608
|
+
When the action completes successfully
|
|
609
|
+
Then a new action should be scheduled
|
|
610
|
+
And the interval should determine the next scheduledAt
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
```gherkin:es
|
|
614
|
+
Scenario: Ciclo de vida de accion recurrente
|
|
615
|
+
|
|
616
|
+
Given programo una accion recurrente
|
|
617
|
+
When la accion se completa exitosamente
|
|
618
|
+
Then una nueva accion deberia programarse
|
|
619
|
+
And el intervalo deberia determinar el siguiente scheduledAt
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
## Test Summary
|
|
625
|
+
|
|
626
|
+
| Test ID | Description | Priority | AC |
|
|
627
|
+
|---------|-------------|----------|-----|
|
|
628
|
+
| SCHED_DB_001 | Database table exists | Critical | AC-1 |
|
|
629
|
+
| SCHED_SCHEDULE_010 | One-time scheduling | Critical | AC-4 |
|
|
630
|
+
| SCHED_SCHEDULE_011 | Default scheduledAt | Normal | AC-4 |
|
|
631
|
+
| SCHED_SCHEDULE_020 | Recurring scheduling | Critical | AC-5 |
|
|
632
|
+
| SCHED_SCHEDULE_021 | Hourly interval | Normal | AC-5 |
|
|
633
|
+
| SCHED_SCHEDULE_022 | Daily interval | Normal | AC-5 |
|
|
634
|
+
| SCHED_SCHEDULE_023 | Weekly interval | Normal | AC-5 |
|
|
635
|
+
| SCHED_STATUS_030 | Initial pending status | Critical | AC-4 |
|
|
636
|
+
| SCHED_STATUS_031 | Running transition | Critical | AC-2 |
|
|
637
|
+
| SCHED_STATUS_032 | Completed transition | Critical | AC-7 |
|
|
638
|
+
| SCHED_STATUS_033 | Failed transition | Critical | AC-6 |
|
|
639
|
+
| SCHED_ERROR_040 | Error message storage | Critical | AC-6 |
|
|
640
|
+
| SCHED_ERROR_041 | Unknown action handling | Critical | AC-10 |
|
|
641
|
+
| SCHED_ERROR_042 | Timeout protection | Critical | AC-21 |
|
|
642
|
+
| SCHED_REGISTRY_050 | Registry function | Critical | AC-8 |
|
|
643
|
+
| SCHED_REGISTRY_051 | Handler registration | Critical | AC-9 |
|
|
644
|
+
| SCHED_REGISTRY_052 | List registered actions | Normal | AC-8 |
|
|
645
|
+
| SCHED_REGISTRY_053 | Check registration | Normal | AC-8 |
|
|
646
|
+
| SCHED_CLEANUP_060 | Cleanup old actions | Normal | - |
|
|
647
|
+
| SCHED_CLEANUP_061 | Preserve active actions | Critical | - |
|
|
648
|
+
| SCHED_FLOW_100 | Full lifecycle | Critical | AC-4, AC-6, AC-7 |
|
|
649
|
+
| SCHED_FLOW_101 | Recurring lifecycle | Critical | AC-5 |
|