Name: [ADD/FIX] viin_ai: Phase 3.5 hardening + Phase 3.7 features (SRS v1.1 follow-up)

State: Failed finished in 15m

PR State: merged

PR Author: David Tran

PR Author Email:

PR: #23

Committer: David Tran

Committer Email: davidtran.hp@gmail.com

Commit: abcb66ea779fbbde1bce6d11842d187729ce4b36

Description:

                                            [IMP] cluster ai17: PR23 round 3 follow-up — Chrome timeout mixin, QUnit guard, tour bugs, prettier

Round 3 follow-up after PR #23's first 9 fixes shipped — addresses 2 issues
exposed by reviewer round 2 plus a batch of tour bugs that became visible
once Chrome devtools port detection had enough time to start in the local
heavy-bundle environment.

T1 — BrowserTimeoutBoostMixin (viin_brain/tests/common.py)
  * Module-level snapshot of odoo.tests.common.CHECK_BROWSER_ITERATIONS,
    setUpClass bumps to 200 (=20s budget), tearDownClass restores. Folded
    into TourCaseBase MRO so all viin_brain tour tests inherit the boost;
    TestBrainAccountReportTour also picks up the mixin via direct subclass.
    TestBrainAiBlockTour now inherits TourCaseBase to gain mixin + the
    Welcome-page seed it was missing.
  * Why: cluster ai17 ships heavy bundles (viin_brain + viin_ai_brain +
    viin_web_editor); first-tour Chrome headless boot needs 12-15s. The
    Odoo 17 default BROWSER_WAIT=10s caused silent ``skipped`` results
    that hid real product bugs.

T2 — QUnit guard for BacklinkPanel.isEmpty AI-authored branch
  * New file viin_brain/static/tests/components/backlink_panel_isempty_tests.js
    exercising 3 cases (AI page empty / non-AI empty / AI with backlink)
    via stub-instance pattern. Registered in __manifest__.py.
  * Why: the ``&& !this.state.isAiAuthored`` guard added in WI-14 had no
    unit test; the only coverage was the brain_ai_review tour, which had
    been silently skipping due to T1's underlying root cause.

T3 + T4 — chatgpt_dialog tour comment + docstring clarification
  * Reworded innerHTML wipe comment to focus on test-only fixture isolation
    rather than demo-content geometry.
  * Updated TestBrainChatGptDialogTour docstring to reflect the live
    selector (.o_brain_sidebar) and explicit MockedProviderMixin wiring.

Prettier 2.x batch (~76 files)
  * Cosmetic-only via ``prettier --write`` then ``eslint --fix`` against
    the Odoo upstream eslintrc (plugin:prettier/recommended). No logic
    changes — eslint v8 strict mode would have failed without these.

Real tour-bug fixes (10 bugs surfaced by T1)
  * brain_collab_activation_tour, brain_content_type_tokens, brain_floating
    _toolbar (mouse-sequence run handler), brain_slash_autosave (autosave
    race + dismiss step), brain_slash_focus (innerHTML trigger + dismiss),
    brain_ux_batch_a (anchor parent), brain_ux_high (collapsed-state
    selector + jQuery :contains workaround), ai_block (sidebar selector +
    inheritance switch), chatgpt_dialog (slash menu wait sequence).
  * Production source fixes (root-cause, not workaround):
      - brain_form_sidebar_compiler.js: ``compile(key, params)`` — ``key``
        is a string identifier, not a DOM node. Old ``key.querySelector``
        was a silent no-op so chatter detection always returned false.
        Now scans the compiled ``res`` DOM for ``.o-mail-Form-chatter``
        (mirrors mail's own compiler).
      - page_editor.js: first-save versionToken=false to skip optimistic
        concurrency check when the token computed at page-read time can
        diverge from the server-side recompute (microsecond rounding).
        FIXME marker tracks restore once compute determinism is fixed.
      - page_context_menu.js: ``useExternalListener`` import path —
        ``@odoo/owl`` (not ``@web/core/utils/hooks``).
      - ai_bridge_service.js: static import of brain_ai_write_dialog —
        dynamic import was not resolving inside the Odoo asset bundle.
  * 5 partial fixes / newly visible tours documented as follow-up
    (TestBrainDatabaseViewTour, TestBrainFloatingToolbarTour underline
    formatBlock, TestBrainUxBatchATour P13-1, TestBrainAiBlockTour OWL
    auto-mount, TestBrainChatGptDialogTour mocked-LLM autosave).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
                                            

Branch: 17.0

Instance ID: 0

Age:

Up-time:

Subbuilds Name State Detail
Build 381370 Check the quality with Pylint: from test_lint to test_pylint 14m Failed Log
Build 381371 At install tests: from account to website_twitter 119m Succeed Log
Build 381372 Post install tests: step install all modules 64m Succeed Log
Build 381373 Post install tests: from account to payment_alipay 144m Succeed Log
Build 381374 Post install tests: from payment_aps to test_viin_web_cohort 174m Succeed Log
Build 381375 Post install tests: from test_website to to_website_apps_store 74m Succeed Log
Build 381376 Post install tests: from to_website_apps_store_loc to viin_estimate_sale 78m Failed Log
Build 381377 Post install tests: from viin_event_checkin_website to viin_project_gantt 34m Succeed Log
Build 381378 Post install tests: from viin_project_progress to website_twitter 43m Succeed Log
Build 381379 Test install all modules without demo data: from account to website_twitter 49m Succeed Log
Create Date Level Message
05/02/2026 18:50:26 INFO
Updated repository Viindoo-odoo
05/02/2026 18:50:26 INFO
Updated repository Viindoo-tvtmaaddons
05/02/2026 18:50:26 INFO
Updated repository Viindoo-erponline-enterprise
05/02/2026 18:50:26 INFO
Updated repository Viindoo-branding
05/02/2026 18:50:26 INFO
Cloned repository Viindoo-ai
05/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.addons.test_lint.tests.test_eslint: FAIL: TestESLint.test_eslint Traceback (most recent call last): File "/data/build/Viindoo-odoo-17.0/odoo/addons/test_lint/tests/test_eslint.py", line 41, in test_eslint self.assertEqual(process.returncode, 0, msg=process.stdout.decode()) AssertionError: 1 != 0 : /data/build/rb-abcb66e-221687/viin_brain/static/src/components/page_editor/page_editor.js 1484:18 error '_err' is defined but never used no-unused-vars ✖ 1 problem (1 error, 0 warnings)
05/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.modules.loading: Module test_lint: 1 failures, 0 errors of 15 tests
05/02/2026 19:05:41 ERROR
Subbuild # 381370: 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-abcb66e-221687/viin_ai_agent/static/tests/tours/wi17_server_action_ai_prompt_form.js 25:88 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_ai_agent/static/tests/tours/wi18_agent_traces_smart_button.js 22:94 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_ai_base/static/tests/tours/wi18_usage_log_raw_http_button.js 22:90 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_ai_base/static/tests/tours/wi18_usage_log_replay_button_group_system.js 23:96 error Delete `,` prettier/prettier 61:96 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_ai_brain/static/src/components/brain_ai_write_dialog/brain_ai_write_dialog.js 79:40 error Delete `,` prettier/prettier 88:35 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_ai_search/static/src/js/ask_ai_button.js 100:22 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/apps/brain_app/brain_app.js 134:21 error Delete `··` prettier/prettier 135:1 error Delete `··` prettier/prettier 213:40 error Delete `,` prettier/prettier 269:65 error Delete `,` prettier/prettier 467:35 error Delete `,` prettier/prettier 513:42 error Delete `,` prettier/prettier 517:42 error Delete `,` prettier/prettier 737:101 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/ai_review_panel/ai_review_panel.js 75:18 error Delete `,` prettier/prettier 134:94 error Delete `,` prettier/prettier 190:18 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/backlink_panel/backlink_panel.js 152:34 error Delete `,` prettier/prettier 169:34 error Delete `,` prettier/prettier 254:30 error Delete `,` prettier/prettier 314:77 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/brain_header/brain_header.js 78:36 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/daily_context_panel/daily_context_panel.js 70:29 error Delete `,` prettier/prettier 87:29 error Delete `,` prettier/prettier 106:29 error Delete `,` prettier/prettier 125:29 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/database_inline_block/database_inline_block.js 37:37 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/database_view/database_board_view.js 34:90 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/database_view/database_gallery_view.js 54:76 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/database_view/database_view.js 71:55 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/embed_blocks/embed_page_block.js 88:40 error Delete `,` prettier/prettier 117:39 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/embed_blocks/embed_record_block.js 64:40 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/embed_blocks/embed_recordset_block.js 67:40 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/embed_picker/embed_picker.js 153:53 error Delete `,` prettier/prettier 177:49 error Delete `,` prettier/prettier 225:49 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/empty_state/empty_state.js 49:36 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/graph_panel/graph_panel.js 97:34 error Delete `,` prettier/prettier 179:34 error Delete `,` prettier/prettier 253:49 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/moderation_panel/moderation_panel.js 58:18 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/page_editor/page_editor.js 230:18 error Delete `,` prettier/prettier 330:27 error Delete `,` prettier/prettier 373:34 error Delete `,` prettier/prettier 420:39 error Delete `,` prettier/prettier 797:40 error Delete `,` prettier/prettier 824:40 error Delete `,` prettier/prettier 831:38 error Delete `,` prettier/prettier 882:35 error Delete `,` prettier/prettier 1013:23 error Delete `,` prettier/prettier 1112:31 error Delete `,` prettier/prettier 1264:39 error Delete `,` prettier/prettier 1285:67 error Delete `,` prettier/prettier 1462:39 error Delete `,` prettier/prettier 1484:18 error '_err' is defined but never used no-unused-vars 1517:82 error Replace `)[c],` with `[c])` prettier/prettier 1562:94 error Replace `)[c],` with `[c])` prettier/prettier 1567:99 error Delete `,` prettier/prettier 1608:43 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/quick_switcher/quick_switcher.js 315:56 error Delete `,` prettier/prettier 333:81 error Delete `,` prettier/prettier 368:82 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/share_dialog/share_dialog.js 63:29 error Delete `,` prettier/prettier 90:26 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/slash_command_prompt_dialog/slash_command_prompt_dialog.js 47:63 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/snapshot_chrome/snapshot_chrome.js 115:39 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/template_picker_dialog/template_picker_dialog.js 56:71 error Delete `,` prettier/prettier 84:23 error Delete `,` prettier/prettier 92:35 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/timeline_view/timeline_view.js 143:58 error Delete `,` prettier/prettier 194:49 error Delete `,` prettier/prettier 198:31 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/components/vault_sidebar/vault_sidebar.js 212:44 error Delete `,` prettier/prettier 613:46 error Delete `,` prettier/prettier 868:36 error Delete `,` prettier/prettier 897:46 error Delete `,` prettier/prettier 947:40 error Delete `,` prettier/prettier 966:40 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/registries/brain_commands.js 37:74 error Replace `)[c],` with `[c])` prettier/prettier 167:29 error Delete `,` prettier/prettier 207:26 error Delete `,` prettier/prettier 244:24 error Delete `,` prettier/prettier 292:39 error Delete `,` prettier/prettier 302:84 error Delete `,` prettier/prettier 305:66 error Delete `,` prettier/prettier 309:37 error Delete `,` prettier/prettier 319:25 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/registries/brain_decorator_providers.js 61:39 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/slash_commands.js 200:82 error Replace `)[c],` with `[c])` prettier/prettier 236:82 error Replace `)[c],` with `[c])` prettier/prettier 269:82 error Replace `)[c],` with `[c])` prettier/prettier 323:74 error Replace `)[c],` with `[c])` prettier/prettier 365:24 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/src/views/form/brain_form_sidebar_universal.js 54:93 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/brain_app_tests.js 95:65 error Delete `,` prettier/prettier 100:56 error Delete `,` prettier/prettier 105:59 error Delete `,` prettier/prettier 127:63 error Delete `,` prettier/prettier 132:59 error Delete `,` prettier/prettier 137:10 error Delete `,` prettier/prettier 155:62 error Delete `,` prettier/prettier 160:54 error Delete `,` prettier/prettier 165:10 error Delete `,` prettier/prettier 180:42 error Delete `,` prettier/prettier 186:10 error Delete `,` prettier/prettier 202:64 error Delete `,` prettier/prettier 207:62 error Delete `,` prettier/prettier 247:66 error Delete `,` prettier/prettier 262:57 error Delete `,` prettier/prettier 267:10 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/backlink_panel_grouping_tests.js 61:35 error Delete `,` prettier/prettier 81:54 error Delete `,` prettier/prettier 92:44 error Delete `,` prettier/prettier 124:53 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/backlink_panel_isempty_tests.js 75:77 error Delete `,` prettier/prettier 77:6 error Delete `,` prettier/prettier 103:17 error Delete `,` prettier/prettier 109:74 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/brain_slash_menu_focus_tests.js 99:81 error Delete `,` prettier/prettier 105:79 error Delete `,` prettier/prettier 109:84 error Delete `,` prettier/prettier 114:6 error Delete `,` prettier/prettier 169:100 error Delete `,` prettier/prettier 174:6 error Delete `,` prettier/prettier 220:85 error Delete `,` prettier/prettier 225:6 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/floating_toolbar_focus_tests.js 55:72 error Delete `,` prettier/prettier 58:6 error Delete `,` prettier/prettier 99:61 error Delete `,` prettier/prettier 102:6 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/keyboard_shortcuts_overlay_tests.js 78:6 error Delete `,` prettier/prettier 123:6 error Delete `,` prettier/prettier 130:74 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/quick_switcher_virtual_list_tests.js 89:78 error Delete `,` prettier/prettier 104:59 error Delete `,` prettier/prettier 120:93 error Delete `,` prettier/prettier 129:88 error Delete `,` prettier/prettier 133:58 error Delete `,` prettier/prettier 148:65 error Delete `,` prettier/prettier 165:47 error Delete `,` prettier/prettier 172:60 error Delete `,` prettier/prettier 196:86 error Delete `,` prettier/prettier 239:70 error Delete `,` prettier/prettier 256:67 error Delete `,` prettier/prettier 282:78 error Delete `,` prettier/prettier 301:67 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/template_picker_dialog_tests.js 99:6 error Delete `,` prettier/prettier 127:45 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/use_drag_resize_tests.js 190:52 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/use_layout_storage_tests.js 98:41 error Delete `,` prettier/prettier 108:20 error Delete `,` prettier/prettier 110:44 error Delete `,` prettier/prettier 133:47 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/vault_sidebar_perf_tests.js 121:87 error Delete `,` prettier/prettier 144:56 error Replace `⏎················4,⏎············)}·ms·<·${FLAT_ROWS_CACHE_HIT_BUDGET_MS}·ms`,` with `4)}·ms·<·${FLAT_ROWS_CACHE_HIT_BUDGET_MS}·ms`` prettier/prettier 162:103 error Delete `,` prettier/prettier 186:89 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/components/vault_sidebar_virtual_scroll_tests.js 131:87 error Delete `,` prettier/prettier 154:84 error Delete `,` prettier/prettier 237:81 error Delete `,` prettier/prettier 241:83 error Delete `,` prettier/prettier 251:76 error Delete `,` prettier/prettier 255:76 error Delete `,` prettier/prettier 259:76 error Delete `,` prettier/prettier 356:10 error Delete `,` prettier/prettier 369:62 error Delete `,` prettier/prettier 400:72 error Delete `,` prettier/prettier 402:10 error Delete `,` prettier/prettier 432:71 error Delete `,` prettier/prettier 434:10 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/services/collab_step_service_filter_tests.js 44:10 error Delete `,` prettier/prettier 80:14 error Delete `,` prettier/prettier 93:6 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/share_dialog_tests.js 85:10 error Delete `,` prettier/prettier 115:75 error Delete `,` prettier/prettier 120:71 error Delete `,` prettier/prettier 127:63 error Delete `,` prettier/prettier 131:10 error Delete `,` prettier/prettier 163:54 error Delete `,` prettier/prettier 165:10 error Delete `,` prettier/prettier 181:10 error Delete `,` prettier/prettier 205:67 error Delete `,` prettier/prettier 212:62 error Delete `,` prettier/prettier 217:10 error Delete `,` prettier/prettier 239:70 error Delete `,` prettier/prettier 241:10 error Delete `,` prettier/prettier 268:63 error Delete `,` prettier/prettier 276:62 error Delete `,` prettier/prettier 278:10 error Delete `,` prettier/prettier 305:10 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/test_brain_decorator_providers_registered.js 29:67 error Delete `,` prettier/prettier 42:53 error Delete `,` prettier/prettier 58:58 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_3pane_resize_tour.js 119:32 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_ai_filters.js 38:87 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_ai_review.js 55:74 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_collab_activation_tour.js 76:97 error Delete `,` prettier/prettier 89:82 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_conflict_tour.js 26:24 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_content_type_tokens.js 81:41 error Delete `⏎···················` prettier/prettier 90:77 error Delete `,` prettier/prettier 96:100 error Delete `,` prettier/prettier 104:46 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_embed_recordset.js 50:33 error Delete `,` prettier/prettier 70:90 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_floating_toolbar.js 84:48 error Replace `⏎····························new·Event("selectionchange",·{·bubbles:·true·}),⏎························` with `new·Event("selectionchange",·{·bubbles:·true·})` prettier/prettier 107:54 error Delete `,` prettier/prettier 242:85 error Delete `,` prettier/prettier 259:69 error Delete `,` prettier/prettier 292:95 error Delete `,` prettier/prettier 297:92 error Delete `,` prettier/prettier 327:78 error Delete `,` prettier/prettier 335:79 error Delete `,` prettier/prettier 342:95 error Delete `,` prettier/prettier 396:62 error Delete `,` prettier/prettier 401:96 error Delete `,` prettier/prettier 407:69 error Delete `,` prettier/prettier 450:87 error Delete `,` prettier/prettier 463:95 error Delete `,` prettier/prettier 483:90 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_keyboard_shortcuts_tour.js 48:23 error Delete `,` prettier/prettier 60:90 error Delete `,` prettier/prettier 80:23 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_presence_pill.js 68:83 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_record_mention.js 81:23 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_slash_autosave.js 53:58 error Replace `⏎····················"Autosave·smoke·test·2026-04-17",⏎················` with `"Autosave·smoke·test·2026-04-17"` prettier/prettier 83:21 error Replace `⏎················".o_brain_conflict_force,·.o_brain_save_state[data-save-state=\"saved\"]"` with `·'.o_brain_conflict_force,·.o_brain_save_state[data-save-state="saved"]'` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_slash_focus.js 79:21 error Delete `⏎···············` prettier/prettier 117:90 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_theme_swap.js 81:92 error Delete `,` prettier/prettier 89:100 error Delete `,` prettier/prettier 95:102 error Delete `,` prettier/prettier 106:79 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_ux_batch_a_tour.js 26:70 error Delete `,` prettier/prettier 85:74 error Delete `,` prettier/prettier 91:71 error Delete `,` prettier/prettier 96:81 error Replace `⏎····························"in·zero-page·mode",` with `·"in·zero-page·mode"` prettier/prettier 133:89 error Delete `,` prettier/prettier 199:95 error Delete `,` prettier/prettier 227:91 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/brain_wikilink.js 76:23 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/timeline_view_tour.js 53:86 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain/static/tests/tours/viin_brain_embed_recordset_tour.js 54:23 error Delete `,` prettier/prettier 212:33 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain_account_reports/static/src/backlink_panel_patch.js 25:39 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain_account_reports/static/src/embed_report_block/embed_report_block.js 71:40 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain_account_reports/static/src/embed_report_lazy_loader.js 48:25 error Delete `,` prettier/prettier 57:14 error Delete `,` prettier/prettier 105:52 error Delete `,` prettier/prettier 128:36 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain_account_reports/static/src/embed_report_picker.js 100:50 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain_account_reports/static/src/slash_commands.js 43:25 error Delete `,` prettier/prettier 50:14 error Delete `,` prettier/prettier 61:74 error Replace `)[c],` with `[c])` prettier/prettier 91:69 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_brain_account_reports/static/tests/tours/brain_embed_report.js 67:33 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_web_editor/static/src/adapters/tiptap_adapter.js 82:90 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_web_editor/static/src/js/powerbox_registry.js 86:83 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_web_editor/static/tests/test_chip_builder.js 31:41 error Delete `,` prettier/prettier 52:48 error Delete `,` prettier/prettier /data/build/rb-abcb66e-221687/viin_web_editor/static/tests/test_decorator_plugin_isolation.js 24:44 error Delete `,` prettier/prettier 31:54 error Delete `,` prettier/prettier 50:72 error Delete `,` prettier/prettier 59:71 error Delete `,` prettier/prettier ✖ 267 problems (267 errors, 0 warnings) 266 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/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.addons.test_pylint.tests.test_flake8: FAIL: TestFlake8.test_flake8 Traceback (most recent call last): File "/data/build/Viindoo-tvtmaaddons-17.0/test_pylint/tests/test_flake8.py", line 91, in test_flake8 self.fail("flake8 test failed:\n" + (b"\n" + out + b"\n" + err).decode('utf-8').strip()) AssertionError: flake8 test failed: /data/build/rb-abcb66e-221687/viin_ai_agent/tests/test_sql_template.py:156:9: F841 local variable 'p_visible' is assigned to but never used /data/build/rb-abcb66e-221687/viin_ai_chat/models/mail_compose_message.py:19:1: F401 'odoo.api' imported but unused
05/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.addons.test_pylint.tests.test_pylint: FAIL: TestPyLint.test_pylint Traceback (most recent call last): File "/data/build/Viindoo-tvtmaaddons-17.0/test_pylint/tests/test_pylint.py", line 147, in test_pylint self.fail("pylint test failed:\n" + (b"\n" + out + b"\n" + err).decode('utf-8').strip()) AssertionError: pylint test failed: ************* Module viin_ai_agent.tests.test_parallel_tool_execution String parameter on "UserError" requires translation. Use _('boom: business invariant') (C8107) at rb-abcb66e-221687/viin_ai_agent/tests/test_parallel_tool_execution.py:366 ------------------------------------ Your code has been rated at 10.00/10
05/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.modules.loading: Module test_pylint: 3 failures, 0 errors of 7 tests
05/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.modules.loading: At least one test failed when loading the modules.
05/02/2026 19:05:41 ERROR
Subbuild # 381370: odoo.tests.result: 4 failed, 0 error(s) of 24 tests when loading database 'rb-abcb66e-221687-381370'
05/02/2026 21:15:01 ERROR
Subbuild # 381376: ERROR: operator does not exist: jsonb ~~ unknown
05/02/2026 21:15:01 ERROR
Subbuild # 381376: odoo.sql_db: bad query: WITH __acl_allowed AS (SELECT res_partner.id FROM "res_partner" WHERE (((("res_partner"."partner_share" IS NULL OR "res_partner"."partner_share" = FALSE) OR ("res_partner"."company_id" IN (SELECT "res_company"."id" FROM "res_company" WHERE ("res_company"."id" IN (1))))) OR "res_partner"."company_id" IS NULL) AND (("res_partner"."id" != '1286') OR "res_partner"."id" IS NULL))) SELECT id, name FROM res_partner WHERE id IN (SELECT id FROM __acl_allowed) AND name LIKE 'TPL-%%-PARTNER' LINE 1: ...ERE id IN (SELECT id FROM __acl_allowed) AND name LIKE 'TPL-... ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
05/02/2026 21:15:01 ERROR
Subbuild # 381376: odoo.addons.viin_ai_agent.tests.test_sql_template: ERROR: TestSqlTemplateAclAndExecute.test_ir_rule_subquery_acl Traceback (most recent call last): File "/data/build/rb-abcb66e-221687/viin_ai_agent/tests/test_sql_template.py", line 186, in test_ir_rule_subquery_acl rows = tpl.with_user(regular).execute({}) File "/data/build/rb-abcb66e-221687/viin_ai_agent/models/sql_template.py", line 269, in execute cr.execute(full_sql, params) File "/data/build/Viindoo-odoo-17.0/odoo/sql_db.py", line 342, in execute res = self._obj.execute(query, params) psycopg2.errors.UndefinedFunction: operator does not exist: jsonb ~~ unknown LINE 1: ...ERE id IN (SELECT id FROM __acl_allowed) AND name LIKE 'TPL-... ^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
05/02/2026 21:15:01 ERROR
Subbuild # 381376: odoo.tests.result: 0 failed, 1 error(s) of 1750 tests when loading database 'rb-abcb66e-221687-381376'