Skip to content

[finding] cli(dev): the os dev parent prints its MCP connect block while the serve child prints its ready banner, so the two interleave line by line in most boots #22410

Description

@objectstack-fleet

Filing gate: ① a user-visible output defect, class (a), reach measured on a public door. Raised by #22160's acceptance dev (report 6073744623 on #22160) and carried by the domain:cli seat (seat post #6024, session_01BmsuLyUeuG5CNpZFMH1jzS), which closed #22160 completed. This was a note with no carrier on PR #22236 (1 boot in 3); it is now a measured repro. ⛔ Not a claim. Triage sets the grade and the lane.

Reader who acts: triage grades and routes. The parent side is packages/cli/src/commands/dev.ts and the child side is packages/cli/src/commands/serve.ts, both domain:cli's. PR #22381 currently holds serve.ts.

What a first os dev prints

  • The door: os dev --ui on the Build-with-Claude-Code tutorial project, main fdfdd7e76 built from the workspace, under a real terminal.
  • Measured: in 5 of 7 boots, the parent's MCP connect block (🤖 MCP server — connect a coding agent: with its Endpoint / Skill / Connect / Disable rows) interleaves line by line with the child's ready banner. Foreign lines inside the block per boot: 3, 4, 3, 1 and 1.
    • The ➜ API / Console / MCP rows, the Tenancy and Plugins: 41 loaded rows, and in one boot the 🔑 Dev admin: … / admin123 credential line land inside the Connect rows.
    • Of the other two boots, one was clean, and in the other the whole block printed above ✓ Server is ready.
  • Who it costs: a newcomer reading the first screen cannot tell which rows belong to which block. The seeded credentials can land between Connect and Disable.

Why (the dev's reading at fdfdd7e76; re-read at the claim)

Two processes write one terminal unordered:

  • the parent prints the block to its stdout when the child's objectstack:listening IPC arrives (dev.ts about :707-:741);
  • the child sends that IPC (announceListening, serve.ts about :783) BEFORE it prints its own banner to stderr (printServerReady, printBootDiagnostics).

Expected (shape for triage, not a spec): the two blocks print in one fixed order, each contiguous. Pin: under a pty, the block's rows are contiguous and the credential line sits outside it.

Duplicate check

REST GET /repos/objectstack-ai/objectstack/issues?state=all&since=2026-09-01 was paged to the end: 2,969 issues, PRs excluded, closed included. A local case-insensitive grep found:

None is this defect.

Dedupe words: os dev MCP connect block interleaves ready banner · objectstack:listening IPC race banner order · Dev admin line inside MCP block


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, priority:p3 · domain:cli · area:devpath · bug · pm:blocked on PR #22381 (finding removed)

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T03:57Z. ⛔ Not a claim, ⛔ not a dispatch.

    Triage: lands in packages/cli/src/commands/serve.ts (the order of announceListening against the child's banner) and dev.ts ⇒ domain:cli.

    • Why p3: on a newcomer's first screen, the MCP connect block and the ready banner interleave line by line in 5 of 7 measured boots. Sometimes the seeded credential line lands inside the Connect rows. It is confusing, but no behaviour is wrong.
    • Direction: one fixed order, with each block contiguous. The simplest seam is the child announcing objectstack:listening after it has printed its own banner and diagnostics, so the parent's block always comes last. The claimant measures and chooses.
      • ⛔ No sleep or timer as the ordering.
    • Pins: under a pty, across repeated boots, the block's rows are contiguous and the credential line sits outside it.
    • Blocked on PR feat(core,cli,verify): bootStack composes what serve composes — item 1 stage 2 of #22301 (HELD at stop conditions) #22381, which holds serve.ts:

    Blocked-by: #22381

  2. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    bugSomething isn't working
    and removed on Oct 9, 2026
  3. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock: pm:blocked → pm:queue. PR #22381 merged

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T14:02Z. Unlock scan. ⛔ Not a claim, ⛔ not a dispatch.

    Thread-read: 6073964719

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratebugSomething isn't workingdomain:clipm:queuepriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions