@antprofuse/saddle-skill 0.2.0 → 0.3.0-alpha.2

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.
@@ -1,12 +0,0 @@
1
- #![forbid(unsafe_code)]
2
-
3
- #[path = "generated_artifact.rs"]
4
- mod __saddle_generated;
5
-
6
- saddle::application! {
7
- schema "saddle-application/1";
8
- application GeneratedProbe;
9
- }
10
-
11
- // The marker is the only public business handle. Its generated `run`
12
- // implementation lives in the private module and consumes the private owner.
@@ -1,20 +0,0 @@
1
- use saddle::{ApprovedExternalBundle, SaddleConfig};
2
- use saddle_skill_registry_consumer_template::GeneratedProbe;
3
-
4
- fn external_control_plane_call<B: ApprovedExternalBundle>(
5
- bundle: B,
6
- config: SaddleConfig,
7
- ) -> saddle::Result<()> {
8
- GeneratedProbe::run(bundle, config)
9
- }
10
-
11
- #[test]
12
- fn provider_generic_consumer_is_public_to_an_external_crate() {
13
- fn typechecks<B: ApprovedExternalBundle>() {
14
- let _: fn(B, SaddleConfig) -> saddle::Result<()> = external_control_plane_call::<B>;
15
- }
16
- assert!(
17
- true,
18
- "the generic function body is type-checked without forging a provider"
19
- );
20
- }
package/package-files.txt DELETED
@@ -1,25 +0,0 @@
1
- SKILL.md
2
- agents/openai.yaml
3
- assets/registry-consumer/Cargo.lock
4
- assets/registry-consumer/Cargo.toml
5
- assets/registry-consumer/src/generated_artifact.rs
6
- assets/registry-consumer/src/lib.rs
7
- assets/registry-consumer/tests/provider_consumer.rs
8
- package-files.txt
9
- package-manifest.json
10
- package.json
11
- references/api-boundary.md
12
- references/declaration-schema.md
13
- references/identity-closure.json
14
- references/machine-schema.md
15
- references/migration.md
16
- references/public-api.snapshot
17
- scripts/parameterized-capacity-facts.py
18
- scripts/validate-contract.sh
19
- scripts/validate-generated-project.sh
20
- scripts/validate-generated-preflight.sh
21
- scripts/validate-identity-closure.py
22
- scripts/validate-managed-objects-peak.py
23
- scripts/validate-machine-input.sh
24
- scripts/validation-cache-key.py
25
- scripts/sync-identity-closure.py
@@ -1,112 +0,0 @@
1
- {
2
- "manifest_version": 2,
3
- "status": "immutable-candidate-unpublished",
4
- "release_approval": false,
5
- "publish": false,
6
- "npm": {
7
- "name": "@antprofuse/saddle-skill",
8
- "version": "0.2.0"
9
- },
10
- "rust": {
11
- "facade": "saddle-framework",
12
- "requirement": "=0.2.0",
13
- "source_commit": "96cd4ec8da55b0770c5d3e8275c74e65241a4759",
14
- "msrv": "1.85.0",
15
- "abi_frozen": false,
16
- "compatibility": "source-and-public-api",
17
- "skill_mapping": "exact-manifest-identity-not-version-number-equality",
18
- "public_api_snapshot": "references/public-api.snapshot",
19
- "public_api_snapshot_sha256": "da87e0b63c3fdf511daac30581cbf415f49541df2034d1e7bc713a9833179a51"
20
- },
21
- "skill": {
22
- "name": "saddle-service-0-2",
23
- "declaration_schema": "saddle-application/1",
24
- "machine_schema": "saddle-approved-build/2",
25
- "generated_static_schema": "saddle-generated-static-facts/2"
26
- },
27
- "installation": {
28
- "kind": "npm-tgz",
29
- "command": "npm install --ignore-scripts --no-audit --no-fund <exact-tgz>",
30
- "skill_root": "node_modules/@antprofuse/saddle-skill",
31
- "entry": "SKILL.md",
32
- "lifecycle_scripts": false
33
- },
34
- "gate_identity": {
35
- "d1_source_candidate": "c5ce82687390e9865527540b41fa664b4c0b7bad",
36
- "gate_entry_sha256": "6459a15fd83378f78bdabc80f37fe80caee20db1c3f527f18b923172af76d85e",
37
- "production_fact_contract_sha256": "8ab24a226322085677ce1aa3241a1fff07365fc9e90d3506bf21e886c3c0d63e",
38
- "canonical_machine_input_sha256": "f7e73baa824f607a83a275e20681da46e4eab6f250fba8129bf959a1b7f263e6",
39
- "semantic_fact_whole_sha256": "a3ccc16cd94daec6c3bd4b93d7f8095b4eef68d3e9dbb686c8942c341acda5b2"
40
- },
41
- "consumer_evidence": {
42
- "unified_application": "assets/registry-consumer/src/lib.rs",
43
- "unified_owner": "assets/registry-consumer/src/generated_artifact.rs",
44
- "unified_application_sha256": "a85bf6a5665f3516fafddbe2b3c9460dadb7e341ce0336a79c4ecca4a4fd55d9",
45
- "unified_owner_sha256": "af15a8dab10c1ac35d1c7bcbf2174d80c056e8200bd8b7f6fe2ceb60c1f9e0ea",
46
- "approved_locks": {
47
- "registry_consumer": "8896ba07b7a868b6914fa4cf5e85358e0c201bd717083c1822d0456d547a87ed"
48
- },
49
- "registry_consumer_template": {
50
- "cargo_lock": "8896ba07b7a868b6914fa4cf5e85358e0c201bd717083c1822d0456d547a87ed",
51
- "cargo_manifest": "561cef428037910a846ff06936b1c71a7d41d386fd8341abb0e5e979a2ea83d1",
52
- "library": "a85bf6a5665f3516fafddbe2b3c9460dadb7e341ce0336a79c4ecca4a4fd55d9",
53
- "generated_owner": "af15a8dab10c1ac35d1c7bcbf2174d80c056e8200bd8b7f6fe2ceb60c1f9e0ea",
54
- "external_consumer_test": "18cb018e87a251255457861058537fc1b07b0226c002d170de4e2c5512f2ae45",
55
- "output_validator": "d20d3ecf89e81c0797340bd6779e8e58265e4cfe4c38b7519e78a9064a817415",
56
- "preflight_validator": "925c0205387dd458cd60e029179f978aa72dcc1eb3bcde6b32ad4756363b81e4",
57
- "cache_key_builder": "7b464d2bfd6444f03c9ebc6bc58c49e03904223dc1a55bee8bfba8dabf56e90b"
58
- }
59
- },
60
- "generated_static_facts": {
61
- "route_count": 6,
62
- "query_routes": 3,
63
- "c1_routes": 3,
64
- "fingerprint_toolchain": "rustc-1.85.0",
65
- "application_machine_fingerprint": "NOT_GENERATED_SK_02",
66
- "template_identity_sha256": "04f64225450bd190706464f806d8ce6604a70774b112311908ece3f448eeb261",
67
- "service_capacity": "whole-bundle-facade-owned",
68
- "termination": "component-opaque",
69
- "continuation": "component-opaque",
70
- "http": "route-framing-db-work-static-layout-only",
71
- "runtime_profile": "paired-startup-plan-verified-layout-private",
72
- "forbidden_generated_fields": [
73
- "capacity_intent",
74
- "capacity_domain",
75
- "internal_deadline_ms",
76
- "task_storage_bytes",
77
- "raw_deployment_calibration"
78
- ]
79
- },
80
- "deployment_time_inputs": [
81
- "signed production bundle",
82
- "deployment calibration and service attestations",
83
- "production trust root, clock, nonce store and listener authority"
84
- ],
85
- "release_stop": "Immutable candidate only; compatibility combination, reference generation, independent acceptance and publish authorization remain separate tasks",
86
- "build_internal": [
87
- "generated module and symbol names",
88
- "service ordinals",
89
- "registry/proof/token/permit/adapter types",
90
- "anonymous Future and Rust type layouts",
91
- "machine fingerprint value"
92
- ],
93
- "identity_closure": {
94
- "path": "references/identity-closure.json",
95
- "sha256": "620df144ab00eee84a5826bf4f53ae2f1f04b564c97f499ec9dd9a0e78b0aaea",
96
- "registry_artifact_source_commit": "96cd4ec8da55b0770c5d3e8275c74e65241a4759",
97
- "rust_candidate_manifest_sha256": "2b0af0e6dd396b32fcbefb4236565136319c0d33c69effc1852913acb5290b17",
98
- "registry_packages_sha256": {
99
- "saddle-admission": "86c6a3787d1612faa49558f5a104ba78415ff604344112c150b6b69446937065",
100
- "saddle-core": "bf4e1cd2343cc239a0bb8288fe0947e73775d9cb3438b85ee1c15026a6369aa0",
101
- "saddle-db": "e3cac62b288d0e7cf775138793e2d8afb8923b4bbb4d72afb2deb8c18d9b7030",
102
- "saddle-framework": "6f819954a32f042aa43a55c1fddb8e1a8c6de389f5f3b6cd006bba532a1aca0b",
103
- "saddle-macros": "e46b63cda97e643f41a86ac817306081b88c1af186c635e9451946b51c59dbeb",
104
- "saddle-observability": "5e6f5d2228e8a02dd6bf65cbbd2e982129696976a104c4caf773c12016e1ecd3",
105
- "saddle-runtime": "0c8925b3871f95f58cde8cf7de6938116d4fbb35000ea31699c7603d658deee2",
106
- "saddle-service": "6d148466da57be9be7b2e4df9dcd68f0a253a418db247438ad0be1e886c8ff1b"
107
- },
108
- "framework_crate_sha256": "6f819954a32f042aa43a55c1fddb8e1a8c6de389f5f3b6cd006bba532a1aca0b",
109
- "fresh_registry_cargo_lock_sha256": "542bb990a3e176f3cc987b34df23061c6fdaac321d3433aaa08cf5f47151631a",
110
- "registry_consumer_cargo_lock_sha256": "8896ba07b7a868b6914fa4cf5e85358e0c201bd717083c1822d0456d547a87ed"
111
- }
112
- }
@@ -1,71 +0,0 @@
1
- # 公开 API 与 build-internal 边界
2
-
3
- ## 稳定源码/API 候选
4
-
5
- `saddle-framework 0.2.x` 对业务只承诺:
6
-
7
- - `saddle::application!` 及 `saddle-application/1` 声明;
8
- - `saddle::managed::{U64, Bool, Pair, Optional, WriteResult}`;
9
- - 声明中列出的 DB operation kind;
10
- - handler 的 DB-kind-specific async 源码签名和稳定错误分类;
11
- - startup 诊断的稳定 code,不承诺完整英文/中文文本;
12
- - 同一 `0.2.x` 支持范围内的源码级 SemVer 兼容。
13
-
14
- 公开 facade 不暴露 builder、registry、ordinal、proof、token、permit、dispatcher、
15
- adapter、Runtime 或 DB connection owner。generator 可以消费这些 sealed handoff,
16
- 业务代码不能命名、构造、Clone、提取或重放。
17
-
18
- ## 不承诺 Rust ABI
19
-
20
- Saddle 0.2 不承诺跨 compiler、target、profile 或 patch build 的 Rust 二进制 ABI。
21
- 以下只属于正式 build identity,并且只在组件内部签发和消费:
22
-
23
- - `repr(Rust)` layout、enum discriminant、alignment;
24
- - 匿名 Future、handler/dispatcher Future 和 task storage size;
25
- - 私有 generated symbol、module 和 ordinal;
26
- - proof/token/permit/adapter 的具体 Rust 类型;
27
- - capacity、termination 与 fingerprint 的具体数值。
28
-
29
- 正式 build 必须重新测量这些值并写入 machine fingerprint。API snapshot 只覆盖公开
30
- 路径、签名、trait/宏语法和稳定诊断 code。
31
-
32
- ## facade handoff
33
-
34
- 宏只生成一个私有 owner。owner 线性消费 facade 签发的 token,并在一次 startup
35
- assembly 中冻结 registry、routes、call graph、DB operations、dispatcher 与 classified
36
- adapter。Service 同次 freeze 的整包直接进入 Facade;generated crate 不声明 proof
37
- associated type、不实现 proof/continuation trait,也不能拆出 capacity leaf。业务入口只能
38
- 把生成 owner 交给 facade,不能取得中间 capability。
39
-
40
- 生成的 application marker 公开且只公开以下 consuming 入口(marker 名可变,签名
41
- 语义不可变):
42
-
43
- ```rust
44
- pub fn run<B>(bundle: B, config: saddle::SaddleConfig) -> saddle::Result<()>
45
- where
46
- B: saddle::ApprovedExternalBundle;
47
- ```
48
-
49
- 函数实现位于私有 generated module,必须直接执行
50
- `saddle::ProductionLauncher::verify(bundle)?.run(config, GeneratedOwner)`。`GeneratedOwner`
51
- 为 private、non-Clone 且仅移动一次。bundle 与 config 由 Test/部署控制面提供;Skill 不生成
52
- provider、credential、calibration 或 raw owner constructor。
53
-
54
- Facade source `96cd4ec8da55b0770c5d3e8275c74e65241a4759` 已真实导出本候选宏和
55
- managed API,并物理收口 V1 路径。该 source checkpoint 仍不等于已发布的
56
- `saddle-framework 0.2.0`;正式使用必须按 package manifest 精确匹配该候选制品。
57
- 旧 rc.3/rc.4 与外部 proof associated types 不兼容,禁止回退或混用。
58
-
59
- ## 稳定诊断 code 候选
60
-
61
- 完整诊断文本可改善,不进入 SemVer。以下 code 在 schema major 1 内稳定:
62
-
63
- - `skill.schema.unsupported`
64
- - `skill.declaration.duplicate`
65
- - `skill.route.duplicate`
66
- - `skill.operation.unknown`
67
- - `skill.operation.dynamic_sql`
68
- - `skill.transaction.unsupported_shape`
69
- - `skill.call.unknown`
70
- - `skill.public_api.unavailable`
71
- - `skill.identity.mismatch`
@@ -1,115 +0,0 @@
1
- # `saddle-application/1` 声明语法
2
-
3
- 只允许一个顶层声明:
4
-
5
- ```rust
6
- saddle::application! {
7
- schema "saddle-application/1";
8
- application UserOrder;
9
-
10
- service LookupUser {
11
- route post "/users/lookup";
12
- request managed_u64;
13
- response managed_pair<managed_u64, managed_bool>;
14
- handler lookup_user;
15
- db query_optional FindUser;
16
- }
17
-
18
- service LinkUserToOrder {
19
- route post "/users/link-order";
20
- request managed_pair<managed_u64, managed_u64>;
21
- response managed_write_result;
22
- handler link_user_to_order;
23
- db write LinkUserOrder;
24
- }
25
-
26
- service TransferOrderOwnerCommit {
27
- route post "/orders/transfer-owner/commit";
28
- request managed_pair<managed_u64, managed_u64>;
29
- response managed_write_result;
30
- handler transfer_order_owner;
31
- db transaction TransferOrderOwner decision commit;
32
- }
33
-
34
- service TransferOrderOwnerRollback {
35
- route post "/orders/transfer-owner/rollback";
36
- request managed_pair<managed_u64, managed_u64>;
37
- response managed_write_result;
38
- handler transfer_order_owner;
39
- db transaction TransferOrderOwner decision business_rollback;
40
- }
41
-
42
- call CreateOrder -> LookupUser;
43
-
44
- query_optional FindUser {
45
- operation "users.find_optional";
46
- sql "SELECT id, active FROM users WHERE id = ?";
47
- parameters managed_u64;
48
- row managed_pair<managed_u64, managed_bool>;
49
- }
50
-
51
- write LinkUserOrder {
52
- operation "user.link_order";
53
- sql "UPDATE users SET order_id = ? WHERE id = ?";
54
- parameters managed_pair<managed_u64, managed_u64>;
55
- }
56
-
57
- transaction TransferOrderOwner {
58
- operation "order.transfer_owner";
59
- sql "UPDATE orders SET user_id = ? WHERE id = ?";
60
- parameters managed_pair<managed_u64, managed_u64>;
61
- steps 1;
62
- }
63
- }
64
- ```
65
-
66
- ## 稳定语法
67
-
68
- schema 1 稳定以下 token:
69
-
70
- - `application`、`service`、`route post`、`request`、`response`、`handler`;
71
- - `call A -> B`;
72
- - `query_optional`、`write`、`transaction`;
73
- - `operation`、静态 `sql`、`parameters`、`row`、`steps 1`;
74
- - `decision commit|business_rollback`;
75
- - `managed_u64`、`managed_bool`、`managed_pair`、`managed_write_result`。
76
-
77
- 顺序、空白和注释不影响语义。名称必须是 Rust identifier;route、operation 和 SQL
78
- 必须是字符串字面量。一个 service 只绑定一个 DB operation 或显式 no-DB。
79
-
80
- schema 1 不支持动态 method/route/SQL、运行期 operation graph、多 step/嵌套事务、
81
- savepoint、用户容量或期限字段。新增必填 token 或改变既有 token 语义必须升级
82
- declaration schema major。
83
-
84
- ## Handler 源码签名
85
-
86
- 声明 token 映射到 facade 稳定路径:
87
-
88
- - `managed_u64` → `saddle::managed::U64`;
89
- - `managed_bool` → `saddle::managed::Bool`;
90
- - `managed_pair<A, B>` → `saddle::managed::Pair<A, B>`;
91
- - `managed_write_result` → `saddle::managed::WriteResult`;
92
- - query optional row → `saddle::managed::Optional<Row>`。
93
-
94
- handler 必须是普通 `async fn`,不允许手写返回 Future 类型:
95
-
96
- ```rust
97
- // no-DB
98
- async fn health(request: Request) -> saddle::Result<Response>;
99
-
100
- // query_optional
101
- async fn lookup_user(
102
- request: Request,
103
- row: saddle::managed::Optional<Row>,
104
- ) -> saddle::Result<Response>;
105
-
106
- // standalone write 或 transaction commit
107
- async fn write_response(
108
- request: Request,
109
- result: saddle::managed::WriteResult,
110
- ) -> saddle::Result<Response>;
111
- ```
112
-
113
- `decision business_rollback` 由 Database typed result 映射为 classified 业务错误,
114
- 不调用成功 handler。handler 不能接收 context、proof、permit、connection、builder、
115
- Runtime handle 或裸 bytes owner。
@@ -1,49 +0,0 @@
1
- {
2
- "schema": "saddle-skill-identity-closure/2",
3
- "skill_release": "0.2.0",
4
- "rust_release": "0.2.0",
5
- "artifact_source_commit": "96cd4ec8da55b0770c5d3e8275c74e65241a4759",
6
- "registry_artifact_source_commit": "96cd4ec8da55b0770c5d3e8275c74e65241a4759",
7
- "rust_candidate_manifest_sha256": "2b0af0e6dd396b32fcbefb4236565136319c0d33c69effc1852913acb5290b17",
8
- "registry_packages_sha256": {
9
- "saddle-admission": "86c6a3787d1612faa49558f5a104ba78415ff604344112c150b6b69446937065",
10
- "saddle-core": "bf4e1cd2343cc239a0bb8288fe0947e73775d9cb3438b85ee1c15026a6369aa0",
11
- "saddle-db": "e3cac62b288d0e7cf775138793e2d8afb8923b4bbb4d72afb2deb8c18d9b7030",
12
- "saddle-framework": "6f819954a32f042aa43a55c1fddb8e1a8c6de389f5f3b6cd006bba532a1aca0b",
13
- "saddle-macros": "e46b63cda97e643f41a86ac817306081b88c1af186c635e9451946b51c59dbeb",
14
- "saddle-observability": "5e6f5d2228e8a02dd6bf65cbbd2e982129696976a104c4caf773c12016e1ecd3",
15
- "saddle-runtime": "0c8925b3871f95f58cde8cf7de6938116d4fbb35000ea31699c7603d658deee2",
16
- "saddle-service": "6d148466da57be9be7b2e4df9dcd68f0a253a418db247438ad0be1e886c8ff1b"
17
- },
18
- "framework_crate_sha256": "6f819954a32f042aa43a55c1fddb8e1a8c6de389f5f3b6cd006bba532a1aca0b",
19
- "fresh_registry_cargo_lock_sha256": "542bb990a3e176f3cc987b34df23061c6fdaac321d3433aaa08cf5f47151631a",
20
- "registry_consumer_cargo_lock_sha256": "8896ba07b7a868b6914fa4cf5e85358e0c201bd717083c1822d0456d547a87ed",
21
- "declaration_schema": "saddle-application/1",
22
- "machine_schema": "saddle-approved-build/2",
23
- "generated_static_schema": "saddle-generated-static-facts/2",
24
- "gate_identity": {
25
- "d1_source_candidate": "c5ce82687390e9865527540b41fa664b4c0b7bad",
26
- "gate_entry_sha256": "6459a15fd83378f78bdabc80f37fe80caee20db1c3f527f18b923172af76d85e",
27
- "production_fact_contract_sha256": "8ab24a226322085677ce1aa3241a1fff07365fc9e90d3506bf21e886c3c0d63e",
28
- "canonical_machine_input_sha256": "f7e73baa824f607a83a275e20681da46e4eab6f250fba8129bf959a1b7f263e6",
29
- "semantic_fact_whole_sha256": "a3ccc16cd94daec6c3bd4b93d7f8095b4eef68d3e9dbb686c8942c341acda5b2"
30
- },
31
- "public_api_snapshot_sha256": "da87e0b63c3fdf511daac30581cbf415f49541df2034d1e7bc713a9833179a51",
32
- "machine_schema_document_sha256": "353ee7fbf4dc8219595c44a1871f699952d0f2b116ed5ec615242c3f5521285d",
33
- "approved_locks": {
34
- "registry_consumer": "8896ba07b7a868b6914fa4cf5e85358e0c201bd717083c1822d0456d547a87ed"
35
- },
36
- "unified_application_sha256": "a85bf6a5665f3516fafddbe2b3c9460dadb7e341ce0336a79c4ecca4a4fd55d9",
37
- "unified_owner_sha256": "af15a8dab10c1ac35d1c7bcbf2174d80c056e8200bd8b7f6fe2ceb60c1f9e0ea",
38
- "template_identity_sha256": "04f64225450bd190706464f806d8ce6604a70774b112311908ece3f448eeb261",
39
- "registry_consumer_template": {
40
- "cargo_lock": "8896ba07b7a868b6914fa4cf5e85358e0c201bd717083c1822d0456d547a87ed",
41
- "cargo_manifest": "561cef428037910a846ff06936b1c71a7d41d386fd8341abb0e5e979a2ea83d1",
42
- "library": "a85bf6a5665f3516fafddbe2b3c9460dadb7e341ce0336a79c4ecca4a4fd55d9",
43
- "generated_owner": "af15a8dab10c1ac35d1c7bcbf2174d80c056e8200bd8b7f6fe2ceb60c1f9e0ea",
44
- "external_consumer_test": "18cb018e87a251255457861058537fc1b07b0226c002d170de4e2c5512f2ae45",
45
- "output_validator": "d20d3ecf89e81c0797340bd6779e8e58265e4cfe4c38b7519e78a9064a817415",
46
- "preflight_validator": "925c0205387dd458cd60e029179f978aa72dcc1eb3bcde6b32ad4756363b81e4",
47
- "cache_key_builder": "7b464d2bfd6444f03c9ebc6bc58c49e03904223dc1a55bee8bfba8dabf56e90b"
48
- }
49
- }
@@ -1,47 +0,0 @@
1
- # Machine schema 版本策略
2
-
3
- ## 两个独立 schema
4
-
5
- - declaration:`saddle-application/1`,面向用户源码与 Skill;
6
- - machine:`saddle-approved-build/2`,面向 generator、Gate 与 release identity。
7
-
8
- 二者独立升级。声明不变但增加新的 build identity 字段时,只升级 machine schema。
9
-
10
- ## 兼容规则
11
-
12
- - schema ID 使用 `<name>/<major>`;major 改变表示不兼容。
13
- - 同一 major 内只允许新增可选字段;删除、重命名、改变类型或语义必须升 major。
14
- - 正式 Gate 对当前 release 的 canonical field set 拒绝未知、重复和缺失字段。
15
- - reader 可以显式支持多个 schema major,但不得猜测、fallback 或忽略未知字段。
16
- - Skill package manifest 固定支持的 declaration/machine major。
17
- - Rust facade minor、Skill npm minor 与 schema major 的支持矩阵必须进入 release
18
- manifest;不要求三个版本号机械相等。
19
-
20
- 每个正式 Skill package 必须记录一个精确 Rust facade 版本、源码 commit 与公开 API
21
- snapshot digest。Skill patch 若只修正文档,可以继续映射同一个 Rust patch;若公开
22
- API snapshot 改变,必须发布新的 Skill package 并重新生成兼容矩阵。禁止仅比较
23
- `0.2` 前缀后自动接受。
24
-
25
- ## fingerprint
26
-
27
- canonical machine document 使用 UTF-8、LF、按 schema 规定顺序的
28
- `key=value`,字符串不做环境展开。fingerprint 覆盖:
29
-
30
- - declaration digest、generator digest、Rust package/source identity;
31
- - compiler、target、profile、features、Cargo.lock;
32
- - 公开 API snapshot digest;
33
- - build-internal layout、proof、route/call graph 与 Gate results;
34
- - generated static facts 与 opaque Runtime profile 来源(具体部署值不得进入 generated input)。
35
-
36
- fingerprint 值不是公共 API,也不跨 build 稳定。任何输入变化都必须重签并重跑受
37
- 影响的独立证据。
38
-
39
- generated static facts 使用 `saddle-generated-static-facts/2`:从同一次 Service freeze
40
- 取得 route set 与每 route commitment、managed-object peak、DB credit,再绑定静态
41
- framing/layout、DB/writer/Runtime work identity 和 artifact identity。route 缺失、重复、
42
- 实例 identity 漂移、generation 不同或 checked arithmetic 溢出均失败。
43
-
44
- machine input 不得包含 `T/N/W/DB/E` 容量域、capacity intent、deadline 毫秒、task
45
- bytes 或 planner 派生量。它们由 Gate/Runtime 使用 verified resource envelope 和
46
- calibration 产出 opaque StartupPlan/transport runtime profile;Skill 只记录该事实的
47
- 来源边界,不观察具体值。
@@ -1,24 +0,0 @@
1
- # 0.1 → 0.2 迁移
2
-
3
- 0.2 是显式迁移,不提供生产 fallback。
4
-
5
- | 0.1 源码 | 0.2 候选 |
6
- |---|---|
7
- | `ServiceHandler` / boxed `ServiceFuture` | 声明中的 `service` + async handler 名称 |
8
- | serde request/response | `managed_*` 固定 shape |
9
- | `ServiceRegistryBuilder` | generator-owned 唯一 assembly |
10
- | `Statement` / `DbValue` | 静态 `query_optional` / `write` 声明 |
11
- | closure transaction | 单层 `transaction` + `steps 1` + 显式 decision |
12
- | 用户 route/预算数值 | 声明 route;预算由 generator proof 派生 |
13
-
14
- 迁移步骤:
15
-
16
- 1. 保留 0.1 分支和精确 lock,禁止原地静默切换。
17
- 2. 新建 0.2 application declaration;逐个映射 Service、route 和内部调用边。
18
- 3. 把 DB 操作改成静态 operation/SQL/fixed shape。
19
- 4. 把事务收敛为一个 write step,并区分 commit 与 business rollback。
20
- 5. 删除业务直接 registry、Runtime、Web、DB driver、普通容器和 serde 依赖。
21
- 6. 使用正式 0.2 generator 与 Gate;不得用本候选脚本生成生产 artifact。
22
-
23
- 若业务依赖动态 SQL、多 step transaction、普通容器或第三方 I/O,迁移必须 STOP,
24
- 不能回退到 V1 production path。
@@ -1,16 +0,0 @@
1
- format=saddle-public-api-snapshot/1
2
- facade=saddle-framework
3
- source_commit=96cd4ec8da55b0770c5d3e8275c74e65241a4759
4
- declaration_schema=saddle-application/1
5
- macro=saddle::application!
6
- managed_type=saddle::managed::U64
7
- managed_type=saddle::managed::Bool
8
- managed_type=saddle::managed::Pair
9
- managed_type=saddle::managed::Optional
10
- managed_type=saddle::managed::WriteResult
11
- startup_config=saddle::SaddleConfig::new
12
- generated_application_entry=pub fn <Application>::run<B: saddle::ApprovedExternalBundle>(bundle:B,config:saddle::SaddleConfig)->saddle::Result<()>
13
- generated_application_body=saddle::ProductionLauncher::verify(bundle)?.run(config,private_generated_owner)
14
- diagnostic=skill.schema.unsupported
15
- compatibility=source-and-public-api
16
- rust_abi_frozen=false