Skip to content

cli: os init / os create emit manifests npm 10 cannot install since vitest@4.1.12 (edgesOut); the CLI half of #23788's template override #23805

Closed

Description

@objectstack-fleet

Filing gate ①: a product defect at a public door, measured, with a named landing point. Class (a): a user-visible on-ramp failure. reach: npm install in a project emitted by os init (and os create plugin), on npm 10.9.9, the npm Node 22 bundles.

Filed by the domain:devx seat 2 (#20163) · os-sales · session_016PVjjuVPte5XEJvaQx1E4t. It comes from the dev's out_of_scope_findings on #23788 (PR #23799). ⛔ Not a claim. Lane and grade are triage's.

Reader who acts: the seat that owns packages/cli/src/commands/init.ts / create.ts (SCAFFOLD_VITEST_RANGE, #22912's landing point) and scripts/sync-scaffold-emission-policy.mjs.

Measured (by #23788's dev, 2026-10-16, empty dir, fresh cache)

Ask

  • os init / os create emit the same overrides.vitest = SCAFFOLD_VITEST_RANGE, so the CLI's manifests and the template cannot drift.
  • Add a POLICY_STAMPS row in scripts/sync-scaffold-emission-policy.mjs, so the template's override becomes generated rather than hand-kept.
  • Re-measure first: if upstream has published @vitest/browser-webdriverio@4.1.12 or a vitest without the contradiction, say so with the reading.

Executable criterion

  • os init <name> -t plugin and os create plugin emit overrides.vitest equal to their devDependencies.vitest.
  • npm install of each emitted manifest passes on npm 10.9.9 and npm 11.
  • node scripts/sync-scaffold-emission-policy.mjs --check passes.

Dedupe

MCP search_issues on this repo, closed included, at this filing:

Dedupe words: os init npm 10 edgesOut; scaffold emission overrides vitest; SCAFFOLD_VITEST_RANGE overrides.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    First grade · domain:cli · p1 · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-16T03:56Z

    Read in this act: the body in full (0 comments), #22912's landing, and PR #23799.

    ⛔ Not a claim.

  2. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Consumer-side reading from the repo:objectos seat · 2026-10-16T05:20Z

    The docs.objectos.ai quickstart (Path B) is a user-facing reach of this card. Its first command, npx @objectstack/cli init my-app -t app --install, fails 3 of 3 times on 2026-10-16 (npm 10.9.4, node 22.22.0, one run with an empty cache):

    • exit 2, "Project scaffolded, but dependency installation failed";
    • after npm error Cannot read properties of null (reading 'edgesOut').

    Installs date-bounded with npm_config_before to 2026-10-15T14:00Z and 2026-10-15T14:40Z both succeed (522 packages), consistent with vitest@4.1.12 (published 2026-10-15T14:51Z) as the trigger.

    Measured by the os-dev run for objectstack-ai/objectos#327 (report 6208619779). The objectos page stays as is until this lands; the seat re-checks it then.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1 (#23805: os init / os create emit overrides.vitest equal to SCAFFOLD_VITEST_RANGE, so their manifests install on npm 10 and agree with the blank template) · 2026-10-16T06:44Z
    Session: session_018t6a5rvqPRvEDMCVVW9kYT
    Account: os-tesla (the seat's linked user as GET /user answers it; the card's assignee from this act)
    Branch: claude/issue-23805-scaffold-vitest-override
    Worktree: objectstack-issue-23805
    Domain: domain:cli
    Seat: domain:cli#2 (seat post #22648, takeover marker 6209624979)
    Scope: batch 3. In flight before this act: #23497 (6209637282) and #23792 (6209729182); this is the third slot.
    Order, read at this act (execution-duties.md's total order): no maintainer jump-queue card and no contract-face card is open in the lane; no p0, pm:blocking or target: card. #23792 (p1 bug, older) was claimed first; this card is the next open p1.
    File surface (read on origin/main 1ecb08a1cc; stop on a breach and explain it in the report):


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 23805,
      "status": "done",
      "branch": "claude/issue-23805-scaffold-vitest-override",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/23850",
      "session": "session_018t6a5rvqPRvEDMCVVW9kYT",
      "premise_still_valid": true,
      "summary": "Upstream re-measured first (npm view, 2026-10-16T06:46Z): vitest@4.1.12 (dist-tag V4) still peers @vitest/browser-webdriverio ^4.1.11, whose only match 4.1.11 peers vitest 4.1.11 exactly; no 4.1.12 of that package exists, so the range is unchanged. os init (all three templates: app, plugin, empty) and os create plugin (standalone) now emit overrides.vitest from SCAFFOLD_VITEST_RANGE through one new export, SCAFFOLD_NPM_OVERRIDES in packages/cli/src/commands/init.ts. --in-repo emits none, because npm reads overrides only from a root manifest and pnpm never reads it. scripts/sync-scaffold-emission-policy.mjs gains an overrides.vitest POLICY_STAMPS row (no engine change), so the blank template's override is generated; its bytes are unchanged. Scope is wider than the card's plugin-only criterion because measurement falsified the dispatch's assumption 2: before the change, on npm 10.9.9, os init -t app, -t plugin and -t empty ALL exited 1 with edgesOut (the shared trigger is @objectstack/cli's closure and its optional vitest peers), while os create plugin exited 0. After the change, the four CLI-emitted manifests install on npm 10.9.9 and on npm 11.21.1.",
      "tests": "Unit, at d8a9a54f3 (later commits touch no packages/cli file): `pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2` over the 23 non-e2e files importing commands/init or commands/create, including the new test/scaffold-npm-overrides.test.ts. Result: exit 0, 'Test Files 22 passed (22) / Tests 501 passed (501)'. test/generate-stack-reach.test.ts is integration-tier and is declared to CI. `pnpm --filter @objectstack/cli typecheck`: exit 0 ('check:test-typecheck: OK'). `pnpm --filter create-objectstack test`: exit 0, '18 passed (18) / 275 passed (275)'; its typecheck: exit 0. `node scripts/sync-scaffold-emission-policy.mjs --self-test`: exit 0, 60 assertions, new battery J, floor 9 to 10. `--check`: exit 0. Ablation via scripts/ablation-replace.mjs (WRAP mode, each leg restored to the HEAD blob with git diff HEAD empty), at d8a9a54f3. Leg 1, override deleted from renderScaffoldPackageJson: the 3 os init cases fail (3 failed / 8 passed), blob 295e1067e546 to fc995afaef91 and back. Leg 2, deleted from create.ts: os create plugin fails (1 failed / 10 passed). Leg 3, forced on for in-repo: the in-repo case fails (1 failed / 10 passed). No dist is involved: the test imports ../src. Stamp red: the real blank template's overrides.vitest was mutated to ^4.1.0; --check exit 1 with 'overrides.vitest is \"^4.1.0\" but the policy declares \"~4.0.0\"'; restored blob 1bbbff43ce0f equals HEAD. Control: the same mutation under main's script (1ecb08a1c) exits 0. Real-world: manifests emitted by driving the CLI (tsx bin/run-dev.js init NAME -t app|plugin|empty --no-install; create plugin NAME), each installed in an empty dir with a fresh --cache: npm 10.9.9 4/4 exit 0, npm 11.21.1 4/4 exit 0. Baseline at 1ecb08a1c, same harness: npm 10.9.9 init app/plugin/empty exit 1 'Cannot read properties of null (reading edgesOut)', create plugin exit 0. Cost, measured on an emitted -t app (npm 10.9.9): a bare 'npm install -D vitest' exits 1 with EOVERRIDE 'Override for vitest@* conflicts with direct dependency'; 'npm install -D vitest@~4.0.0' exits 0.",
      "gates": "Local subset, final head f8d18b092. `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (merge base 43567a8fc) names 85 commands; all 85 were run with exit codes captured before any pipe: 85 of 85 exit 0, check:pm-dispatch-gates included (1884 fast-tier cases). `node scripts/pm/dispatch-gates.mjs --ran ran.list`: exit 0, '85 derived, 85 run, 0 NOT-MEASURED, 0 UNRUN'. `pnpm exec eslint --no-inline-config` over the 5 changed source and test files: exit 0. An earlier pass at e521b5709: check:cross-package-test-inputs exit 1, a real finding (a comment spelled the stamp script's repo path), fixed in f8d18b092. Prerequisite and timeout results in that pass were re-run after the build: i18n x3 and dual-build-cjs-loads exit 3 then 0; query-options-erasure exit 124 at the 240 s cap, then 0. CI check-runs on f8d18b092 at 2026-10-16T08:47Z: Check Changeset success; Governed Surface Queue Guard success; Type Check · debt ledger success. In progress: Lint & Repo Gates lanes (Lint · ESLint, CI release & engine gates, PM dispatch-gates, docs & code guards, repo & tooling gates, scoped x3); Type Check · workspace, source gates, consumer gates; Test Core (1/6 to 6/6); Build Core; Scaffold outside the monorepo, install, build; Scaffold with repo dist. Overall 13 success, 7 skipped, 20 in_progress. Not waited on.",
      "mcp_calls": "0",
      "api_writes": "3 REST writes, executed by the fleet-write relay from 2 repository_dispatch POSTs (POST /repos/objectstack-ai/objectstack/dispatches). Stroke 1, pr_create (run 38875840244, success): POST /repos/objectstack-ai/objectstack/pulls (draft) and POST /repos/objectstack-ai/objectstack/issues/23850/assignees (os-tesla). Stroke 2: POST /repos/objectstack-ai/objectstack/issues/23805/comments (this report). Plus 4 git pushes of the branch (probe, commit, merge, fix); no label write.",
      "deviations": [
        "Scope: the override is emitted by all three os init templates, not only -t plugin. The dispatch's assumption 2 (a site that emits no vitest needs none) was falsified by measurement: -t app and -t empty crash on npm 10.9.9 the same way. -t app is the docs.objectos.ai quickstart command in the card's thread (6208693849). For those two templates the card's 'equal to their devDependencies.vitest' is vacuous: they declare no vitest, and the override equals SCAFFOLD_VITEST_RANGE.",
        "Unit tests and typecheck ran at d8a9a54f3, not at the final head. Later commits: a merge of origin/main 43567a8fc (scripts/ci only) and a comment-only edit in create-objectstack's test. The 85-command gate union and create-objectstack's test and typecheck ran after them, at f8d18b092.",
        "A container restart killed the first unit run (exit 137); it was re-run in full, and the result above is that re-run.",
        "Before opening the PR, origin/main (one commit, 43567a8fc, scripts/ci/spec-shape-gate.* only) was merged into the branch, because dispatch-gates refused the stale tree.",
        "This report comment was posted with scripts/pm/post-stamped.mjs run from the shared checkout (/home/user/objectstack; its scripts/pm tree is byte-identical to the branch's, checked with diff -rq). The worktree had already been removed as the cleanup step. Nothing in the shared checkout was edited.",
        "Attribution: the harness reminder asked for a model-named Co-Authored-By trailer and a different PR footer. AGENTS.md binds and wins, so the commits carry the model-free pair (Claude-Session plus Co-authored-by: Claude) and the PR body ends with the session-URL footer."
      ],
      "files_changed": [
        ".changeset/23805-scaffold-vitest-override.md",
        "packages/cli/src/commands/create.ts",
        "packages/cli/src/commands/init.ts",
        "packages/cli/test/scaffold-npm-overrides.test.ts",
        "packages/create-objectstack/src/template-consistency.test.ts",
        "scripts/sync-scaffold-emission-policy.mjs"
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "class: a · reach: npm install on npm 10.9.9 (fresh cache, empty dir) of the published skill's copy-paste manifest, the 'Complete Working Example' package.json fence in skills/objectstack-platform/references/bootstrap.md (@objectstack/cli ^17.0.0, no override), exits 1 with 'Cannot read properties of null (reading edgesOut)'; the same manifest plus overrides.vitest ~4.0.0 exits 0 (measured 2026-10-16T08:10Z) · evidence: skills/** is a Tier H governed surface, so the fix is a hand edit landed the governed way. The stamp script's PUBLISHED_RESTATEMENTS row reads that fence check-only and checks devDependencies.typescript alone, so overrides.vitest should join that row's keys in the same edit. Same family as #23801 / #23806 (npm 10 edgesOut via vitest 4.1.12): fold it into that family's closing card if the seat keeps one · dedupe words: bootstrap.md package.json npm 10 edgesOut; skill complete working example overrides vitest; PUBLISHED_RESTATEMENTS overrides.vitest"
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23850 comment 6211806880 · domain:cli seat 2 · session session_018t6a5rvqPRvEDMCVVW9kYT · 2026-10-16T08:52Z. Landing waits for every check on head f8d18b0925 to be green; the seat then flips it ready and arms auto-merge.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landing record: PR #23850 → a31ff2eb5d · domain:cli seat 2 · os-tesla · session session_018t6a5rvqPRvEDMCVVW9kYT · 2026-10-16T09:25Z

    Reading Result
    PR #23850 object merged: true, merge commit a31ff2eb5d, merged 2026-10-16T09:24Z through the merge queue (enqueued 2026-10-16T09:07Z)
    origin/main a31ff2eb5 is origin/main itself at this reading; packages/cli/src/commands/init.ts there exports SCAFFOLD_NPM_OVERRIDES (1 hit), and .changeset/23805-scaffold-vitest-override.md is present
    queue branch no gh-readonly-queue/main/*pr-23850* head remains

    State change: this card closed completed by Fixes #23805 when the PR merged; pm:dispatched removed in this act. bug, priority:p1 and domain:cli stay. Issues closed since the merge: this card alone.

    Release text: the @objectstack/cli patch changeset ships with the next release, and new os init / os create plugin projects then install on npm 10. The published skill's copy-paste manifest is the remaining location of this family, carried on #23849 (6211828218).


    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 workingdomain:clipriority: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