|
|
|
merged
[FIX] viin_backend_theme, viin_brand_{web,mail,pos}: stop breaking core Odoo 19
|
[FIX] viin_backend_theme: restyle core without rewriting it
A theme may change how Odoo looks. This one had begun changing what Odoo
says, what it does, and how it describes itself to assistive technology -
and runbot batch 223955 was where that came due.
The theme case-transformed two surfaces it does not own: core's
command-palette category block and the list view's column headers. Rendered
text is what Odoo's own automated checks, tour assertions, screen readers
and a user's copy-paste all read back, so a purely cosmetic rule turned 102
core checks red at once ("Command#" read back as "COMMAND#"). Core already
presents the palette's category label in capitals itself, so ours added
nothing. It was also a defect users could see: the class it targeted is the
block holding every command row, not the label, so its muted colour, 11px
size, weight and letter-spacing were inherited by every row in the palette.
Aiming the rule at the label alone restores the rows to core's typography.
Odoo ends every font stack it ships with two safety nets: a small Noto
subset for characters a system font lacks or renders badly, and the four
emoji families. This theme replaced Odoo's stacks with its own and dropped
both nets from headings and from body text, so an emoji or an uncommon
script in ordinary backend text - a customer name, a chatter message, a
product label - could land on a system with nothing able to draw it and
render as an empty box. Both stacks are whole again and now end identically.
The brand heading font was also reaching into the rich-text editor, where an
outgoing email body inlines whatever font it is shown in, handing the
recipient a Viindoo face their mail client does not have and which is not
even vendored yet. Email bodies go back to the portable system stack; the
backend keeps Montserrat.
Clicking the navbar apps icon threw away whatever the user was working on.
The icon opened the home menu as a full page, so an open record, a half
filled form or a kanban the user had just filtered was torn down and had to
be rebuilt on the way back. Odoo's own contract for that icon is that it
shows the app list without navigating, and a large part of Odoo's test suite
is written on that assumption: 57 test files click it, some to pick an app,
others merely in passing before carrying on with the screen they were
already on. The latter could not work here at all, and the former could not
either, because our tiles were not the kind of element those tests look for.
The icon now shows the same full-screen home menu over the untouched view.
Pressing it again puts it away and the user is back where they were -
instantly, because nothing was ever destroyed - and so does clicking the
page behind it or pressing Escape, which the full-page version offered no
way to do. The design is unchanged: one icon, one home menu, and the landing
page shown at sign-in is untouched.
App tiles are now real links, as they are in stock Odoo, so they can be
opened in a new tab, copied, or announced sensibly. They had carried an
explicit role telling a screen reader each tile is an item in a list, never
that it is something the user can follow; because an explicit role replaces
an element's own rather than adding to it, the tiles were also absent from
links navigation, one of the main ways people using a screen reader move
through a page. That role is gone, and the grid's own list role went with
it, since a list is required to contain list items and keeping one alone
would have left an empty, malformed list rather than a fix. Wrapping each
tile to keep both was rejected: the tiles are laid out directly by the grid
and are the elements the drag-to-reorder handles, so a wrapper breaks the
layout and the reordering unless hidden by a CSS trick with its own record
of removing elements from the accessibility tree. Nothing on screen changes,
and keyboard navigation and drag-to-reorder are unaffected.
Guards now fail the build if this theme case-transforms anything it did not
author, if either font stack loses its fallback, or if a tile stops being
announced as a link; the font guard reads the value the browser is actually
handed rather than the source. One existing check was inverted rather than
weakened: it asserted the previous view was gone after clicking the apps
icon, which is the behaviour being fixed, and now asserts the view survives.
Owner decisions D1, D2 and D3, 2026-08-17.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Succeed
|
|
|
|
|
|
|
|
merged
V19 fix imp viin brand cluster
|
[FIX] viin_backend_{web,theme}: remove redundant tests
|
Killed
|
|
|
|
|
|
|
|
merged
V19 fix imp viin brand cluster
|
[FIX] viin_backend_theme: remove redundant tests
|
Failed
|
|
|
|
|
|
|
|
merged
V19 fix imp viin brand cluster
|
[IMP] viin_brand_web: remove border-radius override and link override
|
Failed
|
|
|
|
|
|
|
|
merged
[REF] viin_brand_common: split into viin_brand_web + viin_brand_base_setup
|
[FIX] viin_brand_base_setup, viin_brand_web: split the catalogue to follow the artefacts
A stale #: reference silently DROPS the translation - the loader builds
ir_model_data keys straight out of the occurrence string, finds no row, and
skips the entry with no error and nothing red in any test suite.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[FWD] forward-port 18.0 -> 19.0 (0dafec5..467ac60, 9 commits)
|
[FIX] viin_brand_website: brand the websites a field default cannot reach
Removing the x_icon QWeb override was right - it resolved to website's own
producer and destroyed it, so a configured favicon could never be served. But
that override was also, incidentally, what made unconfigured websites look
branded: it forced the brand path at render time for every website regardless
of the stored field. With it gone the stored value renders, and for two
populations that value is still Odoo's icon - website.default_website, which
core creates while loading the website module, before this module's field
extension exists, and any website predating this module's install. A field
default fires only at record creation, so it reaches neither.
So on every existing 19.0 database this branch, as it stood, silently swapped
the Viindoo favicon for Odoo's. Reported by Codex on PR #664.
Corrected once, from two entry points that share one implementation:
post_init_hook for a fresh install, migrations/0.1.2 for a database where the
module is already installed. Both rewrite ONLY records byte-identical to core's
own default - those are provably nobody's choice - and leave every configured
favicon exactly as it is, which is the whole point of having removed the
override.
Verified on clean databases: a fresh install and an upgrade both end with the
default website branded, while a website whose owner set its own favicon keeps
it byte-for-byte. UntouchedFaviconsGetBrandedTest locks both halves - doing
nothing fails one assertion, overwriting everything fails the other.
|
Failed
|
|
|
|
|
|
|
|
merged
[FWD] forward-port 18.0 -> 19.0 (0dafec5..467ac60, 9 commits)
|
[FWD] forward-port 18.0 -> 19.0 (0dafec5..467ac60, 9 commits)
Absorbs every commit that landed on 18.0 since the last forward-port, so the
merge-base advances and none of them is reconsidered next run.
Three carry real behaviour to 19.0:
* viin_brand_website no longer replaces website.layout's x_icon producer. That
xpath resolved to core's own producer and destroyed it, so a customer who
configured their own favicon could never serve it. Branding now comes from a
field default in models/website.py: a new website starts branded, and the
customer's value wins the moment they set one. Locked by
tests/test_website_favicon_not_preempted.py.
* viin_backend_theme guards _loadDefaultApp before diverting to the home menu,
so an environment with a cleaned action registry falls back to the stock
default app instead of throwing during boot.
* viin_brand_website_sale drops the unverifiable "#1" ranking claim from the
eCommerce promo, in the template and both translation catalogs.
The rest are absorbed without adapt because 19.0 already moved past them:
web_responsive is gone entirely, replaced by viin_backend_theme; QUnit is
replaced by Hoot; the web.layout title/favicon fallback was deliberately
re-homed onto that template's callers and must not be restored.
One auto-merge carried a symbol that no longer exists here: the window-title
branding arrived guarded by session.viin_brand, a marker stamped by an
ir.http.session_info override 19.0 does not have, which would have left the
title permanently unbranded with no error. Reverted to the 19.0 version.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[19.0][UPG] viin_brand_*: upgrade to 19
|
[FIX] viin_backend_theme: realign radius invariant to owner decision D5
viin_brand_common's brand_variables.scss restores a pre-19 square-corners token
($o-border-radius: 0) in the previous commit; this file's cluster-wide "zero radius
overrides anywhere" invariant predates that restore and read it as the exact
regression it exists to catch. Owner decision D5 keeps the restore, so the guard is
updated to treat that single base-rung declaration as a pinned, SSOT-read exception
(-sm/-lg remain unchanged and must still equal core's own scale exactly) instead of a
violation.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[19.0][UPG] viin_brand_*: upgrade to 19
|
[UPG] viin_brand*: upgrade to version 19.0
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
Not finished
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[REM] web_responsive: drop OCA responsive backend (superseded by viin_backend_theme's native mobile/rail redesign)
Was the legacy to_backend_theme's dependency; nothing else in the repo/tvtmaaddons/core depends on it.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[NEW] viin_backend_theme: Odoo 19 CE backend theme (Viindoo redesign), additive on the branding base
Purely-additive backend redesign on top of viin_brand_common + viin_brand_mail: instant OPT-IN dark
mode (native [data-bs-theme], per-user choice - public pages and the default state stay LIGHT), the
always-dark vertical rail + flat "Applications" home menu, form chrome + D6 statusbar->stepper,
list/kanban + bulk bar, split-screen login, overlays/skeleton/empty-states, mobile bottom-nav +
density toggle, appearance systray, Montserrat/Roboto typography. ZERO --viin-* custom properties;
native $o-* / Bootstrap levers + the cluster teal SSOT only; auto_install so the de-branded redesign
is the default on every Viindoo 19 DB.
Includes the W5 durable test layer (Hoot: theme service + D6 stepper; HttpCase tours: dark toggle,
home menu, density, mobile bottom-nav), the full dark-mode AA-contrast pass (form/dialog/grouped
list/kanban/pivot/calendar/search-panel/mail menus/chatter re-pointed to the runtime scheme props;
Bootstrap .text-* utilities relit in dark; light mode untouched), and the vi_VN translation.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Killed
|
|
Not finished
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[NEW] viin_backend_theme: Odoo 19 CE backend theme (Viindoo redesign), additive on the branding base
Purely-additive backend redesign on top of viin_brand_common + viin_brand_mail: instant OPT-IN dark
mode (native [data-bs-theme], per-user choice - public pages and the default state stay LIGHT), the
always-dark vertical rail + flat "Applications" home menu, form chrome + D6 statusbar->stepper,
list/kanban + bulk bar, split-screen login, overlays/skeleton/empty-states, mobile bottom-nav +
density toggle, appearance systray, Montserrat/Roboto typography. ZERO --viin-* custom properties;
native $o-* / Bootstrap levers + the cluster teal SSOT only; auto_install so the de-branded redesign
is the default on every Viindoo 19 DB.
Includes the W5 durable test layer (Hoot: theme service + D6 stepper; HttpCase tours: dark toggle,
home menu, density, mobile bottom-nav), the full dark-mode AA-contrast pass (form/dialog/grouped
list/kanban/pivot/calendar/search-panel/mail menus/chatter re-pointed to the runtime scheme props;
Bootstrap .text-* utilities relit in dark; light mode untouched), and the vi_VN translation.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[FIX] viin_backend_theme: complete dark-mode AA coverage (opt-in, backend) + keep public login light
Dark mode is a LOGGED-IN per-user choice applied to the backend only; public pages and the
default state stay LIGHT. Two parts:
1. Public/default-light: remove login.scss's `@media (prefers-color-scheme: dark)` block - the
PUBLIC pre-auth login must not darken from the visitor's OS. The login now always renders the
light split-screen. Guard test_public_login_never_os_darkens bans re-adding it.
2. Complete the backend dark-mode AA coverage the earlier commit started, all dark-scoped
([data-bs-theme=dark]) so light mode is untouched. Odoo 19 CE core dark mode leaves many
surfaces on compiled light values that never scheme-flip; re-point them to the runtime scheme
props at the layer each is read:
- Backgrounds via the core CSS var (fixes the whole family at once): grouped-kanban
--Kanban-background/--KanbanGroup-background; form o2m list --ListRenderer-thead/tfoot-bg-color;
breadcrumb --breadcrumb-bg; a GLOBAL .bg-view --background-color flip (view-surface utility on
~14 surfaces incl. search panel + calendar container + inputs) - beats .bg-view's !important
WITHOUT an !important war since re-pointing its own local var; messaging systray
--mail-MessagingMenu-bg (core set it light in its OWN dark stylesheet); search-panel list-group.
- Text utilities compiled light + !important: .text-body/.text-muted/.text-900 relit WITH
!important (sparing .btn-light/.btn-secondary light chips); --body-color-rgb flipped for dark.
- Per-surface: search-panel active row (core hardcodes .text-black), field-selector chain part,
pivot cells/headers (beat core's o-hover-text-color mixin), chatter header, command-palette
footer, settings form (--settings__* vars + .settings bg + section titles).
- Calendar: re-point --fc-* tokens on the .fc element itself (FullCalendar declares them there,
so an ancestor rule loses) -> dark grid + readable day names/dates.
- .o_web_client color-scheme: correct core's invalid 'bright' ident to light/dark per the app
toggle (fixes native scrollbars/controls + the getComputedStyle skew).
REVERTED a mis-step from the prior iteration: a global .text-success/.text-info dark flip that,
being unscoped, lost contrast on light surfaces (selected rows/subtle alerts) - core's marginal
~3.7-3.9:1 values are accepted known-minors (like white-on-color badges), not regressed.
Live getComputedStyle-verified (the review browser runs force-dark, so screenshots are unreliable):
all primary daily screens (home/list/form/kanban/pivot/settings/dialog/dropdowns/command-palette/
search-panel/activities+messages menus/calendar/chatter) are AA-clean in dark, regression reverted,
0 console errors, light mode unchanged. ~24 source-invariant guards (TestReviewA11yFixes) protect
the intent; 52/52 theme tests green (Python /viin_backend_theme + Hoot bracket).
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[FIX] viin_backend_theme: dark-mode AA contrast (form, dialog, grouped list, kanban, text utilities)
A live acceptance review found several dark-mode surfaces still rendering
compiled light-mode colors that do not scheme-flip. Re-point them (dark-scoped,
so light mode is untouched) to the runtime scheme props, at the correct layer:
* Form: record title / headings -> var(--emphasis-color); field values/inputs
-> var(--body-color) (core .oe_title uses a compiled $headings-color hex).
* Light form labels: brand-purple leak -> neutral var(--secondary-color) (grey,
matches the mockup and the dark label tier).
* Teal FOREGROUND on dark (nocontent link, bulk-selection count, active notebook
tab, statusbar done glyph, many2one o_form_uri links): compiled #007F8E (3.69:1)
-> lighter dark teal #4FD4E2 (~9.9:1). Teal fills + the rail accent untouched.
* Dialog titles + any var-based heading: flip --heading-color -> var(--emphasis-color)
at the scheme engine (core $headings-color-dark is 'inherit', never flips).
* Grouped-list header + the Bootstrap .text-body/.text-muted utilities: these are
compiled with light values + !important into the dark bundle, so relit with
!important in dark (.text-muted spares .btn-light/.btn-secondary chips); also
fix the stale --body-color-rgb in the dark scheme.
* Overdue/rotting kanban card: core's static light-pink bg -> a dark-red color-mix
so its text is readable in dark (light mode keeps the pink).
* .o_web_client color-scheme: core's invalid 'bright' ($o-webclient-color-scheme)
-> light/dark per the app toggle, so native scrollbars/controls match the scheme.
All light-on-light / dark-on-light-chip cases verified non-regressed; light mode
unchanged. 13 source-invariant guards added (TestReviewA11yFixes). Live re-verify:
form/dialog/list/kanban/labels/links all clear AA in dark; 36/36 theme tests green.
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[NEW] viin_backend_theme: W5 durable test layer (Hoot + HttpCase tours)
Adds the behavior-guard test layer for the theme, wired into web.assets_unit_tests
(Hoot) and web.assets_tests (tours), driven by tests/test_tours.py:
* Hoot - viin_theme service: setScheme dark/light flips documentElement data-bs-theme
+ persists the color_scheme cookie; setDensity compact flips data-viin-density +
viin_density cookie; 'auto' resolves via a mocked matchMedia and re-resolves on OS flip.
* Hoot - StatusBarField (D6) stepper: getStepInfo maps a mid-pipeline record to
done/current/upcoming markers; clicking a stage still fires core selectItem -> web_save
(presentation-only patch must not break click-to-change).
* HttpCase tours: instant dark toggle + reload persistence; density compact + reload
persistence (single-session location.reload, expectUnloadPage); home-menu fuzzy search
+ keyboard launch; mobile ViinBottomNav single-chrome + slot navigation (375x667 touch).
All assert observable state (RED-on-behavior-removal); no assertion is a code snapshot.
23/23 green on 19.0 CE (17 Python/tours + 6 Hoot).
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[NEW] viin_backend_theme: Odoo 19 CE backend theme (Viindoo redesign), additive on the branding base
auto_install theme (depends web, viin_brand_common, viin_brand_mail) that redesigns the Odoo 19 backend to the Viindoo mockups WITHOUT re-implementing the cluster's de-brand/AA cascade. Native-override-first, ZERO --viin-* parallel tokens; reads the $o-brand-primary SSOT from viin_brand_common. W1 substrate: Viindoo light/dark values on Bootstrap's UNPREFIXED runtime props (Odoo 19 sets $variable-prefix='') at :root/[data-bs-theme=dark] + app-shell flip + Montserrat/Roboto stacks. W2: 64px always-dark vertical rail (D4, active pill teal) + flat ViinHomeMenu client action (D3, mockup-faithful light, desktop 6-col/mobile 2-col, autofocus fuzzy search). W3: statusbar->stepper (D6, P3 patch + t-inherit, numbered/check pills), control panel (D5), button-box (D7), notebook teal (D11), list chrome + bulk bar (D10, SelectionBox t-inherit), kanban card hover-lift (D9), login split-screen (D16) + frontend $primary de-brand (A-LOGIN, teal CTA), overlays (D12) + loading/skeleton (D15) + nocontent (D14). W4: dark mode END-TO-END - res.users.viin_color_scheme (SELF-writeable) + ir.http.color_scheme() (cookie>pref>super) + data-bs-theme/data-viin-density boot reflection (FOUC-free reload) + viin_theme service (INSTANT no-reload toggle + System/matchMedia) + ViinAppearanceSystray + ViinBottomNav (mobile, §4d layering) + density + the half-dark container fix (re-point control panel/form sheet/statusbar/chatter/kanban to runtime scheme vars). Only 3 OWL patches (WebClient landing, NavBar rail, StatusBarField stepper). Verified live per wave vs the mockup-ref set; 13 module tests green; compile-landmine guards (no var()-in-color-fn, no bare CSS min/max, no -- in XML comments, no luxon import). Follow-ups: woff2 font vendoring, ViinSkeleton component, empty-state SVGs, compact density 34px target, W5 tours/axe/visual-regression.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[UPG] viin_brand_web_editor: upgrade to 19.0 (web_editor -> html_editor rename, primary-button de-brand SCSS)
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[UPG] viin_brand_web_editor: upgrade to 19.0 (web_editor -> html_editor rename, primary-button de-brand SCSS)
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[UPG] viin_brand_web_editor: upgrade to 19.0 (web_editor -> html_editor rename, primary-button de-brand SCSS)
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[UPG] branding-base cluster (5 modules) to Odoo 19.0 + de-brand/teal SSOT
|
[FIX] viin_brand_mail: de-brand email button colour #875A7B -> Viindoo teal #007F8E
Live acceptance (OBS-1) found the email CTA button default colour was still Odoo's legacy
aubergine #875A7B (res.company.email_secondary_color, core mail default), rendered in the
notification email layout and pre-filled in Settings > Email Templates. Override the default
to the Viindoo AA-contrast dark teal #007F8E (white button text stays >=4.5:1; reuses the
navbar AA shade for SSOT, not the flat #00BBCE which fails AA on white text). Extend the
post_init_hook to normalize any existing company still on the untouched #875A7B default
(upgrade completeness), leaving explicit customer choices untouched. Add a test asserting the
default + the rendered CTA button colour is #007F8E and not #875A7B. Verified live: rendered
notification button #007F8E; module tests 0 failed/0 error.
Signed-off-by: David Tran <david.tran@tvtmarine.com>
|
Failed
|
|
|
|
|
|
|
|
merged
[FWD] Forward-port 18.0 -> 19.0 (web_responsive to v19 + cluster absorb)
|
Merge remote-tracking branch 'origin/18.0' into 19.0
Second continuous forward-port increment (updates PR #653), SHA-preserving.
Absorb 5 new 18.0 commits:
- viin_brand_pos: guard the company service in the POS Navbar favicon patch +
Hoot test (a982703 -> 3c40e2d), made runnable on the branch (5b9ffe0)
- viin_brand_website: adapt the website_background_colorpicker tour to the
branded palette (1722364 -> e0baa1d)
- web_responsive: chatter Log Note disabled-binding + upstream "Action" statusbar
toggler fixes (c676d5a/77a158c) - already present on 19.0, absorbed SHA-only
viin_brand_pos and viin_brand_website stay installable:False (phased-upgrade
posture): the forwarded code and tests land but are not loaded on 19.0.
Fix the Runbot module-graph inconsistency by setting installable:False on three
not-yet-v19-adapted modules that were installable:True on this branch:
- viin_brand_website_slides_forum: new from 18.0; depends on
viin_brand_website_forum, which is installable:False, so the module graph
marked it inconsistent ("some depends are not loaded ... skipped") - the exact
Runbot failure
- viin_brand_auth_signup: new from 18.0, never assessed for Odoo 19
- viin_brand_hr_expense: 18.0 re-enabled it (7fc5f5f) on an 18.0-specific
rationale (white-label, installs clean on 18.0); not v19-verified, so it
returns to installable:False and can be re-enabled individually later
Only web_responsive stays installable:True in the branding cluster, matching the
phased-upgrade posture. Verified on Odoo 19.0 CE: co-installing the core
auto_install triggers (website_slides_forum, hr_expense, auth_signup) plus
web_responsive produces no module-graph inconsistency.
|
Killed
|
|
|
|
|
|
|
|
merged
[FWD] Forward-port 18.0 -> 19.0 (web_responsive to v19 + cluster absorb)
|
Merge remote-tracking branch 'origin/18.0' into 19.0
Forward-port (SHA-preserving absorb-all) of 40 commits from 18.0 onto 19.0; the
merge-base advances so these conflicts are never re-resolved.
web_responsive (the only installable module on 19.0) adapted to Odoo 19.0 core:
- retarget v19-removed inherit targets: web.StatusBarDropdownItems ->
web.StatusBarButtons; drop the mail.BaseRecipientsList extension (removed in v19)
- de0f04ea "home menu -> first-class client action" + apps_menu optional-chaining
guards re-landed against 19.0's action manager
- migration retargeted 18.0.1.0.8 -> 19.0.1.0.3 (+ manifest version bump) so the
is_redirect_home backfill fires on a 19.0 upgrade
- 3d5df321 sticky statusbar scoped to >=md (mobile keeps core scroll behaviour)
- App Store URL series literals swept to 19.0
53 viin_brand_* modules kept installable:False (lint-only absorb).
Verified on Odoo 19.0 CE: 4 independent Hoot controls prove zero FP-introduced
regression; Python tests pass; live acceptance 30/32 PASS with the de0f04ea
mechanism working end-to-end for admin and a non-admin role. Residual divergences
(3 responsive-theme-vs-core Hoot geometry/error-checker tests, a core res.users
read ACL, a pre-existing SELF_WRITEABLE gap) are baseline/core, not FP-introduced.
|
Failed
|
|
|
|
|
|
|
|
merged
[19.0][UPG] viin_brand_*: upgrade to 19
|
[UPG] viin_brand*: upgrade to version 19.0
|
Killed
|
|
Not finished
|
|
|
|
|
|
merged
[19.0][UPG] viin_brand_*: upgrade to 19
|
[UPG] viin_brand*: upgrade to version 19.0
|
Failed
|
|
|
|
|
|
|
|
merged
[UPD] web_responsive: merged from OCA at 19/06/2026
|
[FIX] web_responsive: converting OWL component props/template to static
class
|
Killed
|
|
|
|
|
|
|
|
merged
[UPD] web_responsive: merged from OCA at 19/06/2026
|
[UPD] web_responsive: merged from OCA at 19/06/2026
|
Failed
|
|
|
|
|
|
|
|
merged
[19.0][UPG] viin_brand_*: upgrade to 19
|
[REM] viin_brand_*: drop 4 new branding modules (diagnostic)
|
Failed
|
|
|
|
|
|
|
|
closed
WIP 19 exp drop 4 new modules
|
[REM] viin_brand_*: drop 4 new modules (runbot isolation experiment)
Throwaway branch to isolate whether the four auto_install modules added in 224e02a (viin_brand_gamification, viin_brand_lunch, viin_brand_account_peppol, viin_brand_website_crm_partner_assign) are what tips the non-deterministic to_base icon-cache failure on runbot. to_base is kept at the 19.0 base (old current_test guard) so the only changed variable is the module set. Not for merge.
|
Failed
|
|
|
|
|