docs(cli): the README states the global flags and the os plugin group that the built os registers - #21354
Conversation
…o command rows as os does The README listed -v/-h as global short flags (both exit 2), said there is no os plugin command group (build/sign/publish are registered), described os init as always using the current directory, and os dev as hot reload. Claude-Session: https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check
What this run could not see
Coarse fallback — 26 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Review: REWORK, patch round 1, PR #21354 (head
|
…lags, and os serve --ui as the help does Patch round 1. The Cloud section said every cloud command reads os cloud login's session or --token/OS_CLOUD_API_KEY and --server/OS_CLOUD_URL; os environments * take -u/--url and -t/--token (env OS_TOKEN) and use the os login session instead. os serve --ui enables the bundled Console portal, not "Studio UI". The changeset now counts five false claims. Claude-Session: https://claude.ai/code/session_018gA1pE6eJtwHhqx72G8U9X Co-authored-by: Claude <noreply@anthropic.com>
Review: ACCEPT, patch round 1, PR #21354 (head
|
Contract reviewServed-tier: Scope read, at 2026-10-02T07:26Z: card #21310 (body and all three comments: the Claim 5945814810, the round-0 report 5946785715, the round-1 report 5947221232); PR #21354 (body, the two-file list, all three comments: docs-drift 5946760338, REWORK 5946805321, ACCEPT 5947260207); the net three-dot diff against ① Derived judgmentsThe diff touches no schema, no command, no flag, no env var and no exit code, so it implies no accept-set change. The one public-surface change it implies is the text of
② Semver level
Clause-②: no — correct; no accept set widens or narrows. ③ Boundary flagsDev flags from the two round reports (comments 5946785715 and 5947221232), each answered:
Check-runs on the head: all 34 grouped names have concluded and none failed ( Implemented-by: VERDICT: PASS Generated by Claude Code |
Fixes #21310
Clause-②: no
What changes
packages/cli/README.mdnow says what the builtosdoes. Every claim below was read off the built entry (packages/cli/bin/run.js,@oclif/core5.1.2), run from an empty cwd:os --help,os plugin --help, every topic's--helpand each documented command's--help. The credential sources were also measured against a local echo server.### Globallists--versionand--helponly. It says there is no short form:os -handos -vexit 2. It also names the commands where-vis the command's own flag.### Plugin Managementdrops "There is noos plugincommand group in v1". It lists the registered group instead:os plugin build,os plugin signandos plugin publish. It notes that the group has noinstall(per ADR-0025's status line), and thatos pluginis unrelated toos plugins.os init [name]andos dev [package]. Both are rewritten.os cloud login's session, or--token/OS_CLOUD_API_KEYand--server/OS_CLOUD_URL. A new#### Credentials and server URLtable states, per command, the server-URL flag, the token flag and the stored session it uses. The typical publish flow now says that itsos environments createstep does not read theos cloud loginsession.os serve --ui(patch round 1) now uses the--helpwording: "Enable the bundled Console portal", in place of "Enable Studio UI"..changeset/21310-cli-readme-flags.mdis apatchfor@objectstack/cli, becauseREADME.mdis in the package'sfiles. It now counts five false claims.No code, flag, environment variable, exit code or help page changes.
packages/cli/package.jsonis untouched.Short flags: the README route (docs follow the implementation)
Readings on the built entry from an empty cwd. "Before" is at
1caa60373, the branch point after #21167 landed. "After" is at9bdb092ca, this head.os -hcommand -h not foundcommand -h not found(unchanged by design)os -vcommand -v not foundcommand -v not found(unchanged by design)os --help1855676fe5a2bb87aa5871fc1bed196fos --version@objectstack/cli/17.6.0 linux-x64 node-v22.22.0The ruling's check. The ruling: "show that no command already uses
-h/-vas its own flag. If one does, choose the README route and say why."Six commands already own
-v. Found bygit grepforchar: 'v'inpackages/cli/src, then read back in each command's--help:-vis--verboseonos dev(dev.ts:212),os serve(serve.ts:1209),os start(start.ts:93) andos doctor(doctor.ts:1905).-vis--version VALUEonos package publish(package/publish.ts:315) andos package install(package/install.ts:57).No command owns
-h. So the ruling sends-vdown the README route.-hwas eligible on its own, and it is dropped too, for the reasons in the four axes below.What the alternative would have done. These rows come from oclif's own predicates,
versionAdditionandhelpAdditionin@oclif/core5.1.2lib/main.js. They were evaluated in memory on this package's loadedConfig, withadditionalVersionFlags: ["-v"]andadditionalHelpFlags: ["-h"]set on it. No file was written.-v servecommand -v not foundserve -v--verbose--verbose(oclif checks only argv[0] for a version flag)serve -hNonexistent flag: -hThe four axes.
git grepforos -h,os -vandobjectstack -h|-vover the whole tree (content/docs, skills, examples, packages, scripts) finds no occurrence. This README's### Globalwas the only text that named the short forms.-valready has two meanings inside this CLI: verbose on four commands and a package version on two. Adding a third that applies only at argv[0] (print the CLI version) makes the flag's meaning depend on where it appears. Making the docs follow the implementation removes the false claim with no runtime change.os -v servefails loudly with exit 2. With the key set, it would print a version line, exit 0 and start nothing, so a loud failure would become a silent one. The README now says the short forms do not exist, so an agent reading it uses--helpand--version, which work in every position.-hwork would also leave### Globalasymmetric, with no measured user who needs it.os plugin— the commands, verbatimos plugin --helpat9bdb092ca, exit 0. The output is byte-identical at1caa60373.Usage lines:
os plugin build [DIR] [-e VALUE] [-o VALUE] [--minify],os plugin sign ARTIFACT -k VALUE [--key-id VALUE] [-o VALUE]andos plugin publish [ARTIFACT] …. There is noinstall, and that matches ADR-0025's status line, which says the code-plugin install half is unimplemented.Every README command-table row against
--helpPlaceholders are spelled in capitals here (TYPE, NAME, ID).
os init [name]os init --helpsays: "When provided, a new directory with this name is created; otherwise the current directory is used." The Quick Start's ownos init my-appwas a counterexample.os dev [package]os dev --helpsays: "watch sources, rebuild the artifact, and restart the server on change".dev.tsrecords that the old "server will auto-reload" line "advertised a hot reload the runtime only partially performs".os serve [config]serve.ts:11importsisHostConfig/shouldBootWithLibraryfromutils/plugin-detection.ts, which detect a host config that carries instantiated plugins. The row leaves out the artifact fallback that--helpleads with, but that is an omission, not a false claim.os compile [config]-odefaults todist/objectstack.json.os validate [config]--helpalso mentions CEL expressions and widget bindings, which the row leaves out.os info [config]info.ts:117prints agents.os generate TYPE NAMEbcd68a29fbefore this branch's base). It is also already true:--helpmarks NAME optional, butgenerate.tsrefuses a metadata type without a name ("Missing required argument"). NAME is optional only for thetypes,clientandmigrationroutes.os create TYPE [name]--helpsays "Create a new standalone kernel code plugin from a built-in template", with TYPE = plugin.os cloud login-e/--emailand-p/--passwordskip the browser flow, and credentials go to~/.objectstack/cloud.json.os cloud whoami/os cloud logoutos cloud --help.os environments create --org ID --name Nprojectstopic inos --help.os environments list/show IDos package publish [artifact]dist/objectstack.json.os test [files],os doctor,os lint [config],os diff [before] [after]os explain [schema]### Globalos pluginsandos help(not commands)os pluginsexits 2 withcommand plugins not found, andos helpexits 2 withcommand help not found.package.jsonhas nooclif.pluginsand no@oclif/plugin-*dependency.os cloud login, or--token/OS_CLOUD_API_KEYand--server/OS_CLOUD_URLos package publishandos plugin publish. The new per-command table is below.os cloud login, thenos environments createos cloud loginsession present,os environments createexits 1 withAuthentication required. Please run os login or set OS_TOKEN environment variable.The flow now says so at that step and names what the step reads instead.OS_CLOUD_URL(or--server)"os cloud login,os package publishandos environmentsreadOS_CLOUD_URL. The flag is--serveronos package publishand--urlon the other two.os cloud whoami/logoutread neither.### os serve--ui--helpwording: "Enable the bundled Console portal at /_console/ when @object-ui/console is installed (default: true)".Cloud commands: flags, env vars and stored session, per command
Read off each command's
--helpat9bdb092ca. The "stored session" column was measured, not taken from the help:HOMEpointed at a temp dir holding only acloud.json, or only acredentials.json, whose URL was a local echo server that logged each request's path and bearer.os cloud login-u, --url(OS_CLOUD_URL, defaulthttps://cloud.objectos.ai)-e, --email/-p, --password, or the browser device flow~/.objectstack/cloud.jsonos cloud whoami,os cloud logout--jsononly)cloud.json(cloud/whoami.ts:26,cloud/logout.ts:29,39)os package publish-s, --server(OS_CLOUD_URL, defaulthttps://cloud.objectos.ai; with neither set, the URL incloud.json)-t, --token(OS_CLOUD_API_KEY, thenOS_TOKEN)cloud.json. With onlycredentials.json: exit 1, "Not logged in to ObjectStack Cloud. Run os cloud login first", and 0 requests. With onlycloud.json: the request goes to its URL with its bearer. WithOS_CLOUD_API_KEYorOS_TOKEN: the request carries that bearer.os plugin publish-s, --server(OS_CLOUD_URL)-t, --token(OS_CLOUD_API_KEY)cloud.json, by the same precedence code as package publish (plugin/publish.ts:170-178). Code-read only; not run, because it needs a built.osplugin.os environments list/show/create/bind/switch-u, --url(OS_CLOUD_URL); else the URL incredentials.json; elsehttp://localhost:3000-t, --token(OS_TOKEN)credentials.json, theos loginsession. With onlycloud.json, all five exit 1 withAuthentication required, before any request. With onlycredentials.json,listsendsGET /api/v1/cloud/environmentswith its bearer.OS_TOKENworks, andOS_CLOUD_API_KEYalone does not.os package install(a runtime command, not a cloud one)-r, --runtime(OS_RUNTIME_URL, defaulthttp://localhost:3000)--email/--password(OS_RUNTIME_EMAIL/OS_RUNTIME_PASSWORD)os whoami,os data *,os meta list/get/register/delete-u, --url(OS_CLOUD_URL)-t, --token(OS_TOKEN)credentials.json, through the samecreateApiClient(code-read)os datasource introspect/list-tables/validate-u, --url(OS_CLOUD_URL, elsehttp://localhost:3000)-t, --token(OS_TOKEN)datasource/introspect.ts:10-13, code-read).os login/os register-u, --url(OS_RUNTIME_URLfor login,OS_CLOUD_URLfor register; defaulthttp://localhost:3000)credentials.jsonAcceptance notes
These are out of scope. The last one is filed as #21360; the others are not filed.
build,start,verify,login,logout,register,whoami,migrate,data,datasource,db,i18n,meta,secret,storage,package installandenvironments bind/switchhave no row. These are omissions, not mismatches: the README does not claim to be complete, andcontent/docs/deployment/cli.mdxis the full reference.os cloud login,os environments createrefuses and says to runos login.os login --helpsays "For the hosted package registry, useos cloud logininstead." This round changes no code, so the README states the gap rather than closing it. The seat filed it as cli:os environments *never read theos cloud loginsession, whileos login --helpsends hosted users toos cloud login— the documented cloud flow loops #21360.Verification
pnpm turbo run build --filter=!@objectstack/docs --concurrency=2at9bdb092ca: 72/72 tasks, verify-lockVERDICT command-exit 0.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsat9bdb092cagives 52 commands; the mergedmainaddedcheck-dts-emitted.mjs --self-test. All 52 exited 0 at9bdb092ca, each exit code captured before any pipe. The--ranreconciliation reads "52 derived, 52 run, 0 NOT-MEASURED, 0 UNRUN", and that zero is derived from recorded exit codes.mainmoved again after the last merge. That happened while the gates ran:96b12b589(a pm-roster step inlint.yml) and23365eaed(spec). Neither touchespackages/clior this changeset. The merge queue rebuilds the PR on currentmain.os --helpis byte-identical at9bdb092caand at1caa60373: exit 0, 3712 bytes, md51855676fe5a2bb87aa5871fc1bed196f.os -handos -vstill exit 2.pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2: 244 files and 3461 tests passed,VERDICT command-exit 0, at4e7e91fd2. Since then,git diff 4e7e91fd2 9bdb092ca -- packages/clitouches onlypackages/cli/README.md, and no CLI test reads that file. The tests that mention a README read the README thatos createemits. The integration tier is left to CI.pnpm --filter @objectstack/cli typecheck: exit 0 at4e7e91fd2.Generated by Claude Code