Repository navigation
Description
epic:#31527#1 · os-project-manager · session_01FEkQ5mLd7pR2PHjsPwiGkz
Filing gate: ④ coordination node: child E8 of the epic #31527 (parent and per-layer children), as ADR-0150 (docs/adr/0150-behavioural-metadata-addressed-by-package-objects-keep-the-literal-prefix.md, merged in #31586 at 5d1382a)'s execution plan lists it. Hand-over card: filed undispatched as the epic seat signs off (maintainer 2026-11-08T16:34Z 「专题卡当前任务处理完,合并后就下班」). ⛔ Not a claim.
Ruling-ref: per-type table A (6723462584); epic A 「立专题」 (6723499113); division of labour A 「留核心,其余交车道」 (6723571682); ADR-0150 accepted by merge (#31586, 2026-11-08T21:16Z).
Business reason: inherited from the parent #31527. Behavioural metadata is addressed by (package, name), so two installed packages can each ship an item of the same name and every reader answers the right one, or refuses with the candidates, instead of silently taking the first match.
Reader: the next domain:server seat picks it from the queue (pm-dispatch selection) and accepts its PR against the red lines below.
Dedupe (open AND closed): agent_prompt package (11; top hits #31514(closed) #30806(open) #28940(closed), none on point: they are this epic, its parent #30806, or unrelated cards).
class: d · type: Feature
Grade: p1, inherited from the parent (self-graded under 「定级你可以自己决定」).
Blocked-by: #31575
维护者速读
应用、页面、仪表盘、报表、工具、技能、智能体等按(软件包, 名称)查找;agent_prompt 走协议读取。
What to build
App, page, dashboard, report, book, cube, tool, skill and agent consult on (package, name) through R's resolver; MCP agent_prompt reads through the protocol read (#31514).
Surface
- Expected file surface: objectql, metadata-protocol, mcp.
- Clause-②: no.
- Narrowing: yes, for a bare name of an uncovered type that two packages hold today (measured first-party: 0); and yes, for a package item's bare reference that only an environment-authored item holds (D3 (a); not measurable first-party; the D10 upgrade report lists each case).
Acceptance — the epic's three red lines (every child shares them)
- Resolution never loosens. No first-registered fallback, no environment-wide guess for a caller with a package, no silent pick.
- Ambiguity is reported, never guessed. Every refusal and every migration report names every candidate.
- Independently releasable (red line 3). The PR proves it with ADR-0150's four readings: (a) the phase-1 one-holder tests stay green; (b) bare-name behaviour (URLs, MCP, SDK) is unchanged for every name with one holder, except this card's declared narrowing; (c) any migration is re-runnable and never guesses; (d) its
Clause-②:declaration and, where it changes the protocol, its ADR-0087 migration entry. - The epic seat is off duty after hand-over: the accepting lane seat checks these lines itself, and a narrowing beyond the declared one goes to the maintainer before landing.
Parent: #31527.
Activity
objectstack-fleet commentedon Nov 8, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: confirmed ·
domain:server· p1 ·pm:blocked· 2026-11-08T21:59Z⛔ Not a claim.
epic:#31527#1is online, and the maintainer ruled 「留核心,其余交车道」. The children live in lane queues withoutpm:epic, which matches [Decision] Epic-driven delivery as the next working mode: one epic = parent + epic seat + milestone table; children as sub-issues withpm:epic+Blocked-by:; rolling split; mandatory hand-over when an epic seat leaves; a cap on concurrent epics #31502 A′.domain:server, by package ([Decision] Keepdomain:devxanddomain:serveras separate lanes, or merge them? Measured load and boundary friction, 2026-11-08 #31424 rule 1).Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
epic:#31527#1 · os-steve · session_01ADHkmP7o3uDTti21wLTfPf
Unblocked 2026-11-08T23:02Z:
Blocked-by: #31575is closed. R merged in #31637 as 0ebb080 (resolvePackageScopedName,packageResolutionClosureand the three read-onlySchemaRegistrypackage-scoped methods in objectql;packageDependencyClosurein metadata-protocol).pm:blocked→pm:queuein this stroke. Read the resolver through those exports only, and never re-implement the rule. The epic seat reviews this card's PR against the three red lines before it lands.objectstack-fleet commentedon Nov 8, 2026
domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM
Claim: PM loop round 6 · 2026-11-08T23:07Z
Session:
session_01ADHkmTH1oAwgDMigQ9pj37(card thread, dev) · seatsession_01ADHkmQKZzp4DLtqiCkZZRMAccount:
os-steveBranch:
claude/project-thread-samipmWorktree:
objectstack-issue-31680Domain:
domain:serverSeat:
domain:server#2File surface:
packages/objectql/src/**(the E8 by-name readers; notregistry.ts installPackage),packages/metadata-protocol/src/**by-name read,packages/mcp/src/**(no input/output shape change; that is G2), tests, root.changeset/. ⛔ Nopackages/spec/**,ui/**,docs/adr/**, the E6 readers,package-scoped-resolver.tsContainer & model: L,
mode:thread,model: default tier,effort: highClause-②: no
Metadata-protocol: none
Responsibility: epic #31527 (ADR-0150) child; hand-over card, epic seat reviews the PR against the red lines before the seat lands it
Thread-read: 6728393270
Premise: holds as filed, read at claim on
origin/mainb126c130: R (#31575, PR #316370ebb0801) is on main and no reader callsresolvePackageScopedNameyetSerial constraints cleared: R merged (Blocked-by #31575 closed). ⛔
registry.ts installPackageis seat 1's (N/K/G1); E6 and E8 split the by-name readers by type (E6: picklist, mapping, dataset, api name key, function; E8: app, page, dashboard, report, book, cube, tool, skill, agent);packages/mcpstays with this seat, G2 #31692 after E8Scope: Fixes #31680. App, page, dashboard, report, book, cube, tool, skill and agent resolve on (package, name) through
resolvePackageScopedName; MCPagent_promptreads by package on the protocol read. Declared narrowings: an uncovered type twice held (first-party 0) refuses naming both; D3 (a). Order:/mnt/project-files/server-seat2/standard-order.md+/mnt/project-files/server-seat2/31680-delta.md. Summons: the maintainer's 「并发都是5」 (project chat, 2026-11-08T16:13Z) and 「待审批的不算补ing发」 (2026-11-08T21:25Z).objectstack-fleet commentedon Nov 9, 2026
domain:server#2 · os-steve · session_01ADHkmTH1oAwgDMigQ9pj37
os-dev-report
{ "issue": 31680, "status": "done", "branch": "claude/project-thread-samipm", "pr": "https://github.com/objectstack-ai/objectstack/pull/31847", "session": "session_01ADHkmTH1oAwgDMigQ9pj37", "premise_still_valid": true, "summary": "getApp, MetadataFacade get/getEntry/exists and the protocol's package-less by-name read (GET /meta/TYPE/NAME, so MCP agent_prompt) now answer app, page, dashboard, report, book, analytics_cube, tool, skill and agent through R's one resolver (resolvePackageScopedName, lean core after R2) via a shared readPackageScopedItem; a refusal throws PackageScopedNameRefusedError (409 RESOURCE_CONFLICT, the resolver's sentence naming every holder). Option A per the epic seat: no bindable reader, no second closure walk, no first-registered fallback on a touched path; ?package= stays getItem (G1). Declared narrowings (1) two-holder bare read refused, (2) D3 (a) env-only for a package caller, (3) outside-closure single holder; first-party counts 0/0/0.", "files_changed": [ "packages/objectql/src/package-scoped-read.ts (new)", "packages/objectql/src/registry.ts", "packages/objectql/src/metadata-facade.ts", "packages/objectql/src/index.ts", "packages/metadata-protocol/src/protocol-meta-item-reads.ts", "packages/objectql/src/package-scoped-e8-readers.test.ts (new)", "packages/mcp/src/mcp-server-runtime.agent-prompt-advertised.test.ts", "packages/qa/dogfood/test/bare-name-one-holder-ai-family.dogfood.test.ts (forced edit)", ".changeset/31680-presentation-ai-reads-by-package.md" ], "line_budget": "9 files vs origin/main: about +570/-20; source about +250 (package-scoped-read 121, registry 51, facade 38, protocol 31, index 11), the rest tests and the changeset", "deviations": [ "Forced test edit: the phase-1 dogfood boot-clash pin (bare-name-one-holder-ai-family) asserted GET /meta/agent|tool/NAME with no package serves the first-registered package; the battery went red on exactly those 3 tests on head 9e37aefb. Flipped to 409 RESOURCE_CONFLICT naming both packages plus ?package= serving each; boot warning, install refusals and skill-prompt reading unchanged. Reading (a) holds for every registry-level phase-1 suite, not for that one wire line.", "No assignee/reviewer set: the session asked for MCP issue_write/update_pull_request, the standard order forbids GitHub MCP writes; followed the standard order." ], "tests": "package-scoped-e8-readers.test.ts 71/71 (pre-wiring 25 failed/48 passed: exactly the 3 narrowing arms); MCP pin 17/17. Ablations via ablation-replace.mjs, each red then restored to the HEAD blob: A1 readsByPackage=false 6 failed; A2 facade.get->getItem 24; A3 getApp->getItem 3; A4 resolveItem->getItem 24; A5 exists refusal->false 1; A6 MCP RESOURCE_CONFLICT read as miss 1; A7 protocol source arm off + metadata-protocol rebuilt 6 failed, ablation-dist-preflight marker present, restore leg marker absent + tree clean + 71/71.", "gates": "head d981cf7c: dispatch-gates --commands listed 75, all 75 exit 0; --ran: 75 derived, 75 run, 0 NOT-MEASURED. eslint on objectql/metadata-protocol/mcp src + the dogfood file exit 0. objectql 22610 passed, metadata-protocol 980, mcp 11887; typecheck clean (all under os-verify-lock, VERDICT command-exit 0). CI check-runs: not yet read.", "dogfood_battery": "d981cf7c1ce46776fafe4b725f2a3ef9c77dec9e · os-verify-lock VERDICT command-exit 0, held 1397s · Test Files 441/441 (3 skipped of 444) · Tests 3662 passed, 42 skipped (3704) · 0 failures", "mcp_calls": "0 GitHub MCP calls this round (read-only issue_read earlier in the card)", "api_writes": "1 — pr_create via with-fleet.sh --via dispatch (POST /repos/objectstack-ai/objectstack/pulls -> #31847); this comment is the 2nd (post-stamped --comment=31680)", "open_questions": [ { "question": "New public names (seat's call): PACKAGE_SCOPED_READ_TYPES, PackageScopedReadType, isPackageScopedReadType, readPackageScopedItem, PackageScopedNameRefusedError, SchemaRegistry.resolveItem, SchemaRegistry.readsByPackage.", "options": [ "A keep", "B rename at ACCEPT" ], "recommendation": "A, because each later E child appends its types to the one list and reads through the same seam" }, { "question": "The forced dogfood flip extends narrowing (1) to agent/skill/tool clashes a deployment booted holding (phase 1 warns at boot, refuses on install). Epic red-line review should confirm.", "options": [ "A accept: refusal is the one rule, red line 1 forbids first-registered", "B keep first-registered for covered types (a second rule on one path)" ], "recommendation": "A, because B reintroduces the fallback the epic red line forbids" } ], "security_findings": "none", "out_of_scope_findings": [ "class: b · reach: by-name reads still on getItem (getMetaItemLayered, readCodeLayerForCarryForward, protocol-artifact-lookup, protocol-save/authoring-gate, MCP diagnosedGet fallback, getAppNavContributions) · evidence: listed in PR Acceptance notes · dedupe: E8 residual readers", "carrier: PR #31847 · noted, not filed" ] }objectstack-fleet commentedon Nov 9, 2026
domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM
ACCEPT → PR #31847 comment 6734554470 · head
d981cf7c· 2026-11-09T07:21Z · landing: pr_ready + automerge_enable · follow-up #31852 · G2 #31692 next on this seatobjectstack-fleet commentedon Nov 9, 2026
domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM
落地 · 2026-11-09T07:50Z
cfe35630(ACCEPT 6734554470; CONTRACT_REVIEW_TIER PASS 6734365312; epic red-line PASS 6734191686)Fixes #31680Landed:
SchemaRegistry.getApp,MetadataFacade.get/getEntry/exists, and the protocol's package-less by-name read, which MCPagent_promptuses) resolve through ADR-0150's one package-scoped resolver.RESOURCE_CONFLICT, naming every holder. These are the declared narrowings; the one-line fix is in the changeset.?package=read stays ongetItem, for G1.Carried:
PackageScopedNameRefusedErrorclass, the lean-entry export, andcheck-app-nav-i18n.mjs's package-less read.getItem(the layered read, the artifact lookup, MCPdiagnosedGet): epic design(metadata): address behavioural metadata by package — key flows, actions, jobs and other non-object types by (package, name); re-open ADR-0028 (replaces #30806 phase 3 renames) #31527's G children.docs(changeset): #32070 names the facade door and its two package-cal…
fix(objectql)!: the by-name picklist read answers by package (ADR-015…