@milpa/comal 0.1.6 → 0.2.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 (137) hide show
  1. package/README.md +19 -1
  2. package/backend/contracts/remote-commands-v1.json +12 -0
  3. package/backend/contracts/remote-workspace-v1.schema.json +287 -0
  4. package/governance/chrome-task-v10.json +323 -0
  5. package/governance/chrome-task-v11.json +355 -0
  6. package/governance/chrome-task-v12.json +387 -0
  7. package/governance/chrome-task-v13.json +419 -0
  8. package/governance/chrome-task-v3.json +99 -0
  9. package/governance/chrome-task-v4.json +131 -0
  10. package/governance/chrome-task-v5.json +163 -0
  11. package/governance/chrome-task-v6.json +195 -0
  12. package/governance/chrome-task-v7.json +227 -0
  13. package/governance/chrome-task-v8.json +259 -0
  14. package/governance/chrome-task-v9.json +291 -0
  15. package/governance/source-task-v1.json +1 -0
  16. package/governance/source-task-v2.json +1 -0
  17. package/package.json +15 -1
  18. package/src/agent-recovery-proof.mjs +12 -1
  19. package/src/agent.mjs +94 -30
  20. package/src/audit.mjs +21 -6
  21. package/src/auto-guard.mjs +48 -1
  22. package/src/chrome-candidate-recovery-proof.mjs +47 -0
  23. package/src/chrome-recovery-proof.mjs +6 -2
  24. package/src/chrome-source-syntax.mjs +93 -0
  25. package/src/cli.mjs +161 -56
  26. package/src/codex-provider.mjs +3 -2
  27. package/src/connection-settings.mjs +204 -0
  28. package/src/context-pressure.mjs +2 -1
  29. package/src/durable-agent-runs.mjs +5 -11
  30. package/src/event-channels.mjs +8 -0
  31. package/src/file-recovery-proof.mjs +11 -3
  32. package/src/file-recovery.mjs +24 -0
  33. package/src/gemini-provider.mjs +6 -1
  34. package/src/git-agent-revision.mjs +12 -0
  35. package/src/git-agent-workspaces.mjs +143 -0
  36. package/src/git-integration-lineage.mjs +20 -0
  37. package/src/git-integration-operations.mjs +200 -0
  38. package/src/git-integration-recovery-proof.mjs +70 -0
  39. package/src/git-page-cli-bridge.mjs +61 -0
  40. package/src/git-page-evidence.mjs +30 -0
  41. package/src/git-page-identity.mjs +10 -0
  42. package/src/git-page-proof.mjs +96 -0
  43. package/src/git-page-settlement.mjs +21 -0
  44. package/src/git-page-verification.mjs +134 -0
  45. package/src/git-plumbing.mjs +212 -0
  46. package/src/git-process-worker.mjs +50 -0
  47. package/src/git-source.mjs +110 -0
  48. package/src/git-workspaces.mjs +519 -0
  49. package/src/goals.mjs +13 -7
  50. package/src/house.mjs +246 -20
  51. package/src/i18n/cli-es.mjs +4 -0
  52. package/src/i18n/es.mjs +35 -0
  53. package/src/judges.mjs +27 -11
  54. package/src/mcp-runtime.mjs +15 -3
  55. package/src/model-controls.mjs +11 -1
  56. package/src/model-deadline.mjs +4 -3
  57. package/src/native-refusal.mjs +38 -0
  58. package/src/onboarding.mjs +88 -24
  59. package/src/openai-provider.mjs +14 -7
  60. package/src/operations.mjs +9 -2
  61. package/src/output-recovery.mjs +48 -0
  62. package/src/peer-tools.mjs +18 -8
  63. package/src/permission-controls.mjs +232 -0
  64. package/src/permission-rules.mjs +312 -0
  65. package/src/permissions.mjs +113 -30
  66. package/src/plugin-catalog.mjs +84 -0
  67. package/src/plugin-config.mjs +48 -6
  68. package/src/plugin-controls.mjs +332 -0
  69. package/src/plugin-notices.mjs +88 -0
  70. package/src/plugin-trust.mjs +104 -0
  71. package/src/plugins/chrome-lab/bridge.mjs +38 -12
  72. package/src/plugins/chrome-lab/client.mjs +103 -25
  73. package/src/plugins/chrome-lab/diagnostics.mjs +19 -0
  74. package/src/plugins/chrome-lab/index.mjs +116 -26
  75. package/src/plugins/chrome-lab/project.mjs +30 -2
  76. package/src/plugins/chrome-lab/scoped-input.mjs +135 -0
  77. package/src/plugins/chrome-lab/worker-diagnostics.mjs +51 -0
  78. package/src/plugins/open-relay/actions.mjs +205 -0
  79. package/src/plugins/open-relay/bound.mjs +47 -0
  80. package/src/plugins/open-relay/client.mjs +158 -0
  81. package/src/plugins/open-relay/dossier.mjs +119 -0
  82. package/src/plugins/open-relay/index.mjs +153 -0
  83. package/src/plugins/open-relay/lookup.mjs +45 -0
  84. package/src/plugins/open-relay/notices.mjs +79 -0
  85. package/src/plugins/open-relay/watch.mjs +127 -0
  86. package/src/plugins.mjs +72 -29
  87. package/src/private-fs.mjs +40 -0
  88. package/src/process-lock.mjs +24 -13
  89. package/src/provider-auth.mjs +14 -3
  90. package/src/provider.mjs +11 -2
  91. package/src/read-only-check.mjs +7 -3
  92. package/src/remote-control.mjs +29 -4
  93. package/src/remote-workspace.mjs +50 -0
  94. package/src/scope-ceiling.mjs +56 -0
  95. package/src/scoped-policy.mjs +39 -0
  96. package/src/secret-login.mjs +68 -0
  97. package/src/session-bus.mjs +41 -7
  98. package/src/session-projections-candidate.mjs +119 -0
  99. package/src/session-projections.mjs +119 -0
  100. package/src/session-read-cache.mjs +23 -3
  101. package/src/sessions.mjs +35 -11
  102. package/src/source-editor-role.mjs +13 -0
  103. package/src/source-ownership.mjs +73 -0
  104. package/src/source-proposal-proof.mjs +55 -0
  105. package/src/source-proposals.mjs +118 -0
  106. package/src/source-requests.mjs +148 -0
  107. package/src/source-task-proof.mjs +24 -0
  108. package/src/source-task-revision-proof.mjs +44 -0
  109. package/src/subagents.mjs +187 -87
  110. package/src/tool-packs.mjs +5 -5
  111. package/src/tools.mjs +82 -15
  112. package/src/trusted-context.mjs +5 -1
  113. package/src/tui/connection-transition.mjs +1 -1
  114. package/src/tui/controller.mjs +8 -4
  115. package/src/tui/discovery.mjs +24 -12
  116. package/src/tui/inbound-blocks.mjs +55 -0
  117. package/src/tui/present.mjs +504 -0
  118. package/src/tui/screen.mjs +49 -13
  119. package/src/windows-private.ps1 +61 -0
  120. package/src/work-assertions.mjs +6 -2
  121. package/src/work-plan.mjs +34 -8
  122. package/src/work-state.mjs +15 -9
  123. package/src/workflows/chrome-page-cases.mjs +156 -0
  124. package/src/workflows/chrome-page-checkpoint-reader.mjs +10 -0
  125. package/src/workflows/chrome-page-diagnostics.mjs +113 -0
  126. package/src/workflows/chrome-page-law.mjs +48 -0
  127. package/src/workflows/chrome-page-recovery-host-v13.mjs +14 -0
  128. package/src/workflows/chrome-page-recovery-v13.mjs +104 -0
  129. package/src/workflows/chrome-page-task.mjs +429 -0
  130. package/src/workflows/chrome-page-verifier.mjs +123 -0
  131. package/src/workflows/chrome-source.mjs +73 -0
  132. package/src/workflows/chrome-supplied-inputs.mjs +43 -0
  133. package/src/workflows/chrome-task-adoption.mjs +122 -0
  134. package/src/workflows/chrome-task.mjs +379 -74
  135. package/src/workflows/source-task-v1.mjs +124 -0
  136. package/src/workflows/source-task-v2.mjs +227 -0
  137. package/src/workflows/source-task.mjs +13 -0
package/README.md CHANGED
@@ -28,7 +28,7 @@ comal --help
28
28
 
29
29
  Keep the PATH line in your shell startup file if you use that prefix. If your Node manager already provides a user prefix, you can omit `--prefix "$HOME/.local"`. The package registers the `comal` executable; you do not need to create a shell alias.
30
30
 
31
- You can pin a version with `npx @milpa/comal@0.1.6` or `npm install --global @milpa/comal@0.1.6`. The local release manifest preserves SHA-256 and SHA-512 integrity is checked against npm at publish time. No independent publisher signature is claimed.
31
+ You can pin a version with `npx @milpa/comal@0.2.0` or `npm install --global @milpa/comal@0.2.0`. The local release manifest preserves SHA-256 and SHA-512 integrity is checked against npm at publish time. No independent publisher signature is claimed.
32
32
 
33
33
  ## Test without account or model
34
34
 
@@ -58,6 +58,24 @@ For APIs, set the key via the environment or your secrets manager. Do not paste
58
58
 
59
59
  In the TUI, `/provider` opens a searchable list of workspace profiles and login providers. `/models` lists models from the active provider; `/effort` offers the active model’s supported levels. Use ↑/↓ and Enter to select, or Esc to keep your draft. A pending selection stays distinct from the active connection. Comal checks model/provider candidates before replacing a working connection; failed checks offer explicit recovery without retrying automatically. A catalog check does not prove inference entitlement.
60
60
 
61
+ ## Configure from inside the session (0.2.0)
62
+
63
+ You can start with plain `comal` and configure everything from the composer; startup flags keep working and still win over saved settings.
64
+
65
+ ```text
66
+ /login ollama # Ollama Cloud: the key goes in a hidden field
67
+ /provider ollama
68
+ /model MODEL_ID
69
+ /max-tokens 32000 # output reserve, saved for later sessions
70
+ /context-window auto # detected window (Ollama uses /api/show)
71
+ /config # connection, limits, permissions and config paths
72
+ /config save # remember this connection for the next launch
73
+ /plugins available # plugins bundled with Comal
74
+ /permissions # mode, saved rules and recent decisions
75
+ ```
76
+
77
+ Keys entered with `/login` are stored only in Comal's private credential store and are never exported to the process environment, so tools such as Bash cannot read them. What changed in 0.2.0: https://comal.milpahq.com/academy/docs/novedades/ .
78
+
61
79
  ## Connect your Artifacts account
62
80
 
63
81
  ```sh
@@ -91,6 +91,18 @@
91
91
  "description": "Model capability support and provenance",
92
92
  "argument_pattern": "(?:refresh)?"
93
93
  },
94
+ {
95
+ "name": "permissions",
96
+ "arguments": "",
97
+ "description": "Permission mode, saved rules and recent decisions (read-only)",
98
+ "argument_pattern": ""
99
+ },
100
+ {
101
+ "name": "autonomy",
102
+ "arguments": "",
103
+ "description": "Current autonomy level (read-only)",
104
+ "argument_pattern": ""
105
+ },
94
106
  {
95
107
  "name": "plugins",
96
108
  "arguments": "[status|list]",
@@ -0,0 +1,287 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "version": {
7
+ "const": 1
8
+ },
9
+ "scope": {
10
+ "const": "recorded_work_execution"
11
+ },
12
+ "asked": {
13
+ "const": "unjudged"
14
+ },
15
+ "source": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "properties": {
19
+ "session_id": {
20
+ "type": "string",
21
+ "maxLength": 128
22
+ },
23
+ "row": {
24
+ "type": "integer",
25
+ "minimum": 0
26
+ },
27
+ "sha256": {
28
+ "type": "string",
29
+ "maxLength": 64,
30
+ "pattern": "^[a-f0-9]{64}$"
31
+ },
32
+ "integrity": {
33
+ "enum": [
34
+ "verified_hash_chain",
35
+ "legacy",
36
+ "invalid"
37
+ ]
38
+ }
39
+ },
40
+ "required": [
41
+ "session_id",
42
+ "row",
43
+ "sha256",
44
+ "integrity"
45
+ ]
46
+ },
47
+ "plan": {
48
+ "anyOf": [
49
+ {
50
+ "type": "null"
51
+ },
52
+ {
53
+ "type": "object",
54
+ "additionalProperties": false,
55
+ "properties": {
56
+ "version": {
57
+ "type": "integer",
58
+ "minimum": 1
59
+ },
60
+ "objective": {
61
+ "type": "string",
62
+ "maxLength": 1000
63
+ }
64
+ },
65
+ "required": [
66
+ "version",
67
+ "objective"
68
+ ]
69
+ }
70
+ ]
71
+ },
72
+ "counts": {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "properties": {
76
+ "pending": {
77
+ "type": "integer",
78
+ "minimum": 0
79
+ },
80
+ "in_progress": {
81
+ "type": "integer",
82
+ "minimum": 0
83
+ },
84
+ "blocked": {
85
+ "type": "integer",
86
+ "minimum": 0
87
+ },
88
+ "done": {
89
+ "type": "integer",
90
+ "minimum": 0
91
+ },
92
+ "needs_verification": {
93
+ "type": "integer",
94
+ "minimum": 0
95
+ }
96
+ },
97
+ "required": [
98
+ "pending",
99
+ "in_progress",
100
+ "blocked",
101
+ "done",
102
+ "needs_verification"
103
+ ]
104
+ },
105
+ "tasks_total": {
106
+ "type": "integer",
107
+ "minimum": 0
108
+ },
109
+ "tasks": {
110
+ "type": "array",
111
+ "maxItems": 24,
112
+ "items": {
113
+ "type": "object",
114
+ "additionalProperties": false,
115
+ "properties": {
116
+ "id": {
117
+ "type": "string",
118
+ "maxLength": 64,
119
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$"
120
+ },
121
+ "title": {
122
+ "type": "string",
123
+ "maxLength": 180
124
+ },
125
+ "criterion": {
126
+ "type": "string",
127
+ "maxLength": 400
128
+ },
129
+ "status": {
130
+ "enum": [
131
+ "pending",
132
+ "in_progress",
133
+ "blocked",
134
+ "done",
135
+ "needs_verification"
136
+ ]
137
+ },
138
+ "declared_status": {
139
+ "enum": [
140
+ "pending",
141
+ "in_progress",
142
+ "blocked",
143
+ "done",
144
+ "needs_verification"
145
+ ]
146
+ },
147
+ "phase": {
148
+ "enum": [
149
+ "discovery",
150
+ "implementation",
151
+ "verification"
152
+ ]
153
+ },
154
+ "reason": {
155
+ "type": "string",
156
+ "maxLength": 240
157
+ },
158
+ "held_by": {
159
+ "type": "array",
160
+ "maxItems": 24,
161
+ "items": {
162
+ "type": "string",
163
+ "maxLength": 64,
164
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$"
165
+ }
166
+ },
167
+ "checks_total": {
168
+ "type": "integer",
169
+ "minimum": 0
170
+ },
171
+ "checks": {
172
+ "type": "array",
173
+ "maxItems": 4,
174
+ "items": {
175
+ "type": "object",
176
+ "additionalProperties": false,
177
+ "properties": {
178
+ "step_id": {
179
+ "type": "string",
180
+ "maxLength": 64,
181
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{0,63}$"
182
+ },
183
+ "operation": {
184
+ "type": "string",
185
+ "maxLength": 128
186
+ },
187
+ "status": {
188
+ "enum": [
189
+ "pending",
190
+ "running",
191
+ "failed",
192
+ "refused",
193
+ "interrupted",
194
+ "not_dispatched",
195
+ "stale",
196
+ "passed"
197
+ ]
198
+ },
199
+ "receipt_id": {
200
+ "type": "string",
201
+ "maxLength": 36,
202
+ "pattern": "^[a-f0-9-]{36}$"
203
+ },
204
+ "receipt_row": {
205
+ "type": "integer",
206
+ "minimum": 0
207
+ }
208
+ },
209
+ "required": [
210
+ "step_id",
211
+ "operation",
212
+ "status"
213
+ ],
214
+ "dependentRequired": {
215
+ "receipt_id": [
216
+ "receipt_row"
217
+ ],
218
+ "receipt_row": [
219
+ "receipt_id"
220
+ ]
221
+ }
222
+ }
223
+ }
224
+ },
225
+ "required": [
226
+ "id",
227
+ "title",
228
+ "criterion",
229
+ "status",
230
+ "declared_status",
231
+ "phase",
232
+ "reason",
233
+ "held_by",
234
+ "checks_total",
235
+ "checks"
236
+ ]
237
+ }
238
+ },
239
+ "receipts": {
240
+ "type": "array",
241
+ "maxItems": 8,
242
+ "items": {
243
+ "type": "object",
244
+ "additionalProperties": false,
245
+ "properties": {
246
+ "id": {
247
+ "type": "string",
248
+ "maxLength": 36,
249
+ "pattern": "^[a-f0-9-]{36}$"
250
+ },
251
+ "operation": {
252
+ "type": "string",
253
+ "maxLength": 128
254
+ },
255
+ "status": {
256
+ "enum": [
257
+ "returned",
258
+ "failed",
259
+ "refused"
260
+ ]
261
+ },
262
+ "row": {
263
+ "type": "integer",
264
+ "minimum": 0
265
+ }
266
+ },
267
+ "required": [
268
+ "id",
269
+ "operation",
270
+ "status",
271
+ "row"
272
+ ]
273
+ }
274
+ }
275
+ },
276
+ "required": [
277
+ "version",
278
+ "scope",
279
+ "asked",
280
+ "source",
281
+ "plan",
282
+ "counts",
283
+ "tasks_total",
284
+ "tasks",
285
+ "receipts"
286
+ ]
287
+ }
@@ -0,0 +1,323 @@
1
+ {
2
+ "profile": {
3
+ "name": "comal-chrome-task",
4
+ "version": "10",
5
+ "decisionIds": [
6
+ "COMAL-CHROME-010"
7
+ ]
8
+ },
9
+ "decisions": [
10
+ {
11
+ "id": "COMAL-CHROME-001",
12
+ "title": "La casa conserva el encargo y cierra con evidencia vigente",
13
+ "status": "accepted",
14
+ "supersedes": null,
15
+ "gates": [
16
+ {
17
+ "id": "task-scope",
18
+ "tier": "enforced",
19
+ "operations": [
20
+ "*"
21
+ ],
22
+ "boundTo": "runtime:chrome-task.scope"
23
+ },
24
+ {
25
+ "id": "current-evidence",
26
+ "tier": "enforced",
27
+ "operations": [
28
+ "WorkTaskUpdate"
29
+ ],
30
+ "boundTo": "runtime:chrome-task.close"
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "id": "COMAL-CHROME-002",
36
+ "title": "The accepted Chrome task binds exact artifact bytes through a narrow host hash capability",
37
+ "status": "accepted",
38
+ "supersedes": "COMAL-CHROME-001",
39
+ "gates": [
40
+ {
41
+ "id": "task-scope",
42
+ "tier": "enforced",
43
+ "operations": [
44
+ "*"
45
+ ],
46
+ "boundTo": "runtime:chrome-task.scope"
47
+ },
48
+ {
49
+ "id": "current-evidence",
50
+ "tier": "enforced",
51
+ "operations": [
52
+ "WorkTaskUpdate"
53
+ ],
54
+ "boundTo": "runtime:chrome-task.close"
55
+ },
56
+ {
57
+ "id": "artifact-hash",
58
+ "tier": "enforced",
59
+ "operations": [
60
+ "FileInfo"
61
+ ],
62
+ "boundTo": "runtime:chrome-task.artifact-hash"
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "id": "COMAL-CHROME-003",
68
+ "title": "Conversational declarations preserve original intent and expose scoped live popup inspection without model-managed resources",
69
+ "status": "accepted",
70
+ "supersedes": "COMAL-CHROME-002",
71
+ "gates": [
72
+ {
73
+ "id": "task-scope",
74
+ "tier": "enforced",
75
+ "operations": [
76
+ "*"
77
+ ],
78
+ "boundTo": "runtime:chrome-task.scope"
79
+ },
80
+ {
81
+ "id": "current-evidence",
82
+ "tier": "enforced",
83
+ "operations": [
84
+ "WorkTaskUpdate"
85
+ ],
86
+ "boundTo": "runtime:chrome-task.close"
87
+ },
88
+ {
89
+ "id": "artifact-hash",
90
+ "tier": "enforced",
91
+ "operations": [
92
+ "FileInfo"
93
+ ],
94
+ "boundTo": "runtime:chrome-task.artifact-hash"
95
+ }
96
+ ]
97
+ },
98
+ {
99
+ "id": "COMAL-CHROME-004",
100
+ "title": "Reuse completed behavior evidence only for identical source and live document identity, with fresh terminal postconditions; explicit rerun and changed resources execute tests again",
101
+ "status": "accepted",
102
+ "supersedes": "COMAL-CHROME-003",
103
+ "gates": [
104
+ {
105
+ "id": "task-scope",
106
+ "tier": "enforced",
107
+ "operations": [
108
+ "*"
109
+ ],
110
+ "boundTo": "runtime:chrome-task.scope"
111
+ },
112
+ {
113
+ "id": "current-evidence",
114
+ "tier": "enforced",
115
+ "operations": [
116
+ "WorkTaskUpdate"
117
+ ],
118
+ "boundTo": "runtime:chrome-task.close"
119
+ },
120
+ {
121
+ "id": "artifact-hash",
122
+ "tier": "enforced",
123
+ "operations": [
124
+ "FileInfo"
125
+ ],
126
+ "boundTo": "runtime:chrome-task.artifact-hash"
127
+ }
128
+ ]
129
+ },
130
+ {
131
+ "id": "COMAL-CHROME-005",
132
+ "title": "An explicit candidate commit composes publication, declared tests and closure with unchanged child authority and durable evidence",
133
+ "status": "accepted",
134
+ "supersedes": "COMAL-CHROME-004",
135
+ "gates": [
136
+ {
137
+ "id": "task-scope",
138
+ "tier": "enforced",
139
+ "operations": [
140
+ "*"
141
+ ],
142
+ "boundTo": "runtime:chrome-task.scope"
143
+ },
144
+ {
145
+ "id": "current-evidence",
146
+ "tier": "enforced",
147
+ "operations": [
148
+ "WorkTaskUpdate"
149
+ ],
150
+ "boundTo": "runtime:chrome-task.close"
151
+ },
152
+ {
153
+ "id": "artifact-hash",
154
+ "tier": "enforced",
155
+ "operations": [
156
+ "FileInfo"
157
+ ],
158
+ "boundTo": "runtime:chrome-task.artifact-hash"
159
+ }
160
+ ]
161
+ },
162
+ {
163
+ "id": "COMAL-CHROME-006",
164
+ "title": "Own immutable fixture pages and popup resources are bound separately; cross-surface checks retain source, document, connection and permission gates",
165
+ "status": "accepted",
166
+ "supersedes": "COMAL-CHROME-005",
167
+ "gates": [
168
+ {
169
+ "id": "task-scope",
170
+ "tier": "enforced",
171
+ "operations": [
172
+ "*"
173
+ ],
174
+ "boundTo": "runtime:chrome-task.scope"
175
+ },
176
+ {
177
+ "id": "current-evidence",
178
+ "tier": "enforced",
179
+ "operations": [
180
+ "WorkTaskUpdate"
181
+ ],
182
+ "boundTo": "runtime:chrome-task.close"
183
+ },
184
+ {
185
+ "id": "artifact-hash",
186
+ "tier": "enforced",
187
+ "operations": [
188
+ "FileInfo"
189
+ ],
190
+ "boundTo": "runtime:chrome-task.artifact-hash"
191
+ }
192
+ ]
193
+ },
194
+ {
195
+ "id": "COMAL-CHROME-007",
196
+ "title": "Physical input targets are activated and declared reloads require an observed new document; acknowledged dispatch alone is not persistence evidence",
197
+ "status": "accepted",
198
+ "supersedes": "COMAL-CHROME-006",
199
+ "gates": [
200
+ {
201
+ "id": "task-scope",
202
+ "tier": "enforced",
203
+ "operations": [
204
+ "*"
205
+ ],
206
+ "boundTo": "runtime:chrome-task.scope"
207
+ },
208
+ {
209
+ "id": "current-evidence",
210
+ "tier": "enforced",
211
+ "operations": [
212
+ "WorkTaskUpdate"
213
+ ],
214
+ "boundTo": "runtime:chrome-task.close"
215
+ },
216
+ {
217
+ "id": "artifact-hash",
218
+ "tier": "enforced",
219
+ "operations": [
220
+ "FileInfo"
221
+ ],
222
+ "boundTo": "runtime:chrome-task.artifact-hash"
223
+ }
224
+ ]
225
+ },
226
+ {
227
+ "id": "COMAL-CHROME-008",
228
+ "title": "Current publication and explicit native worker generation bound diagnostic text; unavailable or historical observations do not grant effects or close work",
229
+ "status": "accepted",
230
+ "supersedes": "COMAL-CHROME-007",
231
+ "gates": [
232
+ {
233
+ "id": "task-scope",
234
+ "tier": "enforced",
235
+ "operations": [
236
+ "*"
237
+ ],
238
+ "boundTo": "runtime:chrome-task.scope"
239
+ },
240
+ {
241
+ "id": "current-evidence",
242
+ "tier": "enforced",
243
+ "operations": [
244
+ "WorkTaskUpdate"
245
+ ],
246
+ "boundTo": "runtime:chrome-task.close"
247
+ },
248
+ {
249
+ "id": "artifact-hash",
250
+ "tier": "enforced",
251
+ "operations": [
252
+ "FileInfo"
253
+ ],
254
+ "boundTo": "runtime:chrome-task.artifact-hash"
255
+ }
256
+ ]
257
+ },
258
+ {
259
+ "id": "COMAL-CHROME-009",
260
+ "title": "Accepted Chrome source retains exact oversized proposals through native ports, scoped history and current child authority without changing acceptance",
261
+ "status": "accepted",
262
+ "supersedes": "COMAL-CHROME-008",
263
+ "gates": [
264
+ {
265
+ "id": "task-scope",
266
+ "tier": "enforced",
267
+ "operations": [
268
+ "*"
269
+ ],
270
+ "boundTo": "runtime:chrome-task.scope"
271
+ },
272
+ {
273
+ "id": "current-evidence",
274
+ "tier": "enforced",
275
+ "operations": [
276
+ "WorkTaskUpdate"
277
+ ],
278
+ "boundTo": "runtime:chrome-task.close"
279
+ },
280
+ {
281
+ "id": "artifact-hash",
282
+ "tier": "enforced",
283
+ "operations": [
284
+ "FileInfo"
285
+ ],
286
+ "boundTo": "runtime:chrome-task.artifact-hash"
287
+ }
288
+ ]
289
+ },
290
+ {
291
+ "id": "COMAL-CHROME-010",
292
+ "title": "Explicit supplied assets remain immutable across source recovery and resume; publication binds the exact checked snapshot before dispatch",
293
+ "status": "accepted",
294
+ "supersedes": "COMAL-CHROME-009",
295
+ "gates": [
296
+ {
297
+ "id": "task-scope",
298
+ "tier": "enforced",
299
+ "operations": [
300
+ "*"
301
+ ],
302
+ "boundTo": "runtime:chrome-task.scope"
303
+ },
304
+ {
305
+ "id": "current-evidence",
306
+ "tier": "enforced",
307
+ "operations": [
308
+ "WorkTaskUpdate"
309
+ ],
310
+ "boundTo": "runtime:chrome-task.close"
311
+ },
312
+ {
313
+ "id": "artifact-hash",
314
+ "tier": "enforced",
315
+ "operations": [
316
+ "FileInfo"
317
+ ],
318
+ "boundTo": "runtime:chrome-task.artifact-hash"
319
+ }
320
+ ]
321
+ }
322
+ ]
323
+ }