# R9 activation-control validation Release: `concresca-full-root-20260928-r9`. ## Observed cause and reproduction The supplied server report says `permission_repair_required`, `canActivate: true` and `packageComplete: true`, with 1,046 directories and two files to tighten. Those are permission-repair prerequisites, not a completed activation. Rendering unchanged r8 PHP output in Chromium reproduces a disabled activation button after that allowed response until the separate consent checkbox changes. In the fixture, checking the box enables it. This does NOT establish whether the user's checkbox was invisible, unchecked, unusable, or affected by another browser condition. R9 removes this dependency instead of assuming a cause not recorded by the report. ## Control changes tested R9 starts with an enabled Activate installed release button, runs a read-only check automatically, then exposes a separate Confirm activation control. Cancel sends no start request. Successful optional precheck also leaves activation enabled. A blocked precheck shows the reason without starting a write. The page shows temporary request/job busy reasons and reads saved state after a lost start response rather than silently retrying a mutation. Older jobs preserve their actual release identity, while their real lock remains authoritative. Five Chromium interaction scenarios passed with the real PHP-generated HTML and controlled API responses: desktop keyboard confirmation, mobile touch confirmation, optional precheck then activation, blocked prerequisite, and uncertain start followed by saved-job readback. Both desktop/mobile cases also cancel and re-open confirmation. Permission counts use the supplied report's 1,046-directory/two-file condition. Browser fixtures do not make live requests. ## Suites The selected main regression suites pass 328 Python tests: 238 installer/worker/ readiness/diagnostic tests, 20 owned-root tests, 39 receipt-publishing tests and 31 private-environment tests. PHP function suites pass 90 assertions; synthetic JavaScript suites pass 111 assertions. Counts describe executions of these named suites, not a claim that every historical test script was run. The repair Python suite includes native local Apache/PHP HTTPS authorization, CSRF, redaction and actual detached-backend tests. Its unprivileged permission fixture applies real chmod to its own temporary source/configuration, then correctly stops at the deliberately absent private environment. The controlled fixture neither installs production scheduling nor certifies live workflows. An extra historical entry point initially failed one case because its full- receipt fixture omitted the now-required healthy-worker observation. It has been synchronized with the already-packaged corrected receipt tests: positive cases explicitly mock a healthy worker; negative cases require the same receipt to fail readiness when the worker is absent or retrying. All 24 cases now pass. No runtime check was relaxed. This additional entry point substantially repeats cases in the repair suite and is not added to the 328-test headline count. ## Boundaries Canonical HTTPS browser navigation was rejected by the container's administrator policy before page load. Chromium rendering/click tests therefore use local `set_content` with PHP-emitted HTML and fixture responses. They are not browser login/navigation or live-network tests. Native Apache/PHP HTTP tests are separate. LiteSpeed, Passenger, production MySQL, the user's cron and production workflow acceptance have NOT been established here. No server credentials were used and no authenticated operation was performed on the user's live host. The final ZIP is extracted into a new directory and all named suites are rerun, along with full-file manifest verification and Python/PHP syntax checks. The external `Concresca-FULL-ROOT-r9-validation.json` records the final archive hash, size, exact suite results and limitations without a self-referential digest.