[ADD] viin_ai_memory_brain: AI memory <-> Brain vault bridge (KG temporal Wave-2)
New auto-install bridge (depends viin_ai_memory + viin_brain). Adds an
optional vault_id Many2one('viin.brain.vault') to viin.ai.memory so a memory
can be scoped to a Brain vault, plus a GLOBAL ir.rule that restricts memory
visibility to vaults the user can access (member or access-group), while
vault-less memories remain governed by the existing per-owner rule.
The vault rule is GLOBAL (AND-combines = restricts), not non-global: a
non-global rule with an OR(vault_id=False, ...) disjunct would OR-union with
the owner rule and leak every vault-less memory across owners. Tests cover
cross-vault, cross-company, owner-only vault-less, and the cross-owner
vault-less regression.
Part of ADR-006 KG temporal Wave-2.
Claude-Session: https://claude.ai/code/session_01JTYAzu8ndxtrQGJeTNa3pf
| Subbuilds | Name | State | Detail |
|---|---|---|---|
| Build 386458 | Check the quality with Pylint: from test_lint to test_pylint 13m | Failed | Log |
| Build 386459 | At install tests: from account to website_twitter 183m | Succeed | Log |
| Build 386460 | Post install tests: step install all modules 94m | Succeed | Log |
| Build 386461 | Post install tests: from account to payment_bidv_viin 204m | Succeed | Log |
| Build 386462 | Post install tests: from payment_buckaroo to to_account_asset 229m | Succeed | Log |
| Build 386463 | Post install tests: from to_account_asset_purchase to viin_account 89m | Succeed | Log |
| Build 386464 | Post install tests: from viin_account_auto_transfer to viin_estimate 94m | Failed | Log |
| Build 386465 | Post install tests: from viin_estimate_approval to viin_project 44m | Succeed | Log |
| Build 386466 | Post install tests: from viin_project_access_timesheet to website_twitter 68m | Succeed | Log |
| Build 386467 | Test install all modules without demo data: from account to website_twitter 63m | Succeed | Log |
| Create Date | Level | Message |
|---|---|---|
| 06/20/2026 10:55:48 | INFO |
Updated repository Viindoo-odoo
|
| 06/20/2026 10:55:48 | INFO |
Updated repository Viindoo-tvtmaaddons
|
| 06/20/2026 10:55:48 | INFO |
Updated repository Viindoo-erponline-enterprise
|
| 06/20/2026 10:55:48 | INFO |
Updated repository Viindoo-branding
|
| 06/20/2026 10:55:48 | INFO |
Cloned repository Viindoo-ai
|
| 06/20/2026 11:10:19 | ERROR |
Subbuild # 386458:
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_brain.tests.test_record_historian
Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.viin_ai_brain" (W8150) at rb-8555493-222272/viin_ai_brain/tests/test_record_historian.py:53
Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.viin_ai_brain" (W8150) at rb-8555493-222272/viin_ai_brain/tests/test_record_historian.py:113
Same Odoo module absolute import. You should use relative import with "." instead of "odoo.addons.viin_ai_brain" (W8150) at rb-8555493-222272/viin_ai_brain/tests/test_record_historian.py:158
------------------------------------
Your code has been rated at 10.00/10
|
| 06/20/2026 11:10:19 | ERROR |
Subbuild # 386458:
odoo.modules.loading: Module test_pylint: 1 failures, 0 errors of 7 tests
|
| 06/20/2026 11:10:19 | ERROR |
Subbuild # 386458:
odoo.modules.loading: At least one test failed when loading the modules.
|
| 06/20/2026 11:10:19 | ERROR |
Subbuild # 386458:
odoo.tests.result: 1 failed, 0 error(s) of 24 tests when loading database 'rb-8555493-222272-386458'
|
| 06/20/2026 14:25:46 | ERROR |
Subbuild # 386464:
odoo.addons.viin_ai_brain.tests.test_brain_tools_kg_temporal: ERROR: TestBrainToolsKgTemporalSignature.test_record_state_as_of_with_args_returns_state_dict
Traceback (most recent call last):
File "/data/build/rb-8555493-222272/viin_ai_brain/tests/test_brain_tools_kg_temporal.py", line 185, in test_record_state_as_of_with_args_returns_state_dict
result = self.tools.tool_brain_record_state_as_of(args, as_of=None)
File "/data/build/rb-8555493-222272/viin_ai_brain/models/brain_tools.py", line 700, in tool_brain_record_state_as_of
state = self._as_of_record(res_model, int(res_id), as_of_val)
File "/data/build/rb-8555493-222272/viin_ai_brain/models/record_historian.py", line 71, in _as_of_record
result = self._as_of_records(model_name, [record_id], timestamp)
File "/data/build/rb-8555493-222272/viin_ai_brain/models/record_historian.py", line 88, in _as_of_records
ts = fields.Datetime.to_datetime(timestamp)
File "/data/build/Viindoo-odoo-17.0/odoo/fields.py", line 2301, in to_datetime
return datetime.strptime(value, DATETIME_FORMAT[:len(value)-2])
File "/usr/lib/python3.10/_strptime.py", line 568, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/usr/lib/python3.10/_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '2026-01-01T00:00:00' does not match format '%Y-%m-%d %H:%M:%S'
|
| 06/20/2026 14:25:46 | ERROR |
Subbuild # 386464:
odoo.addons.viin_ai_brain.tests.test_brain_tools_kg_temporal_run: ERROR: TestBrainToolsKgTemporalRun.test_record_state_as_of_sale_order_run_boundary
Traceback (most recent call last):
File "/data/build/rb-8555493-222272/viin_ai_brain/tests/test_brain_tools_kg_temporal_run.py", line 204, in test_record_state_as_of_sale_order_run_boundary
result = _run_tool_action(
File "/data/build/rb-8555493-222272/viin_ai_brain/tests/test_brain_tools_kg_temporal_run.py", line 37, in _run_tool_action
return action.with_context(**ctx).run()
File "/data/build/Viindoo-odoo-17.0/odoo/addons/base/models/ir_actions.py", line 943, in run
res = runner(run_self, eval_context=eval_context)
File "/data/build/Viindoo-odoo-17.0/addons/website/models/ir_actions_server.py", line 61, in _run_action_code_multi
res = super(ServerAction, self)._run_action_code_multi(eval_context)
File "/data/build/Viindoo-odoo-17.0/odoo/addons/base/models/ir_actions.py", line 775, in _run_action_code_multi
safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True, filename=str(self)) # nocopy allows to return 'action'
File "/data/build/Viindoo-odoo-17.0/odoo/tools/safe_eval.py", line 408, in safe_eval
return unsafe_eval(c, globals_dict, locals_dict)
File "ir.actions.server(1355,)", line 1, in <module>
File "/data/build/rb-8555493-222272/viin_ai_brain/models/brain_tools.py", line 700, in tool_brain_record_state_as_of
state = self._as_of_record(res_model, int(res_id), as_of_val)
File "/data/build/rb-8555493-222272/viin_ai_brain/models/record_historian.py", line 71, in _as_of_record
result = self._as_of_records(model_name, [record_id], timestamp)
File "/data/build/rb-8555493-222272/viin_ai_brain/models/record_historian.py", line 123, in _as_of_records
messages = self.env['mail.message'].search([
File "/data/build/Viindoo-tvtmaaddons-17.0/viin_mail_route/models/mail_message.py", line 23, in search
return super(MailMessage, self).search(domain, offset, limit, order)
File "/data/build/Viindoo-odoo-17.0/odoo/models.py", line 1623, in search
return self.search_fetch(domain, [], offset=offset, limit=limit, order=order)
File "/data/build/Viindoo-odoo-17.0/odoo/models.py", line 1646, in search_fetch
query = self._search(domain, offset=offset, limit=limit, order=order or self._order)
File "/data/build/Viindoo-odoo-17.0/addons/mail/models/mail_message.py", line 301, in _search
query = super()._search(domain, offset, limit, order, access_rights_uid)
File "/data/build/Viindoo-odoo-17.0/odoo/models.py", line 5443, in _search
self._flush_search(domain, order=order)
File "/data/build/Viindoo-odoo-17.0/odoo/models.py", line 5397, in _flush_search
self.env[model_name].check_field_access_rights('read', field_names)
File "/data/build/Viindoo-odoo-17.0/odoo/models.py", line 3544, in check_field_access_rights
raise AccessError(_(
odoo.exceptions.AccessError: The requested operation can not be completed due to security restrictions.
Document type: Message (mail.message)
Operation: read
User: 513
Fields:
- tracking_value_ids (allowed for groups 'Administration / Settings')
|
| 06/20/2026 14:25:46 | ERROR |
Subbuild # 386464:
odoo.addons.viin_ai_brain.tests.test_record_historian: FAIL: TestRecordHistorian.test_sale_order_reconstruction_returns_old_partner
Traceback (most recent call last):
File "/data/build/rb-8555493-222272/viin_ai_brain/tests/test_record_historian.py", line 175, in test_sale_order_reconstruction_returns_old_partner
self.assertIsNot(
AssertionError: unexpectedly identical: '__unresolvable__' : partner_id must be reconstructable (tracking=1 on sale.order).
|
| 06/20/2026 14:25:46 | ERROR |
Subbuild # 386464:
odoo.tests.result: 1 failed, 2 error(s) of 2158 tests when loading database 'rb-8555493-222272-386464'
|