|
18 | 18 | use App\Http\Middleware\ControlPlaneVersionResolver; |
19 | 19 | use App\Http\Middleware\NamespaceResolver; |
20 | 20 | use App\Http\Middleware\RequireRole; |
21 | | -use App\Http\Middleware\RequireWorkflowBootstrapReady; |
22 | 21 | use App\Http\Middleware\RequireTopologyRoles; |
23 | 22 | use App\Http\Middleware\WorkerProtocolVersionResolver; |
24 | 23 | use Illuminate\Support\Facades\Route; |
|
52 | 51 | // NamespaceResolver on hosted routes so wrong-node requests fail closed with a |
53 | 52 | // machine-readable topology reason without leaking namespace existence. |
54 | 53 | // |
55 | | -// RequireWorkflowBootstrapReady sits in the same slot for runtime-serving |
56 | | -// workflow routes. It only blocks on explicit database/migration bootstrap |
57 | | -// blockers so routes fail closed during rollout/schema drift without locking |
58 | | -// out recovery paths such as compatible worker registration. |
59 | | -// |
60 | 54 | // WorkerProtocolVersionResolver follows the same ordering for worker-plane |
61 | 55 | // routes, keeping protocol skew and namespace errors in the worker envelope. |
62 | 56 | Route::middleware([Authenticate::class])->group(function () { |
|
68 | 62 | $cpv = ControlPlaneVersionResolver::class; |
69 | 63 | $httpControl = RequireTopologyRoles::class.':api_ingress,control_plane'; |
70 | 64 | $httpWorker = RequireTopologyRoles::class.':api_ingress,control_plane'; |
71 | | - $workflowBootstrap = RequireWorkflowBootstrapReady::class; |
72 | 65 | $wpv = WorkerProtocolVersionResolver::class; |
73 | 66 |
|
74 | 67 | // ── System ─────────────────────────────────────────────────────── |
|
89 | 82 | }); |
90 | 83 |
|
91 | 84 | // ── Workflows ──────────────────────────────────────────────────── |
92 | | - Route::prefix('workflows')->middleware([$operator, $cpv, $httpControl, $workflowBootstrap, $ns])->group(function () { |
| 85 | + Route::prefix('workflows')->middleware([$operator, $cpv, $httpControl, $ns])->group(function () { |
93 | 86 | Route::get('/', [WorkflowController::class, 'index']); |
94 | 87 | Route::post('/', [WorkflowController::class, 'start']); |
95 | 88 | Route::get('/{workflowId}', [WorkflowController::class, 'show']); |
|
120 | 113 | }); |
121 | 114 |
|
122 | 115 | // ── Bridge Adapters ────────────────────────────────────────────── |
123 | | - Route::prefix('bridge-adapters')->middleware([$operator, $cpv, $httpControl, $workflowBootstrap, $ns])->group(function () { |
| 116 | + Route::prefix('bridge-adapters')->middleware([$operator, $cpv, $httpControl, $ns])->group(function () { |
124 | 117 | Route::post('/webhook/{adapter}', [BridgeAdapterController::class, 'webhook']); |
125 | 118 | }); |
126 | 119 |
|
127 | 120 | // ── Worker Task Polling ────────────────────────────────────────── |
128 | | - Route::prefix('worker')->middleware([$worker, $wpv, $httpWorker, $workflowBootstrap, $ns])->group(function () { |
| 121 | + Route::prefix('worker')->middleware([$worker, $wpv, $httpWorker, $ns])->group(function () { |
129 | 122 | // Registration |
130 | 123 | Route::post('/register', [WorkerController::class, 'register']); |
131 | 124 | Route::post('/heartbeat', [WorkerController::class, 'heartbeat']); |
|
0 commit comments