agentera 3.0.0-dev.80 → 3.0.0-dev.81
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/bundle/.agentera-build-source.json +5 -5
- package/bundle/CHANGELOG.md +5 -3
- package/bundle/README.md +6 -7
- package/bundle/UPGRADE.md +15 -11
- package/bundle/references/adapters/package-registry.yaml +136 -136
- package/bundle/references/adapters/runtime-retired-resources.yaml +24 -0
- package/bundle/references/analysis/verification-policy.yaml +1 -0
- package/bundle/references/artifacts/state-storage-authority.yaml +10 -0
- package/dist/.agentera-build-source.json +5 -5
- package/dist/cli/commands/doctor.js +55 -11
- package/dist/runtime/nativeResourceCleanup.js +117 -2
- package/dist/state/entityStorage.js +14 -19
- package/dist/state/entityWriterLock.js +18 -0
- package/dist/upgrade/lifecycleUpgrade.js +15 -2
- package/dist/upgrade/upgradeOrchestrator.js +8 -4
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "agentera.generatedBuildSource.v1",
|
|
3
|
-
"commit": "
|
|
4
|
-
"tree": "
|
|
5
|
-
"files":
|
|
6
|
-
"workingTreeSha256": "
|
|
7
|
-
"identitySha256": "
|
|
3
|
+
"commit": "3780e6727365095a4cf8cd265a9646fba4570593",
|
|
4
|
+
"tree": "ccb81233f9d1c79aa0b642d3b93771011a09ea89",
|
|
5
|
+
"files": 6908,
|
|
6
|
+
"workingTreeSha256": "16fc45b5e88a8ced49f2b84624a58dd63ccb85ebd34939260abc3b012a07b95e",
|
|
7
|
+
"identitySha256": "0857864ae6ee7d83e931d5049cb5386a1de05e04694fd9b28f400990bda9d147"
|
|
8
8
|
}
|
package/bundle/CHANGELOG.md
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
operator, substitution, split-token, multiline, nested, malformed,
|
|
13
13
|
alias-cycle, or wrong-channel evasion with one diagnostic per invocation.
|
|
14
14
|
Stable-channel tokens are confined independently of command recognition.
|
|
15
|
-
Exact source/package parity now includes all generated declaration fields,
|
|
16
|
-
|
|
17
|
-
producer or non-producer classification.
|
|
15
|
+
Exact source/package parity now includes all generated declaration fields, unused exemptions,
|
|
16
|
+
and conservative import/re-export closure with explicit producer or non-producer classification.
|
|
18
17
|
|
|
19
18
|
### Changed
|
|
20
19
|
|
|
21
20
|
- `agentera state todo set-severity` and `resolve` now accept strict,
|
|
22
21
|
preview-confirmed same-kind batches while preserving singleton flag syntax.
|
|
22
|
+
- Fixed automatic retirement so normal upgrade distinguishes proven pending removal, manual review, and clean state. Successful removal tells operators to restart OpenCode. No gate or hook command replaces the retired plugin.
|
|
23
23
|
- [post-audit-flagged] `agentera state todo create --input` now accepts strict, preview-confirmed
|
|
24
24
|
same-kind batches with request-local dependency references and replay-safe IDs.
|
|
25
25
|
- Consented `agentera report refresh --consent local-history` now publishes the
|
|
@@ -105,6 +105,8 @@
|
|
|
105
105
|
|
|
106
106
|
### Fixed
|
|
107
107
|
|
|
108
|
+
- Fixed same-ID writer lock contention so a competing committed entity returns
|
|
109
|
+
the canonical duplicate-ID conflict instead of a generic lock timeout.
|
|
108
110
|
- Fixed deprecated `prime --dashboard --fields` requests to return a typed
|
|
109
111
|
migration failure instead of successful partial JSON; unfiltered dashboard
|
|
110
112
|
aliases remain status capsules, and consumers are directed to
|
package/bundle/README.md
CHANGED
|
@@ -43,13 +43,12 @@ npx -y agentera@next doctor --format json
|
|
|
43
43
|
## Runtime integration
|
|
44
44
|
|
|
45
45
|
Agentera 3.0 uses one portable integration for compatible runtimes: the shared
|
|
46
|
-
skill at `~/.agents/skills/agentera` plus the Agentera CLI.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
The cleanup option pair is `--legacy-cleanup RESOURCE_ID --dry-run|--yes`.
|
|
46
|
+
skill at `~/.agents/skills/agentera` plus the Agentera CLI. No OpenCode gate or
|
|
47
|
+
`hook` command replaces the retired plugin. Normal `upgrade` automatically
|
|
48
|
+
previews and removes a proven Agentera-installed copy of that plugin, with no
|
|
49
|
+
separate cleanup selector. It preserves unproven files for manual review. See
|
|
50
|
+
[UPGRADE.md](./UPGRADE.md) for the distinct one-way v2 migration and the
|
|
51
|
+
explicit cleanup route for other retired native resources.
|
|
53
52
|
|
|
54
53
|
`doctor` reports read-only app, project-state, shared-skill, and CLI evidence.
|
|
55
54
|
`prime`, status, and project-integration output use the app/project recommendation
|
package/bundle/UPGRADE.md
CHANGED
|
@@ -18,9 +18,11 @@ Agentera has one active integration contract:
|
|
|
18
18
|
|
|
19
19
|
Normal `prime`, `doctor`, `schema`, help, and project-integration output reports
|
|
20
20
|
that shared skill and CLI/app/project state. Normal `upgrade` has no
|
|
21
|
-
current-runtime selector or
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
current-runtime selector or installation behavior. Its only automatic
|
|
22
|
+
native-resource operation is bounded retirement of the proven historical
|
|
23
|
+
OpenCode plugin described below. It creates no current plugin, hook, agent,
|
|
24
|
+
command, descriptor, or marketplace file and does not run runtime package
|
|
25
|
+
managers, authentication, enablement, or trust operations.
|
|
24
26
|
|
|
25
27
|
Passing `--runtime` fails before mutation. Remove `--runtime`, ensure the runtime
|
|
26
28
|
can read `~/.agents/skills/agentera`, and invoke the CLI directly. The supported
|
|
@@ -73,15 +75,13 @@ npx -y agentera@next state plan create --input PLAN.yaml --dry-run --format json
|
|
|
73
75
|
npx -y agentera@next state plan create --input PLAN.yaml --format json
|
|
74
76
|
```
|
|
75
77
|
|
|
76
|
-
`doctor --format json` also reports bounded `retired_resources` candidates.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
ID
|
|
81
|
-
remove a resource. Doctor never includes resource contents, adopts a name
|
|
78
|
+
`doctor --format json` also reports bounded `retired_resources` candidates. A
|
|
79
|
+
proven Agentera-installed OpenCode plugin reports `pending_automatic_removal`
|
|
80
|
+
and points to normal `upgrade`; it needs no separate cleanup selector. An
|
|
81
|
+
unproven or uninspectable resource reports `manual_review` and a read-only,
|
|
82
|
+
ID-scoped doctor command. Doctor never includes resource contents, adopts a name
|
|
82
83
|
collision as Agentera-owned, or changes a diagnosed path. Absent resources
|
|
83
|
-
report `clean
|
|
84
|
-
review.
|
|
84
|
+
report `clean`.
|
|
85
85
|
|
|
86
86
|
Retries re-observe the current app/project state. Completed migration work
|
|
87
87
|
converges to no change; interrupted v2 migration continues through the same full
|
|
@@ -89,6 +89,10 @@ apply command.
|
|
|
89
89
|
|
|
90
90
|
## Native Agentera resource cleanup
|
|
91
91
|
|
|
92
|
+
Normal upgrade retires only the proven OpenCode plugin automatically. Restart
|
|
93
|
+
OpenCode after a successful removal. No OpenCode gate or `hook` command replaced
|
|
94
|
+
the plugin; `npx -y agentera@next` remains the supported entry point.
|
|
95
|
+
|
|
92
96
|
Cleanup is a distinct resource route, not a host selection. Codex, Cursor,
|
|
93
97
|
OpenCode, and Copilot remain supported through the canonical shared skill and
|
|
94
98
|
CLI. Accepted smoke evidence records that Codex and Cursor loaded Agentera's
|
|
@@ -110,9 +110,9 @@ records:
|
|
|
110
110
|
- {"path":"references/cli/vocabulary.md","region":"line:367","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"31de05f7e8b2c31463cc9948422484c030b13d7163c5a4a6d989b46c4e1c53c8","reason":"Lifecycle prose names upgrade as the sole repair surface; the runnable example is separately canonicalized."}
|
|
111
111
|
- {"path":"references/cli/vocabulary.md","region":"line:525","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"243dce537ee00727689d368ef5b326fa7074b49a677827c2a1ea882c96fd23ce","reason":"Vocabulary table defines a CLI noun phrase and a source-contract label, not an executable interface."}
|
|
112
112
|
- {"path":"README.md","region":"line:26","category":"other_vocabulary","classification":"bounded_descriptive","normalized_sha256":"cc6de25d2bee41c30a1ebc403034acced9bfbed6321821014f8fc9b4a41cdd64","reason":"README parenthetical names the Codex skill alias used to render status; it is not shell syntax."}
|
|
113
|
-
- {"path":"README.md","region":"line:
|
|
113
|
+
- {"path":"README.md","region":"line:131","category":"other_vocabulary","classification":"bounded_descriptive","normalized_sha256":"9da76d9d65793501e48f531bbf87e349fe40c58f43c476ace66f1eefa6971a5c","reason":"Repository-layout table labels the CLI package and its npm identity without execution context."}
|
|
114
114
|
- {"path":"registry.json","region":"$[\"skills\"][0][\"name\"]","category":"identity_only","classification":"bounded_descriptive","normalized_sha256":"d94efe66795f3ab7f3e26cf770f9c8018e55bd85ca967e180dc9c797c82fb846","reason":"Published skill manifest name is identity metadata and has no command boundary."}
|
|
115
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
115
|
+
- {"path":"CHANGELOG.md","region":"line:20","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"1fda56f4b32ec5eb9d42ff4e6ab0e3e58b6cf8912f5c3231f39f6829fcf2b39b","reason":"Changelog line:20 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
116
116
|
- {"path":"CHANGELOG.md","region":"line:23","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"f5e0bd0856991a0923941c3ad9055072a2ec1eda931177dd1f56168dfb0bb078","reason":"Changelog line:23 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
117
117
|
- {"path":"CHANGELOG.md","region":"line:25","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"7bdcccd6d71adcf662488995386e557838550a6c9f1fed068cd51ed1d960fd24","reason":"Changelog line:25 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
118
118
|
- {"path":"CHANGELOG.md","region":"line:42","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2250d45c3e2d385de170b88660823e67b27dd4cf24bb1a2c738e8be376e0a214","reason":"Changelog line:42 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
@@ -125,140 +125,140 @@ records:
|
|
|
125
125
|
- {"path":"CHANGELOG.md","region":"line:86","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ceda3a756542d896b8a3605cc03b016fe4f1a56cc11686ba6db1b48c8734df7b","reason":"Changelog line:86 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
126
126
|
- {"path":"CHANGELOG.md","region":"line:95","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"050631803d234222841d851b676c6000491020930fad2447b1a3eaa431e21290","reason":"Changelog line:95 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
127
127
|
- {"path":"CHANGELOG.md","region":"line:98","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b113aab35673c847eaa74bce43f32b30fe7929035cc73f4f91ca8888821f68bb","reason":"Changelog line:98 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
128
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
129
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
130
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
131
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
132
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
133
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
134
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
135
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
136
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
137
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
138
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
139
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
140
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
141
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
142
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
143
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
144
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
145
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
146
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
147
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
148
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
149
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
150
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
151
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
152
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
153
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
154
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
155
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
156
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
157
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
158
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
159
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
160
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
161
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
162
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
163
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
164
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
165
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
166
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
167
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
168
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
169
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
170
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
171
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
172
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
173
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
174
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
175
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
176
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
177
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
178
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
179
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
180
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
181
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
182
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
183
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
184
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
185
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
186
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
187
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
188
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
189
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
190
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
191
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
192
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
193
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
194
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
195
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
196
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
197
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
198
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
199
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
200
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
201
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
202
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
203
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
204
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
205
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
206
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
207
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
208
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
209
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
210
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
211
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
212
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
213
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
214
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
215
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
216
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
217
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
218
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
219
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
220
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
221
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
222
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
223
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
224
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
225
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
226
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
227
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
228
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
229
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
230
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
231
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
232
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
233
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
234
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
235
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
236
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
237
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
238
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
239
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
240
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
241
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
242
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
243
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
244
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
245
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
246
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
247
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
248
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
249
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
250
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
251
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
252
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
253
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
254
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
255
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
256
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
257
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
258
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
259
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
260
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
261
|
-
- {"path":"CHANGELOG.md","region":"line:
|
|
128
|
+
- {"path":"CHANGELOG.md","region":"line:125","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"96d3c8e8fbcc43bcdc5248ca9980df5f1508c46019a800d818279449a13a82fb","reason":"Changelog line:125 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
129
|
+
- {"path":"CHANGELOG.md","region":"line:171","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"c01327ab63047305ef88dcf00ea180754cd01cb28d1527bbbe2ad5d205c12704","reason":"Changelog line:171 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
130
|
+
- {"path":"CHANGELOG.md","region":"line:175","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"9086eb6f8d1d90b2a4b5da4bf90d541f3288798992e2961e852e6c3384189406","reason":"Changelog line:175 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
131
|
+
- {"path":"CHANGELOG.md","region":"line:176","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"04363471fbf3dbe6bb29d2cfa5fbbc25c06b973e6f105957950974ff9c5f81be","reason":"Changelog line:176 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
132
|
+
- {"path":"CHANGELOG.md","region":"line:188","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"273d7dae87662352c49e5723aaa528efa89c9a7dbc7d43d3cbc54c1a1b9771da","reason":"Changelog line:188 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
133
|
+
- {"path":"CHANGELOG.md","region":"line:190","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"6d02d187f8e271cc6acc4b6966344a841615326891969dbec67815e40a51fe81","reason":"Changelog line:190 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
134
|
+
- {"path":"CHANGELOG.md","region":"line:192","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a5dd4c79ebfefc03bd1c6e3d159f362fd2c5f584d6ff8de7928edf88414133a9","reason":"Changelog line:192 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
135
|
+
- {"path":"CHANGELOG.md","region":"line:218","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"df8119585a79f11d42187fd6f57375401442e761ce94e30dd5a4b280c7a6f9e9","reason":"Changelog line:218 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
136
|
+
- {"path":"CHANGELOG.md","region":"line:226","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"0d5ca59bac58c2171d89e48ba4b9068ff7a8681a852272a09b3a4b28c6edf0a0","reason":"Changelog line:226 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
137
|
+
- {"path":"CHANGELOG.md","region":"line:230","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b5dc0e45378318464e595a7ccdbb15acc31ce67a2d55b2a9f8c3f8531c8e6ec7","reason":"Changelog line:230 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
138
|
+
- {"path":"CHANGELOG.md","region":"line:240","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"6bb696768a9a650f0b76ddaae20845cd48daef82ea78376b9f408372d252f840","reason":"Changelog line:240 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
139
|
+
- {"path":"CHANGELOG.md","region":"line:246","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e7de09667fd257aa82b8049725e7687fc6f7d97d81b0024b064f4843bd1e8f88","reason":"Changelog line:246 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
140
|
+
- {"path":"CHANGELOG.md","region":"line:248","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"7ef64202688c9c22fb2e693838d6d9133aa99869735eb32f00729587b283886d","reason":"Changelog line:248 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
141
|
+
- {"path":"CHANGELOG.md","region":"line:250","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"35f2268ae3281a70b7c584c23e4e57a07fc9ee6625eed48ae252d167e8ba83ea","reason":"Changelog line:250 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
142
|
+
- {"path":"CHANGELOG.md","region":"line:252","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"67d177100a3c9892643202a255523b9a84f57aa4c28b8c5dd21973c13cc06c7d","reason":"Changelog line:252 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
143
|
+
- {"path":"CHANGELOG.md","region":"line:253","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"39f085892a7b3c6e14905d90ab0c3f4cc58c66e0b5ffc2ab6ce0f88e8182cf98","reason":"Changelog line:253 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
144
|
+
- {"path":"CHANGELOG.md","region":"line:254","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a2f0254ae0226ce04de0917832fd1911cf27b1b69a832abcfbfe34c01c8d0d41","reason":"Changelog line:254 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
145
|
+
- {"path":"CHANGELOG.md","region":"line:257","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"6093e60d6c57f5bee694523c7fe380cd6a2ebaaff36d13e7ef153f1439789e99","reason":"Changelog line:257 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
146
|
+
- {"path":"CHANGELOG.md","region":"line:258","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"3dc02d2ca69c6d89705932cf557ffaa2bc089a294b518c0eef1a449dfb3d5173","reason":"Changelog line:258 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
147
|
+
- {"path":"CHANGELOG.md","region":"line:262","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2aac4a56f628aaca71f8003fd0678fed24771a7b10141759f7192808af70215c","reason":"Changelog line:262 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
148
|
+
- {"path":"CHANGELOG.md","region":"line:263","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"873571837ff03601ee6bfbfc9a65e1ff92e60070d1caef03ffe83a8268085aea","reason":"Changelog line:263 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
149
|
+
- {"path":"CHANGELOG.md","region":"line:264","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b46ee694c286a5932ca901e25bd4e639e95fca7c41b8fd8c37bd52c5f8504a68","reason":"Changelog line:264 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
150
|
+
- {"path":"CHANGELOG.md","region":"line:290","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"fc4be38a17eab92be66ac5f7e1b7efd5fe5f7bc78b69f72553f7126d94047c8e","reason":"Changelog line:290 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
151
|
+
- {"path":"CHANGELOG.md","region":"line:292","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"0a36c5c0fc2b89c9180061423daa4a07d3ac332fcd23279f9baf9cda8a2f6adf","reason":"Changelog line:292 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
152
|
+
- {"path":"CHANGELOG.md","region":"line:300","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"8e5f072c4568d46e10d35988ee015e77c18f63b1ef0e35eaf9105a7798a6e09b","reason":"Changelog line:300 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
153
|
+
- {"path":"CHANGELOG.md","region":"line:304","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"5f0ed0692a128853c09a7b25b8fe49c76b449a0cb8bf778a13ae49c5ba358d70","reason":"Changelog line:304 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
154
|
+
- {"path":"CHANGELOG.md","region":"line:312","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"17953bf458f6fb57effa97a6533a28259ce4315a41609324b4be15746f52874a","reason":"Changelog line:312 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
155
|
+
- {"path":"CHANGELOG.md","region":"line:316","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"488192144e03b8d2359b24a9448efe139df2db64084f96f13e7e6430be51daee","reason":"Changelog line:316 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
156
|
+
- {"path":"CHANGELOG.md","region":"line:320","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e938c494be60cd385581a5fef12657adc783cff181cf39f6a7edc39193f3b865","reason":"Changelog line:320 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
157
|
+
- {"path":"CHANGELOG.md","region":"line:337","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"15aa027b774437bc8622032515420cc7ede7cbeb1c9276b34af0beb354c63f9f","reason":"Changelog line:337 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
158
|
+
- {"path":"CHANGELOG.md","region":"line:340","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"fe22710d241ca919fa71c5fb93df868f3057ea55555f8b56bfc683ea9afef64a","reason":"Changelog line:340 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
159
|
+
- {"path":"CHANGELOG.md","region":"line:347","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a295187d75825286791f7b3fae79c63fa2b04ca1a79445095aa89b3f830078b6","reason":"Changelog line:347 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
160
|
+
- {"path":"CHANGELOG.md","region":"line:354","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a4c44983f585a0c5e04a3e9211216e9527b384b6486860fd713906dc8a08ebfc","reason":"Changelog line:354 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
161
|
+
- {"path":"CHANGELOG.md","region":"line:355","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"1c02cad8bec36f44f68191030f5b5ab9e8428f061895a78dfa78209e915029a5","reason":"Changelog line:355 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
162
|
+
- {"path":"CHANGELOG.md","region":"line:361","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e818b9177e5e2e33c7730264d4feaee54ec38fb8ecd9b9dfd38a8e13ef733c2c","reason":"Changelog line:361 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
163
|
+
- {"path":"CHANGELOG.md","region":"line:362","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"02727f43986dcbccd3c1c28bf5783f8da398cb14621d94fdcd554d7af171fe70","reason":"Changelog line:362 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
164
|
+
- {"path":"CHANGELOG.md","region":"line:367","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"73d92f74369b6dd668aa84314617b45438ab59c2791ba1e18044630c707063ee","reason":"Changelog line:367 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
165
|
+
- {"path":"CHANGELOG.md","region":"line:369","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"df43cf1d875dea7106157abbb0bb0a8178f5fd8e9f3ae4a328d9de84e9aa83c0","reason":"Changelog line:369 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
166
|
+
- {"path":"CHANGELOG.md","region":"line:375","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ab285a52329794ba0fb9c1aaa1ed3d8ccc20f5f35534d4969f5864d5820fb8db","reason":"Changelog line:375 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
167
|
+
- {"path":"CHANGELOG.md","region":"line:376","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"29c9289599a7439152d2360f033e6975d1fff12ef170143e4af35500d2385536","reason":"Changelog line:376 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
168
|
+
- {"path":"CHANGELOG.md","region":"line:382","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"db29be79c0599ef245401ef364157553ecbc5de0e621c6463f65e22b6cd88074","reason":"Changelog line:382 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
169
|
+
- {"path":"CHANGELOG.md","region":"line:384","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"53a63845ee297394d604fda2632c6ff8f989d11a2f4b6a08f649200cc27d6d56","reason":"Changelog line:384 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
170
|
+
- {"path":"CHANGELOG.md","region":"line:394","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"51acb1b950349ebddc025e217f5d2c18390194b090331700b3c68aafed515350","reason":"Changelog line:394 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
171
|
+
- {"path":"CHANGELOG.md","region":"line:395","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"431b7e7491c49a9e37078f21e2367f385e564d81fa8aef6d0ecd76ef3785c9cb","reason":"Changelog line:395 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
172
|
+
- {"path":"CHANGELOG.md","region":"line:396","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"d3e7acd5c6c6add69e79ae8ec14055df098468f5e911aa21f3199fee74f9cb34","reason":"Changelog line:396 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
173
|
+
- {"path":"CHANGELOG.md","region":"line:401","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"905558f56c722cd82215409d52bf70806d1be592750508489a20b9d34648fdd0","reason":"Changelog line:401 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
174
|
+
- {"path":"CHANGELOG.md","region":"line:402","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"afca70edee248020c32b2fcbf0d0b511680d994d8c32f08b19f129642ff45bf2","reason":"Changelog line:402 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
175
|
+
- {"path":"CHANGELOG.md","region":"line:408","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"75c13bc218736386cc04ff952ccd05dbc6c828443754dc7833a3e508e2c463cc","reason":"Changelog line:408 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
176
|
+
- {"path":"CHANGELOG.md","region":"line:409","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"459ff2708d311bc9fbaaa6fb575b79e2c37a9e5e2b74de1b4966dddb817ff33e","reason":"Changelog line:409 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
177
|
+
- {"path":"CHANGELOG.md","region":"line:419","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a96dd3429c58e932cc8dabdeb3b468e706a6194fce4fc1a4223564e537925ded","reason":"Changelog line:419 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
178
|
+
- {"path":"CHANGELOG.md","region":"line:425","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"0b94031a8ce928ff0f6683e243b63c4c824bda5074be362aae7f8edc7da99944","reason":"Changelog line:425 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
179
|
+
- {"path":"CHANGELOG.md","region":"line:430","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"d6421237cd9558d67a891714263826610eef35dcc1ff10a0dc57b920e32b5d7a","reason":"Changelog line:430 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
180
|
+
- {"path":"CHANGELOG.md","region":"line:460","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b79f1983530c32d44b5ffe066120ca61a49aeff084c24ac3c23ff9804b244084","reason":"Changelog line:460 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
181
|
+
- {"path":"CHANGELOG.md","region":"line:463","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2b2bc3ce51212471105df901c8771cb033d64694fb2aef651d01c270497a83da","reason":"Changelog line:463 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
182
|
+
- {"path":"CHANGELOG.md","region":"line:481","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"da8489e2a895b683e9dbd7d64a1d49014933b2fccf6383052ee7e8de24542f2c","reason":"Changelog line:481 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
183
|
+
- {"path":"CHANGELOG.md","region":"line:483","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"9d0f85f145de094192e8b273beb23a7283ee75ddad9c457b9ae89235cff153a1","reason":"Changelog line:483 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
184
|
+
- {"path":"CHANGELOG.md","region":"line:488","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b498e1e57926bf029fa431f522826a0264532e52eff1aa37634fc635b70aebcd","reason":"Changelog line:488 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
185
|
+
- {"path":"CHANGELOG.md","region":"line:496","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"27f4a7bb0420775f944f41ddad0be922fd3865f57fbb5780bc7dc5a6d80cad30","reason":"Changelog line:496 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
186
|
+
- {"path":"CHANGELOG.md","region":"line:500","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"80edcd68cf8a0f2c67b114e54d2840fd8c7dbffbfd69d9717cc305144702a319","reason":"Changelog line:500 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
187
|
+
- {"path":"CHANGELOG.md","region":"line:501","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"32a058aabcfd9ee0aace4813ba444460ede32db74460cde74378528e09795e40","reason":"Changelog line:501 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
188
|
+
- {"path":"CHANGELOG.md","region":"line:502","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"548fd32440fef321cb3a9250d7869a0d0c69c62600411378750b9ffd556b996b","reason":"Changelog line:502 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
189
|
+
- {"path":"CHANGELOG.md","region":"line:505","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e1ad9952e02194a97fc692605d95a68dd5d3ce25e089ab67006a88f33d40e176","reason":"Changelog line:505 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
190
|
+
- {"path":"CHANGELOG.md","region":"line:524","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a2c7c4aafcc8839e7dbdd6d4504ed658852c90b316d5ec7bf424c7491a9df8fb","reason":"Changelog line:524 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
191
|
+
- {"path":"CHANGELOG.md","region":"line:535","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2b11f8d17486fcf18b22602f1dbe568f71aadeae4d4838d2566adc821c71e664","reason":"Changelog line:535 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
192
|
+
- {"path":"CHANGELOG.md","region":"line:553","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"414abf981d94d78a8dd28187f7e0435e20ee79a6fb58f6646878b5fcf2d21cea","reason":"Changelog line:553 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
193
|
+
- {"path":"CHANGELOG.md","region":"line:562","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"aeca1f7f5097e0166086bad69771c682f6ce88d545ef8c904b073152b9679935","reason":"Changelog line:562 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
194
|
+
- {"path":"CHANGELOG.md","region":"line:574","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"faa006fd307a52f0e0b54d0805cbdab5f927e68b066289c7ecd7d74add5b9bb9","reason":"Changelog line:574 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
195
|
+
- {"path":"CHANGELOG.md","region":"line:575","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"8d5f97602651419dbb3a16be9ff8fb6d6d1a873a48d9f87439a03c2ce819d1db","reason":"Changelog line:575 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
196
|
+
- {"path":"CHANGELOG.md","region":"line:589","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"caf5a281584053eb6e9d5529ef08c123b5e1bf9783afb3eba86e8bbf44e1e730","reason":"Changelog line:589 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
197
|
+
- {"path":"CHANGELOG.md","region":"line:590","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a91271ae16cb4e1e77349bb816f7e1bb069049951fd4c5b725d8b107ec18da51","reason":"Changelog line:590 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
198
|
+
- {"path":"CHANGELOG.md","region":"line:595","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"4ca2a2d69ed4bac1e5e9809484202b51e8761eed9ce361b7b054162f309b63f7","reason":"Changelog line:595 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
199
|
+
- {"path":"CHANGELOG.md","region":"line:597","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"dbd15430145d78cd5f9457fb362a0dcc04a76fbb21322b6a7fd1ec757d2ef61a","reason":"Changelog line:597 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
200
|
+
- {"path":"CHANGELOG.md","region":"line:601","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2f54f2e9a2572b59f8630f0abbcc633780cbf59d975b4b6a71ff96d93c51b43d","reason":"Changelog line:601 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
201
|
+
- {"path":"CHANGELOG.md","region":"line:602","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"7d179cb6e2fb80e9846e1e1d2b68c38d6501be7ec713db277f478948a07d9bdb","reason":"Changelog line:602 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
202
|
+
- {"path":"CHANGELOG.md","region":"line:607","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e59c205b557c39d9aa478284ef4a9fec56794ca1f90d0527f0018adbef3eb254","reason":"Changelog line:607 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
203
|
+
- {"path":"CHANGELOG.md","region":"line:611","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"46de17b557d8e861966bb3c368319b813a5998096bbe64bff571c574da0b08c0","reason":"Changelog line:611 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
204
|
+
- {"path":"CHANGELOG.md","region":"line:623","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ecf04dcff932c45b5e2d5a4fcd3a8b02e945558128e32b641abc244dc916482d","reason":"Changelog line:623 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
205
|
+
- {"path":"CHANGELOG.md","region":"line:643","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ae7d9069525691441b43fdbee8773672fd3e634bdbb13c9ed23e7fb71cbb6f3a","reason":"Changelog line:643 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
206
|
+
- {"path":"CHANGELOG.md","region":"line:647","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"c809433be138d49ccabc951f91e45112802996785bb1ecd9a6d796fd63c9ffa7","reason":"Changelog line:647 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
207
|
+
- {"path":"CHANGELOG.md","region":"line:648","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"6073e9289ef99ab4f27efc110537b77ae375f8f21ccde5c80b05f2a6d35b7b0b","reason":"Changelog line:648 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
208
|
+
- {"path":"CHANGELOG.md","region":"line:649","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"21b82519aedc928d98bca21f7630c6ec9407d3076bf19de414cf2eba29ccf2ff","reason":"Changelog line:649 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
209
|
+
- {"path":"CHANGELOG.md","region":"line:654","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ed1d30e3b549157a35da50da38b714e976d4b393701e0706fb28cf1d7e466fe0","reason":"Changelog line:654 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
210
|
+
- {"path":"CHANGELOG.md","region":"line:655","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"6c28785c7b4aa1db1a78a50b648197377549602dd79effbf0141b038b3049038","reason":"Changelog line:655 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
211
|
+
- {"path":"CHANGELOG.md","region":"line:656","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"cad277cc53a17fe0b24f3ea20e42b09b00ba2dd16444cd04491fcd1db3e4a7c0","reason":"Changelog line:656 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
212
|
+
- {"path":"CHANGELOG.md","region":"line:657","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"5425eb65cb592aac25aa50e3cbbb3bd49b0f1f879e55382d6797b6692c13a41e","reason":"Changelog line:657 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
213
|
+
- {"path":"CHANGELOG.md","region":"line:658","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"0ef078b41964e086872ee9a3253c6e70d59421654e8819341574932bb5452efa","reason":"Changelog line:658 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
214
|
+
- {"path":"CHANGELOG.md","region":"line:660","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"096c8a56d103d2fd04718ee6ff98602fb46095d69e9abc79de5a1f4a5f914587","reason":"Changelog line:660 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
215
|
+
- {"path":"CHANGELOG.md","region":"line:663","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"555e7cd38b31c0a185ce482513efc7287923288fd6dcfd6589b49fcd97672451","reason":"Changelog line:663 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
216
|
+
- {"path":"CHANGELOG.md","region":"line:695","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"f01a43570ece6bdee58ff4232a50205917b2418fe0d6ef91eabbafe9af5bacda","reason":"Changelog line:695 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
217
|
+
- {"path":"CHANGELOG.md","region":"line:696","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"bbe3eff3bec3de74cd5f5d46472f2c11e3eed718cff2add201ef9f185333f2f6","reason":"Changelog line:696 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
218
|
+
- {"path":"CHANGELOG.md","region":"line:698","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2d3c6ac7d432c2aa083997f281fcb7683cfd6f0b71254fa72a626eac459c5f69","reason":"Changelog line:698 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
219
|
+
- {"path":"CHANGELOG.md","region":"line:703","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2f02daac3483802b3e81ca3223f1965d83d2afaf0b60fc42637127b70733a1c7","reason":"Changelog line:703 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
220
|
+
- {"path":"CHANGELOG.md","region":"line:704","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"16a7bf529b15b3a31847f0f0cbc26f9e97c556d5aef23de5e0ed3f751121bc8a","reason":"Changelog line:704 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
221
|
+
- {"path":"CHANGELOG.md","region":"line:705","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"3282dd03aa329d63733e98377f9c813deb8ef42aeed9c77cb4cd7b957144e0cc","reason":"Changelog line:705 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
222
|
+
- {"path":"CHANGELOG.md","region":"line:706","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"22fb3975fd5f782c2af0bfb150dacbdf8df7917a90e4116882891a823612f511","reason":"Changelog line:706 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
223
|
+
- {"path":"CHANGELOG.md","region":"line:707","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b34adc3b75d4bcb0c3ec4e907136939230ab49f1ceebc02940b8e6141f22c112","reason":"Changelog line:707 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
224
|
+
- {"path":"CHANGELOG.md","region":"line:708","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2d28b0ffd235eaf71ea1f9076f7a2c783186cf3cd7389226989fc98470dbc5d2","reason":"Changelog line:708 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
225
|
+
- {"path":"CHANGELOG.md","region":"line:709","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b5caf0d282b7436cdebf0e9bbd4e9399ac7d34c6f210de8aa657ee1ef410708e","reason":"Changelog line:709 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
226
|
+
- {"path":"CHANGELOG.md","region":"line:712","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"74e3be0b918f489413bc95ed75fbe403b91d954c5a9c74d0acd5b13418c36527","reason":"Changelog line:712 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
227
|
+
- {"path":"CHANGELOG.md","region":"line:713","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"69139a0963f7dd750d55f3cedadca1872546d4df4d9613b295542917e1f3cdb2","reason":"Changelog line:713 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
228
|
+
- {"path":"CHANGELOG.md","region":"line:714","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a95ab1163c7d3e8368ae7a762d1f9711aa2229ae22dd401f5d5608cf199cb920","reason":"Changelog line:714 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
229
|
+
- {"path":"CHANGELOG.md","region":"line:715","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e0a8321f50b4bd82241f95a11548ad574120e46c51dc09acfa9f20a65c6a2ed7","reason":"Changelog line:715 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
230
|
+
- {"path":"CHANGELOG.md","region":"line:720","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"4986da5c58b9781adc9941ed72bd415b56606872144d70466ba068e05205cc05","reason":"Changelog line:720 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
231
|
+
- {"path":"CHANGELOG.md","region":"line:726","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"7f168e53ebbe91507bb8e139937a25d297a69a7f7e7440266f285b0a6b549667","reason":"Changelog line:726 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
232
|
+
- {"path":"CHANGELOG.md","region":"line:727","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"f267d4d5e22facf19564218ed5a95e9923e16a7b6e5568d5456bfbdad570e6ec","reason":"Changelog line:727 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
233
|
+
- {"path":"CHANGELOG.md","region":"line:743","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"0968f2b1ea7d11286b5440af53bdb61a50c06e4c9890b3050b03406bcdd9c35a","reason":"Changelog line:743 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
234
|
+
- {"path":"CHANGELOG.md","region":"line:762","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"1ef8c1b4961339b268c9f38f35f04927ec4e15eb7542a012e6814ea23c06377b","reason":"Changelog line:762 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
235
|
+
- {"path":"CHANGELOG.md","region":"line:769","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"9a54cf33ae84163abd8585b414d62068feb60e997a99ac96ea7b2fcf899407cd","reason":"Changelog line:769 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
236
|
+
- {"path":"CHANGELOG.md","region":"line:779","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"e84b25864e165cab5d6b032cece0b68aca17045fe9d4e49f4c2a463614b2abb1","reason":"Changelog line:779 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
237
|
+
- {"path":"CHANGELOG.md","region":"line:785","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ef66163820d625eb8d779b90551e4e6cc06b5518744936c967fd4e2c598297f2","reason":"Changelog line:785 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
238
|
+
- {"path":"CHANGELOG.md","region":"line:791","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"a01668f19d9a3c0e22fb3d0affa2eb4823cf6fd020dffcdcda19e694f99a34ab","reason":"Changelog line:791 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
239
|
+
- {"path":"CHANGELOG.md","region":"line:805","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"02257b11d0f12d87160c922d03a43a3ad71b47328b4cfec8321772a00ab9f0e1","reason":"Changelog line:805 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
240
|
+
- {"path":"CHANGELOG.md","region":"line:820","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"16482064f9ef0dd51f79a3a5fddf7faac1f3e005878a79f84b8241c7b81f99e2","reason":"Changelog line:820 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
241
|
+
- {"path":"CHANGELOG.md","region":"line:823","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"1815e861f19557d9ab3569c01c08897fe576c1f75af6dc924553fdf6a905f1f9","reason":"Changelog line:823 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
242
|
+
- {"path":"CHANGELOG.md","region":"line:837","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"30116664823ab35e3d51cc5a285d71dd8132a9cbfbfd5b41d5345028e383b885","reason":"Changelog line:837 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
243
|
+
- {"path":"CHANGELOG.md","region":"line:838","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"071c61668669d48bf922cdb0ae4af90d79b80c9ae15eaa87c4cda42ebc21bcbf","reason":"Changelog line:838 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
244
|
+
- {"path":"CHANGELOG.md","region":"line:843","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"93ac57d769619d9c8c8cd3c251533f1cb189988400d7f1b863e5bb117f5714ae","reason":"Changelog line:843 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
245
|
+
- {"path":"CHANGELOG.md","region":"line:844","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"2c11004ecf6fd72878f5f63e48d11253cc56ce1cb664af9bdef7eff6d0d0c917","reason":"Changelog line:844 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
246
|
+
- {"path":"CHANGELOG.md","region":"line:866","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"ba19ce6c8550e0e4c72b3b72b28a90a4959774eb9ad569d2dce82c1fb0e78acb","reason":"Changelog line:866 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
247
|
+
- {"path":"CHANGELOG.md","region":"line:867","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"bc5b7df4384245805b40c0e7ceeb6ff233b29f45e918c80c30393166f8cc8fa9","reason":"Changelog line:867 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
248
|
+
- {"path":"CHANGELOG.md","region":"line:872","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"7ec3987f6990c4b68c2d2112446be7662b628cd243ecffdb3290c7eba386daad","reason":"Changelog line:872 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
249
|
+
- {"path":"CHANGELOG.md","region":"line:874","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"4e340672d35bf580414d9ddd1b8747300204b61f2f6d0e39cbbf11467351db72","reason":"Changelog line:874 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
250
|
+
- {"path":"CHANGELOG.md","region":"line:875","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"83eff78aaa7448828ba03183932befed590bd2746f9e2a2ff95c46e72927fd52","reason":"Changelog line:875 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
251
|
+
- {"path":"CHANGELOG.md","region":"line:876","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"b4e5b25810bddd6c181822b08406e1d1e41c05808a271554930e802e2ee4fffd","reason":"Changelog line:876 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
252
|
+
- {"path":"CHANGELOG.md","region":"line:877","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"4c59c9febcd1836db2b846ca931564c0b3596adb07c16245ab9ae56a926dc348","reason":"Changelog line:877 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
253
|
+
- {"path":"CHANGELOG.md","region":"line:881","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"51338f660b147e0d406058b387710e4f836a439c27c330390c32e9c40500a6ee","reason":"Changelog line:881 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
254
|
+
- {"path":"CHANGELOG.md","region":"line:886","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"1e0ecbffc7397c055247dd7ef0f87868ad25aed2b0b90d7954bdc3dbeecac19c","reason":"Changelog line:886 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
255
|
+
- {"path":"CHANGELOG.md","region":"line:900","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"8f613489432d44a86aa482288830a36eaf8b82e11aa22eeb7e9c694190f28e58","reason":"Changelog line:900 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
256
|
+
- {"path":"CHANGELOG.md","region":"line:906","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"537a366577c8af0ea8c68ab7f254800eba85992fbcecc875dae78b51ebc2ab35","reason":"Changelog line:906 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
257
|
+
- {"path":"CHANGELOG.md","region":"line:935","category":"other_vocabulary","classification":"exact_exemption","normalized_sha256":"ce476fbddd3071b4a2e4333922743f7d71e806a1c47440b1f7a02d468bc6bf65","reason":"Changelog line:935 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
258
|
+
- {"path":"CHANGELOG.md","region":"line:1049","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"acc0f013a71ee060dcad00fc55b54f82300325278a00193577b58882d872fb10","reason":"Changelog line:1049 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
259
|
+
- {"path":"CHANGELOG.md","region":"line:1096","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"79e767fd2e4baa00cdfc763c6814870dbefe20b6745d181f82bdba5139c0272f","reason":"Changelog line:1096 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
260
|
+
- {"path":"CHANGELOG.md","region":"line:1103","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"d57016b29585bb34604fc36cfce740c4e6b83a2c0fa753467730d6840ecebd34","reason":"Changelog line:1103 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
261
|
+
- {"path":"CHANGELOG.md","region":"line:1122","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"42cbb848be0de98624a2d008843e13c40efc7c77a02d7c4f489348d0e73b5b60","reason":"Changelog line:1122 records historical release behavior containing this exact noncanonical scalar; it does not authorize current execution."}
|
|
262
262
|
- {"path":"DESIGN.md","region":"line:41","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"650f6966f3048b7a15748d4ff652fff31c696e5c2b29e2268a0d60889251ebf1","reason":"Suite-design authority table names the exact prime context label as a source role; it is vocabulary, not an execution step."}
|
|
263
263
|
- {"path":"DESIGN.md","region":"line:45","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"3b97921346b319c7dd49bccf86df1aca7a6a6abe50fada5678520046587f3b5c","reason":"Suite-design surface prose names the exact state namespace as rendered output vocabulary, not a command to run."}
|
|
264
264
|
- {"path":"DESIGN.md","region":"line:74","category":"argument_bearing","classification":"exact_exemption","normalized_sha256":"1d3fd878d2c70230967224c7ecbc8a13ae81c1902cc3afa8724d06b0fb11a2ea","reason":"Logo guidance uses the exact lowercase product name as a noun in one descriptive sentence."}
|
|
@@ -16,6 +16,30 @@ policy:
|
|
|
16
16
|
- resource_name
|
|
17
17
|
- file_equality
|
|
18
18
|
unsupported_platform_result: action_required
|
|
19
|
+
automatic_retirement:
|
|
20
|
+
enabled_resource_ids:
|
|
21
|
+
- opencode.plugin.agentera
|
|
22
|
+
qualification: bounded_sha256_and_matching_installer_ledger
|
|
23
|
+
result_without_match: manual_review
|
|
24
|
+
ownership_evidence:
|
|
25
|
+
journal_schema: agentera.lifecycleOwnershipJournalEvent.v1
|
|
26
|
+
ledger_schema: agentera.lifecycleOwnershipLedger.v1
|
|
27
|
+
ledger_resource_id: opencode.plugin
|
|
28
|
+
status: managed
|
|
29
|
+
scope: whole
|
|
30
|
+
match: exact_destination_kind_identity_and_fingerprint
|
|
31
|
+
variants:
|
|
32
|
+
- id: opencode.plugin.agentera.lifecycle-20260710
|
|
33
|
+
resource_id: opencode.plugin.agentera
|
|
34
|
+
kind: file
|
|
35
|
+
size_bytes: 29253
|
|
36
|
+
sha256: b75c17e44340a30624071567a461a6a7dcf1a426bc9dc2881d813ac0e802a20a
|
|
37
|
+
provenance:
|
|
38
|
+
source_commit: aa33870df05d53745ebad5351b8a352b7dad7780
|
|
39
|
+
source_path: .opencode/plugins/agentera.js
|
|
40
|
+
transformation: None; the lifecycle installer used the exact source bytes.
|
|
41
|
+
verification: Git source has the declared size and SHA-256, and the historical lifecycle installer journal schema records per-install destination, file identity, and fingerprint.
|
|
42
|
+
boundary: A bounded official fingerprint is diagnostic evidence, not ownership. Automatic qualification additionally requires a current clean historical installer journal whose managed whole-resource record matches the exact destination, kind, identity, and fingerprint. The recovered 2026-08-23 npx-bundle copy has no matching ownership record and remains manual review, as do every other altered, unknown, non-regular, or unreadable resource.
|
|
19
43
|
accepted_host_evidence:
|
|
20
44
|
- host: codex
|
|
21
45
|
state: supported
|
|
@@ -248,6 +248,7 @@ conservative_routing:
|
|
|
248
248
|
- packages/cli/test/helpers/sourceSubprocess.ts
|
|
249
249
|
- packages/cli/test/helpers/runtimeBootstrapMatrix.ts
|
|
250
250
|
- packages/cli/test/helpers/preCutoverBootstrapDispatcher.mjs
|
|
251
|
+
- packages/cli/test/helpers/preCutoverBootstrapMissingSurfaceDispatcher.mjs
|
|
251
252
|
- packages/cli/test/helpers/runtimeProofCliBoundary.mjs
|
|
252
253
|
- packages/cli/test/integration/runtimeBootstrapMatrix.test.ts
|
|
253
254
|
- references/analysis/verification-policy.yaml
|
|
@@ -1147,6 +1147,8 @@ entity_target:
|
|
|
1147
1147
|
fixtures:
|
|
1148
1148
|
small: 100 valid entities distributed across every active entity_target.entities boundary
|
|
1149
1149
|
large: 1000 valid entities distributed across every active entity_target.entities boundary
|
|
1150
|
+
archive_small: 100 valid numbered progress archive entries
|
|
1151
|
+
archive_large: 1000 valid numbered progress archive entries
|
|
1150
1152
|
relationship_rule: every active entity_target.relationships declaration has at least one valid fixture edge
|
|
1151
1153
|
sampling:
|
|
1152
1154
|
repetitions: 5
|
|
@@ -1171,6 +1173,14 @@ entity_target:
|
|
|
1171
1173
|
max_latency_ms: 15000
|
|
1172
1174
|
max_heap_delta_bytes: 268435456
|
|
1173
1175
|
max_utf8_bytes: 32768
|
|
1176
|
+
archive_list_small:
|
|
1177
|
+
max_latency_ms: 5000
|
|
1178
|
+
max_heap_delta_bytes: 67108864
|
|
1179
|
+
max_utf8_bytes: 32768
|
|
1180
|
+
archive_list_large:
|
|
1181
|
+
max_latency_ms: 15000
|
|
1182
|
+
max_heap_delta_bytes: 268435456
|
|
1183
|
+
max_utf8_bytes: 32768
|
|
1174
1184
|
startup_small:
|
|
1175
1185
|
max_latency_ms: 5000
|
|
1176
1186
|
# Retain margin for supported Node 22 peak-GC variance while keeping
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "agentera.generatedBuildSource.v1",
|
|
3
|
-
"commit": "
|
|
4
|
-
"tree": "
|
|
5
|
-
"files":
|
|
6
|
-
"workingTreeSha256": "
|
|
7
|
-
"identitySha256": "
|
|
3
|
+
"commit": "3780e6727365095a4cf8cd265a9646fba4570593",
|
|
4
|
+
"tree": "ccb81233f9d1c79aa0b642d3b93771011a09ea89",
|
|
5
|
+
"files": 6908,
|
|
6
|
+
"workingTreeSha256": "16fc45b5e88a8ced49f2b84624a58dd63ccb85ebd34939260abc3b012a07b95e",
|
|
7
|
+
"identitySha256": "0857864ae6ee7d83e931d5049cb5386a1de05e04694fd9b28f400990bda9d147"
|
|
8
8
|
}
|
|
@@ -10,6 +10,8 @@ import { diagnoseCanonicalSkill } from "../../setup/sharedSkill.js";
|
|
|
10
10
|
import { diagnoseRetiredResources } from "../../upgrade/retiredResourceDiagnostics.js";
|
|
11
11
|
import { commandText } from "../../upgrade/upgradeCommands.js";
|
|
12
12
|
import { inspectTodoReconciliationState } from "../../state/todoReconciliationInspection.js";
|
|
13
|
+
import { classifyAutomaticRetirement } from "../../runtime/nativeResourceCleanup.js";
|
|
14
|
+
import { lifecycleOwnershipJournalPath } from "../../runtime/lifecycleOwnershipJournal.js";
|
|
13
15
|
const PLAIN_STATUS = {
|
|
14
16
|
pending: "ready to fix",
|
|
15
17
|
applied: "fixed",
|
|
@@ -47,12 +49,26 @@ function previewCommand(resource, context) {
|
|
|
47
49
|
function doctorRetiredResources(diagnosis, context) {
|
|
48
50
|
return {
|
|
49
51
|
...diagnosis,
|
|
50
|
-
resources: diagnosis.resources.map((resource) =>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
resources: diagnosis.resources.map((resource) => {
|
|
53
|
+
const qualification = classifyAutomaticRetirement(resource.id, resource.evidence.paths[0], lifecycleOwnershipJournalPath(context.installRoot));
|
|
54
|
+
if (qualification.qualification === "qualified") {
|
|
55
|
+
return {
|
|
56
|
+
id: resource.id,
|
|
57
|
+
status: "pending_automatic_removal",
|
|
58
|
+
evidence: resource.evidence,
|
|
59
|
+
next_action: commandText([
|
|
60
|
+
"npx", "-y", "agentera@next", "upgrade", "--channel", "development",
|
|
61
|
+
"--project", context.project, "--install-root", context.installRoot, "--dry-run",
|
|
62
|
+
]),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
id: resource.id,
|
|
67
|
+
status: "manual_review",
|
|
68
|
+
evidence: resource.evidence,
|
|
69
|
+
preview_command: previewCommand(resource, context),
|
|
70
|
+
};
|
|
71
|
+
}),
|
|
56
72
|
};
|
|
57
73
|
}
|
|
58
74
|
export function renderDoctorStatus(status, retiredResources) {
|
|
@@ -99,8 +115,19 @@ export function renderDoctorStatus(status, retiredResources) {
|
|
|
99
115
|
lines.push("");
|
|
100
116
|
lines.push("Retired native resources:");
|
|
101
117
|
for (const resource of resources) {
|
|
102
|
-
|
|
103
|
-
|
|
118
|
+
if (resource.status === "pending_automatic_removal") {
|
|
119
|
+
lines.push(` - pending automatic removal: ${String(resource.id)}`);
|
|
120
|
+
if (typeof resource.next_action === "string")
|
|
121
|
+
lines.push(` Next action: ${resource.next_action}`);
|
|
122
|
+
}
|
|
123
|
+
else if (resource.status === "manual_review") {
|
|
124
|
+
lines.push(` - manual review required: ${String(resource.id)}`);
|
|
125
|
+
if (typeof resource.preview_command === "string")
|
|
126
|
+
lines.push(` Preview: ${resource.preview_command}`);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
lines.push(` - ${plainStatus(String(resource.status))}: ${String(resource.id)}`);
|
|
130
|
+
}
|
|
104
131
|
}
|
|
105
132
|
}
|
|
106
133
|
if (status.status === APP_UP_TO_DATE) {
|
|
@@ -127,10 +154,14 @@ export function renderDoctorStatus(status, retiredResources) {
|
|
|
127
154
|
lines.push("");
|
|
128
155
|
lines.push("Next: run the reported TODO reconciliation preview, review its bounded effect, then use its exact apply_command.");
|
|
129
156
|
}
|
|
130
|
-
else if (resources.
|
|
157
|
+
else if (resources.some((resource) => resource.status === "manual_review")) {
|
|
131
158
|
lines.push("");
|
|
132
159
|
lines.push("Next: review each read-only retirement preview before any explicit cleanup.");
|
|
133
160
|
}
|
|
161
|
+
else if (resources.some((resource) => resource.status === "pending_automatic_removal")) {
|
|
162
|
+
lines.push("");
|
|
163
|
+
lines.push("Next: run the reported normal upgrade action.");
|
|
164
|
+
}
|
|
134
165
|
else {
|
|
135
166
|
lines.push("");
|
|
136
167
|
lines.push("Next: choose a safer Agentera directory, or use `--force` only after checking the directory is safe to replace.");
|
|
@@ -196,17 +227,30 @@ export function cmdDoctor(args, io = {}) {
|
|
|
196
227
|
resourceId: args.retiredResource ?? null,
|
|
197
228
|
});
|
|
198
229
|
const retiredResources = doctorRetiredResources(retiredDiagnosis, { home, project, installRoot });
|
|
199
|
-
|
|
230
|
+
const retiredResourceEntries = retiredResources.resources;
|
|
231
|
+
const manualReviewResources = retiredResourceEntries.filter((resource) => resource.status === "manual_review");
|
|
232
|
+
const pendingAutomaticResources = retiredResourceEntries.filter((resource) => resource.status === "pending_automatic_removal");
|
|
233
|
+
if (manualReviewResources.length > 0) {
|
|
200
234
|
status.signals.push({
|
|
201
235
|
status: APP_MANUAL_REVIEW_NEEDED,
|
|
202
236
|
kind: "retired_native_resources",
|
|
203
237
|
message: "retired native resource candidates need ownership review before cleanup",
|
|
204
|
-
resourceIds:
|
|
238
|
+
resourceIds: manualReviewResources.map((resource) => resource.id),
|
|
205
239
|
omittedResourceCount: retiredDiagnosis.omittedResourceCount,
|
|
206
240
|
});
|
|
207
241
|
if (status.status === APP_UP_TO_DATE)
|
|
208
242
|
status.status = APP_MANUAL_REVIEW_NEEDED;
|
|
209
243
|
}
|
|
244
|
+
if (pendingAutomaticResources.length > 0) {
|
|
245
|
+
status.signals.push({
|
|
246
|
+
status: APP_REPAIR_NEEDED,
|
|
247
|
+
kind: "retired_native_resources_pending_automatic_removal",
|
|
248
|
+
message: "proven retired OpenCode plugin is pending automatic removal by normal upgrade",
|
|
249
|
+
resourceIds: pendingAutomaticResources.map((resource) => resource.id),
|
|
250
|
+
});
|
|
251
|
+
if (status.status === APP_UP_TO_DATE)
|
|
252
|
+
status.status = APP_REPAIR_NEEDED;
|
|
253
|
+
}
|
|
210
254
|
const sharedSkill = diagnoseCanonicalSkill(home);
|
|
211
255
|
let smokeReport = null;
|
|
212
256
|
if (args.smoke) {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
3
4
|
import { loadYamlMapping } from "../core/yaml.js";
|
|
4
5
|
import { resolveSourceRoot } from "../core/sourceRoot.js";
|
|
5
|
-
import { LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH, LIFECYCLE_MANUAL_REVIEW_GUIDANCE, applyLifecycleOperations, createLifecycleOwnershipManifest, emptyLifecycleOwnershipLedger, planLifecycleOperations, validateLifecycleOwnershipLedger, } from "./lifecycleOperations.js";
|
|
6
|
+
import { LIFECYCLE_LEDGER_SCHEMA, LIFECYCLE_OPERATION_CONTRACT_RELATIVE_PATH, LIFECYCLE_MANUAL_REVIEW_GUIDANCE, applyLifecycleOperations, createLifecycleOwnershipManifest, emptyLifecycleOwnershipLedger, planLifecycleOperations, validateLifecycleOwnershipLedger, } from "./lifecycleOperations.js";
|
|
7
|
+
import { LIFECYCLE_OWNERSHIP_JOURNAL_SCHEMA, readLifecycleOwnershipJournal, } from "./lifecycleOwnershipJournal.js";
|
|
6
8
|
import { LIFECYCLE_AUTHORITY_RELATIVE_PATH, NATIVE_RESOURCE_CLEANUP_CONTRACT_RELATIVE_PATH, loadLifecycleAuthority, } from "./lifecycleAuthority.js";
|
|
7
9
|
import { loadRuntimeLifecycleAdapterContract } from "./lifecycleAdapterContract.js";
|
|
8
10
|
import { loadLifecycleOperationContract } from "./lifecycleOperationContract.js";
|
|
@@ -79,6 +81,37 @@ export function validateNativeResourceCleanupContractData(value) {
|
|
|
79
81
|
if (!forbidden.includes(evidence))
|
|
80
82
|
errors.push(`policy must reject ${evidence} as ownership evidence`);
|
|
81
83
|
}
|
|
84
|
+
const automatic = isMapping(value.automatic_retirement) ? value.automatic_retirement : {};
|
|
85
|
+
const enabledResourceIds = stringList(automatic.enabled_resource_ids);
|
|
86
|
+
const ownershipEvidence = isMapping(automatic.ownership_evidence) ? automatic.ownership_evidence : {};
|
|
87
|
+
const variants = Array.isArray(automatic.variants) ? automatic.variants : [];
|
|
88
|
+
if (enabledResourceIds.length !== 1 || enabledResourceIds[0] !== "opencode.plugin.agentera"
|
|
89
|
+
|| automatic.qualification !== "bounded_sha256_and_matching_installer_ledger"
|
|
90
|
+
|| automatic.result_without_match !== "manual_review") {
|
|
91
|
+
errors.push("automatic_retirement must enable only opencode.plugin.agentera and fail closed");
|
|
92
|
+
}
|
|
93
|
+
if (ownershipEvidence.journal_schema !== LIFECYCLE_OWNERSHIP_JOURNAL_SCHEMA
|
|
94
|
+
|| ownershipEvidence.ledger_schema !== LIFECYCLE_LEDGER_SCHEMA
|
|
95
|
+
|| ownershipEvidence.ledger_resource_id !== "opencode.plugin"
|
|
96
|
+
|| ownershipEvidence.status !== "managed"
|
|
97
|
+
|| ownershipEvidence.scope !== "whole"
|
|
98
|
+
|| ownershipEvidence.match !== "exact_destination_kind_identity_and_fingerprint") {
|
|
99
|
+
errors.push("automatic_retirement must require the matching historical installer ownership journal");
|
|
100
|
+
}
|
|
101
|
+
if (variants.length === 0 || variants.some((variant) => !isMapping(variant)
|
|
102
|
+
|| !requiredString(variant, "id")
|
|
103
|
+
|| variant.resource_id !== "opencode.plugin.agentera"
|
|
104
|
+
|| variant.kind !== "file"
|
|
105
|
+
|| !Number.isInteger(variant.size_bytes)
|
|
106
|
+
|| typeof variant.sha256 !== "string"
|
|
107
|
+
|| !/^[a-f0-9]{64}$/.test(variant.sha256)
|
|
108
|
+
|| !isMapping(variant.provenance)
|
|
109
|
+
|| !requiredString(variant.provenance, "source_commit")
|
|
110
|
+
|| !requiredString(variant.provenance, "source_path")
|
|
111
|
+
|| !requiredString(variant.provenance, "transformation")
|
|
112
|
+
|| !requiredString(variant.provenance, "verification"))) {
|
|
113
|
+
errors.push("automatic_retirement variants must have bounded positive provenance");
|
|
114
|
+
}
|
|
82
115
|
const hosts = Array.isArray(value.hosts) ? value.hosts : [];
|
|
83
116
|
const expectedHosts = {
|
|
84
117
|
codex: "supported",
|
|
@@ -316,8 +349,76 @@ export function loadNativeResourceCleanupContract(contractPath = path.join(resol
|
|
|
316
349
|
destination: unit.destination,
|
|
317
350
|
key: unit.key,
|
|
318
351
|
})),
|
|
352
|
+
automaticRetirement: data.automatic_retirement.variants.map((variant) => ({
|
|
353
|
+
id: variant.id,
|
|
354
|
+
resourceId: variant.resource_id,
|
|
355
|
+
ownershipResourceId: data.automatic_retirement.ownership_evidence.ledger_resource_id,
|
|
356
|
+
kind: "file",
|
|
357
|
+
sizeBytes: variant.size_bytes,
|
|
358
|
+
sha256: variant.sha256,
|
|
359
|
+
})),
|
|
319
360
|
};
|
|
320
361
|
}
|
|
362
|
+
export function classifyAutomaticRetirement(resourceId, destination, ownershipJournalPath = null, contract = loadNativeResourceCleanupContract()) {
|
|
363
|
+
const variants = contract.automaticRetirement.filter((variant) => variant.resourceId === resourceId);
|
|
364
|
+
if (variants.length === 0)
|
|
365
|
+
return { qualification: "manual_review", variantId: null, reason: "resource_not_enabled" };
|
|
366
|
+
let stat;
|
|
367
|
+
try {
|
|
368
|
+
stat = fs.lstatSync(destination, { bigint: true });
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
return { qualification: "manual_review", variantId: null, reason: "unreadable" };
|
|
372
|
+
}
|
|
373
|
+
if (!stat.isFile())
|
|
374
|
+
return { qualification: "manual_review", variantId: null, reason: "not_regular_file" };
|
|
375
|
+
let content;
|
|
376
|
+
let descriptor = null;
|
|
377
|
+
try {
|
|
378
|
+
descriptor = fs.openSync(destination, fs.constants.O_RDONLY | (fs.constants.O_NOFOLLOW ?? 0));
|
|
379
|
+
const opened = fs.fstatSync(descriptor, { bigint: true });
|
|
380
|
+
if (!opened.isFile() || opened.dev !== stat.dev || opened.ino !== stat.ino) {
|
|
381
|
+
return { qualification: "manual_review", variantId: null, reason: "unreadable" };
|
|
382
|
+
}
|
|
383
|
+
content = fs.readFileSync(descriptor);
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
return { qualification: "manual_review", variantId: null, reason: "unreadable" };
|
|
387
|
+
}
|
|
388
|
+
finally {
|
|
389
|
+
if (descriptor !== null)
|
|
390
|
+
fs.closeSync(descriptor);
|
|
391
|
+
}
|
|
392
|
+
const digest = createHash("sha256").update(content).digest("hex");
|
|
393
|
+
const variant = variants.find((item) => item.sizeBytes === content.length && item.sha256 === digest);
|
|
394
|
+
if (!variant)
|
|
395
|
+
return { qualification: "manual_review", variantId: null, reason: "unproven_content" };
|
|
396
|
+
if (!ownershipJournalPath) {
|
|
397
|
+
return { qualification: "manual_review", variantId: variant.id, reason: "ownership_evidence_missing" };
|
|
398
|
+
}
|
|
399
|
+
let journal;
|
|
400
|
+
try {
|
|
401
|
+
journal = readLifecycleOwnershipJournal(ownershipJournalPath);
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
return { qualification: "manual_review", variantId: variant.id, reason: "ownership_evidence_mismatch" };
|
|
405
|
+
}
|
|
406
|
+
if (journal.state === "absent") {
|
|
407
|
+
return { qualification: "manual_review", variantId: variant.id, reason: "ownership_evidence_missing" };
|
|
408
|
+
}
|
|
409
|
+
const destinationPath = path.resolve(destination);
|
|
410
|
+
const record = journal.state === "clean" && journal.ledger.records.find((item) => item.resourceId === variant.ownershipResourceId
|
|
411
|
+
&& item.destination === destinationPath
|
|
412
|
+
&& item.kind === "file"
|
|
413
|
+
&& item.scope === "whole"
|
|
414
|
+
&& item.status === "managed"
|
|
415
|
+
&& item.fingerprint === `sha256:${digest}`
|
|
416
|
+
&& item.identity?.device === stat.dev.toString()
|
|
417
|
+
&& item.identity.inode === stat.ino.toString());
|
|
418
|
+
return record
|
|
419
|
+
? { qualification: "qualified", variantId: variant.id, reason: "proven_variant_and_ownership" }
|
|
420
|
+
: { qualification: "manual_review", variantId: variant.id, reason: "ownership_evidence_mismatch" };
|
|
421
|
+
}
|
|
321
422
|
export function nativeResourceCleanupIds(contract = loadNativeResourceCleanupContract()) {
|
|
322
423
|
return contract.resources.map((resource) => resource.id);
|
|
323
424
|
}
|
|
@@ -405,7 +506,21 @@ function canonicalizeHistoricalOwnershipIds(ledger, resource) {
|
|
|
405
506
|
}
|
|
406
507
|
export function previewNativeResourceCleanup(opts) {
|
|
407
508
|
const contract = opts.contract ?? loadNativeResourceCleanupContract();
|
|
408
|
-
const
|
|
509
|
+
const automatic = opts.automaticRetirement
|
|
510
|
+
&& contract.automaticRetirement.some(({ resourceId }) => resourceId === opts.resourceId)
|
|
511
|
+
&& contract.diagnosticResources.find(({ id }) => id === opts.resourceId);
|
|
512
|
+
const resource = resolveNativeResourceCleanupId(opts.resourceId, contract) ?? (automatic ? {
|
|
513
|
+
id: opts.resourceId,
|
|
514
|
+
historicalIds: [contract.automaticRetirement.find(({ resourceId }) => resourceId === opts.resourceId).ownershipResourceId],
|
|
515
|
+
host: "opencode",
|
|
516
|
+
hostSupportStatus: "supported",
|
|
517
|
+
kind: "file",
|
|
518
|
+
destination: automatic.destinations[0],
|
|
519
|
+
ledgerStatus: "managed",
|
|
520
|
+
durableProof: "bounded automatic retirement",
|
|
521
|
+
neverTouch: [],
|
|
522
|
+
safetyNote: "automatic retirement requires bounded content and installer ownership proof",
|
|
523
|
+
} : undefined);
|
|
409
524
|
if (!resource)
|
|
410
525
|
throw new Error(`unknown native Agentera resource cleanup id: ${opts.resourceId}`);
|
|
411
526
|
const operations = [{
|
|
@@ -11,7 +11,6 @@ import { healthEntityViolations } from "./healthEntityValidation.js";
|
|
|
11
11
|
import { detectStateModeBinding } from "./stateMode.js";
|
|
12
12
|
import { summaryMigrationProvenanceDeclaration, summaryMigrationProvenanceViolations } from "./summaryMigrationProvenance.js";
|
|
13
13
|
import { validateCompactedSummarySourceRowAuthority } from "./summarySourceRowAuthority.js";
|
|
14
|
-
import { acquireWriterLock } from "./write/lock.js";
|
|
15
14
|
import { planTaskRecordViolations } from "./write/planEvaluation.js";
|
|
16
15
|
import { planLineageIssues } from "./planLineageValidation.js";
|
|
17
16
|
import { todoDocsRecordViolations } from "./todoDocsEntityValidation.js";
|
|
@@ -19,8 +18,9 @@ import { applyGlossaryCaveatLifecycleValidation, validateProgressGlossaryCaveat
|
|
|
19
18
|
import { progressPublicationOrderViolations } from "./progressPublicationOrder.js";
|
|
20
19
|
import { loadStateStorageAuthority } from "./stateStorageAuthority.js";
|
|
21
20
|
import { loadEntityGlossaryAuthority } from "./entityGlossaryAuthority.js";
|
|
21
|
+
import { withEntityWriterLock } from "./entityWriterLock.js";
|
|
22
|
+
export { withEntityWriterLock };
|
|
22
23
|
const MAX_DIAGNOSTICS = 100;
|
|
23
|
-
const heldEntityWriterLocks = new Set();
|
|
24
24
|
export function exactDiscoveredEntityBytes(entity) { if (entity.discoveredBytes === null)
|
|
25
25
|
throw new Error(`entity '${entity.relativePath}' has no exact discovery-byte baseline`); return entity.discoveredBytes; }
|
|
26
26
|
export function entityArtifactValues(sourceRoot) {
|
|
@@ -811,22 +811,6 @@ function publishEntityLocked(request, model, context) {
|
|
|
811
811
|
}
|
|
812
812
|
return { id: request.id, artifact: request.artifact, boundary: request.boundary, path: publicTarget, replay: false, publishedIdentity };
|
|
813
813
|
}
|
|
814
|
-
export function withEntityWriterLock(context, run) {
|
|
815
|
-
context.assertValid();
|
|
816
|
-
const root = context.pinnedPath();
|
|
817
|
-
if (heldEntityWriterLocks.has(root))
|
|
818
|
-
return run();
|
|
819
|
-
const lock = acquireWriterLock(root, 2000);
|
|
820
|
-
try {
|
|
821
|
-
heldEntityWriterLocks.add(root);
|
|
822
|
-
context.assertValid();
|
|
823
|
-
return run();
|
|
824
|
-
}
|
|
825
|
-
finally {
|
|
826
|
-
heldEntityWriterLocks.delete(root);
|
|
827
|
-
lock.release();
|
|
828
|
-
}
|
|
829
|
-
}
|
|
830
814
|
export function publishEntityUnderLock(request) {
|
|
831
815
|
if (!request.publicationContext)
|
|
832
816
|
throw new Error("locked entity publication requires a publication context");
|
|
@@ -868,7 +852,18 @@ function withPublicationContext(request, run) {
|
|
|
868
852
|
}
|
|
869
853
|
}
|
|
870
854
|
function publishWithContext(request, model, context) {
|
|
871
|
-
|
|
855
|
+
try {
|
|
856
|
+
return withEntityWriterLock(context, () => publishEntityLocked(request, model, context));
|
|
857
|
+
}
|
|
858
|
+
catch (error) {
|
|
859
|
+
if (error instanceof Error && error.message.startsWith("writer lock timeout at ")) {
|
|
860
|
+
const duplicate = discoverEntities(context.pinnedPath(), request.sourceRoot).entities.find(({ id, artifact, boundary }) => id === request.id && (artifact !== request.artifact || boundary !== request.boundary));
|
|
861
|
+
if (duplicate) {
|
|
862
|
+
throw new Error(`entity ID '${request.id}' already exists at '${duplicate.relativePath}' owned by boundary '${duplicate.boundary}'; allocate a new project-wide ID`);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
throw error;
|
|
866
|
+
}
|
|
872
867
|
}
|
|
873
868
|
export function publishEntity(request) {
|
|
874
869
|
const model = authority(request.sourceRoot);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { acquireWriterLock } from "./write/lock.js";
|
|
2
|
+
const heldEntityWriterLocks = new Set();
|
|
3
|
+
export function withEntityWriterLock(context, run) {
|
|
4
|
+
context.assertValid();
|
|
5
|
+
const root = context.pinnedPath();
|
|
6
|
+
if (heldEntityWriterLocks.has(root))
|
|
7
|
+
return run();
|
|
8
|
+
const lock = acquireWriterLock(root, 2000);
|
|
9
|
+
try {
|
|
10
|
+
heldEntityWriterLocks.add(root);
|
|
11
|
+
context.assertValid();
|
|
12
|
+
return run();
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
heldEntityWriterLocks.delete(root);
|
|
16
|
+
lock.release();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { appendLifecycleOwnershipJournal, lifecycleOwnershipJournalPath, readLifecycleOwnershipJournal, } from "../runtime/lifecycleOwnershipJournal.js";
|
|
2
2
|
import { secureLifecycleRemovalAvailable } from "../runtime/lifecyclePublication.js";
|
|
3
|
-
import { applyNativeResourceCleanup, previewNativeResourceCleanup, } from "../runtime/nativeResourceCleanup.js";
|
|
3
|
+
import { applyNativeResourceCleanup, classifyAutomaticRetirement, previewNativeResourceCleanup, } from "../runtime/nativeResourceCleanup.js";
|
|
4
4
|
export const LIFECYCLE_UPGRADE_SCHEMA = "agentera.lifecycleUpgrade.v1";
|
|
5
5
|
function emptySummary() {
|
|
6
6
|
return {
|
|
@@ -66,7 +66,20 @@ export function runLifecycleUpgrade(args, options = {}) {
|
|
|
66
66
|
resourceId: args.resourceCleanup,
|
|
67
67
|
home: args.home,
|
|
68
68
|
ledger: journal.ledger,
|
|
69
|
+
automaticRetirement: args.automaticRetirement,
|
|
69
70
|
});
|
|
71
|
+
if (args.automaticRetirement && preview.plan.operations[0]?.action !== "noop") {
|
|
72
|
+
const qualification = classifyAutomaticRetirement(args.resourceCleanup, preview.plan.operations[0].destination, journal.path);
|
|
73
|
+
if (qualification.qualification !== "qualified") {
|
|
74
|
+
const reason = `automatic retirement requires manual review: ${qualification.reason}`;
|
|
75
|
+
preview = {
|
|
76
|
+
...preview,
|
|
77
|
+
ledgerAuthorization: "blocked",
|
|
78
|
+
ledgerDiagnostics: [...preview.ledgerDiagnostics, reason],
|
|
79
|
+
plan: blockedPlan(preview.plan, reason),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
70
83
|
if (journalBlocksMutation(journal)) {
|
|
71
84
|
const reason = journalBlocker(journal);
|
|
72
85
|
preview = {
|
|
@@ -79,7 +92,7 @@ export function runLifecycleUpgrade(args, options = {}) {
|
|
|
79
92
|
let outputJournal = journal;
|
|
80
93
|
let nativeResourceCleanup = preview;
|
|
81
94
|
let cleanupSummary = previewSummary(preview);
|
|
82
|
-
if (args.apply && !journalBlocksMutation(journal)) {
|
|
95
|
+
if (args.apply && !journalBlocksMutation(journal) && preview.ledgerAuthorization !== "blocked") {
|
|
83
96
|
nativeResourceCleanup = applyNativeResourceCleanup(preview, {
|
|
84
97
|
...options,
|
|
85
98
|
approved: true,
|
|
@@ -327,13 +327,14 @@ function buildUpgradePlanUnlocked(args, home, project, activeUpgradeLockPaths) {
|
|
|
327
327
|
if (migrationPreview && (entityAuthorityActive || (args.yes && entityCutoverPending))) {
|
|
328
328
|
delegatePlanLifecycleToEntityCutover(migrationPreview.artifacts);
|
|
329
329
|
}
|
|
330
|
-
const lifecycleArgs =
|
|
330
|
+
const lifecycleArgs = {
|
|
331
331
|
home,
|
|
332
332
|
appHome: installRoot,
|
|
333
333
|
apply: false,
|
|
334
|
-
resourceCleanup:
|
|
335
|
-
|
|
336
|
-
|
|
334
|
+
resourceCleanup: "opencode.plugin.agentera",
|
|
335
|
+
automaticRetirement: true,
|
|
336
|
+
};
|
|
337
|
+
let lifecycle = runLifecycleUpgrade(lifecycleArgs);
|
|
337
338
|
const plannedPhases = [
|
|
338
339
|
...phases,
|
|
339
340
|
...(migrationPreview && phaseFilter.has("artifacts") ? [migrationPhaseToOrchestrator(migrationPreview.artifacts)] : []),
|
|
@@ -484,6 +485,9 @@ export function renderUpgradePlan(plan) {
|
|
|
484
485
|
lines.push(` scope: ownership-proven native Agentera resource ${plan.lifecycle.nativeResourceCleanup.resourceId}; unrelated user-owned data excluded`);
|
|
485
486
|
const cleanup = plan.lifecycle.cleanupSummary;
|
|
486
487
|
lines.push(` counts: pending=${cleanup.pending}, applied=${cleanup.applied}, noop=${cleanup.noop}, blocked=${cleanup.blocked_unowned + cleanup.action_required}`);
|
|
488
|
+
if (cleanup.applied > 0 && plan.lifecycle.nativeResourceCleanup.resourceId === "opencode.plugin.agentera") {
|
|
489
|
+
lines.push(" Next: restart OpenCode to finish removing the retired plugin.");
|
|
490
|
+
}
|
|
487
491
|
}
|
|
488
492
|
if (plan.mode === "plan" && plan.summary.pending > 0 && plan.applyCommand) {
|
|
489
493
|
lines.push("");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentera",
|
|
3
|
-
"version": "3.0.0-dev.
|
|
3
|
+
"version": "3.0.0-dev.81",
|
|
4
4
|
"description": "One CLI, many capabilities: project state, artifact validation, and capability routing for AI coding agents",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentera",
|
|
@@ -80,6 +80,6 @@
|
|
|
80
80
|
},
|
|
81
81
|
"agentera": {
|
|
82
82
|
"suiteVersion": "3.0.0",
|
|
83
|
-
"gitRef": "
|
|
83
|
+
"gitRef": "3780e6727365095a4cf8cd265a9646fba4570593"
|
|
84
84
|
}
|
|
85
85
|
}
|