Skip to content

refactor: move the Google Vertex files to the upstream layout - #353

Merged
eric8810 merged 21 commits into
masterfrom
refactor/move-the-google-vertex-files-to-the-upstream-layout
Oct 27, 2026
Merged

eric8810 merged 21 commits into
masterfrom
refactor/move-the-google-vertex-files-to-the-upstream-layout

Conversation

@cunninghamcard-bit

@cunninghamcard-bit cunninghamcard-bit commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Summary

把 src/vertex/ 按 @ai-sdk/google-vertex@5.0.98 一个文件对一个文件重排(RFC-0046 §4.2),老的五个 vertex 测试程序并进厂商测试目录 src/vertex/tests/(RFC-0046 §5)。函数体只改了路径和可见性;根上的再导出不变,vertex::image 不再是公开模块。测试数量、模块路径(去掉文件前缀)和函数名前后一致;三个读环境区域的老用例加了 #[serial](见“共享进程状态”)。叠在测试 PR #352 上。实施进度在 #328 跟踪。

已经测试分支 49266ef3 合上 master b69137eb,冲突按 master 的改动搬到新位置解决(mod.rs 的改动落到 provider_base.rs,embedding 的改动落到 embedding_model.rs、embedding_model_options.rs,两个合作 provider 的文档落到 maas/、xai/,老测试程序里的错误模式改成结构体变体);测试数前后仍相等(243 个:测试分支 lib 199 个加老测试程序 44 个,名字多重集相同)。

