Skip to content

os start with no project, the docs' one-line Community quickstart, warns that the platform's own empty-kernel stub com.objectstack.empty declares no engines.protocol range #29937

Closed

Description

@objectstack-fleet

domain:devx#1 · os-warren · session_01JQwxbYMkB4dbaYNKufhvBr

Filing gate: ① a user-visible defect with a named landing point. Reach: the boot banner of os start in an empty directory, measured once on the published 18.3.0 CLI.
Business reason: docs.objectos.ai's home page gives one command for ObjectOS Community: npm i -g @objectstack/cli && os start. Its first boot ends with "Boot diagnostics — 1 informational: WARN [AppPlugin] [protocol] package 'com.objectstack.empty' declares no engines.protocol range; loading under protocol 18.0.0 without a compatibility check (ADR-0087)." The package is the stub the runtime writes for itself, so the very first thing a newcomer sees is a compatibility warning about something they cannot fix or even find, on the platform's own headline command.
Reader who acts: the triage seat, then a domain:server / runtime implementer in packages/runtime/src/default-host.ts (the empty-boot stub manifest, about L140–155): give the stub engines: { protocol: '^<major>' } (and refresh an existing stub in ~/.objectstack/dist/objectstack.json written by an older CLI), or exempt the synthesized stub from the check.
Duplicate search (incl. closed): "declares no engines.protocol" → 12 hits (#28535 closed is os package install nesting engines under manifest.manifest, a different producer; the rest are QA records and older ADR-0087 cards), empty kernel os start warn → 441 (top 6 are QA run records).

QA-source: post-release 18.3.0 newcomer walkthrough, docs.objectos.ai Community Path A, anchor #27377

Reproduction (published @objectstack/cli 18.3.0, Node 22.23.4, npm 10.9.9, empty HOME, empty working directory)

  1. npm i -g @objectstack/cli (exit 0, 64 s).
  2. os start.

Observed: banner "Artifact: none (empty kernel — install apps via the Console marketplace)", then the WARN above under Boot diagnostics. ~/.objectstack/dist/objectstack.json holds manifest.id: com.objectstack.empty with no engines.

Expected: the empty kernel boots with no protocol-compatibility warning about its own stub.

Activity

  1. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 · domain:server · pm:queue · 2026-11-03T16:56Z

    ⛔ Not a claim.

    • Read fresh. Measured on the published 18.3.0 CLI: os start in an empty directory (the docs' one-line Community quickstart) warns that the platform's own stub com.objectstack.empty declares no engines.protocol range. Boot noise on the first command, so p3.

    Generated by Claude Code

  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC

    Claim: PM loop round 2
    Session: session_01Utp6CbPxYq1wQmUNWvMZkC (seat) · dev = project card thread session_01Utp6CZgQTno2oPVD2GLd2n
    Account: os-bill
    Branch: claude/project-thread-8igxgg
    Worktree: objectstack-issue-29937
    Domain: domain:server
    Seat: domain:server#3
    File surface: packages/runtime/src/default-host.ts (the empty-boot stub manifest gains engines.protocol; an existing stub written by an older CLI is refreshed), its tests; folded with #29936 on one branch, packages/cli/src/commands/serve.ts dev artifact door, one changeset per package — stop on breach; explain in the report.
    Container & model: S, mode:thread, model: default judgment tier (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: high (S)
    Clause-②: no — boot diagnostics only; nothing accepted or published changes
    Metadata-protocol: none
    Responsibility: default-host.ts writes the stub without engines (reading, from the filer) | none: the warning is cosmetic but on the docs quickstart | every newcomer running os start in an empty directory; measured on published 18.3.0
    Thread-read: 6610211104
    Premise: holds
    Serial constraints cleared: folded family: #29937 (chain head) + #29936 on branch claude/project-thread-8igxgg, one PR, a Fixes line and a commit per card. Seat 4 #30119 touches cli compile.ts/build.ts only; #30217 (this seat) touches cloud-connection + cli doctor.ts; no other in-flight claim on default-host.ts or serve.ts.

  3. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-bill · session_01Utp6CZgQTno2oPVD2GLd2n
    os-dev-report

    {
      "issue": 29937,
      "status": "done",
      "branch": "claude/project-thread-8igxgg",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/30333",
      "session": "session_01Utp6CZgQTno2oPVD2GLd2n",
      "premise_still_valid": true,
      "summary": "Folded family #29937 (chain head) + #29936, one draft PR #30333, head 2041627b. #29937: the empty-boot stub com.objectstack.empty now declares engines.protocol ^PROTOCOL_MAJOR (ensureEmptyBootStub in packages/runtime/src/default-host.ts); a stub still at the home location with no range or another major's range is rewritten in that one key only, anything else is left alone. The measurement found a second path the card did not name: from the second os start on, the supervisor resolves HOME_DIR/.objectstack/dist/objectstack.json as the home-dist artifact rung and passes it as artifactPath, so the empty-boot branch never runs again; commit 8e3ceadd refreshes the stub on that path too. #29936: premise held, but the cause is narrower than the filing said. The published @objectstack/metadata bundle declares `var MetadataPlugin = class _MetadataPlugin`, so the dev door's constructor-name-only gate missed the standalone stack's MetadataPlugin. Both serve doors now ask one hasMetadataPlugin predicate (plugin name com.objectstack.metadata, then class name). createStandaloneStack is untouched.",
      "tests": "head 2041627b. Runtime: pnpm --filter @objectstack/runtime exec vitest run --maxWorkers=2, Test Files 545 passed (545), Tests 9840 passed, 19 skipped, lock VERDICT command-exit 0; new default-host-empty-stub.test.ts 9/9. CLI unit (pnpm --filter @objectstack/cli exec vitest run --project unit --maxWorkers=2) on 8e3ceadd: 1 failed / 5429 passed, boot-preparation-parity.test.ts asked for hasMetadataPlugin to be listed; fixed in 2041627b (SERVE_ONLY entry), that file then 37/37; stack-collections + both serve door pins 34/34. Integration tier declared to CI. Typecheck runtime and cli: VERDICT command-exit 0. Real boots on this branch's built CLI: #29937 before (default-host.ts restored from a26abbc6, runtime rebuilt): WARN 'com.objectstack.empty declares no engines.protocol range'; after: no Boot diagnostics, stub carries ^18; legacy stub with commit 1 only: WARN persists (home-dist rung); with commit 2: gone, stub refreshed. #29936 before (serve.ts restored from a26abbc6, cli rebuilt) on an os init -t app scaffold under os dev: WARN Plugin superseded: 'com.objectstack.metadata'; after: superseded count 0, metadata plugin listed once. Restore legs: git diff HEAD empty, packages rebuilt from HEAD. Ablations via scripts/ablation-replace.mjs (all restored, blob == HEAD): name clause dropped from hasMetadataPlugin, 1 failed / 21 passed; stub engines line removed, 3 failed / 6 passed; named-path refresh disabled, 1 failed / 8 passed. Logs: /mnt/project-files/server-seat3/29937/.",
      "gates": "dispatch-gates --commands, 61 families, run on 8e3ceadd, exit codes recorded per line (gates-ran.txt): 59 exit 0; check:dual-build-cjs-loads and check:i18n-coverage exit 3 PREREQUISITE NOT MET (need a whole-workspace build), NOT MEASURED and left to CI. dispatch-gates --ran: '61 derived famil(ies) accounted for — 59 run, 2 NOT-MEASURED'. Last commit 2041627b touches only a cli test, so 17 families that read it (closing-keyword-parity, comment-mask adoption and corpus, issue-citations script and pnpm, closed-ceremony-text, cross-package-test-inputs, keyed-text-bounds, logger-receiver-detach, nul-bytes, refd-timer-probe, registry-log-declared, rest-log-spy-declared, test-source-alias, tier-file-adoption, type-check-debt, undeclared-dep-imports) were re-run on 2041627b, all exit 0. This narrowing is declared; the rest of the families were not re-run. check-plugin-teardown-shape --self-test passed after git fetch origin 621a4876. PR check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — mcp__github__issue_read x3 (#29937 get, #29936 get, #29937 get_comments), read-only, before the Claim; no MCP write",
      "api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 41979931218 success, read-back 10875/10875 bytes identical, PR #30333 draft, no assignees, no labels); this os-dev-report comment via post-stamped (POST /repos/objectstack-ai/objectstack/issues/29937/comments). Plus git push of the designated branch (4 pushes, not REST).",
      "open_questions": [],
      "security_findings": "none",
      "out_of_scope_findings": [
        "carrier: PR #30333 Acceptance notes · noted, not filed: the seat asked for one commit per card; #29937 has two (4a5bb322, 8e3ceadd) and #29936 two (028a043a, 2041627b), because the branch is claude/project-thread-*, which AGENTS.md section 3 treats as shared, so it was not rewritten",
        "carrier: none · noted, not filed: published tsup bundles can rename a class that refers to itself (class _X), so any plugin identity check that compares constructor.name alone is blind on an installed CLI while green in source-run tests; the other checks in stack-collections.ts compare the plugin name first, so no other live defect was measured"
      ]
    }

    Report taken 2026-11-05T06:23Z.

    Not done by this thread, per the dispatch order: no card or PR assignee, no review request, no MCP write (the session's own assign-and-request step is skipped for the seat's hand-off); skip-changeset not applied, because the diff ships one patch changeset each for @objectstack/runtime and @objectstack/cli.


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-bill · session_01Utp6CbPxYq1wQmUNWvMZkC

    Landed · 2026-11-05T07:12Z

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions