crm-deduplication

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

CRM deduplication

CRM 去重

State: to-be-approved. Deploy-verified against a live workspace: not yet. Treat
Done when
below as the acceptance test and review
cargo-ai project plan
before deploying. Make no outcome claim for this skill until it is approved.
状态:待批准。 已针对实时 workspace 完成部署验证:尚未完成。请将下文的
Done when
视为验收测试,并在部署前审阅
cargo-ai project plan
。在该 skill 获得批准前, 不要对该 skill 的结果作出任何声明。

The outcome

结果

Choose the account path, contact path, or both. Each selected path has its own CRM model, identity audit, matching policy, survivor policy, disabled play, cost preview, pilot approval, and acceptance criteria. Approval for one path does not authorize the other.
选择公司账户路径、联系人路径或两者。每个选定路径都有自己独立的 CRM 模型、身份 审核、匹配策略、保留记录策略、停用的 play、成本预览、试点批准和验收标准。 批准其中一条路径并不代表同时批准另一条路径。

Path 1: Account deduplication

路径 1:公司账户去重

deduplicate_accounts
searches live CRM companies by LinkedIn company ID, LinkedIn company page, and non-generic domain. It scores the evidence, selects a deterministic survivor, and merges only an exact shared LinkedIn company ID when there is no identity, protected-ID, or parent-subsidiary conflict. Every other candidate reaches Cargo's native Human Review node. Company name never creates or scores a candidate.
The default survivor policy prefers protected business IDs, customers, commercial activity, populated records, recent activity, older creation time, then the smallest CRM record ID.
deduplicate_accounts
按 LinkedIn company ID、LinkedIn company page 和非通用域名搜索实时 CRM 公司。它会对证据进行评分、选择确定性的保留记录,并且仅在不存在身份冲突、 受保护 ID 冲突或母子公司冲突时,才合并双方具有完全相同 LinkedIn company ID 的记录。 其他所有候选项都会进入 Cargo 原生的 Human Review 节点。公司名称绝不用于生成或评分候选项。
默认保留记录策略依次优先考虑:受保护的业务 ID、客户身份、商业活动、信息完整的记录、 近期活动、较早的创建时间,最后是最小的 CRM 记录 ID。

Path 2: Contact deduplication

路径 2:联系人去重

deduplicate_contacts
searches live CRM contacts by LinkedIn person ID, normalized LinkedIn URL, exact email, and exact stored phone. A second search expands the direct results into transitive clusters using normalized identity values from retrieved records. Phone normalization also compares records inside the cluster. The play merges automatically only on an exact LinkedIn person ID, exact LinkedIn URL without a person-ID conflict, exact non-generic email without a LinkedIn conflict, or a conflict-free transitive chain of those classes.
LinkedIn identity conflicts, generic or shared email, and phone-only matches never merge automatically. Low-confidence clusters reach Human Review when that path is enabled and otherwise remain untouched. The native merge is the final CRM write. Normalization, enrichment, and association changes belong in a separately approved workflow.
deduplicate_contacts
按 LinkedIn person ID、标准化后的 LinkedIn URL、精确邮箱和精确存储的 电话号码搜索实时 CRM 联系人。第二次搜索会利用检索到的记录中的标准化身份值, 将直接结果扩展为传递性聚类。电话号码标准化还会比较聚类内部的记录。该 play 仅在以下情况下 自动合并:双方具有完全相同的 LinkedIn person ID、完全相同且不存在 person-ID 冲突的 LinkedIn URL、完全相同且不存在 LinkedIn 冲突的非通用邮箱,或者由这些类别构成且无冲突的 传递链。
存在 LinkedIn 身份冲突、使用通用或共享邮箱,以及仅通过电话号码匹配的情况永远不会自动合并。 低置信度聚类会在启用该路径时进入 Human Review,否则保持不变。原生 merge 是最终一次 CRM 写入。标准化、数据补全和关联关系变更应由单独批准的工作流负责。

Shared merge contract

