Skip to content

Apply native website noindex from Launchplane production state - #421

Merged
shiny-code-app[bot] merged 4 commits into
mainfrom
work/native-indexing-receiver-1110
Nov 10, 2026
Merged

shiny-code-app[bot] merged 4 commits into
mainfrom
work/native-indexing-receiver-1110

Conversation

@shiny-code-app

@shiny-code-app shiny-code-app Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

A Launchplane production-use transition can now apply native website noindex through the existing post-deploy consumer. The optional website_indexing object contains website_id, exact HTTPS public_origin, and production_use (prelaunch or live). Prelaunch prepends one managed element to website.custom_code_head; live removes only that element. Existing head content, domain, routing, robots choices and unrelated sites are preserved.

The receiver refuses ambiguous or mismatched bindings before writes, requires matching selectors when combined with legacy settings, and keeps native readback inside the existing transaction with a rollback savepoint. plan_website_indexing returns read-only selector/state and before/after SHA-256 evidence; apply emits the verified receipt without committing. The existing legacy settings contract and digest retain their meaning. Live alone does not override independent indexing choices. This makes no sitemap-removal or search-result-removal claim.

Producer integration belongs to cbusillo/launchplane#5914: its strict post-deploy schema needs the optional object, its existing generator must embed this exact committed consumer, and its narrow caller must invoke the dry-run function. This PR adds no target operation or product deployment.

Validation: 244 focused safety/consumer tests, repository Ruff checks and package build pass. Odoo 19 and 20 isolated native HTTP fixtures pass on head 57014bfa9cd4e0f773e81c1b01fa1b45d302ea2b, including combined legacy-write rollback and native parameter-cache readback. Full CI, both native-Odoo CI jobs and both exact-head tenant consumer-build checks pass; artifact SHA/platform evidence is recorded below. One Anthropic review was weighed, with selector and rollback-test findings fixed. Native PyCharm completed: remaining raw RED findings are fixture-only imports and one dynamic cache API inference, individually triaged against native execution in the review receipt.

Removed: duplicated legacy origin parsing and ineffective rollback/wording assertions. Net lines: +422; native transaction, HTTP, isolation and rollback qualification account for most of the addition. No addon or daemon is deployed.

Client test notes

Nothing for the Client to test: this is a source receiver and isolated qualification. Product adoption and operations remain separately owned.

Fixes #420

@shiny-code-app

Copy link
Copy Markdown
Contributor Author

Review result: weighed
Head: 57014bf

Weighed the Anthropic Claude Opus 5.5 review and its bounded follow-up on the changed rollback boundary against current head 57014bf.

Acted on: combined objects must select the same native website/origin before mutation; shared origin parsing preserves legacy acceptance; failed-write tests now let analytics and the legacy parameter change before failing only the head write, then verify rollback. Native noindex assertions check directive tokens and no longer pin error wording. The documentation names the separately owned producer schema/generator/dry-run caller and preserves independent legacy indexing choices.

The strengthened native test reproduced an Odoo 19 stable-cache leak after savepoint rollback. Cache invalidation now happens after unwind where Registry.clear_cache exists. The follow-up caught that API is absent on the pinned Odoo 20 image; the final capability check preserves its already passing native rollback path. Removed the permissive MagicMock registry. Native fixtures, not the unit fake, qualify cache behavior. Final native reruns and current-head CI/build evidence are tracked separately before Ready.

Declined: hostname-only ambiguity matching contradicts native Odoo routing, which matches exact host:port first and only then tries a portless fallback (odoo/odoo 19.0 addons/website/models/website.py, _get_current_website_id). Kept exact managed-prefix removal and refusal of unfamiliar reserved markup to preserve every unmanaged byte; a hypothetical future marker migration is not current work. Kept the second binding/digest read across legacy writes for trustworthy transaction evidence. Did not suppress cache-invalidation failures: an unexpected cleanup failure must remain visible with the original refusal in its exception chain.

Inspection completed on all four changed Python files, with no coverage gaps and helper closure verified. Raw verdict RED is retained: 13 unresolved fixture imports at lines 8–16 are lxml/html, Odoo/tools/HttpCase/tagged, and the consumer plus its five imported symbols, supplied and executed in the native image. The callable warning at consumer line139 derives from the lightweight unit registry lacking that API; the native19 run executes the real method and native20 has no method. Three legacy implicit-None return warnings are preexisting. Launchplane spelling is a product name. No suppression or dependency expansion was added.

Nothing for the Client to test remains appropriate: source receiver and fabricated fixtures only. No state, deployment, restore input or original/copy was changed.

Removed: duplicate origin parsing and ineffective rollback/wording assertions. Net lines: +422, primarily native HTTP, transaction and rollback proof.

@shiny-code-app

Copy link
Copy Markdown
Contributor Author

Reviewed, published receiver contract: 57014bfa9cd4e0f773e81c1b01fa1b45d302ea2b (consumer). Native HTTP qualification passes on pinned Odoo 19 and 20 with byte-identical committed consumer/test sources.

{"instance":"prod","website_indexing":{"website_id":1,"public_origin":"https://site.example.test","production_use":"prelaunch"}}

The existing post-deploy envelope gains this optional sibling of website_settings, with exactly those three fields. State is prelaunch or live, derived only from Launchplane. Combined objects must have matching ID/origin. The legacy accepted settings shape and return digest are unchanged. Existing generator can embed this source; producer owns its strict schema update, read-only plan_website_indexing invocation and all actuation/release integration. Live removes only the managed prefix, not an independent legacy noindex choice.

Dry-run returns website_id, public_origin, production_use, field=custom_code_head, before_sha256, after_sha256, changed, managed_noindex_before and managed_noindex_after. Apply prints website_indexing= JSON adding readback_verified=true and never commits. The caller's successful commit determines durability.

Native qualification: HTTP200 on /contactus; noindex count 0→1→1→0→1 across prelaunch/repeat/live/inverse; existing head script/nofollow retained; robots.txt and canonical unchanged; unrelated host unchanged; ambiguous/mismatched origin refuses; a planted head-write failure rolls back earlier analytics/parameter writes; outer rollback restores protected HTTP. Odoo19 additionally proves cache invalidation after savepoint unwind. No sitemap or search-result removal claim.

Synthetic before head SHA256: 73b5f91f480923ae683e8e3bfae4e371b084cd5aa14cfb299ff99291e3b96533. Protected head SHA256: 06ba0ee10e7d2c3c2d44205e42af391fa58fb9b0e14c5a480b922c8080bc5ed3.

Native19 job 77ecacfa-bf19-469c-af6d-f0ed2d835846; native20 job c556663f-8ca4-404a-a0d4-3552a7be5ea0. Both exit0 and cleanup_complete=true. Logs and exact image/source hashes are retained in the assigned task evidence under native-proof-final.json and native-19-run7/native-20-run7. These qualify native Community website behavior at the retained19 and target20 versions, not additional tenant/Enterprise overrides.

CI and build-only consumer checks for this exact head are pending; PR stays draft until checked Ready/train. No product artifact published or target changed. Producer owner cbusillo/launchplane#5914 can now continue from this receiver shape.

@shiny-code-app

Copy link
Copy Markdown
Contributor Author

Current-head qualification complete for 57014bfa9cd4e0f773e81c1b01fa1b45d302ea2b.

  • Full CI and both live-Odoo/planted-fault jobs green: CI, native19/20 CI. All seven PR checks terminal and passing.
  • CM consumer build, attempt1: tenant 336226b983b66ee4a13a932918320febd70d78ed.
  • OPW consumer build, attempt1: tenant ae59c870b9cba49f92e0b9eea2a3ec873f692e95.
  • Downloaded both consumer-build-check-1 artifacts and verified runtime_commit equals the exact PR head, source_commit equals the tenant above, and platforms is linux/amd64. These are build-only results; no product image was published or deployed.
  • 244 focused local tests, whole-repository Ruff, package build, CLI smoke and both offline locks pass. Final native fixture proof and reviewed contract: Apply native website noindex from Launchplane production state #421 (comment). PyCharm findings remain explicitly triaged in the head-bound weighed review.
  • All twelve admitted task-owned native jobs have cleanup_complete and completed retirement receipts; two failed local image-inspection intakes admitted no remote job. Original evidence and source hashes remain in the assigned task evidence. Full comment radar is clear.

Removed: duplicated origin parsing and ineffective rollback/wording assertions. Net lines: +422.

@shiny-code-app
shiny-code-app Bot marked this pull request as ready for review November 10, 2026 19:01
@shiny-code-app

Copy link
Copy Markdown
Contributor Author

Ready for the merge train

Head: 57014bf

@shiny-code-app

shiny-code-app Bot commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor Author

Launchplane completed the merge-train step for this pull request.

Launchplane finished the merge-train step for this pull request.

Launchplane manages this comment and will update it as the train moves.

shiny-code-app Bot added a commit that referenced this pull request Nov 10, 2026
@shiny-code-app
shiny-code-app Bot merged commit 36dbb81 into main Nov 10, 2026
7 checks passed
@shiny-code-app
shiny-code-app Bot deleted the work/native-indexing-receiver-1110 branch November 10, 2026 19:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support native website noindex from Launchplane production use

0 participants