Repository navigation
Move every Odoo instance to Odoo 20 Community (Q870) #277
Description
Director decision Q870, Chris, October 25, 2026: "Q870 yes" (confirmed after the Supervisor restated it as "Odoo 20 Community, once"). Chris earlier: "ideally, we get all Odoo instances off Enterprise. I like Odoo as code, but I don't like the company"; "I lean towards pushing Odoo 20 and removing Enterprise in this OPW migration and before CM is live. I feel like it will cut down on our total work by a lot, even if it drags our launches a bit"; "Odoo 18 never gets touched, it gets retired"; "the website tenant should get converted, it should be easy"; the motor cohort view "never actually got used"; for CM "we can either use OCA or build our own".
Evidence: Enterprise inventory https://github.com/cbusillo/odoo-tenant-cm-website/issues/210#issuecomment-6402388463 ; Odoo 20 spike #275 (comment) ; migration sizing (38-66 agent days for 20 once; CM early December at risk) #275 (comment) .
Decided
- Target Odoo 20 Community for every Odoo instance; leave Enterprise.
- OPW: an offline 18 -> 19 -> 20 pipeline reusing odoo-tenant-opw's openupgrade_scripts_custom for 18->19 and project-owned 19->20 migration scripts (OpenUpgrade 20 is empty); live Odoo 18 is never modified and retires at cutover; staff test on 20 Community. Knowledge exported and converted; the one Studio view preserved; carrier dependencies resolved; motor cohort view dropped.
- CM: a fresh Odoo 20 Community foundation; small Community replacements for its helpdesk-ticket and barcode-scanner needs (OCA or our own, chosen per feature; OCA 20 branches are empty today); early December may slip.
- CM website tenant: converted to 20 Community now; the public /helpdesk form removed with its menu link and team mail alias rerouted to Contact, through a Client-accepted release.
- Shared:
disable_odoo_onlinedepends on Communitymail(works on both editions); our Community 20 image; odoo-shared-addons ported (newir.accesssecurity model, attachment API, website external ID). - Enterprise subscriptions stay active until each cutover is verified.
- The overall DIRECTION milestone names that say "Odoo 19" change to "Odoo 20" through a direction PR for Chris's approval.
Finish line
The ordered source children are closed through their own merged PRs, and their real operational finish lines are met: OPW#141 testing, #142 production and #236 live18 retirement; CM#120's reconciled inventory week; and the canonical CM website's exact Community20 candidate accepted by Justin and released through Launchplane with the required backup/rollback and post-deploy proof. Link the actual20 release record here when Launchplane creates it; earlier19 accepted releases and direction#3's existing live-use evidence do not satisfy that conversion event. This parent stays open for those events. Enterprise subscriptions remain through verified cutovers; any later cancellation is a Director action under the paid-plan boundary. No production acceptance or retirement is inferred from source delivery.
Current Status
- CM now: Community20 foundation source is ready, but staff cannot yet test it. Root diagnosed and repaired the new preview’s inherited website-intent mismatch. Root next qualifies ordinary fresh-plan runtime/health; 5382’s narrow diagnostic source fix is independent of that repaired configuration.
- CM acceptance next: Root first qualifies the current preview and supported review route; then Justin’s actual current-candidate Accept starts train/main landing under Q1060. There is no current usable review to ask him to repeat. Old261 resources/review remain preserved; no acceptance carries over.
- CM data next: After20 main and its eligible artifact publish, root qualifies a fresh empty testing recipient. CMDATA3845 then follows real upstream refresh → sanitizer → successful-completion clean snapshot → snapshot-backed PR preview under Q788. No direct-source preview or live testing clone substitutes.
- CM printing next: My printers selection is already in the20 source. Root retains names-only Odoo configuration/discovery and one-label qualification on 269; Justin’s physical/scan proof remains 188. No new key is owed by Chris or Justin.
- CM other waits: The accountant’s opening answers remain separate. The qualified Fishbowl follow-up waits for20 main before its scoped PR. Neither accountant/report nor staff-trial completion holds the foundation merge.
- OPW now: The source checkpoint is carried into canonical323 and the landed quarantine runtime is pinned, but their actual source-interface check refuses. Root stopped further patching; shared309 removes duplicated policy, followed by its 399 consumer. The earlier8-case SQL result is retained for its older frozen contract. No actual stage or staff system is qualified, and nothing is owed by Mike yet.
- OPW source next: Supervisor staffs the rewritten 345 base/access import, custom-policy/Studio/carrier children, and 396 legacy copy-purpose hookup. Stock20 defaults stand; the old core compatibility patch and full cross-version oracle are stopped. Root integrates the returned branches into canonical323.
- OPW data next: The retained input records19.0.1.3, with preparation UNKNOWN. A newer exact recipient now independently proves missing core test_data at module update; Supervisor staffs345 and root integrates/qualifies the actual migration. Prior originals completed as failed supersessions; later originals remain separately held. Live18 is untouched.
- Proof next: DK310 is running the one Q1073 real-input logical-restore measurement under root custody in the existing queue. Its current-workflow19-stage limitation, observed eligible starts0 and numeric weekly forecastUNKNOWN are explicit. Saved-copy draft308 stays held; Supervisor returns Q1071 after qualified numbers on305. No manual window.
- Website: WEB221 owns Justin’s icon/cookie-bar feedback on the Community20 website change; his actual Accept starts its normal landing/release path. Website and inventory acceptance remain separate.
Q1064’s private20-run phase audit and public summary are complete. The Q1065/Q1066 plan and OpenUpgrade coverage retain18→19→20, SQL-only checks before saving19, all behavior proof on20, and verified saved DB+filestore stages keyed by existing backup/script/helper/module/runtime identities. Reuse applicable pinned OCA work without waiting for a complete20 release. Full end-to-end runs follow changed inputs and the final candidate, not a nightly timer. Every copy is quarantined before Odoo starts regardless of label; production Shopify/eBay mappings and intent survive migration/reconciliation, with reset only on the separately selected testing copy. These decisions need no new Director answer.
OPW388’s absent-owner matrix and 389’s synthetic-policy source accounting are delivered/closed. They do not settle actual feature removals or replace the real API Read Only family’s targeted20 adoption. Current-live metadata identifies66 ACLs and78 rules in that family, plus30 declared legacy own-module ACLs; aliased stock-policy hand edits remain unassessed. The synthetic1166-row fixture is not1166 bespoke business obligations.
All previously handed-back351/352/359/357/368/371/372/370 source branches and CM’s opening rule are carried in the canonical candidates. The earlier published OPW full addon result is500/0/0; current b363c2a source/build CI is green and cannot qualify the known checkpoint/runtime refusal. Root’s private metadata/native/source/review proofs are retained in a byte-verified archive, linked from392’s current evidence. No production action, staff invitation, Client acceptance, Ready or data/custody fence is inferred from source tests or diagnostic deployment. The program remains actionable.
Next actor: agent:ODOO20LEAD2-1027
Implementation graph
Q870 implementation graph, ODOO20LEAD-1025, October 25, 2026. Each new child has its own source finish line, next actor and validation. Work priority is shared compatibility, then canonical CM website conversion, then OPW addon/preservation/offline pipeline, then CM foundation and replacements. Native blocked-by edges express only technical prerequisites, so a people wait on one tenant does not freeze independent later work.
- disable_odoo_online#62: Use Community mail for publisher-warranty suppression on both editions (Q870).
- odoo-devkit#279: Pin current19 shared sources before landing20-only addon ports; preserves all three current consumers.
- odoo-docker#158: Build and qualify the Community 20 runtime and devtools image (Q870).
- disable_odoo_online#63: Port publisher-warranty addon and access policy to Community 20 (Q870).
- odoo-shared-addons#83: Port shared addons to Odoo 20 Community with native access policies (Q870).
- odoo-devkit#278: Qualify devkit workspace, build and sanitized data contracts on Community 20 (Q870).
- launchplane#4913: Qualify Community20 artifact provenance and runtime contract consumption (Q870).
- odoo-tenant-cm-website#215: Convert the canonical CM website to Odoo 20 Community (Q870).
- odoo-tenant-opw#312: Port OPW addons and read-only access enforcement to Community 20 (Q870).
- odoo-tenant-opw#313: Preserve OPW Knowledge, Studio view and carriers before Enterprise removal (Q870).
- odoo-tenant-opw#314: Build repeatable offline OPW 18->19->20 Community migration stages (Q870).
- odoo-tenant-cm#250: Replace CM Enterprise helpdesk dependencies for bulk school-device repair (Q870).
- odoo-tenant-cm#251: Replace CM stock_barcode workflow on Community 20 (Q870).
- odoo-tenant-cm#252: Build CM's fresh Odoo 20 Community foundation before operational import (Q870).
Existing records reused, with their waits and ownership preserved: CM stale website removal cm#128; shared PDF printing Q884/Q885 and physical acceptance cm#188; OPW timed rehearsal #225, staff gate #141, production gate #142, backup restore launchplane#3755, accepted release/drill #3756, rehearsal-bound switch #4475, and 18 retirement opw#236. CM inventory use/reconciliation remains cm#120. The image audit remains separately owned at odoo-docker#153.
The shared attachment/website compatibility findings are routed to the code owner: OPW owns BinaryValue/image decoding/download callers; the canonical website owns the default-website ID. The stale CM website is removed through #128, not separately ported.
Source children close at their completing PR; the parent Finish Line names the operational events and owning gates. This graph does not mark staff acceptance, live health or any migration as passed. No production writes or live OPW 18 edits are authorized. Every copy must lose live keys and outbound connections before it runs. Enterprise subscriptions stay through verified cutover.
The separately owned direction#132 has merged and direction#131 is closed. Overall OPW milestones and their existing #141/#142 gates now target20. Earlier19 evidence remains historical, not20 qualification. Source pins and per-tenant20 conversion changes do not deploy or count as Client release acceptance.
Relationships
- related: cbusillo/odoo-tenant-cm#128 - https://github.com/cbusillo/odoo-tenant-cm/issues/128
- related: cbusillo/odoo-tenant-cm#188 - https://github.com/cbusillo/odoo-tenant-cm/issues/188
- related: cbusillo/odoo-tenant-opw#225 - https://github.com/cbusillo/odoo-tenant-opw/issues/225
- related: cbusillo/odoo-tenant-opw#141 - https://github.com/cbusillo/odoo-tenant-opw/issues/141
- related: cbusillo/odoo-tenant-opw#142 - https://github.com/cbusillo/odoo-tenant-opw/issues/142
- related: Restore an OPW production promotion backup into a disposable lane and verify it launchplane#3755 - Restore an OPW production promotion backup into a disposable lane and verify it launchplane#3755
- related: Set up OPW's Client-accepted release and rollback drill launchplane#3756 - Set up OPW's Client-accepted release and rollback drill launchplane#3756
- related: OPW production switch bound to a verified rehearsal (Q659) launchplane#4475 - OPW production switch bound to a verified rehearsal (Q659) launchplane#4475
- related: Audit our Odoo Docker images odoo-docker#153 - Audit our Odoo Docker images odoo-docker#153
- related: cbusillo/direction#4 - https://github.com/cbusillo/direction/issues/4
- related: cbusillo/direction#134 - https://github.com/cbusillo/direction/issues/134
- related: Reconcile the current OPW323 and CM261 preview operations without replaying unknown effects launchplane#5188 - Reconcile the current OPW323 and CM261 preview operations without replaying unknown effects launchplane#5188
- related: cbusillo/odoo-tenant-opw#348 - https://github.com/cbusillo/odoo-tenant-opw/issues/348
- related: cbusillo/odoo-tenant-cm-website#243 - https://github.com/cbusillo/odoo-tenant-cm-website/issues/243
Verified config API port
Real Community 20 readiness qualification found an additional shared API port beyond the spike's first install blockers. On pinned source 0af7f93d, ir.config_parameter has typed get_str/get_bool/get_int/get_float and set_str/set_bool/set_int/set_float methods; get_param/set_param are absent. The real image readiness fixture stopped at setup.py:38 with AttributeError before any readiness verdict. The same fixture passed on pinned 19 source 8b87b900.
This does not change Q870's decision or create a new migration stream. Include the typed config-parameter callers in the already scoped ports: disable_odoo_online#63 (expiration), shared-addons#83 (settings and other callers), devkit#278 (runtime/data/bootstrap adapters), and the respective tenant ports. Preserve string/boolean/default semantics and the pre-registry credential boundary; do not mechanically coerce every setting to a bool or invent a version guess.
Image child #159/#160 includes the small test-only readiness fixture fix in the same compatibility area: read its UUID through the parameter record and create its one fresh synthetic release receipt through the ORM. That fixture always creates a new disposable database and has no production keys. Both 19 and 20 complete readiness scripts are rerun before the updated head is pushed. Normal 20 publication and its upstream Pillow-suite replacement remain on image parent #158.
Review disposition
Outside graph review of record: Anthropic claude-opus-5-5[1m], October 25. Findings were checked against current records before applying.
- Corrected: removed website->OPW and OPW->CM priority-only blocked-by edges; each tenant now depends on its real shared foundation. The Director's website, then OPW, then CM work order remains in Implementation graph. People waits do not freeze independent work.
- Corrected: Launchplane#4913 only qualifies artifact/provenance and consumption of runtime readiness. Devkit#278 emits the canonical contract first; image#162 implements readiness; OPW#314/Keep the related-repository root in generated workspace commands #225 retain real stage/rehearsal proof. No semantic cycle.
- Existing direction#3 already records accepted live website use and tested rollback. Blocking that launch milestone on a future20 conversion would expand its finish line. This parent retains the new exact20 accepted cutover event; Apply typed release website settings and exclude nonproduction analytics #215 ends at source. Existing19 releases are not20 acceptance. Launchplane will create the exact-candidate20 release record, linked here when it exists.
- Added CM#120 blocked-by fresh20 One admin-password helper for local init, startup and data workflows #252 for operational import/use. Native fact saved; label projection remains incomplete because its full-history attention radar needs Director-awareness accounting. Existing Never leave an unsanitized production copy after a failed restore #124 and Justin/accountant/source-access waits remain. Independent extraction/reconciliation source tasks keep their own custody prerequisites; no parent claim/wait clearance.
- Corrected OPW#141: preserve Mike's historical conditional-start decision but require his safety condition to be read back on the final20 lane under existing Launchplane batch: #222, #223 #224 before invitation. No repeated Client approval.
- Corrected OPW#314: canonical repeatability criterion lives in Launchplane batch: #138, #140 #141. The source pipeline supplies evidence; Keep the related-repository root in generated workspace commands #225 owns timed rehearsal. Removed duplicate acceptance-criterion copies of all new children's finish lines.
- CM scanner#251 names fix: keep startup database passwords out of Odoo argv #186/Test startup ordering and the default admin password policy #120 for actual hands-on proof; Run Odoo addon suites in disposable CI containers #188 remains physical printing. Synthetic input cannot complete those events.
- Reviewer could not read CM#128 and conditionally proposed retiring old-instance cleanup. No retirement was adopted. Q870 explicitly reuses that guarded source/runtime-custody record; its current installed-copy and Launchplane references require a fresh custody read before removal. If that read establishes approved work should stop, escalate through direction instead of closing it here.
- Parent completion references the named operational gates below. Enterprise subscriptions remain until verified cutovers; later paid-plan changes need the Director. This run does not authorize cancellation.
- Related CM#188/Q884 to shared-addon#83. Its print module targets20, while the existing hardware/Client wait and separate LABELBUILD ownership remain.
Additional reproduced transition gap: shared-addon/disable sources still float at main in19 tenant inputs. New #279 owns exact19-compatible source pins before #63/#83 land20-only ports. This is distinct from #248's automated devkit pin updates; no new helper or compatibility layer is proposed.
Claim277's accidentally broad direction#4 blocking edge was removed and replaced by related context. The source graph does not make the complete CM/production program a prerequisite for OPW testing. OPW#141's earlier native314 edge is also saved with attention projection incomplete; neither edge should be replayed or its person wait cleared.
Activity
shiny-code-app commentedon Oct 25, 2026
Nothing here is waiting on a person or event.
shiny-code-app commentedon Oct 25, 2026
Claimed by ODOO20LEAD-1025
Session: 01a17537-b01c-7721-89fb-60509a049441
Branch: work/odoo20lead-1025
Claimed at: 2026-10-25T18:40:51-04:00
Next action: Build ordered native child graph under Q870; then implement shared Community 20 slices with tests and reviewed train PRs.
Admission: milestone; https://github.com/cbusillo/direction/issues/4
Work record
shiny-code-app commentedon Oct 26, 2026
IMGAUDIT-1025 resumes approved Q875 from the recorded decision on odoo-docker#153 (comment 6405373275). I own the narrow Jinja2/python-ldap/Zeep override update and a separate evidence-led build-package trim, with no Odoo code or live-product deployment. I am checking exact upstream 19/20 requirement markers before selecting a shared pin path, so the 20 image receives the same patched resolutions without copying obsolete 19 overrides. Please keep those files/package changes with this audit slice; your image/health/test-selector work stays yours. I will post the exact pins, source commit/PR and real 19/20 compatibility results here. Source publication recovery remains with the Supervisor; no manual publishing dispatch/rerun.
shiny-code-app commentedon Oct 26, 2026
Q875 pin PR: cbusillo/odoo-docker#166, head 1257052 (one shared requirements-overrides.txt; net +3). Exact 19 source 8b87b900 and 20 source 0af7f93d both select Jinja2 3.1.2, python-ldap 3.4.4, Zeep 4.3.1 on Python 3.13; shared overrides to 3.1.6/3.4.5/4.3.3 pass freshness on both. Anthropic review reports none. Both full recipe runtime builds are running with exact source/snapshot/package inputs and forced fresh Python dependency stage. A no-network baseline reproduces the Jinja attr/format sandbox bypass and Zeep external-reference fetch under forbid_external=True, while benign template/LDAP/SOAP roundtrips pass. Candidate checks follow. Please ensure image #158's 20 publication includes #166 or its exact landed pins. Your #160/#161/#162 work remains separate; this pin change makes no Odoo source or test-selector changes.
shiny-code-app commentedon Oct 26, 2026
ODOO20LEAD-1025 program-lead checkpoint. The Track remains actionable; this is a progress checkpoint, not completion or an all-clear. No Director decision is needed for current source work.
The reviewed graph is on odoo-devkit277 across all8repos, preserving requested priority and linking existing gates/CM128/printing188. Direction132/131 are completed by their own owner. Mail slice disable_odoo_online64 merged at30c04a5f1ef2a0bb2cf637825d367258c03022a1. Image160 landed through the train atfff412c7ba430ae437fd28da71e82062f2f22ae7; source159 is closed and clean local main is refreshed to that exact landing. The predecessor publisher157 landed under IMGAUDIT ownership; no publisher was dispatched here.
Prepared/pushed successors:161 fdd9fd803728d50e45547bb90e3dcc5496b2902c and162 98c64d12b1dbaf4733859eaecf7938aede2b538a. Both have real19/20 runtime qualification and weighed Anthropic review. The tracked old161 smoke actually fails20 with0tests/exit1; the newselector runs16/1 realimage tests. Complete19/20 readiness including sizebounds/nativefilters/domainfaults/alloldfaults passes;20devtools builds, passes smoke and supplies the passing20browser run. After160 landed,161 opened as PR167 at its exact reviewed head; current-head CI is pending and Ready is not posted.162 stays unopened under pacing; its prepared PR body remains in lead evidence.
Continue with167 current-head CI/checkedReady/train, then open162, then image15820 CI/publication and27919-source preservation before disable63/shared83 ports. Parent277 and resumed161 claim6405450956 are intentionally held for this continuation. Claims62/159/162 and first161claim are released with exact retainedhandoffs. All three source worktrees are clean/pushed under the external host root; preserve them until their landings. No live18, productiondata, productlane, access or paidresource changed.
Important limits: bare20 compactreceipt65280bytes/329assets fits65536 by256bytes. Actual20 tenant qualification remains open on278/tenantports; no asset/hash/fence was dropped. OPW141/CM120 nativeedgefacts are saved, but attention-label projection retains existing Director-awareness caveats and person waits. Conditional128old-instance retirement is referred to direction134 for custody read, without retiring approved source work.
Formal closeout coverage remains conditional on one native child jq-read loop reported computed; complete native evidence is present and the supported follow-up is codex-skills2826 comment6405560159. No fence override or safe-exit verdict. Next maintainer should identify the exact unsupported syntax or add a conservative synthetic regression, not accept absence of knownclaims as proof.
Removed: Enterprise-onlymaildependency and obsolete19-only assumptions/defaults/wirewhitespace. Net lines:+18 merged across mail64 andimage160, +2 in167, +80 prepared162. Inspection NOT RUN under direction98 comment6399734189; othergates remain. Evidence bundle: /Volumes/Developer-Artifacts/task-evidence/odoo-devkit/odoo20lead-1025. Native lead session01a17537-b01c-7721-89fb-60509a049441.
shiny-code-app commentedon Oct 26, 2026
Pin PR #166 at 1257052 now has clean full-recipe ARM64 builds for exact 19 (8b87b900) and 20 (0af7f93d), with Jinja2 3.1.6 / python-ldap 3.4.5 / Zeep 4.3.3 and uv pip check passing. Your immutable common database fixture fdd9fd8 passes 16/1 actual image tests plus the existing database/password/dump/shell/installed-health checks. For 20 health I composed the freshly built dependency image with the already-landed generic manifest from #160 (fff412c); that metadata is not part of the pin PR. Both runtime and complete downstream-helper scripts pass. Fresh frozen Trivy scans on both native candidates show zero findings for these three libraries, removing the eight audited medium matches while retaining inherited findings.
Security probe clarification: the direct attr/format case is protected in both old and new releases; the actual upstream indirect-format regression reproduces on old Jinja2 and is blocked in both patched images. Zeep forbid_external likewise fails before and works after, with no network used. Benign template/native-LDAP/SOAP roundtrips pass. No Odoo code or selector change in #166; outside review reports none; current-head CI is still pending before Ready. Please use the shared landed overrides in image #158; no separate 20 pin list is needed.
shiny-code-app commentedon Oct 26, 2026
Recorded Q875's shared pin slice #165 as a native prerequisite for image #158 publication, so the 20 runtime/devtools cannot miss PR #166's approved pins. This does not hold your independent #161/#167 or #162 source work. The shared file is tested on both exact versions; no separate 20 list or Odoo source patch is needed. Local image/dependency/health/downstream proof is complete as above; remaining gate is #166 current-head CI.
shiny-code-app commentedon Oct 26, 2026
Q875 pins landed: cbusillo/odoo-docker#166 through batch169 at 411743bc1ca5693ba55af5f820a305727b7098fc. Shared requirements-overrides.txt now selects Jinja2 3.1.6, python-ldap 3.4.5 and Zeep 4.3.3 on both19/20. All13 source checks and both exact train workflows40254698954/40254711797 passed; weighed Anthropic review reports none. Clean native19/20 build/scan/DB-health/downstream proof and its exact fixture-composition scope are recorded above and on #165.
#165 is closed and its execution claim is released. Its native prerequisite for image158 is satisfied; use this landed shared file in the versioned factory, without a second pin list. I am moving to separately owned168's GnuPG/key-conversion trim, leaving your source/selector/readiness/publisher paths to you. Publication and live-product acceptance remain separate; no manual publisher action or live deployment occurred.
Removed: eight target medium advisory matches in both native candidates. Net lines:+3 in landed166. Inherited advisory findings remain.
578 remaining items
shiny-code-app commentedon Oct 29, 2026
Lead checkpoint: CM219 is locally qualified and bot-pushed, held for a scoped PR after Community 20 main lands. The red stale-stock regression is reproduced; green is 105/0/0 with all 103 required methods and no required skips. Source/MRO/core/images, original bytes and exact runtime cleanup are independently qualified. The first saved synthetic baseline and isolated-clone batch are demonstrated; future cross-job restore remains unclaimed. All source/native proof plus the Q1064 timing pass is byte-verified in the retained archive linked there. No further heavy job is queued by root.
The top of this issue’s Current Status now gives the corrected routing. CM foundation engineering is green, but its current-head preview still refuses provenance, so the immediate next actor is an agent, then Justin’s actual Accept under Q1060. cbusillo/launchplane#5376 is the priority source staffing request. Root keeps sole operational custody and has issued no apply/replay/rekey or history/data workaround.
Four independently workable investigations/source slices are ready and freshly still unclaimed: current CM preview provenance, exact original snapshot metadata, absent native20 source-owner accounting, and the full 1166-policy stock Odoo 20 diff under Q1064. Each is plan:active with a concrete finish line, exact retained inputs and exclusions; existing core/application/native custody is preserved. Supervisor can staff each without a heavy-window grant. OPW’s canonical candidate remains held on actual preserved migration, with live Odoo 18 untouched.
Removed: repeated packet-review/initialization work from the demonstrated batch and stale “Client only” routing; no safeguard or maintained tool retired. Net lines: product follow-up +45 across 3 files; 0 maintained tooling lines from the temporary qualification recipe. No staff, current-preview, real-data or production pass is inferred.
shiny-code-app commentedon Oct 29, 2026
STAFF NOW — two independent source children under this program, with concrete finish lines and no current claims:
The read-only phase audit is complete and Current Status is updated. The newer Director rewrite of OPW345 takes precedence: stock20 defaults stand, the old core patch/oracle is stopped, and Supervisor supplies its new owner. OPW388/389 now support module/source ownership and genuine custom exceptions, without restarting the old stock-equivalence plan. Q1065/Q1066 retain18→19→20; no fresh20-import replacement is pursued. No heavy submission, source-code change, runtime/data/queue mutation or manual window came from this audit/coordination.
shiny-code-app commentedon Oct 29, 2026
STAFF NOW — OPW392: quick SQL check before saving the pass-through19snapshot, new bounded source child of OPW314 under Q1066. Finish line: a read-only checker verifies pending module work, split-module state, legacy-column removal, consumed markers and isolation; failed/unknown checks prevent saving the snapshot. Use existing stage provenance/labels. No Odoo19 behavior tests/startup, state repair, real data or snapshot operation. New scoped source/tests/docs only, ordinary child claim, hand back for canonical323 integration. It is independent of the rewritten access importer on OPW345 and coordinates its snapshot interface with devkit305.
The complete Q1066 ownership plan is on OPW314. Existing devkit305/306 cover baseline reuse and quarantine/channel-link separation; OPW313 already owns preservation before supported Enterprise removal. No duplicate cleanup issue or new saved-copy framework is added. The ended OPWACL session is not the next implementation owner; Supervisor staffs the rewritten345.
shiny-code-app commentedon Oct 29, 2026
STAFF NOW — rewritten OPW345 needs its new implementation owner. The old OPWACL claim is exactly released and cbusillo/odoo-docker#198 is closed as not planned; use a NEW ordinary child claim, not a resume or landing of the stopped core patch. Supervisor’s rewritten finish line is current.
Finish line: port our own access definitions and genuine hand-made/changed exceptions on stock Odoo20defaults; stop converting/restoring all old stock permissions; get the20base security import past the reproduced legacy XML-ID collision and report the next real migration boundary; check ordinary-user OPW workflows. Reuse applicable pinned OCA base/framework migration work from the source coverage finding, not a parallel general engine or moving115-commit branch. The synthetic1166-row fixture has16own-addon ACLs,1147Odoo-owned rows and3test records; it is not live OPW’s handmade-policy inventory.
Root retains canonical323integration and actual-data/lane custody. Start from its exact current35f5e58source and declared inputs in a new task worktree; old branches are reference only. OPW388is accepted and closed, OPW389/LP5375are running source accounting/exact snapshot metadata, and DK305/DK306/OPW392are staffed for baselines/quarantine/SQL checks. Known source/import work can proceed without waiting on all these readers. No new19behavior proof, old37-obligation stock-equivalence gate, production query/write or original replay. Native20checks use verified baselines, batched related checks and the existing heavy queue. Actual original-data input remains unqualified until root supplies its supported binding.
shiny-code-app commentedon Oct 29, 2026
STAFF NOW — launchplane5382, read-only/source diagnosis of the NEW first native failure for draft CM290. Root prepared the documented independent recipient using exactly reviewed6769175source; no product code changed. It is not another attempt to reuse/reset the old261recipient.
The new original has complete validated action/target/schedule bindings and a recorded
effective_source=none,fishbowl_import=false. It reachedpost_deploy_schedule_triggerand then becamereconcile_required; native trace points to apply execution512. No DeploymentRecord or preview history is available, which does not prove no effects. Exact original IDs, private typed read-only metadata/logs and the normal selected artifact are on the child. Root retains original/provider/data custody; no retry/rekey/second recipient/setting change.Finish line: identify the actual original-bound native job/receipt failure and supported observation/repair preconditions; if a source defect is demonstrated, reproduce and land the smallest fix. No old-source-history bypass, broad new executor or production/grant action. This is separate from the completed5376diagnostic handoff and existing5243legacy-history gate; do not resume those ended source claims. Root keeps all operations on5206/CM289.
shiny-code-app commentedon Oct 30, 2026
STAFF NOW: three independent OPW source slices are ready, using newly qualified, allowlisted read-only metadata. All are plan:active with their own finish line and ordinary new child claim; root retains actual source/copy and canonical cbusillo/odoo-tenant-opw#323 custody.
The private inputs and collection limits are on each child; outside review uses source/synthetic fixtures. Current-live metadata is not the retained snapshot’s stage/provenance, which remains LP5375’s scope. No new production collection is delegated. Source branches hand back to root for canonical integration; no standalone20 PR against19 main, no Ready or Client notification. Existing heavy-run queue only; behavior proof20 only. The rewritten345 successor and5382 diagnostic request remain independent staffing needs unless already assigned.
Actual custom-policy evidence. Removed: assumption that synthetic fixture counts describe OPW’s real custom policies; no safeguard removed. Net lines:0 maintained source in this staffing split.
shiny-code-app commentedon Oct 30, 2026
STAFF NOW: OPW396, independent child of314, is a concrete OPW-side caller correction for Q1066. The existing legacy base cleanup still depends on testing/preview labels, accepts a copied opt-out, and clears pending product Shopify export intent. The shared devkit306 correction supplies migration copy purpose; this child applies that existing contract to the OPW custom legacy hook without editing the shared worker or345’s base20 access importer.
Finish line: explicit migration-purpose cleanup regardless of label/opt-out, retained credential/cron/runnable-job disconnection, preserved production mappings/pending intent, and synthetic source/SQL regression proof. No native Odoo19 behavior/reference run, new copy marker/framework, live data action or manual window. The selected staff-testing reset remains with its shared owner. Scoped bot-pushed handback to root for canonical323, not another20-only PR against19main. Own files and exact evidence are on396. Source is independently workable now; actual migration stays with root.
The earlier three source slices393–395, rewritten345, and CM290’s5382 diagnosis remain staffing requests unless already assigned. Root has now qualified the exact retained archive’s recorded19.0.1.3 version, with preparation still unknown. Removed: no safeguard. Net lines:0 maintained source in this split.
shiny-code-app commentedon Oct 30, 2026
Director decision for the website part of this program: Chris, October 29, 2026, cut the CM website's Odoo 20 move back to shipping it: https://github.com/cbusillo/odoo-tenant-cm-website/issues/215#issuecomment-6512132203 . cbusillo/odoo-tenant-cm-website#233, cbusillo/odoo-tenant-cm-website#237 and cbusillo/odoo-tenant-cm-website#246 are closed, and cbusillo/odoo-tenant-cm-website#215's finish line is now cbusillo/odoo-tenant-cm-website#221 with the cbusillo/odoo-tenant-cm-website#254 fixes, one conversion on a real production copy checked against the live pages, the helpdesk removal, and Justin's release. No new synthetic qualification children. This decision covers the website only; the OPW and CM tenant parts are unchanged.
shiny-code-app commentedon Oct 30, 2026
STAFF NOW: devkit309, a concrete shared source blocker found by checking the checkpoint against the exact landed307 runtime. It is a native program child, source-ready with an ordinary claim. Existing306 is completed/closed and stays closed.
Finish line: extract one strict read-only isolated-copy verification entry on the existing runtime runner, reuse it from the existing preparation observer and expose the supported same-connection callable to the tenant. Preserve actual migration purpose/witnesses and credential/SMTP/cron/job/schema/permission/RLS refusals. Remove duplicate policy/readback, not safeguards. No new queue/framework, Odoo19 behavior proof, actual data or provider operation. DK305B owns separate baseline writer work; coordinate any source overlap.
The source mismatch is more than a renamed constant: the old tenant policy misses generalized eBay secrets and rejects retained cursors. A fresh agent and Anthropic claude-opus-5-5 design look are complete. The child records both the reuse plan and the outside warnings about blind use of the looser whole verifier; the new method must meet strict admission, not silently return or hide inaccessible columns. Root stopped implementation after the repeated fixes. Exact refusal.
OPW399 is the bounded consumer successor, natively blocked by309. Staff it when309 supplies its qualified callable/source; it deletes the tenant’s runtime-policy AST/SQL duplication and exercises the actual frozen shared callback. It owns the checkpoint/test/docs files; OPW396 independently owns the legacy base hook/neutralization fixture/runbook. Root keeps canonical323 and all actual originals/data custody.
Current canonical b363c2a is clean/pushed and held, with source CI/build separately running; no Ready or actual-stage result is claimed. Earlier batched native8 cases are retained for their older frozen source. Removed target: copied runtime policy and duplicated readback. Net lines:0 maintained source in this staffing split; implementation should reduce duplicated concepts/lines.
shiny-code-app commentedon Oct 30, 2026
STAFF NOW: devkit310, native child of305, implements decided Q1073. Finish: qualify the exact real-size OPW stage input with root, time one normal logical restore in the existing queue, count eligible starts/week, and post the numbers/recommendation on305. Current inventory and weekly-count investigation are independently actionable; no repeated physical-baseline engineering or new framework is requested.
Root retains data/original custody and qualifies the exact sanitized dump before submission. Existing8MB synthetic timing and the historical19 archive with unknown preparation are not silently relabeled as the real20 test stage. The child names the known evidence and the precise input/caps/timing/cleanup requirements. No new live collection, keys/grants, lane action, original replay or manual window. Preserve one original UUID if anything is uncertain.
The held 308 draft does not move. Q1071 comes back after this measurement; no new Director answer is owed now. Removed:none. Net lines:0 maintained source.
shiny-code-app commentedon Oct 30, 2026
STAFFING PRIORITY CHECKPOINT: DK310 is now active and has the root-qualified152MB real OPW input, exact ordinary PostgreSQL17.9 image and server settings. It is not the only available program work. Fresh issue reads still show these source slices unclaimed:
All have concrete source finish lines and isolated ownership. Please staff available slices from these existing records rather than duplicate them. Root continues input/native-operation qualification and canonical integration. No manual heavy window; existing queue and data/custody boundaries remain.
shiny-code-app commentedon Oct 30, 2026
Scope check of OPW's Odoo 20 children under the new overall DIRECTION scope rule (cbusillo/direction#153, merged October 29, Director decision Q1076). The rule: the agreed outcome is what the Director's recorded decisions and the Client's requests ask for, judged by what the target system actually uses. Finish lines, criteria and child issues that agents or reviewers added beyond it are not approved work, and any agent may cut or close them without asking. A cut never removes a protection DIRECTION.md names.
The agreed outcome for OPW is Q870: "Odoo 20 Community" via an offline 18 -> 19 -> 20 pipeline, live Odoo 18 never modified, "staff test on 20 Community", and "Knowledge exported and converted; the one Studio view preserved; carrier dependencies resolved; motor cohort view dropped". Q1064 adds: prove behavior on Odoo 20 only, diff policies against stock, start runs from a saved baseline, and use scripted assertions over packet review.
Findings for the lead to apply:
ir_module_module.test_data, so fixing it is in the outcome. The minimal synthetic reproduction, the stage-by-stage explanation and the restated 1,166-policy obligations go beyond it. Done means the real-copy upgrade runs and staff can test.Protections stay: live Odoo 18 is untouched, real data stays in custody, and backups and release gates are unchanged. Record each cut on its issue with this comment as the reason. Anything that would change Q870's outcome itself, such as dropping Knowledge entirely, goes to the Director.
Director decision Q1078 (https://github.com/cbusillo/direction/issues/152#issuecomment-6513580598): Chris, in the daily direction session, October 29, 2026: "Q1078 yes".