Skip to content

Qualify the Fishbowl preview source without stable testing - #5836

Merged
5 commits merged into
mainfrom
work/lp5830-independent-fishbowl-preview
Nov 9, 2026
Merged

5 commits merged into
mainfrom
work/lp5830-independent-fishbowl-preview

Conversation

@shiny-code-app

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

Copy link
Copy Markdown
Contributor

A normal preview plan with the optional Fishbowl source was refused at addon_state, because qualifying the source read the stable testing runtime and database. Stable testing's addon state has nothing to do with this preview, and that lane is separately protected. This makes the preview qualify from its own recorded build and Launchplane's managed records.

Refs #5830

Change

inputs.fishbowl_source no longer selects, connects to or reads stable testing. The plan now requires:

  • The manifest is exactly the one Launchplane recorded for that verified build of this product. A build that names a pull request must be this preview's pull request.
  • Its file inventory includes the Fishbowl importer and the shared payload producer.
  • The existing managed binding, version, shared_safe and read_only_source classification and read-only allowance all still apply.
  • host, user, db, port and ssl_verify come from testing's managed records. Each must be set, and if both the lane record and a typed override set it they must agree. No producer default is copied. Blank, secret-backed, retired or conflicting values refuse. An explicit false for ssl_verify stays allowed, per Q1327.

The plan fingerprint covers the managed authority snapshot, the complete manifest, binding, allowance and settings, and apply rechecks it. Person-use, needed-copy, production-separation and original checks are on the separate admission paths and are unchanged.

The file inventory check previously accepted only release builds, which would have refused every PR preview. This route alone now accepts preview-purpose builds. Release classification keeps its release-only default.

Verification

  • Failing first: the plan refused with source_unqualified when the stable runtime was unavailable. It now succeeds with stable testing unreachable.
  • Negative controls cover a missing, unrecorded, changed or foreign manifest, another pull request's build, a missing producer, an incomplete inventory, unknown or invalid settings, conflicting or blank overrides, an unsafe binding, a missing allowance and a rotated version.
  • tests.test_odoo_preview_import_source, tests.test_odoo_runtime_source_grants, tests.test_odoo_runtime_source_prerequisites, tests.test_odoo_import_diagnostics, tests.test_release_compatibility, tests.test_odoo_preview_apply_execution, tests.test_unrecorded_preview_refresh and tests.test_odoo_host_source_grants: 213 tests passed.
  • ruff and mypy pass on the changed files.
  • Inspection: native PyCharm returned UNKNOWN with native_python_support_plugin_unavailable (Headless inspection workers: confirm project interpreter and Pydantic plugin so type findings stop being noise codex-skills#3363), with no findings reported.

Not proved here: whether the live testing records hold all five settings, and whether CM363's recorded manifest carries a complete inventory. Root's next normal plan will show either as a bounded source_unqualified stage. No lane was read for this change.

Removed: the stable-testing read from preview qualification, the preview mode of read_source_consumers and its container code, and the tests of that mode.

Net lines: +131 (+398/-267). Product code is +59, docs +4, tests +68. The growth is the settings agreement check and its negative controls.

@shiny-code-app

shiny-code-app Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

Review result: weighed
Head: 5cc16f5

Outside review: OpenAI, read-only, one round. The helper did not report the exact model.

Finding 2 (blank override silently falls back to the managed value): acted on. Every present literal, including an empty one, must now agree with the managed value. A test covers it.

Finding 1 (a runtime-backed override is refused): declined. OdooConfigParameterOverride only accepts runtime_environment for three keys, and none are Fishbowl settings, so this cannot occur. Refusing any non-literal value stays the fail-closed behavior.

Duplication: the small setting check is kept here because the existing override resolvers serve a different shape of input. Its agreement comparison reuses parameter_agreement.

The review found no missing fingerprint input, no weakening of the grants path, no new manifest bypass, and no bypass of the person-use, needed-copy, production-separation or original paths.

Inspection: native PyCharm returned UNKNOWN with native_python_support_plugin_unavailable (cbusillo/codex-skills#3363), with no findings reported.

@shiny-code-app

shiny-code-app Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

Ready for the merge train

Head: 5cc16f5

@shiny-code-app

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

Copy link
Copy Markdown
Contributor Author

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

Launchplane landed this pull request through protected batch PR #5838.

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

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.

0 participants