Skip to content

mcp stdio: on an environmentId kernel, the objectstack://objects resources read the metadata service, so a package registered during boot is listed as no object and its objectstack://objects/NAME answers 404 #25245

Closed

Description

@objectstack-fleet

Filing gate ①: a measured defect on a public door. Filed by domain:cli seat 1 (seat post #6024) · os-sales · session session_01CxBKycaiUpA1yGx1XyoGqX, from the Acceptance notes of PR #25243 (#25138), measured by that card's session. ⛔ Not a claim.

Blocked-by: #25138

Reader who acts: the domain:cli seat (packages/mcp is that lane's), one PR, serial after #25138's PR #25243, which touches the same file (mcp-server-runtime.ts, one export) and introduces the merged object read this card should reuse.

Priority: p1, the maintainer's call (MCP first) as relayed to this seat by its project's coordinator on 2026-10-22 at 14:56 UTC; triage may re-grade.

What fails (measured at PR #25243's head 476460a86c)

On the env_local during-boot fixture (an environmentId kernel, a package registered during boot):

  • resources/read of objectstack://objects answers { objects: [], totalCount: 0 };
  • resources/read of objectstack://objects/qa_pkg_open answers 404 RESOURCE_NOT_FOUND;
  • yet, on the same head, list_objects and describe_object list and describe both objects.

Reach: the stdio resources/read door, measured. It reveals no record and serves no data verb; an agent that reads the resources sees an empty schema where the tools see objects.

Cause

bridgeResources in packages/mcp/src/mcp-server-runtime.ts reads the metadata service for both resources. On an environmentId kernel a package registered during boot has no metadata-service copy. This is the family of #25120 (HTTP bridge, closed), #25138 (stdio tools) and #25139 (actions): MCP reads the metadata service, not the merged view.

Shape (for the dev to measure)

Read both resources from the same merged object view PR #25243 gives the stdio data bridge (⛔ not a second copy of the merge), keep the exposure gate's reading (a disabled package's object refused, as #25136 and #25243 do), and pin resources/read for both URIs on both kernel shapes, with the control kernel.

Dedupe

MCP search_issues on this repository, closed included: "mcp stdio resources objectstack://objects metadata service package objects empty environmentId boot" → 0; "mcp resources read objects package registered during boot" → 0; control "mcp stdio environmentId kernel package invisible list_objects" → 9 (#25138, #25139 and closed siblings), so the channel reads this family. New.


Generated by Claude Code

Activity

  1. added
    bugSomething isn't working
    priority:p1High: required for production / M2
    domain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they land
    area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobs
    on Oct 22, 2026
  2. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    Unblocked · domain:cli seat 1 · session session_01CxBKycaiUpA1yGx1XyoGqX · 2026-10-22T17:02Z

    Blocked-by: #25138 target is closed completed (PR #25243 merged as squash 8010b641c, an ancestor of origin/main). Re-derived: no new blocker. The stdio data bridge now reads the protocol's merged listing, and this card's remaining surface (the stdio objectstack://objects resources still reading the metadata service) has no other open dependency. pm:blocked → pm:queue in this act. Routed to the #25138 card thread (same lane and context), then #25139.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: card thread, Sales-account project (domain:cli)
    Session: session_01TgbP2QERdKmh147ohacHbK
    Account: os-sales
    Branch: claude/project-thread-dkk3hd
    Worktree: objectstack (dedicated cloud container, not a shared checkout; the branch restarted from origin/main 0b8bce40 after PR #25243 merged)
    Domain: domain:cli
    Seat: domain:cli#1 (the card thread of seat 1, seat post #6024; 由Sales账户的项目负责)
    File surface: packages/mcp/src/mcp-server-runtime.ts (the two objectstack://objects resolvers and bridgeResources), packages/mcp/src/plugin.ts (the call that hands bridgeResources its reads), packages/mcp/src/stdio-data-bridge.ts (only if the merged reads must be shared, never copied), their tests under packages/mcp/src/, one real-kernel pin under packages/qa/dogfood/test/, one .changeset/*.md (stop on breach; explain in the report)
    Container & model: M, mode:cloud, model: TIER_DEFAULT (no path-derived mandate per dispatch-gates.mjs --tier; ceiling CONTRACT_REVIEW_TIER, reason: a narrowing owes one review at that tier before the queue)
    Clause-②: no
    Metadata-protocol: none
    Responsibility: packages/mcp's bridgeResources reads the metadata service copy, which an environmentId kernel never fills for a boot-registered package | the merged object read PR #25243 gave the stdio data bridge is the platform path; the two resources do not use it | every stdio MCP client that reads objectstack://objects on os dev / os serve / os start
    Thread-read: 6346502730
    Serial constraints cleared: PR #25243 (#25138) merged as 8010b641c, an ancestor of origin/main; #25139 (list_actions / run_action) is queued after this card in the same card thread; the seat's unblock 6346502730 re-derived no other open dependency


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: card thread, Sales-account project (domain:cli), revision 1 (the Clause-②: arm, read off the measured diff)
    Supersedes: 6346581465 — same session, branch and seat; only the Clause-②: line gains its (narrowing) arm and the file surface names the README paragraph
    Session: session_01TgbP2QERdKmh147ohacHbK
    Account: os-sales
    Branch: claude/project-thread-dkk3hd
    Worktree: objectstack (dedicated cloud container, not a shared checkout; the branch restarted from origin/main 0b8bce40 after PR #25243 merged)
    Domain: domain:cli
    Seat: domain:cli#1 (the card thread of seat 1, seat post #6024; 由Sales账户的项目负责)
    File surface: packages/mcp/src/mcp-server-runtime.ts (the two objectstack://objects builders and bridgeResources), packages/mcp/src/plugin.ts (the call that hands bridgeResources its view), packages/mcp/src/stdio-data-bridge.ts (the merged view shared, not copied), one new unit pin under packages/mcp/src/, the real-kernel pin packages/qa/dogfood/test/mcp-stdio-package-object-discovery.test.ts, one paragraph of packages/mcp/README.md, one .changeset/*.md
    Container & model: M, mode:cloud, model: TIER_DEFAULT (no path-derived mandate per dispatch-gates.mjs; ceiling CONTRACT_REVIEW_TIER, reason: the narrowing owes one review at that tier before the queue)
    Clause-②: no (narrowing)
    Metadata-protocol: none
    Responsibility: packages/mcp's bridgeResources reads the metadata service copy, which an environmentId kernel never fills for a boot-registered package | the merged object read PR #25243 gave the stdio data bridge is the platform path; the two resources do not use it | every stdio MCP client that reads objectstack://objects on os dev / os serve / os start
    Thread-read: 6346502730
    Serial constraints cleared: PR #25243 (#25138) merged as 8010b641c, an ancestor of origin/main; origin/main unmoved at 0b8bce40 when this revision was written; #25139 (list_actions / run_action) is queued after this card in the same card thread

    Why the arm: measured on the real kernel at the base tree, on the kernel shape without an environmentId the two resources still listed and described a disabled package's objects from the copy the boot made. After this card they omit them and answer 404 RESOURCE_NOT_FOUND, as describe_object does since #25243. A read that was served is now refused, so the arm is (narrowing), the PR title carries !, and the changeset carries the BREAKING banner and its ADR-0087 disposition.

    Additive only: claim 6346581465 stays; the card's labels and assignee are not re-written.


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25245,
      "status": "done",
      "branch": "claude/project-thread-dkk3hd",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25268",
      "head": "5cf1aa4ce32c79362b70f9c52d972cba65a9de83",
      "session": "session_01TgbP2QERdKmh147ohacHbK",
      "premise_still_valid": true,
      "summary": "The stdio MCP transport's objectstack://objects and objectstack://objects/NAME resources read the same object view list_objects and describe_object answer from since PR #25243: the protocol's merged listing (GET /api/v1/meta/object's read), the metadata service only on a host with no merged read. stdio-data-bridge.ts exports stdioObjectView (one listing and a by-name find over the same listing); the bridge's two discovery tools answer through it, and plugin.ts gives the same view to its runtime through the package-internal setRuntimeObjectView, read at each resources/read. bridgeResources keeps its published two-parameter signature, so the package's declared surface does not move. On an environmentId kernel a package's boot-registered objects are now listed and described by both resources; on the shape that copies, a disabled package's objects are omitted and answer 404 RESOURCE_NOT_FOUND (the narrowing). The completeness verdict stays the metadata service's.",
      "tests": "Pins: packages/qa/dogfood/test/mcp-stdio-package-object-discovery.test.ts (+10 real-kernel cases, 80 in the file: both URIs, both kernel shapes, boot and install registration, disabled package on both shapes, each resource body equal to the tool's answer) and packages/mcp/src/mcp-server-runtime.merged-object-resources.test.ts (14, doubles). Red/green under the verify lock (dogfood / unit): main (base tree with the new pins) 3/80 failed, unit not runnable on base; bridge leg 3 and 2; plugin leg 3 and 0; viewcopy leg 2 and 1; fix 80/80 and 14/14 (on a697b07f34; final head differs by one doc comment and the pin helper's typing). ablation-replace.mjs restores proven; ablation-dist-preflight.mjs markers present per leg, absent after. On the final head lineage: @objectstack/mcp test 42 files / 532 passed; mcp typecheck exit 0; dogfood typecheck exit 0 (the first run found TS2339 in the pin helper, fixed in 5cf1aa4ce3); pnpm lint exit 0; full build 76/76.",
      "gates": "Check-runs on 5cf1aa4ce3, read after the suite completed: 42 runs; 34 success, 7 skipped by design (Dogfood Regression Gate matrix row, Dogfood Verify CLI, Build Docs, Temporal Conformance, Console Pin Gate, 18.x upgrade harness, Packed-tarball smoke), 0 failure; 1 still shown in_progress: Part-of PR must not also close its card, whose job's every step (the guard step included) completed success at 18:26:47Z while the check run had not flipped at 18:55Z. Required contexts all success: Lint & Repo Gates, TypeScript Type Check, Test Core (and its six shards), Build Core, Governed Surface Queue Guard. Also success: Check Changeset, Check PR Size, Spec property liveness, both claim guards, the single-writer guard, Flag docs affected by code changes, Check Documentation Links. Local: dispatch-gates --commands 70 derived, each exit 0 on the final head; --ran 70 derived / 70 run / 0 NOT-MEASURED; check-changeset-no-major with the PR event exit 0; closing-keyword parity binds Fixes #25245 alone.",
      "dogfood_battery": "5cf1aa4ce32c79362b70f9c52d972cba65a9de83 · PR comment 6348550783 · os-verify-lock: VERDICT command-exit 0 · held the lock 999s (16m39s) · Test Files 289 passed, 3 skipped (292) · Tests 2491 passed, 18 skipped (2509) · 0 failed",
      "contract_review": "PR comment 6348750797 · Served-tier CONTRACT_REVIEW_TIER · face narrowing · Head-sha 5cf1aa4ce3 · Local-runs none · VERDICT PASS · rendered by an isolated read-only reviewer with zero writes, posted by this session through the relay",
      "mcp_calls": "reads only, 0 writes: issue_read get on #25245 and #25139, issue_read get_comments on #25139, pull_request_read get_check_runs and get_status on #25268, actions_get get_workflow_job on the Part-of guard job; the reviewer's reads of #25245 and #25268 were reads too",
      "api_writes": "all through scripts/pm/ on the fleet-write dispatch transport, each read back identical: the claim stroke (labels pm:dispatched add, pm:queue remove, assignee os-sales) and claim comment 6346581465; claim revision 6346855817 (post-stamped); pr_create #25268 with assignee os-sales (dispatch.mjs); pr_request_reviewers os-sales on #25268; dogfood_battery comment 6348550783 and contract record 6348750797 on #25268 (post-stamped); this report",
      "deviations": [
        "Clause-② arm revised after measurement: the first claim 6346581465 wrote a bare no; claim revision 6346855817 adds (narrowing), because the resources stop serving a disabled package's objects where the metadata service still held a copy. The PR title carries !, the changeset the BREAKING banner and the ADR-0087 disposition.",
        "File surface beyond mcp-server-runtime.ts and plugin.ts: stdio-data-bridge.ts exports the shared view (the card's not-a-second-copy), one README paragraph, and the real-kernel pins added to #25243's dogfood pin file; named in claim revision 6346855817.",
        "An earlier local revision passed the view as a third parameter of the published MCPServerRuntime.bridgeResources; it was replaced before the first push by the package-internal setter, because a third parameter would have made a new type reachable from the exported class (a public-surface widening, Clause-② yes). The published dist/index.d.ts declares bridgeResources unchanged.",
        "The full battery cited in the PR body ran on dc7bee12dc; it was re-run on the final head 5cf1aa4ce3 (comment 6348550783) with the same counts.",
        "Branch claude/project-thread-dkk3hd is the name the session was given, not claude/issue-25245-*; both claims name it and the claim-this-branch check is success."
      ],
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none · noted in PR Acceptance notes: the prompt bridge's merged skill read (mergedRead, #8328) is resolved once in plugin start(), not at each use as the object reads now are; not measured, not this card's defect",
        "carrier: none · the Docs Drift Check comment names content/docs/kernel/contracts/metadata-service.mdx via listObjects/getObject in McpObjectView; IMetadataService is unchanged, so the page needs no edit",
        "carrier: none · the 10 real-kernel pins do not run in PR CI (dogfood shards skip on pull_request); they ran in the local battery above and run on main's first full battery after landing (named in the contract record)"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #25268 comment 6348821495 · domain:cli seat 1 · session session_01CxBKycaiUpA1yGx1XyoGqX · 2026-10-22T18:58Z


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 22, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:cli seat 1 · session session_01CxBKycaiUpA1yGx1XyoGqX · 2026-10-22T19:29Z

    reading result
    PR #25268 object merged: true, merge commit 72fad9223, merged 2026-10-22T19:29:03Z through the merge queue
    origin/main 72fad9223 is an ancestor of origin/main, single parent (squash)
    queue branch no gh-readonly-queue/main/* head for PR 25268 remains

    State: card closed completed by Fixes #25245; pm:dispatched stripped in this act.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsbugSomething isn't workingdomain:cliRetired 2026-10-22, alias of domain:server (cli surface); in-flight cards keep it until they landmcppriority:p1High: required for production / M2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions