feat(coding): compose plugin host lifecycle

This commit is contained in:
2026-08-27 18:02:10 +08:00
parent a92cd904d3
commit a18727ecf8
9 changed files with 985 additions and 34 deletions

View File

@@ -0,0 +1,133 @@
# Task: Implement ML-04 Host routes and lifecycle
## Identity
- Task ID: 20260827-plugin-ml04-host-lifecycle-4e7a2c91
- Mode: Feature
- Branch: codex/20260827-plugin-ml04-host-lifecycle-4e7a2c91-plugin-ml04-host-lifecycle
- Worktree: D:\Datas\OthersProjects\makelore-plugin-ml04-host-lifecycle-4e7a2c91
- Base commit: a92cd904d33d4fa0b7c2413188186852a39eb6d4
- Owner: codex-ml04
- Status: Ready for integration
## Scope
- Implement ML-04 from exact coordinator frontier
`a92cd904d33d4fa0b7c2413188186852a39eb6d4`.
- Own only Main composition, Host project-plugin routes, lifecycle wiring, the
explicitly listed focused tests, and this task record:
`electron/api/routes/coding-plugins.ts`, `electron/api/context.ts`,
`electron/api/route-handlers.ts`, `electron/api/coding-product-services.ts`,
`electron/api/coding-composition.ts`, `electron/api/server.ts` only when
exact registration requires it, and `electron/main/index.ts` shutdown wiring
only.
- Do not modify ML-01 project-service source/tests, preview session code,
Renderer/ML-05, or P1 paths without an explicit coordinator transfer.
## Intent And Constraints
- Follow implementation spec §7.5 and §10.210.3, ML-04 in the ticket graph,
and detailed design §§8.18.4, 8.88.9, 12, and 13.
- Compose the package registry, project plugin service, policy client, capability
registry, and Data Service adapter in Main; expose only bounded project
projections, never adapter internals, tokens, owner, prices, or raw policy.
- Expose exact GET/PUT `/api/coding/plugins` routes using a local project handle
resolved by `CodingProjectService` to real path and durable identity. Keep Data
Service configuration on existing typed routes and preserve IPC/loopback order.
- Wire enable/disable managed-input revision and adapter deactivation, plus
logout, project transition, identity-change-before-write, shutdown, and
backend-degraded behavior without deleting data.
- Test-first with one final implementation commit whose sole parent is the
exact base. Keep the worktree isolated and do not publish or claim a PR.
## Project Context Loaded
- Concurrent Task Gate passed: `check_project_docs.py` succeeded and
`task_context.py start`/`status --json` match this task ID, owner,
worktree, branch, feature mode, and base commit.
- Read the required entry files, active task record, project positioning/current
state/decision/system/architecture/domain/evidence/reflection/commitment/stale
indexes, MakeLore `AGENTS.md`, implementation spec §7.5 and §10.210.3, ML-04
ticket, and detailed-design host/lifecycle/authority/error sections.
- Same-topic peer scopes are the client coordinator and completed ML-01ML-03
records. ML-03's exact product frontier is `fd891ff3bb87a29381a0a7006fb4618ec4fe144f`,
integrated by the coordinator as `a92cd904d33d4fa0b7c2413188186852a39eb6d4`.
ML-01 owns project-service files; no unresolved semantic conflict exists.
- Integrated project memory is older than this plugin implementation and remains
a last-integrated snapshot; frozen spec, coordinator task record, and exact
frontier control this task. Root `main` remains outside this worktree and is
not modified.
## Plan
1. Inspect the exact ML-03 product seams and existing route/composition/lifecycle
tests without changing files; map the required Host DTO and lifecycle callbacks.
2. Add failing focused tests for exact routes, Main-only authority, composition,
projection/degraded inspect behavior, and lifecycle invalidation/deactivation.
3. Implement the smallest cohesive Host/composition/lifecycle changes within the
exclusive ownership boundary, preserving typed Data Service routes and route
dispatcher ordering.
4. Run owned focused and relevant regressions, typecheck, lint, build as required,
and diff/doc gates; fix only failures within owned scope.
5. Record exact outcome/evidence, run `check_doc_drift.py`, complete task_context,
and return a clean single commit to the coordinator.
## Gate Result
- Planning Gate: Passed on 2026-08-27. No unresolved ownership or semantic
conflict affects ML-04.
## Verification
- Test-first red evidence: the three new focused test files initially failed
because `handleCodingPluginRoutes` and `createCodingProjectPluginService` did
not exist. The first lifecycle composition assertion then exposed an invalid
test premise (durable project identity is immutable); it was corrected to the
supported legacy-identity resolution path before the final green run.
- ML-04 focused plus required Host/lifecycle regressions:
`coding-plugin-routes`, `coding-plugin-composition`,
`coding-plugin-lifecycle`, `coding-product-services`,
`data-service-server-registration`, `coding-core-routes`,
`coding-project-identity`, and `main-quit-lifecycle` — 8 files / 47 tests
passed with one worker.
- Policy/capability/Data Service/Pi/preview regressions — 12 files / 86 passed /
2 staged-runtime-gated skips.
- `corepack pnpm run typecheck` — passed.
- `corepack pnpm run lint:check` — 0 errors and the same 5 pre-existing warnings
in `src/pages/Home/index.tsx` and `src/pages/Makelore/index.tsx`.
- `corepack pnpm run build:vite` — Renderer, Main, Preload, and release utility
builds passed; only existing dynamic-import and chunk-size warnings appeared.
- `git diff --check` — passed before documentation completion.
## Outcome
- Added the exact project-scoped GET/PUT Host routes and registered them in the
shared IPC/loopback dispatcher between coding project and conversation routes.
Requests accept only the local project handle plus the exact enable boolean;
path, durable identity, owner, token, policy, and price cannot be supplied.
- Added a bounded Main project-plugin projection service that resolves the local
handle through `CodingProjectService`, reads durable identity in Main, refreshes
and exactly joins verified policy with fixed package definitions, reports Skill
assignments, sanitizes backend projection, and isolates per-adapter inspect
failures. Existing typed Data Service routes remain the only configuration API.
- Composition now creates the project selection service, policy client, Data
Service adapter, capability registry, and Renderer projection. One
`configureCapabilityRegistry(...)` late-binding seam replaces production
`configureDataService(...)`; parent and child worker materialization receive the
same refresh-before-resolution capability registry.
- Selection changes mark managed resources stale and forget project worker
bindings. Disable invalidates preview and deactivates only the affected adapter;
project transition and identity change deactivate all session adapters, with
identity invalidation/deactivation completing before the atomic write.
Authentication cleanup deactivates the active project adapter. Shutdown
deactivates adapters before subagent/runtime shutdown. Cleanup failures are
isolated and never rewrite selection or delete cloud/local data.
## Follow-ups
- ML-05 may consume `CodingPluginProjectProjection` through the exact Host routes;
it must keep Data Service configuration on `/api/works/data-service/...`.
## Promotion Candidates
- None recorded.