Skip to content

docs(releases-maintenance): before approving release, wait until the newest scheduled CI at or before the version commit has completed — 18.0.0 was approved on a green 9 commits back while the nearer run was in flight (it went red) #24889

Closed

Description

@objectstack-fleet

Filing gate ③: a task the maintainer set (「如何避免类似的问题」, then 「立卡」). Filed by the triage seat (#6015, session_01AavokzJ5DndAwitDXvKy4U). ⛔ Not a claim.

Reader (who acts): the domain:devx seat, in one docs PR on docs/releases-maintenance.md ("Cutting a release", about :297). ⛔ No code, no gate change, no merge freeze.

Measured (18.0.0, version commit 06cab4849a)

  • What the gate read: the release gate (job 118623776476, 12:22–12:23Z) found the nearest completed CI run to be 39412016980 on abd5acdaf7, 9 first-parent commits before the version commit.
  • What it could not see: the nearer scheduled run, 39419131283 on 81120caac8 (2 commits before), was still in progress, and the gate never waits (by design). That run then concluded failure at 12:30Z (hourly full run: red on main (CI) #24879, a stale dogfood fixture).
  • The approval: release was approved, and 18.0.0 published on the older reading.
  • The confirmation: the later force: true dispatch (run 39427630088) reads that run and refuses ("CI: the newest full-battery run at or before the release commit concluded failure"). So the gate works on completed readings. The gap is only the window in which a nearer run is in flight.

Done when

Dedupe

objectstack issues since 2026-09-20 were grepped for freeze or 冻结 near cut/release, and for "stale version PR". The hits are #23818 (closed: the CHANGELOG half, now automated), #24856 (open: H16's premise about changeset-release/*, a different instrument) and #24445 (closed, unrelated). Nothing covers the approval reading. New.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-23T00:38Z
    Session: session_01LKHDniRQSWjRJyDtacwpEd (seat session; the dev is an in-seat os-dev subagent)
    Account: os-elon-musk
    Branch: claude/project-thread-beijtf (the harness-pinned branch for this session; it names no issue, so this claim is the identity record)
    Worktree: objectstack-issue-24889
    Domain: domain:devx
    Seat: domain:devx#1 (seat post #6023)
    File surface: docs/releases-maintenance.md only (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: none
    Serial constraints cleared: none — no open PR touches the file.

    Dispatched under the maintainer's 「同意」 to the director's ruling batch 1, item 5A (devx dispatches p3 after the p1; this card first). Premise re-read on origin/main: the GA cut section of docs/releases-maintenance.md has no wait-for-in-flight-scheduled-CI step before the release approval; the card's :297 anchor is stale (the section is now about :443–:475).

  2. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 24889,
      "status": "done",
      "branch": "claude/project-thread-beijtf",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25320",
      "head_sha": "64ff9db3c5900298e0586d7f46939696eecb0f80",
      "session": "session_01LKHDniRQSWjRJyDtacwpEd",
      "premise_still_valid": true,
      "summary": "Added one maintainer step to docs/releases-maintenance.md, section 'Cutting a GA release — the Version Packages PR flow' (after the 'First, check #4935 is current' step). Before approving the release environment, read the 'Full battery green at the version commit' job's per-workflow lines. If a CI run on the version commit, or on a commit between it and the run the CI line names, is still in progress (normally the hourly schedule run), wait for it to complete (about 25-30 min). Green: approve. Red: treat it as the gate's refusal. The step gives the 18.0.0 reason (green 9 commits back, the in-flight run 2 commits back went red) and says this is a wait, not a merge freeze. Draft PR #25320, 32 added lines, one file.",
      "measured": {
        "release_yml_job": ".github/workflows/release.yml:1508 at 9dc1f42d50 -- `name: Full battery green at the version commit` (job id full-battery, step 'Read the full battery at or before the version commit' at :1556, runs scripts/ci/scheduled-full-run.mjs --release-gate; reads completed schedule/push runs of CI, Lint & Type Check, Spec Shape Gate; never waits; prints to the job log only)",
        "ci_yml_schedule": ".github/workflows/ci.yml:58 at 9dc1f42d50 -- `- cron: '0 * * * *'` (hourly, minute 0); lint.yml:47 has the same cron",
        "ci_duration": "the 20 most recent completed schedule runs of ci.yml on main as of 2026-10-23 00:20Z: 14.4-38.7 min, median 28.7, 14 of 20 in 25-31",
        "incident": "39412016980 CI schedule abd5acdaf7 success 11:01-11:25Z; 39419131283 CI schedule 81120caac8 failure 12:01-12:30Z; 39427630088 Release dispatch failure; first-parent from 06cab4849a: 81120caac8 = 2 back, abd5acdaf7 = 9 back"
      },
      "files_changed": [
        "docs/releases-maintenance.md"
      ],
      "tests": "docs-only diff, so no package build or test is owed. Local gate subset at 64ff9db3c5 below.",
      "gates": "dispatch-gates --commands at 64ff9db3c5 derived 13 commands; exit codes captured to files before any pipe: check-ci-filter-parity 0, check-closing-keyword-parity 0, check-closing-keyword-parity --self-test 0, check-comment-mask-corpus 0, lint check:doc-formula-expressions 0 (first run exit 3 = prerequisite, @objectstack/lint unbuilt; built formula+lint under os-verify-lock, VERDICT command-exit 0, then re-ran 0), check:cross-package-test-inputs 0, check:doc-authoring 0, check:driver-memory-census 0, check:gitlink-declared 0, check:nul-bytes 0, check:refd-timer-probe 0, check:required-contexts 0, check:watch-hint-literal 0. --ran: '13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. PR check-runs at report time: Check Changeset success, 'No other open PR may claim the same issue' success; Lint lanes, Type Check lanes, Governed Surface Queue Guard and doc links in_progress.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "2 — mcp__github__issue_read (get, get_comments); no write tools",
      "api_writes": "2 relay strokes — pr_create (objectstack-ai/objectstack#25320, read-back identical, assignee os-elon-musk, label skip-changeset read back on the PR) and this os-dev-report comment; plus git push of claude/project-thread-beijtf (not REST)",
      "deviations": [
        "Local branch is named claude/issue-24889-release-approval-wait. `git worktree add -B claude/project-thread-beijtf` was refused because the shared checkout /home/claude/objectstack has that branch checked out. I did not switch the shared checkout. Pushes go to the fixed remote branch by refspec (HEAD:refs/heads/claude/project-thread-beijtf), so the PR head is claude/project-thread-beijtf as dispatched.",
        "The PR body opens with the attribution comment line and ends with the dispatch's footer, as dispatched. os-dev.md wants `Fixes #N` first and the session-URL `_Generated by_` footer, and avoids HTML comments in GitHub text. I followed the dispatch's explicit spelling. Read-back: the stored body is byte-identical (4767 bytes).",
        "The commit trailer is the dispatch's Co-Authored-By line, which carries a model name. AGENTS.md exempts a harness-written trailer, and the pre-push hook did not refuse it."
      ],
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 23, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #25320 · domain:devx seat 1 · session_01LKHDniRQSWjRJyDtacwpEd · 2026-10-23T01:00Z

    • Reviewed at head 64ff9db3c5: one file, docs/releases-maintenance.md (+32). It adds one maintainer step before the release approval: read the Full battery green at the version commit job, and wait for any nearer CI run still in flight. It gives the 18.0.0 reason and says the step is a wait, not a merge freeze.
    • Facts re-measured by the seat on origin/main 9dc1f42d50: release.yml:1508 job name and :1556 step name; selectFullBatteryRun at scripts/ci/scheduled-full-run.mjs:776. The dev's report carries the hourly cron and the duration sample.
    • Gates: the dev's derived set is 13 of 13 at exit 0, --ran reconciled. On the PR, every check run is success or an expected skipped (45 runs).
    • Not governed (docs/releases-maintenance.md is not on the register), skip-changeset. It lands under the maintainer's standing authorization (director ruling batch 1, item 1A: seat review PASS, every check green, no Tier H path).
    • Landing: ready → auto-merge through the merge queue.
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, iteratedocumentationImprovements or additions to documentationdomain:devxpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions