Some checks failed
continuous-integration/drone/push Build is failing
The 0.8.x->1.0.0 discourse recipe family switched app bitnami->official AND db pgvector/pg17->discourse/postgres:pg18. That db-family change is a structural break (bitnami cluster lacks the discourse role; pg_upgrade preserves-not-creates roles) with NO supported in-place path. The dynamic base resolver's step-back kept selecting 0.8.1+3.5.0 (newest tag below the unbumped 1.0.0+3.5.3 label) and the upgrade tier red'd twice on this unsupported path (drone #1165, #1171 — classified stale-test both times; recipe verified green on the real official->official path). Adds UPGRADE_BASE_FLOOR (phase basefloor) to resolve_upgrade_base: a recipe_meta declaration naming the first post-break published version. Resolution stays fully dynamic (this is NOT the removed sec2.G static pin): the floor only EXCLUDES below-floor candidates (canonical, step-back, no-canonical fallback); when no >=floor predecessor exists the tier records a DECLARED skip, never a silent pass. main-tip fallback unaffected (post-break by construction). tests/discourse/recipe_meta.py declares UPGRADE_BASE_FLOOR = 1.0.0+3.5.3 with the full rationale. Unit-verified: head=1.0.0+3.5.3 -> declared skip (was: 0.8.1+3.5.0 wrong pick); post-release head=2026.x -> base 1.0.0+3.5.3 (the real migration path). No assertion weakened - below-floor in-place upgrades were never supported coverage.