# Plugin Executor Routing And Approval Implementation Plan > **For agentic workers:** Implement task-by-task with tests first. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Freeze a validated Executor route per contribution step and persist environment-bound approval evidence for real execution attempts. **Architecture:** A routing policy resolves configured overrides or the explicit default before enqueue, validates adapter support, fingerprints the route configuration, and stores the selected code on each receipt. Execution APIs bind non-dry-run attempts to exact Transition/routing/environment identities and persist approval evidence. **Tech Stack:** Java 8, Spring Boot 2.5 configuration binding, MyBatis, MySQL 5.7-compatible SQL, JUnit 4, Mockito, Vue 2. ## Global Constraints - Default behavior remains `dry-run:v1` with no required request body. - Runtime Executor failures must never fall back to another adapter. - Every receipt must execute with its persisted Executor code. - Real attempts require exact environment, Transition, routing fingerprint, operator, and reason by default. - Routing/approval APIs must not expose target credentials. ### Task 1: Routing Configuration And Snapshot **Files:** - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/config/PluginExecutionProperties.java` - Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/factory/plugin/execution/PluginExecutionRoutingSnapshot.java` - Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/factory/plugin/execution/PluginExecutionRoutingPolicy.java` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/factory/plugin/execution/PluginContributionExecutorRegistry.java` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/factory/plugin/execution/PluginExecutionRoutingPolicyTest.java` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/factory/plugin/execution/PluginContributionExecutorRegistryTest.java` - [x] Write failing tests for normalized route keys, default inheritance, mixed snapshots, stable fingerprints, and invalid adapter rejection. - [x] Add environment, approval policy, and route-map configuration. - [x] Add explicit Executor Registry validation/dispatch without runtime fallback. - [x] Run routing and Registry tests and confirm they pass. ### Task 2: Freeze Routes During Enqueue And Delivery **Files:** - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/PluginTransitionExecutionService.java` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/service/PluginTransitionOutboxWorker.java` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/service/PluginTransitionExecutionServiceTest.java` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/service/PluginTransitionOutboxWorkerTest.java` - [x] Write failing tests for mixed per-step receipt codes and receipt-directed Worker dispatch. - [x] Resolve/validate all routes before inserting an execution batch. - [x] Freeze summary/environment/fingerprint on the batch and code on each receipt. - [x] Dispatch with `receipt.executorCode` and confirm no current configuration lookup occurs. ### Task 3: Approval Evidence And Persistence **Files:** - Create: `ruoyi-generator/src/main/java/com/ruoyi/generator/factory/plugin/model/PluginTransitionExecutionRequest.java` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/factory/plugin/model/PluginTransitionExecution.java` - Modify: `ruoyi-generator/src/main/resources/mapper/factory/PluginTransitionExecutionMapper.xml` - Modify: `sql/factory_plugin_registry.sql` - Modify: `sql/front_workbench.sql` - Modify: `sql/db.sql` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/factory/plugin/execution/PluginExecutionRoutingPolicyTest.java` - Test: `ruoyi-generator/src/test/java/com/ruoyi/generator/factory/plugin/PluginRegistrySchemaScriptTest.java` - [x] Write failing approval tests for dry-run compatibility, missing evidence, stale identities, invalid reason, and accepted evidence. - [x] Persist environment, route fingerprint, approval-required, operator/time/reason fields. - [x] Add conditional MySQL 5.7 upgrade columns and full-schema columns. - [x] Run policy, Mapper, and schema tests. ### Task 4: API And Registry Status **Files:** - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/factory/plugin/model/PluginRegistryStatus.java` - Modify: `ruoyi-generator/src/main/java/com/ruoyi/generator/controller/FeaturePluginController.java` - Modify: `ruoyi-generator/src/test/java/com/ruoyi/generator/controller/FeaturePluginControllerTest.java` - Modify: `ruoyi-admin/src/main/resources/application.yml` - [x] Write failing contracts for routing status and optional execution approval bodies. - [x] Expose only non-secret environment/routing policy fields. - [x] Pass approval requests to execute/retry/compensate services. - [x] Add environment and known route override variables to application configuration. ### Task 5: Admin Approval And Audit UI **Files:** - Modify: `ruoyi-ui/src/api/generator/plugin.js` - Modify: `ruoyi-ui/src/views/generator/plugin/index.vue` - Modify: `ruoyi-ui/test/pluginRegistryView.test.mjs` - [x] Write a failing static contract for approval payloads, environment/routing identity, per-step Executor, and evidence history. - [x] Prompt for approval reason when real routes require evidence. - [x] Send exact Transition/routing/environment identities for every action. - [x] Show environment, routing fingerprint, approval evidence, and receipt Executor. - [x] Run static tests and production build. ### Task 6: Documentation And Regression **Files:** - Modify: `docs/superpowers/specs/2026-07-10-ai-software-factory-roadmap.md` - Modify: `docs/superpowers/plans/2026-07-11-plugin-executor-routing-approval.md` - [x] Document D8e2d configuration, persistence, compatibility, and remaining adapter boundary. - [x] Run focused Plugin/routing/Outbox/approval tests. - [x] Run generator full regression against the 18 known baseline failures. - [x] Run admin critical tests, frontend static tests, and production build. - [x] Confirm EasyCode and RuoYi UI endpoints return HTTP 200.