一、体系现状(概览,测试 PR #352 头 872d7214)

aimux_providers::create_google_vertex                 src/vertex/mod.rs:368
 └ VertexProvider(Resolver:模式、项目/区域、凭证)     src/vertex/mod.rs:423、:239
   ├ chat / call / Provider::language_model → GoogleModel
   │                                                  src/vertex/mod.rs:477、:564、:569
   ├ embedding → VertexEmbeddingModel                 src/vertex/mod.rs:492 → src/vertex/embedding.rs:46
   │  └ parse_vertex_provider_options                 src/vertex/embedding.rs:72 → :268
   ├ image → VertexImageModel                         src/vertex/mod.rs:502 → src/vertex/image.rs:221
   ├ video → VertexVideoModel                         src/vertex/mod.rs:512 → src/vertex/video.rs:67
   ├ transcription → VertexTranscriptionModel / VertexGeminiTranscriptionModel
   │                                                  src/vertex/mod.rs:544 → src/vertex/transcription.rs:148、src/vertex/gemini_transcription.rs:85
   └ Resolver::headers → GoogleAuth::access_token     src/vertex/mod.rs:320 → src/vertex/auth.rs:170
aimux_providers::create_google_vertex_anthropic       src/vertex/anthropic_provider.rs:45
 └ VertexAnthropicProvider::call → model             src/vertex/anthropic_provider.rs:84 → src/vertex/anthropic_model.rs:63
aimux_providers::create_google_vertex_maas / _xai     src/vertex/partner_provider.rs:213、:296
 └ partner_parts(基址、Authorization)              src/vertex/partner_provider.rs:216、:299 → :154

上游同一条路:createVertex(google-vertex-provider.ts)包 createVertexBase(google-vertex-provider-base.ts),后者建 Gemini 模型(复用 @ai-sdk/google)和 GoogleVertexEmbeddingModel、-ImageModel、-VideoModel、-TranscriptionModel、GoogleVertexGeminiTranscriptionModel(gemini-transcription/),凭证在 google-vertex-auth-google-auth-library.ts;anthropic/、maas/、xai/ 三个子包各有 provider、-node、edge/ 和 index.ts。aimux 把 provider 放在 mod.rs,把 MaaS 和 xAI 放在一个 partner_provider.rs,Anthropic 的模型配置单独在 anthropic_model.rs。

测试:#352 的新用例在 src/vertex/tests/(199 个),老用例还在五个独立测试程序 tests/{google_vertex_image_test, vertex_location_validation_test, vertex_transcription_test, vertex_upstream_e2e_test, vertex_video_test}.rs(9 + 8 + 5 + 19 + 3 = 44 个)。

二、本 PR 改动(细节)

aimux_providers::create_google_vertex                 src/vertex/provider_base.rs:346        ← google-vertex-provider-base.ts、google-vertex-provider.ts
 └ VertexProvider(Resolver)                          src/vertex/provider_base.rs:401、:214
   ├ chat / call / Provider::language_model → GoogleModel
   │                                                  src/vertex/provider_base.rs:455、:542、:547
   ├ embedding → VertexEmbeddingModel                 src/vertex/provider_base.rs:470 → src/vertex/embedding_model.rs:46   ← google-vertex-embedding-model.ts
   │  └ parse_vertex_provider_options                 src/vertex/embedding_model.rs:72 → src/vertex/embedding_model_options.rs:19   ← google-vertex-embedding-model-options.ts
   ├ image → VertexImageModel                         src/vertex/provider_base.rs:480 → src/vertex/image_model.rs:221   ← google-vertex-image-model.ts
   ├ video → VertexVideoModel                         src/vertex/provider_base.rs:490 → src/vertex/video_model.rs:67   ← google-vertex-video-model.ts
   ├ transcription → VertexTranscriptionModel / VertexGeminiTranscriptionModel
   │                                                  src/vertex/provider_base.rs:522 → src/vertex/transcription_model.rs:148、src/vertex/gemini_transcription/gemini_transcription_model.rs:85
   └ Resolver::headers → GoogleAuth::access_token     src/vertex/provider_base.rs:298 → src/vertex/auth_google_auth_library.rs:170   ← google-vertex-auth-google-auth-library.ts
aimux_providers::create_google_vertex_anthropic       src/vertex/anthropic/anthropic_provider.rs:73   ← anthropic/google-vertex-anthropic-provider.ts
 └ VertexAnthropicProvider::call → model             src/vertex/anthropic/anthropic_provider.rs:112 → :167
aimux_providers::create_google_vertex_maas            src/vertex/maas/maas_provider.rs:37    ← maas/google-vertex-maas-provider.ts
aimux_providers::create_google_vertex_xai             src/vertex/xai/xai_provider.rs:68      ← xai/google-vertex-xai-provider.ts
 └ partner_parts(两者共用)                          src/vertex/partner_provider.rs:146
现在 搬到 上游
vertex/mod.rs 的模块文档、mod 和 pub use vertex/mod.rs(只有模块声明、pub use 和三个 pub(crate) use) index.ts
vertex/mod.rs 的其余部分(常量、设置、check_location、Publisher、ProjectLocation(Source)、GeminiEndpoint、Resolver、create_google_vertex、google_vertex、VertexProvider 和它的 Provider/ProviderDiscovery 实现,:64–611)和 VertexModel 别名 vertex/provider_base.rs google-vertex-provider-base.ts;google-vertex-provider.ts、-config.ts、-options.ts、edge/google-vertex-provider-edge.ts、edge/index.ts 在 aimux 没有单独的代码,layout.toml 指到这个文件
vertex/auth.rs 整个文件 vertex/auth_google_auth_library.rs google-vertex-auth-google-auth-library.ts;aimux 只有一条凭证路径,没有自成一段的 edge 代码,edge/google-vertex-auth-edge.ts 也指到这里
vertex/auth_certificate.rs、auth_external.rs 不动 aimux 独有
vertex/embedding.rs :1–254 vertex/embedding_model.rs google-vertex-embedding-model.ts
vertex/embedding.rs :256–327(VertexEmbeddingProviderOptions、parse_vertex_provider_options) vertex/embedding_model_options.rs google-vertex-embedding-model-options.ts
vertex/image.rs(原来 pub mod image) vertex/image_model.rs(私有模块) google-vertex-image-model.ts;-image-model-options.ts、-image-settings.ts 指到这里
vertex/transcription.rs vertex/transcription_model.rs google-vertex-transcription-model.ts;-options.ts 指到这里
vertex/video.rs vertex/video_model.rs google-vertex-video-model.ts;-options.ts、-video-settings.ts 指到这里
vertex/gemini_transcription.rs vertex/gemini_transcription/gemini_transcription_model.rs(mod.rs 只做导出) gemini-transcription/google-vertex-gemini-transcription-model.ts;-options.ts 指到这里
vertex/anthropic_provider.rs + anthropic_model.rs vertex/anthropic/anthropic_provider.rs(mod.rs 只做导出) anthropic/google-vertex-anthropic-provider.ts;-options.ts、-provider-node.ts、edge/* 指到这里,anthropic/index.ts 指 anthropic/mod.rs
vertex/partner_provider.rs :186–244(maas_request_body、create_google_vertex_maas、google_vertex_maas) vertex/maas/maas_provider.rs maas/google-vertex-maas-provider.ts;-options.ts、-provider-node.ts、edge/* 指到这里,maas/index.ts 指 maas/mod.rs
vertex/partner_provider.rs :246–369(xai_usage、xai_request_body、create_google_vertex_xai、google_vertex_xai、VertexXaiProvider) vertex/xai/xai_provider.rs xai/google-vertex-xai-provider.ts;同上,xai/index.ts 指 xai/mod.rs
vertex/partner_provider.rs :36–184(设置和两个别名、PartnerBaseUrl、PartnerHeaders、partner_parts) 留在 vertex/partner_provider.rs,文档第一行写明是 maas/ 和 xai/ 共用的 aimux 代码 上游在两个 provider 里各写一遍
  • 和计划的出入:image、transcription、video、gemini_transcription 的选项是在 do_generate / do_start 里就地读的,没有单独的选项类型或解析函数,所以没有建 *_options.rs,上游的 options 文件在 layout.toml 里指到模型文件。只有 embedding 有自己的选项结构和解析函数,拆成 embedding_model_options.rs。Anthropic、MaaS、xAI 的 options 文件上游只有模型 id 类型,aimux 没有对应,同样指到 provider 文件。
  • 公开路径:vertex::image 原来是公开模块,现在是私有的 image_model(RFC-0046 §4.5);VertexImageModel 仍从 vertex 和 crate 根导出,其余公开项和 lib.rs 的再导出都不动。旧路径和替代入口写进了 CHANGELOG(见下面 CHANGELOG 一节)。
  • 可见性:原来在 mod.rs 里、子模块直接能用的项现在在兄弟文件里,改为 pub(super):location_host、PROJECT_ENV_VAR、LOCATION_ENV_VAR,Resolver 的 auth、use_access_token_env 字段和 express_key、headers 方法,VertexProvider 的 resolver、fetch、transform_request_body 字段和 project_location 方法;partner_parts,embedding 的选项结构、字段和解析函数也是 pub(super)。anthropic/config.rs 用到的 Resolver、Publisher 和 default_providers.rs 用到的 API_KEY_ENV_VAR 由 vertex/mod.rs 以 pub(crate) use 导出,路径不变。子目录里的文件用 crate::vertex::provider_base::…、crate::vertex::auth_google_auth_library::… 引用;Anthropic 两个文件合并后,super::anthropic_model::model( 变成同文件的 model(。partner_provider.rs 里指向 create_google_vertex_maas / _xai 的文档链接加了 super:: 路径。函数体不变。
  • 测试:五个老文件的 44 个用例按被测文件追加到 tests/image_model.rs(9 个)、tests/transcription_model.rs(5 个)、tests/video_model.rs(3 个)、tests/provider.rs(端到端的 19 个,放在 “Older ports” 一节)和 tests/location_validation.rs(8 个;老的 name_location_validation 模块里的 4 个并进 test: port the upstream Google Vertex tests #352 的同名模块)。每节前面一行注释写明原来的文件,原文件头的说明改成普通注释。和 test: port the upstream Google Vertex tests #352 同名的 default_body、options 改名 wiremock_default_body、wiremock_options;aimux_providers:: 改成 crate::vertex:: / crate::,mock_fetch 改用 crate::test_support::mock_fetch。test: port the upstream Google Vertex tests #352 里 crate::vertex::auth::GoogleAuth 的 import 和两处文档里的 src/vertex/auth.rs 改到新路径,location_validation.rs 文件头说 “老文件” 的那句改成指本文件末尾。
  • layout.toml 的 [vertex] 43 个 rust 字段改到新路径(另有 5 处 reason 里的 vertex/auth.rs);scripts/check_provider_boundaries.sh 的 anthropic_family 把 vertex/anthropic_model.rs 换成 vertex/anthropic 目录,合并后的 anthropic_provider.rs 也过规则 6。

共享进程状态:老测试原来各是单独的测试程序,现在和 #352 的用例同在 lib 的一个测试程序里。vertex 测试动的环境变量有 GOOGLE_VERTEX_LOCATION、GOOGLE_VERTEX_API_KEY、GOOGLE_VERTEX_ACCESS_TOKEN、GOOGLE_APPLICATION_CREDENTIALS(含小写)、CLOUDSDK_CONFIG、GCE_METADATA_HOST、GCE_METADATA_IP,都用 EnvVar 设置并在 #[serial] 用例里;只有老的 validates_the_environment_location 把 GOOGLE_VERTEX_LOCATION 设成非空。老端到端里有三个用例不传 location、读环境里的 GOOGLE_VERTEX_LOCATION(maas_sub_provider_builds_on_openai_compatible、partner_headers_win_over_per_call_headers、partner_user_agent_header_replaces_the_whole_user_agent),原来和那个用例不在同一个程序里,合并后可能同时跑,所以给这三个加了 #[serial],函数体不变(在设了 GOOGLE_VERTEX_LOCATION=user@internal/# 的环境里跑 vertex 测试,这三个是唯一失败的,加了以后都过)。executable_credential_without_the_opt_in_fails_and_spawns_nothing 和 partner_sub_providers_require_a_project 断言 GOOGLE_EXTERNAL_ACCOUNT_ALLOW_EXECUTABLES、GOOGLE_VERTEX_ACCESS_TOKEN、GOOGLE_VERTEX_PROJECT 没设,crate 里没有用例把它们设成非空。计数器(counting_provider、mock_auth_token)都是每个用例自己的 AtomicUsize;唯一的临时路径是 temp_dir()/aimux-vertex-executable-marker-<pid>,只有一个用例用。

CHANGELOG

CHANGELOG Unreleased 的 Breaking 加了一条,列出本家变了的公开子模块路径和替代入口(RFC-0046 §4.5 第 2 条)。

验证

  • cargo test -p aimux-providers --lib vertex:: 加原来五个 --test:前后都是 243 个测试(199 + 44),完整测试路径(老程序名换成对应的 vertex::tests::<文件>)的多重集完全相同,函数名多重集也相同;243 个全过。整个 lib 测试程序连跑 5 次,383 个全过。
  • cargo +1.99 clippy -p aimux-providers --lib --tests -- -D warnings、cargo +1.99 check -p aimux-providers --lib --tests --all-features、RUSTDOCFLAGS="-D warnings" cargo +1.99 doc -p aimux-providers --no-deps、cargo fmt --all -- --check、scripts/check_provider_boundaries.sh、cargo +1.99 check --workspace --tests 通过。

Type of change

  • Refactor (no behavior change)

Checklist

  • Tests pass locally
  • Commit messages follow Conventional Commits

Generated by Claude Code

cunninghamcard-bit and others added 5 commits October 20, 2026 13:44
…d like the AI SDK

A server close before the input audio ended now fails the Gemini Live
transcription stream (Google and Vertex) with `InvalidResponseData`:
"<label> Live transcription WebSocket closed unexpectedly before finishing
(code <code>, reason: <reason>).", the text of the `onClose` handler in
@ai-sdk/google 4.0.87 (google-transcription-model.ts:577) and
@ai-sdk/google-vertex 5.0.100 (google-vertex-gemini-transcription-model.ts:600).
It used to pass on the socket's "websocket closed by peer (code ...)" error.

`aimux_provider_utils::ws::peer_close` reads the close frame back from that
error, so the format stays in ws.rs.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
`VertexImageModel` reports `supports_file_inputs: Some(true)` and
`supports_mask_inputs: Some(false)` for the ids in
`googleVertexImageModelsWithFileInputSupport` (@ai-sdk/google-vertex 5.0.100,
google-vertex-image-model.ts:29-62) and `None` for the rest. It used the
trait default, `None`, for every id.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
Ports the tests of @ai-sdk/google-vertex 5.0.100 (RFC-0045) into
aimux-providers/src/vertex/tests/, one Rust file per upstream test file,
one mod per describe level and an `/// upstream:` marker on every test:
199 tests for 199 of the 251 upstream cases. 5 more are covered by old
tests, marked in the next commit.

The other 47 are in aimux-providers/layout.toml (`[vertex]`): 14
sub-feature (#275) and 17 ts-only exclusions, and the 16 cases of the Cloud
Text-to-Speech model, whose source file is `missing` (#275).

Upstream fixtures are copied unchanged into fixtures/, `toMatchSnapshot`
values become snapshots/*.json. fixtures/aimux-test-rsa-key.pem is a test
key: aimux signs the service-account JWT itself where upstream mocks Web
Crypto. `GoogleAuth.options` is widened to `pub(super)` so the provider
tests can read the options the credential resolver was built with.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
Old tests in tests/vertex_location_validation_test.rs that assert every
expectation of an upstream case move, unchanged, into mod trees named after
its describe chain and carry its `/// upstream:` marker (5). Tests that
cover a case only in part get a `/// partial:` note pointing at the full
port (the `/// TS:` lines they had are replaced).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
Split vertex/ into one file per @ai-sdk/google-vertex source file
(provider_base.rs, auth_google_auth_library.rs, embedding_model.rs and
its options, image_model.rs, transcription_model.rs, video_model.rs,
gemini_transcription/, anthropic/, maas/, xai/) and merge the five old
vertex test programs into src/vertex/tests/. vertex::image is no longer
a public module; the root re-exports are unchanged. The 243 tests are
unchanged; three older partner tests that read GOOGLE_VERTEX_LOCATION
are now #[serial], since they share a binary with the test that sets it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW
claude and others added 4 commits October 24, 2026 09:12
RFC-0046 §4.5 item 2: the vendor move PR lists the old public sub-module
paths and the replacement entry under Unreleased > Breaking.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW
…i-sdk

ws.rs and google/transcription.rs resolve to the same tree as the Google fix PR #362 after its master merge: master's ws_error takes the error source, and closed_before_finishing builds InvalidResponseData with AiMuxError::invalid_response_data.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
…est/port-the-upstream-google-vertex-tests

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW
@cunninghamcard-bit
cunninghamcard-bit marked this pull request as ready for review October 24, 2026 11:35
…eam-google-vertex-tests

# Conflicts:
#	aimux-providers/tests/google_vertex_image_test.rs

@eric8810 eric8810 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vertex layout refactor:243 tests 保留,move-only,公开 API 仅保留声明的变化;在 #352 rebase 后 restack。Approve。

cunninghamcard-bit and others added 4 commits October 25, 2026 08:40
eric's review of #352: four old tests check part of an upstream case
without saying so. They now carry `partial:` notes naming the cases and
their full ports: should_generate_video (vertex_video_test.rs), and in
vertex_upstream_e2e_test.rs the MaaS and xAI sub-provider tests and
partner_headers_win_over_per_call_headers.

The other unmarked old tests have no upstream test case: the region option
check, executable credentials, the partner project and user-agent rules, and
the Gemini behaviours that @ai-sdk/google tests rather than
@ai-sdk/google-vertex. They stay aimux-own.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RoxcKU4zBD64Lri3e4Lrq5
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW
The partial: markers the test branch added to vertex_upstream_e2e_test.rs and
vertex_video_test.rs go on the same cases in src/vertex/tests/provider.rs and
src/vertex/tests/video_model.rs, where the move put them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW

Copy link
Copy Markdown
Contributor Author
eric 的意见(原话) 处理
「在 #352 rebase 后 restack」 已做,c4241b6e:测试分支 #352 现在的头 7f719f0b(合了 master,含你要的 partial: 标注)已合上来。#352 加在 vertex_upstream_e2e_test.rs 和 vertex_video_test.rs 的 4 处 partial: 标注,放到这个 PR 里同一批用例所在的 src/vertex/tests/provider.rs 和 src/vertex/tests/video_model.rs。测试属性数和 partial: 数和 #352 相同(全仓 1990 个、37 处),本地 clippy、文档、格式、边界脚本和全部测试通过。

Generated by Claude Code

Master now carries the Google Vertex test port (#352, squashed). The merge
uses the test branch head 7f719f0 as its base, so only master's own
changes since then come in; nothing conflicted.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW
@cunninghamcard-bit
cunninghamcard-bit changed the base branch from test/port-the-upstream-google-vertex-tests to master October 25, 2026 11:39

Copy link
Copy Markdown
Contributor Author

#352 已 squash 合入 master,本 PR 的 base 已改为 master。

项目 状态
合入 master 209be26 合并提交 41dd77d,以 #352 的分支头为合并基,无冲突
diff 是否变化 master..HEAD 与之前批准的 #352 头..旧头 的 --stat 完全一致,仍是纯移动
用例数 2027,与 master 相同
本地检查 fmt、边界脚本、clippy(1.99,-D warnings)、文档、全部测试均通过

Generated by Claude Code

…he-upstream-layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW
…he-upstream-layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW

@eric8810 eric8810 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebase is content-preserving: only master/parent merges and CHANGELOG/layout conflict resolution; tests and CI unchanged. Re-approving current head.

…oogle-vertex-files-to-the-upstream-layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW

@eric8810 eric8810 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebase verified content-preserving: only master/parent merges and CHANGELOG/layout conflict resolution; CI 16/16. Re-approving current head.

…oogle-vertex-files-to-the-upstream-layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW

@eric8810 eric8810 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebase verified content-preserving: only master/parent merges and conflict resolution; CI 16/16. Re-approving current head.

…oogle-vertex-files-to-the-upstream-layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW

@eric8810 eric8810 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebase verified content-preserving: only master/parent merges and conflict resolution; CI 16/16. Re-approving current head.

…oogle-vertex-files-to-the-upstream-layout

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0116HPMoqaLfFr1TyqDq1hrW

@eric8810 eric8810 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebase verified content-preserving: only master merges and conflict resolution; CI 16/16. Re-approving current head.

@eric8810
eric8810 merged commit 764b0eb into master Oct 27, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants