Skip to content

Scenario runner: --packages workspace builds against the workspace's unreleased spec, skills and CLI (default stays published); the exporter refuses workspace records #31147

Closed

Description

@objectstack-fleet

epic:#3600#1 · hotlong · session_01Q4EjjPXwX1YfHyKJUh4agu

Filing-gate category: ② maintainer-directed task. Maintainer, verbatim (Claude Code session, 2026-11-07), answering the seat's two options (run on the published packages after each release; and a runner option to run on the workspace's unreleased packages beforehand): 「两种都要」. Routing, verbatim: 「能交给车队开发的你不要自己开发」. Epic: objectstack-ai/cloud#3600.

Problem

Every live run scaffolds with npm create objectstack, so the agent builds against the published packages: create-objectstack, @objectstack/spec, @objectstack/skills and @objectstack/cli, all 18.3.0 today (measured in the 2026-11-07 runs' package.json and skills-lock.json). That is right for what a customer gets. But it means improvements merged on main since 18.3.0 cannot be measured until a release:

The fleet cannot tell whether a skill change makes the agent err less before shipping it.

Ask

  1. --packages published|workspace on run-scenarios, default published, which keeps today's behaviour.
  2. workspace scaffolds the project from the workspace's own create-objectstack. It resolves @objectstack/spec, @objectstack/skills, @objectstack/cli, @objectstack/runtime, @objectstack/verify and every other @objectstack/* the scaffold depends on from the workspace. Packed tarballs (pnpm pack) are the likely route, so the project installs them exactly as it would install from npm; links would let the project see workspace-only files. The skills land in .claude/skills/ from the workspace build of @objectstack/skills.
  3. The run record and the scorecard state the package source: packages: published 18.3.0, or packages: workspace @ <commit sha> (unreleased).
  4. The gallery exporter (Scenario library T8: export verified scenario apps to a new gallery repository — source, run record, auto screenshots and the 8–10 问数 transcripts, rebuilt per release #30349) refuses a workspace record. Only published runs may be exported or shown. Pin it with a test.
  5. A test that workspace mode installs the workspace's skills (for example, a marker present only in the workspace build appears in .claude/skills/).

Reader: the domain:devx lane seat, from pm:queue.

Activity

  1. added
    priority:p1High: required for production / M2
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Nov 7, 2026
  2. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: audit · p1 kept · domain:devx · 2026-11-07T15:00Z

    ⛔ Not a claim.

    • An epic objectstack-ai/cloud#3600 card (scenario runner and cards), from the first complete mid-tier run or the maintainer's 「两种都要」. Routing per 「能交给车队开发的你不要自己开发」.
    • p1, domain:devx, area:devpath and pm:queue kept.

    Generated by Claude Code

  3. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Claim: PM loop round 1
    Session: session_01FEkQ5njkh3xbcDN6EtSfw7
    Account: os-project-manager
    Branch: claude/project-thread-r1z0z3 (a project card thread, session_01FEkQ5motx584vybgif8qQe; the thread can push only its harness branch, a measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-31147
    Domain: domain:devx
    Seat: domain:devx#3
    File surface: packages/qa/scenarios/src/runner/** (cli.ts flag, project.ts scaffold, scorecard.ts / transcript.ts package source), packages/qa/scenarios/src/export/** (refuse workspace records), their tests and the package README. create-objectstack only if the scaffold needs a hook (then a changeset is owed and declared).
    Container & model: M, mode:thread, model: default — dispatch-gates --tier: no path-derived mandate, effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card; maintainer-directed runner option
    Thread-read: 6708613132
    Premise: holds. run-scenarios on main 56baf78e has no --packages flag and scaffolds with npm create objectstack (runner/project.ts).
    Serial constraints cleared: none in flight on packages/qa/scenarios/src/runner/cli.ts or src/export/**; #31160 and #31159 (same cli.ts) are queued behind this card.

    Order: pm-orders/devx/order-31147.md (project files), handed to the card thread in its opening message.

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 7, 2026
  5. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5motx584vybgif8qQe

    os-dev-report
    {
    "issue": 31147,
    "status": "done",
    "branch": "claude/project-thread-r1z0z3",
    "pr": "#31188",
    "session": "session_01FEkQ5motx584vybgif8qQe",
    "premise_still_valid": true,
    "summary": "run-scenarios gains --packages published|workspace (default published, scaffold command unchanged). workspace builds what the release builds for every non-private @objectstack/* and create-objectstack (turbo build build:dist), pnpm-packs each (75), scaffolds with the packed create-objectstack untouched (npx -y file:TARBALL) under a global pnpmfile that points its install at the tarballs, persists them as pnpm overrides and reinstalls, then refuses the scaffold unless every @objectstack/* store entry is a tarball and .claude/skills/ equals packages/skills/dist/skills skill for skill. Every record (env.packages, env.packagesLine) and scorecard states 'packages: published 18.3.0' or 'packages: workspace @ SHA (unreleased)'; the gallery exporter refuses workspace records and records that state no source. No change to create-objectstack (no hook needed), so skip-changeset. Live measurement (no model): workspace scaffold all 61 @objectstack store entries from tarballs, 11 skills byte-identical, validate exit 0, boot health 200; a published 18.3.0 scaffold is refused by the same check (registry entries, 47 skill files differ). Found and fixed a nested-npx trap: --package= leaks npm_config_package into the scaffolder so its own skills step installed nothing.",
    "tests": "head 4551309. pnpm --filter @objectstack/scenarios test (after pnpm --filter '@objectstack/scenarios...' build, under the verify lock): Test Files 24 passed (24), Tests 470 passed (470); typecheck exit 0; VERDICT command-exit 0. New: test/runner/packages.test.ts 8 cases (real pnpm pack, npx -y file: scaffold, pnpmfile, both installs, against a temp workspace; marker present only in the workspace build lands in .claude/skills/; negatives: published catalog, registry store entry, no pnpm store), exporter.test.ts 4 cases (workspace record refused, newer workspace record removes the published export, unstated/versionless refused, published exports with the line), units.test.ts 3 cases (flag, lines, installed version). Ablations via scripts/ablation-replace.mjs, each restored blob == HEAD, git diff HEAD empty, src-imported suites (no dist leg): 1 exporter refusal disarmed -> exporter.test.ts -t published: 3 failed | 1 passed; 2 skills differ check disarmed -> packages.test.ts 1 failed | 7 passed; 3 pnpmfile env renamed -> beforeAll scaffold exit 1, suite red, 5 skipped. Recorded-driver end-to-end: NOT MEASURED, no recording in this container and live runs are paused.",
    "gates": "local, head 4551309: dispatch-gates --commands --repo objectstack-ai/objectstack -> 51 commands, all 51 exit 0 (captured before any pipe); --ran: 51 derived, 51 run, 0 NOT-MEASURED, 0 UNRUN. Round 1 on an earlier head read check-plugin-teardown-shape --self-test and check:dual-build-cjs-loads exit 3 (prerequisite not met); after git fetch --depth=1 of the pinned commit and the package build both exit 0. eslint packages/qa/scenarios --no-inline-config exit 0. CI check-runs on PR 31188: in_progress at report time (not waited for). List: pm-orders/devx/31147-gates-ran.txt and the PR body.",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "line_budget": "14 files, +697 / -30 (727 changed lines, under 3000)",
    "files_changed": [
    "packages/qa/scenarios/README.md",
    "packages/qa/scenarios/src/export/cli.ts",
    "packages/qa/scenarios/src/export/exporter.ts",
    "packages/qa/scenarios/src/export/record.ts",
    "packages/qa/scenarios/src/runner/cli.ts",
    "packages/qa/scenarios/src/runner/index.ts",
    "packages/qa/scenarios/src/runner/packages.ts",
    "packages/qa/scenarios/src/runner/project.ts",
    "packages/qa/scenarios/src/runner/scorecard.ts",
    "packages/qa/scenarios/test/export/exporter.test.ts",
    "packages/qa/scenarios/test/export/fixture.ts",
    "packages/qa/scenarios/test/runner/orchestrate.test.ts",
    "packages/qa/scenarios/test/runner/packages.test.ts",
    "packages/qa/scenarios/test/runner/units.test.ts"
    ],
    "deviations": [
    "Order hypothesis held with one change: tarballs via pnpm pack, but installed through a global pnpmfile during the scaffolder's own install plus persisted pnpm overrides, so create-objectstack runs untouched (no --skip-install, no copied skills command). Reasons in the PR Acceptance notes.",
    "A record without env.packages (written before this flag) is refused by the exporter as well as a workspace record: the ruling exports only published runs, and such a record does not show it was one.",
    "Overrides cover every package the release publishes, not only the scaffold closure, so a package the agent adds later is the workspace one too.",
    "Live build in this container covered the scaffold closure plus the Console (98 turbo tasks, 15 min); the runner itself builds all 75 released packages."
    ],
    "mcp_calls": "7 — reads only: issue_read get #31147, issue_read get_comments #31147 x3, issue_read get #30349, issue_read get_labels #31188 (failed: a PR number), pull_request_read get #31188",
    "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches; the relay created PR 31188 draft with label skip-changeset, read-back identical), and this os-dev-report comment via post-stamped. git push is not a REST write.",
    "open_questions": [],
    "security_findings": "none",
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Nov 7, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7

    Landed 2026-11-07T18:41Z · PR #31188 merged through the merge queue at 2026-11-07T18:41Z, as 86e9ef0a687d58b4554d6143a18c3d62f9b38c89.

    Reading Value
    PR #31188 merged: true, merge commit 86e9ef0a68, head reviewed 38562001b6 (ACCEPT on the PR, round 2)
    #31147 closed completed by Fixes #31147

    State change: pm:dispatched removed (card closed). Acceptance notes (NOT MEASURED, in the PR body): the agent's later pnpm add in a real run uses whatever pnpm the project dir resolves, and the persisted overrides were measured on pnpm 10.31 only; the pinned-pnpm shim is POSIX sh. Serial: #31160 (PR #31204) and #31172 (PR #31221) now take their second origin/main merge.

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

Metadata

Metadata

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain: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