Task · GCV-0010

Bump the provider pin to the release carrying Agent Observability and the new App Platform kinds

Description

The pinned Grafana Crossplane provider (v2.13.0) is generated against Terraform provider v4.40.1 and exposes 111 of the 121 upstream resources. The ten absent resources are the five Agent Observability kinds plus Alerting RoutingtreeV1Beta1 and RulesequenceV0Alpha1, oss QueryV1, cloud ComponentV1Alpha1, and assistant TermsAcceptance.

Cause: the provider’s generator panics on an upstream resource category it does not recognise, and ‘Agent Observability’ was added upstream in Terraform provider v4.43.0 without a matching entry. An upstream PR adds that entry and regenerates; it is green but awaiting review. Once a provider release carries it, this repository moves its pin.

Moving the pin is not just a digest change. It touches the cosign verification identity, the Provider package reference, and the ManagedResourceActivationPolicy, which currently activates 19 kinds by name and must gain any newly emitted kind. The README provider-family table is the extension index and records the ownership decision per family, so a new family needs a row.

Do not activate kinds speculatively. Activation is driven by what the Compositions actually emit.

Acceptance Criteria

Definition of Done

Implementation Notes

Pinned to a main-branch build rather than a release

The release that GCV-0010 was waiting for does not exist. PR 658, the reference on this task, was closed; PR 654 superseded it, merged 2026-08-25, and moved the provider to Terraform provider 4.45.1 with the generator entry that was missing. config/groups.go on main now carries "Agent Observability": {"agento11y", 1}. The newest tag is still v2.13.0 from 2026-07-03, and releases are cut only on a v* tag push, so a release is a human action nobody has taken.

Decision, taken by the repository owner: pin the main build now and let Renovate track it, rather than wait for a tag.

Why that is not a downgrade of the supply-chain control, verified live

ci_tag.yaml runs on push to main and release-* as well as on a v* tag. It publishes to xpkg.upbound.io and ghcr.io and cosign-signs both, so a main build is published and signed by the same workflow file as a release. Verified against the registries, not inferred:

The identity is branch-scoped, so any main build satisfies it and the digest is the real control. That is the same posture this repository already uses for its own function package, which verifies against publish-function.yml@refs/heads/main.

Signatures are stored as OCI referrers under the fallback tag sha256-<digest>, not as a sha256-<digest>.sig tag. A .sig lookup 404s on both registries for the release digest too, so an absent .sig is not evidence of an unsigned package. xpkg needs a bearer token even for anonymous pulls, from https://xpkg.upbound.io/service/token, and exposes no referrers API.

The reference now carries a tag as well as a digest

xpkg.upbound.io/grafana/provider-grafana:v2.13.0-13.gdc79560@sha256:3f442e48… in both spec.package and the verification argv. The registry publishes no floating tag, no latest and no main, both 404, so a digest-only reference gives Renovate no version to compare and it cannot see a newer build. cosign resolves the digest and ignores the tag; verified with both reference forms.

renovate.json gains regex versioning on the provider rule: ^v(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)(?:-(?<build>\d+)\.g[0-9a-f]+)?$. Default docker versioning reads the git-describe suffix as a prerelease of the release it is ahead of and would offer v2.13.0 as an upgrade. The build number orders main builds monotonically, and a real v2.14.0 still wins on minor because its release array is shorter and higher. Do not capture the short sha as revision: regex versioning runs Number.parseInt(revision, 10) on it, which is NaN for any sha starting with a letter.

Provider-family parity

121 namespaced kinds across 17 families, up from 111 across 16; agento11y is the new family. 50 observe-only kinds. The ten previously absent resources are all present: the five agento11y kinds, alerting RoutingtreeV1Beta1 and RulesequenceV0Alpha1, oss QueryV1, cloud ComponentV1Alpha1, and assistant TermsAcceptance.

CRD diff across the 19 activated kinds

Sixteen are byte-identical, Role included, so the autoIncrementVersion initializer workaround still applies. Three changed:

No new kind is activated: the activation policy still lists exactly what the Compositions emit.

Upstream behaviour changes across 4.40.1 to 4.45.1 that do not affect this reference

grafana_user update skipping, appplatform folder-uid import, k6 publisher_token added then removed, oncall integration inbound_email, saved queries, servicemodel components. secret_manager_enabled reached no CRD in the generated provider. Fleet Management pipelines gained double canonicalization of Alloy configs, which matters to GCV-0020 rather than here.

Evidence

Local ./scripts/validate.sh green: public-release scan, gofmt, go mod tidy, race tests at 90.7% coverage, vet, YAML parse, four Kustomize renders, example READMEs, ApplicationSet watch path. CodeRabbit review raised two major findings, both fixed: the stale “exact tag workflow identity” wording in docs/security.md and the revision capture group above.

Completed at 66e415a0. Hosted Validate public reference run 33058679814 green on that commit.

References

View the source file on GitHub