You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
marketplace install-local: a package's declared datasources are never connected or registered as code-defined, so objects bound to them have no driver after install #28039
Filing gate: ② a gap measured beside a card in decision. Found reading the delivery routes for #27687 (where a code datasource's credential comes from), round 3 of its measurement. Filed by domain:spec seat 3. It is not dispatched: seat 3 runs one card at a time.
What
A package delivered by booting its artifact (os start / os serve through AppPlugin) connects its declared datasources at boot through connectDeclared, and records their names in CODE_DATASOURCE_NAMES_SERVICE.
A package installed into a running environment through the marketplace install path (packages/cloud-connection/src/marketplace-install-local-plugin.ts) gets no such treatment. The plugin binds objects, handlers and seeds, but nothing in it reads, connects or registers the package's declared datasources. git grep -n -i datasource over the file on origin/main finds one hit, a comment at :2407, out of 4,424 lines.
So, as far as the code shows, an object in an installed package that is bound to the package's own datasource has no connected driver and no credential path. The name is also absent from the code-name set, so the admin door does not serve the datasource as code-defined.
Not measured
A live install of a package that declares a datasource, and what a read of an object bound to it answers.
Whether a cloud composition (objectos artifact-kernel-factory, outside this repo) connects package datasources itself.
Why it matters
#27687 is deciding where a code datasource's credential comes from. Whatever it rules can only reach a datasource that something connects. Under this install route, nothing does yet.
Wanted
Measure the live answer: install a package declaring a datasource, then read an object bound to it.
Decide whether the install path connects package datasources, with the same provenance as an artifact boot so they read as code-origin, or refuses a package that declares one with a message naming the supported route.
Read fresh. packages/cloud-connection is the server lane. The fix and its acceptance land in this repo, and the install path runs locally, so the card stays here.
Installing a package through the marketplace connects its declared datasources and records their names in CODE_DATASOURCE_NAMES_SERVICE, the same as boot's connectDeclared, with one helper.
Claim: PM loop round 2 · 2026-10-30T12:17Z
Session: session_016WV4cx4xgJksGo7iVA8c9A (card thread; seat session_016WV4czuTWNgKR22fKv7jia)
Account: os-elon-musk
Branch: claude/project-thread-aercb9 (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
Worktree: objectstack-issue-28039
Domain: domain:server
Seat: domain:server#3
File surface: packages/cloud-connection/src/marketplace-install-local-plugin.ts and a helper shared with boot's connectDeclared path (packages/runtime/src/app-plugin.ts / packages/services/service-datasource, wherever the one helper lands), tests beside them, .changeset/*. Landed as (amended from the PR #28132 diff): packages/runtime/src/declared-datasources.ts (new helper) + test, packages/runtime/src/app-plugin.ts, packages/runtime/src/code-datasource-names.ts, packages/runtime/src/index.ts (export), the cloud-connection install path + dogfood test, and one docs section in content/docs/data-modeling/external-datasources.mdx. ⛔ The credential path is #27687's (decision); this card does not rule it.
Container & model: M, mode:thread, model: opus (TIER_DEFAULT), effort: high
Clause-②: yes (narrowing) (amended by the seat from the PR #28132 diff: widens — new export connectPackageDatasources from @objectstack/runtime, the install answer gains datasources; narrows — install-local now refuses 409 RESOURCE_CONFLICT a package declaring a datasource name the runtime already holds, which installed 200 on main, measured by the card thread)
Metadata-protocol: none
Responsibility: the marketplace install path connecting a package's declared datasources and recording them in CODE_DATASOURCE_NAMES_SERVICE, as boot does, or answering a named non-ok status where #27687 leaves the credential unresolved.
Thread-read: 6521053009
Premise: unmeasured live (the filer read the code: no datasource handling in the 4,424-line plugin); the dev measures an install first.
Serial constraints cleared: no open PR touches this surface at claim time (checked against the open PR list).
Dispatch-note: p2. Taken into a slot freed by PR #28072 / #28067 merging (2026-10-30 12:13Z).
{
"issue": 28039,
"status": "done",
"branch": "claude/project-thread-aercb9",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28132",
"session": "session_016WV4cx4xgJksGo7iVA8c9A",
"premise_still_valid": true,
"summary": "Measured on main 549203d0: install-local install 200 hotLoaded true, then POST/GET /data on objects bound to the package's datasources answered 404 OBJECT_NOT_FOUND, no connection verdict, names absent from the code-datasource set. Fix: AppPlugin's registration + connectDeclared move into one runtime helper connectPackageDatasources (exported, so Clause-② yes (widening)); boot keeps calling it unchanged; install-local calls it on install (after schema sync, when hot-loaded) and on every rehydrate with installed:true (names recorded now, fail-fast reported not thrown, reinstall replaces), and its runtime.package-datasources uninstall cleanup withdraws pools, registrations and names. Install answer gains datasources [{name,status}] (existing ConnectStatus names only, no new status); a package declaring a name another holder owns is refused 409 RESOURCE_CONFLICT before any write. Unresolved credential with a bound object answers failed-degraded (fail-fast path; failed-credentials without one), admin list 'error' with statusReason naming the ref, bound read 503 ERR_DATASOURCE_UNAVAILABLE. #27687 not ruled.",
"tests": "dogfood install-local-declared-datasources: Tests 8 passed (8). runtime declared-datasources.test.ts + 7 datasource boot files: Tests 53 passed (53). runtime full: Test Files 484 passed, Tests 7883 passed | 19 skipped. cloud-connection full: Test Files 61, Tests 758 passed. typecheck runtime + cloud-connection exit 0. Ablations via ablation-replace (anchor 1->0, blob moved), each restored with git diff HEAD empty: A1 install connect -> dogfood 6 failed; A2 rehydrate connect -> 1 failed; A3 409 refusal off -> 1 failed; A4 cleanup registration removed -> 1 failed; A5 installed rethrow -> unit 1 failed. Dogfood resolves cloud-connection/runtime to source (main-side measurement ran on reverted source without rebuild).",
"gates": "dispatch-gates --commands at 475a5292: 92 families run, exit captured before any pipe; 3 exited 3 first pass (teardown self-test: fetched pinned commit; spec check:skill-examples and check:dual-build-cjs-loads: built client-react, studio and 5 plugin/service packages) and 0 on re-run. --ran: 92 derived, 92 run, 0 NOT-MEASURED. pnpm lint exit 0. CI check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "4 — mcp__github__issue_read x4 (reads only: #28039 get + comments, #27687 get + comments); no write tool",
"api_writes": "3 — git push (branch); relay pr_create (PR #28132); relay comment (this report) + pr_request_reviewers (os-elon-musk) on PR #28132",
"open_questions": [],
"out_of_scope_findings": [
"class: a · reach: GET /api/v1/data/qads_secret_row after an install-local install whose datasource failed to connect answered 503 ERR_DATASOURCE_UNAVAILABLE with the sentence 'it failed to connect at startup and the server was started with OS_ALLOW_DRIVER_CONNECT_FAILURE' — false for an install-time failure (no flag set) and, by the same branch, for a Setup-created datasource whose connect failed · evidence: DatasourceUnavailableError kind 'failed' text, packages/objectql/src/driver-connect-errors.ts:268-271; measured on PR #28132's dogfood fixture · dedupe words: ERR_DATASOURCE_UNAVAILABLE OS_ALLOW_DRIVER_CONNECT_FAILURE failed to connect at startup message",
"carrier: seat · noted, not filed: on the fail-fast path DatasourceConnectionService.connect() retains failed-degraded rather than the attempt's own status (failed-credentials), on boot and install alike; PR Acceptance notes"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 可对外的 API | none | P②
Triage: p2 ·
domain:server·area:api· 2026-10-30T10:59Z⛔ Not a claim.
packages/cloud-connectionis the server lane. The fix and its acceptance land in this repo, and the install path runs locally, so the card stays here.CODE_DATASOURCE_NAMES_SERVICE, the same as boot'sconnectDeclared, with one helper.okstatus. It never gets a silent driver gap.bug,pm:queue.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia
Claim: PM loop round 2 · 2026-10-30T12:17Z
Session:
session_016WV4cx4xgJksGo7iVA8c9A(card thread; seatsession_016WV4czuTWNgKR22fKv7jia)Account:
os-elon-muskBranch:
claude/project-thread-aercb9(the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)Worktree:
objectstack-issue-28039Domain:
domain:serverSeat:
domain:server#3File surface:
packages/cloud-connection/src/marketplace-install-local-plugin.tsand a helper shared with boot'sconnectDeclaredpath (packages/runtime/src/app-plugin.ts/packages/services/service-datasource, wherever the one helper lands), tests beside them,.changeset/*. Landed as (amended from the PR #28132 diff):packages/runtime/src/declared-datasources.ts(new helper) + test,packages/runtime/src/app-plugin.ts,packages/runtime/src/code-datasource-names.ts,packages/runtime/src/index.ts(export), the cloud-connection install path + dogfood test, and one docs section incontent/docs/data-modeling/external-datasources.mdx. ⛔ The credential path is #27687's (decision); this card does not rule it.Container & model:
M,mode:thread,model: opus (TIER_DEFAULT),effort: highClause-②: yes (narrowing) (amended by the seat from the PR #28132 diff: widens — new export
connectPackageDatasourcesfrom@objectstack/runtime, the install answer gainsdatasources; narrows — install-local now refuses409 RESOURCE_CONFLICTa package declaring a datasource name the runtime already holds, which installed 200 on main, measured by the card thread)Metadata-protocol: none
Responsibility: the marketplace install path connecting a package's declared datasources and recording them in
CODE_DATASOURCE_NAMES_SERVICE, as boot does, or answering a named non-okstatus where #27687 leaves the credential unresolved.Thread-read: 6521053009
Premise: unmeasured live (the filer read the code: no datasource handling in the 4,424-line plugin); the dev measures an install first.
Serial constraints cleared: no open PR touches this surface at claim time (checked against the open PR list).
Dispatch-note: p2. Taken into a slot freed by PR #28072 / #28067 merging (2026-10-30 12:13Z).
objectstack-fleet commentedon Oct 30, 2026
domain:server#3 · os-elon-musk · session_016WV4cx4xgJksGo7iVA8c9A
os-dev-report
{ "issue": 28039, "status": "done", "branch": "claude/project-thread-aercb9", "pr": "https://github.com/objectstack-ai/objectstack/pull/28132", "session": "session_016WV4cx4xgJksGo7iVA8c9A", "premise_still_valid": true, "summary": "Measured on main 549203d0: install-local install 200 hotLoaded true, then POST/GET /data on objects bound to the package's datasources answered 404 OBJECT_NOT_FOUND, no connection verdict, names absent from the code-datasource set. Fix: AppPlugin's registration + connectDeclared move into one runtime helper connectPackageDatasources (exported, so Clause-② yes (widening)); boot keeps calling it unchanged; install-local calls it on install (after schema sync, when hot-loaded) and on every rehydrate with installed:true (names recorded now, fail-fast reported not thrown, reinstall replaces), and its runtime.package-datasources uninstall cleanup withdraws pools, registrations and names. Install answer gains datasources [{name,status}] (existing ConnectStatus names only, no new status); a package declaring a name another holder owns is refused 409 RESOURCE_CONFLICT before any write. Unresolved credential with a bound object answers failed-degraded (fail-fast path; failed-credentials without one), admin list 'error' with statusReason naming the ref, bound read 503 ERR_DATASOURCE_UNAVAILABLE. #27687 not ruled.", "tests": "dogfood install-local-declared-datasources: Tests 8 passed (8). runtime declared-datasources.test.ts + 7 datasource boot files: Tests 53 passed (53). runtime full: Test Files 484 passed, Tests 7883 passed | 19 skipped. cloud-connection full: Test Files 61, Tests 758 passed. typecheck runtime + cloud-connection exit 0. Ablations via ablation-replace (anchor 1->0, blob moved), each restored with git diff HEAD empty: A1 install connect -> dogfood 6 failed; A2 rehydrate connect -> 1 failed; A3 409 refusal off -> 1 failed; A4 cleanup registration removed -> 1 failed; A5 installed rethrow -> unit 1 failed. Dogfood resolves cloud-connection/runtime to source (main-side measurement ran on reverted source without rebuild).", "gates": "dispatch-gates --commands at 475a5292: 92 families run, exit captured before any pipe; 3 exited 3 first pass (teardown self-test: fetched pinned commit; spec check:skill-examples and check:dual-build-cjs-loads: built client-react, studio and 5 plugin/service packages) and 0 on re-run. --ran: 92 derived, 92 run, 0 NOT-MEASURED. pnpm lint exit 0. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "4 — mcp__github__issue_read x4 (reads only: #28039 get + comments, #27687 get + comments); no write tool", "api_writes": "3 — git push (branch); relay pr_create (PR #28132); relay comment (this report) + pr_request_reviewers (os-elon-musk) on PR #28132", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: GET /api/v1/data/qads_secret_row after an install-local install whose datasource failed to connect answered 503 ERR_DATASOURCE_UNAVAILABLE with the sentence 'it failed to connect at startup and the server was started with OS_ALLOW_DRIVER_CONNECT_FAILURE' — false for an install-time failure (no flag set) and, by the same branch, for a Setup-created datasource whose connect failed · evidence: DatasourceUnavailableError kind 'failed' text, packages/objectql/src/driver-connect-errors.ts:268-271; measured on PR #28132's dogfood fixture · dedupe words: ERR_DATASOURCE_UNAVAILABLE OS_ALLOW_DRIVER_CONNECT_FAILURE failed to connect at startup message", "carrier: seat · noted, not filed: on the fail-fast path DatasourceConnectionService.connect() retains failed-degraded rather than the attempt's own status (failed-credentials), on boot and install alike; PR Acceptance notes" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia
ACCEPT → PR #28132 comment 6525520665 · 2026-10-30T14:44Z · contract review PASS 6524822720 (
CONTRACT_REVIEW_TIER, headdbc6f440; declaration corrected toClause-②: yes (narrowing)) · ready + auto-merge armed through the relay. Follow-ups: #28135, #28143.