@sema-agent/settings-schema 6.3.0 → 7.0.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.
Files changed (103) hide show
  1. package/CHANGELOG.md +207 -0
  2. package/README.md +40 -5
  3. package/bin/settings-schema.mjs +22 -0
  4. package/conformance/VERSION +1 -1
  5. package/conformance/cases/c48-s935-model-headers-transported/expected.json +115 -0
  6. package/conformance/cases/c48-s935-model-headers-transported/input.json +37 -0
  7. package/conformance/cases/c48-s935-model-headers-transported/meta.json +6 -0
  8. package/conformance/cases/c49-s935-model-headers-secret-entry-dropped/expected.json +98 -0
  9. package/conformance/cases/c49-s935-model-headers-secret-entry-dropped/input.json +28 -0
  10. package/conformance/cases/c49-s935-model-headers-secret-entry-dropped/meta.json +9 -0
  11. package/conformance/cases/c50-s784-lane-host-legal/expected.json +102 -0
  12. package/conformance/cases/c50-s784-lane-host-legal/input.json +29 -0
  13. package/conformance/cases/c50-s784-lane-host-legal/meta.json +5 -0
  14. package/conformance/cases/c51-s784-lane-e2b-legal/expected.json +104 -0
  15. package/conformance/cases/c51-s784-lane-e2b-legal/input.json +32 -0
  16. package/conformance/cases/c51-s784-lane-e2b-legal/meta.json +5 -0
  17. package/conformance/cases/c52-s784-lane-k8s-legal/expected.json +106 -0
  18. package/conformance/cases/c52-s784-lane-k8s-legal/input.json +34 -0
  19. package/conformance/cases/c52-s784-lane-k8s-legal/meta.json +5 -0
  20. package/conformance/cases/c53-s784-lane-ssh-legal/expected.json +106 -0
  21. package/conformance/cases/c53-s784-lane-ssh-legal/input.json +34 -0
  22. package/conformance/cases/c53-s784-lane-ssh-legal/meta.json +5 -0
  23. package/conformance/cases/c54-s784-lane-adb-legal/expected.json +102 -0
  24. package/conformance/cases/c54-s784-lane-adb-legal/input.json +29 -0
  25. package/conformance/cases/c54-s784-lane-adb-legal/meta.json +5 -0
  26. package/conformance/cases/c55-s784-lane-local-docker-legal/expected.json +103 -0
  27. package/conformance/cases/c55-s784-lane-local-docker-legal/input.json +30 -0
  28. package/conformance/cases/c55-s784-lane-local-docker-legal/meta.json +5 -0
  29. package/conformance/cases/c56-s784-lane-device-legal/expected.json +109 -0
  30. package/conformance/cases/c56-s784-lane-device-legal/input.json +36 -0
  31. package/conformance/cases/c56-s784-lane-device-legal/meta.json +5 -0
  32. package/conformance/cases/c57-s784-g1-enabled-no-lane/expected.json +83 -0
  33. package/conformance/cases/c57-s784-g1-enabled-no-lane/input.json +23 -0
  34. package/conformance/cases/c57-s784-g1-enabled-no-lane/meta.json +5 -0
  35. package/conformance/cases/c58-s784-g2-multitenant-host/expected.json +83 -0
  36. package/conformance/cases/c58-s784-g2-multitenant-host/input.json +34 -0
  37. package/conformance/cases/c58-s784-g2-multitenant-host/meta.json +5 -0
  38. package/conformance/cases/c59-s784-g3-k8s-missing-image/expected.json +83 -0
  39. package/conformance/cases/c59-s784-g3-k8s-missing-image/input.json +26 -0
  40. package/conformance/cases/c59-s784-g3-k8s-missing-image/meta.json +5 -0
  41. package/conformance/cases/c60-s784-g3-e2b-missing-key/expected.json +83 -0
  42. package/conformance/cases/c60-s784-g3-e2b-missing-key/input.json +26 -0
  43. package/conformance/cases/c60-s784-g3-e2b-missing-key/meta.json +5 -0
  44. package/conformance/cases/c61-s784-g3-other-lane-key/expected.json +83 -0
  45. package/conformance/cases/c61-s784-g3-other-lane-key/input.json +30 -0
  46. package/conformance/cases/c61-s784-g3-other-lane-key/meta.json +5 -0
  47. package/conformance/cases/c62-s784-g7a-session-tidb/expected.json +83 -0
  48. package/conformance/cases/c62-s784-g7a-session-tidb/input.json +27 -0
  49. package/conformance/cases/c62-s784-g7a-session-tidb/meta.json +5 -0
  50. package/conformance/cases/c63-s784-host-two-replicas/expected.json +83 -0
  51. package/conformance/cases/c63-s784-host-two-replicas/input.json +27 -0
  52. package/conformance/cases/c63-s784-host-two-replicas/meta.json +5 -0
  53. package/conformance/cases/c64-s784-multitenant-local-store/expected.json +83 -0
  54. package/conformance/cases/c64-s784-multitenant-local-store/input.json +30 -0
  55. package/conformance/cases/c64-s784-multitenant-local-store/meta.json +5 -0
  56. package/conformance/cases/c65-s784-pg-without-db/expected.json +83 -0
  57. package/conformance/cases/c65-s784-pg-without-db/input.json +27 -0
  58. package/conformance/cases/c65-s784-pg-without-db/meta.json +5 -0
  59. package/conformance/cases/c66-s784-memory-backend-mismatch/expected.json +83 -0
  60. package/conformance/cases/c66-s784-memory-backend-mismatch/input.json +36 -0
  61. package/conformance/cases/c66-s784-memory-backend-mismatch/meta.json +5 -0
  62. package/conformance/cases/c67-s784-retired-field-loud/expected.json +83 -0
  63. package/conformance/cases/c67-s784-retired-field-loud/input.json +22 -0
  64. package/conformance/cases/c67-s784-retired-field-loud/meta.json +5 -0
  65. package/conformance/cases/c68-s784-device-local-store/expected.json +83 -0
  66. package/conformance/cases/c68-s784-device-local-store/input.json +26 -0
  67. package/conformance/cases/c68-s784-device-local-store/meta.json +5 -0
  68. package/conformance/cases/cli04-env-value-with-newline/expected.json +13 -2
  69. package/conformance/cases/cli04-env-value-with-newline/input.json +8 -1
  70. package/conformance/cases/cli04-env-value-with-newline/meta.json +1 -1
  71. package/conformance/migrate-workers/m01-g5-k8s-env-lifted/expected.json +49 -0
  72. package/conformance/migrate-workers/m01-g5-k8s-env-lifted/input.json +26 -0
  73. package/conformance/migrate-workers/m01-g5-k8s-env-lifted/meta.json +4 -0
  74. package/conformance/migrate-workers/m02-g5-idempotent/expected.json +38 -0
  75. package/conformance/migrate-workers/m02-g5-idempotent/input.json +33 -0
  76. package/conformance/migrate-workers/m02-g5-idempotent/meta.json +5 -0
  77. package/conformance/migrate-workers/m03-g5-refused-no-lane/expected.json +71 -0
  78. package/conformance/migrate-workers/m03-g5-refused-no-lane/input.json +42 -0
  79. package/conformance/migrate-workers/m03-g5-refused-no-lane/meta.json +4 -0
  80. package/conformance/migrate-workers/m04-g7b-session-tidb-lifted/expected.json +52 -0
  81. package/conformance/migrate-workers/m04-g7b-session-tidb-lifted/input.json +30 -0
  82. package/conformance/migrate-workers/m04-g7b-session-tidb-lifted/meta.json +4 -0
  83. package/dist/cli.d.ts +8 -0
  84. package/dist/cli.js +70 -0
  85. package/dist/execution-lane-index.d.ts +19 -0
  86. package/dist/execution-lane-index.js +23 -0
  87. package/dist/execution-lanes.d.ts +64 -0
  88. package/dist/execution-lanes.js +152 -0
  89. package/dist/file-edit.js +26 -21
  90. package/dist/hash.d.ts +3 -3
  91. package/dist/hash.js +3 -3
  92. package/dist/hooks.d.ts +12 -12
  93. package/dist/index.d.ts +2 -0
  94. package/dist/index.js +2 -0
  95. package/dist/migrate-workers.d.ts +63 -0
  96. package/dist/migrate-workers.js +331 -0
  97. package/dist/remote-exec.d.ts +23 -64
  98. package/dist/remote-exec.js +20 -71
  99. package/dist/secret-refs.d.ts +7 -1
  100. package/dist/secret-refs.js +9 -3
  101. package/dist/types.d.ts +1382 -430
  102. package/dist/types.js +298 -76
  103. package/package.json +9 -1
@@ -0,0 +1,27 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-10-03T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "workers": {
8
+ "workers": [
9
+ {
10
+ "name": "w",
11
+ "secretRefs": {
12
+ "apiKeyEnv": "MODEL_KEY",
13
+ "dbPasswordEnv": "HOST_DB_PW"
14
+ },
15
+ "runtime": {
16
+ "execution": {
17
+ "lane": "host"
18
+ },
19
+ "store": {
20
+ "backend": "pg"
21
+ }
22
+ }
23
+ }
24
+ ]
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "store.backend pg 缺 runtime.store.db ⇒ 拒:SQL 坐标 ⇔ SQL 店。打 WA-50「PG 部署无坐标可写」的另一面 —— 声明了 pg 却没坐标。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "rejected",
4
+ "stage": "validate",
5
+ "why": "7.0.0 写闸(WorkerSpec)拒 —— workers 是 gate 域,一只坏 worker 整域拒,不逐条容错"
6
+ },
7
+ "wire": {
8
+ "outcome": "rejected",
9
+ "stage": "validate",
10
+ "why": "wire 腿把同一份文档交给同一个 buildEffective,拒绝层相同"
11
+ },
12
+ "localRoot": {
13
+ "outcome": "effective",
14
+ "effective": {
15
+ "collab": {
16
+ "templates": []
17
+ },
18
+ "entitlement": {
19
+ "budgetGroups": [],
20
+ "groupBindings": [],
21
+ "subjects": [],
22
+ "tiers": []
23
+ },
24
+ "execution": {
25
+ "allowedLanes": [
26
+ "host"
27
+ ],
28
+ "required": false
29
+ },
30
+ "governance": {},
31
+ "hosts": {
32
+ "hosts": []
33
+ },
34
+ "limits": {},
35
+ "mcp": {
36
+ "servers": []
37
+ },
38
+ "models": {
39
+ "models": [],
40
+ "roles": {},
41
+ "tierGroups": []
42
+ },
43
+ "plugins": {
44
+ "plugins": []
45
+ },
46
+ "projects": {
47
+ "projects": {}
48
+ },
49
+ "prompts": {
50
+ "bindings": []
51
+ },
52
+ "rosters": {
53
+ "rosters": []
54
+ },
55
+ "runtime": {},
56
+ "scenarios": {
57
+ "scenarios": []
58
+ },
59
+ "skills": {
60
+ "skills": []
61
+ },
62
+ "systems": {
63
+ "systems": []
64
+ },
65
+ "workers": {
66
+ "workers": []
67
+ }
68
+ },
69
+ "warnings": [
70
+ {
71
+ "domain": "workers",
72
+ "file": "workers.json",
73
+ "kind": "unread-config-file",
74
+ "why": "non-portable-domain"
75
+ }
76
+ ],
77
+ "metadata": {
78
+ "version": 2617555914511015,
79
+ "updatedAt": "1970-01-01T00:00:00.000Z"
80
+ },
81
+ "why": "workers 是非便携域:本机腿不读 config.d/workers.json(只报 unread-config-file),写闸判据只在 domains / wire 两腿上可观察"
82
+ }
83
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-10-03T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "workers": {
8
+ "workers": [
9
+ {
10
+ "name": "w",
11
+ "secretRefs": {
12
+ "apiKeyEnv": "MODEL_KEY",
13
+ "dbPasswordEnv": "HOST_DB_PW"
14
+ },
15
+ "runtime": {
16
+ "execution": {
17
+ "lane": "host"
18
+ },
19
+ "store": {
20
+ "backend": "mysql",
21
+ "db": {
22
+ "host": "db.internal",
23
+ "port": 3306,
24
+ "user": "svc",
25
+ "database": "sema"
26
+ },
27
+ "memory": {
28
+ "backend": "pg"
29
+ }
30
+ }
31
+ }
32
+ }
33
+ ]
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "store.memory.backend pg 而 store.backend mysql ⇒ 拒(pg 记忆面要 pg 店;tidb 要 mysql)。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "rejected",
4
+ "stage": "validate",
5
+ "why": "7.0.0 写闸(WorkerSpec)拒 —— workers 是 gate 域,一只坏 worker 整域拒,不逐条容错"
6
+ },
7
+ "wire": {
8
+ "outcome": "rejected",
9
+ "stage": "validate",
10
+ "why": "wire 腿把同一份文档交给同一个 buildEffective,拒绝层相同"
11
+ },
12
+ "localRoot": {
13
+ "outcome": "effective",
14
+ "effective": {
15
+ "collab": {
16
+ "templates": []
17
+ },
18
+ "entitlement": {
19
+ "budgetGroups": [],
20
+ "groupBindings": [],
21
+ "subjects": [],
22
+ "tiers": []
23
+ },
24
+ "execution": {
25
+ "allowedLanes": [
26
+ "host"
27
+ ],
28
+ "required": false
29
+ },
30
+ "governance": {},
31
+ "hosts": {
32
+ "hosts": []
33
+ },
34
+ "limits": {},
35
+ "mcp": {
36
+ "servers": []
37
+ },
38
+ "models": {
39
+ "models": [],
40
+ "roles": {},
41
+ "tierGroups": []
42
+ },
43
+ "plugins": {
44
+ "plugins": []
45
+ },
46
+ "projects": {
47
+ "projects": {}
48
+ },
49
+ "prompts": {
50
+ "bindings": []
51
+ },
52
+ "rosters": {
53
+ "rosters": []
54
+ },
55
+ "runtime": {},
56
+ "scenarios": {
57
+ "scenarios": []
58
+ },
59
+ "skills": {
60
+ "skills": []
61
+ },
62
+ "systems": {
63
+ "systems": []
64
+ },
65
+ "workers": {
66
+ "workers": []
67
+ }
68
+ },
69
+ "warnings": [
70
+ {
71
+ "domain": "workers",
72
+ "file": "workers.json",
73
+ "kind": "unread-config-file",
74
+ "why": "non-portable-domain"
75
+ }
76
+ ],
77
+ "metadata": {
78
+ "version": 2617555914511015,
79
+ "updatedAt": "1970-01-01T00:00:00.000Z"
80
+ },
81
+ "why": "workers 是非便携域:本机腿不读 config.d/workers.json(只报 unread-config-file),写闸判据只在 domains / wire 两腿上可观察"
82
+ }
83
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-10-03T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "workers": {
8
+ "workers": [
9
+ {
10
+ "name": "w",
11
+ "secretRefs": {
12
+ "apiKeyEnv": "MODEL_KEY"
13
+ },
14
+ "runtime": {
15
+ "sessionBackend": "auto"
16
+ },
17
+ "enabled": false
18
+ }
19
+ ]
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "7.0.0 删除项读到即**响亮拒**(runtime.sessionBackend,哪怕是停用的 worker),拒因指路 migrateWorkersDomain / settings-schema migrate-workers —— 不被 zod 静默剥成「什么都没声明」。",
4
+ "firstRedOn": []
5
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "domains": {
3
+ "outcome": "rejected",
4
+ "stage": "validate",
5
+ "why": "7.0.0 写闸(WorkerSpec)拒 —— workers 是 gate 域,一只坏 worker 整域拒,不逐条容错"
6
+ },
7
+ "wire": {
8
+ "outcome": "rejected",
9
+ "stage": "validate",
10
+ "why": "wire 腿把同一份文档交给同一个 buildEffective,拒绝层相同"
11
+ },
12
+ "localRoot": {
13
+ "outcome": "effective",
14
+ "effective": {
15
+ "collab": {
16
+ "templates": []
17
+ },
18
+ "entitlement": {
19
+ "budgetGroups": [],
20
+ "groupBindings": [],
21
+ "subjects": [],
22
+ "tiers": []
23
+ },
24
+ "execution": {
25
+ "allowedLanes": [
26
+ "host"
27
+ ],
28
+ "required": false
29
+ },
30
+ "governance": {},
31
+ "hosts": {
32
+ "hosts": []
33
+ },
34
+ "limits": {},
35
+ "mcp": {
36
+ "servers": []
37
+ },
38
+ "models": {
39
+ "models": [],
40
+ "roles": {},
41
+ "tierGroups": []
42
+ },
43
+ "plugins": {
44
+ "plugins": []
45
+ },
46
+ "projects": {
47
+ "projects": {}
48
+ },
49
+ "prompts": {
50
+ "bindings": []
51
+ },
52
+ "rosters": {
53
+ "rosters": []
54
+ },
55
+ "runtime": {},
56
+ "scenarios": {
57
+ "scenarios": []
58
+ },
59
+ "skills": {
60
+ "skills": []
61
+ },
62
+ "systems": {
63
+ "systems": []
64
+ },
65
+ "workers": {
66
+ "workers": []
67
+ }
68
+ },
69
+ "warnings": [
70
+ {
71
+ "domain": "workers",
72
+ "file": "workers.json",
73
+ "kind": "unread-config-file",
74
+ "why": "non-portable-domain"
75
+ }
76
+ ],
77
+ "metadata": {
78
+ "version": 2617555914511015,
79
+ "updatedAt": "1970-01-01T00:00:00.000Z"
80
+ },
81
+ "why": "workers 是非便携域:本机腿不读 config.d/workers.json(只报 unread-config-file),写闸判据只在 domains / wire 两腿上可观察"
82
+ }
83
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "meta": {
3
+ "version": 7,
4
+ "updatedAt": "2026-10-03T00:00:00.000Z"
5
+ },
6
+ "domains": {
7
+ "workers": {
8
+ "workers": [
9
+ {
10
+ "name": "w",
11
+ "secretRefs": {
12
+ "apiKeyEnv": "MODEL_KEY"
13
+ },
14
+ "runtime": {
15
+ "execution": {
16
+ "lane": "device"
17
+ },
18
+ "store": {
19
+ "backend": "local"
20
+ }
21
+ }
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "device 车道 ∧ 非 SQL 店(local)⇒ 拒:设备注册簿 / session↔设备绑定 / 审计都在 SQL 里,引擎 `device-durable-store` 起服即拒 —— 写闸前置同判,不让「声明得了、起不来」的 device worker 过闸(gpt-6 腿 F2)。",
4
+ "firstRedOn": []
5
+ }
@@ -65,10 +65,21 @@
65
65
  "image": "sema-server:latest",
66
66
  "name": "w1",
67
67
  "runtime": {
68
- "memoryBackend": "off",
68
+ "execution": {
69
+ "coords": {},
70
+ "lane": "host",
71
+ "secretRefs": {}
72
+ },
69
73
  "rateLimitRpm": 0,
70
74
  "requirePrincipal": false,
71
- "sessionBackend": "auto"
75
+ "store": {
76
+ "backend": "local",
77
+ "memory": {
78
+ "backend": "file",
79
+ "engine": "on"
80
+ },
81
+ "session": "auto"
82
+ }
72
83
  },
73
84
  "secretRefs": {
74
85
  "apiKeyEnv": "OPENAI_API_KEY"
@@ -8,7 +8,14 @@
8
8
  "workers": [
9
9
  {
10
10
  "name": "w1",
11
- "runtime": {},
11
+ "runtime": {
12
+ "execution": {
13
+ "lane": "host"
14
+ },
15
+ "store": {
16
+ "backend": "local"
17
+ }
18
+ },
12
19
  "secretRefs": {
13
20
  "apiKeyEnv": "OPENAI_API_KEY"
14
21
  },
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "contributor": "cli",
3
- "claim": "壳视角④:worker 的 env 值里有换行 / 回车 ⇒ 读侧**原样承运**(不折叠、不截断、不静默改写)。壳的 `/config show` 单行渲染会断行,那是显示面的事;读侧一改,配置就与运维写下的不是同一份。注意这一域是非便携域:local-root 腿看不到它,只报 unread-config-file —— 三腿三样,壳要知道自己问的是哪一腿。",
3
+ "claim": "壳视角④:worker 的 env 值里有换行 / 回车 ⇒ 读侧**原样承运**(不折叠、不截断、不静默改写)。壳的 `/config show` 单行渲染会断行,那是显示面的事;读侧一改,配置就与运维写下的不是同一份。注意这一域是非便携域:local-root 腿看不到它,只报 unread-config-file —— 三腿三样,壳要知道自己问的是哪一腿。 (7.0.0:输入的 worker 改成 7.0.0 形 —— 显式声明 `runtime.execution {lane: host}` + `runtime.store {backend: local}`。6.x 原输入是 enabled 且无车道的 `runtime: {}`,正是 WA-49 病例,一次性迁移对它是 refused,迁不出可读形;本条要打的是 env 值的承运,与车道无关,所以按新形写明车道,不是放宽读侧。)",
4
4
  "firstRedOn": []
5
5
  }
@@ -0,0 +1,49 @@
1
+ {
2
+ "doc": {
3
+ "workers": [
4
+ {
5
+ "name": "direct",
6
+ "enabled": true,
7
+ "host": "default",
8
+ "image": "sema-server:latest",
9
+ "secretRefs": {
10
+ "apiKeyEnv": "MODEL_KEY"
11
+ },
12
+ "runtime": {
13
+ "requirePrincipal": false,
14
+ "rateLimitRpm": 0,
15
+ "execution": {
16
+ "lane": "k8s",
17
+ "coords": {
18
+ "K8S_SANDBOX_IMAGE": "registry.internal/sandbox@sha256:abc",
19
+ "K8S_NAMESPACE": "sandboxes"
20
+ },
21
+ "secretRefs": {}
22
+ },
23
+ "store": {
24
+ "backend": "local",
25
+ "session": "auto"
26
+ }
27
+ },
28
+ "coords": {},
29
+ "env": {
30
+ "LOG_LEVEL": "debug"
31
+ }
32
+ }
33
+ ]
34
+ },
35
+ "changed": [
36
+ "direct"
37
+ ],
38
+ "dropped": [
39
+ {
40
+ "name": "direct",
41
+ "index": 0,
42
+ "field": [
43
+ "runtime",
44
+ "memoryBackend"
45
+ ]
46
+ }
47
+ ],
48
+ "refused": []
49
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "workers": [
3
+ {
4
+ "name": "direct",
5
+ "enabled": true,
6
+ "host": "default",
7
+ "image": "sema-server:latest",
8
+ "secretRefs": {
9
+ "apiKeyEnv": "MODEL_KEY"
10
+ },
11
+ "runtime": {
12
+ "sessionBackend": "auto",
13
+ "memoryBackend": "off",
14
+ "requirePrincipal": false,
15
+ "rateLimitRpm": 0
16
+ },
17
+ "coords": {},
18
+ "env": {
19
+ "REMOTE_EXEC": "k8s",
20
+ "K8S_SANDBOX_IMAGE": "registry.internal/sandbox@sha256:abc",
21
+ "K8S_NAMESPACE": "sandboxes",
22
+ "LOG_LEVEL": "debug"
23
+ }
24
+ }
25
+ ]
26
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "G5 正臂:6.x 活舰队形(env.REMOTE_EXEC=k8s + 同车道 K8S_*)⇒ runtime.execution {lane: k8s, coords 搬入},env 里两键消失、非车道键留下;memoryBackend 进 dropped(从未生效);无 SQL 坐标 ⇒ store.backend local。"
4
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "doc": {
3
+ "workers": [
4
+ {
5
+ "name": "direct",
6
+ "enabled": true,
7
+ "host": "default",
8
+ "image": "sema-server:latest",
9
+ "secretRefs": {
10
+ "apiKeyEnv": "MODEL_KEY"
11
+ },
12
+ "runtime": {
13
+ "requirePrincipal": false,
14
+ "rateLimitRpm": 0,
15
+ "execution": {
16
+ "lane": "k8s",
17
+ "coords": {
18
+ "K8S_SANDBOX_IMAGE": "registry.internal/sandbox@sha256:abc",
19
+ "K8S_NAMESPACE": "sandboxes"
20
+ },
21
+ "secretRefs": {}
22
+ },
23
+ "store": {
24
+ "backend": "local",
25
+ "session": "auto"
26
+ }
27
+ },
28
+ "coords": {},
29
+ "env": {
30
+ "LOG_LEVEL": "debug"
31
+ }
32
+ }
33
+ ]
34
+ },
35
+ "changed": [],
36
+ "dropped": [],
37
+ "refused": []
38
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "workers": [
3
+ {
4
+ "name": "direct",
5
+ "enabled": true,
6
+ "host": "default",
7
+ "image": "sema-server:latest",
8
+ "secretRefs": {
9
+ "apiKeyEnv": "MODEL_KEY"
10
+ },
11
+ "runtime": {
12
+ "requirePrincipal": false,
13
+ "rateLimitRpm": 0,
14
+ "execution": {
15
+ "lane": "k8s",
16
+ "coords": {
17
+ "K8S_SANDBOX_IMAGE": "registry.internal/sandbox@sha256:abc",
18
+ "K8S_NAMESPACE": "sandboxes"
19
+ },
20
+ "secretRefs": {}
21
+ },
22
+ "store": {
23
+ "backend": "local",
24
+ "session": "auto"
25
+ }
26
+ },
27
+ "coords": {},
28
+ "env": {
29
+ "LOG_LEVEL": "debug"
30
+ }
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "contributor": "contract",
3
+ "claim": "G5 幂等:输入 = m01 的迁移输出(已迁形)⇒ changed / dropped / refused 全空,doc 字节相等。input.json 由加冕脚本从 m01 的 expected 生成,不手写。",
4
+ "inputFrom": "m01-g5-k8s-env-lifted"
5
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "doc": {
3
+ "workers": [
4
+ {
5
+ "name": "canary",
6
+ "enabled": true,
7
+ "host": "default",
8
+ "image": "sema-server:latest",
9
+ "secretRefs": {
10
+ "apiKeyEnv": "MODEL_KEY"
11
+ },
12
+ "runtime": {
13
+ "requirePrincipal": false,
14
+ "rateLimitRpm": 0,
15
+ "execution": {
16
+ "lane": "e2b",
17
+ "coords": {},
18
+ "secretRefs": {
19
+ "E2B_API_KEY": "HOST_E2B_KEY"
20
+ }
21
+ },
22
+ "store": {
23
+ "backend": "local",
24
+ "session": "auto"
25
+ }
26
+ },
27
+ "coords": {}
28
+ }
29
+ ]
30
+ },
31
+ "changed": [
32
+ "canary"
33
+ ],
34
+ "dropped": [
35
+ {
36
+ "name": "canary",
37
+ "index": 1,
38
+ "field": [
39
+ "runtime",
40
+ "memoryBackend"
41
+ ]
42
+ }
43
+ ],
44
+ "refused": [
45
+ {
46
+ "name": "handless",
47
+ "index": 0,
48
+ "field": [
49
+ "env",
50
+ "REMOTE_EXEC"
51
+ ],
52
+ "reason": "an enabled worker names no execution lane (env.REMOTE_EXEC is unset) — it boots with no hands and still reports tasks completed. The migration does not guess a lane: set runtime.execution.lane (host | e2b | k8s | ssh | adb | local-docker | device) by hand, or disable the worker",
53
+ "original": {
54
+ "name": "handless",
55
+ "enabled": true,
56
+ "host": "default",
57
+ "image": "sema-server:latest",
58
+ "secretRefs": {
59
+ "apiKeyEnv": "MODEL_KEY"
60
+ },
61
+ "runtime": {
62
+ "sessionBackend": "auto",
63
+ "memoryBackend": "off",
64
+ "requirePrincipal": false,
65
+ "rateLimitRpm": 0
66
+ },
67
+ "coords": {}
68
+ }
69
+ }
70
+ ]
71
+ }