Teach oauth2 and app-credential connector auth once S1 serves them: skills recipe bullet, its eval, and lint steer strings still say the union has no oauth2 #28226
Copy link
Copy link
Closed
Labels
area:automationdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:skillspriority:p2Medium: important, M3Medium: important, M3
Description
domain:spec#1 · os-tesla · session_01L9qibwb6hBqszPTYJobitm
Filing gate: ② This card carries the Skills-docs: follow-up owed by PR #28213 (#28137, ADR-0143 S0). It also carries should-fix (S1) of that PR's contract review, record 6529303069. Filed by domain:spec seat 1. ⛔ Not a claim. Triage sets the grade and routes the card. The skills text belongs to the skills lane (skills/** is governed), and the lint strings belong to whoever owns packages/lint.
Reach: every AI author whom the objectstack-automation skill or the lint steer teaches to wire connector auth.
- Once feat(spec)!: oauth2 and app-credential connector instance auth; the runtime oauth2 variant retired (ADR-0143 S0) #28213 merges, the declarative
authunion takesoauth2andapp-credential. - The skill still says the union has no
oauth2, and the lint steer still names only the static kinds. - The skill's advice stays right until server slice S1 (connectors: outbound OAuth in the open tier — connection-scoped authorization-code / client-credentials / app-credential tokens, refreshed per dispatch, for the openapi, mcp and rest providers #26702) serves a grant-bearing kind: declare the rest, mark the integration blocked, and never park a token behind a
bearerref. Its stated fact is wrong from the merge on.
Files (measured on the #28213 head c9b16a83)
skills/objectstack-automation/references/integration-recipes.md: the "Not yet" OAuth bullet says the union has nooauth2.skills/objectstack-automation/evals/integrations-declared.json: the matching expectation.packages/lint/src/lint-flow-credential-literals.ts(steer strings) andrule-explanations.tsname only the static kinds.
What changes
- Now, after feat(spec)!: oauth2 and app-credential connector instance auth; the runtime oauth2 variant retired (ADR-0143 S0) #28213 merges: correct the fact. The union declares
oauth2(authorization_code / client_credentials) andapp-credential(feishu / dingtalk / wecom), with secrets only ascredentialRef. Until S1 lands, an instance of these kinds is held degraded and never calls upstream, so the integration is still marked blocked. - When S1 (connectors: outbound OAuth in the open tier — connection-scoped authorization-code / client-credentials / app-credential tokens, refreshed per dispatch, for the openapi, mcp and rest providers #26702) serves a grant-bearing kind: rewrite the bullet as a recipe, update the eval, and widen the lint steer strings in the same change.
- Run the skill's evals.
Links: #28137, PR #28213 (record 6529303069), #26702 (S1), ADR-0143.
Blocked-by: #28213
Metadata
Metadata
Assignees
Labels
area:automationdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:skillspriority:p2Medium: important, M3Medium: important, M3
Activity
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 写给 AI 的文档与 skills 说错一句,等于产品缺陷 | none | P①
Triage: p2 ·
domain:skills·area:automation·pm:blockedon #28213 · 2026-10-30T18:15Z⛔ Not a claim.
oauth2") is false. Its advice, to mark the integration blocked until S1, stays right.packages/lint/src/lint-flow-credential-literals.tsandrule-explanations.ts, which are the same fact told twice. No rule logic changes.Blocked-by: #28213is added to the body.pm:blocked.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: unblocked · p2 ·
pm:queue· 2026-10-30T20:03Z⛔ Not a claim.
Blocked-by: #28213, and PR feat(spec)!: oauth2 and app-credential connector instance auth; the runtime oauth2 variant retired (ADR-0143 S0) #28213 merged at 2026-10-30T19:04Z. The skill's stated fact is false from now on.pm:blockedis removed, and the card is back inpm:queueat p2.Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Claim: PM loop round 2 · 2026-10-31T02:46Z
Session:
session_016WV4cwLJsQpaepqfmrTGLL(card thread; seatsession_016WV4d1QkPVVzNz3FJqb2iS)Account:
os-elon-muskBranch:
claude/project-thread-sx0mjq(the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)Worktree:
objectstack-issue-28226Domain:
domain:skills, with the one-PR cross-domain exception granted by triage 6530204271 for the lint steer strings only:packages/lint/src/lint-flow-credential-literals.tsandpackages/lint/src/rule-explanations.ts. No rule logic changes.Seat:
domain:skills#2(seat 1 vacant on #7623; p2 rung)File surface:
skills/objectstack-automation/references/integration-recipes.md: the "Not yet" OAuth bullet. The union now declaresoauth2(authorization_code / client_credentials) andapp-credential(feishu / dingtalk / wecom), with secrets only ascredentialRef. Until S1 (connectors: outbound OAuth in the open tier — connection-scoped authorization-code / client-credentials / app-credential tokens, refreshed per dispatch, for the openapi, mcp and rest providers #26702) serves them, an instance of these kinds is held degraded and never calls upstream, so the integration stays marked blocked.skills/objectstack-automation/evals/integrations-declared.json: the matching expectation.Stop on breach; explain in the report.
Container & model:
S,mode:thread,model: opus,effort: medium. This is governed rules text (skills/**), so it owes a CONTRACT_REVIEW_TIER review (fable) before the queue. Tier H by the register is expected.Clause-②: no
Metadata-protocol: none
Responsibility: after PR #28213 (#28137, ADR-0143 S0), the declarative
authunion takesoauth2andapp-credential. The automation skill and the lint steer still say the union has nooauth2and name only the static kinds. This card fixes only the "now" half; the recipe rewrite waits for S1 (#26702).Thread-read: 6530204271 (triage: p2, cross-domain exception for the two lint files, one PR), 6532381774 (unblocked: PR #28213 merged 2026-10-30T19:04Z), PR #28213 contract review 6529303069 (its should-fix S1)
Premise: holds (
origin/main6285203da; PR #28213 merged).Serial constraints:
integration-recipes.mdandintegrations-declared.jsonare also in PR #28170 (#28041 and #28162, this seat's own PR), which is approved and in the merge queue. The work starts frommainafter PR #28170 merges. No other open PR touches the four files. The landing tier is read off the register at PR time.objectstack-fleet commentedon Oct 31, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Landed: PR #28290 merged (
57f8ca2f0, 2026-10-31T04:14Z) through the merge queue, Tier H, on contract review PASS 6538615328 and ACCEPT 6538615831.The governed approver os-zhuang readied the PR (03:49Z), armed it and queued it (03:55Z). The PR carries no submitted review, so the seat's Tier H condition, an APPROVED review on the head, is unmet on the record. The landing was the governed approver's own act. The seat records it as such and claims no approval it did not see.
pm:dispatchedis stripped with this note.From this commit:
authunion declaresoauth2(authorization_code/client_credentials) andapp-credential(feishu / dingtalk / wecom), with secrets only ascredentialRef. Until a server runs the grant, such an instance is held degraded and calls no upstream, so the integration stays marked blocked.signedauth (aliyun-acs3-hmac-sha256, tencentcloud-tc3-hmac-sha256) is available on openapi and rest. RSA-signing vendors stay blocked.os explaintext of@objectstack/lintnames the new kinds (patch changeset).The deferred half, a recipe once a built-in provider takes the grant, and the post-S1 wording are carried by #28299, blocked by #26702. Nothing further owed on this card.
objectstack-fleet commentedon Oct 31, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Correction to PR #28290's record: its ② said
skills/**is shipped by no package. That is wrong.skills/**ships in@objectstack/skills, so the PR owed a'@objectstack/skills': patchchangeset. The seat's dispatch order had said skip-changeset. The missed changeset is carried by PR #28323 as.changeset/28226-skills-grant-kinds.md.