# Upload without activation (WJ-025) The packaged-application harness supports `--upload-only`. It runs an unchanged copy of `tools/remote backend upload -y --artifact ...` and its helper scripts with an isolated configuration. A local SSH adapter captures the actual tar stream, requires upload mode and refuses a second transfer. No network connection is made. The real server-side `Deployment.upload()` consumes that stream and verifies/stages the candidate manifest and executable. The fixture verifies that upload leaves the existing JVM process, selected release and deployed manifest unchanged, without introducing maintenance or a pending deployment. It then calls the real service-control `restart` function using the existing local JVM adapter. The new process must still select A, pass HTTP/Flow readiness and retain the saved work entry. B's deliberately failing migration must never have run. Mail is trapped and push is disabled. The report is `build/reports/production/upload-activation.json`. Host SSH and systemd behavior remain covered separately; this scenario checks the command, transported artifact, upload algorithm, restart selection and real application. `productionAcceptance` includes WJ-025 by default. For targeted local diagnosis, `-PproductionTags=@WJ-025` selects only this scenario; `tools/ci-jvm` passes no such override and retains the complete production acceptance selection. Verification: the standalone upload probe passed, followed by the targeted WJ-025 Gradle/Cucumber run on 0.1.85-SNAPSHOT: all four steps passed in 38.148 seconds. The initial Cucumber run caught the unescaped slash in the `tools/remote` step expression; escaping it fixed the binding. Completion version: 0.1.86-SNAPSHOT. Full CI verification is pending.