Follow-up from the first customer test report (PR #599). Findings OM-17 (high) and OM-15. Cross-repo: the fix does not live in byte5ai/omadia.
What happened
The tester installed the Google Workspace plugin, saw an email field with a masked field directly beneath it, and entered their work email address and their actual Google account password. The system accepted both silently and confirmed "gespeichert". The fields meant gw_sa_client_email and gw_sa_private_key — two values out of a Google Cloud service-account JSON key file.
Their own words:
"Ich arbeite seit Monaten täglich mit KI-Werkzeugen und Systemkonfiguration. Wenn ich an dieser Stelle ein Login sehe, dann ist das kein Anwenderfehler."
They are right. omadia never asks for a Google password; the documented path is correct and secure. This is purely a design failure. The tester removed the values the same evening and rotated the account password.
What PR #599 already shipped (platform half, benefits every plugin)
- A standing caution under every
type: secret input: "Hier gehört kein Konto-Passwort hinein." Manifest-independent — this alone would have prevented the finding.
pattern + pattern_hint (localised) in the manifest schema, parsed by manifestLoader, enforced server-side in every write path — PATCH /v1/admin/runtime/installed/:id/secrets previously validated only the shape, never the value.
- Patterns are anchored to match HTML
pattern= semantics, screened by an allowlist grammar at load, and every match runs in a worker under a 50 ms budget (manifests are untrusted input).
- The manifest
placeholder is finally honoured — it was parsed and then discarded by both renderers.
What is still needed — and where
The Google Workspace plugin manifest is in neither this repo nor omadia-byte5-plugins. Greps for gw_sa_client_email / gw_sa_private_key return nothing in either tree; the plugin is published separately via hub.omadia.ai. Locate that repo first — that is task zero.
Then, in the plugin manifest:
pattern + pattern_hint on both fields:
gw_sa_client_email → expects …@….iam.gserviceaccount.com
gw_sa_private_key → expects a PEM block starting with -----BEGIN PRIVATE KEY-----
- German
label and help for every setup field. Today the "Beschreibung" section is entirely English while the instructions directly below it are German — two languages on one page. Note the schema asymmetry: setup_guide is already LocalizedMarkdown, but label / help / description are plain strings (see the linked platform issue).
- OM-15 — prerequisites on the card, before install. Setup requires a Google Cloud service account with domain-wide delegation, seven individual APIs enabled, splitting a JSON key file, and super-admin rights in the Workspace admin console. The tester's reaction on reading it: "Auch wenn die Beschreibung nicht danach klingt, als würde ich es hinbekommen." — and they only found out after installing. Mark it on the tile: "Einrichtung durch IT-Administrator · ca. 15 Min · Google-Workspace-Super-Admin erforderlich". This needs a new manifest block plus hub republication.
- A benefit-oriented opening sentence in plain language, technical detail collapsed under "Für Entwickler".
Mid-term, the structurally correct fix is a guided OAuth flow instead of manual service-account setup.
OM-17 is not closed for this customer until step 1 ships. The standing caution protects users today regardless.
Follow-up from the first customer test report (PR #599). Findings OM-17 (high) and OM-15. Cross-repo: the fix does not live in
byte5ai/omadia.What happened
The tester installed the Google Workspace plugin, saw an email field with a masked field directly beneath it, and entered their work email address and their actual Google account password. The system accepted both silently and confirmed "gespeichert". The fields meant
gw_sa_client_emailandgw_sa_private_key— two values out of a Google Cloud service-account JSON key file.Their own words:
They are right. omadia never asks for a Google password; the documented path is correct and secure. This is purely a design failure. The tester removed the values the same evening and rotated the account password.
What PR #599 already shipped (platform half, benefits every plugin)
type: secretinput: "Hier gehört kein Konto-Passwort hinein." Manifest-independent — this alone would have prevented the finding.pattern+pattern_hint(localised) in the manifest schema, parsed bymanifestLoader, enforced server-side in every write path —PATCH /v1/admin/runtime/installed/:id/secretspreviously validated only the shape, never the value.pattern=semantics, screened by an allowlist grammar at load, and every match runs in a worker under a 50 ms budget (manifests are untrusted input).placeholderis finally honoured — it was parsed and then discarded by both renderers.What is still needed — and where
The Google Workspace plugin manifest is in neither this repo nor
omadia-byte5-plugins. Greps forgw_sa_client_email/gw_sa_private_keyreturn nothing in either tree; the plugin is published separately via hub.omadia.ai. Locate that repo first — that is task zero.Then, in the plugin manifest:
pattern+pattern_hinton both fields:gw_sa_client_email→ expects…@….iam.gserviceaccount.comgw_sa_private_key→ expects a PEM block starting with-----BEGIN PRIVATE KEY-----labelandhelpfor every setup field. Today the "Beschreibung" section is entirely English while the instructions directly below it are German — two languages on one page. Note the schema asymmetry:setup_guideis alreadyLocalizedMarkdown, butlabel/help/descriptionare plain strings (see the linked platform issue).Mid-term, the structurally correct fix is a guided OAuth flow instead of manual service-account setup.
OM-17 is not closed for this customer until step 1 ships. The standing caution protects users today regardless.