共享合并契约

Both plays run directly on authoritative CRM-backed models, refresh candidates from the CRM before scoring, and stop when the queued source record is missing or no duplicate remains. Automatic and approved Human Review paths are the only merge paths. Decline or timeout leaves records separate. No candidate or staging model is created.
The checked example in
infra/
is HubSpot. Salesforce and Attio adapt the connector, extractor, record-ID field, search action, merge action, and property slugs together. Keep one CRM shape across the selected paths.
When matching-key coverage is weak, recommend
crm-enrichment
before building the affected path. That is a recommendation, not a dependency:
crm-deduplication
installs and operates independently.
两个 play 都直接运行在由权威 CRM 支撑的模型上,在评分前从 CRM 刷新候选项,并在队列中的 源记录缺失或不再存在重复项时停止。自动路径和经批准的 Human Review 路径是仅有的合并路径。 拒绝或超时会让记录保持分离。不会创建候选项模型或暂存模型。
infra/
中经过检查的示例使用 HubSpot。Salesforce 和 Attio 需要同步调整连接器、extract、 记录 ID 字段、搜索操作、合并操作和属性 slug。所有选定路径应保持同一种 CRM 结构。
当匹配键的覆盖范围不足时,建议在构建受影响路径之前使用
crm-enrichment
。 这只是建议而非依赖:
crm-deduplication
可以独立安装和运行。

Example

示例

Merge duplicate HubSpot companies automatically only when the LinkedIn company ID matches, and send everything else to #crm-hygiene for a human to approve.
Illustrative output, fictional records:
text
#crm-hygiene · Review CRM account merge into 18234
Duplicate score: 72/100
Survivor: 18234
Records to merge: 20911
Identity conflict: false
Protected ID conflict: false
Parent/subsidiary warning: false
Evidence:
18234, linkedin id none, linkedin northwind-traders, domain northwind.example, protected no, parent none
20911, linkedin id none, linkedin northwind-traders, domain northwind.example, protected no, parent none
[Approve]  [Decline]
Two records sharing a LinkedIn page and a domain, but no LinkedIn company ID, wait for a reviewer; approve merges 20911 into 18234, while decline or 24 hours of silence leaves both untouched.
仅当 LinkedIn company ID 匹配时,自动合并重复的 HubSpot 公司,并将其他所有项发送到 #crm-hygiene,由人工审批。
示例输出,记录均为虚构:
text
#crm-hygiene · Review CRM account merge into 18234
Duplicate score: 72/100
Survivor: 18234
Records to merge: 20911
Identity conflict: false
Protected ID conflict: false
Parent/subsidiary warning: false
Evidence:
18234, linkedin id none, linkedin northwind-traders, domain northwind.example, protected no, parent none
20911, linkedin id none, linkedin northwind-traders, domain northwind.example, protected no, parent none
[Approve]  [Decline]
两条记录共享一个 LinkedIn page 和一个域名,但没有 LinkedIn company ID,因此会等待审核人员处理; 批准会将 20911 合并到 18234,而拒绝或静默 24 小时则会让两条记录保持不变。

Put it in your project

放入你的项目

This folder is a worked example: real project resources written for another company. The job is to end with the code this company would have written in its project.
Install the required authoring skill first. If
cargo-project
is absent, run:
sh
npx skills add getcargohq/cargo-skills --skill cargo-project
Read
.agents/skills/cargo-project/SKILL.md
directly after installation. Complete its bootstrap and use its authoring, state, plan, and deployment rules throughout this pipeline.
  1. Install it: the CLI does the copy. From inside the project (the folder holding
    cargo.json
    ),
    cargo-ai project add cookbook/crm-deduplication
    writes this example to
    infra/crm-deduplication/
    and this procedure to
    .claude/skills/crm-deduplication/
    . No project yet?
    cargo-ai project init <dir> --cookbook crm-deduplication && cd <dir> && npm install
    does both; this folder never ships a shell. If you are reading this from the project's
    .claude/skills/
    , the install already happened. Start at step 2.
    On a CLI too old to have
    add
    , copy this folder in as a sibling of what is there by hand; everything below is unchanged.
  2. Choose paths and reconcile resources. Select account deduplication, contact deduplication, or both. Remove unselected model and play files, then update the contract's exact resource inventory, connector assertions, and object-specific assertions. Rewire each selected path to compatible CRM resources already in the project and remove duplicate declarations. Keep each play on its object-specific CRM model. Append environment requirements to
    .env.example
    ; preserve existing content.
  3. Audit and approve each selected path. Follow the matching path in
    references/audit.md
    . Present its identity coverage, candidate classes, conflicts, survivor policy, automatic class, and review destination. Stop for approval of that path's policy and disabled deployment. Approval does not carry across paths.
  4. Adapt and deploy disabled. Follow the matching path in
    references/configure.md
    . Record adaptations under
    ## Decisions
    in the copied skill. Run the executable contract, generated types, check, and plan. Inspect the selected graph and deploy only its approved resources with
    isEnabled: false
    . Never run
    cargo-ai project init --force
    in a non-empty directory.
  5. Hand off each path for pilot approval. Send its direct play link, exact population, current action costs, and approved policy. Stop for explicit approval of that merge-capable pilot.
  6. Run and report each approved path. Follow the matching path in
    references/run.md
    , then walk its section in
    evals/acceptance.md
    line by line.
本目录是一个实战示例:其中包含为另一家公司编写的真实项目资源。最终目标是产出该公司 在自己的项目中会编写的代码。
首先安装必需的编写 skill。 如果缺少
cargo-project
,请运行:
sh
npx skills add getcargohq/cargo-skills --skill cargo-project
安装后,直接读取
.agents/skills/cargo-project/SKILL.md
。完成其 bootstrap,并在整个流水线中 使用其中的编写、状态、计划和部署规则。
  1. 安装:CLI 负责复制。 在项目目录(包含
    cargo.json
    的目录)中运行
    cargo-ai project add cookbook/crm-deduplication
    ,会将此示例写入
    infra/crm-deduplication/
    ,并将此流程写入
    .claude/skills/crm-deduplication/
    。 还没有项目?运行
    cargo-ai project init <dir> --cookbook crm-deduplication && cd <dir> && npm install
    即可同时完成操作;本目录本身不附带 shell。如果你正在项目的
    .claude/skills/
    中阅读本文, 则安装已经完成,请从步骤 2 开始。
    如果 CLI 版本过旧,尚不支持
    add
    ,则手动将此目录作为 现有内容的同级目录复制进来;以下所有步骤保持不变。
  2. 选择路径并对齐资源。 选择公司账户去重、联系人去重或两者兼有。删除未选定路径的模型和 play 文件,然后更新 contract 中的精确资源清单、连接器断言和对象特定断言。将每个选定路径 重新连接到项目中已有的兼容 CRM 资源,并移除重复声明。每个 play 都应保留在其对象特定的 CRM 模型上。将环境变量要求追加到
    .env.example
    ;保留现有内容。
  3. 审核并批准每条选定路径。 按照匹配路径遵循
    references/audit.md
    。展示其身份标识覆盖率、候选类别、冲突、 保留记录策略、自动合并类别和审核目的地。在该路径的策略和停用部署获得批准前停止。 批准不会跨路径生效。
  4. 调整并以停用状态部署。 按照匹配路径遵循
    references/configure.md
    。在复制后的 skill 的
    ## Decisions
    下记录调整内容。 运行可执行 contract、generated types、check 和 plan。检查选定的工作流图,并且仅以
    isEnabled: false
    部署已批准的资源。绝不要在非空目录中运行
    cargo-ai project init --force
    。
  5. 将每条路径移交以获得试点批准。 提供其直接 play 链接、准确的记录范围、当前操作成本和 已批准的策略。必须明确批准这个具备合并能力的试点后才能继续。
  6. 运行并报告每条已批准路径。 按照匹配路径遵循
    references/run.md
    , 然后逐行执行
    evals/acceptance.md
    中对应部分。

