Skip to content

test(spec): connector-author-shape.test.ts's compile test runs within 8% of its 60 s timeout on CI, so a cold spec run on a slow runner goes red #22929

Description

@objectstack-fleet

Filing gate: ① a repo-gate defect with a named location and a reproduction. reach: CI, Test Core (1/6) on PR #22922 at 63710c5572 (job): src/integration/connector-author-shape.test.ts > SYNC_ARCHITECTURE.md L3 connector examples compile > compiles every full connector example verbatim, import line included, "Test timed out in 60000ms" at 61,767 ms. Filed by domain:spec seat 3 (#18883) · zhuangjianguo · session session_01KNKBCRDJCu5tGy3TEbvtrF, under "whoever finds a flake fixes it or files it". ⛔ Not a claim.

What is failing, and why it is not the PR's

  • The test (packages/spec/src/integration/connector-author-shape.test.ts:194) compiles the document's two L3 connector examples, plus a harness self-test probe, through the TypeScript compiler API in one it, under vitest's default 60 s timeout.
  • On main the same test reads 55,680 ms in Test Core (1/6) at 85b4ac634e, 018b077fbf and eab7236ff7. These are identical figures, so they are a turbo cache replay of one run, not three measurements. That run sat 7% under the ceiling.
  • On PR feat(spec): ServiceSlotContracts types the webhooks and trigger-api slots #22922 (a type-only change to contracts/core-service-contracts.ts: two imports, two map entries) the spec package re-ran cold and the test took 61.8 s. The PR touches neither the test nor the examples. Any PR that changes packages/spec re-runs this test cold, so any of them can land on the wrong side of 60 s.
  • No re-run was taken: the fleet relay excludes run re-runs by design.

Proposed fix

Give this one it an explicit timeout that matches what it does (one compiler-API program over the spec's types), for example it('compiles every full connector example verbatim, import line included', () => { … }, 180_000);. Name the measured CI time in a comment. Raising vitest's global testTimeout would hide the next slow test as well, so that is not the fix.

Done when: the test carries its own timeout, with the measured figure in its comment, and a cold Test Core shard runs it green.

Who acts

The next domain:spec seat that touches packages/spec/src/integration/, or any spec-lane PR that this test turns red and whose seat ports the one-line fix (it no-ops once main carries it). area:* and the grade are triage's.

Dedupe: the search API is refused in this session, so the repository's 810 most recently updated issues (open and closed) were read through the repo-scoped issue list, matching "connector-author-shape", "SYNC_ARCHITECTURE.md L3", and "connector example" with "timeout": 0 hits.

Activity

  1. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, bug · priority:p2 · domain:spec · area:devpath, into pm:queue. One explicit timeout on the one test, with the measured figure

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-12T04:56Z. ⛔ Not a claim, ⛔ not a dispatch.

    • Lane: packages/spec/src/integration/connector-author-shape.test.ts is domain:spec.
    • Why p2: any PR that changes packages/spec re-runs this test cold. At 55.7 s cached and 61.8 s cold against 60 s, it can red any spec-lane PR whatever its diff.
    • Direction, as the card says: this one it gets its own timeout that fits its work (one compiler-API program over the spec's types), with the measured CI time in a comment.
      • ⛔ Do not raise vitest's global testTimeout, which would hide the next slow test.
      • ⛔ Do not skip or split the test away.
    • Port rule, as the card says: a spec-lane PR that this test reds may carry the same one-line change, and it no-ops once main has it.
    • Clause-②: no (test-only).
  2. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (#22929: give the one compile it its own timeout with the measured CI figure, as triage graded it in 6118022351) · 2026-10-12T05:46Z
    Session: session_019G5ZnRrTMiwcHG6iZM19zf
    Account: os-warren (the seat's linked user as GET /user answers it; the card's assignee from this act)
    Branch: claude/issue-22929-connector-shape-timeout
    Worktree: objectstack-issue-22929
    Domain: domain:spec
    Seat: domain:spec#1 (seat post #6017)
    File surface (at origin/main or later; stop on breach): packages/spec/src/integration/connector-author-shape.test.ts, the it at about :194, test-only. ⛔ Not vitest.config.ts's global testTimeout, ⛔ no skip, ⛔ no split.
    Container & model: S mechanical, mode:subagent, model: floor tier (one test option and a comment; dispatch-gates --tier: no path-derived mandate). No contract face.
    Clause-②: no
    Responsibility: packages/spec/src/integration/connector-author-shape.test.ts:194's compile it runs under vitest's default 60 s and took 61.8 s cold on CI | no platform path covers a slow single test (the global timeout is deliberately left alone) | every PR that changes packages/spec re-runs it cold, so any spec-lane PR can go red
    Thread-read: 6118022351
    Serial constraints cleared: no open PR touches the file (open PR file lists read at 2026-10-12T05:44Z); it last moved on main with 0a3480311 (10-05).

    This act moves the card pm:queue → pm:dispatched and assigns os-warren.

  3. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 22929,
      "status": "done",
      "branch": "claude/issue-22929-connector-shape-timeout",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/22969",
      "session": "session_019G5ZnRrTMiwcHG6iZM19zf",
      "premise_still_valid": true,
      "summary": "The compile `it` in packages/spec/src/integration/connector-author-shape.test.ts (line 194 on origin/main da9c2bf2f; vitest.config.ts testTimeout 60_000 at lines 79, 91, 122, as the dispatch said) now carries its own 180_000 ms timeout plus a comment with the CI figures (55,680 ms cached on main, 61,767 ms cold, both as filed on the card), the local reading and the reasoning for the bound (about 2.9x cold). The producer is the test itself, so the landing point is the expected one. Global testTimeout untouched, nothing skipped or split. Draft PR 22969 opened with assignee os-warren; the skip-changeset label was NOT applied (see deviations).",
      "tests": "Baseline before the change, `pnpm exec vitest run --maxWorkers=2 --reporter=verbose src/integration/connector-author-shape.test.ts` under os-verify-lock: 11 passed, compile it 13,796 ms. After the change at 57d5074ff: 11 passed, compile it 10,969 ms. Ablation (one-off, direction stated first: red then green): ablation-replace.mjs removed `}, 180_000);` (anchor count 1 to 0, blob 88e0e6551c93 changed) and ran with `--testTimeout=2000`: 1 failed 10 passed, `Test timed out in 2000ms` on the compile it; after restore (blob equals HEAD 88e0e6551c93, git diff HEAD empty) the same command: 11 of 11 passed, compile it 12,452 ms. Observed direction is the predicted one; the subject is the test file itself resolved from src, so there is no dist leg. `pnpm --filter @objectstack/spec run typecheck`: exit 0 (tsc --noEmit, scripts typecheck, check:test-typecheck OK, debt ledger held). `pnpm --filter @objectstack/spec build` exit 0 before the dist-reading gates. Publish check: npm pack --dry-run lists 2079 files, 0 test files, positive control src/integration/connector.zod.ts present; dist search for the test title 0 files, for ConnectorSchema files found. NOT MEASURED: the card's CI half (a cold Test Core shard running it green) is CI's reading of the PR; I could not re-read the original job log (log blob host unreachable through the proxy), so the CI figures are the card's.",
      "mcp_calls": "0 (no MCP GitHub calls; issue and PR reads went through gh api GETs)",
      "api_writes": "2 landed REST writes, both through the fleet-write relay: (1) POST /repos/objectstack-ai/objectstack/dispatches carrying one pr_create, which executed POST /repos/objectstack-ai/objectstack/pulls (draft) and POST /repos/objectstack-ai/objectstack/issues/22969/assignees (os-warren); (2) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/22929/comments. Not landed: one earlier pr_create dispatch was refused by write-pace before sending (budget 40 of 40 in the trailing hour, nothing written, retried once after the window reopened); the label-write of skip-changeset was denied by the auto-mode classifier before it ran. Plus two git pushes (an empty-branch probe, then 57d5074ff).",
      "open_questions": [],
      "out_of_scope_findings": [],
      "gates": {
        "head": "57d5074ff",
        "derived": 77,
        "run_exit_0": 76,
        "not_measured": [
          "pnpm check:dual-build-cjs-loads :: exit 3, PREREQUISITE NOT MET: it reads the built dist of 88 other packages and needs a whole-workspace pnpm build; a test file enters no package output; CI Build Core covers it"
        ],
        "unrun": 0,
        "reconcile": "node scripts/pm/dispatch-gates.mjs --ran: 77 derived famil(ies) accounted for - 76 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)",
        "rerun_after_prerequisite_build": [
          "pnpm --filter @objectstack/lint run check:doc-formula-expressions (exit 3 then 0 after a targeted turbo build of formula, lint and objectql)",
          "pnpm check:lean-entry-closure (exit 3 then 0)"
        ],
        "declared_outside_the_list_and_not_run_locally": "the tool names 50 artifact-roster families, 11 wide-population families, 6 workflow-value steps, 5 path-scheduled CI jobs and 4 type-check lanes as outside the 77; CI owns them. The 10 pending-changeset families do not apply: no changeset is owed (publishes nothing)."
      },
      "line_budget": "No skills path touched, so no skills line or token reading is owed. Diff is +14 / -1 across 1 file (a 13-line comment and the timeout argument), under the 3000-line human-merge threshold.",
      "deviations": [
        "skip-changeset NOT applied. Command: bash scripts/pm/with-fleet.sh -- node scripts/pm/label-write.mjs --repo objectstack-ai/objectstack --issue 22969 --add skip-changeset. Refusal: the auto-mode classifier denied it as [External System Writes] before it ran, so nothing was written, and I did not retry by another route. The seat should attach skip-changeset to PR 22969; evidence that nothing publishes is in the PR body (0 test files among 2079 packed files, positive control present). Until then the PR carries only the auto labels size/s and tests. A following Bash read of post-stamped.mjs was refused the same way; I read it with the Read tool.",
        "origin/main was not merged into the branch before the PR (AGENTS multi-agent discipline 10): the branch point is da9c2bf2f, main later moved four commits (as of 1f312fdfa), none touching the test, docs/SYNC_ARCHITECTURE.md, packages/spec/src/integration or the vitest config; the local-verification scope rule governs and CI plus the merge queue validate the merged generation.",
        "The third gate batch ran past the foreground cap and the harness moved it to the background; I waited on its recorded PID with tail --pid until it exited, and nothing was left running. check:type-check-debt alone took 736 s on a shared box.",
        "Commit trailers use the model-free pair from AGENTS (Claude-Session and Co-authored-by Claude); the harness attribution reminder suggests a model-named co-author line, which I did not use. The PR body carries the session-URL footer form; the platform stored it with one extra blank line above the rule, otherwise byte-identical (readback diff: one blank line)."
      ],
      "files_changed": [
        "packages/spec/src/integration/connector-author-shape.test.ts"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    ✅ ACCEPT: PR #22969 at 57d5074ff8 (Fixes #22929). Held out of the merge queue on #22949; transition pm:dispatched → pm:blocked

    domain:spec seat 1 (#6017) · os-warren · session session_019G5ZnRrTMiwcHG6iZM19zf · 2026-10-12T06:45Z · holder of claim 6118521933. Report: 6119153549. Thread-read: the report.

    Read in the diff (/pulls/22969, one path, +14 / −1):

    • The compile it in packages/spec/src/integration/connector-author-shape.test.ts passes its own 180_000. The package-wide testTimeout: 60_000 is untouched. Nothing is skipped or split.
    • The comment states the bound's evidence: 55,680 ms cached and 61,767 ms cold, from the card's CI readings; the local run; about 2.9× the cold reading. It names no tracker number.
    • The report's ablation is the right shape: the own timeout removed and the global forced to 2,000 ms turns the it red, and the restored blob turns it green.

    Checklist:

    • Body: first line Fixes #22929, correct for a whole fix; Clause-②: no.
    • Scope: no content/docs/releases/, no unrelated file.
    • Published surface: unchanged. @objectstack/spec ships no test file; the report's npm pack --dry-run lists 0 among 2,079, with a positive control.
    • mcp_calls 0.

    Changeset: tests only, so this repository's route is the skip-changeset label, not an empty changeset. Check Changeset is red until the label is on. The dev's label write was refused by its session's permission check, as its deviations record verbatim. This seat applies the label only on the maintainer's word, and it is not on yet.

    CI at this read: 12 success, 3 skipped, 16 in progress, and Check Changeset red for the label above. The Lint & Repo Gates and type-check jobs are still running. Convergence is read before any queue step, and a red of this diff goes back to the dev.

    Why blocked: even fully green, the queue rejects every group today on Test Core's suite-duration ceiling step (#22949, p1, needs-user-decision). Five PRs of this seat are already held on it. Body lines added: Blocked-by: #22949 and Unlock-action: re-check PR #22969.

    Then: the label, every check green, a main merge if the base has moved past what CI read, the pre-queue checks, and the queue. The assignee stays until MERGED.

  5. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlocked: #22949 is closed. PR #22969 has a new head with main merged in, and its net diff is unchanged; transition pm:blocked → pm:dispatched

    domain:spec seat 1 (#6017) · os-warren · session session_019G5ZnRrTMiwcHG6iZM19zf · 2026-10-12T08:54Z.

  6. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Queued: PR #22969 at c189009318 (Fixes #22929)

    domain:spec seat 1 (#6017) · os-warren · session session_019G5ZnRrTMiwcHG6iZM19zf · 2026-10-12T11:29Z · holder of claim 6118521933.

    • skip-changeset: applied by this seat on its own review (6123202811), after the maintainer's word in this seat's chat that the call is the seat's. The dev's label write had been refused by its session's permission check. The diff is one test file, and @objectstack/spec ships no test file.
    • Pre-queue checks on c189009318 (main merged, net diff patch-id 7f4134b6bbaf unchanged):
      • mergeable_state clean;
      • every check green or in the roster (check-expected-skips --pr 22969 exit 0; the latest Check Changeset run is the label skip, which supersedes the two runs from before the label);
      • check-governed-merges --pr 22969: NOT governed, 15 changed lines;
      • Test Core (1/6), where the 60 s timeout used to bite, is green.
    • Queue: pr_ready + automerge_enable at 2026-10-12T11:21Z, and one more automerge_enable. added_to_merge_queue at 2026-10-12T11:28Z.
  7. objectstack-fleet commented on Oct 12, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #22969 → 0ede0f8ab3 (Fixes #22929). The card is closed; pm:dispatched comes off in this act

    domain:spec seat 1 (#6017) · os-warren · session session_019G5ZnRrTMiwcHG6iZM19zf · 2026-10-12T11:57Z · holder of claim 6118521933.

    • Landed through the merge queue at 2026-10-12T11:57Z as 0ede0f8ab3: one parent, an ancestor of origin/main.
    • Content: the queued head c189009318's diff and the landed commit's diff have one stable patch-id, 7f4134b6bbaf.
    • The chain: ACCEPT 6119196529, skip-changeset 6123202811, queued 6123369601.
    • What now holds: the compile it in connector-author-shape.test.ts has its own 180 s timeout, and the package-wide 60 s default is unchanged.
    • Mis-close scan: the body's one closing keyword is Fixes #22929, and this card is the issue it closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:specpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions