Repository navigation
cli: objectui generate --from SOURCE prints "not yet implemented" and exits 0 — a declared, documented flag that does nothing reads as success to a script #11488
Description
Activity
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsTriage: first grade —
bug·priority:p3·domain:ui·area:devpath·pm:queue. Retire--fromand its docs row, as--outputwasTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-02T17:06Z. ⛔ Not a claim, ⛔ not a dispatch.Why p3. A documented flag does nothing and exits 0, so a script reads it as success. Nothing is written or lost.
Routing.
packages/cliisdomain:ui, as objectui#11476. Thecli.mdxrow rides in the same PR.Ruling: retire, on objectui#11476's precedent (
5955124315, 「declared means enforced: honour it or retire it」).- No producer is measured.
- An OpenAPI or Prisma importer is a new capability with no pull, and the startup rule does not grow a zero-pull surface.
- The experimental tag in the docs does not change that: a placeholder that exits 0 is the trap.
- So
--from, its no-op branch and its docs row are removed at once. ⛔ No placeholder kept, and no alias.
Pin: the built CLI refuses
--fromas an unknown option, andg page Probeis unchanged.Serial: after PR #11487 (objectui#11476) lands, in the same command.
Generated by Claude Code
- addedarea:devpathThe road — create, dev, verify, publish/install, connect an agent, iterateThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatand removed
on Oct 2, 2026 objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_01YLg8XqWGJ785fwQ5v4pH37
Account:os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)
Branch:claude/issue-11488-retire-generate-from
Worktree:objectui-issue-11488
Domain:domain:ui
Seat:domain:ui#1
File surface:packages/cli/src/cli.ts(thegeneratecommand's--fromoption and itsoptions.frombranch);content/docs/utilities/cli.mdx(its--fromrow);packages/cli/src/__tests__/cli-bin.test.ts(the documented-flags row and the built-CLI refusal pins objectui#11476 added); any other reader the enumeration finds; one@object-ui/clichangeset. The dev stops on a breach and explains it in the report.
Container & model:S,mode:subagent,model: opus(default judgment tier; no path-derived mandate for these paths)
Clause-②: yes
Why yes: the published CLI'sgeneratestops accepting--from. The built CLI refuses it as an unknown option, per triage's ruling5957399263(retire, on objectui#11476's precedent). The at-tier contract review is owed on the landing head.
Thread-read: 5957399263
Serial constraints cleared: read 2026-10-02T17:31Z at objectuiorigin/main9de0b3483.- PR objectui#11487 (objectui#11476, the same command and files) landed as
9de0b3483; this card builds on it. - In-flight claims of this seat: objectui#11440 (
packages/clionly at the ratchet test andknown-schema-types.ts), and objectui#11475 (PR objectui#11490, percent faces, in contract review). Neither touchescli.ts,cli-bin.test.tsorcli.mdx. - Draft PR objectui#11069 edits
packages/cli/src/commands/validate.ts/check.tsandcontent/docs/utilities/cli.mdx, region-disjoint from thegeneratetable's--fromrow. Whichever lands second mergesmain.
Scope: the PR says
Fixes #11488.
Generated by Claude Code
- PR objectui#11487 (objectui#11476, the same command and files) landed as
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11488,
"status": "done",
"branch": "claude/issue-11488-retire-generate-from",
"pr": "#11495",
"session": "session_01YLg8XqWGJ785fwQ5v4pH37 (subagent: the parent PM seat id, as the harness stamps it)",
"premise_still_valid": true,
"summary": "Retiredobjectui generate --from SOURCEper triage ruling 5957399263, the same move as objectui#11476 for--output. cli.ts loses the option and its now-unreachableoptions.frombranch (the action takes(type, name)); cli.mdx loses the whole generate flag table, because--fromwas its only row, so the section now reads likeadd/doctor(heading, one sentence, example block) and matchesgenerate --help(two arguments plus-h, --help). cli-bin.test.ts: the generate documented-flags row now asserts the positional arguments, the objectui#11476 refusal pin became an it.each over--outputand--from(the--outputtest name is unchanged), and the help pin asserts neither flag is listed, with its lit control moved to generate's own usage line. Changeset.changeset/11488-retire-generate-from.md: @object-ui/cli minor, BREAKING banner, FROM--from SOURCETO drop it (no external-source import exists), Clause-②: yes. Premise measured at BASE 9de0b34 on the built CLI:g page Probe --from openapi.yamlexit 0, two 'not yet implemented' lines, empty dir; commander refusal control--bogusexit 1error: unknown option '--bogus'. Draft PR #11495 is open; its assignee is NOT set (classifier refused label-write, see deviations).",
"tests": "All on final head 5d1d517. BASE leg (dist built from BASE 9de0b34, new pins in source; predicted 2 red, everything else green): observedTests 2 failed | 42 passed (44), red onexits non-zero naming --from as an unknown option, and writes nothing(expected +0 not to be +0) andlists neither --output nor --from in generate --help(expected 'Usage: objectui generate|g [options] …' not to match /--from\b/). Ablation (fix committed first as 5d1d517; option + branch planted back with objectstack scripts/ablation-replace.mjs in wrap mode, inside a script with its owntraprestore on an absolute path): anchor x1 -> x0, replacement x0 -> x1, blob ab22eb7e6fa6 -> 6b9bbbbf7eb6 = the BASE blob of cli.ts byte for byte; mutant source option-spelling count 1; CLI rebuilt; mutant dist/cli.js count 1; predicted the same 2 reds, observedTests 2 failed | 42 passed (44)on the same two names. Restore:git checkout HEAD --on the absolute path, blob after restore ab22eb7e6fa6 == HEAD blob,git diff HEADempty, porcelain empty; CLI rebuilt; restored dist/cli.js count 0;Tests 44 passed (44)(read from vitest's own count line; the lock printedVERDICT batch-last-exit 0because that command was a pipeline). dist side proven by hand with grep -c (ablation-dist-preflight is rooted in the objectstack tree). Buildpnpm --filter @object-ui/cli buildexit 0, dist: 0 hits of--from SOURCEspelling and 0 of 'not yet implemented' vs 2 for the--watchcontrol.pnpm --filter @object-ui/cli type-checkexit 0, --listFiles covers cli.ts and cli-bin.test.ts.pnpm exec vitest run packages/cli/+ page-node-headings-drawn-11436, toc-anchor-parity, nested-page-children-11223, body-dialect-census:Test Files 28 passed (28),Tests 498 passed (498), lockVERDICT command-exit 0. Built-CLI repro after fix:g page Probe --from openapi.yamlexit 1, stderrerror: unknown option '--from', dir empty; control without the flag exit 0, treepages,pages/probe.json. ESLint narrowing: (1) population = @object-ui/clilintscripteslint srcthat CI'sturbo run lintruns, root eslint.config.js, no package config; (2) --format json: 51 files linted = 51 tracked ts/js under packages/cli/src, 0 errors, 5 warnings all in untouched files, both edited files 0/0; (3) invariance: no parserOptions/project/projectService (grep exit 1, control 32 hits of rules|files), no import plugin, no eslint-rules file reads the filesystem (grep exit 1 over 23 tracked rule files) => this diff moves no verdict on an untouched file. Repo-widepnpm lintand fullpnpm testleft to CI.",
"gates": [
"pnpm --filter @object-ui/cli build :: exit 0 (lock VERDICT command-exit 0)",
"pnpm --filter @object-ui/cli type-check :: exit 0 (same locked call)",
"pnpm exec vitest run packages/cli/ + 4 cross-package readers :: Test Files 28 passed (28), Tests 498 passed (498), VERDICT command-exit 0",
"node scripts/check-doc-links.mjs (docs:check-links) :: exit 0, 'Links are valid across 17 scan roots.'",
"node scripts/check-doc-fence-languages.mjs (check:doc-fences) :: exit 0, '✅ check:doc-fences — every TypeScript block in 227 document(s) is fenced …'",
"node scripts/markdown-test-inputs.mjs --audit :: exit 0, '115 candidate test files, all adjudicated; 82 declared entries, all present.'",
"node scripts/check-control-bytes.mjs (check:control-bytes) :: exit 0, '✅ check-control-bytes: OK (scanned 10065 tracked text file(s); skipped 85 binary).'; manual control-byte grep over the 4 edited files: exit 1 (no hits)",
"node scripts/check-new-cross-file-line-citations.mjs (check:new-line-citations) :: exit 0, 'VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0'",
"node scripts/check-changeset-presence.mjs :: exit 0, '✅ 2 source file(s) of 1 released …', 1 changeset added",
"node scripts/check-changeset-no-major.mjs :: exit 0, '✅ No changeset declares amajorbump.'",
"node scripts/check-changeset-overwrite.mjs :: exit 0, '✅ No pre-existing changeset was modified or deleted.'",
"node scripts/check-changeset-claims.mjs (check:changeset-claims) :: exit 0, report-only; 2 pending changesets name a touched file (7658 names cli.mdx for its headings: no heading moved; 7694 names cli.ts as home ofobjectui validate: still true); both paragraphs re-read, both still true",
"node scripts/check-doc-component-types.mjs :: exit 0",
"node scripts/check-doc-example-ids.mjs :: exit 0, '✅ 415 real reference(s) all resolve in the catalog registry.'",
"node scripts/check-shell-escape-residue.mjs :: exit 0, '✅ check-shell-escape-residue: OK …'",
"node scripts/check-test-path-roots.mjs :: exit 0, '✅ check-test-path-roots: OK …'",
"node scripts/check-vi-mock-override-shape.mjs :: exit 0, '✅ check-vi-mock-override-shape: OK …'",
"node scripts/check-governed-queue-guard.mjs --test (4 paths) :: exit 0, '✅ NOT GOVERNED — 4 path(s) checked against 5 governed surface(s); none matched.'",
"eslint src in packages/cli --format json :: exit 0, 51 files, 0 errors, 5 warnings (untouched files); narrowing proof in tests",
"NOT MEASURED: node scripts/check-doc-snippet-types.mjs, reason: exit 2 'PRECONDITION NOT MET' (the 34 packages its snippets import are unbuilt here); the docs edit removes one table and touches no fenced block; CI runs it",
"CI on PR head 5d1d517 at report time: in_progress (42 check runs: 21 completed = 18 success + 3 skipped, 18 in_progress, 3 queued); not waited on per contract"
],
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "2 — (1) pr_create via fleet-write relay: POST /repos/objectstack-ai/objectstack/dispatches (HTTP 204) → executor POST /repos/objectstack-ai/objectui/pulls (draft) = PR #11495, read-back identical 10559/10559 bytes; (2) this os-dev-report comment via post-stamped.mjs: POST /repos//issues/11488/comments. Attempted and refused before execution (0 writes): label-write --assign os-elon-musk on PR #11495. Not REST: twogit pushto claude/issue-11488-retire-generate-from (empty probe, then 5d1d517).",
"open_questions": [],
"out_of_scope_findings": [
"class: b · reach: public entry, measured on this branch's built CLI:node packages/cli/dist/cli.js add Inputprints 'Object UI Add: Input' / 'Feature not implemented yet.' / 'This command will download the source code for InputRenderer to your project.', exits 0, writes nothing (empty temp dir) · evidence: contract quoted from content/docs/utilities/cli.mdx sectionobjectui add COMPONENT: 'Add a new component renderer scaffold to your project.'; help line 'Add a new component renderer to your project'; body is packages/cli/src/commands/add.tsadd(), three console.log lines and no write · Seam: spec:n/a (CLI contract = cli.mdxobjectui addsection + commander description) → runtime:packages/cli/src/commands/add.ts add(), called from theaddcommand action in cli.ts | consumer: none · family: the same declared-not-enforced CLI family as objectui#11476 and objectui#11488 (a documented surface that no-ops with exit 0); fold into the seat's family closer card if one exists, otherwise file for the seat; not fixed here (different command, outside the claimed file surface, and retire-vs-implement is triage's call) · dedupe words:objectui add not implemented yet exit 0·cli add component renderer scaffold no-op·commands/add.ts Feature not implemented yet"
],
"line_budget": "n/a (no skills/** in the diff)",
"deviations": [
"label-write PR assignee:node scripts/pm/label-write.mjs --repo objectstack-ai/objectui --issue 11495 --assign os-elon-muskwas refused by the Claude Code auto-mode permission classifier ('[External System Writes]') before it ran. Not retried by any other route, per the brief. The seat still owes: PR #11495 assignee = os-elon-musk (the card's).",
"Toolchain:pnpm install --config.engine-strict=falsein the worktree, as the brief directed.",
"Docs: the brief asked to keep the cli.mdx edit to the generate table's--fromrow.--fromwas that table's only row, so the whole table goes (header, separator, row; 4 lines incl. the blank line), not just the row, so the page does not carry an empty flag table. Still the generate table only, region-disjoint from draft PR objectui#11069 (validate/check sections), within the claimed file surface.",
"Tests: inside the claimed cli-bin.test.ts surface, the objectui#11476 describe was renamed togenerate refuses its retired flags (objectui#11476, objectui#11488)and its help pin renamed tolists neither --output nor --from in generate --help; nothing in the tree reads those titles (git grep, outside the file: 0 hits).",
"Attribution: commit trailer pair is the model-freeClaude-Session:+Co-authored-by: Claudeper objectui AGENTS.md (which takes precedence over the harness reminder's model-named trailer); the PR footer uses the os-dev session-URL form, not the harness's alternative footer."
],
"files_changed": [
"packages/cli/src/cli.ts (-9 +1: --from option and its options.from branch removed)",
"content/docs/utilities/cli.mdx (-4: the generate flag table, whose only row was --from)",
"packages/cli/src/tests/cli-bin.test.ts (+22 -14: generate flags row, retired-flag refusal it.each, help pin)",
".changeset/11488-retire-generate-from.md (new: @object-ui/cli minor, BREAKING, FROM → TO, Clause-②: yes)"
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actions✅ ACCEPT (seat review): PR objectui#11495 at
5d1d51704(Fixes #11488);generate --fromand its no-op branch are retired, and the built CLI refuses the flag; the at-tier contract review is owed before landingdomain:uiseat 1 ·session_01YLg8XqWGJ785fwQ5v4pH37· 2026-10-02T17:50Z. Read for this verdict: the dev report on this card, the PR body, its 4-file list (+38 / −27), the net diff at the head againstorigin/main9de0b3483, the changeset and the commit's trailer.Against triage's ruling
5957399263- "
--from, its no-op branch and its docs row are removed at once. ⛔ No placeholder kept, and no alias": met.- In
cli.ts, the.option('--from …')line and the unreachableoptions.frombranch both go, and the action takes(type, name). - In
cli.mdx, thegenerateflag table goes whole, because--fromwas its only row. The section now reads likeaddanddoctor: a heading, one sentence and an example. It matchesgenerate --help. - It is region-disjoint from draft PR objectui#11069's
validate/checksections.
- In
- "Pin: the built CLI refuses
--fromas an unknown option, andg page Probeis unchanged": met.- objectui#11476's refusal pin is now an
it.eachover--outputand--from. - The help pin asserts that neither flag is listed, with its lit control moved to
generate's own usage line. - The documented-flags row asserts the positional arguments.
- BASE dist: 2 failed / 42 passed, as predicted. With the option and branch re-planted (the BASE blob byte for byte) and the CLI rebuilt, the same two failed. Restored and rebuilt: 44 passed.
- objectui#11476's refusal pin is now an
Prose
@object-ui/climinor, with the BREAKING banner, FROM--from SOURCETO "drop it; no external-source import exists", andClause-②: yes. The same form as PR objectui#11487's, which passed its contract review.Mechanics
- Body line 1 is
Fixes #11488; line 3 isClause-②: yes, which holds: the published CLI's accept set narrows. - One commit, model-free trailer.
- Not governed: 4 paths, 65 lines.
- The PR assignee mirror is unset: the dev's assignee write was refused before any request was sent, and the seat leaves it.
Out-of-scope finding
class (b):
objectui add COMPONENTprints "Feature not implemented yet." and exits 0 → filed objectui#11496, for triage. It is the third surface of the family, a whole command this time.Next:
needs:contract-reviewgoes on the PR, and the at-tier review runs on5d1d51704once its checks complete. On PASS: ready and into the queue.
Generated by Claude Code
- "
objectstack-fleet commented
on Oct 2, 2026 ContributorAuthorMore actionsLanded: PR objectui#11495 merged as
1fe05ff37through the merge queue;pm:dispatchedand the assignee cleareddomain:uiseat 1 ·session_01YLg8XqWGJ785fwQ5v4pH37· 2026-10-02T18:18Z. Claim5957801998is spent. The ACCEPT is the seat's comment5958107550, and the contract PASS is record5958276867on the landing head5d1d51704.- Verified by content on
origin/main: the squash1fe05ff37's own diff against its parent0d723a33fis 4 files, +38 / −27, exactly the PR's file set and counts.cli.tsdeclares no--fromongenerate. The co-author trailer is model-free. - Closing keywords: the PR body names
#11488only. The card closedcompletedon the merge, and no other card was closed by it. - Filed from it: objectui#11496 (
objectui addis a no-op that exits 0). Triage ruled it retire, with a family close-out over every CLI command and flag. It is claimed and in flight, and was serial behind this PR. - Not set: the PR's assignee mirror. The dev's write was refused by its permission layer, and the seat left it.
Generated by Claude Code
- Verified by content on
- added a commit that references this issue
on Oct 7, 2026
Filing-gate category: ① a product defect with a named location and a measured reproduction, class (b).
reach:public entry, measured by objectui#11476's dev (dev report5957159207,out_of_scope_findings[0]). On the built CLI at2c0ddf226,node packages/cli/dist/cli.js g page Probe --from openapi.yamlprinted "Schema generation from external sources (OpenAPI/Prisma) is not yet implemented", exited 0, and wrote nothing. A script or CI step reads that run as success.Where (read by the seat at objectui
origin/main)packages/cli/src/cli.ts:155declares.option('--from <source>', 'Generate schema from external source (openapi.yaml, prisma.schema)')ongenerate.options.frombranch (:160–164) prints the two "not yet implemented" lines and callsprocess.exit(0).content/docs/utilities/cli.mdx:148documents it: "|--from <source>| — | Generate schema from external source (openapi.yaml,prisma.schema) — experimental |".The docs mark it experimental, and triage may weigh that. The
--helpline does not: it says "Generate schema from external source (openapi.yaml, prisma.schema)" with no qualifier.Same family
This is the second declared-but-unenforced flag on the same command. objectui#11476 retired
--output(triage ruling5955124315: "declared means enforced: honour it or retire it"), landing as PR objectui#11487. That PR leaves--fromuntouched, as its brief directed.Direction (for triage, not a ruling)
Honour it or retire it. If the capability has no pull,
objectui#11476's precedent is to retire the option and its docs row at once, with the built CLI refusing it as an unknown option. If it is kept as a placeholder, it must at least exit non-zero, so that no caller reads a no-op as success. Pin either way with the built CLI.Reader who acts: triage first (grade and ruling), then the lane that holds
packages/cli(domain:ui, as objectui#11476). Filed bydomain:uiseat 1 (session_01YLg8XqWGJ785fwQ5v4pH37). ⛔ Not graded here.Dedupe
--from,generatewith openapi / prisma, or "not yet implemented": 0 cards. The nearest is objectui#11476 (--output, the same command, landing).Dedupe words:
objectui generate --from not implemented·generate from openapi prisma exit 0·cli.mdx generate --from experimentalGenerated by Claude Code