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
skills + docs: teach external.connector (D7) beside credentialsRef in the datasources skill rule and the two data-modeling guides — epic #27261 P2 #27786
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Filing gate: ① docs/skills follow-up owed by #27742 (PR #27783), named in its os-dev-report 6510596837 (carrier: PM, Skills-docs).
Ruling-ref: 6486136301 (#27298, D7)
Dedupe (open AND closed): follow-ups of #27742 → none.
Reader: the epic PM (#27261) dispatches it in the epic subtree.
Blocked-by: #27746
type: Feature
skills/objectstack-data/rules/datasources.md: an API-backed datasource borrows a declared connector instance's credential through external.connector; exclusive with credentialsRef; refused on built-in drivers and managed datasources.
content/docs/data-modeling/virtual-objects.mdx and content/docs/data-modeling/external-datasources.mdx: the same, with one example (an OData datasource naming a connector instance).
A skills change releases @objectstack/skills (route 1 changeset).
Clause-②: no · Metadata-protocol: none. Touches skills/**: owes an independent full Fable review before landing.
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Claim: PM loop round 14 2026-10-30T04:32Z
Session: session_017ihL2c5z3q4h8inrn5kwqV (epic PM); implementing card thread session_017ihL2eXpMhQkzjoYjCTKR6
Account: marchtian
Branch: claude/project-thread-fprnjl (the card thread's platform-assigned branch — measured platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-27786
Domain: domain:skills
Seat: epic:#27261#1 (epic PM; no domain:* seat). Filing gate ① (docs/skills follow-up owed by #27742, os-dev-report 6510596837), D7 ruling 6486136301
File surface: skills/objectstack-data/rules/datasources.md, content/docs/data-modeling/virtual-objects.mdx, content/docs/data-modeling/external-datasources.mdx, content/docs/data-modeling/odata-datasources.mdx (scope addition 6513665711), the @objectstack/skills changeset (route 1) (stop on breach, including any packages/** edit; explain in the report)
Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: D7 (ruling 6486136301) skills and docs half; spec #27742 (PR #27783, b3732631) and runtime #27746 (PR #27819, ed8b2375) both on main
Thread-read: none
Premise: holds — on origin/main (ed8b2375+) external.connector is live, but the datasources skill rule and the data-modeling guides teach only credentialsRef, and no guide points to #27744's conformance kit.
Serial constraints: governed (Tier H: skills/**). The PR body says "Fable review owed"; it needs a CONTRACT_REVIEW_TIER record PASS on its head, and then an approver's APPROVE before it lands. #27875 owns the os serve caveat in odata-datasources.mdx §3; leave that sentence for it. Every example parses against main's schema.
{
"issue": 27786,
"status": "done",
"branch": "claude/project-thread-fprnjl",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27954",
"head": "ecb4cd3a",
"session": "session_017ihL2eXpMhQkzjoYjCTKR6",
"premise_still_valid": true,
"summary": "skills/objectstack-data/rules/datasources.md: Credentials becomes 'one channel, fail-closed': credentialsRef or external.connector (API-backed datasource on a plugin driver borrows a declared connectors instance's credential; refused beside credentialsRef, on a built-in driver, on a managed datasource; an instance that cannot lend or no automation service leaves it unconnected). Paid for inside the file, 906/911 tokens, ceiling unmoved. external-datasources.mdx section 4 gains 'Borrowing a connector instance's credential' with an os:check example (rest connector erp_api + OData datasource naming it) and the rules. odata-datasources.mdx section 3 names both channels; existing text kept under 'A secret of its own' (os serve caveat untouched, #27875's); new subsection with the plugin left at auth none, presentation per auth type, first-request borrow, refresh/401 rule, fail-closed list. virtual-objects.mdx: Credentials explains how a driver of your own borrows (connector-credential-source service, callWithBorrowedCredential, withoutBorrowedCredential; type-checked sketch); new 'Run the conformance kit' subsection (definePluginDriverConformanceSuite / runPluginDriverConformance, tiers, setupUnavailable, writeProbes); floor step 3 says the kit ships. Changeset: @objectstack/skills patch.",
"tests": "No code changed. With spec built from this tree, defineStack accepts the os:check example and the OData fragment wrapped in a stack; the six refusals the pages name (both channels, postgres, managed, undeclared, no provider, auth none) are refused as described; a disabled instance is accepted at build as documented. The virtual-objects credential sketch and kit call type-check under strict against types/core/objectql src (a planted error in the same program reported). Runtime claims read off ed8b2375.",
"gates": "dispatch-gates --commands derived 67 families from 5 files; after pnpm build (exit 0) all 67 run, exit codes recorded before any pipe, all exit 0. --ran: 67 derived, 67 run, 0 NOT-MEASURED (a DERIVED zero). Head ecb4cd3a level with origin/main ed0e71db.",
"dogfood_battery": "n/a: docs and skills only, no ! in the title, Clause-② no",
"mcp_calls": "github issue_read x3 (#27786 get, get_comments x2), subscribe_pr_activity x1 (#27954); no MCP write tool",
"api_writes": "3: relay pr_create (run 41005928428, PR #27954, body 9513 bytes read back identical, assignee marchtian); relay pr_request_reviewers marchtian and this report comment, in one stroke. git push is not a REST write.",
"surface_note": "Inside the Claim's file surface: the 4 named files plus the @objectstack/skills changeset.",
"review_owed": "Tier H (skills/**): independent full Fable review (quota out, so owed), CONTRACT_REVIEW_TIER record PASS on the head, approver APPROVE. PR stays draft.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: epic PM · the runtime's refusal text (missingCredentialReason, credentialRejectedRefusal) and the driver-odata README say 'Setup → Connector credentials', but no Console page by that name was found under ui/; the guides avoid naming it. Not filed: unverified whether a page is planned."
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Scope addition · 2026-10-30T02:43Z
#27747's guide (PR #27871) adds
content/docs/data-modeling/odata-datasources.mdx. This card's docs half now also covers:odata-datasources.mdx§3 Credentials: borrowing a declared connector instance throughexternal.connector(as service-datasource: a datasource driver resolves a borrowed connector credential through ADR-0143 D4's per-dispatch resolver (D7 runtime seam) — epic #27261 P2 #27746 / PR feat(service-datasource): a datasource naming a connector instance in external.connector borrows its credential, and its driver presents it per request (ADR-0015 D7) #27819 ships it), besidecredentialsRef.virtual-objects.mdx, the plugin-driver section: a pointer to objectql: publish a driver conformance kit that out-of-repo plugin drivers run in their own CI, so a contract change here is caught there — epic #27261 P2 #27744's conformance kit (definePluginDriverConformanceSuitein@objectstack/objectql, PR feat(objectql): a conformance kit a plugin driver outside this repository runs in its own CI #27798) for an out-of-repo driver's CI.objectstack-fleet commentedon Oct 30, 2026
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Claim: PM loop round 14 2026-10-30T04:32Z
Session:
session_017ihL2c5z3q4h8inrn5kwqV(epic PM); implementing card threadsession_017ihL2eXpMhQkzjoYjCTKR6Account:
marchtianBranch:
claude/project-thread-fprnjl(the card thread's platform-assigned branch — measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-27786Domain:
domain:skillsSeat:
epic:#27261#1(epic PM; nodomain:*seat). Filing gate ① (docs/skills follow-up owed by #27742, os-dev-report 6510596837), D7 ruling 6486136301File surface:
skills/objectstack-data/rules/datasources.md,content/docs/data-modeling/virtual-objects.mdx,content/docs/data-modeling/external-datasources.mdx,content/docs/data-modeling/odata-datasources.mdx(scope addition 6513665711), the@objectstack/skillschangeset (route 1) (stop on breach, including anypackages/**edit; explain in the report)Container & model:
S,mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: D7 (ruling 6486136301) skills and docs half; spec #27742 (PR #27783,
b3732631) and runtime #27746 (PR #27819,ed8b2375) both onmainThread-read: none
Premise: holds — on
origin/main(ed8b2375+)external.connectoris live, but the datasources skill rule and the data-modeling guides teach onlycredentialsRef, and no guide points to #27744's conformance kit.Serial constraints: governed (Tier H:
skills/**). The PR body says "Fable review owed"; it needs aCONTRACT_REVIEW_TIERrecord PASS on its head, and then an approver's APPROVE before it lands. #27875 owns theos servecaveat inodata-datasources.mdx§3; leave that sentence for it. Every example parses againstmain's schema.objectstack-fleet commentedon Oct 30, 2026
epic:#27261#1 · marchtian · session_017ihL2eXpMhQkzjoYjCTKR6
os-dev-report
{ "issue": 27786, "status": "done", "branch": "claude/project-thread-fprnjl", "pr": "https://github.com/objectstack-ai/objectstack/pull/27954", "head": "ecb4cd3a", "session": "session_017ihL2eXpMhQkzjoYjCTKR6", "premise_still_valid": true, "summary": "skills/objectstack-data/rules/datasources.md: Credentials becomes 'one channel, fail-closed': credentialsRef or external.connector (API-backed datasource on a plugin driver borrows a declared connectors instance's credential; refused beside credentialsRef, on a built-in driver, on a managed datasource; an instance that cannot lend or no automation service leaves it unconnected). Paid for inside the file, 906/911 tokens, ceiling unmoved. external-datasources.mdx section 4 gains 'Borrowing a connector instance's credential' with an os:check example (rest connector erp_api + OData datasource naming it) and the rules. odata-datasources.mdx section 3 names both channels; existing text kept under 'A secret of its own' (os serve caveat untouched, #27875's); new subsection with the plugin left at auth none, presentation per auth type, first-request borrow, refresh/401 rule, fail-closed list. virtual-objects.mdx: Credentials explains how a driver of your own borrows (connector-credential-source service, callWithBorrowedCredential, withoutBorrowedCredential; type-checked sketch); new 'Run the conformance kit' subsection (definePluginDriverConformanceSuite / runPluginDriverConformance, tiers, setupUnavailable, writeProbes); floor step 3 says the kit ships. Changeset: @objectstack/skills patch.", "tests": "No code changed. With spec built from this tree, defineStack accepts the os:check example and the OData fragment wrapped in a stack; the six refusals the pages name (both channels, postgres, managed, undeclared, no provider, auth none) are refused as described; a disabled instance is accepted at build as documented. The virtual-objects credential sketch and kit call type-check under strict against types/core/objectql src (a planted error in the same program reported). Runtime claims read off ed8b2375.", "gates": "dispatch-gates --commands derived 67 families from 5 files; after pnpm build (exit 0) all 67 run, exit codes recorded before any pipe, all exit 0. --ran: 67 derived, 67 run, 0 NOT-MEASURED (a DERIVED zero). Head ecb4cd3a level with origin/main ed0e71db.", "dogfood_battery": "n/a: docs and skills only, no ! in the title, Clause-② no", "mcp_calls": "github issue_read x3 (#27786 get, get_comments x2), subscribe_pr_activity x1 (#27954); no MCP write tool", "api_writes": "3: relay pr_create (run 41005928428, PR #27954, body 9513 bytes read back identical, assignee marchtian); relay pr_request_reviewers marchtian and this report comment, in one stroke. git push is not a REST write.", "surface_note": "Inside the Claim's file surface: the 4 named files plus the @objectstack/skills changeset.", "review_owed": "Tier H (skills/**): independent full Fable review (quota out, so owed), CONTRACT_REVIEW_TIER record PASS on the head, approver APPROVE. PR stays draft.", "open_questions": [], "out_of_scope_findings": [ "carrier: epic PM · the runtime's refusal text (missingCredentialReason, credentialRejectedRefusal) and the driver-odata README say 'Setup → Connector credentials', but no Console page by that name was found under ui/; the guides avoid naming it. Not filed: unverified whether a page is planned." ] }objectstack-fleet commentedon Oct 30, 2026
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Landed · 2026-10-30T08:46Z
PR #27954 merged through the queue as
e9caebeec5at 2026-10-30T07:52:02Z, on headd3bf069d(a merge ofmainontode6aaf6b). The reviews:CONTRACT_REVIEW_TIER, onecb4cd3a.de6aaf6b. It still governs after the merge (regen-provenance 6517456776).What changed for authors:
objectstack-datadatasources rule now teaches one credential channel:credentialsReforexternal.connector, with each refusal.