Account path setup

公司账户路径设置

Verify the live company schema, record ID, LinkedIn company properties, domain property, protected business identifiers, parent-company property, and survivor inputs. The account audit and policy must be approved before adapting
crm_accounts
or
deduplicate_accounts
.
验证实时公司 schema、记录 ID、LinkedIn company 属性、域名属性、受保护业务标识符、 母公司属性和保留记录输入。在调整
crm_accounts
或
deduplicate_accounts
之前,必须批准 公司账户审核和策略。

Contact path setup

联系人路径设置

Verify the live contact schema, record ID, LinkedIn person properties, email, phone, association evidence, and survivor inputs. Decide whether low-confidence clusters enter Human Review or remain untouched. The contact audit and policy must be approved before adapting
crm_contacts
or
deduplicate_contacts
.
验证实时联系人 schema、记录 ID、LinkedIn person 属性、邮箱、电话号码、关联证据和保留记录输入。 决定低置信度聚类是进入 Human Review,还是保持不变。在调整
crm_contacts
或
deduplicate_contacts
之前,必须批准联系人审核和策略。

Shared review setup

共享审核设置

Resolve the default CRM connector for every selected path. Account deduplication requires Slack Human Review. Contact deduplication requires Slack only when low-confidence review is enabled. Replace each active
PLACEHOLDER_REVIEW_CHANNEL_ID
with its approved destination. If both paths use one channel, each still needs its own approved review policy and pilot. No paid call, review request, or CRM write occurs during either audit.
确定每条选定路径使用的默认 CRM 连接器。公司账户去重需要 Slack Human Review。 仅当联系人路径启用低置信度审核时,联系人去重才需要 Slack。将每个处于启用状态的
PLACEHOLDER_REVIEW_CHANNEL_ID
替换为已批准的目的地。如果两条路径使用同一频道, 每条路径仍需拥有各自已批准的审核策略和试点。在任一审核期间,都不会发生付费调用、 审核请求或 CRM 写入。

What you will be asked

你会被要求提供什么

Derive what can be discovered before asking the operator. Ask only for decisions that change the selected path's candidate population, merge policy, review ownership, or spend.
先确定可以自动发现的信息,再询问操作员。只询问那些会改变所选路径的候选记录范围、 合并策略、审核责任归属或支出的决策。

Shared inputs

共享输入

InputKindHow it is answeredWhy it matters
crm_shape
derivedInspect authenticated connectors, selected extracts, and generated action typesSets objects, IDs, search, merge, and property behavior
selected_paths
derivedRead whether the request names account deduplication, contact deduplication, or bothSets which audits, resources, approvals, and pilots are in scope
action_costs
derivedRead current CRM metadata plus Slack metadata for paths with active reviewEach path's handoff must disclose its current maximum cost
输入类型如何得出重要性
crm_shape
推导得出检查已认证的连接器、所选 extract 和生成的 action type决定对象、ID、搜索、合并和属性行为
selected_paths
推导得出判断请求指定的是公司账户去重、联系人去重,还是两者决定审核、资源、批准和试点的范围
action_costs
推导得出读取当前 CRM 元数据,以及启用审核路径的 Slack 元数据每条路径移交时都必须披露当前最高成本

Path 1: Account inputs

路径 1:公司账户输入

InputKindHow it is answeredWhy it matters
account_evidence
derivedAudit company identifiers, conflicts, candidate classes, and survivor inputsGrounds the account policy in current CRM records
account_policy
askedReview keys, protected fields, survivor precedence, score, and automatic classControls every company candidate and unattended merge
account_review
askedSelect Slack channel, owner, and timeout for uncertain company clustersGives manual company decisions an accountable owner
account_authorizations
askedApprove the disabled build, then the exact merge-capable pilot as separate decisionsSeparates deployment from company-record mutation
输入类型如何得出重要性
account_evidence
推导得出审核公司标识符、冲突、候选类别和保留记录输入使公司账户策略以当前 CRM 记录为依据
account_policy
需询问审核匹配键、受保护字段、保留记录优先级、评分和自动合并类别控制每个公司候选项及无人值守合并
account_review
需询问为不确定的公司聚类选择 Slack 频道、负责人和超时时间为人工处理公司决策明确责任归属
account_authorizations
需询问将停用构建的批准与指定合并试点的批准作为两个独立决策区分部署与公司记录变更

Path 2: Contact inputs

路径 2:联系人输入

InputKindHow it is answeredWhy it matters
contact_evidence
derivedAudit person identifiers, conflicts, candidate classes, and survivor inputsGrounds the contact policy in current CRM records
contact_policy
askedReview keys, global guards, survivor precedence, and automatic classesControls every person candidate and unattended merge
contact_review
askedDecide whether low-confidence groups enter review; if yes, approve channel and timeoutDefines the non-automatic contact path
contact_authorizations
askedApprove the disabled build, then the exact merge-capable pilot as separate decisionsSeparates deployment from contact-record mutation
输入类型如何得出重要性
contact_evidence
推导得出审核人员标识符、冲突、候选类别和保留记录输入使联系人策略以当前 CRM 记录为依据
contact_policy
需询问审核匹配键、全局防护规则、保留记录优先级和自动合并类别控制每个联系人候选项及无人值守合并
contact_review
需询问决定低置信度分组是否进入审核;如果进入,则批准频道和超时时间定义联系人的非自动处理路径
contact_authorizations
需询问将停用构建的批准与指定合并试点的批准作为两个独立决策区分部署与联系人记录变更

What you can change

可以更改什么

Offer only variations relevant to the selected path. Record each approved variation with its effect on candidates, safeguards, and validation.
只提供与所选路径相关的变体。记录每项已批准变体及其对候选项、防护措施和验证的影响。

Shared variations

共享变体

VariationWhen it is rightHowWhat it costs
crm
The consumer uses Salesforce or AttioReplace connector, extract, record ID, search, merge, and properties across selected pathsGenerated types and native merge semantics must be revalidated
structured_ai_review
Ambiguous evidence needs a concise review aidAdd priced structured evidence before Human Review only; never use it to bypass deterministic guardsAdds model cost and a non-deterministic review surface
变体适用场景操作方式成本或影响
crm
使用方采用 Salesforce 或 Attio在所有选定路径中同步替换连接器、extract、记录 ID、搜索、合并和属性必须重新验证生成的类型和原生合并语义
structured_ai_review
模糊证据需要简洁的审核辅助信息仅在 Human Review 之前添加需计费的结构化证据;绝不能用于绕过确定性防护规则增加模型成本和非确定性审核面

Path 1: Account variations

路径 1:公司账户变体

VariationWhen it is rightHowWhat it costs
account_matching_keys
The CRM has another approved durable company identityAdd it to search, normalization, evidence, conflict gates, review, and contract testsWider matching can create new false-positive company classes
account_survivor_precedence
Protected lifecycle, billing, tier, or customer policy must winChange the account ranker and its contract fixtures togetherA policy change can select a different survivor for every cluster
变体适用场景操作方式成本或影响
account_matching_keys
CRM 中存在另一个已批准、持久有效的公司身份标识将其加入搜索、标准化、证据、冲突门控、审核和 contract 测试扩大匹配范围可能产生新的公司误匹配类别
account_survivor_precedence
必须优先遵循受保护的生命周期、计费、层级或客户策略同时修改公司账户排序器及其 contract 固定测试数据策略变更可能为每个聚类选择不同的保留记录

Path 2: Contact variations

路径 2:联系人变体

