docs(quickstart): name what each path loads out of the box at CLI 17.5.0 - #289
Conversation
Both paths now load the package management service (PackageServicePlugin), so it joins the both-paths list. Path B's scaffold declares requires: ['automation', 'triggers'] in objectstack.config.ts, which adds the automation service and four flow triggers; that is attributed to Path B rather than listed under "either path". Measured on fresh 17.5.0 boots: os start in an empty directory loads 31 plugins, pnpm dev on the scaffold 36, the same scaffold with the requires line removed 31, and os start on the unmodified scaffold 36. The closing sentence now says the list above loads even when nothing declares it, which is what the empty-directory boot shows, and keeps "activate when something declares it needs them" for the declared rest. Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: Inputs read, and nothing else: card #141 (body and all 27 comments, the newest The diff. One file, Check-runs on the head. ① Derived judgments
② Semver level
③ Boundary flagsDev flags (deviations in 5926848077), each answered:
PR body acceptance notes:
Open question — keep the clause (A) or restore the original sentence (B): A. B would restore a sentence this round measured false for the base list, under a list the same PR just corrected; a public page should not carry a claim its own measurement contradicts. A is the minimal wording that states what was measured, and the dispatch rule that the section must be true for both paths selects it. The revert is one line, and it would be a one-line regression. Escalated to the seat (not defects of this diff):
Implemented-by: VERDICT: PASS Generated by Claude Code |
Part of #141
This PR brings the "What's loaded out of the box" section of
content/docs/quickstart.mdx(:280–:296) up to what each path loads at@objectstack/cli17.5.0. It is the follow-up the seat took on from PR #288's contract review (③), on the same 17.5.0 trigger. The diff is one file, +8/−3.What each path loads at 17.5.0, measured this round
I ran one fresh boot per path from an isolated
npm --prefixtree. The CLI tree and the scaffold each read back 53 of 53@objectstackpackages at 17.5.0.Plugins:os startin an empty directory, which printsNo objectstack.config.ts or artifact found — booting empty kernel...pnpm devon a freshos init my-app -t app --installscaffoldempty, the empty-kernel app.my-app, the scaffolded app itself, plus AutomationServicePlugin, RecordChangeTriggerPlugin, ScheduleTriggerPlugin, TimeRelativeTriggerPlugin and ApiTriggerPlugin.Every name the list already carried still maps to a plugin that both paths load:
@objectstack/setupand@objectstack/account.So nothing is removed. PackageServicePlugin was the one shared plugin the list did not cover, and it is added as "Package management".
The app slot (
emptyon Path A,my-appon Path B) holds the loaded app, not a platform plugin, so it stays out of the list. The page already describes both: the empty kernel on Path A and your own app on Path B.Why Path B loads five more: the scaffold's declaration, not dev mode
The scaffold's
objectstack.config.tsdeclaresrequires: ['automation', 'triggers']. Two more boots separate that declaration from the mode:requireslinePlugins:pnpm devon a copy of the scaffold with that one line deletedos starton the unmodified scaffoldApart from the five, each list matches the Path B dev boot exactly (symmetric difference 0). The CLI 17.5.0 source agrees: in
dist/commands/serve.js,CAPABILITY_PROVIDERSmapsautomationtoAutomationServicePlugin, and mapstriggersto the record-change, schedule, time-relative and API trigger plugins.So "they activate when something declares it needs them" holds for these five. The new sentence credits them to Path B and names the declaration.
The closing sentence: one clause added
For the both-paths list, the sentence was not borne out. Path A boots with no config and no artifact, so nothing declares anything, and it still loads all 30. The scaffold with its
requiresline deleted also loads all 30.The CLI source shows why.
serve.jsappends the spec'sPLATFORM_ALWAYS_ON_CAPABILITIEStorequireson every boot whose preset is notminimal. At 17.5.0 that list ends inpackage-registry, which is the token behind PackageServicePlugin.So the sentence now says the list above loads even when nothing declares it, and it keeps "activate when something declares it needs them" for the rest. If the seat would rather leave that half of the sentence as it was, reverting it is a one-line change.
Reader-facing names and their sources
Each name comes from the published 17.5.0 package's own description.
@objectstack/service-packagepackage.jsondescription: "Package management service for ObjectStack — publish, install, and manage packages". The class JSDoc indist/index.d.tssays "Package Management Service Plugin".@objectstack/service-automationpackage.jsondescription: "Automation Service for ObjectStack — implements IAutomationService with plugin-based DAG flow execution engine"@objectstack/trigger-record-changepackage.jsondescription: "Record-change flow trigger for ObjectStack — auto-launches flows on object insert/update/delete …"@objectstack/trigger-schedulepackage.jsondescription: "Schedule flow trigger for ObjectStack — auto-launches flows on a cron/interval/once schedule …"@objectstack/trigger-scheduleclass JSDoc indist/index.d.ts: "Arms declarative time-relative flows". The package'sdescriptionnames only the schedule trigger.@objectstack/trigger-apipackage.jsondescription: "Inbound HTTP/webhook flow trigger for ObjectStack — per-flow HMAC-verified endpoints with queue-backed ingestion""Marketplace" in the list is a separate plugin and is unchanged. The CLI tracks it when it mounts the cloud marketplace surfaces from
@objectstack/cloud-connection(serve.js,trackPlugin('Marketplace')).Scope
The edit stays inside the "What's loaded out of the box" section. These are untouched:
reference/cli.mdxThere is no new section and no table on the page.
Gates on
1430ec1pnpm turbo run build --force --concurrency=2Tasks: 1 successful, 1 total,Cached: 0 cached, 1 totalpnpm turbo run test --force --concurrency=2Tasks: 1 successful, 1 total,✓ 7 self-test(s) passedcheck-locale-surface.mjs✓ every advertised URL has a source file and every source file is advertised; …check-translations.mjs✓ translations gate passedcheck-translation-ownership.mjs, run with the workflow's--actorand--filesThis PR touches 0 translation artifact(s) and 1 other file(s).check-translation-output.mjs --self-test✓ self-test: 29 rule case(s), 9 split case(s) and 5 derived-locale case(s) …check-translation-output.mjs --files, run with the workflow's argv✓ translation output gate passed (145 pre-existing finding(s) reported)gen-zh-hant.mjs --check(extra)✓ zh-Hant: 73 generated file(s) match the zh-Hans sources byte for byte.The built page
en/docs/quickstart.htmlcontains each of these strings twice:Package management,Path B also loads the automation service,inbound HTTP/webhook flow triggersandloads even when nothing.Plugins: 31 loadedandPlugins: 36 loadedstill appear twice each.Acceptance notes
Method notes
npm --prefixtree. The Path B scaffold came from that tree'sos init my-app -t app --install, not fromnpx./proc.Generated by Claude Code