Skip to content

Commit 0c50b5d

Browse files
ci(temporal-conformance): give the non-SQL step the job's live PostgreSQL URL (#21577)
Fixes #21564 Clause-②: no ## What this changes The `Temporal Conformance (live PG + MySQL)` job's step "Run the non-SQL temporal backends under the skewed process zone" now sets `OS_TEST_POSTGRES_URL` in its `env:`, with the same literal the job's three SQL steps use (`postgres://postgres:postgres@127.0.0.1:5432/postgres`), for the postgres service the job already provisions. Until now that step set only `TZ`, so every `service-analytics` live-PostgreSQL cell (`describe.skipIf(!config)`) was a named skip there while the job read green. The header clause "no CI step provisions that variable for this package" in 15 `service-analytics` test files becomes false with this wiring. It is corrected, comment-only, to name the step that now sets it. No other line of those files changes: every changed line in them is a ` * ` comment line. The 15th file, `objectql-echo-date-bucket.test.ts`, landed on `main` after this PR was opened, and the takeover added it (claim amendment `5973803595`). No other job, no other step, and no timeout changes. No cell is re-skipped. ## What the step needed, measured (A2) Only the one `env:` line: - **Build closure.** `turbo run build --filter=@objectstack/service-analytics... --dry=json` selects 16 packages, including `@objectstack/driver-sql`, `@objectstack/objectql` and `@objectstack/driver-sqlite-wasm` (dev dependencies of `service-analytics`). The step's existing build already builds what the cells import. - **PostgreSQL client.** `pg` is an optional peer of `driver-sql`, resolved by pnpm into `driver-sql`'s `knex` instance; `require.resolve('pg')` from that `knex` answers `pg@8.22.0`. The cells reach `pg` through `SqlDriver`, so nothing is added to `service-analytics`. - **Database and tables.** Every cell connects to the default `postgres` database and creates and drops its own tables. The table names are distinct across the 17 files that read the URL (`os21316_deal`, `os21505_coercion`, `os21441_bucket_deal`, ...), so parallel vitest workers do not collide. - **Server zone.** The job's existing step "Point both servers at a non-UTC timezone" sets the server to `Asia/Shanghai` before any test step. ## Readings - **A3.** No `service-analytics` file reads `OS_EXPECT_LIVE_DIALECT_MATRIX` (`git grep` exit 1), and no code in the step's other four packages reads it. So the flag is not added to the step. - **A4.** No `service-analytics` file reads `OS_TEST_MYSQL_URL` or any other server variable the job provides. Its only `process.env` reads are `OS_TEST_POSTGRES_URL` (34, in 17 files), `NODE_ENV` (10) and `TZ` (4). Nothing is listed for MySQL. - **A5.** `core`, `formula`, `driver-memory` and `driver-mongodb` have zero `OS_TEST_POSTGRES_URL` hits (`git grep` exit 1 for each). Adding the variable to the step starts no test in them. ## Acceptance - **CI, on this head `6e12d6934a`:** `Temporal Conformance (live PG + MySQL)` (job `111301243023`) is success, and step 14, the step this PR wires, is success (3m38s). All 34 check runs are complete: 32 success, 2 skipped (`Check Changeset` under `skip-changeset`, and the opt-in packed-tarball smoke). - **The cells run in CI, by contrast with the head before the fix:** - At `a3fb6c0334`, with this same wiring, step 14 failed. Four `objectql-face-order-limit` live-PostgreSQL cells went red on #21485's defect: a `date` month bucket landed a day early on a non-UTC server. - #21485 was fixed by PR #21611 (`440cd329a9`), which this branch now carries. With the same wiring, step 14 passes at `25fb56f1b7` and at `6e12d6934a`. - That red-then-green on the same step shows the cells run there and now pass. - **NOT MEASURED: a quoted step-14 log line.** The job-log host answers Forbidden from the seat containers, and the API's log tail does not reach step 14. A seat whose egress reaches the log host can read step 14's per-file vitest lines for `objectql-face-order-limit` and `objectql-echo-date-bucket`. - **Local reproduction of the job's two zones** (PostgreSQL 16.14 with `timezone=Asia/Shanghai`, process `TZ=America/New_York`, the full `service-analytics` suite on the merged tree `25fb56f1b7`, from vitest's JSON reporter): - With the URL: 4419 passed, 0 failed, 2 skipped of 4421. - Without it: 4160 passed, 261 skipped. - So 259 cells move from skipped to run. - `objectql-face-order-limit`: 26 / 0 / 0, including the four formerly red cells. - `objectql-echo-date-bucket`: 16 / 0 / 0. - The two remaining skips are cell-scoped by design: the SQLite cell's "the server is not on UTC" check in `read-scope-temporal-coercion`, and a SQLite-only case in `analytics-faces-one-lowering`. Their PostgreSQL twin, "(pg) the server is not on UTC", passed, so the run was not vacuous. ## Acceptance notes - The ruling says each of these cells "asserts a non-UTC server". At this tree, 1 of the 17 files does (`read-scope-temporal-coercion.test.ts`, `show timezone`). The other 16 rely on the job's provisioning step for the server's zone. Noted, not changed. - `packages/plugins/plugin-security/src/rls-boolean-comparand-door.test.ts:40` carries the same "no CI step provisions" clause about its own package. This PR's step does not run that package, so the clause there stays true and is not touched. - **Stall guard.** `check:stall-guard-budget` reads this step's static budget as window 10m, cap 20m, job budget 30m, slack 10m. The step ran 3m38s on this head. - **Release.** Nothing publishes: `.github/workflows/ci.yml`, plus comments in test files outside `service-analytics`'s `files[]`. No changeset; `skip-changeset`. - **Governed.** `check-governed-merges.mjs`: 0 of 16 paths hit the register, NOT governed; 118 changed lines (+80 / −38). ## Gates Run on head `6e12d6934a`: the merge `1866c0185c` of `origin/main` `5b5e83f446`, plus the header commit. Each exit code was recorded before any pipe. - `dispatch-gates.mjs --commands` derived 87 commands. All 87 ran, and all exited 0. `--ran` reconciled them as 87 derived, 87 run, 0 NOT-MEASURED. - `check:changeset-gate-self-tests` was re-run once, alone, after the container's commit-signing hop answered 503 inside its scratch repository on the first pass. The re-run exited 0. - `service-analytics`: its build closure built, and `objectql-echo-date-bucket.test.ts` passed without the URL (10 passed, 8 PostgreSQL cells skipped locally). Its full suite with the URL is in Acceptance above. Opened by `domain:spec` seat 2 (`session_01YDt3PzwfrkuFzUBF89WPmM`); taken over by `domain:spec` seat 1 (`session_01T9u38rswFp5Rw8DswRUReJ`, claim `5973375306`). --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1cbe165 commit 0c50b5d

16 files changed

Lines changed: 80 additions & 38 deletions

‎.github/workflows/ci.yml‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,6 +1526,14 @@ jobs:
15261526
- name: Run the non-SQL temporal backends under the skewed process zone
15271527
env:
15281528
TZ: America/New_York
1529+
# [#21564] The same URL the SQL legs of this job receive, for the
1530+
# postgres service this job already runs. `service-analytics` keys
1531+
# its live-PostgreSQL cells on it (`describe.skipIf(!config)`), so
1532+
# without this line they were named skips here and the job read as
1533+
# though ADR-0053 D-A3's live non-UTC PostgreSQL row had run. Core,
1534+
# formula, driver-memory and driver-mongodb do not read it. No
1535+
# `OS_EXPECT_LIVE_DIALECT_MATRIX` here: no test in this step reads it.
1536+
OS_TEST_POSTGRES_URL: postgres://postgres:postgres@127.0.0.1:5432/postgres
15291537
run: |
15301538
# The axis is only real if the zone actually took. Without this, a
15311539
# dropped `TZ:` line silently returns the job to UTC coverage and

‎packages/services/service-analytics/src/__tests__/cube-measure-field-type-door.test.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@
3939
* ## The dialect axis of THIS file
4040
*
4141
* The SQLite cell always runs. The PostgreSQL cell runs where
42-
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; no CI step
43-
* provisions that variable for this package, so the live cell is red-capable
44-
* and un-run in CI, and the PR that landed this file carries its local
42+
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; CI provisions
43+
* that variable for this package in the Temporal Conformance job's step
44+
* "Run the non-SQL temporal backends under the skewed process zone"
45+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
46+
* CI, and the PR that landed this file carries its local
4547
* PostgreSQL 16 run. The live cell owns its table, dropped before and after.
4648
*/
4749

‎packages/services/service-analytics/src/__tests__/cube-measure-relationship-path-type.test.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@
4848
* ## The dialect axis of THIS file
4949
*
5050
* The SQLite cell always runs. The PostgreSQL cell runs where
51-
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; no CI step
52-
* provisions that variable for this package, so the live cell is red-capable
53-
* and un-run in CI, and the PR that landed this file carries its local
51+
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; CI provisions
52+
* that variable for this package in the Temporal Conformance job's step
53+
* "Run the non-SQL temporal backends under the skewed process zone"
54+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
55+
* CI, and the PR that landed this file carries its local
5456
* PostgreSQL 16 run. The live cell owns its tables, dropped before and after.
5557
*/
5658

‎packages/services/service-analytics/src/__tests__/json-stored-door-live-drivers.test.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828
* ## The dialect axis
2929
*
3030
* The SQLite cell always runs. The PostgreSQL cell runs where
31-
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; no CI step
32-
* provisions that variable for this package, so the live cell is red-capable
33-
* and un-run in CI. The live cell owns its table, dropped before and after.
31+
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; CI provisions
32+
* that variable for this package in the Temporal Conformance job's step
33+
* "Run the non-SQL temporal backends under the skewed process zone"
34+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
35+
* CI. The live cell owns its table, dropped before and after.
3436
*/
3537

3638
import { describe, it, expect, beforeAll, afterAll } from 'vitest';

‎packages/services/service-analytics/src/__tests__/json-stored-door-undeclared-join.test.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,11 @@
4545
* ## The dialect axis of THIS file
4646
*
4747
* The SQLite cell always runs. The PostgreSQL cell runs where
48-
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; no CI step
49-
* provisions that variable for this package, so the live cell is red-capable
50-
* and un-run in CI, and the PR that landed this file carries its local
48+
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; CI provisions
49+
* that variable for this package in the Temporal Conformance job's step
50+
* "Run the non-SQL temporal backends under the skewed process zone"
51+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
52+
* CI, and the PR that landed this file carries its local
5153
* PostgreSQL 16 run. The live cell owns its tables, dropped before and after.
5254
*/
5355

‎packages/services/service-analytics/src/__tests__/list-at-scalar-operator-both-faces.test.ts‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@
3838
* before any leaf exists, so the arm reaches it with no change here.
3939
*
4040
* The PostgreSQL cells run where `OS_TEST_POSTGRES_URL` is set and are a named
41-
* skip otherwise; no CI step provisions that variable for this package. The
41+
* skip otherwise; CI provisions that variable for this package in the
42+
* Temporal Conformance job's step
43+
* "Run the non-SQL temporal backends under the skewed process zone"
44+
* (`.github/workflows/ci.yml`). The
4245
* live cell owns its table, dropped before and after.
4346
*/
4447

‎packages/services/service-analytics/src/__tests__/native-sql-aggregate-policies.test.ts‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,11 @@
4444
*
4545
* The SQLite cell always runs; there, the fold is the policy that diverged. The
4646
* PostgreSQL cell runs where `OS_TEST_POSTGRES_URL` is set and is a named skip
47-
* otherwise; no CI step provisions that variable for this package, so the live
48-
* cell is red-capable and un-run in CI, and the PR that landed this file carries
47+
* otherwise; CI provisions that variable for this package in the
48+
* Temporal Conformance job's step
49+
* "Run the non-SQL temporal backends under the skewed process zone"
50+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
51+
* CI, and the PR that landed this file carries
4952
* its local PostgreSQL 16 run. The operand the PostgreSQL / MySQL cells rely on
5053
* is pinned per dialect in CI by `@objectstack/core`'s `aggregate-answer.test.ts`
5154
* and by `driver-sql`'s move proof. MySQL is not a cell here. The live cell owns

‎packages/services/service-analytics/src/__tests__/native-sql-base-column-qualify.test.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,11 @@
4141
* ## The dialect axis of THIS file
4242
*
4343
* The SQLite cell always runs. The PostgreSQL cell runs where
44-
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; no CI step
45-
* provisions that variable for this package, so the live cell is red-capable
46-
* and un-run in CI, and the PR that landed this file carries its local
44+
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise; CI provisions
45+
* that variable for this package in the Temporal Conformance job's step
46+
* "Run the non-SQL temporal backends under the skewed process zone"
47+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
48+
* CI, and the PR that landed this file carries its local
4749
* PostgreSQL 16 run. The live cell owns its tables, dropped before and after.
4850
*/
4951

‎packages/services/service-analytics/src/__tests__/native-sql-boolean-comparand-door.test.ts‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@
3838
* edit in place would throw.
3939
*
4040
* The PostgreSQL cell runs where `OS_TEST_POSTGRES_URL` is set and is a named
41-
* skip otherwise; no CI step provisions that variable for this package. The
41+
* skip otherwise; CI provisions that variable for this package in the
42+
* Temporal Conformance job's step
43+
* "Run the non-SQL temporal backends under the skewed process zone"
44+
* (`.github/workflows/ci.yml`). The
4245
* live cell owns its table, dropped before and after.
4346
*/
4447

‎packages/services/service-analytics/src/__tests__/native-sql-measure-number-presentation.test.ts‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@
5656
* ## The dialect axis of THIS file
5757
*
5858
* The SQLite cell always runs. The PostgreSQL cell runs where
59-
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise. No CI step
60-
* provisions that variable for this package, so the live cell is red-capable
61-
* and un-run in CI; the PR that landed this file carries its local PostgreSQL
59+
* `OS_TEST_POSTGRES_URL` is set and is a named skip otherwise. CI provisions
60+
* that variable for this package in the Temporal Conformance job's step
61+
* "Run the non-SQL temporal backends under the skewed process zone"
62+
* (`.github/workflows/ci.yml`), so the live cell is red-capable and runs in
63+
* CI; the PR that landed this file carries its local PostgreSQL
6264
* 16 run. `@objectstack/core`'s `aggregate-answer.test.ts` pins the presenter
6365
* itself in CI. The live cell owns its table, dropped before and after.
6466
*/

0 commit comments

Comments
 (0)