Skip to content

release: the Docker image job fails at "Build and push" since Release #11838 (npm 18.0.0-next.2 published fine): npm install -g @objectstack/cli crashes in npm's peer resolution ("Cannot read properties of null (reading 'edgesOut')") #23801

Closed

Description

@objectstack-fleet

Filing gate: ① a red release step, measured. The maintainer asked for this card (2026-10-16): 「11838 npm发成功了,docker失败了,立卡排查」 (Release #11838: the npm publish succeeded and the Docker image failed; file a card to investigate). Filed by the cloud seat repo:cloud#1 (seat post #6026, session session_01WVbr5J6u8BHh8EyFtcWciH). ⛔ Not a claim; grade and lane are triage's.

What failed

Reproduced outside CI (Node v22.22.0, npm 10.9.4, the Dockerfile's command into a scratch prefix)

Command Result
npm install -g @objectstack/cli@18.0.0-next.2 "pg@^8.0.0" "mysql2@^3.0.0" exit 1: npm error Cannot read properties of null (reading 'edgesOut')
the same with @objectstack/cli@18.0.0-next.1 exit 1, same error
the same with @objectstack/cli@17.7.0 (npm latest) exit 1, same error
the next.2 command plus --legacy-peer-deps exit 0: 526 packages, os / objectstack bins present

The crash site (npm debug log):

TypeError: Cannot read properties of null (reading 'edgesOut')
    at #loadPeerSet (@npmcli/arborist/lib/arborist/build-ideal-tree.js:1289:38)
    at async #loadPeerSet (build-ideal-tree.js:1297:11)
    at async #buildDepStep (build-ideal-tree.js:904:11)
  • Just before the crash, npm was fetching the peer set of vitest (@vitest/coverage-*, @vitest/browser, @vitest/ui, happy-dom, jsdom, canvas, puppeteer-core).
  • The only vitest edge among the CLI's 50 @objectstack/* dependencies is @objectstack/metadata-core's optional peer vitest: ^4.0.0 (peerDependenciesMeta.vitest.optional: true). It is present in 17.7.0, next.1 and next.2.
  • What the reproduction implies:
    • Every version fails today, including ones whose images built before.
    • So the trigger is probably a newer third-party release inside that peer graph meeting npm 10.9's arborist, not anything in next.2 itself. NOT MEASURED: which package and which version.
    • All published images are affected only for rebuilds. Already-pushed tags are not.
  • Every @objectstack/* dependency of the CLI at next.2 exists on npm (checked one by one), so this is not a missing publish.

Wanted (the lane picks; candidates, not a ruling)

  • A Docker build that installs the CLI deterministically, for example:
    • --legacy-peer-deps (measured to work; check that no required peer is lost: pg and mysql2 are installed explicitly);
    • or an install from a lockfile;
    • or a pinned npm version in the image.
  • Or remove the cause in the dependency graph: no vitest peer on a runtime package (metadata-core).
  • A follow-up Release run whose Docker job is green, and ghcr.io/objectstack-ai/objectstack:18.0.0-next.2 pushed. The Release job may need a re-run, or a docker-publish dispatch for that version.
  • Whatever is chosen, a check that a node:22-slim global install of the published CLI succeeds, so this fails before a publish and not after.

Related: Release runs #11838, #11840–#11842 · docker/Dockerfile · .github/workflows/release.yml / docker-publish.yml.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    priority:p1High: required for production / M2
    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they land
    on Oct 16, 2026
  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    First touch: p1 confirmed · lane domain:cli → domain:devx · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T03:55Z

    Read in this act: the body in full (0 comments), #23788 and PR #23799, #23805 and #23806.

    ⛔ Not a claim.

  3. added
    domain:devxDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they land
    pm:queueReady for the PM dispatch loop
    on Oct 16, 2026
  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 6 (same round as #23788) · domain:devx seat 2 · 2026-10-16T04:53Z · triage first touch 6207724201 (p1, domain:devx); carried by the in-flight PR #23799, so no new dispatch
    Session: session_016PVjjuVPte5XEJvaQx1E4t
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-23788-npm10-edgesout
    Worktree: objectstack-issue-23788
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: docker/Dockerfile, plus scripts/check-docs-image-tag.mjs as far as its install-line parse needs. Both are already in PR #23799 at head d19cc58886 (#23788's revised claim 6207588792). Stop on breach and explain it in the report.
    Container & model: M, mode:subagent, model: TIER_DEFAULT (#23788's dev; no new dispatch)
    Clause-②: no
    Responsibility: the live npm registry: vitest@4.1.12's self-contradicting peer set, reached through optional vitest peers (better-auth; @objectstack/metadata-core), meets npm 10's arborist | none: the runtime image's global install had no pinned installer | every Release run's Docker job since #11838, and anyone building docker/Dockerfile
    Thread-read: 6207724201
    Serial constraints cleared:


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: the runtime image builds again, and 18.0.0-next.2 is pushed · domain:devx seat 2 · session_016PVjjuVPte5XEJvaQx1E4t · 2026-10-16T05:10Z

    reading value
    fix PR #23799 → d795719926 on origin/main, merged 2026-10-16T05:02:56Z. docker/Dockerfile blob 26ff3696bf equals the PR head (#23788's landing record 6208488975)
    Release #11850 run 38853746497 (push of d795719926), conclusion success
    its Docker job job 116820812782, "Docker image / Build & push ghcr.io/objectstack-ai/objectstack", success (05:04:12Z–05:08:08Z)
    the image the job's smoke pulled ghcr.io/objectstack-ai/objectstack:18.0.0-next.2 (digest sha256:834b7ccdbf7c…) and ran it: @objectstack/cli/18.0.0-next.2 linux-x64 node-v22.23.3

    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingci/cddomain:devxDomain lane — seat card indexed by label:pm:seatpriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions