skill-family-engineering-kit 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/CHANGELOG.zh-CN.md +21 -0
- package/README.md +11 -12
- package/README.zh-CN.md +11 -12
- package/candidate/adoption-cli.mjs +67 -0
- package/candidate/adoption-mechanisms.mjs +69 -0
- package/candidate/index.mjs +3 -0
- package/candidate/profile-bundle.mjs +464 -15
- package/candidate/projection-bundle-cli.mjs +18 -0
- package/docs/agents/capability-catalog.en.json +1746 -1562
- package/docs/agents/capability-catalog.json +1029 -930
- package/docs/agents/capability-catalog.zh-CN.json +1746 -1562
- package/docs/architecture/index.html +10 -3
- package/docs/en/architecture/index.html +12 -3
- package/docs/public/status/index.html +3 -3
- package/docs/reference/api/harness/index.html +396 -1
- package/docs/search/search_index.json +1 -1
- package/package.json +3 -3
- package/release-notes/0.4.0.yaml +23 -0
- package/src/adopt-plan.mjs +26 -1
- package/src/index.mjs +5 -2
- package/src/migration.mjs +121 -1
- package/src/projection.mjs +1152 -266
|
@@ -1972,7 +1972,7 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
1972
1972
|
<tbody>
|
|
1973
1973
|
<tr>
|
|
1974
1974
|
<td>Contracts</td>
|
|
1975
|
-
<td>结构、协议、错误码、协议名登记;
|
|
1975
|
+
<td>结构、协议、错误码、协议名登记;20 类顶层对象;9 条 mandatory rule</td>
|
|
1976
1976
|
<td>业务字段语义、领域审计、远端写入、模型生成</td>
|
|
1977
1977
|
</tr>
|
|
1978
1978
|
<tr>
|
|
@@ -2024,7 +2024,7 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
2024
2024
|
<li>涉及制品关系/版本锁 → artifact-graph。</li>
|
|
2025
2025
|
<li>只有一个消费者或尚未证明跨两个真实消费者重复 → 留在消费者,不扩张 Foundation。</li>
|
|
2026
2026
|
</ol>
|
|
2027
|
-
<p>第 8 步是扩张闸门:新增组件必须说明删除它会让两个以上真实消费者重复实现,并经独立 fixture
|
|
2027
|
+
<p>第 8 步是扩张闸门:新增组件必须说明删除它会让两个以上真实消费者重复实现,并经独立 fixture 验证;进入门 1 另要求至少一个现有真实消费者加一个结构同型的可预见消费者(第二消费者不要求已上线,但需求必须能用同一结构表达,调整记录见 FND-ADR-009)。第 9 步是有限封闭语义闸门(对应 FND-ADR-001 门 8):能力若携带少量领域语义,必须满足语义能被少数稳定封闭枚举覆盖,或为确定性估算原语——算法、适用范围与偏差方向已在契约中声明;本闸门不取消门 2「语义无关」一票否决。机器可读版见 <code>docs/agents/architecture-routing.md</code>。</p>
|
|
2028
2028
|
<h2 id="信任与副作用边界">信任与副作用边界<a class="headerlink" href="#信任与副作用边界" title="Permanent link">¶</a></h2>
|
|
2029
2029
|
<p>Foundation 的信任前提与副作用约定按层固化,调用方据此判断风险:</p>
|
|
2030
2030
|
<ul>
|
|
@@ -2050,6 +2050,12 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
2050
2050
|
涉及制品关系/版本锁? ──是──▶ artifact-graph
|
|
2051
2051
|
│否
|
|
2052
2052
|
只有一个消费者/未证明跨两个真实消费者? ──是──▶ 留在消费者,不扩张
|
|
2053
|
+
│否
|
|
2054
|
+
携带少量领域语义? ──是──▶ 有限封闭语义:稳定闭枚举可覆盖,或为确定性
|
|
2055
|
+
│ 估算原语(算法/适用范围/偏差方向已契约声明)→ 可纳入;
|
|
2056
|
+
│ 否则留在消费者(FND-ADR-001 门 8,不取消门 2 一票否决)
|
|
2057
|
+
│否
|
|
2058
|
+
──▶ 可纳入
|
|
2053
2059
|
</code></pre>
|
|
2054
2060
|
<h2 id="与外部项目的路由关系">与外部项目的路由关系<a class="headerlink" href="#与外部项目的路由关系" title="Permanent link">¶</a></h2>
|
|
2055
2061
|
<p>Foundation 不是全能底座。下列职责明确在 Foundation 之外:</p>
|
|
@@ -2066,11 +2072,12 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
2066
2072
|
<li><strong>宿主接入线</strong>(FND-FR-001/FND-FR-002,FND-ADR-003):Contracts 登记 descriptor/source/manifest/probe/plan/receipt;Harness 实现通用 source closure、原子 build/materialize 和 probe 分类;Kit 注入具体 Profile 与受信 driver。当前只支持 describe/build/probe/plan,<code>apply</code> 稳定拒绝,安装/卸载/更新均未实现。</li>
|
|
2067
2073
|
<li><strong>持久状态底座线</strong>(FND-FR-003,FND-ADR-004):append-only 事件、hash chain、快照与校验恢复;只提供状态底座,状态机、任务节点、重试、终态、记忆等业务语义不纳入 Foundation。</li>
|
|
2068
2074
|
<li><strong>人类报告线</strong>(FND-FR-004,FND-ADR-005):双层合同——机器结果是唯一真源,人类报告由机器结果确定性渲染(Markdown + digest 绑定 + 分级检查),不自由撰写。</li>
|
|
2075
|
+
<li><strong>有限封闭语义工具线</strong>(FND-ADR-009):基线物化 + contentGuard(摘要不符、物化中途变化、守卫检出均失败关闭)、通用只读 chokepoint(允许根集合 + 可选身份谓词)、策略化表面扫描(策略契约 + 注入式自测)、token 上界估算(确定性领域估算原语,无模型/网络/tokenizer 依赖)、通用上限守卫(复用 state-store 事件账与 token-lock,上限与超限策略由消费者配置)。</li>
|
|
2069
2076
|
</ul>
|
|
2070
2077
|
<p>三包结构保持、不拆第四包(FND-ADR-007);制品治理采用 artifact-graph CLI 与版本锁(FND-ADR-006)。</p>
|
|
2071
2078
|
<h2 id="首版预算">首版预算<a class="headerlink" href="#首版预算" title="Permanent link">¶</a></h2>
|
|
2072
2079
|
<ul>
|
|
2073
|
-
<li>顶层 Contracts 对象:
|
|
2080
|
+
<li>顶层 Contracts 对象:20 类(完整清单以 <code>packages/skill-family-contracts/src/registry.json</code> 为唯一真源):project-manifest、profile-descriptor、managed-file-lock、operation-request、operation-result、migration-manifest、adapter-source、report-model、report-binding、host-descriptor、host-registry、host-capability-fact、host-probe-result、adapter-build-manifest、host-operation-plan、host-operation-receipt、state-event-envelope、state-snapshot-metadata、token-estimate-result、surface-scan-policy;</li>
|
|
2074
2081
|
<li>Kit 顶层命令:4 个(scaffold、adopt-plan、projection、check);</li>
|
|
2075
2082
|
<li>强制机械规则:当前 9 条,预算不超过 20 条,绝对上限 30 条;CR-001 对登记表内全部 Schema 做统一编译;</li>
|
|
2076
2083
|
<li>叶子包:3 个(skill-family-contracts、skill-family-harness-node、skill-family-engineering-kit);</li>
|
|
@@ -1972,7 +1972,7 @@ Horizontal (attachment surfaces, no new vertical layers):
|
|
|
1972
1972
|
<tbody>
|
|
1973
1973
|
<tr>
|
|
1974
1974
|
<td>Contracts</td>
|
|
1975
|
-
<td>Structure, protocols, error codes, protocol-name registry;
|
|
1975
|
+
<td>Structure, protocols, error codes, protocol-name registry; 20 top-level object kinds; 9 mandatory rules</td>
|
|
1976
1976
|
<td>Business-field semantics, domain auditing, remote writes, model generation</td>
|
|
1977
1977
|
</tr>
|
|
1978
1978
|
<tr>
|
|
@@ -2024,7 +2024,7 @@ Horizontal (attachment surfaces, no new vertical layers):
|
|
|
2024
2024
|
<li>Involves artifact relationships / version-lock → artifact-graph.</li>
|
|
2025
2025
|
<li>Has only one consumer, or has not been proven to repeat across two real consumers → keep it with the consumer; do not expand Foundation.</li>
|
|
2026
2026
|
</ol>
|
|
2027
|
-
<p>Step 8 is the expansion gate: a new component must justify that deleting it would force two or more real consumers to re-implement it, and this must be verified by an independent fixture. The machine-readable version is in <code>docs/agents/architecture-routing.md</code>.</p>
|
|
2027
|
+
<p>Step 8 is the expansion gate: a new component must justify that deleting it would force two or more real consumers to re-implement it, and this must be verified by an independent fixture; admission gate 1 additionally requires at least one existing real consumer plus one structurally isomorphic foreseeable consumer (the second consumer need not be live, but its need must be expressible with the same structure; adjustment record in FND-ADR-009). Step 9 is the finite-closed-semantics gate (FND-ADR-001 gate 8): a capability carrying limited domain semantics must satisfy either — its semantics are covered by a small stable closed enumeration, or it is a deterministic estimation primitive whose algorithm, scope, and bias direction are declared in the contract; this gate does not cancel gate 2's "semantics-free" veto. The machine-readable version is in <code>docs/agents/architecture-routing.md</code>.</p>
|
|
2028
2028
|
<h2 id="Trust-and-Side-Effect-Boundaries">Trust and Side-Effect Boundaries<a class="headerlink" href="#Trust-and-Side-Effect-Boundaries" title="Permanent link">¶</a></h2>
|
|
2029
2029
|
<p>Foundation's trust assumptions and side-effect conventions are solidified per layer; callers judge risk accordingly:</p>
|
|
2030
2030
|
<ul>
|
|
@@ -2050,6 +2050,14 @@ Involves tasks/retries/rework/acceptance? ──yes──▶ loop-agent
|
|
|
2050
2050
|
Involves artifact relationships/version-lock? ──yes──▶ artifact-graph
|
|
2051
2051
|
│no
|
|
2052
2052
|
Only one consumer / not proven across two real consumers? ──yes──▶ keep with consumer, do not expand
|
|
2053
|
+
│no
|
|
2054
|
+
Carries limited domain semantics? ──yes──▶ finite closed semantics: covered by a
|
|
2055
|
+
│ stable closed enumeration, or a deterministic estimation
|
|
2056
|
+
│ primitive (algorithm/scope/bias declared in the contract)
|
|
2057
|
+
│ → admissible; otherwise keep with consumer
|
|
2058
|
+
│ (FND-ADR-001 gate 8; does not cancel gate 2's veto)
|
|
2059
|
+
│no
|
|
2060
|
+
──▶ admissible
|
|
2053
2061
|
</code></pre>
|
|
2054
2062
|
<h2 id="Routing-Relationships-with-External-Projects">Routing Relationships with External Projects<a class="headerlink" href="#Routing-Relationships-with-External-Projects" title="Permanent link">¶</a></h2>
|
|
2055
2063
|
<p>Foundation is not an all-powerful base. The following responsibilities are explicitly outside Foundation:</p>
|
|
@@ -2066,11 +2074,12 @@ Only one consumer / not proven across two real consumers? ──yes──▶ kee
|
|
|
2066
2074
|
<li><strong>Host-access line</strong> (FND-FR-001/FND-FR-002, FND-ADR-003): Contracts registers descriptor/source/manifest/probe/plan/receipt; Harness implements generic source closure, atomic build/materialize, and probe classification; Kit injects the concrete Profile and trusted driver. Currently only describe/build/probe/plan are supported; <code>apply</code> is stably refused; install/uninstall/update are unimplemented.</li>
|
|
2067
2075
|
<li><strong>Durable state-substrate line</strong> (FND-FR-003, FND-ADR-004): append-only events, hash chain, snapshots, and verification recovery; provides only the state substrate, not business semantics such as state machines, task nodes, retries, terminal states, or memory.</li>
|
|
2068
2076
|
<li><strong>Human-report line</strong> (FND-FR-004, FND-ADR-005): a two-layer contract — machine results are the sole source of truth, and the human report is deterministically rendered from machine results (Markdown + digest binding + graded checks), not freely authored.</li>
|
|
2077
|
+
<li><strong>Finite-closed-semantics tools line</strong> (FND-ADR-009): baseline materialization + contentGuard (digest mismatch, mid-materialization change, and guard rejection all fail closed), generic read chokepoint (allowed-root set + optional identity predicate), strategy-driven surface scan (policy contract + injection self-test), token upper-bound estimation (deterministic estimation primitive with no model/network/tokenizer dependency), and a generic upper-bound guard (reusing the state-store event ledger and token-lock; the bound and over-limit policy are consumer-configured).</li>
|
|
2069
2078
|
</ul>
|
|
2070
2079
|
<p>The three-package structure is preserved and a fourth package is not split out (FND-ADR-007); artifact governance uses the artifact-graph CLI and version-lock (FND-ADR-006).</p>
|
|
2071
2080
|
<h2 id="First-Version-Budget">First-Version Budget<a class="headerlink" href="#First-Version-Budget" title="Permanent link">¶</a></h2>
|
|
2072
2081
|
<ul>
|
|
2073
|
-
<li>Top-level Contracts objects:
|
|
2082
|
+
<li>Top-level Contracts objects: 20 kinds (the complete list uses <code>packages/skill-family-contracts/src/registry.json</code> as the sole source of truth): project-manifest, profile-descriptor, managed-file-lock, operation-request, operation-result, migration-manifest, adapter-source, report-model, report-binding, host-descriptor, host-registry, host-capability-fact, host-probe-result, adapter-build-manifest, host-operation-plan, host-operation-receipt, state-event-envelope, state-snapshot-metadata, token-estimate-result, surface-scan-policy;</li>
|
|
2074
2083
|
<li>Kit top-level commands: 4 (scaffold, adopt-plan, projection, check);</li>
|
|
2075
2084
|
<li>Mandatory mechanical rules: currently 9, budget not exceeding 20, absolute ceiling 30; CR-001 uniformly compiles all Schemas within the registry;</li>
|
|
2076
2085
|
<li>Leaf packages: 3 (skill-family-contracts, skill-family-harness-node, skill-family-engineering-kit);</li>
|
|
@@ -1792,17 +1792,17 @@
|
|
|
1792
1792
|
<tbody>
|
|
1793
1793
|
<tr>
|
|
1794
1794
|
<td><code>skill-family-contracts</code></td>
|
|
1795
|
-
<td>0.
|
|
1795
|
+
<td>0.4.0</td>
|
|
1796
1796
|
<td><a href="https://github.com/ifoohoo/skill-family-contracts">ifoohoo/skill-family-contracts</a></td>
|
|
1797
1797
|
</tr>
|
|
1798
1798
|
<tr>
|
|
1799
1799
|
<td><code>skill-family-harness-node</code></td>
|
|
1800
|
-
<td>0.
|
|
1800
|
+
<td>0.4.0</td>
|
|
1801
1801
|
<td><a href="https://github.com/ifoohoo/skill-family-harness-node">ifoohoo/skill-family-harness-node</a></td>
|
|
1802
1802
|
</tr>
|
|
1803
1803
|
<tr>
|
|
1804
1804
|
<td><code>skill-family-engineering-kit</code></td>
|
|
1805
|
-
<td>0.
|
|
1805
|
+
<td>0.4.0</td>
|
|
1806
1806
|
<td><a href="https://github.com/ifoohoo/skill-family-engineering-kit">ifoohoo/skill-family-engineering-kit</a></td>
|
|
1807
1807
|
</tr>
|
|
1808
1808
|
</tbody>
|
|
@@ -972,6 +972,146 @@
|
|
|
972
972
|
</ul>
|
|
973
973
|
</nav>
|
|
974
974
|
|
|
975
|
+
</li>
|
|
976
|
+
|
|
977
|
+
<li class="md-nav__item">
|
|
978
|
+
<a href="#基线物化-foundationharnessbaseline-materialization" class="md-nav__link">
|
|
979
|
+
<span class="md-ellipsis">
|
|
980
|
+
|
|
981
|
+
基线物化 (foundation.harness.baseline-materialization)
|
|
982
|
+
|
|
983
|
+
</span>
|
|
984
|
+
</a>
|
|
985
|
+
|
|
986
|
+
<nav class="md-nav" aria-label="基线物化 (foundation.harness.baseline-materialization)">
|
|
987
|
+
<ul class="md-nav__list">
|
|
988
|
+
|
|
989
|
+
<li class="md-nav__item">
|
|
990
|
+
<a href="#computeDirectoryDigest--materializeBaseline" class="md-nav__link">
|
|
991
|
+
<span class="md-ellipsis">
|
|
992
|
+
|
|
993
|
+
computeDirectoryDigest / materializeBaseline
|
|
994
|
+
|
|
995
|
+
</span>
|
|
996
|
+
</a>
|
|
997
|
+
|
|
998
|
+
</li>
|
|
999
|
+
|
|
1000
|
+
</ul>
|
|
1001
|
+
</nav>
|
|
1002
|
+
|
|
1003
|
+
</li>
|
|
1004
|
+
|
|
1005
|
+
<li class="md-nav__item">
|
|
1006
|
+
<a href="#只读-chokepoint-foundationharnessread-chokepoint" class="md-nav__link">
|
|
1007
|
+
<span class="md-ellipsis">
|
|
1008
|
+
|
|
1009
|
+
只读 chokepoint (foundation.harness.read-chokepoint)
|
|
1010
|
+
|
|
1011
|
+
</span>
|
|
1012
|
+
</a>
|
|
1013
|
+
|
|
1014
|
+
<nav class="md-nav" aria-label="只读 chokepoint (foundation.harness.read-chokepoint)">
|
|
1015
|
+
<ul class="md-nav__list">
|
|
1016
|
+
|
|
1017
|
+
<li class="md-nav__item">
|
|
1018
|
+
<a href="#createReadChokepoint" class="md-nav__link">
|
|
1019
|
+
<span class="md-ellipsis">
|
|
1020
|
+
|
|
1021
|
+
createReadChokepoint
|
|
1022
|
+
|
|
1023
|
+
</span>
|
|
1024
|
+
</a>
|
|
1025
|
+
|
|
1026
|
+
</li>
|
|
1027
|
+
|
|
1028
|
+
</ul>
|
|
1029
|
+
</nav>
|
|
1030
|
+
|
|
1031
|
+
</li>
|
|
1032
|
+
|
|
1033
|
+
<li class="md-nav__item">
|
|
1034
|
+
<a href="#策略化表面扫描-foundationharnesssurface-scan" class="md-nav__link">
|
|
1035
|
+
<span class="md-ellipsis">
|
|
1036
|
+
|
|
1037
|
+
策略化表面扫描 (foundation.harness.surface-scan)
|
|
1038
|
+
|
|
1039
|
+
</span>
|
|
1040
|
+
</a>
|
|
1041
|
+
|
|
1042
|
+
<nav class="md-nav" aria-label="策略化表面扫描 (foundation.harness.surface-scan)">
|
|
1043
|
+
<ul class="md-nav__list">
|
|
1044
|
+
|
|
1045
|
+
<li class="md-nav__item">
|
|
1046
|
+
<a href="#scanSurface" class="md-nav__link">
|
|
1047
|
+
<span class="md-ellipsis">
|
|
1048
|
+
|
|
1049
|
+
scanSurface
|
|
1050
|
+
|
|
1051
|
+
</span>
|
|
1052
|
+
</a>
|
|
1053
|
+
|
|
1054
|
+
</li>
|
|
1055
|
+
|
|
1056
|
+
</ul>
|
|
1057
|
+
</nav>
|
|
1058
|
+
|
|
1059
|
+
</li>
|
|
1060
|
+
|
|
1061
|
+
<li class="md-nav__item">
|
|
1062
|
+
<a href="#token-上界估算-foundationharnesstoken-estimation" class="md-nav__link">
|
|
1063
|
+
<span class="md-ellipsis">
|
|
1064
|
+
|
|
1065
|
+
token 上界估算 (foundation.harness.token-estimation)
|
|
1066
|
+
|
|
1067
|
+
</span>
|
|
1068
|
+
</a>
|
|
1069
|
+
|
|
1070
|
+
<nav class="md-nav" aria-label="token 上界估算 (foundation.harness.token-estimation)">
|
|
1071
|
+
<ul class="md-nav__list">
|
|
1072
|
+
|
|
1073
|
+
<li class="md-nav__item">
|
|
1074
|
+
<a href="#estimateTokenUpperBound" class="md-nav__link">
|
|
1075
|
+
<span class="md-ellipsis">
|
|
1076
|
+
|
|
1077
|
+
estimateTokenUpperBound
|
|
1078
|
+
|
|
1079
|
+
</span>
|
|
1080
|
+
</a>
|
|
1081
|
+
|
|
1082
|
+
</li>
|
|
1083
|
+
|
|
1084
|
+
</ul>
|
|
1085
|
+
</nav>
|
|
1086
|
+
|
|
1087
|
+
</li>
|
|
1088
|
+
|
|
1089
|
+
<li class="md-nav__item">
|
|
1090
|
+
<a href="#通用上限守卫-foundationharnessupper-bound-guard" class="md-nav__link">
|
|
1091
|
+
<span class="md-ellipsis">
|
|
1092
|
+
|
|
1093
|
+
通用上限守卫 (foundation.harness.upper-bound-guard)
|
|
1094
|
+
|
|
1095
|
+
</span>
|
|
1096
|
+
</a>
|
|
1097
|
+
|
|
1098
|
+
<nav class="md-nav" aria-label="通用上限守卫 (foundation.harness.upper-bound-guard)">
|
|
1099
|
+
<ul class="md-nav__list">
|
|
1100
|
+
|
|
1101
|
+
<li class="md-nav__item">
|
|
1102
|
+
<a href="#openUsageGuard--appendUsageEvent--readUsage--closeUsageGuard" class="md-nav__link">
|
|
1103
|
+
<span class="md-ellipsis">
|
|
1104
|
+
|
|
1105
|
+
openUsageGuard / appendUsageEvent / readUsage / closeUsageGuard
|
|
1106
|
+
|
|
1107
|
+
</span>
|
|
1108
|
+
</a>
|
|
1109
|
+
|
|
1110
|
+
</li>
|
|
1111
|
+
|
|
1112
|
+
</ul>
|
|
1113
|
+
</nav>
|
|
1114
|
+
|
|
975
1115
|
</li>
|
|
976
1116
|
|
|
977
1117
|
<li class="md-nav__item">
|
|
@@ -2253,6 +2393,146 @@
|
|
|
2253
2393
|
</ul>
|
|
2254
2394
|
</nav>
|
|
2255
2395
|
|
|
2396
|
+
</li>
|
|
2397
|
+
|
|
2398
|
+
<li class="md-nav__item">
|
|
2399
|
+
<a href="#基线物化-foundationharnessbaseline-materialization" class="md-nav__link">
|
|
2400
|
+
<span class="md-ellipsis">
|
|
2401
|
+
|
|
2402
|
+
基线物化 (foundation.harness.baseline-materialization)
|
|
2403
|
+
|
|
2404
|
+
</span>
|
|
2405
|
+
</a>
|
|
2406
|
+
|
|
2407
|
+
<nav class="md-nav" aria-label="基线物化 (foundation.harness.baseline-materialization)">
|
|
2408
|
+
<ul class="md-nav__list">
|
|
2409
|
+
|
|
2410
|
+
<li class="md-nav__item">
|
|
2411
|
+
<a href="#computeDirectoryDigest--materializeBaseline" class="md-nav__link">
|
|
2412
|
+
<span class="md-ellipsis">
|
|
2413
|
+
|
|
2414
|
+
computeDirectoryDigest / materializeBaseline
|
|
2415
|
+
|
|
2416
|
+
</span>
|
|
2417
|
+
</a>
|
|
2418
|
+
|
|
2419
|
+
</li>
|
|
2420
|
+
|
|
2421
|
+
</ul>
|
|
2422
|
+
</nav>
|
|
2423
|
+
|
|
2424
|
+
</li>
|
|
2425
|
+
|
|
2426
|
+
<li class="md-nav__item">
|
|
2427
|
+
<a href="#只读-chokepoint-foundationharnessread-chokepoint" class="md-nav__link">
|
|
2428
|
+
<span class="md-ellipsis">
|
|
2429
|
+
|
|
2430
|
+
只读 chokepoint (foundation.harness.read-chokepoint)
|
|
2431
|
+
|
|
2432
|
+
</span>
|
|
2433
|
+
</a>
|
|
2434
|
+
|
|
2435
|
+
<nav class="md-nav" aria-label="只读 chokepoint (foundation.harness.read-chokepoint)">
|
|
2436
|
+
<ul class="md-nav__list">
|
|
2437
|
+
|
|
2438
|
+
<li class="md-nav__item">
|
|
2439
|
+
<a href="#createReadChokepoint" class="md-nav__link">
|
|
2440
|
+
<span class="md-ellipsis">
|
|
2441
|
+
|
|
2442
|
+
createReadChokepoint
|
|
2443
|
+
|
|
2444
|
+
</span>
|
|
2445
|
+
</a>
|
|
2446
|
+
|
|
2447
|
+
</li>
|
|
2448
|
+
|
|
2449
|
+
</ul>
|
|
2450
|
+
</nav>
|
|
2451
|
+
|
|
2452
|
+
</li>
|
|
2453
|
+
|
|
2454
|
+
<li class="md-nav__item">
|
|
2455
|
+
<a href="#策略化表面扫描-foundationharnesssurface-scan" class="md-nav__link">
|
|
2456
|
+
<span class="md-ellipsis">
|
|
2457
|
+
|
|
2458
|
+
策略化表面扫描 (foundation.harness.surface-scan)
|
|
2459
|
+
|
|
2460
|
+
</span>
|
|
2461
|
+
</a>
|
|
2462
|
+
|
|
2463
|
+
<nav class="md-nav" aria-label="策略化表面扫描 (foundation.harness.surface-scan)">
|
|
2464
|
+
<ul class="md-nav__list">
|
|
2465
|
+
|
|
2466
|
+
<li class="md-nav__item">
|
|
2467
|
+
<a href="#scanSurface" class="md-nav__link">
|
|
2468
|
+
<span class="md-ellipsis">
|
|
2469
|
+
|
|
2470
|
+
scanSurface
|
|
2471
|
+
|
|
2472
|
+
</span>
|
|
2473
|
+
</a>
|
|
2474
|
+
|
|
2475
|
+
</li>
|
|
2476
|
+
|
|
2477
|
+
</ul>
|
|
2478
|
+
</nav>
|
|
2479
|
+
|
|
2480
|
+
</li>
|
|
2481
|
+
|
|
2482
|
+
<li class="md-nav__item">
|
|
2483
|
+
<a href="#token-上界估算-foundationharnesstoken-estimation" class="md-nav__link">
|
|
2484
|
+
<span class="md-ellipsis">
|
|
2485
|
+
|
|
2486
|
+
token 上界估算 (foundation.harness.token-estimation)
|
|
2487
|
+
|
|
2488
|
+
</span>
|
|
2489
|
+
</a>
|
|
2490
|
+
|
|
2491
|
+
<nav class="md-nav" aria-label="token 上界估算 (foundation.harness.token-estimation)">
|
|
2492
|
+
<ul class="md-nav__list">
|
|
2493
|
+
|
|
2494
|
+
<li class="md-nav__item">
|
|
2495
|
+
<a href="#estimateTokenUpperBound" class="md-nav__link">
|
|
2496
|
+
<span class="md-ellipsis">
|
|
2497
|
+
|
|
2498
|
+
estimateTokenUpperBound
|
|
2499
|
+
|
|
2500
|
+
</span>
|
|
2501
|
+
</a>
|
|
2502
|
+
|
|
2503
|
+
</li>
|
|
2504
|
+
|
|
2505
|
+
</ul>
|
|
2506
|
+
</nav>
|
|
2507
|
+
|
|
2508
|
+
</li>
|
|
2509
|
+
|
|
2510
|
+
<li class="md-nav__item">
|
|
2511
|
+
<a href="#通用上限守卫-foundationharnessupper-bound-guard" class="md-nav__link">
|
|
2512
|
+
<span class="md-ellipsis">
|
|
2513
|
+
|
|
2514
|
+
通用上限守卫 (foundation.harness.upper-bound-guard)
|
|
2515
|
+
|
|
2516
|
+
</span>
|
|
2517
|
+
</a>
|
|
2518
|
+
|
|
2519
|
+
<nav class="md-nav" aria-label="通用上限守卫 (foundation.harness.upper-bound-guard)">
|
|
2520
|
+
<ul class="md-nav__list">
|
|
2521
|
+
|
|
2522
|
+
<li class="md-nav__item">
|
|
2523
|
+
<a href="#openUsageGuard--appendUsageEvent--readUsage--closeUsageGuard" class="md-nav__link">
|
|
2524
|
+
<span class="md-ellipsis">
|
|
2525
|
+
|
|
2526
|
+
openUsageGuard / appendUsageEvent / readUsage / closeUsageGuard
|
|
2527
|
+
|
|
2528
|
+
</span>
|
|
2529
|
+
</a>
|
|
2530
|
+
|
|
2531
|
+
</li>
|
|
2532
|
+
|
|
2533
|
+
</ul>
|
|
2534
|
+
</nav>
|
|
2535
|
+
|
|
2256
2536
|
</li>
|
|
2257
2537
|
|
|
2258
2538
|
<li class="md-nav__item">
|
|
@@ -2296,7 +2576,7 @@
|
|
|
2296
2576
|
|
|
2297
2577
|
<h1 id="skill-family-harness-node-公共-API-参考">skill-family-harness-node 公共 API 参考<a class="headerlink" href="#skill-family-harness-node-公共-API-参考" title="Permanent link">¶</a></h1>
|
|
2298
2578
|
<p>本页从真实导出(<code>src/index.mjs</code> 与各源模块)核对,不手写无法证明新鲜度的全集。每个公共入口按 hand-off §4.3 说明:签名、输入与输出、是否纯函数、文件/进程/Git/网络副作用、稳定错误码与 <code>details.kind</code>、前置条件与信任锚、<code>since</code> 与 <code>stability</code>、源文件与正例/负例测试、调用方仍拥有的业务语义。</p>
|
|
2299
|
-
<p>Harness 是薄运行时:消费 Contracts,只实现业务中立机制;不拥有业务语义、编排、Git、网络与第二语言。包级常量:<code>HARNESS_CAPABILITIES</code>(
|
|
2579
|
+
<p>Harness 是薄运行时:消费 Contracts,只实现业务中立机制;不拥有业务语义、编排、Git、网络与第二语言。包级常量:<code>HARNESS_CAPABILITIES</code>(16 项能力,闭集)、<code>HARNESS_EXCLUSIONS</code>(明确排除 <code>business-semantics</code> / <code>workflow-orchestration</code> / <code>git-writes</code> / <code>model-calls</code> / <code>release-state</code> / <code>remote-network-access</code>)。</p>
|
|
2300
2580
|
<p>能力分组(与 <code>docs/agents/capability-catalog.json</code> 对应):</p>
|
|
2301
2581
|
<ul>
|
|
2302
2582
|
<li><a href="#契约校验-foundationharnesscontract-validation">契约校验</a> → <code>validateContractDocument</code> / <code>getValidator</code></li>
|
|
@@ -2308,6 +2588,11 @@
|
|
|
2308
2588
|
<li><a href="#报告-foundationharnessreport">报告</a> → <code>validateReportModel</code> / <code>renderReportMarkdown</code> / <code>buildBinding</code> / <code>verifyBinding</code> / <code>checkReport</code></li>
|
|
2309
2589
|
<li><a href="#宿主适配机制-foundationharnesshost-adapter">宿主适配机制</a> → <code>normalizeAdapterSource</code> / <code>buildAdapterClosure</code> / <code>materializeAdapterBuild</code> / <code>probeVersionVector</code></li>
|
|
2310
2590
|
<li><a href="#持久状态底座-foundationharnessstate-store">持久状态底座</a> → <code>openStateStore</code> / <code>appendEvent</code> / <code>readSnapshot</code> / <code>verifyStateStore</code> …</li>
|
|
2591
|
+
<li><a href="#基线物化-foundationharnessbaseline-materialization">基线物化</a> → <code>computeDirectoryDigest</code> / <code>materializeBaseline</code>(FND-ADR-009)</li>
|
|
2592
|
+
<li><a href="#只读-chokepoint-foundationharnessread-chokepoint">只读 chokepoint</a> → <code>createReadChokepoint</code>(FND-ADR-009)</li>
|
|
2593
|
+
<li><a href="#策略化表面扫描-foundationharnesssurface-scan">策略化表面扫描</a> → <code>scanSurface</code>(FND-ADR-009)</li>
|
|
2594
|
+
<li><a href="#token-上界估算-foundationharnesstoken-estimation">token 上界估算</a> → <code>estimateTokenUpperBound</code>(FND-ADR-009)</li>
|
|
2595
|
+
<li><a href="#通用上限守卫-foundationharnessupper-bound-guard">通用上限守卫</a> → <code>openUsageGuard</code> / <code>appendUsageEvent</code> / <code>readUsage</code> / <code>closeUsageGuard</code>(FND-ADR-009)</li>
|
|
2311
2596
|
<li><a href="#机制错误-foundationharnesserrors">机制错误</a> → <code>HarnessError</code> / <code>mechanismError</code> / <code>HARNESS_ERROR_KINDS</code></li>
|
|
2312
2597
|
</ul>
|
|
2313
2598
|
<hr />
|
|
@@ -2563,9 +2848,119 @@
|
|
|
2563
2848
|
<td><code>host-contract-invalid</code> / <code>host-build-failed</code> / <code>host-probe-failed</code> / <code>untrusted-executable</code> / <code>portable-path-collision</code> / <code>manifest-mismatch</code></td>
|
|
2564
2849
|
<td>宿主适配异常</td>
|
|
2565
2850
|
</tr>
|
|
2851
|
+
<tr>
|
|
2852
|
+
<td><code>baseline-mismatch</code> / <code>content-guard-rejected</code></td>
|
|
2853
|
+
<td>基线物化失败关闭</td>
|
|
2854
|
+
</tr>
|
|
2855
|
+
<tr>
|
|
2856
|
+
<td><code>read-chokepoint-rejected</code></td>
|
|
2857
|
+
<td>只读准入拒绝</td>
|
|
2858
|
+
</tr>
|
|
2859
|
+
<tr>
|
|
2860
|
+
<td><code>surface-scan-violation</code> / <code>scan-policy-invalid</code></td>
|
|
2861
|
+
<td>表面扫描失败关闭</td>
|
|
2862
|
+
</tr>
|
|
2863
|
+
<tr>
|
|
2864
|
+
<td><code>upper-bound-exceeded</code></td>
|
|
2865
|
+
<td>上限守卫越限</td>
|
|
2866
|
+
</tr>
|
|
2566
2867
|
</tbody>
|
|
2567
2868
|
</table>
|
|
2568
2869
|
<hr />
|
|
2870
|
+
<h2 id="基线物化-foundationharnessbaseline-materialization">基线物化 (foundation.harness.baseline-materialization)<a class="headerlink" href="#基线物化-foundationharnessbaseline-materialization" title="Permanent link">¶</a></h2>
|
|
2871
|
+
<p>FND-ADR-009。把冻结基线物化为字节保真的临时副本:物化前校验源摘要、物化后同时校验副本摘要与源摘要(捕获物化中途的任一侧变化);副本内符号链接一律拒绝。</p>
|
|
2872
|
+
<h3 id="computeDirectoryDigest--materializeBaseline">computeDirectoryDigest / materializeBaseline<a class="headerlink" href="#computeDirectoryDigest--materializeBaseline" title="Permanent link">¶</a></h3>
|
|
2873
|
+
<ul>
|
|
2874
|
+
<li>签名:</li>
|
|
2875
|
+
<li><code>computeDirectoryDigest(rootDir)</code>(async,返回 64 位小写 sha256 十六进制摘要)</li>
|
|
2876
|
+
<li><code>materializeBaseline({ baselineDir, baselineDigest, prefix = "sf-baseline-" } = {})</code>(async,返回物化根路径)</li>
|
|
2877
|
+
<li>输入:基线目录与冻结摘要。</li>
|
|
2878
|
+
<li>输出:确定性目录摘要;物化后的临时目录根路径。</li>
|
|
2879
|
+
<li>纯函数:否(读源树、在系统临时目录创建副本)。</li>
|
|
2880
|
+
<li>副作用:只读源基线;写系统临时目录并在失败时清理。</li>
|
|
2881
|
+
<li>稳定错误码与 <code>details.kind</code>:摘要不符(物化前或物化后)抛 <code>SFC2004</code> + <code>baseline-mismatch</code>(details 含 <code>phase</code>:<code>pre-materialization</code> / <code>post-materialization</code>);目录不可用抛 <code>invalid-root</code>;建目录失败抛 <code>workspace-create-failed</code>。</li>
|
|
2882
|
+
<li>前置条件与信任锚:调用方持有冻结摘要;同一权限级进程可在物化窗口内改动源,机制以双端摘要捕获并失败关闭,不承诺抵御同权限恶意进程。</li>
|
|
2883
|
+
<li><code>since</code> / <code>stability</code>:<code>0.3.0</code> / <code>stable</code>。</li>
|
|
2884
|
+
<li>源文件:<code>packages/skill-family-harness-node/src/baseline.mjs</code>。</li>
|
|
2885
|
+
<li>正例/负例测试:<code>packages/skill-family-harness-node/test/baseline.test.mjs</code>。</li>
|
|
2886
|
+
<li>调用方仍拥有的业务语义:残留内容判定(<code>contentGuard</code> 谓词)与副本最终去处。</li>
|
|
2887
|
+
</ul>
|
|
2888
|
+
<p><code>TemporaryWorkspace.fromBaseline({ baselineDir, baselineDigest, prefix, contentGuard })</code> 与 <code>createTemporaryWorkspace({ baseline: { ... } })</code> 把物化接入工作区生命周期:<code>contentGuard</code> 缺省为允许(字节保真是机制契约,残留判定归消费者);守卫抛错包装为 <code>content-guard-rejected</code> 并 dispose 副本。</p>
|
|
2889
|
+
<hr />
|
|
2890
|
+
<h2 id="只读-chokepoint-foundationharnessread-chokepoint">只读 chokepoint (foundation.harness.read-chokepoint)<a class="headerlink" href="#只读-chokepoint-foundationharnessread-chokepoint" title="Permanent link">¶</a></h2>
|
|
2891
|
+
<p>FND-ADR-009。把受保护区域的读取集中到一个准入入口:允许根集合 + 可选身份谓词;越界、链接逃逸与非授权身份一律 <code>read-chokepoint-rejected</code>。</p>
|
|
2892
|
+
<h3 id="createReadChokepoint">createReadChokepoint<a class="headerlink" href="#createReadChokepoint" title="Permanent link">¶</a></h3>
|
|
2893
|
+
<ul>
|
|
2894
|
+
<li>签名:<code>createReadChokepoint({ allowRoots, allowIdentity } = {})</code> → <code>{ assertReadAllowed, read }</code></li>
|
|
2895
|
+
<li>输入:非空允许根集合;可选身份谓词 <code>(identity) => boolean</code>。</li>
|
|
2896
|
+
<li>输出:准入后的 <code>{ root, relPath, absolute }</code> 或受收容读取结果。</li>
|
|
2897
|
+
<li>纯函数:否(<code>async</code>,含只读文件系统访问)。</li>
|
|
2898
|
+
<li>副作用:只读 realpath / 收容读取;不写。</li>
|
|
2899
|
+
<li>稳定错误码与 <code>details.kind</code>:越界/逃逸/非授权抛 <code>SFC2004</code> + <code>read-chokepoint-rejected</code>;资源缺失抛 <code>missing-resource</code>;参数非法抛 <code>TypeError</code>。</li>
|
|
2900
|
+
<li>前置条件与信任锚:调用方声明允许根集合与身份规则;机制不解释任何私有身份或路径语义。</li>
|
|
2901
|
+
<li><code>since</code> / <code>stability</code>:<code>0.3.0</code> / <code>stable</code>。</li>
|
|
2902
|
+
<li>源文件:<code>packages/skill-family-harness-node/src/chokepoint.mjs</code>。</li>
|
|
2903
|
+
<li>正例/负例测试:<code>packages/skill-family-harness-node/test/chokepoint.test.mjs</code>。</li>
|
|
2904
|
+
<li>调用方仍拥有的业务语义:允许根集合、身份谓词、准入后读取语义。</li>
|
|
2905
|
+
</ul>
|
|
2906
|
+
<p>字符串输入与 <code>{ root, relPath }</code> 输入走同一 <code>resolveContained</code> 收容分类(含 macOS <code>/var → /private/var</code> 等符号链接前缀根的统一规范化)。</p>
|
|
2907
|
+
<hr />
|
|
2908
|
+
<h2 id="策略化表面扫描-foundationharnesssurface-scan">策略化表面扫描 (foundation.harness.surface-scan)<a class="headerlink" href="#策略化表面扫描-foundationharnesssurface-scan" title="Permanent link">¶</a></h2>
|
|
2909
|
+
<p>FND-ADR-009。按 <code>surface-scan-policy</code> 契约文档对声明表面做路径与内容模式扫描:首个命中即失败关闭;策略非法或模式不可编译同样失败关闭;缺失扫描文件不静默跳过。</p>
|
|
2910
|
+
<h3 id="scanSurface">scanSurface<a class="headerlink" href="#scanSurface" title="Permanent link">¶</a></h3>
|
|
2911
|
+
<ul>
|
|
2912
|
+
<li>签名:<code>scanSurface({ root, relPaths, policy, encoding = "utf8" } = {})</code>(async)</li>
|
|
2913
|
+
<li>输入:扫描根、相对路径清单、策略契约文档。</li>
|
|
2914
|
+
<li>输出:<code>{ scanned, bytes, policy }</code>(冻结对象)。</li>
|
|
2915
|
+
<li>纯函数:否(只读文件系统访问;进程内正则编译,无持久状态)。</li>
|
|
2916
|
+
<li>副作用:只读;不写。</li>
|
|
2917
|
+
<li>稳定错误码与 <code>details.kind</code>:命中抛 <code>SFC2004</code> + <code>surface-scan-violation</code>(details 含 <code>kindOfHit</code>:<code>path</code> / <code>content</code>);策略非法或模式不可编译抛 <code>scan-policy-invalid</code>;缺失文件抛 <code>missing-resource</code>;参数非法抛 <code>TypeError</code>。</li>
|
|
2918
|
+
<li>前置条件与信任锚:策略文档通过契约校验;<code>allowedUses</code> 只携带不解释,命中不被豁免(豁免由消费者层实现)。</li>
|
|
2919
|
+
<li><code>since</code> / <code>stability</code>:<code>0.3.0</code> / <code>stable</code>。</li>
|
|
2920
|
+
<li>源文件:<code>packages/skill-family-harness-node/src/surface-scan.mjs</code>。</li>
|
|
2921
|
+
<li>正例/负例测试:<code>packages/skill-family-harness-node/test/surface-scan.test.mjs</code>。</li>
|
|
2922
|
+
<li>调用方仍拥有的业务语义:策略内容、允许用途语义与命中后的处置。</li>
|
|
2923
|
+
</ul>
|
|
2924
|
+
<p>注入式自测约定:扫描器无状态——注入模式并扫描后移除注入,再次扫描结果字节一致(自测见测试文件,不冒充独立复核)。</p>
|
|
2925
|
+
<hr />
|
|
2926
|
+
<h2 id="token-上界估算-foundationharnesstoken-estimation">token 上界估算 (foundation.harness.token-estimation)<a class="headerlink" href="#token-上界估算-foundationharnesstoken-estimation" title="Permanent link">¶</a></h2>
|
|
2927
|
+
<p>FND-ADR-009。确定性领域估算原语:UTF-8 字节数纯函数,无模型、无网络、无 tokenizer 依赖、无持久状态导入;结果符合 <code>token-estimate-result</code> 契约(无时间戳,<code>guarantees</code> 为封闭枚举)。</p>
|
|
2928
|
+
<h3 id="estimateTokenUpperBound">estimateTokenUpperBound<a class="headerlink" href="#estimateTokenUpperBound" title="Permanent link">¶</a></h3>
|
|
2929
|
+
<ul>
|
|
2930
|
+
<li>签名:<code>estimateTokenUpperBound(text)</code>(纯函数)</li>
|
|
2931
|
+
<li>输入:文本字符串。</li>
|
|
2932
|
+
<li>输出:<code>token-estimate-result</code> 对象(<code>upperBound === inputBytes</code>)。</li>
|
|
2933
|
+
<li>纯函数:是;零依赖。</li>
|
|
2934
|
+
<li>副作用:无。</li>
|
|
2935
|
+
<li>稳定错误码与 <code>details.kind</code>:非字符串输入抛 <code>TypeError</code>(无 SFC 码)。</li>
|
|
2936
|
+
<li>前置条件与信任锚:输入为 JavaScript 字符串;估算只承诺上界(字节数即上界),不承诺真实 token 计数。</li>
|
|
2937
|
+
<li><code>since</code> / <code>stability</code>:<code>0.3.0</code> / <code>stable</code>。</li>
|
|
2938
|
+
<li>源文件:<code>packages/skill-family-harness-node/src/token-estimate.mjs</code>。</li>
|
|
2939
|
+
<li>正例/负例测试:<code>packages/skill-family-harness-node/test/token-estimate.test.mjs</code>。</li>
|
|
2940
|
+
<li>调用方仍拥有的业务语义:估算结果的解释与消费侧换算(模型调用与真实 token 计数不在 Foundation)。</li>
|
|
2941
|
+
</ul>
|
|
2942
|
+
<hr />
|
|
2943
|
+
<h2 id="通用上限守卫-foundationharnessupper-bound-guard">通用上限守卫 (foundation.harness.upper-bound-guard)<a class="headerlink" href="#通用上限守卫-foundationharnessupper-bound-guard" title="Permanent link">¶</a></h2>
|
|
2944
|
+
<p>FND-ADR-009。复用 state-store 事件账与 token-lock 显式占用实现通用上限守卫:越限事件失败关闭且不写入;上限值、单位类别与超限策略全部由消费者配置,模块不携带任何固定数额或定价词汇。</p>
|
|
2945
|
+
<h3 id="openUsageGuard--appendUsageEvent--readUsage--closeUsageGuard">openUsageGuard / appendUsageEvent / readUsage / closeUsageGuard<a class="headerlink" href="#openUsageGuard--appendUsageEvent--readUsage--closeUsageGuard" title="Permanent link">¶</a></h3>
|
|
2946
|
+
<ul>
|
|
2947
|
+
<li>签名:</li>
|
|
2948
|
+
<li><code>openUsageGuard({ stateRoot, owner, payloadSchemas, reducer, initial = 0, upperBound, lockRoot, lockPath, clock } = {})</code>(async)</li>
|
|
2949
|
+
<li><code>appendUsageEvent(guard, event, { beforeCommit } = {})</code>(async)</li>
|
|
2950
|
+
<li><code>readUsage(guard)</code>(async)</li>
|
|
2951
|
+
<li><code>closeUsageGuard(guard)</code>(async)</li>
|
|
2952
|
+
<li>输入:事件负载、纯归约函数、非负上限、状态根与锁根/锁路径。</li>
|
|
2953
|
+
<li>输出:追加结果、当前用量读数、守卫句柄。</li>
|
|
2954
|
+
<li>纯函数:否(写事件账与锁文件)。</li>
|
|
2955
|
+
<li>副作用:在受收容路径写事件账与锁文件;打开时显式占用锁、关闭时释放。</li>
|
|
2956
|
+
<li>稳定错误码与 <code>details.kind</code>:越限抛 <code>SFC2004</code> + <code>upper-bound-exceeded</code>(details 含 <code>upperBound</code> / <code>projected</code>,事件不写入);锁被占用抛 <code>store-locked</code>;事件账断链抛 <code>chain-broken</code>;事件 schema 违规抛 <code>event-schema-invalid</code>。</li>
|
|
2957
|
+
<li>前置条件与信任锚:<code>lockRoot</code>/<code>lockPath</code> 由消费者指定在 state store 根之外;事件账是唯一权威;fencing 不承诺抵御同权限恶意进程。</li>
|
|
2958
|
+
<li><code>since</code> / <code>stability</code>:<code>0.3.0</code> / <code>stable</code>。</li>
|
|
2959
|
+
<li>源文件:<code>packages/skill-family-harness-node/src/budget-guard.mjs</code>。</li>
|
|
2960
|
+
<li>正例/负例测试:<code>packages/skill-family-harness-node/test/budget-guard.test.mjs</code>。</li>
|
|
2961
|
+
<li>调用方仍拥有的业务语义:事件含义、归约函数、上限数值与超限后的业务处置(定价与计费语义留在消费者)。</li>
|
|
2962
|
+
</ul>
|
|
2963
|
+
<hr />
|
|
2569
2964
|
<h2 id="Quickstart-Profile-v2-candidate">Quickstart Profile v2 candidate<a class="headerlink" href="#Quickstart-Profile-v2-candidate" title="Permanent link">¶</a></h2>
|
|
2570
2965
|
<p><code>skill-family-harness-node/candidate/quickstart-profile</code> 负责创建 observation Resource、Task 与终态 Result,并复验真实文件字节、Resource id 全局唯一性、Task digest、operation 身份、逐字段 <code>run/stage/attempt</code> 以及 evidence 精确回指。<code>verifyQuickstartExchange</code> 把机制拒绝转换成结构化结果,抛出式入口继续使用已登记的 <code>SFC2004</code> 与稳定 <code>details.kind</code>。</p>
|
|
2571
2966
|
<p>该入口不选择 method,不解释 domainResult,也不拥有重试、调度或生命周期。0.3.0 的 v2 与 0.2.1 的 v1 不兼容;接入必须精确锁定所选版本。</p>
|