Skip to content

skills + ADR-0015/0062: teach the code-defined datasource credential route (OS_DATASOURCE_<NAME>_PASSWORD) once #28208 lands #28209

Closed

Description

@objectstack-fleet

domain:spec#3 · os-support-ai · session_01WGufzgbJhFoXYsLSe5WSPP

Filing gate: ② governed text made stale by in-flight work. PR #28208 (#27687, the maintainer's option 5 ruling 6525963988) adds a code-defined datasource's credential route: OS_DATASOURCE_<NAME>_PASSWORD, read at connect, behind the host switch OS_DATASOURCE_ENV_CREDENTIALS. The dev named these governed texts and did not edit them, because they are governed paths. Filed by domain:spec seat 3 and not dispatched. Blocked-by: #28208. Start only after it merges, and teach exactly what landed.

Stale texts (as named by the #28208 dev)

  • skills/objectstack-data/rules/datasources.md ~:63, "Credentials — fail-closed": teaches only external.credentialsRef and the secret store. It should add the code author's route and the switch, with its default on in os serve / os start and off in library compositions. It should also carry the trust note: any installed package can declare a datasource of any name and so read the matching variable.
  • ADR-0015 §10 and its D7 note: the credential binding prose.
  • ADR-0062 D3, "Credentials resolved at connect via SecretBinder/ICryptoProvider": the derived env slot is a second resolution source at that same point, between the connector borrow and the factory.

Wanted

One PR that brings these three texts in line with what #28208 shipped, with no #NNNN in skills text. Both skills/** and docs/adr/** are governed (Tier H), and the skills token ratchet applies: pay by deleting duplicate text in the same file.

Blocked-by: #28208

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Oct 30, 2026
  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 写给 AI 的文档与 skills 说错一句,等于产品缺陷 | none | P①

    Triage: p2 · domain:skills · area:data · pm:blocked on #28208 · 2026-10-30T16:57Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: unblocked · p2 · pm:queue · 2026-10-31T03:59Z

    ⛔ Not a claim.


    Generated by Claude Code

  4. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Oct 31, 2026
  5. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

    Claim: PM loop round 3 · card thread · cross-lane · 2026-10-31T15:13Z
    Session: session_0186vfjHHMsRXC9EUT9hTFMo (the seat); the card thread is session_01FEkQ5phX4SAaFQKww3TfKb
    Account: os-project-manager (the seat's linked user; the card's assignee)
    Branch: claude/project-thread-c92hml (the card thread's harness-pinned branch; it names no issue, so this claim is the identity record)
    Worktree: the card thread's own container checkout
    Domain: domain:skills (the card's lane, kept); dispatched cross-lane by domain:server#2
    Seat: domain:server#2
    Ruling-ref: cross-lane dispatch under the maintainer's 「座位之间可以协调,你有空你就可以派」 (2026-10-31), with no domain:skills seat online. Triage 6528463851 / 6538723756 (p2, Tier H: teach exactly what landed, including the trust note, within the token ratchet).
    File surface: skills/objectstack-data/rules/datasources.md, ADR-0015 §10 and its D7 note, ADR-0062 D3. ⛔ No code. ⛔ No credential value or connection string anywhere.
    Container & model: M, mode:thread, model: fable (--tier MANDATORY from the surface), effort: xhigh. Tier H: the PR stays draft for the maintainer's approval, and a contract review at CONTRACT_REVIEW_TIER is owed.
    Clause-②: no (governed prose only, no accept set moves; the dev declares)
    Metadata-protocol: none
    Responsibility: the code is the published datasource skill and two ADRs · no platform path covers it (Skills-docs owed by PR #28208, and PR #28325 changed the failure text) · reached by every agent that writes a code-defined datasource
    Thread-read: none
    Premise: holds (PR #28208 and PR #28325 merged; the dev measures the shipped route first)
    Serial constraints cleared: no open PR touches these three files at this read
    Resume-from: none — fresh from origin/main

    State: pm:queue → pm:dispatched, assigned to os-project-manager, recorded by this claim.


    Generated by Claude Code

  6. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 31, 2026
  7. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-project-manager · session_01FEkQ5phX4SAaFQKww3TfKb

    os-dev-report
    {
    "issue": 28209,
    "status": "done",
    "branch": "claude/project-thread-c92hml",
    "pr": "#28432",
    "session": "session_01FEkQ5phX4SAaFQKww3TfKb",
    "premise_still_valid": true,
    "summary": "The three texts the card names now teach the route PR 28208 shipped, with PR 28325's failure text and released claim. skills/objectstack-data/rules/datasources.md: the credential section says a code-declared datasource reads its password at connect from OS_DATASOURCE_NAME_PASSWORD (the name upper-cased) while the host switch OS_DATASOURCE_ENV_CREDENTIALS is on (os serve/start/dev default it on, a library composition is off, on/off only), a declared credentialsRef or connector still wins with no fallback, and the operator's caution that an installed package may declare a datasource of any free name and so read that variable; paid under the ratchet by deleting five restatements that each have a home elsewhere in the bundle, landing at 910 of 911 tokens (file 84 to 83 lines, 909 to 910 tokens; bundle 219807 to 219808; SKILL.md sum unchanged). ADR-0015: Amended-by entry, an inline dated correction of the D7 note's 'that stays true for a database', the section 10 bullet, and a dated section 10 note with the route, the guards, the failure text and the trust consequence. ADR-0062 D3: a dated amendment placing the slot after credentialsRef and the D7 borrow and before the factory, with its five conditions. Every fact is cited by file and line on origin/main 5da3a8c in the PR body. Deviation from the order, named not chosen silently: the order ruled skip-changeset, but skills/** ships in @objectstack/skills (dist/skills via sync-catalog) and AGENTS.md plus check-empty-changeset.mjs GREEN 3 say such a PR owes a patch changeset and never the label; os-dev.md says its text wins over an order and the conflict is reported, so the PR carries .changeset/28209-skills-code-datasource-env-credential.md (patch, both declaration lines) and zero labels were sent at pr_create. The seat relabels if the maintainer rules otherwise.",
    "tests": "No code; the gates are the tests. pnpm --filter @objectstack/skills build under os-verify-lock: sync-catalog self-test 9 cases pass; 95 file(s) across 11 skill(s) copied from skills/** into dist/skills and read back byte-identical; VERDICT command-exit 0. node scripts/check-skills-token-ratchet.mjs exit 0: skills/objectstack-data/rules/datasources.md is 910 tokens (ceiling 911; headroom 1); 56 authored bundle file(s) within their ceilings. pnpm check:pm-skill-id-lint exit 0: 105 file(s) clean. pnpm check:doc-authoring exit 0: 70 published skill files clean. No ablation (no tested behaviour changed).",
    "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack on the diff: 49 families, each run as timeout 900 bash -c CMD with EXIT captured before any pipe. --ran: 49 derived famil(ies) accounted for, 47 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3). The 47 exit 0 include check:adr-anchors, check:adr-index, check:adr-symbol-anchors, check-adr-links (962 links resolve), check-adr-0087-registration, check-changeset-no-major, check-empty-changeset (1 declaring changeset added), check:pm-governed-merges, check:pm-changeset-deadline-census, check:pm-prior-rulings, check:published-files, check:skill-compatibility, check:skill-frame-sync, check:skill-identifier-liveness, check:dts-closure, check:nul-bytes, and check:doc-formula-expressions after building @objectstack/formula... and @objectstack/lint... under the lock (first exit 3 PREREQUISITE NOT MET, then exit 0). NOT MEASURED, left to CI's full build: pnpm check:dual-build-cjs-loads (needs pnpm build) and pnpm check:lean-entry-closure (needs built entry points); neither reads a file in this diff. The three diff-reading gates that ran before the commit were re-run on head 17988ad: exit 0. node scripts/pm/check-governed-merges.mjs --test on the three paths: exit 3, 3 of 3 hit the register, Tier H (docs/adr/** x2, skills/** x1): the PR stays draft, no seat readies, queues or arms it. CI: the PR's check-runs are the seat's to read; none re-run locally. pnpm lint scoped: nothing to scope to (no package source in the diff; @objectstack/skills has no lint script).",
    "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
    "mcp_calls": "0 — no GitHub MCP tool was called; every GitHub read was a gh api REST GET (card, comments, PR 28208, PR 28325 and their files, PR 28432), every write went through scripts/pm",
    "api_writes": "2 REST relay writes — (1) scripts/pm/fleet-write/dispatch.mjs pr_create, request fw-20261031T153745Z-d9ed4f, run 41215766447, read back identical (17697 bytes), no assignees, no labels sent (the documentation, size/m and tooling labels on the PR are the labeler's, not mine); (2) this os-dev-report comment through scripts/pm/post-stamped.mjs. Plus git push -u origin claude/project-thread-c92hml (head 17988ad; not a REST write). Write budget: 3 of 3 (push, pr_create, report).",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: c · reach: named producer: skills/objectstack-data/evals/hooks-security-seeds-datasources.json case id 3 expected_output still answers 'A defineDatasource entry (credentialsRef, never inline credentials)' for a code datasource exposing a Postgres table, the same stale teaching this card corrects; a code datasource has no sys_secret handle to point at, so an agent graded against it writes a reference the connect leaves failed-credentials · evidence: the eval's must_contain list does not require credentialsRef, so it stays green · dedupe words: eval credentialsRef datasource expected_output code-defined · carrier: this card's family (skills lane, domain:skills) — the seat folds it into this PR after amending the claim's file surface, or files it; not edited here because the card and the claim name only the three texts"
    ]
    }


    Generated by Claude Code

  8. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

    Landing record · #28209 · PR #28432

    domain:server seat 2 · session_0186vfjHHMsRXC9EUT9hTFMo · 2026-10-31T21:00Z

    Reading Probe Result
    Queue membership git ls-remote origin 'refs/heads/gh-readonly-queue/main/pr-28432-*' 0 refs (released)
    Ancestry git merge-base --is-ancestor 22663cab origin/main yes
    Content git grep -c OS_DATASOURCE_ENV_CREDENTIALS origin/main -- skills/objectstack-data/rules/datasources.md 1 hit
    • Landed: merged as 22663cab after the maintainer's approval (Tier H). The datasources skill rule teaches the environment route for a code-declared datasource: one password at connect from the per-name environment variable, while the host switch is on. ADR-0015 and ADR-0062 carry dated amendment notes recording that nothing mints a sys_secret: handle for a code datasource.
    • Changeset: @objectstack/skills patch. The order's skip-changeset ruling was wrong; the seat corrected its order template.
    • Unchanged: no runtime, schema or refusal changed.
    • Follow-up: skills(objectstack-data) eval: hooks-security-seeds-datasources case 3 still answers credentialsRef for a code-declared datasource #28435. The eval hooks-security-seeds-datasources.json case 3 still answers credentialsRef for a code-declared datasource, which this landing's rule now contradicts. It waits for triage to grade it, and is now unblocked.

    Release: claim 6545227271 (session_0186vfjHHMsRXC9EUT9hTFMo, branch claude/project-thread-c92hml) · landed.

    • State: pm:dispatched removed; the card is closed.
    • Resume-from: none.

    Generated by Claude Code

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

Metadata

Metadata

Labels

area:datadocumentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatfindingRecorded observation — held, not dispatchable until the findings triage round grades itpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions