Skip to content

feat(integration): 连接器动作可声明上游效果,connector_action 因此可计数 (#4395) - #6160

Merged
qq9340100 merged 5 commits into
mainfrom
claude/issue-4395-connector-action-effect
Aug 7, 2026
Merged

feat(integration): 连接器动作可声明上游效果,connector_action 因此可计数 (#4395)#6160
qq9340100 merged 5 commits into
mainfrom
claude/issue-4395-connector-action-effect

Conversation

@qq9340100

Copy link
Copy Markdown
Collaborator

Fixes #4395

落地 2026-08-06 维护者最终确认的裁决(评论 #5207142016):ConnectorActionDescriptor
增可选 effect,connector_action 执行器按声明计数。count 型效果(bulk)不做。

问题

ConnectorActionDescriptor 只描述动作的形状,对它究竟读还是写只字未提,所以
crm.push_opportunitycrm.lookup_account 在运行时完全无法区分。#4354 的断扫告警是
selected > 0 AND acted = 0 AND unmeasured = 0,而 connector_action 只能给出三个答案里
最诚实的那个:

改动

ConnectorActionSchema 新增可选 effect: 'read' | 'write',执行器三分支计数:

声明 派发成功 派发失败
write acted: 1 unmeasuredEffect(上游可能已写成)
read acted: 0(实测的零) acted: 0(它无论如何改不动东西)
不声明 unmeasuredEffect(原样) unmeasuredEffect(原样)

失败路径与 http 节点对被拒绝的写请求所做的判断逐字一致。声明是可选的:已有连接器一个字
不用改,报告内容与之前逐字相同。同一声明经 getConnectorDescriptors 送达设计器,
GET /api/v1/automation/connectors 现在带上 effect

⚠️ 一处需复核的范围扩张:effect 落在可作者化面上

派单边界写的是「裁决只提 descriptor,authorable 面不在本单」。实施中确认描述符单独加字段
不可能成立
,因此把 effect 加在了可作者化的 ConnectorActionSchema 上(authorable-surface
分片 +1 键),证据:

  1. ConnectorActionDescriptor 全仓唯一产地是 engine.getConnectorDescriptors()
    (packages/services/service-automation/src/engine.ts:1942),而它是从
    RegisteredConnector.def.actions 投影的;
  2. registerConnector 存的是 ConnectorSchema.parse(def)(同文件 :1687),插件路径与
    ADR-0097 声明式 materialization 路径(plugin.ts:1263)都经过这一次 parse;
  3. ConnectorSchema非 strictz.object,改动前实测:作者写下
    actions: [{ key, label, effect: 'write' }],parse 后得到 {"key":"push","label":"Push"}
    —— effect静默丢弃

即:只加描述符字段,该字段永远无法被任何东西填充,执行器的 write/read 分支永久不可达 ——
一个 ADR-0049「declared but never enforced」的死键。现在它从第一天起就被运行时读取。
connector 不是受治理的 metadata 类型(packages/spec/liveness/connector.json),
因此没有 liveness ledger 义务;check:liveness 已通过。请维护者复核这一格可作者化面。

反向验证(方向事先声明)

Revert A —— 删掉执行器的 effect 分支(恢复无条件 unmeasuredEffect)。预测:三个断言
「已声明」判决的用例转红,而「未声明」用例与「声明 write 但派发失败」用例应保持绿 ——
它们钉的是未变的兜底。实测完全一致,4 红:

FAIL run-summary.test.ts > a connector_action that DECLARES its effect is counted (#4395)
FAIL connector-nodes.test.ts > declared write + successful dispatch → acted: 1
FAIL connector-nodes.test.ts > declared read → acted: 0, and a REAL zero
FAIL connector-nodes.test.ts > declared read that failed still reports acted: 0

Revert B —— 保留执行器分支,删掉产地键,用于证明可作者化键是承重的。第一次跑出假绿:
service-automation 从 spec 的 dist 解析类型,而我没重建 spec(AGENTS.md §9 陈旧产物陷阱)。
重建时 authorable-surface 棘轮直接拦下:1 authorable key(s) disappeared from the contract
spec 自身测试(跑 src)给出方向:

AssertionError: expected [ undefined, undefined, undefined ]
                to deeply equal [ 'write', 'read', undefined ]

—— 没有产地键,每个声明读回来都是 undefined。这就是上面那处范围判断的实测依据。

验证

pnpm --filter @objectstack/spec test 326 文件 / 8367 用例全绿;
pnpm --filter @objectstack/service-automation test 65 文件 / 783 用例全绿;
tsc --noEmit 通过;check:generated 十门全绿(api-surface / authorable-surface /
json-schema.manifest / 参考文档由 --fix 重生成,未手改);check:liveness、
check:engine-double-contract、check:route-envelope、check:error-code-casing、
check:nul-bytes 等 18 门旁路门全过;改动文件 eslint 干净。


Generated by Claude Code

`ConnectorActionDescriptor` 只描述动作的形状,对它究竟读还是写只字未提,所以
`crm.push_opportunity` 和 `crm.lookup_account` 在运行时无法区分。#4354 的断扫告警
(`selected > 0 AND acted = 0 AND unmeasured = 0`) 因此对所有连接器驱动的流程都是盲区:
执行器只能报 `unmeasuredEffect`,既无法证明干过活,也无法在停止干活时被标记。

`ConnectorActionSchema` 新增可选 `effect: 'read' | 'write'`,`connector_action`
执行器据此三分支计数:声明 write 且派发成功 → acted:1;声明 read → acted:0(真实测得
的零);不声明 → 维持 unmeasuredEffect。派发失败时声明 write 回落为不可计数(上游可能
已写成,与 http 节点对被拒绝的写请求判断一致),声明 read 仍报 acted:0。

`effect` 落在可作者化的 ConnectorActionSchema 而不只是描述符接口上,因为那是唯一可能
的产地:registerConnector 存的是 ConnectorSchema.parse(def),描述符是从这份 def 投影
出来的;只加在描述符上则永远无法被填充(非 strict 的 z.object 会静默丢弃作者写的
effect,已实测)。同一声明经 getConnectorDescriptors 送达设计器。

count 型效果(bulk)不做,待真实需求。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@vercel

vercel Bot commented Aug 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 7, 2026 7:17am

Request Review

claude added 2 commits August 7, 2026 04:06
本仓的 regen 合并驱动在 merge 时把生成产物留给合并后重生成,因此这一次 `gen:docs`
吸收的是 main 侧 #5552(`FieldMapping.transform` 退役)的既有后果,不是本 PR 的改动;
本 PR 自己的 `ConnectorAction:effect` 行原样保留。check:generated 十门恢复全绿。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@github-actions github-actions Bot added the size/m label Aug 7, 2026
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/service-automation, @objectstack/spec.

112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/service-automation, @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/service-automation, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/service-automation, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/service-automation, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/service-automation, @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/apps.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling labels Aug 7, 2026
@qq9340100
qq9340100 marked this pull request as ready for review August 7, 2026 06:16
@qq9340100
qq9340100 added this pull request to the merge queue Aug 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

队列管家:新签名 ⇒ ⛔ 不重投,留完整签名与判读(台账无此条,且这是真实门禁失败,不是 flaky)

踢出事实(两读数):added_to_merge_queue 06:16:54Z → removed_from_merge_queue 06:20:22Z(github-merge-queue[bot]);origin/main 未含本 PR ⇒ 踢出,非落地。

⚠️ 先说一条读数陷阱(否则会误判成「零签名踢出」)

workflow run 级当时是 in_progress,掩盖了已出结论的 job failure。 本座位第一次按 run 级读,得到的是「Lint & Type Check:in_progress、CI:in_progress、零 failure」——按那个读数会判成「无签名可认」。改查 **check-runs(job 粒度)**才看到:

ESLint: completed/failure        ← 06:17:14Z → 06:20:11Z
TypeScript Type Check: in_progress   ← 同一个 run,还在跑,所以 run 级停在 in_progress

判「零签名」之前必须查 job 粒度;run 级 in_progress ≠ 没有结论。这与「run 级 cancelled 属生命周期状态、判据取 job 级」是同一条纪律的反向形态。

完整签名(完整 job 归档,⛔ 未看 tail)

失败 job ESLint,致命 step 34 Spec type-alias convention gate (ADR-0122)(pnpm check:spec-parsed-alias):

ADR-0122: 1 type-alias convention violation(s) in packages/spec.

  integration/connector.zod.ts — ConnectorActionEffect
    `ConnectorActionEffect` names the PARSED state of `ConnectorActionEffectSchema`,
    but ADR-0122 reserves the bare name for the AUTHOR state. Declare
    `export type ConnectorActionEffectParsed = z.infer<typeof ConnectorActionEffectSchema>;`
    next to it so the phase-2 flip has a migration target — or, if `z.input` and `z.infer`
    of `ConnectorActionEffectSchema` are the same type, pin it in
    packages/spec/src/type-alias-convention.pin.test.ts instead.

  Decision: docs/adr/0122-schema-type-alias-naming-convention.md

判读:时序碰撞,不是回归

该门禁由 #6072(feat(spec): ADR-0122 第一期 —— 解析态统一命名 XParsed(纯增量)+ **防回流门**)引入,05:35Z 才落地;本 PR 入队于 06:16:54Z,分支上的 ConnectorActionEffect 写于门禁落地之前。⇒ 本 PR 没有破坏什么,是新门禁上线后第一批撞上它的新增类型(「防回流门」按设计正是要拦这个)。

建议动作(⛔ 本座位不改代码;门禁自带处方,原文照转)

二选一:

  1. integration/connector.zod.ts 里紧挨着声明
    export type ConnectorActionEffectParsed = z.infer<typeof ConnectorActionEffectSchema>;
    给 phase-2 flip 留迁移目标;
  2. 若该 schema 的 z.inputz.infer 是同一个类型,改为在
    packages/spec/src/type-alias-convention.pin.test.ts 里钉住。

裁决依据见 docs/adr/0122-schema-type-alias-naming-convention.md

已核让行:处置前读本 PR 最近 30 分钟评论,无车道 PM、无另一管家会话的处置痕迹。⛔ 本座位未重投、未撤队、未改代码、未动认领。


Generated by Claude Code

@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

队列管家:读数提醒 —— 本 PR 于 06:53Z 重新入队,但分支上的 ADR-0122 违规尚未修复**,预计被同一门禁再拦一次。**(⛔ 仅报读数,不构成处置意见;本座位未撤队、未重投、未改代码)

实读(PR head 7ea3f255,即 04:50:01Z 那次提交,06:20Z 拦截之后无新提交):

packages/spec/src/integration/connector.zod.ts:584
export type ConnectorActionEffect = z.infer<typeof ConnectorActionEffectSchema>;
  • 文件内未出现 ConnectorActionEffectParsed;
  • 零命中反查(notes 6):该文件本次取到 881 行非空内容 ⇒ 零命中成立,不是读取失败。

这正是 06:20Z 拦截评论里门禁点名的那一行(裸名 ConnectorActionEffect 绑了 z.infer = PARSED 态,而 ADR-0122 把裸名保留给 AUTHOR 态)。处方两条(加 ConnectorActionEffectParsed 别名,或在 type-alias-convention.pin.test.ts 钉住)见该评论。

为什么值得提这一句:合并队列是全仓共享的串行资源,一次注定失败的构建会让排在后面的条目跟着重建一轮。若车道认为该门禁在本例是误报,那是另一回事 —— 请在本单说明,本座位不会代为判断 ADR 的适用性。


Generated by Claude Code

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 7, 2026
claude added 2 commits August 7, 2026 07:03
#6072 的防回流门 check:spec-parsed-alias 已落 main,本分支建于其前,新增导出需补齐时序。

`ConnectorActionEffectSchema` 是一个裸 z.enum —— 无 default、无 transform,z.input 与
z.infer 同构 —— 按 D5 判据不配 `XParsed`(那会给作者一个只能选错的同义名),按 D6 改为在
type-alias-convention.pin.test.ts 立编译期断言。与其上方两行的 ConnectorType /
ConnectorStatus 是同一类,故并入 integration/connector.zod.ts 分块;编号接文件末尾续号
(IsoNNN 只是唯一名,门读的是 z.input 出现处),避免为补一个空位重排其后 300 余行。
同时把 pin 计数断言 718 → 719 —— 该用例原注释只预期「减一」,这里补记它同样会因新增
同构别名而「加一」。

实测 D6 确实咬得住:临时给该 schema 加 .default('read') 后,check:test-typecheck 报
`src/type-alias-convention.pin.test.ts: 1 type error(s) in a file the ledger does not
cover`(注:裸 tsc --noEmit 不覆盖 *.test.ts,证明落在 typecheck 脚本的第二步)。

api-surface/integration.json 一并重生成:regen 合并驱动在 merge 时把该产物留给合并后重生成,
本次补回 #6072 的 10 个 XParsed 条目,本 PR 自己的两个条目原样保留。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011M7UwH25Unfi73UHim7ajY
@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Queue steward — closing out this seat's own 06:54Z read-out. The ADR-0122 gate is now GREEN on this branch; the seat stands down.

At 06:54Z this seat posted a read-out predicting the branch would be caught by check:spec-parsed-alias a second time. It was — the pr-6160-ede5a8e… generation failed ESLint at ~06:56Z on the same signature. That prediction has now been resolved by the lane, and per the discipline that a publicly-issued diagnosis gets its closure in the same public place, here is the closing reading.

What changed

Head moved 7ea3f255995b3d10c (chore(spec): 按 ADR-0122 D5/D6 给 ConnectorActionEffect 归位到同构 pin, 07:16:56Z). The lane took the second of the two remedies the gate itself offered — pin the isomorphic case rather than declare a …Parsed alias:

packages/spec/src/type-alias-convention.pin.test.ts:800
export type Iso718 = Assert<Eq< z.input< typeof M78.ConnectorActionEffectSchema >,
                                z.infer< typeof M78.ConnectorActionEffectSchema > >>;

That is the correct route for this symbol: ConnectorActionEffectSchema is a bare z.enum, so z.input and z.infer are the same type and the bare name carries no author/parsed ambiguity to migrate.

Verification (two readings, not one)

reading value
ESLint check-run on 995b3d10c completed / success
bare-name violation on the branch gate reports clean; Iso718 pin present at line 800

⚠️ Reported at job granularity, not run granularity — a run-level in_progress can mask an already-concluded job result, which is exactly how this signature was nearly missed at 06:17Z.

Collateral, for the record

The 06:53Z pr-6164-526c24a… generation (both Lint & Type Check and CI red) was not #6164's own defect#6164 was stacked directly behind this PR, so its speculative merge ref carried this violation. Once this PR was ejected, #6164 rebuilt on ede5a8e at 06:56Z, went fully green, and merged at 07:05Z. No action was or is owed there.

Seat boundary

⛔ This seat has not re-queued, not flipped ready/draft, not touched code, not touched the claim. Remaining checks on 995b3d10c (Test Core ×3, TypeScript Type Check, Dogfood Regression Gate ×3) were still in_progress at the time of reading — first enqueue is the lane PM's call, on the lane's own green-gate criterion, not this seat's.


Generated by Claude Code

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

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ConnectorActionDescriptor declares nothing about whether an action reads or writes, so the platform cannot count what a connector_action did

2 participants