VariationWhen it is rightHowWhat it costs
contact_matching_keys
The CRM has another approved durable person identityAdd it to both searches, normalization, evidence, conflict gates, review, and testsWider matching can create new false-positive person classes
contact_survivor_precedence
Commercial history or activity policy differsChange the contact ranker and its contract fixtures togetherA policy change can select a different survivor for every group
low_confidence_review
The operator wants phone-only or ambiguous groups surfacedKeep Human Review enabled, or remove that branch and update the contact contract so those groups end untouchedReview volume changes; disabled review leaves more duplicates
变体适用场景操作方式成本或影响
contact_matching_keys
CRM 中存在另一个已批准、持久有效的人员身份标识将其加入两次搜索、标准化、证据、冲突门控、审核和测试扩大匹配范围可能产生新的人员误匹配类别
contact_survivor_precedence
商业往来历史或活动策略有所不同同时修改联系人排序器及其 contract 固定测试数据策略变更可能为每个分组选择不同的保留记录
low_confidence_review
操作员希望仅通过电话号码匹配的分组或模糊分组也被发现保持 Human Review 启用,或移除该分支并更新联系人 contract,使这些分组最终保持不变审核量会发生变化;停用审核会留下更多重复项

What should not change

不应更改什么

Shared invariants

共享不变量

  • Run on authoritative CRM models. (
    infra/plays/
    ) Each selected play uses its object-specific CRM extract and record ID. A candidate model introduces another identity system and can target the wrong record.
  • Search live CRM rows before scoring. (
    infra/plays/
    ) The CRM search refreshes candidate membership for every run. Audit snapshots can become stale before a merge.
  • Search, prepare, score, then decide. (
    infra/scripts/
    ) Deterministic preparation retains the fresh source once, normalizes evidence, and selects one survivor before the automatic gate.
  • Merge only on automatic or approved paths. (
    infra/plays/
    ) Human approval reaches the reviewed merge. Decline and timeout end without a CRM write.
  • Stop stale queued rows. (
    infra/plays/
    ) A source missing from the fresh search ends before scoring or emitting merge IDs.
  • Keep one CRM shape. Adapt HubSpot in place. Parallel CRM branches drift from the generated types connected to the selected paths.
  • Keep pilots disabled, serial, and limited. (
    infra/plays/
    ) Each selected play remains disabled,
    noConcurrency
    , and limited to 15 rows until its verified pilot is approved for expansion.
  • 在权威 CRM 模型上运行。(
    infra/plays/
    )每个选定 play 都使用其对象特定的 CRM extract 和记录 ID。候选项模型会引入另一套身份体系,并可能指向错误记录。
  • 评分前搜索实时 CRM 行。(
    infra/plays/
    )每次运行,CRM 搜索都会刷新候选项成员关系。 审核快照可能在合并前已经过期。
  • 依次执行搜索、准备、评分和决策。(
    infra/scripts/
    )确定性准备步骤仅保留一次最新源数据, 标准化证据,并在进入自动门控前选择一个保留记录。
  • 仅在自动路径或经批准的路径上合并。(
    infra/plays/
    )人工批准会进入审核后的合并; 拒绝和超时会直接结束,不写入 CRM。
  • 停止处理过期的队列记录。(
    infra/plays/
    )如果源记录未出现在最新搜索结果中, 则在评分或输出 merge ID 之前结束。
  • **保持单一 CRM 结构。**就地调整 HubSpot。并行的 CRM 分支会与选定路径连接的生成类型发生偏差。
  • 保持试点停用、串行且范围受限。(
    infra/plays/
    )每个选定 play 保持停用、
    noConcurrency
    ,并限制为 15 行,直到其经过验证的试点获准扩展。

Path 1: Account invariants

