[FIX] viin_brain: P11 BrainFormSidebar visible — display:contents wrapper
Pre-existing P11 gap surfaced by P8 round 3 capture verification:
BrainFormSidebar (panel/rail/strip layout modes) was completely
invisible on every bridge form (HR Employee, Sale Order, CRM Lead,
Project Task) despite the bridge XML hook + form_compilers registry
entry + OWL component being correctly wired.
Root cause:
- brain_form_sidebar_compiler.js wraps the OWL component instance in
<div class="o_brain_form_sidebar_container">, then appends that
wrapper alongside the chatter container under
parentEl(o_form_sheet_bg) — exactly matching mail's chatter pattern.
- The wrapper had NO matching CSS rule in brain_form_sidebar.scss.
- Default block layout: width:100% + display:block.
- The form's flex-flow row container (.o_form_view.o_xxl_form_view,
form_controller.scss:1099) treated the wrapper as a full-width row
child, pushing the actual sidebar (.o_brain_form_sidebar.--{panel,
rail,strip}) off the visible flex track. On standard desktop this
put the sidebar below the page content, frequently off-viewport.
Fix:
- Add display:contents on .o_brain_form_sidebar_container so the
wrapper participates in DOM but disappears from layout — its single
child .o_brain_form_sidebar.--{mode} becomes the direct flex sibling
of o_form_sheet_bg and o-mail-Form-chatter, matching the layout
intent expressed in the compiler's append() call.
Verified via Visual Evidence MCP session 20260503-1931-brain-ui-p8r3-batch4
on Sale Order S00007 at 1600x1100 viewport (≥SIZES.XXL → rail mode):
- shot-002: rail collapsed (44px vertical "BRAIN" label) on far right
alongside chatter
- shot-003: rail expanded (320px panel) showing "Brain · Knowledge
linked to this record" header + "PAGES MENTIONING THIS RECORD"
section + empty state + "+ Create a note about this record" CTA —
matches mockup P11 (docs/brain/mockups/v3/screenshots/P11.png)
structurally.
Brain v3 CI: 8 PASS / 1 pre-existing WARN (rule2 contenteditable).
AC-1 hex grep: 0 violations (display:contents is a CSS keyword, no
literals introduced).
Refs PR #27.
| Subbuilds | Name | State | Detail |
|---|---|---|---|
| Build 381470 | Check the quality with Pylint: from test_lint to test_pylint 19m | Failed | Log |
| Build 381471 | At install tests: from account to website_twitter 134m | Succeed | Log |
| Build 381472 | Post install tests: step install all modules 64m | Succeed | Log |
| Build 381473 | Post install tests: from account to payment_alipay 175m | Succeed | Log |
| Build 381474 | Post install tests: from payment_aps to test_viin_web_cohort 205m | Succeed | Log |
| Build 381475 | Post install tests: from test_website to to_website_apps_store 84m | Succeed | Log |
| Build 381476 | Post install tests: from to_website_apps_store_loc to viin_estimate_sale 94m | Succeed | Log |
| Build 381477 | Post install tests: from viin_event_checkin_website to viin_project_gantt 39m | Succeed | Log |
| Build 381478 | Post install tests: from viin_project_progress to website_twitter 53m | Succeed | Log |
| Build 381479 | Test install all modules without demo data: from account to website_twitter 54m | Succeed | Log |
| Create Date | Level | Message |
|---|---|---|
| 05/03/2026 19:45:37 | INFO |
Updated repository Viindoo-odoo
|
| 05/03/2026 19:45:37 | INFO |
Updated repository Viindoo-tvtmaaddons
|
| 05/03/2026 19:45:37 | INFO |
Updated repository Viindoo-erponline-enterprise
|
| 05/03/2026 19:45:37 | INFO |
Updated repository Viindoo-branding
|
| 05/03/2026 19:45:37 | INFO |
Cloned repository Viindoo-ai
|
| 05/03/2026 20:05:35 | ERROR |
Subbuild # 381470:
odoo.addons.test_pylint.tests.test_eslint: FAIL: TestESLint.test_eslint
Traceback (most recent call last):
File "/data/build/Viindoo-tvtmaaddons-17.0/test_pylint/tests/test_eslint.py", line 67, in test_eslint
self.assertEqual(process.returncode, 0, msg=f"""
AssertionError: 1 != 0 :
stdout:
/data/build/rb-536043f-221698/viin_brain/static/tests/seams/v2_extension_seams_tests.js
34:19 error Replace `⏎············mount.classList.contains("d-none"),⏎············"canvas·mount·is·hidden·by·default·(d-none)"⏎········` with `mount.classList.contains("d-none"),·"canvas·mount·is·hidden·by·default·(d-none)"` prettier/prettier
41:13 error Replace `"canvas·mount·declares·t-ref=\"canvasMount\""` with `'canvas·mount·declares·t-ref="canvasMount"'` prettier/prettier
56:16 error Replace `"Seam·4:·ShareDialog·template·has·empty·<t·t-slot=\"collabSection\"/>"` with `'Seam·4:·ShareDialog·template·has·empty·<t·t-slot="collabSection"/>'` prettier/prettier
60:45 error Replace `"exactly·one·<t·t-slot=\"collabSection\"/>·declared"` with `'exactly·one·<t·t-slot="collabSection"/>·declared'` prettier/prettier
83:16 error Replace `"Seam·6:·AI·block·HTML·output·carries·additive·o_brain_ai_state_<status>·class",` with `⏎········"Seam·6:·AI·block·HTML·output·carries·additive·o_brain_ai_state_<status>·class",⏎·······` prettier/prettier
84:1 error Replace `········` with `············` prettier/prettier
85:9 error Insert `····` prettier/prettier
86:1 error Replace `········` with `············` prettier/prettier
87:9 error Insert `····` prettier/prettier
88:1 error Insert `····` prettier/prettier
89:9 error Insert `····` prettier/prettier
90:1 error Insert `····` prettier/prettier
91:1 error Replace `········` with `············` prettier/prettier
92:1 error Insert `····` prettier/prettier
93:1 error Replace `············` with `················` prettier/prettier
94:9 error Insert `····` prettier/prettier
95:1 error Replace `········` with `············` prettier/prettier
96:9 error Insert `····` prettier/prettier
97:1 error Insert `····` prettier/prettier
98:13 error Insert `····` prettier/prettier
99:9 error Insert `····` prettier/prettier
100:1 error Replace `····}` with `········}⏎····` prettier/prettier
/data/build/rb-536043f-221698/viin_brain/static/tests/tours/brain_ux_batch_a_tour.js
126:21 error Insert `⏎···············` prettier/prettier
✖ 23 problems (23 errors, 0 warnings)
23 errors and 0 warnings potentially fixable with the `--fix` option.
Perhaps you might benefit from installing the tooling found at:
https://github.com/odoo/odoo/wiki/Javascript-coding-guidelines#use-a-linter
stderr:
|
| 05/03/2026 20:05:35 | ERROR |
Subbuild # 381470:
odoo.modules.loading: Module test_pylint: 1 failures, 0 errors of 7 tests
|
| 05/03/2026 20:05:35 | ERROR |
Subbuild # 381470:
odoo.modules.loading: At least one test failed when loading the modules.
|
| 05/03/2026 20:05:35 | ERROR |
Subbuild # 381470:
odoo.tests.result: 1 failed, 0 error(s) of 24 tests when loading database 'rb-536043f-221698-381470'
|