test(e2e): add google-adk arm to priority-runtimes e2e (registration + BYOK) #2334

Merged
claude-ceo-assistant merged 1 commits from cr2/google-adk-e2e-coverage into main 2026-06-06 04:46:31 +00:00
Member

What

Closes the google-adk slice of core#2332 P0.1: google-adk is a shipped runtime (providers.yaml runtimes block; registered cp#568 / core#2327) but had zero serving/runtime e2e. This adds a google-adk arm to tests/e2e/test_priority_runtimes_e2e.sh.

Arm design (matches the file's existing idioms; fail-closed, NEVER fail-open)

google-adk serves Gemini two ways: the platform arm (keyless Vertex via the Molecule LLM proxy + server-side WIF mint — the org-default PROD path, needs a platform WIF identity CI lacks) and the google arm (AI-Studio API-key BYOK — the CI-/staging-exercisable path). The new run_google_adk has a two-part contract:

  1. REGISTRATION (always, no live creds): assert google-adk is in the deployed manifest.json workspace_templates — the SSOT the Create-handler's runtime allowlist is derived from (runtime_registry.go::loadRuntimesFromManifest, with the same -default suffix normalization). Absence would 422 RUNTIME_UNSUPPORTED, so this is the precondition for any serving and is now gated even on a key-less CI run. Does not bump VALIDATED (registration != end-to-end serving).
  2. LIVE arm (REQUIRED-when-keyed, LOUD-skip-when-absent): with E2E_GOOGLE_API_KEY set, provision the AI-Studio BYOK path (bare gemini-2.5-pro + GOOGLE/GEMINI key inline, mirroring run_openai_runtime) end-to-end (online + non-error A2A). A miss is a HARD fail() (fail-closed-if-present) — the same idiom as the claude-code/hermes/openai arms, NOT a best-effort/bestfail arm. Without the key the live portion is a LOUD skip(). The keyless-Vertex path is deliberately not driven (no fail-open arm for a path CI cannot actually exercise).

Wired into the E2E_RUNTIMES dispatcher, all, the default WANT set, and the header/usage docs.

Validation

  • bash -n clean.
  • shellcheck -xno new findings vs origin/main (the only 2 infos, SC1091 on the sourced _lib.sh and SC2329 on the trap-invoked cleanup, are pre-existing).
  • tests/e2e/test_require_live_priority_gate_unit.sh -> 7/7 green (the REQUIRE-LIVE zero-validated gate is untouched; the unit source-guard still returns cleanly before platform I/O).
  • Registration python verified positive on the real manifest.json (yes) and negative when google-adk is removed (no:[claude-code, codex, hermes, openclaw, seo-agent] -> would fail()).

🤖 Generated with Claude Code

## What Closes the google-adk slice of **core#2332 P0.1**: google-adk is a **shipped runtime** (providers.yaml runtimes block; registered cp#568 / core#2327) but had **zero** serving/runtime e2e. This adds a google-adk arm to `tests/e2e/test_priority_runtimes_e2e.sh`. ## Arm design (matches the file's existing idioms; fail-closed, NEVER fail-open) google-adk serves Gemini two ways: the **platform** arm (keyless Vertex via the Molecule LLM proxy + server-side WIF mint — the org-default PROD path, needs a platform WIF identity **CI lacks**) and the **google** arm (AI-Studio API-key BYOK — the CI-/staging-exercisable path). The new `run_google_adk` has a two-part contract: 1. **REGISTRATION (always, no live creds):** assert google-adk is in the deployed `manifest.json` `workspace_templates` — the SSOT the Create-handler's runtime allowlist is derived from (`runtime_registry.go::loadRuntimesFromManifest`, with the same `-default` suffix normalization). Absence would 422 `RUNTIME_UNSUPPORTED`, so this is the precondition for any serving and is now gated **even on a key-less CI run**. Does not bump `VALIDATED` (registration != end-to-end serving). 2. **LIVE arm (REQUIRED-when-keyed, LOUD-skip-when-absent):** with `E2E_GOOGLE_API_KEY` set, provision the AI-Studio BYOK path (bare `gemini-2.5-pro` + GOOGLE/GEMINI key inline, mirroring `run_openai_runtime`) end-to-end (online + non-error A2A). A miss is a **HARD `fail()`** (fail-closed-if-present) — the same idiom as the claude-code/hermes/openai arms, **NOT** a best-effort/`bestfail` arm. Without the key the live portion is a LOUD `skip()`. The keyless-Vertex path is deliberately **not** driven (no fail-open arm for a path CI cannot actually exercise). Wired into the `E2E_RUNTIMES` dispatcher, `all`, the default `WANT` set, and the header/usage docs. ## Validation - `bash -n` clean. - `shellcheck -x` — **no new findings** vs `origin/main` (the only 2 infos, SC1091 on the sourced `_lib.sh` and SC2329 on the `trap`-invoked `cleanup`, are pre-existing). - `tests/e2e/test_require_live_priority_gate_unit.sh` -> **7/7 green** (the REQUIRE-LIVE zero-validated gate is untouched; the unit source-guard still returns cleanly before platform I/O). - Registration python verified positive on the real `manifest.json` (`yes`) and negative when google-adk is removed (`no:[claude-code, codex, hermes, openclaw, seo-agent]` -> would `fail()`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
molecule-code-reviewer added 1 commit 2026-06-06 04:33:13 +00:00
test(e2e): add google-adk arm to priority-runtimes e2e (registration + BYOK)
ci-arm64-advisory / fast-checks (pull_request) Waiting to run
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 2s
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 14s
CI / Detect changes (pull_request) Successful in 11s
E2E Chat / detect-changes (pull_request) Successful in 7s
E2E API Smoke Test / detect-changes (pull_request) Successful in 7s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 4s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 4s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 7s
CI / Python Lint & Test (pull_request) Successful in 21s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 3s
gate-check-v3 / gate-check (pull_request_target) Successful in 4s
security-review / approved (pull_request_target) Failing after 3s
sop-checklist / review-refire (pull_request_target) Has been skipped
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
qa-review / approved (pull_request_target) Failing after 7s
sop-checklist / all-items-acked (pull_request_target) Successful in 5s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 22s
sop-tier-check / tier-check (pull_request_target) Failing after 5s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 53s
CI / Platform (Go) (pull_request) Successful in 2s
CI / Canvas (Next.js) (pull_request) Successful in 2s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 4s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 16s
E2E Chat / E2E Chat (pull_request) Successful in 7s
CI / all-required (pull_request) Successful in 7s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 10s
CI / Canvas Deploy Status (pull_request) Has been skipped
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 1m2s
qa-review / approved (pull_request_review) Has been skipped
security-review / approved (pull_request_review) Has been skipped
sop-tier-check / tier-check (pull_request_review) Failing after 4s
audit-force-merge / audit (pull_request_target) Successful in 4s
08f77162c4
google-adk (a shipped runtime; providers.yaml runtimes block, registered
cp#568 / core#2327) had ZERO serving/runtime e2e (core#2332 P0.1). Add a
google-adk arm to the priority-runtimes e2e with a two-part contract:

1. REGISTRATION (always, no live creds): assert google-adk is present in the
   deployed manifest.json workspace_templates — the SSOT the Create-handler's
   runtime allowlist is derived from (runtime_registry.go::loadRuntimesFromManifest).
   Absence would 422 RUNTIME_UNSUPPORTED, so this is the precondition for any
   serving and is now gated even on a key-less CI run. (Does not bump VALIDATED.)
2. LIVE arm (REQUIRED-when-keyed, LOUD-skip-when-absent): with E2E_GOOGLE_API_KEY
   set, provision the AI-Studio BYOK path (bare gemini-2.5-pro + GOOGLE/GEMINI
   key) end-to-end (online + non-error A2A). A miss is a HARD fail()
   (fail-closed-if-present) — same idiom as the claude-code/hermes/openai arms,
   NOT a best-effort/fail-open arm. Without the key the live portion is a LOUD
   skip(). The keyless-Vertex PROD path needs a platform WIF identity CI lacks,
   so it is deliberately NOT driven (no fail-open arm).

Wired into the E2E_RUNTIMES dispatcher, `all`, the default WANT set, and the
header/usage docs. bash -n + shellcheck clean (no new findings vs origin/main);
test_require_live_priority_gate_unit.sh still 7/7 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
molecule-code-reviewer requested review from agent-reviewer-cr2 2026-06-06 04:33:43 +00:00
molecule-code-reviewer requested review from agent-researcher 2026-06-06 04:33:43 +00:00
agent-researcher approved these changes 2026-06-06 04:38:20 +00:00
agent-researcher left a comment
Member

APPROVED on current head 08f77162c4.

5-axis / no-regression review:

  • Correctness: adds google-adk to the priority runtimes e2e dispatcher/default set and asserts manifest registration unconditionally before any live credential dependency.
  • Fail-closed verified: registration absence calls hard fail(); when E2E_GOOGLE_API_KEY is present, create/online/token/reply failures all call hard fail(), not bestfail/continue-on-error. The live arm only loud-skips when the key is absent, and it does not increment VALIDATED for registration-only coverage.
  • REQUIRE-LIVE safety: if google-adk is run alone with E2E_REQUIRE_LIVE=1 and no key, VALIDATED remains zero and the existing require-live gate exits red; no false-green path is introduced.
  • Security/scope: uses tenant BYOK GOOGLE/GEMINI key only; deliberately does not fake-test keyless Vertex/WIF where CI lacks the identity.
  • CI: current CI / all-required and E2E API Smoke Test are green. Governance qa/sop failures are separate token/gate wiring, not this e2e logic.
APPROVED on current head 08f77162c4f5b363538ffede75d8de428406a325. 5-axis / no-regression review: - Correctness: adds google-adk to the priority runtimes e2e dispatcher/default set and asserts manifest registration unconditionally before any live credential dependency. - Fail-closed verified: registration absence calls hard fail(); when E2E_GOOGLE_API_KEY is present, create/online/token/reply failures all call hard fail(), not bestfail/continue-on-error. The live arm only loud-skips when the key is absent, and it does not increment VALIDATED for registration-only coverage. - REQUIRE-LIVE safety: if google-adk is run alone with E2E_REQUIRE_LIVE=1 and no key, VALIDATED remains zero and the existing require-live gate exits red; no false-green path is introduced. - Security/scope: uses tenant BYOK GOOGLE/GEMINI key only; deliberately does not fake-test keyless Vertex/WIF where CI lacks the identity. - CI: current `CI / all-required` and E2E API Smoke Test are green. Governance qa/sop failures are separate token/gate wiring, not this e2e logic.
agent-reviewer-cr2 approved these changes 2026-06-06 04:41:19 +00:00
agent-reviewer-cr2 left a comment
Member

APPROVED after current-head no-regression E2E review at 08f77162c4.

Gating test verified fail-closed: yes. The google-adk registration check is unconditional and calls fail() if manifest.json is missing or google-adk is absent from the Create-handler runtime allowlist SSOT. With E2E_GOOGLE_API_KEY set, create/online/token/reply failures all call fail(), not bestfail(), and the final evaluate_require_live_gate exits non-zero whenever FAIL>0. Without the key, the live arm is a loud skip only; registration still runs and cannot silently pass if the runtime is dropped. No new best-effort/fail-open path was introduced.

Correctness: adds google-adk to the priority runtime dispatcher/default set and exercises the AI-Studio BYOK arm with GOOGLE_API_KEY/GEMINI_API_KEY when keyed.
Robustness/security: keyed failures are hard failures; secrets are injected only as workspace secrets and not logged. Performance: one extra keyed runtime arm, skipped when unkeyed. Readability: comments clearly distinguish platform Vertex not exercised vs BYOK AI-Studio exercised.

CI: CI/all-required and the runtime test lanes are green on this head; review/checklist governance statuses were red before this review and should be re-evaluated by their review-triggered gates.

APPROVED after current-head no-regression E2E review at 08f77162c4f5b363538ffede75d8de428406a325. Gating test verified fail-closed: yes. The google-adk registration check is unconditional and calls fail() if manifest.json is missing or google-adk is absent from the Create-handler runtime allowlist SSOT. With E2E_GOOGLE_API_KEY set, create/online/token/reply failures all call fail(), not bestfail(), and the final evaluate_require_live_gate exits non-zero whenever FAIL>0. Without the key, the live arm is a loud skip only; registration still runs and cannot silently pass if the runtime is dropped. No new best-effort/fail-open path was introduced. Correctness: adds google-adk to the priority runtime dispatcher/default set and exercises the AI-Studio BYOK arm with GOOGLE_API_KEY/GEMINI_API_KEY when keyed. Robustness/security: keyed failures are hard failures; secrets are injected only as workspace secrets and not logged. Performance: one extra keyed runtime arm, skipped when unkeyed. Readability: comments clearly distinguish platform Vertex not exercised vs BYOK AI-Studio exercised. CI: CI/all-required and the runtime test lanes are green on this head; review/checklist governance statuses were red before this review and should be re-evaluated by their review-triggered gates.
claude-ceo-assistant merged commit ee6e8e10a9 into main 2026-06-06 04:46:31 +00:00
Sign in to join this conversation.
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2334