路径 1:公司账户不变量

  • Keep the automatic company class narrow. (
    infra/plays/deduplicate-accounts.ts
    ) Exact shared LinkedIn company ID, score at least 60, and no identity, protected-ID, or parent-subsidiary conflict are all required. Every other candidate reaches Human Review.
  • Keep names out of identity. (
    infra/scripts/accounts/
    ) Company name is excluded from candidate generation and scoring. The checked review payload does not rely on it.
  • Protect business identities and corporate structure. Conflicting protected IDs and parent-subsidiary clusters never merge automatically.
  • 保持自动公司类别足够严格。(
    infra/plays/deduplicate-accounts.ts
    )必须同时满足双方具有 完全相同的 LinkedIn company ID、评分至少为 60,且不存在身份、受保护 ID 或母子公司冲突。 其他所有候选项都进入 Human Review。
  • 不将名称用于身份判断。(
    infra/scripts/accounts/
    )公司名称不参与候选项生成和评分。 经过检查的审核载荷也不依赖公司名称。
  • **保护业务身份和公司组织结构。**存在受保护 ID 冲突及母子公司聚类时,永远不会自动合并。

Path 2: Contact invariants

路径 2:联系人不变量

  • Apply person guards globally. (
    infra/scripts/contacts/evidence.ts
    ) Every automatic contact class is disqualified by a LinkedIn identity conflict or generic or shared email.
  • Keep phone-only groups out of automatic merge. Phone is a candidate key and review aid, not sufficient unattended identity evidence.
  • Expand transitive groups before deciding. (
    infra/plays/deduplicate-contacts.ts
    ) The second live search gathers every high-confidence identity key discovered by the direct search.
  • End after native merge. (
    infra/plays/deduplicate-contacts.ts
    ) Deduplication creates no post-merge update node. A separate approved workflow owns normalization, enrichment, and association changes.
  • 全局应用人员防护规则。(
    infra/scripts/contacts/evidence.ts
    )任何自动联系人类别只要存在 LinkedIn 身份冲突,或使用通用或共享邮箱,就会失去自动合并资格。
  • **将仅通过电话号码匹配的分组排除在自动合并之外。**电话号码是候选键和审核辅助信息, 但不足以作为无人值守合并的充分身份证据。
  • 决策前扩展传递性分组。(
    infra/plays/deduplicate-contacts.ts
    )第二次实时搜索会收集 第一次直接搜索发现的所有高置信度身份键。
  • 原生 merge 后即结束。(
    infra/plays/deduplicate-contacts.ts
    )去重流程不会创建合并后更新节点。 标准化、数据补全和关联关系变更由单独批准的工作流负责。

Done when

完成标准(Done when)

Shared completion

共享完成条件

  • the operator selected account deduplication, contact deduplication, or both
  • each selected path has its own reconciled audit, policy approval, disabled-build approval, priced pilot approval, and final report
  • the selected resources use one CRM connector, a Slack connector for every path with active review, object-specific CRM models, and no candidate or staging model
  • generated types confirm selected search and merge payloads plus Human Review for paths that use it
  • node --import tsx evals/contract.mjs
    ,
    cargo-ai project types
    ,
    cargo-ai project check
    , and
    cargo-ai project plan
    pass after adaptation
  • every selected play is disabled,
    noConcurrency
    , and limited to 15 CRM rows before its pilot
  • 操作员选择了公司账户去重、联系人去重或两者兼有
  • 每条选定路径都有各自对齐后的审核、策略批准、停用构建批准、计费试点批准和最终报告
  • 选定资源使用一个 CRM 连接器;每条启用审核的路径都使用 Slack 连接器;使用对象特定的 CRM 模型;且不存在候选项模型或暂存模型
  • 生成的类型确认了选定路径的搜索与合并载荷,以及使用审核的路径所需的 Human Review
  • 调整后,
    node --import tsx evals/contract.mjs
    、
    cargo-ai project types
    、
    cargo-ai project check
    和
    cargo-ai project plan
    全部通过
  • 在试点开始前,每个选定 play 都处于停用状态、配置了
    noConcurrency
    ,并限制为 15 条 CRM 记录

Path 1: Account completion

路径 1:公司账户完成条件

  • the account audit reconciles company identifier coverage, mutually exclusive classes, conflicts, survivor evidence, and proposed merge IDs to the source total
  • deduplicate_accounts
    runs directly on
    crm_accounts
    and searches companies live
  • its graph contains preparation, native Scoring, the guarded Branch, native Human Review, and CRM merges only on automatic or approved paths
  • automatic merge requires exact shared LinkedIn company ID and every account conflict guard
  • every account survivor and absorbed company ID is verified in the CRM
  • 公司账户审核将公司标识符覆盖率、互斥类别、冲突、保留记录证据和拟议 merge ID 与来源总数对齐
  • deduplicate_accounts
    直接在
    crm_accounts
    上运行,并实时搜索公司
  • 其工作流图包含准备步骤、原生 Scoring、受防护的 Branch、原生 Human Review,且仅在自动路径或 经批准的路径上执行 CRM 合并
  • 自动合并要求双方具有完全相同的 LinkedIn company ID,并满足每项公司账户冲突防护规则
  • 每个公司账户保留记录及被合并掉的公司 ID 均已在 CRM 中验证

Path 2: Contact completion

路径 2:联系人完成条件

  • the contact audit reconciles source totals, person identifier coverage, unique candidate clusters, conflicts, survivor evidence, and proposed merge IDs, and reports overlapping matched classes separately
  • deduplicate_contacts
    runs directly on
    crm_contacts
    and performs both direct and transitive live searches
  • its graph contains preparation, native Scoring, the guarded Branch, optional native Human Review, and CRM merges only on automatic or approved paths
  • automatic merge requires one approved high-confidence class plus every global contact guard
  • the merge is the final CRM write, and every contact survivor and absorbed ID is verified in the CRM
  • 联系人审核将来源总数、人员标识符覆盖率、唯一候选聚类、冲突、保留记录证据和拟议 merge ID 对齐, 并单独报告重叠的匹配类别
  • deduplicate_contacts
    直接在
    crm_contacts
    上运行,并执行直接搜索和传递性实时搜索
  • 其工作流图包含准备步骤、原生 Scoring、受防护的 Branch、可选的原生 Human Review,且仅在自动路径或 经批准的路径上执行 CRM 合并
  • 自动合并要求满足一个已批准的高置信度类别,并满足每项全局联系人防护规则
  • merge 是最终一次 CRM 写入,每个联系人保留记录及被合并掉的 ID 均已在 CRM 中验证

What it costs

成本

Immediately before each selected path's preview, run
cargo-ai connection integration get <crm>
and, when review is enabled,
cargo-ai connection integration get slack
. Record the CLI version, lookup time, action slugs, and current cost metadata. The repository does not hard-code pipeline action prices.
紧接每条选定路径的预览之前,运行
cargo-ai connection integration get <crm>
;启用审核时,还要运行
cargo-ai connection integration get slack
。记录 CLI 版本、查询时间、操作 slug 和当前成本元数据。 仓库不会硬编码流水线操作价格。

Path 1: Account cost

路径 1:公司账户成本

Price the account search, automatic or approved company merge, and Human Review actions against the exact account population. Approval authorizes only the company clusters shown for that pilot.
根据准确的公司账户记录范围,对公司账户搜索、自动或经批准的公司合并以及 Human Review 操作计价。 批准仅授权该试点中展示的公司聚类。

Path 2: Contact cost

路径 2:联系人成本

Price both contact searches, automatic or approved contact merge, and enabled Human Review actions against the exact contact population. Approval authorizes only the person clusters shown for that pilot.
Enabling either recurring schedule is a separate final approval after that path's pilot passes.
根据准确的联系人记录范围,对两次联系人搜索、自动或经批准的联系人合并以及启用的 Human Review 操作计价。批准仅授权该试点中展示的人员聚类。
任一周期性计划启用,都属于该路径试点通过后的单独最终批准事项。

Composes into

后续组合

Nothing in particular comes after it: the survivors are the records anything reading the CRM sees.
后面没有特定的后续流程:保留记录就是任何读取 CRM 的组件最终看到的记录。