Skip to content

Card 12 — F8 e-signature connector · F15 HotCRM hand-off behind CLM_COMPOSITION (M4) #83

Open

Description

@objectstack-fleet

Ruled: 6617232764 · letter A · 2026-11-03T22:34:37Z (batch #12: F8 is a DocuSign openapi connector instance declared inside hotclm, document and include taken from the 18.3.0 official app, OAuth connected once by an administrator, status by scheduled polling; supersedes the 10-25 ruling below)

Blocked-by: the maintainer-provided DocuSign developer-sandbox OAuth client (integration key + secret key) connected once in the demo deployment — the acceptance cannot run without it (objectstack#25747, the platform plugin this card waited on, was closed not planned on 2026-10-28)

Earlier: Ruled: 6393744399 · letter A · 2026-10-25T05:02Z (platform connector-esign; superseded).

Split by the ruling: F15 (HotCRM hand-off) moved to #107; this card keeps F8 (e-signature), which consumes the platform connector of objectstack-ai/objectstack#25747.

Card spec: docs/backlog/12-esign-and-crm-handoff.md — read it in full; this issue carries only the increment. Milestone M4. The card's own blockers (cards 06 and 09) have both landed (#16, #39).

Why it is blocked on #82, and on nothing else

#82 moves @objectstack/* from 17.4.0 to 17.7.0. This card authors new flows and connectors; authored against 17.4.0 schemas, they would meet 17.5–17.7's new refusals on the next bump. It is filed now so it is visible, and it unlocks when #82 merges.

Release changes that bear on this card (leads from the 17.5–17.7 release pages, not measured against code that does not exist yet)

  • 17.5 — an api flow's start node needs a non-blank config.secret (or the flow is declared autolaunched), or it stops registering at boot. F8's callback is an api-triggered flow.
  • 17.6 — Connectors keep only what runs: connector triggers, syncConfig and fieldMappings are deleted; a sync moves to a mapping with connectorSource.
  • 17.7 — inbound and outbound flow secrets move into sys_flow_credential; credential values leave the copies they were made into.

Read the pages (objectstack-ai/objectstack → content/docs/releases/v17/17-{5,6,7}.mdx) for the exact shapes at dispatch time.

Premises the seat re-checks before dispatch

  1. A provider sandbox is reachable from a dev container. The card's acceptance needs "against a provider sandbox, a contract goes signing → active with the signed PDF attached". The PM has no reading that a DocuSign sandbox credential or the network path exists for a dev. If it does not, the seat asks the maintainer how acceptance is met before dispatch — ⛔ not decided by the seat, ⛔ not faked by the dev (AGENTS.md: a capability the runtime does not deliver is hidden, not faked).
  2. The with-hotcrm composition can be booted for the gate run ("Gates green in both compositions"). How HotCRM's crm_contract is present in that composition is a reading the dev takes from HotCRM's HOTCRM_COMPOSITION precedent; the PM has none.

Filed by the repo:hotclm PM seat from the backlog card file.

Activity

  1. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    决策:卡 12 的电子签验收需要服务商沙箱,开发容器里没有凭据——怎么验收? · 2026-10-09T16:05Z

    Governing text: docs/backlog/12-esign-and-crm-handoff.md 验收「Against a provider sandbox, a contract goes signing → active with the signed PDF attached」· AGENTS.md「Honest capabilities … A capability the runtime does not deliver is hidden, not faked」与「Capability expansion: Tight … unless the card says so」

    维护者速读

    事情:卡 12 有两半——F8 电子签(DocuSign 起步)与 F15 HotCRM 交接。F15 不依赖外部服务;F8 的验收要在服务商沙箱里真跑通「签署中 → 生效」并挂上签好的 PDF。

    读数(2026-10-09,派发容器):环境变量中电子签相关凭据 0 个;https://account-d.docusign.com/ 网络可达(HTTP 200)。也就是说,缺的只是一个沙箱账号凭据,不是网络。

    你要做的:回一个字母。

    做法 代价 / 收益
    A(推荐) 拆卡:F15 在 #82 落地后先派;F8 等你把 DocuSign 开发者沙箱凭据加进环境 secret 后再派,按原验收跑通 F15 立刻推进;F8 上线即真实可用。需要你做一次环境配置
    B 整卡等凭据 不拆卡,但 F15 白等
    C 现在就写 F8 连接器,只验到 gate,不跑沙箱 ⛔ 展品里出现一个从未真正跑过的电子签连接器,正是「声明了却不兑现」;列出仅为否决

    四棱分析

    • 实际业务需求:电子签是 M4 的核心卖点,评估者会真去点「发起签署」;F15 是与 HotCRM 联动的展示点,两者需求都真实,但互不依赖。
    • 项目长远合理性:连接器的正确性只能在真实服务商上证明;拆卡让每一半都能完整验收,不留「以后再验」的尾巴。
    • 防 AI 写错:C 会让 agent 学到「连接器写出来、gate 绿就算完成」——外部契约(字段名、回调签名)全靠猜,恰是 AI 最容易写错且 gate 抓不到的地方。
    • 创业阶段不扩散:A 不新增范围,只是改变两半的先后;服务商仍按卡片只做 DocuSign 起步。

    另:卡 12 还需要 with-hotcrm 组合能启动以跑「两种组合下 gate 全绿」,席位没有读数,派发时由 dev 先测。


    Generated by Claude Code

  2. zhuangjianguo commented on Oct 25, 2026

    @zhuangjianguo
    Collaborator

    Ruling: batch #1 item 1 · letter A · maintainer 「同意」 2026-10-25T05:02Z

    本裁的 A 是 2026-10-25 重写后的 A,不是 2026-10-09 评论里的 A。 维护者同日裁下方向性原则,逐字:「本项目是元数据应用,平台相关的功能应该在平台开发」,并问电子签是否该做成平台统一的插件。按此,卡 12 原文让 hotclm 在 src/connectors/ 自写每个服务商的连接器,是平台能力落在应用里,不采纳。

    裁决 A:电子签做成平台连接器,hotclm 只消费。

    工作量(卡面读数):平台 domain:services · 1 个连接器包 · 先例 connector-slack 348 行 / connector-openapi 822 行(源码,不含测试);hotclm 侧 1 个 PR(声明 + 回调流)+ F15 1 个 PR。

    Governing text(录裁前重读):维护者 2026-10-25 原话(上)· pm-dispatch 应用仓推荐序特例「能力先建在平台……应用仓不自建替代」· ADR-0097 §1–§2、§5(webhook 入站仍未实现,回调留在应用的 api 流)· ADR-0022 §1 · ADR-0025(独立分发未实现,连接器包住单仓)· docs/backlog/12 验收「Against a provider sandbox, a contract goes signing → active with the signed PDF attached」不变。

    裁后执行(repo:hotclm 席位):本卡拆为 F15 子卡(Blocked-by: 18.1 升级 PR)与 F8(pm:blocked + Blocked-by: objectstack-ai/objectstack#25747);本席只录裁,不改标签。#38 里 clm_signature.envelope_id 的消费者随 F8 到。

    鲜度门:正文最后编辑 2026-10-09T14:43Z;其后唯一评论是席位 2026-10-09T16:06Z 的决策分析(其 A 已被本裁取代);2026-10-25 复测电子签凭据仍为 0 个,objectstack 无既有 e-sign 卡(两条查询 0 命中)。决裁文档:https://claude.ai/artifact/WpsJbszPncNgj1cDt2Ucw9


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Out of the decision box — Ruling-ref: comment 6393744399 (batch #1 item 1 · letter A · maintainer 「同意」).


    Generated by Claude Code

  4. objectstack-fleet commented on Nov 3, 2026

    @objectstack-fleet
    ContributorAuthor

    Platform re-scoped — to the decision box · 2026-11-03

    objectstack#25747 (the connector-esign plugin this card waited on) was closed as not planned on 2026-10-28. The maintainer ruled there that no e-signature plugin is built, and DocuSign becomes a declarative openapi connector instance inside the consuming app, once objectstack#26702 (outbound OAuth) and #26709 (include + Swagger 2.0 normalization) land. Both are now closed. That changes F8's shape from installing a connector to declaring one in hotclm, so it goes back to the maintainer before any lane work. State: pm:blocked → needs-user-decision.


    Generated by Claude Code

  5. zhuangjianguo commented on Nov 3, 2026

    @zhuangjianguo
    Collaborator

    Ruling: batch #12 item 3 · letter A · maintainer 「同意」 2026-11-03T22:34:37Z

    裁定:A —— F8 改为 hotclm 内声明的 DocuSign openapi 连接器实例

    决策箱文档:https://claude.ai/artifact/VTMgyRUKZu1gQChSijSnXD 。本裁取代 10-25 的 A(平台 connector-esign 插件):objectstack#25747 已于 10-28 按维护者「不需要这个插件」关卡;#26702(出站 OAuth)与 #26709(include + Swagger 2.0 归一化)均已落地并进 18.3.0;18.3.0 还自带官方 DocuSign 连接器应用 packages/apps/connector-docusign(私有包、不上 npm、只连开发者沙箱、状态靠轮询)。

    F8 的新形状(卡面按此改写)

    1. src/connectors/docusign.connector.ts:provider: 'openapi',文档取自官方应用 openapi/docusign-esignature.openapi.json(MIT,已裁到三操作:Envelopes_PostEnvelopes / Envelopes_GetEnvelope / Envelopes_GetEnvelopes),同样的 providerConfig.include;auth: { type: 'oauth2', grant: 'authorization_code', … },客户端密钥走 credentialRef,由管理员在 Setup → Integrations → Connector Connections 连接一次。
    2. esign_dispatch 动作 + 流:connector_action 建信封,写 clm_signature.envelope_id、status: sent。
    3. 状态:定时流轮询(照官方应用 docusign_poll_status_changes 的做法)更新 clm_signature.status;完成时建 final_signed 版本、写 signed_at,进入 F9 既有路径。⛔ 不把 DocuSign Connect 指向 api 流(平台 api 门只校验自家签名,验不了厂商 HMAC);esign_callback 等平台校验厂商回调签名后再回 api 流——席位开 objectstack 卡。
    4. 验收不变:沙箱里一份合同 signing → active 并挂上签好的 PDF。
    5. §06 F8 行、§08 电子签行随 lane PR 改成上述形状(§01–§04 之外);§03 clm_signature.provider 不动。

    前提(Blocked-by,与原来相同):维护者提供 DocuSign 开发者沙箱的集成密钥 + 密钥,并在 demo 部署里连接一次(official README 列出了步骤:注册 redirect URI、Authorization Code Grant、signature scope)。⛔ 不伪造、不只跑到 gate。

    ⛔ 不取 B(依赖官方应用——它不上 npm、跨包分发已被 10-29 裁暂缓)、C(F8 退出 M4)。⛔ 本席不动标签。


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions