Repository navigation
feat(acceptance): nightly full suite in 8 groups and its regressions (#2221) - #2235
Merged
Merged
Conversation
…2221) Changes platform_info (pkg/platform info_tool.go), the memory and call index vector writes, save_asset, the index job claim (pkg/indexjobs), the catalog scan loop, the upstream OAuth token lifetime (internal/upstreamauth, new tokenexpiry package, oauth_token_lifetime key), the tile worker's own-file reads, .github/workflows/e2e-nightly.yml, the Makefile and scripts/acceptance-env.py; four tickets, the whole of epic #2221: 1. #2216 platform_info: features reports query_enrichment and storage_enrichment again (always false), so a client holding the output schema releases up to v1.145.0 advertised accepts the result; the past output schemas test data holds it. 2. #2217 memory retention: embedding a memory record, and the recall check, no longer set updated_at (RecordUpdate.KeepUpdatedAt), so neither restarts an archived record's retention. 3. #2218 the full acceptance suite runs in the E2E Nightly in eight groups by ticket number (ACCEPTANCE_SHARD=i/N, scripts/acceptance-env.py --shard), plus the worker-off and clickstack environments; make verify-release no longer runs the suite and keeps acceptance-release-check. 17 stale criteria were brought up to date, and the full runs found these product defects, fixed here: - save_asset recorded references after the first version, so the tile worker could draw the page before its referenced files were granted; - the index queue served one kind's backlog before every other kind's jobs; kinds now take turns per claimer; - a catalog "Scan now" made during another replica's scan waited for the next poll; the scan holding the lock serves it before releasing; - a token response without expires_in was reused for a fixed 15 minutes; oauth_token_lifetime sets it per api and graphql connection; - an own file the platform was slow to serve was recorded as missing on the tile; it now answers 503 and the tile is retried; - also: provenance re-reads a cited call another replica had not yet flushed; the api gateway's timeout derives from the request context; the maps index retries and re-reads its settings per claim; the Trino kind reads the connection store for a connection another replica saved; indexjob_jobs_total series start at zero; a script test replays the register check its run recorded; admin Get Persona reads the store first. 4. #2219 criteria that need a stack make dev does not make are listed in test/acceptance/environments.txt and run in their own nightly jobs (scripts/acceptance-services.sh, ACCEPTANCE_ENV); dev Keycloak is 26.7.5 for #2061, and the Google service-account criteria use neutral names. Also: dev/seed.sql points acme-warehouse at the local mock; the import ratchet gains internal/upstreamauth -> internal/upstreamauth/tokenexpiry; docs/server data-retention, configuration, asset-references, api-gateway, admin-api, observability and the other pages listed in the diff, README.md, CLAUDE.md, llms.txt and llms-full.txt. Closes #2216 Closes #2217 Closes #2218 Closes #2219 Closes #2221
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2235 +/- ##
========================================
Coverage 94.78% 94.79%
========================================
Files 1374 1376 +2
Lines 111373 111500 +127
========================================
+ Hits 105567 105698 +131
+ Misses 5788 5785 -3
+ Partials 18 17 -1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Changes platform_info (
pkg/platform/info_tool.go), the memory and call index vector writes,save_asset, the index job claim (pkg/indexjobs), the catalog scan loop, the upstream OAuth token lifetime (internal/upstreamauth, newinternal/upstreamauth/tokenexpiry, new keyoauth_token_lifetime), the tile worker's own-file reads,.github/workflows/e2e-nightly.yml, the Makefile andscripts/acceptance-env.py; four tickets, the whole of epic #2221, and eleven product defects the full acceptance runs found:featuresreportsquery_enrichmentandstorage_enrichmentagain, always false. Releases up to v1.145.0 advertised both as required in the output schema, and a client holding that cached schema refused every platform_info result.test/acceptance/testdata/issue_2216_platform_info_v1.145.0.jsonis the v1.145.0 schema, and the criterion validates a live result against it.internal/platform/memoryindex, andinternal/platform/callindexfor call records) and the recall check (pkg/toolkits/memory/recall_settle.go, through the newRecordUpdate.KeepUpdatedAt) no longer setupdated_at, so neither restarts an archived record's retention clock.ACCEPTANCE_SHARD=i/N,scripts/acceptance-env.py flags dev --shard i/N), plus theworker-offandclickstackenvironments. Each job has a 100-minute limit and a 75-minute suite timeout; the browser suite runs in group 1 only.TestEveryAcceptanceEnvironmentRunsNightlyandTestAcceptanceShardsCoverEveryTicketOnce(test/gates/acceptance_env_test.go) hold the workflow to the ticket list: every dev group 1/N..N/N present, every ticket in exactly one group.make verify-releaseisverify codeql mutate acceptance-release-check: it requires a recorded passing run for each ticket changed since the last tag, and no longer runs the whole suite.TestVerifyReleaseRunsInOneInvocationpins that.ACCEPTANCE_TIMEOUTis 240m for a full local run and 40m withISSUE.test/acceptance/.make devdoes not start are listed intest/acceptance/environments.txtwith their environment, skipped by the dev run, and run in their own nightly jobs (scripts/acceptance-services.sh,ACCEPTANCE_ENVinscripts/release-acceptance.sh). Dev Keycloak is 26.7.5 (dev/docker-compose.yml), which feat(upstream auth): first-class Google service account credentials (accept the JSON key file, put scopes in the assertion, optional sub) #2061'sjwt_bearercriteria need. Those criteria, the UI mock and its tests use neutral Google service-account names (sheets, drive, bigquery);GoogleServiceAccountFields.tsx's scope example isspreadsheets.readonly.Defects the full runs found, fixed here
save_assetrecorded an asset's references after its first version (pkg/toolkits/portal/toolkit.go). The version is what makes the asset owed a tile, so the tile worker could draw the page before its referenced fonts and images were granted, and the tile was drawn with them missing. References are now recorded between the asset insert and the first version.TestSaveRecordsReferencesBeforeTheFirstVersionfails without the change. The same race onmanage_asset updateandpatchcannot be fixed by reordering; it is fix(portal): a tile can be drawn before an update's new references are granted #2234.pkg/indexjobs/store_postgres.go). A backlog of 6,143 unembedded call records held a changed dataset description out of search for minutes. Writes and operator retries still go ahead of reconciler jobs; within each, a claimer now takes the next kind after the one it last claimed (ORDER BY (trigger_kind = 'reconciler'), (source_kind <= $last), source_kind, next_run_at, id).TestClaim_RealDB_KindsTakeTurnsandTestClaim_RealDB_AHeldCandidateIsSkippedcover it. The search criterion went from timing out at 3 minutes to passing in 10 seconds.internal/platform/catalogscan/loop.go). The replica holding the lock now checks for requests again before releasing it and serves any made during its scan.TestLockedScanServesARequestMadeDuringTheScanandTestLockedScanReportsALaterPassFailingcover it.expires_inwas reused for a fixed 15 minutes. The new connection keyoauth_token_lifetime(a duration string or seconds; 15m by default; negative refused) sets that window per api and graphql connection, and both kinds carry it through their ownOAuth2Configcopies (TestParseConfig_OAuthTokenLifetimeRoundTrips). The bounding moved tointernal/upstreamauth/tokenexpiryto keepinternal/upstreamauthwithin its size budget. This makes the window an operator setting, which fix(upstream auth): client_credentials token with no expires_in is reused forever #1737 had decided against. fix(upstream auth): client_credentials token with no expires_in is reused forever #1737's refetch criterion now waits 38 seconds instead of 15 minutes and sends the key in both forms.internal/inproc), the renderer counts it as the page's own failure when subresources are required (internal/headless/intercept.go), and the tile worker retries the tile. It is 503 rather than 504 because the CDN-status gate refuses 502 and 504.resolveCitedreads again before recording the capture without it (internal/platform/provenance).req.Context().internal/maps).pkg/toolkits/trino/catchup.go,internal/platform/trinowiring).indexjob_jobs_totalseries appeared only after their first job and now start at zero for every registered kind, trigger and outcome.pkg/admin/persona_handler.go). A script test also replays the register check its run recorded (internal/platform/scriptrun/host.go).Also:
dev/seed.sqlpointsacme-warehouseat the local mock. The old host did not resolve, so the Trino driver retried for two minutes on every catalog scan.internal/upstreamauth -> internal/upstreamauth/tokenexpiry.docs/server/data-retention.md,configuration.md,asset-references.md,api-gateway.md(oauth_token_lifetime),admin-api.md,observability.md, the other pages in the diff,README.md,CLAUDE.md,llms.txtandllms-full.txt.Type of Change
Related Issues
Closes #2216
Closes #2217
Closes #2218
Closes #2219
Closes #2221
Filed from this work: #2232 (real-clock waits left in the suite), #2233 (run criteria in parallel), #2234 (the tile race on
manage_asset update/patch), #2224, #2230, #2231.Readers of this state
GET /api/v1/admin/personas/{name}returns the same shape, read from the store first. The portal persona editor reads it unchanged.oauth_token_lifetimeon api and graphql connections.GET /api/v1/admin/connection-instances/{kind}/{name}returns it as stored. The connection forms do not show it yet; it is set through the admin API.platform_info'sfeaturesgainsquery_enrichmentandstorage_enrichment, always false. Read by clients holding the v1.145.0 output schema and by the platform_info fails the output schema clients cached before v1.146 #2216 criterion.internal/apidocs/swagger.jsonand theui/srctypes are unchanged. The onlyui/srcchanges are the neutral names in the Google service-account mock, tests and scope example.Testing
Acceptance through the real surface on the local dev stack (two replicas behind the proxy), run per ticket after the last change to each. Every criterion passed: 1625 (3/3), 1737 (4/4), 1918 (5/5), 1919 (2/2), 2062 (2/2, three runs in a row), 2111 (7/7), 2216 (1/1), 2218 (2/2). Transcripts and records are in
build/<n>/acceptance.mdandacceptance.jsonl.make acceptance-checkconfirms every changed acceptance file's criteria passed in their recorded run.Full-suite runs of all 296 tickets on this branch found the defects above.
Real-Postgres: the kind rotation and held-candidate claims, the memory recall check keeping
updated_at, and the SQL statement gate.The eight-group nightly is checked by the gate tests above but has not yet run on GitHub's runners; its first run is the next scheduled or dispatched E2E Nightly.
make verifypassed: the full Go race and coverage run (total 93.9%, patch 98.8%), the schedule lane, the real-database lane, the full vitest suite (3,231) and Playwright (296).Ran
make testlocallyTested manually
Added new tests for changes (if applicable)
Checklist
make lint)