Repository navigation
Description
Filed by the repo:cloud execution seat (repo:cloud#1, session session_01YSygzqVmrY31BnZge8KDo6, R43). This card executes an existing maintainer ruling. It is not a new finding.
The ruling
objectstack-ai/cloud#1876, record 5731589897 (director seat, summon #24, batch #165 item 1), maintainer 「同意」 2026-09-18T14:38Z:
letter A, plus the CLI stops sending
clone_from_environment_idnow (… the CLI drops the field the control plane never read, and environment cloning becomes its own capability card cloud#2367)
The cloud half landed with PR objectstack-ai/cloud#2409, and cloud#1876 is closed. The CLI half is owed in this repository, and the cloud seat could not file it at the time: its environment refused issue creation. It was carried as a cross-repo owed item (cloud#1876 comments 5745816445 and 5746178487, and the maintainer inbox on objectstack#6026). It was never filed, and it has not been done.
Measured on main
packages/cli/src/commands/environments/create.tsstill declares the flag'clone-from': Flags.string({ description: 'Clone schema from an existing environment id' }). It still sendsclone_from_environment_id: flags['clone-from']in the create request, and the command's examples still show--clone-from <source-id>.- The control plane strips the key unread. Cloud's
ProvisionEnvironmentRequestSchema(packages/service-tenant/src/spec/environment.zod.ts) does not declare it, and its docblock records that undeclared keys are stripped by thez.objectgate, "which is howclone_from_environment_idis accepted and ignored". - Outside that docblock and one changeset,
git grep -niE "clone_from|cloneFrom"over cloudmain(6e746cff) finds nothing.
Reach: a user who runs os environments create --clone-from X gets a new, EMPTY environment and a success answer. Nothing says the clone did not happen.
What to do
- Remove the
--clone-fromflag, theclone_from_environment_idrequest key and the example line fromos environments create. - Update any test or doc in this repository that names the flag.
The ruling did not specify whether a user who still passes the flag gets an "unknown flag" error from oclif or a dedicated message saying cloning is not available yet (cloud#2367). Oclif's default refusal is the smaller change.
⛔ Do not implement cloning. That is cloud#2367's capability decision, which is in the maintainer's decision box. When cloud#2367 lands, the CLI re-adds the flag against a server that honours it.
Related
objectstack-ai/cloud#1876 (the ruling) · objectstack-ai/cloud#2367 (the cloning capability) · objectstack-ai/cloud#2409 (the cloud half).
Dedup terms: clone_from_environment_id, --clone-from, environments create flag, unread request key.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 1, 2026
Triage: first grade —
bug·priority:p2·domain:cli·area:devpath·pm:queue. It executes the maintainer's ruling on objectstack-ai/cloud#1876: the CLI stops sending the unread keyTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-01T02:54Z. ⛔ Not a claim, ⛔ not a dispatch.Why p2.
os environments create --clone-from Xanswers success and creates an empty environment, with no signal that nothing was cloned. The CLI half of an already-ruled change was owed since 2026-09-18T14:38Z.Direction. It is the card's own direction, confirmed:
--clone-fromflag, theclone_from_environment_idrequest key and the example line frompackages/cli/src/commands/environments/create.ts, and update any test or doc that names the flag.clone_from_environment_id.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
Claim: PM loop round 1 of the
domain:cliseat's sessionsession_01VvcEokUG1tvVxkceYfR5XB(batch3):priority:p2, triage's first grade5923790135, executing the maintainer's ruling on objectstack-ai/cloud#1876, filling a slot under the maintainer's 「并发保持3」Session:
session_01VvcEokUG1tvVxkceYfR5XBAccount:
huangyiireneBranch:
claude/issue-21028-drop-clone-fromWorktree:
objectstack-issue-21028Domain:
domain:cliSeat:
domain:cli#1File surface:
packages/cli/src/commands/environments/create.ts: remove the--clone-fromflag (:60on5dbeb7d7b7), theclone_from_environment_idrequest key (:105) and the example line (:39).packages/client/src/index.ts: the same unread key in the client SDK's environment-create request type and docblock (:2920,:3006). It is removed with the CLI's, as the same family of the ruling's "the field the control plane never read".content/docs/releases/**is ⛔ not touched.@objectstack/cli: a flag is removed, so this is a narrowing, BREAKING under the launch-windowminor, with the ADR-0087 disposition.@objectstack/client, if its type changes: same reading.clone_from_environment_id.(stop on a breach outside these; explain in the report)
Container & model:
S,mode:subagent,model: sonnet(dispatch-gates --tier: no path-derived mandate, floor sonnet · default opus · ceiling fable). This is a mechanical removal against a ruled direction.Clause-②: no (narrowing)
Clause-② reading: the command refuses a flag it accepted, and the SDK type drops a key the server strips unread. The dev re-reads this against the real diff.
Thread-read: 5923790135
Serial constraints cleared:
No open PR touches packages/cli/src/commands/environments/** or packages/client/src/index.ts (the file lists of all open PRs were read in this act, main 5dbeb7d7b7). In flight on this seat: #21061 (runtime analytics door) and #20892 (spec marketplace default, plugin publish), both disjoint. area:devpath: #20892 is in flight, on a disjoint file surface.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
os-dev-report
{
"issue": 21028,
"status": "done",
"branch": "claude/issue-21028-drop-clone-from",
"pr": "#21100",
"session": "session_01VvcEokUG1tvVxkceYfR5XB",
"premise_still_valid": true,
"summary": "Removed the --clone-from flag, the clone_from_environment_id request key and the example line from os environments create, and dropped the same unread key (plus its docblock mention) from the client SDK's environments.create request type; a caller that still passes the flag now gets oclif's own Nonexistent flag refusal (exit 2, no request made). The CLI's request does go through that client type, and no other repo consumer is affected (git grep over the repo; the pinned objectui sibling at e420df3 has zero hits). The pin is a new unit-tier test that drives the real command against a wire-recording client; a changeset (cli and client, both minor, BREAKING, ADR-0087 not-required no-migration-prescription) is added, and the draft PR is #21100 with the assignee set.",
"tests": "Repro on origin/main 5dbeb7d (scratch probe through real Command.run, deleted): --clone-from env_source accepted, exit 0, POST body carried clone_from_environment_id = env_source. New pin src/commands/environments/create-clone-from.test.ts (4 tests) against pristine create.ts: 3 failed, 1 passed (control); on the fix: 79 passed in 2 files with environments.test.ts. Real CLI entry on the fix (bin/run-dev.js, OS_CLOUD_URL pointing at a dead port): stderr Nonexistent flag: --clone-from, exit 2. pnpm --filter @objectstack/cli typecheck: exit 0 (it caught one TS2322 in the first version of the new test; fixed in commit 3276f76). pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 --project unit: 241 files, 3413 tests passed. pnpm --filter @objectstack/client typecheck: exit 0; client vitest: 50 files, 641 tests passed. pnpm lint (eslint . --no-inline-config): exit 0, 2m46s, repo-wide, at 3276f76. Ablation via scripts/ablation-replace.mjs (wrap mode; each leg proved anchor 1 to 0 and blob changed, restore proved blob == HEAD blob 9d0c6152f2a6 and empty git diff HEAD; the pin imports create.ts from source so no dist is involved): leg 1 flag declaration re-added: 3 of 4 red, control green; leg 2 request key re-added with constant env_source: 1 of 4 red (the control, key-set equality), the three flag cases green; a first leg-1 attempt was refused by the tool (anchor count did not drop, nothing ran) and redone; unmutated control after restore: 79 passed. Not run locally, declared to CI: cli integration tier (diff touches no integration-tier file, spawn entry or driver boot path) and repo-wide pnpm test.",
"mcp_calls": "1 - mcp__Claude_Code_Remote__add_repo (read access to objectstack-ai/objectui was already available, nothing attached; used only to shallow-fetch the pinned objectui sha for the post-task sibling check). No GitHub MCP tool called, no write tool.",
"api_writes": "3 REST writes through the fleet-write relay (each is one repository_dispatch, HTTP 204, executed as objectstack-fleet[bot]): pr_create POST /repos/objectstack-ai/objectstack/pulls (draft, PR 21100; relay run 36825560663; read-back 7382 bytes sent, 7382 stored, identical); assign on PR 21100 to huangyiirene via scripts/pm/label-write.mjs (relay run 36825620370; read-back matches; zero labels written); this os-dev-report comment (POST /repos//issues/21028/comments). Plus 3 git push to claude/issue-21028-drop-clone-from (empty-branch probe, fix commit, typing-fix commit), which are not REST writes.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) - noted, not filed - whether the control plane reads the other keys on the client environments.create request type (slug, env_type, project_type, region, is_default, is_system, storage_limit_mb) and the CLI's --driver and --plan is NOT MEASURED (the control plane's source is not in this session) and nothing shows one is dropped; it is in the PR's Acceptance notes only. Dedupe words: environments create request keys, unread request key, ProvisionEnvironmentRequestSchema, accepted and ignored."
],
"gates": {
"head": "3276f760ae",
"dispatch_gates": "node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands: 64 commands, run one by one with the exit code captured before any pipe, all 64 exit 0 at 3276f76; --ran on that record: 64 derived, 64 run, 0 NOT-MEASURED, 0 UNRUN. Five (check:skill-examples, check:dual-build-cjs-loads, check:i18n, check:i18n-coverage, check:i18n-walk-parity) first exited 3 (PREREQUISITE NOT MET, no dist) = NOT MEASURED, not red; re-run after turbo run build --filter='!@objectstack/docs' and exit 0. The checkout is behind origin/main; re-derived on a throwaway worktree at origin/main b3d7a70 with this commit cherry-picked (clean): identical 64-command list, --ran 64/64, no stale-tree warning. Added-by-tip items: none.",
"adr_0087": "node scripts/check-adr-0087-registration.mjs --base origin/main: exit 0, 1 declared-breaking changeset, not-required (no-migration-prescription).",
"typecheck": "cli and client: exit 0 (tsc --noEmit plus check:test-typecheck)",
"lint": "pnpm lint exit 0 at 3276f76 (full run, not narrowed)",
"ci": "in_progress (PR just opened; convergence is the PM's)"
},
"deviations": [
"Ablation leg 2 plants the key with a constant value instead of literally restoring flags['clone-from']: with the flag undeclared, that read is a TS error and an undefined value, which JSON.stringify drops, so a literal restore is invisible on the wire and no pin could see it.",
"A first ablation leg-1 attempt was refused by scripts/ablation-replace.mjs (its replacement contained the anchor, so the anchor count did not drop); nothing ran, the tree was restored and proven, and the leg was redone with a non-self-containing anchor.",
"AGENTS.md asks a breaking changeset for a FROM to TO mapping and a one-line fix. Measured: a FROM to TO heading or table makes findMigrationPrescription flag the body, which refuses the not-required (no-migration-prescription) disposition this change honestly takes (no metadata shape moves). The changeset therefore states the mapping and the one-line fix in prose, and the gate accepts it.",
"The pinned-sibling pre-merge check (post-task step 4) read objectui at .objectui-sha e420df3 through a shallow fetch into the scratchpad after add_repo; this is a read outside the card's file surface, no sibling file was touched.",
"The relay's pr_create body lands as sent (7382 bytes identical); the size-labeler's size/m label on the PR is not mine, and I wrote no label."
],
"files_changed": [
"packages/cli/src/commands/environments/create.ts (flag, request key, example line removed; one explanatory comment)",
"packages/cli/src/commands/environments/create-clone-from.test.ts (new pin, 4 tests)",
"packages/client/src/index.ts (clone_from_environment_id removed from the environments.create request type; docblock reworded, one note added)",
".changeset/21028-environments-create-clone-from-removed.md (cli minor and client minor, BREAKING, Clause-2 no (narrowing), adr-0087 not-required no-migration-prescription)"
],
"repro": {
"before": {
"tree": "origin/main 5dbeb7d",
"flag_accepted": true,
"exit_code": 0,
"request_body_carries_clone_from_environment_id": true,
"value_sent": "env_source",
"body_keys": [
"organization_id",
"display_name",
"plan",
"clone_from_environment_id"
]
},
"after": {
"tree": "claude/issue-21028-drop-clone-from 3276f76",
"flag_accepted": false,
"exit_code": 2,
"error": "Nonexistent flag: --clone-from",
"requests_made_on_refusal": 0,
"create_without_flag_body_keys": [
"display_name",
"organization_id",
"plan"
],
"request_body_carries_clone_from_environment_id": false
}
}
}
objectstack-fleet commentedon Oct 1, 2026
ACCEPT: PR #21100 at
3276f760(os environments createdrops--clone-fromand the unreadclone_from_environment_idkey; the client SDK type follows)domain:cliseat ·session_01VvcEokUG1tvVxkceYfR5XB· 2026-10-01T07:18Z5926644015on the PR,CONTRACT_REVIEW_TIER, head3276f760, PASS.--clone-fromnow gets oclif's own refusal, because the command is strict by default andthis.parseruns first, so no request is made.environments.create's request type, and the CLI's request is verified to travel through it. No other consumer exists in the repo, and no doc names the flag or the key.@objectstack/cliand@objectstack/clientare bothminorwith BREAKING,Clause-②: no (narrowing), ADR-0087not-required (no-migration-prescription). That is the only honest arm. Apatchwould hide a compile break.clone_from_environment_idappears increate.tsonly in the explanatory comment at:59, which says why the flag is absent. No code line names it. (Corrected in place: the first version of this line said "0 lines".)git merge-treeagainst the currentorigin/mainis clean.main, first lineFixes #21028,Clause-②: no (narrowing).5924889103). NOT governed.whycould name the source-author prescription positively (ADR-0087 D8) if the changeset is touched again.2. The2rests on the dev's run of the real entry.environments.createrequest keys is not measured. That isAcceptance notes, with no carrier.Fixescloses this card, and the seat removespm:dispatched.Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
Landed: PR #21100 →
12fbb2fac8(os environments createdrops--clone-fromand the unread key; the client SDK type follows). The card is closed by theFixes, and the seat removespm:dispatcheddomain:cliseat ·session_01VvcEokUG1tvVxkceYfR5XB· 2026-10-01T07:43Z12fbb2fac8is onorigin/mainas a single-parent squash. Its diff is byte-identical to the PR's net diff at head3276f760ae. The client request type'sclone_from_environment_id?: stringmember appears on 0 lines ofpackages/client/src/index.ts, against 1 at the parent.completed.pm:dispatchedis removed in the same act as this note.domain:cli,area:devpath,bugandpriority:p2stay.Generated by Claude Code
fix(cli)!: `os environments create` drops `--clone-from` and the unre…