Why: deploy needs to choose registered plugins and ship them inside one agent-system, then refuse the release when they are not active.
Evidence: python3 -m unittest tests.test_svc_plugins tests.test_svc_user_help tests.test_svc tests.test_svc_u2 (SELF, 63 passed, 1 skipped). Real compose build and make test-lifecycle are NOT_RUN.
Impact: --with is mutually exclusive with --from rdm and --from release. Existing non-interactive deploys stay without plugins unless plugins= is already recorded. Changing the plugin id set on a live service requires --allow-source-switch.
Refs: .task/feature-svc-plugin-compose.md modules/documents/docs/proposals/2026-10-14-svc-plugin-compose-deploy.md
Co-authored-by: Cursor <cursoragent@cursor.com>
Why: The live check needs the first draft to miss a line the critic can name, then the retry can add it.
Evidence: The prompt does not mention the marker. maxRetries stays 1.
Impact: demo.brief drafts are rejected until they contain 核对标记:P4.
Refs: feature/agent-harness-p4
Co-authored-by: Cursor <cursoragent@cursor.com>
Why: The example plugin needs a bound intent and a plugin-shipped script so the three P4 paths can be checked against a real plugin.
Evidence: TestRepoExamplePluginLoads accepts the plugin, asks 主题是什么?, and keeps the topic slot.
Impact: demo.brief starts the five-step workflow. demo.script stays unbound and needs runtime.workflowScripts.
Refs: feature/agent-harness-p4
Co-authored-by: Cursor <cursoragent@cursor.com>
Details (original message):
Advance backend gitlink (intentgate integration a671d60) with its new deps pins; example plugin intent asset uses the overlay matcher format.