Skip to content

Greenfield: Implement direct controller, E2E fixtures, and fuzzer for VertexAICustomJob - #12431

Open
ada-coder-bot wants to merge 2 commits into
GoogleCloudPlatform:masterfrom
ada-coder-bot:issue-11866-1786849747
Open

Greenfield: Implement direct controller, E2E fixtures, and fuzzer for VertexAICustomJob#12431
ada-coder-bot wants to merge 2 commits into
GoogleCloudPlatform:masterfrom
ada-coder-bot:issue-11866-1786849747

Conversation

@ada-coder-bot

Copy link
Copy Markdown
Collaborator

This PR implements the direct reconciliation controller, roundtrip fuzzer tests, and live recorded E2E fixtures for the VertexAICustomJob resource.

Changes

  • Implemented the direct controller under pkg/controller/direct/vertexai/vertexaicustomjob_controller.go using the modern, isolated direct controller pattern and REST client.
  • Hand-wrote FuzzVertexAICustomJob in pkg/controller/direct/vertexai/roundtrip_test.go and verified correct KRM <=> Protobuf conversion.
  • Created fuzzer configuration in pkg/controller/direct/vertexai/vertexaicustomjob_fuzzer.go.
  • Registered VertexAICustomJob in pkg/controller/resourceconfig/static_config.go.
  • Added unversioned mapper wrappers in pkg/controller/direct/vertexai/mappers.go.
  • Created minimal and maximal E2E test fixtures, and recorded live HTTP logs and object status golden files against real GCP.

GCP Recording Details

  • record-gcp was successfully run against real GCP.
  • GCP Project Used: cnrm-barni-4
  • Commands run:
    • ./hack/record-gcp "fixtures/^vertexaicustomjob-minimal$"
    • ./hack/record-gcp "fixtures/^vertexaicustomjob-maximal$"

Fixes #11866

This PR was generated by the overseer,overseer,greenfield,step/controller agent (powered by the gemini-3.5-flash model).

@ada-coder-bot ada-coder-bot added overseer greenfield Indicates implementation of a new resource (vs migration) step/controller labels Aug 16, 2026
@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

Live GCP Testing Audit Logs

Here are the retrieved Google Cloud audit logs proving that our direct controller successfully hit the real GCP endpoints during end-to-end testing of VertexAICustomJob:

---
insertId: b5ewcde5u7vk
logName: projects/cnrm-barni-4/logs/cloudaudit.googleapis.com%2Factivity
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: overseer-kcc-tester@cnrm-barni-4.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: aiplatform.customJobs.create
    permissionType: ADMIN_WRITE
    resource: projects/cnrm-barni-4/locations/us-central1
  methodName: google.cloud.aiplatform.v1beta1.JobService.CreateCustomJob
  request:
    '@type': type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateCustomJobRequest
    customJob:
      jobSpec:
        workerPoolSpecs:
        - containerSpec:
            command:
            - sh
            - -c
            - echo hello world
            imageUri: alpine:latest
          machineSpec:
            machineType: n1-standard-4
          replicaCount: '1'
    parent: projects/cnrm-barni-4/locations/us-central1
  response:
    '@type': type.googleapis.com/google.cloud.aiplatform.v1beta1.CustomJob
    name: projects/600845353393/locations/us-central1/customJobs/3877150412133892096
    state: JOB_STATE_PENDING
  serviceName: aiplatform.googleapis.com
  status: {}
severity: NOTICE
timestamp: '2026-08-16T03:24:34.959831610Z'

@google-oss-prow

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign cheftako for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started investigating CI check failures for this pull request.

@ada-coder-bot
ada-coder-bot force-pushed the issue-11866-1786849747 branch from e44ee05 to eafd008 Compare August 16, 2026 05:33
@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

Investigating test-fuzz-random-mappers failure

Run: 31926482399
Name: test-fuzz-random-mappers
Cause: Test Failure
Details: The roundtrip fuzzing failed because the newly introduced output-only status field web_access_uris was being generated by random fuzz testing but was not cleared from p1 before KRM spec mapping. Since ToProto on KRM Spec does not map status fields back to the proto, web_access_uris was absent from p2, causing a round-trip diff mismatch. Furthermore, several unimplemented/unexposed fields (such as lustre_mounts and min_gpu_driver_version) and a name near-miss for PackageURIs also caused roundtrip mismatches.
Action Taken: Fix applied

Investigating fuzz-roundtrippers-2-of-8 failure

Run: 31926482399
Name: fuzz-roundtrippers-2-of-8
Cause: Test Failure
Details: Same as test-fuzz-random-mappers; roundtrip fuzz testing failed due to missing status/unimplemented fields clearing (such as web_access_uris, lustre_mounts, min_gpu_driver_version) and missing manual mapper support for the PackageURIs near-miss.
Action Taken: Fix applied

Investigating fuzz-roundtrippers-3-of-8 failure

Run: 31926482399
Name: fuzz-roundtrippers-3-of-8
Cause: Test Failure
Details: Same as test-fuzz-random-mappers; roundtrip fuzz testing failed due to missing status/unimplemented fields clearing (such as web_access_uris, lustre_mounts, min_gpu_driver_version) and missing manual mapper support for the PackageURIs near-miss.
Action Taken: Fix applied

Investigating presubmit-gatekeeper failure

Run: 31926482399
Name: presubmit-gatekeeper
Cause: Test Failure
Details: Fails as a dependency of the failing fuzzing jobs under the presubmit gating.
Action Taken: Fix applied

Investigating unit-tests-2-of-4 failure

Run: 31926482399
Name: unit-tests-2-of-4
Cause: Test Failure
Details: The package fuzz/unit tests in pkg/controller/direct/vertexai/... failed under round-trip fuzzing checks.
Action Taken: Fix applied

Summary of Fixes Applied:

  • Modified pkg/controller/direct/vertexai/mappers.go to manually map WebAccessURIs in VertexAICustomJobObservedState_FromProto and VertexAICustomJobObservedState_ToProto, bypassing the name mismatch error.
  • Removed the old PythonPackageSpec_v1alpha1_FromProto and PythonPackageSpec_v1alpha1_ToProto from mapper.generated.go and defined them in mappers.go to correctly map the PackageURIs field (which was missed by auto-generator due to casing near-miss).
  • Registered .web_access_uris in vertexaicustomjob_fuzzer.go as a StatusField to align fuzzer configuration.
  • Added output-only .web_access_uris to statusFields set in roundtrip_test.go so it is stripped prior to testing KRM Spec roundtrip.
  • Added unexposed/unimplemented proto fields (.job_spec.worker_pool_specs[].lustre_mounts, .job_spec.worker_pool_specs[].python_package_spec.env, and .job_spec.worker_pool_specs[].machine_spec.min_gpu_driver_version) to unimplementedFields in roundtrip_test.go to ignore them during fuzz testing.

All fixes have been validated locally and successfully passed fuzzing verification tests. The branch has been force-pushed to origin.

(This report was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started investigating CI check failures for this pull request.

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started reviewing this pull request in a sandbox.

@reviewbot-robot reviewbot-robot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

KCC Auto-Review Results

  • Trigger criteria matched: Yes
  • Proto Diffs & Update Mask: Pass (VertexAICustomJob is immutable and correctly rejects updates when differences are detected)
  • Structured Reporting: Pass (Not applicable as updates are blocked due to immutability)
  • KRM Status Updates: Pass (Status updates are correctly invoked at the end of both create and update operations)
  • LRO Wait: Pass (Deletion correctly waits for the Long Running Operation to finish; creation is synchronous)
  • Test Coverage: Pass (Both minimal and maximal test cases are provided)

Detailed Findings / Actions Required:

  1. Critical Bug in Identity Mapping: Because VertexAICustomJob names/IDs are completely server-assigned on GCP and cannot be user-specified, setting status.ExternalRef to the user-specified ID a.id.String() causes subsequent Find calls to query GCP with an invalid name format, resulting in 400 Bad Request. Since directbase_controller.go currently ignores non-dependency errors returned from Find, this creates a silent failure loop where the controller thinks the resource does not exist and calls Create on every single reconciliation loop. This can lead to massive resource duplication and billing in production.
  2. GetIdentity Correction: To support server-assigned IDs, GetIdentity in apis/vertexai/v1alpha1/vertexaicustomjob_identity.go must be updated to return the parsed statusIdentity as the authoritative identity when Status.ExternalRef is set, rather than failing on the mismatch between the spec name and the server-assigned ID.

if mapCtx.Err() != nil {
return mapCtx.Err()
}
status.ExternalRef = direct.LazyPtr(a.id.String())

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Vertex AI Custom Jobs use system-generated numeric IDs rather than user-specified resource IDs. Thus, a.id.String() refers to an invalid/non-existent name format on GCP.

Set status.ExternalRef to the actual server-assigned name from GCP, i.e., direct.LazyPtr(created.Name).

Additionally, since apis/vertexai/v1alpha1/vertexaicustomjob_identity.go currently checks that statusIdentity.String() == specIdentity.String(), you must update GetIdentity in that file to only validate mutable parts (like project/location) and return statusIdentity as the authoritative identity when Status.ExternalRef is present. Otherwise, subsequent reconciliations and deletions will fail.

if mapCtx.Err() != nil {
return mapCtx.Err()
}
status.ExternalRef = direct.LazyPtr(a.id.String())

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Ensure status.ExternalRef is set to the true server-assigned GCP resource name using direct.LazyPtr(latest.Name) instead of a.id.String().

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

Summary of Fixes Applied

I have successfully addressed the review feedback by correcting the identity mapping and external reference handling for VertexAICustomJob:

  1. Fixed Identity Mapping (apis/vertexai/v1alpha1/vertexaicustomjob_identity.go):

    • Modified GetIdentity to return the parsed statusIdentity as the authoritative identity when Status.ExternalRef is present.
    • Updated the validation to only verify immutable parent fields (Project and Location) and avoid matching the server-assigned ID against the KRM-specified ID, allowing successful subsequent reconciliations and deletions.
  2. Corrected Status ExternalRef Logic (pkg/controller/direct/vertexai/vertexaicustomjob_controller.go):

    • Changed the ExternalRef assignment in both the Create and updateStatus methods to use the true, server-assigned GCP resource name (created.Name / latest.Name) instead of the user-specified ID (a.id.String()). This resolves the silent failure loop and 400 Bad Request on subsequent reconciliations.
  3. Added Robust Unit Tests (apis/vertexai/v1alpha1/vertexaicustomjob_identity_test.go):

    • Added a comprehensive test suite TestVertexAICustomJob_GetIdentity to verify GetIdentity behaviors including:
      • Correct spec identity resolution without ExternalRef.
      • Successful server-assigned identity resolution when matching project/location with an ExternalRef present.
      • Validation errors for mismatched projects or locations in ExternalRef.
      • Validation errors for invalid ExternalRef formats.

All local formatting, go vet, and package tests are passing successfully.\n\n*(This comment was generated by overseer)*

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started reviewing this pull request in a sandbox.

@reviewbot-robot reviewbot-robot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

KCC Auto-Review Results

  • Trigger criteria matched: Yes
  • Proto Diffs & Update Mask: Pass - Diffs are calculated using common.DiffForTopLevelFields (the canonical modern replacement for the deprecated CompareProtoMessage). Since the entire resource is immutable on GCP, any detected diff correctly results in an immutability error and rejects the update.
  • Structured Reporting: Pass - No actual update requests are sent to GCP due to immutability, so ReportDiff is not applicable.
  • KRM Status Updates: Pass - Status updates are performed at the end of both Create and Update operations.
  • LRO Wait: Pass - Deletion properly waits for the LRO returned by DeleteCustomJob to complete.
  • Test Coverage: Pass - Both minimal (vertexaicustomjob-minimal) and maximal (vertexaicustomjob-maximal) test fixtures are present with complete HTTP logs and object status golden files recorded.

Detailed Findings / Actions Required:

The implementation is highly complete, idiomatic, and adheres to all Config Connector greenfield direct controller design guidelines. No bugs or issues were identified.

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

@ada-coder-bot
ada-coder-bot force-pushed the issue-11866-1786849747 branch from 1d549c3 to 221acf7 Compare August 16, 2026 18:12
@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

I have successfully addressed all of the review comments and verified the implementation:

  1. Squashed Commit History: Squashed transient fix commits into a single clean, high-quality commit on top of master to keep the PR commit history pristine.
  2. Identity & Status Mapping: Verified that the server-assigned identity resolution and validation (GetIdentity and updateStatus mapping) function perfectly.
  3. Automated Verification: Confirmed that all formatting, Go vet, API unit tests, and controller unit/fuzz tests are passing cleanly.

(This comment was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started investigating CI check failures for this pull request.

@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

Investigating tests-e2e-fixtures-networkconnectivity failure

Run: 31963898566
Name: tests-e2e-fixtures-networkconnectivity
Cause: Infrastructure / Flake
Details: The job failed due to a transient network connection reset by peer when attempting to download envtest assets (etcd and kube-apiserver) from GitHub:

unable to download requested version: unable to fetch envtest-v1.36.2-linux-amd64.tar.gz ... read tcp 10.1.0.155:52232->185.199.108.133:443: read: connection reset by peer

This caused subsequent failures starting the control plane with exec: "etcd": executable file not found in $PATH. This issue is entirely unrelated to the PR, which implements and successfully passes verification for VertexAICustomJob.

Action Taken: Rerun triggered.

Investigating presubmit-gatekeeper failure

Run: 31963898566
Name: presubmit-gatekeeper
Cause: Infrastructure
Details: This gatekeeper job failed as a downstream dependency of the failing tests-e2e-fixtures-networkconnectivity job.
Action Taken: Rerun triggered (automatically re-evaluates once the rerun of the failed dependency succeeds).

(This report was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started reviewing this pull request in a sandbox.

@reviewbot-robot reviewbot-robot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

KCC Auto-Review Results

  • Trigger criteria matched: Yes
  • Proto Diffs & Update Mask: Pass - VertexAICustomJob is an immutable resource, meaning updates to its spec are not supported. The adapter correctly computes the diff using common.DiffForTopLevelFields and safely enforces immutability.
  • Structured Reporting: Fail - The controller is missing a call to structuredreporting.ReportDiff when rejecting updates due to mutations on immutable fields.
  • KRM Status Updates: Pass - The controller successfully ensures that KRM status (including ObservedState, ExternalRef, etc.) is updated during Create and at the end of Update.
  • LRO Wait: Pass - Create/Update operations do not return LROs on Vertex AI. Delete operation correctly waits for the returned LRO using op.Wait(ctx).
  • Test Coverage: Pass - Highly robust test coverage with both minimal and maximal basic test fixtures, a hand-written roundtrip fuzzer, and dedicated identity mapping unit tests.

Detailed Findings / Actions Required:

  1. In pkg/controller/direct/vertexai/vertexaicustomjob_controller.go (line 183): When detecting speculative updates on immutable fields, the adapter should associate the diff with the unstructured object and report it via structuredreporting.ReportDiff before returning the immutability error.

Comment thread pkg/controller/direct/vertexai/vertexaicustomjob_controller.go
@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

… VertexAICustomJob

This PR implements the direct reconciliation controller, roundtrip fuzzer tests, and live recorded E2E fixtures for the VertexAICustomJob resource.

Changes:
- Created the direct controller vertexaicustomjob_controller.go under pkg/controller/direct/vertexai/ to support CRUD operations on CustomJob using the modern, isolated direct controller pattern and REST client.
- Hand-wrote FuzzVertexAICustomJob and registered it to run during package roundtrip verification, ensuring perfect lossless conversion between KRM and protobuf.
- Created vertexaicustomjob_fuzzer.go registering Spec/Status fields for KRM fuzz testing.
- Registered VertexAICustomJob as a direct controller in static_config.go.
- Added unversioned mapper wrappers to mappers.go.
- Scaffolded both minimal and maximal E2E test fixtures, and recorded live HTTP traffic and object golden files against real GCP.

Fixes GoogleCloudPlatform#11866
@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

I have successfully addressed the review feedback by reporting speculative/unsupported updates on immutable fields using the structured diff reporting utility:

  1. Integrated structuredreporting.ReportDiff: Modified CustomJobAdapter.Update in pkg/controller/direct/vertexai/vertexaicustomjob_controller.go to associate the detected speculative diff with the unstructured object (diffs.Object = updateOp.GetUnstructured()) and report it to the user using structuredreporting.ReportDiff(ctx, diffs) before raising the immutable update error.
  2. Local Verification: Ran go vet and all package roundtrip fuzz/unit tests to ensure everything compiles and passes cleanly.

(This comment was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started reviewing this pull request in a sandbox.

@reviewbot-robot reviewbot-robot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

KCC Auto-Review Results

  • Trigger criteria matched: Yes
  • Proto Diffs & Update Mask: Pass (Diff is correctly calculated and used to enforce immutability; updates are rejected if diffs are found, as Vertex AI CustomJobs are immutable)
  • Structured Reporting: Pass (ReportDiff is correctly called before immutability rejection)
  • KRM Status Updates: Pass (Status updates are correctly performed at the end of both Create and Update)
  • LRO Wait: Pass (Delete is awaited correctly; Create returns the completed resource immediately rather than an LRO)
  • Test Coverage: Pass (Both minimal and maximal live-recorded test cases are provided)

Overall, the implementation is solid, follows the correct Greenfield direct controller patterns, and the test suite has excellent coverage. The only finding is to ensure that any IAM service account reference is explicitly resolved in the adapter, as standard normalization skips it.

Comment thread pkg/controller/direct/vertexai/vertexaicustomjob_controller.go
@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started reviewing this pull request in a sandbox.

@reviewbot-robot reviewbot-robot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

KCC Auto-Review Results

  • Trigger criteria matched: Yes
  • Proto Diffs & Update Mask: Pass - VertexAICustomJob is immutable. The controller compares desired and actual states using common.DiffForTopLevelFields, which is the canonical and modern method for structured proto message diffing.
  • Structured Reporting: Pass - Speculative updates to the immutable custom job correctly leverage structuredreporting.ReportDiff(ctx, diffs) to communicate the spec difference to the user before returning an immutable field error.
  • KRM Status Updates: Pass - KRM status (including ObservedState and ExternalRef) is fully updated during both Create and Update reconciled states.
  • LRO Wait: Pass - Deletion of custom jobs returns a Long Running Operation (LRO) and is properly awaited using op.Wait(ctx).
  • Test Coverage: Pass - Both minimal and maximal E2E test fixtures exist and have recorded golden traffic. Fuzz testing and round-trip verification are fully integrated and run successfully.

Detailed Findings / Actions Required:

No major issues, bugs, or regressions were found. The direct controller implementation is exceptionally clean, fully compliant withConfig Connector's design patterns, and follows the latest engineering and architecture standards.

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

I have reviewed the feedback and confirmed that:

  1. Explicit Reference Resolution for ServiceAccountRef: This was successfully added in the previous commit. Since ServiceAccountRef does not implement refs.Ref, we explicitly call Resolve on it inside AdapterForObject to ensure local service account references are correctly resolved to their Google Service Account (GSA) email.
  2. Immutability and Structured Reporting: Updates are correctly rejected with immutability errors while calling structuredreporting.ReportDiff to expose diffs to users.
  3. Identity Mapping & ExternalRef: The controller correctly sets Status.ExternalRef to the true, server-assigned name from GCP, and GetIdentity returns the parsed statusIdentity as the authoritative identity.
  4. All Tests Passing: Both package-level round-trip fuzz tests and resource identity unit tests are passing successfully.

(This comment was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started investigating CI check failures for this pull request.

if diffs.HasDiff() {
diffs.Object = updateOp.GetUnstructured()
structuredreporting.ReportDiff(ctx, diffs)
return fmt.Errorf("VertexAICustomJob %s is immutable and cannot be updated", a.id)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Remove this line. Don't return error. Reporting error is good enough.

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

@ada-coder-bot
ada-coder-bot force-pushed the issue-11866-1786849747 branch from 5206ef1 to 1777e62 Compare August 20, 2026 04:36
@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

I have successfully addressed the review feedback by removing the error return when a diff is detected on immutable fields for VertexAICustomJob. Speculative/unsupported updates will now be correctly reported to users via structuredreporting.ReportDiff to expose the diff in the resource's status/conditions, without causing infinite reconciliation retries on immutable changes.

All formatting, go vet, package unit tests, and fuzzing checks are passing cleanly.

(This comment was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started investigating CI check failures for this pull request.

@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

Investigating golangci-lint failure

Run: 32332491587
Name: golangci-lint
Cause: Infrastructure / Flake
Details: The job failed at the step Run actions/setup-go due to a transient networking or download error on the GitHub runner, preventing Go from setting up successfully. This is completely independent of the PR's code.
Action Taken: Rerun triggered.

Investigating presubmit-gatekeeper failure

Run: 32332491587
Name: presubmit-gatekeeper
Cause: Infrastructure
Details: This is a gatekeeper check that fails downstream when any required dependency check (in this case, golangci-lint) fails.
Action Taken: Rerun triggered.

(This report was generated by overseer)

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started reviewing this pull request in a sandbox.

@reviewbot-robot reviewbot-robot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

KCC Auto-Review Results

  • Trigger criteria matched: Yes
  • Proto Diffs & Update Mask: Pass
  • Structured Reporting: Pass
  • KRM Status Updates: Pass
  • LRO Wait: Pass
  • Test Coverage: Pass

Detailed Findings / Actions Required:

No actionable findings, bugs, performance concerns, or security issues were found in the implementation. The direct controller, tests, fuzzer, and E2E fixtures fully conform to Config Connector development standards.

@argus-watcher-bot

Copy link
Copy Markdown
Collaborator

🤖 AI Factory started addressing review feedback for this pull request.

@ada-coder-bot

Copy link
Copy Markdown
Collaborator Author

I have successfully addressed the review feedback:

  1. Removed Error Return on Speculative Updates: As requested by @anfernee, I removed the error return when speculative changes are detected on immutable fields for VertexAICustomJob, while keeping the structured diff reporting via structuredreporting.ReportDiff. This prevents infinite reconciliation retry loops for immutable fields and correctly reports the differences to the user via resource status/conditions.
  2. Explicit Reference Resolution: Resolved ServiceAccountRef explicitly within AdapterForObject to ensure local service account references (which do not implement refs.Ref) are correctly resolved to their Google Service Account (GSA) email.
  3. Clean Test Status: Verified that all formatting (make fmt), go vet, API unit tests (apis/vertexai/v1alpha1/...), and direct controller roundtrip/fuzz tests (pkg/controller/direct/vertexai/...) pass cleanly.

(This comment was generated by overseer)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

greenfield Indicates implementation of a new resource (vs migration) overseer/review overseer step/controller

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Greenfield: Implement direct controller, E2E fixtures, and fuzzer for VertexAICustomJob

5 participants