@exellix/ai-tasks 10.1.0 → 10.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,472 +1,490 @@
1
- # Changelog
2
-
3
- All notable changes to `@exellix/ai-tasks` are documented here.
4
-
5
- The published **npm version** always matches **`version`** in [`package.json`](package.json). If this file skips a semver, treat [`BREAKING-CHANGES.md`](BREAKING-CHANGES.md) and [`RUNTASK_REQUEST.md`](RUNTASK_REQUEST.md) as the source of truth for cross-version upgrades.
6
-
7
- ## [10.1.0] - 2026-06-24
8
-
9
- ### Added
10
-
11
- - **AT-CR-001:** Dual-write v2 `executionTrace` indexes during node-plan execution — `unitExecutions`, `modelInvocations`, and `nodeExecutions` stay in sync with `unit.*` / `model.invocation.*` events when `RunTaskRequest.executionTrace` is present.
12
- - Lifecycle helpers in [`src/node-execution/traceLifecycle.ts`](src/node-execution/traceLifecycle.ts) (GTF-FR-001-compatible API; delegates event append to `@x12i/graphenix-trace-format`).
13
- - Observation sink for PRE / MAIN / POST plan units → gateway `usage` / `cost` on `modelInvocations` when available.
14
- - Tests: [`test/trace/executionTraceDualWrite.test.ts`](test/trace/executionTraceDualWrite.test.ts) (T1–T6).
15
-
16
- ### Changed
17
-
18
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.10.0** (bundled with AT-CR-001).
19
- - Requires `@x12i/graphenix-trace-format` **^2.10.0** (index dual-write; upstream GTF-FR-001 export planned).
20
-
21
- ## [10.0.13] - 2026-06-20
22
-
23
- ### Changed
24
-
25
- - **`@exellix/ai-skills`** **^6.12.5** (graphenix 2.7.3 + catalox 5.9.8 train).
26
- - **`@x12i/catalox`** / **`@x12i/catalox-contracts`** **^5.9.8**.
27
-
28
- ## [10.0.12] - 2026-06-20
29
-
30
- ### Changed
31
-
32
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.7.3** (full format suite train).
33
-
34
- ## [10.0.11] - 2026-06-20
35
-
36
- ### Fixed
37
-
38
- - **`@exellix/fact-guard-*` dependencies:** publish semver **`^1.0.1`** in `dependencies` (10.0.10 accidentally shipped **`file:../fact-guard/...`** in `dependencies`, which breaks installs outside this monorepo).
39
- - **`prepublishOnly`:** fail fast if `file:` / `link:` / `workspace:` specs remain in `package.json` at publish time.
40
-
41
- ### Changed
42
-
43
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.7.2** (compiler emits `webQueryTemplate` on `webScope` units; legacy `webScoping` rejected on plans).
44
- - **`@exellix/ai-skills`** **^6.12.4** (graphenix 2.7.2 train).
45
- - **Web scope validation:** enabled `webScope` PRE units require non-empty **`unitParams.webQueryTemplate`** (or `webQueryTemplates[]`); rejects legacy **`webScoping`** / NARRIX question fallbacks on unit params (`LEGACY_WEB_SCOPE_UNIT_PARAMS`, `WEB_QUERY_TEMPLATE_REQUIRED`, `WEB_QUERY_TEMPLATE_UNRESOLVED`).
46
-
47
- ## [10.0.10] - 2026-06-20
48
-
49
- ### Changed
50
-
51
- - **Web scoping:** migrate from **`@exellix/narrix-web-scoper`** to published **`@x12i/web-scoper@^1.1.1`**. New adapter module **`src/web-scope/`** compiles graph/task input to **`{ question, record?, options? }`** or **`searchMany`** packs; **`executionMemory.webContext`** uses **`{ ok, context?, error? }`** (replaces legacy **`available`**).
52
- - **Standalone PRE `webScope` unit:** playground and Graphenix plans invoke the same adapter via **`unitParams.enableWebScope`** + **`unitParams.options`**.
53
- - **Docs:** README, RUNTASK_REQUEST, and **`documenations/web-scoping-in-ai-tasks.md`** updated for the new contract.
54
-
55
- ### Removed
56
-
57
- - Dependency on **`@exellix/narrix-web-scoper`**. Legacy **`narrix.webScoping`** / template fields are still mapped at invoke time where supported.
58
-
59
- ## [10.0.9] - 2026-06-18
60
-
61
- ### Changed
62
-
63
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.7.0** (fact-guard schema/validation/compiler train; optional `unitParams.factGuard` fully validated upstream).
64
- - **`@exellix/ai-skills`** **^6.12.3** (graphenix 2.7.0 train).
65
-
66
- ## [10.0.8] - 2026-06-18
67
-
68
- ### Changed
69
-
70
- - **`@exellix/fact-guard-*`** **^1.0.0** re-scoped from `@x12i` to **`@exellix`** (npm publish train).
71
- - **`@exellix/xynthesis`** **^4.8.4**.
72
-
73
- ## [10.0.7] - 2026-06-18
74
-
75
- ### Changed
76
-
77
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.6.0** (optional `unitParams.factGuard` on sub-action units; validates against graphenix `FactGuardStepConfig`).
78
- - **`@exellix/ai-skills`** **^6.12.2** (graphenix 2.6.0 train).
79
- - **`@exellix/fact-guard-*`** **^1.0.0** (npm semver; was monorepo `file:` link).
80
-
81
- ### Added
82
-
83
- - Node-plan validation tests for graphenix 2.6.0 fact-guard golden fixtures (`node-synthesis-fact-guard-*`, `node-polish-fact-guard-enabled`, `node-audit-fact-guard-nested`).
84
-
85
- ## [10.0.6] - 2026-06-17
86
-
87
- ### Added
88
-
89
- - **Fact-guard sub-actions (optional):** optional atom integrity checks on PRE synthesis, POST audit/polish/scoping, and execution-strategy planner/optimizer hops via **`@exellix/fact-guard-*` ^1.0.0**. Disabled by default (`factGuard.enabled: false` or absent = unchanged behavior). Kill-switch: **`FACT_GUARD_DISABLED=1`**. MAIN **`runSkill`** path unchanged.
90
- - **`FactGuardStepConfig`** on `SynthesisConfig`, `AuditConfig`, `PolishConfig`, `ExecutionStrategyInvocation`, and `aiScopingOptions`.
91
- - **`npm run test:fact-guard`** — integration tests (mocked LLM).
92
-
93
- ### Changed
94
-
95
- - **`@exellix/xynthesis`** **^4.8.3** (fact-guard passthrough on `executeXynthesisAction`).
96
-
97
- ## [10.0.5] - 2026-06-17
98
-
99
- ### Changed
100
-
101
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.5.0** (CRS-FRS-003 train; jobMemory.context authoring preserved upstream).
102
- - **`@exellix/ai-skills`** **^6.12.1** — consumes graphenix 2.5.0 train.
103
-
104
- ## [10.0.4] - 2026-06-15
105
-
106
- ### Changed
107
-
108
- - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.4.0** (suite train bump from 2.3.0).
109
- - **`@exellix/ai-skills`** **^6.12.0** consumes graphenix 2.4.0 train.
110
-
111
- ## [10.0.2] - 2026-06-14
112
-
113
- ### Added
114
-
115
- - **Graphenix 2.1.0 alignment:** `@x12i/graphenix-plan-format` and `@x12i/graphenix-executable-contracts` **^2.1.0** — rejects plans with `unitParams.synthesisInputStrategy` (`LEGACY_SYNTHESIS_INPUT_STRATEGY_ON_PLAN`).
116
- - **`resolveSynthesisContextStrategyKey`** — PRE synthesis template key from skill catalog (`@exellix/ai-skills` **^6.11.0**); path-driven source material via `invokeContract.reads` / `memoryPaths`.
117
- - Validation test for legacy synthesis field on compiled plans.
118
-
119
- ### Changed
120
-
121
- - **`synthesisConfigFromUnit`** strips `unitParams.synthesisInputStrategy` from plan wire; no longer defaults plan enum to `policy`.
122
- - Wire fixture `graph-engine-pre-synthesis.json` — path-only synthesis unit (no `synthesisInputStrategy`).
123
- - **Docs:** README / RUNTASK_REQUEST — skill-catalog-only template key; graphenix **2.1.0** deps.
124
-
125
- ## [10.0.1] - 2026-06-13
126
-
127
- ### Added
128
-
129
- - **Graphenix 2.0.3 alignment:** `@x12i/graphenix-executable-contracts` and `@x12i/graphenix-plan-format` **^2.0.3** — orchestration strategy registry (`plan`, `split`, `merge`, `pick-best`, `webScope`), path-driven synthesis units (`invokeContract.reads`).
130
- - Golden tests for graphenix plan fixtures: `node-synthesis-execution-memory-only`, `node-split-merge`, `node-web-scope-standalone`.
131
- - **Synthesis path bridge:** `synthesisConfigFromUnit` copies `invokeContract.reads` → `memoryPaths` when omitted; defaults `synthesisInputStrategy` to `policy` for path-driven plans.
132
-
133
- ### Changed
134
-
135
- - Graph authoring fixtures: removed deprecated `preInputStrategy` from `aiTaskStrategies`.
136
- - Wire fixture `graph-engine-pre-synthesis.json` aligned with graphenix 2.0.3 compile output (`reads`: `input`, `executionMemory`).
137
- - **Docs:** README Graphenix 10.x section; downstream [graph-model-change-2026-06-13.md](../temp/downstream/graph-model-change-2026-06-13.md).
138
-
139
- ## [10.0.0] - 2026-06-13
140
-
141
- ### Breaking
142
-
143
- - **Removed** `taskConfiguration` and `executionPipeline` from `RunTaskRequest` — use frozen `nodePlan` only.
144
- - **Removed** compile pipeline (`src/compile/*`, `taskConfigurationCompileError`).
145
-
146
- ### Added
147
-
148
- - **PRE synthesis wiring:** `resolveRawTemplate(role: synthesisContext, strategyKey)` via `@exellix/ai-skills` **^6.10.0**.
149
- - **PRE/POST orchestration runtime:** `externalPreUtility` (`plan`, `split`, `webScope`), `externalPostUtility` (`merge`, `pick-best`), multi-shard MAIN + FuncX fan-in.
150
- - **Web scope:** Narrix preprocessor `enableWebScope` + standalone `webScope` unit.
151
- - **Strategy catalogs:** synthesis-input, pre/post orchestration (publish via `npm run publish:task-strategies`).
152
- - **nodePlan audit parity:** real `reRunMain` + synthesized `contextMarkdown`.
153
-
154
- ### Changed
155
-
156
- - **`@exellix/ai-skills`** **^6.10.0** (support templates + single `professional-answer` Catalox seed).
157
-
158
- ## [9.1.1] - 2026-06-13
159
-
160
- ### Changed
161
-
162
- - **Run-task handoff closure:** Stale docs updated — node template scope is `nodePlan.invokeContract.taskVariable`, not `executionMemory.taskVariables`.
163
- - **`@exellix/ai-skills`** **^6.9.1** (WM source-of-truth alignment).
164
-
165
- ### Added
166
-
167
- - Golden parity tests for all **7** node plan fixtures (`node-post-audit`, `node-input-synthesis-profile` added to `golden-fixtures.test.ts`).
168
-
169
- ## [9.1.0] - 2026-06-09
170
-
171
- ### Changed
172
-
173
- - **Graphenix 2.1.0 alignment:** Accept parent plan format `"executable-plan"` (v2) and trace format `"execution-trace"` (v2).
174
- - **Snapshot isolation:** `overlayUnitModelOnRequest` ignores concrete wire ids in `resolvedInvocationSnapshot.modelId`, preferring authored `modelSelection` (CR-1.3).
175
-
176
- ## [9.0.5] - 2026-06-08
177
-
178
- ### Changed
179
-
180
- - **`@x12i/funcx`** **^4.9.5** (direct dependency + npm override)aligns PRE/POST xynthesis with funcx catalog gate via **`@x12i/ai-profiles`** (requires funcx ≥ 4.9.5; fixes subnet-style PRE `Unknown model "google/gemini-2.5-flash-lite"`).
181
- - **`@x12i/ai-profiles`** **^3.4.0**, **`@exellix/xynthesis`** **^4.6.5** (publish **4.6.6** for funcx bump).
182
-
183
- ## [9.0.1] - 2026-06-07
184
-
185
- ### Changed
186
-
187
- - Graphenix dependency alignment with latest CP release train: **`graphenix-plan-format`** and **`graphenix-trace-format`** @ **^1.1.1**; dev **`graphenix-authoring-format`** @ **^1.2.1**, **`graphenix-plan-compiler`** @ **^1.1.1**. **`graphenix-executable-contracts`** remains **^1.1.0**.
188
- - **`npm` overrides:** Pin transitive **`@x12i/funcx`** to **^4.6.0** (aligns with **`@exellix/xynthesis` ≥ 4.6.2** and **`@x12i/logxer` ^4.6.0**).
189
-
190
- ## [9.0.0] - 2026-06-07
191
-
192
- ### Changed (breaking)
193
-
194
- - **Graphenix node execution v2.1:** `runTask()` requires **`nodePlan`** (`NodeExecutionPlan`); production path is **`executeNodeFromPlan`** (unit loop + per-unit model selection). Legacy **`executionPipeline`** / **`taskConfiguration`** compile is **off the hot path** (still exported for migration tooling).
195
- - **Forbidden wire fields** when `nodePlan` is set: root **`modelConfig`**, **`executionPipeline`**, **`taskConfiguration`** — model slots come from `nodePlan.executionUnits[].modelSelection`.
196
- - **`executionTrace`** (optional): graphenix v2 trace append (`unit.*`, `model.invocation.*`).
197
-
198
- ### Added
199
-
200
- - **`src/node-execution/`** — unit dispatch, Narrix units, PRE/MAIN/POST handlers, trace bridge.
201
- - Dependencies: **`@x12i/graphenix-executable-contracts`**, **`graphenix-plan-format`**, **`graphenix-trace-format`** @ **^1.1.0**; dev **`graphenix-plan-compiler`** @ **^1.1.0**.
202
- - Docs: [`documenations/node-execution-graphenix.md`](documenations/node-execution-graphenix.md), [`reports/graphenix-graph-engine-handoff.md`](../archived/ai-tasks/reports/graphenix-graph-engine-handoff.md); updated [`RUNTASK_REQUEST.md`](RUNTASK_REQUEST.md) and JSON schema.
203
-
204
- ### Fixed
205
-
206
- - **`xynthesizedOutput`:** PRE synthesis restores `request.xynthesized` updates and **`response.xynthesizedPatch`** for graph-engine merge (`applySynthesisPreStepToRequest`).
207
- - **Polish POST:** wire **`structuredOutput`** (JSON mode) on polish LLM calls; node-execution POST handler merges **`parsed`** and **`intermediateSteps`**.
208
-
209
- ## [8.8.0] - 2026-06-05
210
-
211
- ### Fixed
212
-
213
- - **MAIN gateway wire shape:** `prepareMainSkillModelConfigForInvoke` applies ai-skills **`normalizeModelConfigForGatewayInvoke`** after profile resolution so MAIN invoke sends `{ provider, model }` tuple (never composite `openrouter/…` slug with `provider: unspecified`).
214
- - Consumes **`skillModel`** slot only for MAIN routing no graph `modelConfig` merge at the execution boundary.
215
-
216
- ### Changed
217
-
218
- - Bumped **`@exellix/ai-skills`** to **^6.5.0**, **`@exellix/xynthesis`** to **^4.6.0**, **`@x12i/ai-profiles`** to **^3.2.0** (`normalizeInvokeModel` contract).
219
-
220
- ## [8.7.0] - 2026-06-05
221
-
222
- ### Changed
223
-
224
- - Bumped **`@exellix/ai-skills`** to **^6.4.0** and **`@exellix/xynthesis`** to **^4.5.0** (gateway **≥ 10.1.0**, **`@x12i/ai-profiles` ^3.0.0**, **`@x12i/activix` ^8.6.0**).
225
- - Added direct **`@x12i/ai-profiles` ^3.0.0** dependency so orchestrator model resolution aligns with ai-skills / xynthesis (avoids hoisted **2.1.x** from legacy narrix transitive paths).
226
- - README stack alignment table and gateway 10.x notes updated for the new minimums.
227
-
228
- ## [8.6.3] - 2026-06-05
229
-
230
- ### Fixed (CR-13)
231
-
232
- - **`prepareMainSkillModelConfigForInvoke`:** Resolves `skillModel` / `llmCall.model` profile/choice aliases to concrete gateway wire ids once before ai-skills invoke (via `resolveModelReference`).
233
- - **`MAIN_SKILL_MODEL_RESOLUTION_FAILED`:** New `RunTaskModelResolutionError` code when MAIN alias resolution fails; Activix classification event `skill_model_resolution_failed`.
234
- - Bumped **`@exellix/ai-skills`** to **^6.3.0** for Optimixer `modelProfile` split + `SKILL_MODEL_RESOLUTION_FAILED`.
235
-
236
- ## [8.5.0] - 2026-06-03
237
-
238
- ### Changed (breaking)
239
-
240
- - **Execution strategies:** planner/optimizer invoke **`@exellix/xynthesis` ≥ 4.4.0** (`execution-plan`, `execution-evaluate-result`) with `modelConfig.preActionModel` / `postActionModel`. Removed direct `@x12i/funcx` `run()` from ai-tasks.
241
- - **`runPlanWebScopeQuestions`:** xynthesis `plan-web-scope-questions` only; removed `backend: "funcx"`.
242
- - **Catalog:** `runtimeKind: "xynthesis-action"`, `defaultSidekickAction` on planner/optimizer rows.
243
-
244
- ### Added
245
-
246
- - `runPlannerViaXynthesis`, `runOptimizerViaXynthesis`, `setExecutionStrategyActionInvoker`, `setPlanWebScopeQuestionsActionInvoker`, `resolveSafeExecutionStrategyCatalogDefaultSidekickAction`.
247
-
248
- ### Removed
249
-
250
- - `setFuncxExecutionStrategyInvoker`, `setResearchPlanQuestionsFuncxInvoker`, direct `@x12i/funcx` dependency.
251
-
252
- ## [8.6.0] - 2026-06-04
253
-
254
- ### Removed (breaking)
255
-
256
- - **Studio skill analysis** removed from the runtime package: **`analyzeRunTaskRequest`**, re-exports of **`buildSkillRequestAnalysisPacket`**, **`formatSkillRequestAnalysisMarkdown`**, **`FUNCX_ANALYZE_GATEWAY_INVOKE_REQUEST_ID`**, and related analysis types. Invoke preflight belongs in **studio / skills-manager** — see **[`documenations/studio-skill-invoke-preflight.md`](documenations/studio-skill-invoke-preflight.md)** (suggested design, not mandatory). Orchestrator static checks remain: **`validateRunTaskConfig`**, **`analyzeExpectedRunTaskInput`**.
257
-
258
- ## [8.5.3] - 2026-06-04
259
-
260
- ### Changed
261
-
262
- - Bumped **`@exellix/xynthesis`** to **^4.4.5** and **`@exellix/ai-skills`** to **^6.0.2** for Optimixer **max-token retry** on PRE/POST (xynthesis) and MAIN (ai-skills): one automatic re-invoke when output hits the token limit and Optimixer returns **`retryPrediction`** (no host **`maxTokens`** required).
263
-
264
- ### Added
265
-
266
- - Unit test **`runPostStepLlmCall.maxTokenRetry.test.ts`** (mock Optimixer + synthesis invoker; no live LLM).
267
-
268
- ## [8.4.0] - 2026-06-01 — `preActionModel`, `skillModel`, `postActionModel`. **`xynthesisModel` removed** (validation rejects with `NON_CANONICAL_MODEL_CONFIG`). PRE uses `preActionModel`; POST uses `postActionModel`.
269
- - **`@x12i/ai-profiles` ^2.0.0:** Required `catalogLane` on profile resolution; ai-tasks defaults `"text"` ( `"image"` for `vision` ). Registry source defaults to `auto`.
270
- - **`@exellix/xynthesis` ^4.2.1:** Minimum for ai-profiles v2 alignment.
271
-
272
- ### Added
273
-
274
- - **`defaultAiTasksResolveAiProfileOptions`**, slot helpers `resolvePreActionModel` / `resolvePostActionModel`, builder `withPreActionModel` / `withPostActionModel`.
275
-
276
- ### Removed
277
-
278
- - Exports **`resolveXynthesisModelForPre`**, **`getXynthesisModelFromSlots`**, builder **`withXynthesisModel`**.
279
-
280
- ## [Unreleased prior notes]
281
-
282
- ### Changed
283
-
284
- - **`@x12i/ai-profiles` ≥1.8.0:** Direct dependency bumped from **^1.7.2**; **`npm` override** pins transitive `@x12i/ai-profiles` to this package's direct version (required fix in **1.8.0** for profile alias resolution). Live coverage: `npm run test:live` → `test/e2e/ai-profiles-live.test.ts` (registry `auto` + real xynthesis alias call).
285
- - **`@exellix/xynthesis` ^4.1.8:** Fixes OpenRouter **400 invalid model ID** on PRE/POST hops (wire id was `openrouter/<slug>` instead of bare OR API slug). ai-tasks invocation routing aligned (skill gateway shape vs xynthesis Funcx slug). Requires **≥4.1.8** — do not use **4.1.7** for alias-based xynthesis calls with OpenRouter.
286
- - **`@x12i/logxer` ^4.4.2:** Package diagnostics use **`createLogxer`** with diagnostic catalog (`.metadata/log-diagnostics.json`), **`warnCode`** / **`DebugLogAbstract`**, **`fieldEvidence`**, **`runWithLogContext`** during **`runTask()`**, and in-process **`getAiTasksJobLogs`** for debug UIs. Override pins transitive logxer to **4.4.2** (no nested **4.4.0** from `@x12i/optimixer`).
287
-
288
- ## [8.1.1] - 2026-05-28
289
-
290
- ### Changed
291
-
292
- - **`npm` overrides:** Pin transitive **`@x12i/activix`**, **`@x12i/catalox`**, and **`@x12i/funcx`** to this package's direct versions so graph-engine and other consumers resolve a single copy (no nested **funcx 3.9.x** / **activix 7.x** / **catalox 4.x** from `@exellix/narrix-web-scoper` or `@x12i/funcx`).
293
-
294
- ## [8.1.0] - 2026-05-28
295
-
296
- ### Added
297
-
298
- - **Model profile aliases (`@x12i/ai-profiles`):** Resolve ai-profiles profile/shortcut names and legacy tiers (`weak`, `strong`, `default`) to concrete provider model ids for **ai-skills MAIN** (`skillModel` / `llmCall.model`). Keep **ai-profiles aliases** on **xynthesis** paths (`modelConfig.xynthesisModel`, POST/PRE/scoping `llmCall.model`). Exports: `resolveModelReference`, `resolveModelReferenceForXynthesis`, `normalizeXynthesisModelAlias`, `resolveRunTaskModelReferences`, `isResolvableModelAlias`, `formatResolvedProfileModelId`.
299
- - **Dual-root `RunTaskRequest.inputs`:** Optional top-level plural payload bucket (distinct from `executionMemory.inputs`); forwarded on MAIN like `input`.
300
-
301
- ### Changed
302
-
303
- - **Smart-input validation context:** `inputs.*` resolves against top-level **`request.inputs`** only (not `executionMemory.inputs`). Use **`executionMemory.inputs.*`** for execution-memory plural paths.
304
- - **PRE `memoryPaths`:** Dual-root fallback `executionMemory.input.<rest>` falls back to `executionMemory.inputs.<firstKey>.<rest>` when singular path is missing.
305
- - **`@exellix/xynthesis` ^4.0.6:** Xynthesis LLM calls use alias-only model resolution (`resolveModelReferenceForXynthesis`); default post-step model is **`balanced`** when omitted. **`skillModel`** resolution for **`@exellix/ai-skills` ^5.8.6** unchanged.
306
- - **Validation:** `modelConfig.xynthesisModel` rejects concrete provider ids; accepts ai-profiles aliases (replaces 8.0.0 `MODEL_CONFIG_NOT_RESOLVED` for legacy tiers on both slots).
307
-
308
- ### Documentation
309
-
310
- - README [Model profile aliases](#model-profile-aliases-x12iai-profiles); [`.docs/ai-tasks-model-profile-aliases-7x.md`](../archived/ai-tasks/.docs/ai-tasks-model-profile-aliases-7x.md).
311
-
312
- ## [8.0.9] - 2026-05-28
313
-
314
- ### Changed
315
-
316
- - **Dependencies (graph-engine alignment):** **`@x12i/funcx` ^4.2.0** (no 3.9.x path), **`@x12i/activix` ^8.0.5**, **`@x12i/catalox` ^5.1.1**; **`@x12i/funcx/functions`** re-exports (`FUNCX_EXECUTION_PLAN_FUNCTION_ID`, etc.).
317
-
318
- ## [8.0.8] - 2026-05-27
319
-
320
- ### Added
321
-
322
- - **`getModelCapabilities`** re-export from `@exellix/xynthesis` (replaces removed **`MODEL_CAPABILITIES`** constant).
323
-
324
- ### Fixed
325
-
326
- - **Exports:** Removed broken **`MODEL_CAPABILITIES`** re-export from `@exellix/xynthesis` 4.x (symbol removed upstream). Use **`getModelCapabilities(modelId)`** from `@exellix/ai-tasks` or `@exellix/xynthesis` instead.
327
-
328
- ### Deprecated
329
-
330
- - **`8.0.7`** do not use; re-exported **`MODEL_CAPABILITIES`** against **`@exellix/xynthesis` ≥ 4.x** where the symbol no longer exists. Upgrade to **8.0.8+**.
331
-
332
- ## [7.7.1] - 2026-05-25
333
-
334
- ### Added
335
-
336
- - **`RunTaskRequest.taskConfiguration`:** Graph-engine may forward the node `taskConfiguration` blob; **`compileTaskConfigurationOnRunTaskRequest`** (also at **`runTask()`** entry) maps **`aiTaskStrategies.pre: "synthesis"`** and **`aiTaskProfile.inputSynthesis.enabled`** into PRE **`synthesized-context`** + **`includeContextInPrompt: true`**. Exports **`TaskConfigurationCompileError`**, **`AI_TASK_PRE_ENABLE_SYNTHESIS`**.
337
-
338
- ### Documentation
339
-
340
- - **`RUNTASK_REQUEST.md`**, **README**, [`.docs/flow-io/xynthesis-pre.md`](../archived/ai-tasks/.docs/flow-io/xynthesis-pre.md), graph-engine task [`reports/graph-engine-task-pre-synthesis-compile.md`](../archived/ai-tasks/reports/graph-engine-task-pre-synthesis-compile.md).
341
- - Fixtures: [`test/fixtures/run-task/graph-engine-pre-synthesis.json`](test/fixtures/run-task/graph-engine-pre-synthesis.json), [`test/fixtures/graphs/graph-qcrbz6t-pre-synthesis.json`](test/fixtures/graphs/graph-qcrbz6t-pre-synthesis.json).
342
-
343
- ## [7.6.4] - 2026-05-18
344
-
345
- ### Changed
346
-
347
- - **`@exellix/ai-skills` ≥ 5.5.0:** Dependency **5.5.2**; `pickRunSkillRequestFields` forwards top-level **`executionMemory`** on `runSkill` (native `buildWorkingMemory` support). Removed the 7.6.3 `jobMemory.executionMemory` nest bridge.
348
-
349
- ### Dependencies
350
-
351
- - **`@exellix/ai-skills`:** `5.5.2` (was `5.4.0`).
352
-
353
- ## [7.6.3] - 2026-05-18
354
-
355
- ### Fixed
356
-
357
- - **Gateway `executionMemory` paths (interim):** `DirectExecutionStrategy` nested `request.executionMemory` on `jobMemory.executionMemory` before `runSkill` for ai-skills **&lt; 5.5.0**. Superseded in **7.6.4** by native top-level forward. Strips `RunTaskRequest`-only fields from the `runSkill` payload.
358
-
359
- ### Documentation
360
-
361
- - **Change request:** [`reports/change-request-tasknode-variable-scopes-7.6.2.md`](../archived/ai-tasks/reports/change-request-tasknode-variable-scopes-7.6.2.md) — upstream work for `@exellix/ai-skills`, `@x12i/rendrix`, and optional gateway path aliases.
362
-
363
- ## [7.6.2] - 2026-05-18
364
-
365
- ### Fixed
366
-
367
- - **`smartInput.strict`:** Accepted on `RunTaskRequest.smartInput` and forwarded through `normalizeSmartInputConfig` to the gateway path.
368
-
369
- ### Changed
370
-
371
- - **MAIN template variables:** `runTask` forwards **`variables`** (job/graph bucket) **as-is** via `passthroughJobTemplateVariables` — no longer folds `jobContext`, `input`, `xynthesized`, or `smartInput` into `variables`. Node scope remains on **`executionMemory.taskVariables`**.
372
-
373
- ### Documentation
374
-
375
- - **`RUNTASK_REQUEST.md`:** TaskNode authoring map (`taskConfiguration`, `inputsConfig`, `taskVariable`, two-bucket `jobVariables` / `taskVariables`), dual `outputValidation`, `inputSynthesis` compile table, forbidden metadata.
376
- - **README**, web-scoping doc, Narrix JSDoc: authoring path **`taskConfiguration.narrix`** (not `metadata.narrix`).
377
-
378
- ### Schema
379
-
380
- - **`run-task-request.json`:** `executionStrategyCatalogItems`, `smartInputRenderOptions`, Rendrix path objects, `smartInput.strict`, variable-bucket descriptions.
381
-
382
- ## [7.6.0] - 2026-05-18
383
-
384
- ### Added
385
-
386
- - **`xynthesized.execution` scope:** `XynthesizedMemory.execution`, `XynthesizedDestinationScope` includes **`"execution"`**, PRE **`xynthesizedOutput.destination: "execution"`** writes and returns **`xynthesizedPatch.execution`** (same replace/merge semantics as job/task; no redirect to other buckets).
387
- - **Smart-input:** `xynthesized.*` paths must use scope **`job`**, **`task`**, or **`execution`**; **`resolveXynthesizedSmartInputPath`** helper for in-package resolution against request **`xynthesized`**.
388
- - **`TaskRequestBuilder.withXynthesizedExecution(key, value)`**.
389
-
390
- ### Documentation
391
-
392
- - **`RUNTASK_REQUEST.md`**, **`documenations/synthesized-context-guide.md`**, and **`documenations/schemas/v1/run-task-request.json`** updated for the execution bucket.
393
-
394
- ## [7.2.0] - 2026-05-06
395
-
396
- ### Changed
397
-
398
- - **Breaking (exports):** Replaced **`AI_TASKS_FUNCX_*`** constants with **`FUNCX_EXECUTION_PLAN_FUNCTION_ID`** (`execution/plan`), **`FUNCX_EXECUTION_EVALUATE_RESULT_FUNCTION_ID`** (`execution/evaluate-result`), **`FUNCX_RESEARCH_PLAN_QUESTIONS_FUNCTION_ID`** (`research/plan-questions`).
399
- - **Execution strategies:** Planner and optimizer call **`run(functionId, payload)`** with the **generic FuncX envelope** only (`goal`, `input`, `context`, `result?`, `args`, `attribution`). Responses are adapted via **`adaptExecutionPlanResult`** / **`adaptEvaluateResultResponse`** ([`genericExecutionFuncxEnvelope.ts`](src/execution-strategies/genericExecutionFuncxEnvelope.ts)).
400
- - **`runPlanWebScopeQuestions`:** Optional **`backend: "funcx"`** for **`research/plan-questions`**; **`setResearchPlanQuestionsFuncxInvoker`** for tests.
401
- - **`ExecutionType`:** Re-exported from **`@exellix/ai-tasks`** via local [`executionType.ts`](src/types/executionType.ts) (`DIRECT`) because **`@exellix/ai-skills`** no longer exports this symbol on supported versions.
402
- - **`@x12i/funcx` ≥ 3.8.2:** **`unwrapFuncxRunValue`** delegates to **`getRunJsonResult`** (use **3.8.2+** for current normalization behavior). Re-exports: **`getRunJsonResult`**, **`isHttpRunSuccessBody`**, **`genericExecutionEnvelopeJsonSchema`**, **`buildAskAttribution`**, type **`GenericExecutionEnvelope`**.
403
-
404
- ## [7.1.2] - 2026-05-06
405
-
406
- ### Added
407
-
408
- - **`narrix.webScopeQuestions`:** optional explicit web-scope questions on `RunTaskRequest.narrix`; when `webScopeTemplates` is unset, the NARRIX preprocessor runs `@exellix/narrix-web-scoper` **`scopeQuestionPack`** and stores a normalized `WebScoperResult` in `executionMemory.webContext`.
409
- - **`runPlanWebScopeQuestions`** (and **`parseAndValidatePlanWebScopeQuestionsOutput`**, **`buildPlanWebScopeQuestionsUserPrompt`**) for AI-driven web-scope planning; FuncX path uses **`research/plan-questions`** (see **Unreleased** / **`FUNCX_RESEARCH_PLAN_QUESTIONS_FUNCTION_ID`**). FR tracker: **`documenations/funcx-scoping-integration-gaps.md`** §6.
410
-
411
- ### Documentation
412
-
413
- - **`documenations/web-scoping-in-ai-tasks.md`**, **README**, **RUNTASK_REQUEST.md:** documented `webScopeQuestions` shape and precedence vs templates.
414
-
415
- ## [7.1.1] - 2026-05-06
416
-
417
- ### Added
418
-
419
- - **Package root type exports:** `XynthesizedMemory`, `SmartInputConfig`, `XynthesizedDestinationScope`, `XynthesizedOutputConfig`, `ExecutionStrategyInvocation`, `ExecutionStrategyPhase`, and `ExecutionStrategyWrapperKey` are re-exported from `@exellix/ai-tasks` alongside `RunTaskRequest`, so hosts can depend on stable names instead of `NonNullable<RunTaskRequest['xynthesized']>` or `RunTaskRequest['executionStrategies'][number]`.
420
-
421
- ### Documentation
422
-
423
- - **CHANGELOG discipline:** Documented that `package.json` is authoritative for the shipped semver and pointed cross-version migration readers at `BREAKING-CHANGES.md` / `RUNTASK_REQUEST.md` when intermediate entries are missing.
424
-
425
- _Note: Releases **after 6.0.1** through **before 7.1.1** were not listed here chronologically; consult git history and `BREAKING-CHANGES.md` for that span._
426
-
427
- ## [6.0.1] - 2026-05-05
428
-
429
- ### Fixed
430
-
431
- - **Synthesis E2E gate:** `test/synthesis/e2e-synthesis-real.test.ts` no longer requires `LLM_MODEL_STRONG` / `LLM_MODEL_NORMAL`; it runs when **`RUN_SYNTHESIS_E2E=1`** and a recognized provider key is set (`OPEN_ROUTER_KEY`, `GROK_API_KEY`, etc.). Warns when a model env var is missing.
432
-
433
- ### Documentation
434
-
435
- - **Xynthesis upstream work:** [`documenations/xynthesis-upstream-fixes-checklist.md`](documenations/xynthesis-upstream-fixes-checklist.md) (Activix `diagnostics.owner`, `jobId`/`taskId` hardening in `runSidekickGatewayCall`, tests to add in xynthesis).
436
-
437
- ## [6.0.0] - 2026-05-04
438
-
439
- ### Breaking
440
-
441
- - **`runTask` / `RunTaskRequest`:** `agentId`, `jobTypeId`, and `taskTypeId` are **required** again (aligned with `@exellix/ai-skills` `RunSkillRequest`). `runTask()` calls **`assertRequiredRunSkillCorrelation`** and throws if any value is missing or whitespace-only.
442
- - **`TaskRequestBuilder.build()`** throws unless those three fields were set (use **`withAiSkillsCorrelation`** or **`withAgentId` / `withJobTypeId` / `withTaskTypeId`**).
443
- - **`TaskConvenienceMethods.executeDirect`** now requires an **`options`** object including **`agentId`**, **`jobTypeId`**, and **`taskTypeId`** (third argument is no longer optional).
444
- - **`TaskConvenienceMethods.executeWithType`** now requires the **`options`** argument (same correlation fields as `RunTaskRequest`).
445
-
446
- ### Added
447
-
448
- - Exported **`assertRequiredRunSkillCorrelation`** from the package root for hosts that validate payloads before calling `runTask`.
449
-
450
- ## [5.7.1] - 2026-05-04
451
-
452
- ### Fixed
453
-
454
- - **Types:** `RunTaskRequest` now **omits and re-declares** `agentId`, `jobTypeId`, and `taskTypeId` as **optional**, matching `runTask()` usage and latest `@exellix/ai-skills` `RunSkillRequest` where those fields are required. Callers can still pass them when the gateway requires them.
455
-
456
- ## [5.7.0] - 2026-05-04
457
-
458
- ### Added
459
-
460
- - **RunTask request contract documentation:** [`RUNTASK_REQUEST.md`](RUNTASK_REQUEST.md) normative field list, template merge precedence, `executionMemory` vs `jobMemory.execution`, `executionPipeline` semantics, xynthesis visibility notes, and examples.
461
- - **JSON Schema fragment:** [`documenations/schemas/v1/run-task-request.json`](documenations/schemas/v1/run-task-request.json) and OpenAPI component `RunTaskRequestSubset` in [`documenations/schemas/openapi-3.1-components.yaml`](documenations/schemas/openapi-3.1-components.yaml).
462
- - **Request shape helpers** (exported from package root): `normalizeRunTaskRequest`, `collectRunTaskRequestWarnings`, `collectExecutionPipelineWarnings`, `isRunTaskRequestWarningsEnabled`.
463
- - **Env-gated diagnostics:** `AI_TASKS_REQUEST_WARNINGS=1` (also `true` / `yes`) logs structured JSON for deprecated duplicate fields, ignored pipeline steps, and observability hints at the start of each `runTask` call.
464
-
465
- ### Changed
466
-
467
- - **Types:** `RunTaskRequest` documents deprecated mirrors: optional root `question`, `inputs`, and `jobInput` (typed for discoverability; removal deferred to a future major after hosts migrate).
468
-
469
- ### Notes
470
-
471
- - **Additive / non-breaking:** Runtime merge behavior is unchanged; warnings are opt-in via env.
472
- - **Cross-package:** Minimum orchestrator (e.g. graph-engine) version is **not declared** in `@exellix/ai-tasks` follow the consuming app’s pinned `@exellix/ai-tasks` range; see `RUNTASK_REQUEST.md` § Orchestrator integration.
1
+ # Changelog
2
+
3
+ All notable changes to `@exellix/ai-tasks` are documented here.
4
+
5
+ The published **npm version** always matches **`version`** in [`package.json`](package.json). If this file skips a semver, treat [`BREAKING-CHANGES.md`](BREAKING-CHANGES.md) and [`RUNTASK_REQUEST.md`](RUNTASK_REQUEST.md) as the source of truth for cross-version upgrades.
6
+
7
+ ## [10.1.2] - 2026-06-24
8
+
9
+ ### Added
10
+
11
+ - **AT-CR-001 (complete):** GTF-FR-001 lifecycle delegated to `@x12i/graphenix-trace-format@^2.12.0` — `unitExecutions`, `modelInvocations`, and `nodeExecutions` indexes stay in sync during node-plan execution when `RunTaskRequest.executionTrace` is present.
12
+
13
+ ### Changed
14
+
15
+ - **Graphenix trace-format ^2.12.0:** GTF-FR-001 lifecycle (`markUnit*`, `recordModelInvocation*`, `appendUnitLifecycleEvent`) now delegated to `@x12i/graphenix-trace-format` via ai-tasks shims; other `@x12i/graphenix-*` packages remain at latest **^2.11.0**.
16
+ - Node rollup and `fallback.applied` events still use local helpers until upstream exports them.
17
+
18
+ ## [10.1.1] - 2026-06-24
19
+
20
+ ### Changed
21
+
22
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.11.0** (2.11 train).
23
+ - `traceLifecycle.ts` adapter prefers GTF-FR-001 exports from `@x12i/graphenix-trace-format` when present; falls back to local impl until upstream exports `markUnitStarted` / `recordModelInvocation*`.
24
+
25
+ ## [10.1.0] - 2026-06-24
26
+
27
+ ### Added
28
+
29
+ - **AT-CR-001:** Dual-write v2 `executionTrace` indexes during node-plan execution — `unitExecutions`, `modelInvocations`, and `nodeExecutions` stay in sync with `unit.*` / `model.invocation.*` events when `RunTaskRequest.executionTrace` is present.
30
+ - Lifecycle helpers in [`src/node-execution/traceLifecycle.ts`](src/node-execution/traceLifecycle.ts) (GTF-FR-001-compatible API; delegates event append to `@x12i/graphenix-trace-format`).
31
+ - Observation sink for PRE / MAIN / POST plan units → gateway `usage` / `cost` on `modelInvocations` when available.
32
+ - Tests: [`test/trace/executionTraceDualWrite.test.ts`](test/trace/executionTraceDualWrite.test.ts) (T1–T6).
33
+
34
+ ### Changed
35
+
36
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.10.0** (bundled with AT-CR-001).
37
+ - Requires `@x12i/graphenix-trace-format` **^2.10.0** (index dual-write; upstream GTF-FR-001 export planned).
38
+
39
+ ## [10.0.13] - 2026-06-20
40
+
41
+ ### Changed
42
+
43
+ - **`@exellix/ai-skills`** **^6.12.5** (graphenix 2.7.3 + catalox 5.9.8 train).
44
+ - **`@x12i/catalox`** / **`@x12i/catalox-contracts`** **^5.9.8**.
45
+
46
+ ## [10.0.12] - 2026-06-20
47
+
48
+ ### Changed
49
+
50
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.7.3** (full format suite train).
51
+
52
+ ## [10.0.11] - 2026-06-20
53
+
54
+ ### Fixed
55
+
56
+ - **`@exellix/fact-guard-*` dependencies:** publish semver **`^1.0.1`** in `dependencies` (10.0.10 accidentally shipped **`file:../fact-guard/...`** in `dependencies`, which breaks installs outside this monorepo).
57
+ - **`prepublishOnly`:** fail fast if `file:` / `link:` / `workspace:` specs remain in `package.json` at publish time.
58
+
59
+ ### Changed
60
+
61
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.7.2** (compiler emits `webQueryTemplate` on `webScope` units; legacy `webScoping` rejected on plans).
62
+ - **`@exellix/ai-skills`** **^6.12.4** (graphenix 2.7.2 train).
63
+ - **Web scope validation:** enabled `webScope` PRE units require non-empty **`unitParams.webQueryTemplate`** (or `webQueryTemplates[]`); rejects legacy **`webScoping`** / NARRIX question fallbacks on unit params (`LEGACY_WEB_SCOPE_UNIT_PARAMS`, `WEB_QUERY_TEMPLATE_REQUIRED`, `WEB_QUERY_TEMPLATE_UNRESOLVED`).
64
+
65
+ ## [10.0.10] - 2026-06-20
66
+
67
+ ### Changed
68
+
69
+ - **Web scoping:** migrate from **`@exellix/narrix-web-scoper`** to published **`@x12i/web-scoper@^1.1.1`**. New adapter module **`src/web-scope/`** compiles graph/task input to **`{ question, record?, options? }`** or **`searchMany`** packs; **`executionMemory.webContext`** uses **`{ ok, context?, error? }`** (replaces legacy **`available`**).
70
+ - **Standalone PRE `webScope` unit:** playground and Graphenix plans invoke the same adapter via **`unitParams.enableWebScope`** + **`unitParams.options`**.
71
+ - **Docs:** README, RUNTASK_REQUEST, and **`documenations/web-scoping-in-ai-tasks.md`** updated for the new contract.
72
+
73
+ ### Removed
74
+
75
+ - Dependency on **`@exellix/narrix-web-scoper`**. Legacy **`narrix.webScoping`** / template fields are still mapped at invoke time where supported.
76
+
77
+ ## [10.0.9] - 2026-06-18
78
+
79
+ ### Changed
80
+
81
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.7.0** (fact-guard schema/validation/compiler train; optional `unitParams.factGuard` fully validated upstream).
82
+ - **`@exellix/ai-skills`** **^6.12.3** (graphenix 2.7.0 train).
83
+
84
+ ## [10.0.8] - 2026-06-18
85
+
86
+ ### Changed
87
+
88
+ - **`@exellix/fact-guard-*`** **^1.0.0** — re-scoped from `@x12i` to **`@exellix`** (npm publish train).
89
+ - **`@exellix/xynthesis`** **^4.8.4**.
90
+
91
+ ## [10.0.7] - 2026-06-18
92
+
93
+ ### Changed
94
+
95
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.6.0** (optional `unitParams.factGuard` on sub-action units; validates against graphenix `FactGuardStepConfig`).
96
+ - **`@exellix/ai-skills`** **^6.12.2** (graphenix 2.6.0 train).
97
+ - **`@exellix/fact-guard-*`** **^1.0.0** (npm semver; was monorepo `file:` link).
98
+
99
+ ### Added
100
+
101
+ - Node-plan validation tests for graphenix 2.6.0 fact-guard golden fixtures (`node-synthesis-fact-guard-*`, `node-polish-fact-guard-enabled`, `node-audit-fact-guard-nested`).
102
+
103
+ ## [10.0.6] - 2026-06-17
104
+
105
+ ### Added
106
+
107
+ - **Fact-guard sub-actions (optional):** optional atom integrity checks on PRE synthesis, POST audit/polish/scoping, and execution-strategy planner/optimizer hops via **`@exellix/fact-guard-*` ^1.0.0**. Disabled by default (`factGuard.enabled: false` or absent = unchanged behavior). Kill-switch: **`FACT_GUARD_DISABLED=1`**. MAIN **`runSkill`** path unchanged.
108
+ - **`FactGuardStepConfig`** on `SynthesisConfig`, `AuditConfig`, `PolishConfig`, `ExecutionStrategyInvocation`, and `aiScopingOptions`.
109
+ - **`npm run test:fact-guard`** — integration tests (mocked LLM).
110
+
111
+ ### Changed
112
+
113
+ - **`@exellix/xynthesis`** **^4.8.3** (fact-guard passthrough on `executeXynthesisAction`).
114
+
115
+ ## [10.0.5] - 2026-06-17
116
+
117
+ ### Changed
118
+
119
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.5.0** (CRS-FRS-003 train; jobMemory.context authoring preserved upstream).
120
+ - **`@exellix/ai-skills`** **^6.12.1** — consumes graphenix 2.5.0 train.
121
+
122
+ ## [10.0.4] - 2026-06-15
123
+
124
+ ### Changed
125
+
126
+ - **Graphenix alignment:** all `@x12i/graphenix-*` packages **^2.4.0** (suite train bump from 2.3.0).
127
+ - **`@exellix/ai-skills`** **^6.12.0** — consumes graphenix 2.4.0 train.
128
+
129
+ ## [10.0.2] - 2026-06-14
130
+
131
+ ### Added
132
+
133
+ - **Graphenix 2.1.0 alignment:** `@x12i/graphenix-plan-format` and `@x12i/graphenix-executable-contracts` **^2.1.0** — rejects plans with `unitParams.synthesisInputStrategy` (`LEGACY_SYNTHESIS_INPUT_STRATEGY_ON_PLAN`).
134
+ - **`resolveSynthesisContextStrategyKey`** — PRE synthesis template key from skill catalog (`@exellix/ai-skills` **^6.11.0**); path-driven source material via `invokeContract.reads` / `memoryPaths`.
135
+ - Validation test for legacy synthesis field on compiled plans.
136
+
137
+ ### Changed
138
+
139
+ - **`synthesisConfigFromUnit`** strips `unitParams.synthesisInputStrategy` from plan wire; no longer defaults plan enum to `policy`.
140
+ - Wire fixture `graph-engine-pre-synthesis.json` — path-only synthesis unit (no `synthesisInputStrategy`).
141
+ - **Docs:** README / RUNTASK_REQUEST — skill-catalog-only template key; graphenix **2.1.0** deps.
142
+
143
+ ## [10.0.1] - 2026-06-13
144
+
145
+ ### Added
146
+
147
+ - **Graphenix 2.0.3 alignment:** `@x12i/graphenix-executable-contracts` and `@x12i/graphenix-plan-format` **^2.0.3** — orchestration strategy registry (`plan`, `split`, `merge`, `pick-best`, `webScope`), path-driven synthesis units (`invokeContract.reads`).
148
+ - Golden tests for graphenix plan fixtures: `node-synthesis-execution-memory-only`, `node-split-merge`, `node-web-scope-standalone`.
149
+ - **Synthesis path bridge:** `synthesisConfigFromUnit` copies `invokeContract.reads` `memoryPaths` when omitted; defaults `synthesisInputStrategy` to `policy` for path-driven plans.
150
+
151
+ ### Changed
152
+
153
+ - Graph authoring fixtures: removed deprecated `preInputStrategy` from `aiTaskStrategies`.
154
+ - Wire fixture `graph-engine-pre-synthesis.json` aligned with graphenix 2.0.3 compile output (`reads`: `input`, `executionMemory`).
155
+ - **Docs:** README Graphenix 10.x section; downstream [graph-model-change-2026-06-13.md](../temp/downstream/graph-model-change-2026-06-13.md).
156
+
157
+ ## [10.0.0] - 2026-06-13
158
+
159
+ ### Breaking
160
+
161
+ - **Removed** `taskConfiguration` and `executionPipeline` from `RunTaskRequest` — use frozen `nodePlan` only.
162
+ - **Removed** compile pipeline (`src/compile/*`, `taskConfigurationCompileError`).
163
+
164
+ ### Added
165
+
166
+ - **PRE synthesis wiring:** `resolveRawTemplate(role: synthesisContext, strategyKey)` via `@exellix/ai-skills` **^6.10.0**.
167
+ - **PRE/POST orchestration runtime:** `externalPreUtility` (`plan`, `split`, `webScope`), `externalPostUtility` (`merge`, `pick-best`), multi-shard MAIN + FuncX fan-in.
168
+ - **Web scope:** Narrix preprocessor `enableWebScope` + standalone `webScope` unit.
169
+ - **Strategy catalogs:** synthesis-input, pre/post orchestration (publish via `npm run publish:task-strategies`).
170
+ - **nodePlan audit parity:** real `reRunMain` + synthesized `contextMarkdown`.
171
+
172
+ ### Changed
173
+
174
+ - **`@exellix/ai-skills`** **^6.10.0** (support templates + single `professional-answer` Catalox seed).
175
+
176
+ ## [9.1.1] - 2026-06-13
177
+
178
+ ### Changed
179
+
180
+ - **Run-task handoff closure:** Stale docs updatednode template scope is `nodePlan.invokeContract.taskVariable`, not `executionMemory.taskVariables`.
181
+ - **`@exellix/ai-skills`** **^6.9.1** (WM source-of-truth alignment).
182
+
183
+ ### Added
184
+
185
+ - Golden parity tests for all **7** node plan fixtures (`node-post-audit`, `node-input-synthesis-profile` added to `golden-fixtures.test.ts`).
186
+
187
+ ## [9.1.0] - 2026-06-09
188
+
189
+ ### Changed
190
+
191
+ - **Graphenix 2.1.0 alignment:** Accept parent plan format `"executable-plan"` (v2) and trace format `"execution-trace"` (v2).
192
+ - **Snapshot isolation:** `overlayUnitModelOnRequest` ignores concrete wire ids in `resolvedInvocationSnapshot.modelId`, preferring authored `modelSelection` (CR-1.3).
193
+
194
+ ## [9.0.5] - 2026-06-08
195
+
196
+ ### Changed
197
+
198
+ - **`@x12i/funcx`** **^4.9.5** (direct dependency + npm override) — aligns PRE/POST xynthesis with funcx catalog gate via **`@x12i/ai-profiles`** (requires funcx ≥ 4.9.5; fixes subnet-style PRE `Unknown model "google/gemini-2.5-flash-lite"`).
199
+ - **`@x12i/ai-profiles`** **^3.4.0**, **`@exellix/xynthesis`** **^4.6.5** (publish **4.6.6** for funcx bump).
200
+
201
+ ## [9.0.1] - 2026-06-07
202
+
203
+ ### Changed
204
+
205
+ - Graphenix dependency alignment with latest CP release train: **`graphenix-plan-format`** and **`graphenix-trace-format`** @ **^1.1.1**; dev **`graphenix-authoring-format`** @ **^1.2.1**, **`graphenix-plan-compiler`** @ **^1.1.1**. **`graphenix-executable-contracts`** remains **^1.1.0**.
206
+ - **`npm` overrides:** Pin transitive **`@x12i/funcx`** to **^4.6.0** (aligns with **`@exellix/xynthesis` 4.6.2** and **`@x12i/logxer` ^4.6.0**).
207
+
208
+ ## [9.0.0] - 2026-06-07
209
+
210
+ ### Changed (breaking)
211
+
212
+ - **Graphenix node execution v2.1:** `runTask()` requires **`nodePlan`** (`NodeExecutionPlan`); production path is **`executeNodeFromPlan`** (unit loop + per-unit model selection). Legacy **`executionPipeline`** / **`taskConfiguration`** compile is **off the hot path** (still exported for migration tooling).
213
+ - **Forbidden wire fields** when `nodePlan` is set: root **`modelConfig`**, **`executionPipeline`**, **`taskConfiguration`** model slots come from `nodePlan.executionUnits[].modelSelection`.
214
+ - **`executionTrace`** (optional): graphenix v2 trace append (`unit.*`, `model.invocation.*`).
215
+
216
+ ### Added
217
+
218
+ - **`src/node-execution/`** unit dispatch, Narrix units, PRE/MAIN/POST handlers, trace bridge.
219
+ - Dependencies: **`@x12i/graphenix-executable-contracts`**, **`graphenix-plan-format`**, **`graphenix-trace-format`** @ **^1.1.0**; dev **`graphenix-plan-compiler`** @ **^1.1.0**.
220
+ - Docs: [`documenations/node-execution-graphenix.md`](documenations/node-execution-graphenix.md), [`reports/graphenix-graph-engine-handoff.md`](../archived/ai-tasks/reports/graphenix-graph-engine-handoff.md); updated [`RUNTASK_REQUEST.md`](RUNTASK_REQUEST.md) and JSON schema.
221
+
222
+ ### Fixed
223
+
224
+ - **`xynthesizedOutput`:** PRE synthesis restores `request.xynthesized` updates and **`response.xynthesizedPatch`** for graph-engine merge (`applySynthesisPreStepToRequest`).
225
+ - **Polish POST:** wire **`structuredOutput`** (JSON mode) on polish LLM calls; node-execution POST handler merges **`parsed`** and **`intermediateSteps`**.
226
+
227
+ ## [8.8.0] - 2026-06-05
228
+
229
+ ### Fixed
230
+
231
+ - **MAIN gateway wire shape:** `prepareMainSkillModelConfigForInvoke` applies ai-skills **`normalizeModelConfigForGatewayInvoke`** after profile resolution so MAIN invoke sends `{ provider, model }` tuple (never composite `openrouter/…` slug with `provider: unspecified`).
232
+ - Consumes **`skillModel`** slot only for MAIN routing no graph `modelConfig` merge at the execution boundary.
233
+
234
+ ### Changed
235
+
236
+ - Bumped **`@exellix/ai-skills`** to **^6.5.0**, **`@exellix/xynthesis`** to **^4.6.0**, **`@x12i/ai-profiles`** to **^3.2.0** (`normalizeInvokeModel` contract).
237
+
238
+ ## [8.7.0] - 2026-06-05
239
+
240
+ ### Changed
241
+
242
+ - Bumped **`@exellix/ai-skills`** to **^6.4.0** and **`@exellix/xynthesis`** to **^4.5.0** (gateway **≥ 10.1.0**, **`@x12i/ai-profiles` ^3.0.0**, **`@x12i/activix` ^8.6.0**).
243
+ - Added direct **`@x12i/ai-profiles` ^3.0.0** dependency so orchestrator model resolution aligns with ai-skills / xynthesis (avoids hoisted **2.1.x** from legacy narrix transitive paths).
244
+ - README stack alignment table and gateway 10.x notes updated for the new minimums.
245
+
246
+ ## [8.6.3] - 2026-06-05
247
+
248
+ ### Fixed (CR-13)
249
+
250
+ - **`prepareMainSkillModelConfigForInvoke`:** Resolves `skillModel` / `llmCall.model` profile/choice aliases to concrete gateway wire ids once before ai-skills invoke (via `resolveModelReference`).
251
+ - **`MAIN_SKILL_MODEL_RESOLUTION_FAILED`:** New `RunTaskModelResolutionError` code when MAIN alias resolution fails; Activix classification event `skill_model_resolution_failed`.
252
+ - Bumped **`@exellix/ai-skills`** to **^6.3.0** for Optimixer `modelProfile` split + `SKILL_MODEL_RESOLUTION_FAILED`.
253
+
254
+ ## [8.5.0] - 2026-06-03
255
+
256
+ ### Changed (breaking)
257
+
258
+ - **Execution strategies:** planner/optimizer invoke **`@exellix/xynthesis` ≥ 4.4.0** (`execution-plan`, `execution-evaluate-result`) with `modelConfig.preActionModel` / `postActionModel`. Removed direct `@x12i/funcx` `run()` from ai-tasks.
259
+ - **`runPlanWebScopeQuestions`:** xynthesis `plan-web-scope-questions` only; removed `backend: "funcx"`.
260
+ - **Catalog:** `runtimeKind: "xynthesis-action"`, `defaultSidekickAction` on planner/optimizer rows.
261
+
262
+ ### Added
263
+
264
+ - `runPlannerViaXynthesis`, `runOptimizerViaXynthesis`, `setExecutionStrategyActionInvoker`, `setPlanWebScopeQuestionsActionInvoker`, `resolveSafeExecutionStrategyCatalogDefaultSidekickAction`.
265
+
266
+ ### Removed
267
+
268
+ - `setFuncxExecutionStrategyInvoker`, `setResearchPlanQuestionsFuncxInvoker`, direct `@x12i/funcx` dependency.
269
+
270
+ ## [8.6.0] - 2026-06-04
271
+
272
+ ### Removed (breaking)
273
+
274
+ - **Studio skill analysis** removed from the runtime package: **`analyzeRunTaskRequest`**, re-exports of **`buildSkillRequestAnalysisPacket`**, **`formatSkillRequestAnalysisMarkdown`**, **`FUNCX_ANALYZE_GATEWAY_INVOKE_REQUEST_ID`**, and related analysis types. Invoke preflight belongs in **studio / skills-manager** see **[`documenations/studio-skill-invoke-preflight.md`](documenations/studio-skill-invoke-preflight.md)** (suggested design, not mandatory). Orchestrator static checks remain: **`validateRunTaskConfig`**, **`analyzeExpectedRunTaskInput`**.
275
+
276
+ ## [8.5.3] - 2026-06-04
277
+
278
+ ### Changed
279
+
280
+ - Bumped **`@exellix/xynthesis`** to **^4.4.5** and **`@exellix/ai-skills`** to **^6.0.2** for Optimixer **max-token retry** on PRE/POST (xynthesis) and MAIN (ai-skills): one automatic re-invoke when output hits the token limit and Optimixer returns **`retryPrediction`** (no host **`maxTokens`** required).
281
+
282
+ ### Added
283
+
284
+ - Unit test **`runPostStepLlmCall.maxTokenRetry.test.ts`** (mock Optimixer + synthesis invoker; no live LLM).
285
+
286
+ ## [8.4.0] - 2026-06-01 `preActionModel`, `skillModel`, `postActionModel`. **`xynthesisModel` removed** (validation rejects with `NON_CANONICAL_MODEL_CONFIG`). PRE uses `preActionModel`; POST uses `postActionModel`.
287
+ - **`@x12i/ai-profiles` ^2.0.0:** Required `catalogLane` on profile resolution; ai-tasks defaults `"text"` ( `"image"` for `vision` ). Registry source defaults to `auto`.
288
+ - **`@exellix/xynthesis` ^4.2.1:** Minimum for ai-profiles v2 alignment.
289
+
290
+ ### Added
291
+
292
+ - **`defaultAiTasksResolveAiProfileOptions`**, slot helpers `resolvePreActionModel` / `resolvePostActionModel`, builder `withPreActionModel` / `withPostActionModel`.
293
+
294
+ ### Removed
295
+
296
+ - Exports **`resolveXynthesisModelForPre`**, **`getXynthesisModelFromSlots`**, builder **`withXynthesisModel`**.
297
+
298
+ ## [Unreleased prior notes]
299
+
300
+ ### Changed
301
+
302
+ - **`@x12i/ai-profiles` ≥1.8.0:** Direct dependency bumped from **^1.7.2**; **`npm` override** pins transitive `@x12i/ai-profiles` to this package's direct version (required fix in **1.8.0** for profile alias resolution). Live coverage: `npm run test:live` → `test/e2e/ai-profiles-live.test.ts` (registry `auto` + real xynthesis alias call).
303
+ - **`@exellix/xynthesis` ^4.1.8:** Fixes OpenRouter **400 invalid model ID** on PRE/POST hops (wire id was `openrouter/<slug>` instead of bare OR API slug). ai-tasks invocation routing aligned (skill gateway shape vs xynthesis Funcx slug). Requires **≥4.1.8** — do not use **4.1.7** for alias-based xynthesis calls with OpenRouter.
304
+ - **`@x12i/logxer` ^4.4.2:** Package diagnostics use **`createLogxer`** with diagnostic catalog (`.metadata/log-diagnostics.json`), **`warnCode`** / **`DebugLogAbstract`**, **`fieldEvidence`**, **`runWithLogContext`** during **`runTask()`**, and in-process **`getAiTasksJobLogs`** for debug UIs. Override pins transitive logxer to **4.4.2** (no nested **4.4.0** from `@x12i/optimixer`).
305
+
306
+ ## [8.1.1] - 2026-05-28
307
+
308
+ ### Changed
309
+
310
+ - **`npm` overrides:** Pin transitive **`@x12i/activix`**, **`@x12i/catalox`**, and **`@x12i/funcx`** to this package's direct versions so graph-engine and other consumers resolve a single copy (no nested **funcx 3.9.x** / **activix 7.x** / **catalox 4.x** from `@exellix/narrix-web-scoper` or `@x12i/funcx`).
311
+
312
+ ## [8.1.0] - 2026-05-28
313
+
314
+ ### Added
315
+
316
+ - **Model profile aliases (`@x12i/ai-profiles`):** Resolve ai-profiles profile/shortcut names and legacy tiers (`weak`, `strong`, `default`) to concrete provider model ids for **ai-skills MAIN** (`skillModel` / `llmCall.model`). Keep **ai-profiles aliases** on **xynthesis** paths (`modelConfig.xynthesisModel`, POST/PRE/scoping `llmCall.model`). Exports: `resolveModelReference`, `resolveModelReferenceForXynthesis`, `normalizeXynthesisModelAlias`, `resolveRunTaskModelReferences`, `isResolvableModelAlias`, `formatResolvedProfileModelId`.
317
+ - **Dual-root `RunTaskRequest.inputs`:** Optional top-level plural payload bucket (distinct from `executionMemory.inputs`); forwarded on MAIN like `input`.
318
+
319
+ ### Changed
320
+
321
+ - **Smart-input validation context:** `inputs.*` resolves against top-level **`request.inputs`** only (not `executionMemory.inputs`). Use **`executionMemory.inputs.*`** for execution-memory plural paths.
322
+ - **PRE `memoryPaths`:** Dual-root fallback `executionMemory.input.<rest>` falls back to `executionMemory.inputs.<firstKey>.<rest>` when singular path is missing.
323
+ - **`@exellix/xynthesis` ^4.0.6:** Xynthesis LLM calls use alias-only model resolution (`resolveModelReferenceForXynthesis`); default post-step model is **`balanced`** when omitted. **`skillModel`** resolution for **`@exellix/ai-skills` ^5.8.6** unchanged.
324
+ - **Validation:** `modelConfig.xynthesisModel` rejects concrete provider ids; accepts ai-profiles aliases (replaces 8.0.0 `MODEL_CONFIG_NOT_RESOLVED` for legacy tiers on both slots).
325
+
326
+ ### Documentation
327
+
328
+ - README — [Model profile aliases](#model-profile-aliases-x12iai-profiles); [`.docs/ai-tasks-model-profile-aliases-7x.md`](../archived/ai-tasks/.docs/ai-tasks-model-profile-aliases-7x.md).
329
+
330
+ ## [8.0.9] - 2026-05-28
331
+
332
+ ### Changed
333
+
334
+ - **Dependencies (graph-engine alignment):** **`@x12i/funcx` ^4.2.0** (no 3.9.x path), **`@x12i/activix` ^8.0.5**, **`@x12i/catalox` ^5.1.1**; **`@x12i/funcx/functions`** re-exports (`FUNCX_EXECUTION_PLAN_FUNCTION_ID`, etc.).
335
+
336
+ ## [8.0.8] - 2026-05-27
337
+
338
+ ### Added
339
+
340
+ - **`getModelCapabilities`** re-export from `@exellix/xynthesis` (replaces removed **`MODEL_CAPABILITIES`** constant).
341
+
342
+ ### Fixed
343
+
344
+ - **Exports:** Removed broken **`MODEL_CAPABILITIES`** re-export from `@exellix/xynthesis` 4.x (symbol removed upstream). Use **`getModelCapabilities(modelId)`** from `@exellix/ai-tasks` or `@exellix/xynthesis` instead.
345
+
346
+ ### Deprecated
347
+
348
+ - **`8.0.7`** — do not use; re-exported **`MODEL_CAPABILITIES`** against **`@exellix/xynthesis` ≥ 4.x** where the symbol no longer exists. Upgrade to **8.0.8+**.
349
+
350
+ ## [7.7.1] - 2026-05-25
351
+
352
+ ### Added
353
+
354
+ - **`RunTaskRequest.taskConfiguration`:** Graph-engine may forward the node `taskConfiguration` blob; **`compileTaskConfigurationOnRunTaskRequest`** (also at **`runTask()`** entry) maps **`aiTaskStrategies.pre: "synthesis"`** and **`aiTaskProfile.inputSynthesis.enabled`** into PRE **`synthesized-context`** + **`includeContextInPrompt: true`**. Exports **`TaskConfigurationCompileError`**, **`AI_TASK_PRE_ENABLE_SYNTHESIS`**.
355
+
356
+ ### Documentation
357
+
358
+ - **`RUNTASK_REQUEST.md`**, **README**, [`.docs/flow-io/xynthesis-pre.md`](../archived/ai-tasks/.docs/flow-io/xynthesis-pre.md), graph-engine task [`reports/graph-engine-task-pre-synthesis-compile.md`](../archived/ai-tasks/reports/graph-engine-task-pre-synthesis-compile.md).
359
+ - Fixtures: [`test/fixtures/run-task/graph-engine-pre-synthesis.json`](test/fixtures/run-task/graph-engine-pre-synthesis.json), [`test/fixtures/graphs/graph-qcrbz6t-pre-synthesis.json`](test/fixtures/graphs/graph-qcrbz6t-pre-synthesis.json).
360
+
361
+ ## [7.6.4] - 2026-05-18
362
+
363
+ ### Changed
364
+
365
+ - **`@exellix/ai-skills` ≥ 5.5.0:** Dependency **5.5.2**; `pickRunSkillRequestFields` forwards top-level **`executionMemory`** on `runSkill` (native `buildWorkingMemory` support). Removed the 7.6.3 `jobMemory.executionMemory` nest bridge.
366
+
367
+ ### Dependencies
368
+
369
+ - **`@exellix/ai-skills`:** `5.5.2` (was `5.4.0`).
370
+
371
+ ## [7.6.3] - 2026-05-18
372
+
373
+ ### Fixed
374
+
375
+ - **Gateway `executionMemory` paths (interim):** `DirectExecutionStrategy` nested `request.executionMemory` on `jobMemory.executionMemory` before `runSkill` for ai-skills **&lt; 5.5.0**. Superseded in **7.6.4** by native top-level forward. Strips `RunTaskRequest`-only fields from the `runSkill` payload.
376
+
377
+ ### Documentation
378
+
379
+ - **Change request:** [`reports/change-request-tasknode-variable-scopes-7.6.2.md`](../archived/ai-tasks/reports/change-request-tasknode-variable-scopes-7.6.2.md) — upstream work for `@exellix/ai-skills`, `@x12i/rendrix`, and optional gateway path aliases.
380
+
381
+ ## [7.6.2] - 2026-05-18
382
+
383
+ ### Fixed
384
+
385
+ - **`smartInput.strict`:** Accepted on `RunTaskRequest.smartInput` and forwarded through `normalizeSmartInputConfig` to the gateway path.
386
+
387
+ ### Changed
388
+
389
+ - **MAIN template variables:** `runTask` forwards **`variables`** (job/graph bucket) **as-is** via `passthroughJobTemplateVariables` — no longer folds `jobContext`, `input`, `xynthesized`, or `smartInput` into `variables`. Node scope remains on **`executionMemory.taskVariables`**.
390
+
391
+ ### Documentation
392
+
393
+ - **`RUNTASK_REQUEST.md`:** TaskNode authoring map (`taskConfiguration`, `inputsConfig`, `taskVariable`, two-bucket `jobVariables` / `taskVariables`), dual `outputValidation`, `inputSynthesis` compile table, forbidden metadata.
394
+ - **README**, web-scoping doc, Narrix JSDoc: authoring path **`taskConfiguration.narrix`** (not `metadata.narrix`).
395
+
396
+ ### Schema
397
+
398
+ - **`run-task-request.json`:** `executionStrategyCatalogItems`, `smartInputRenderOptions`, Rendrix path objects, `smartInput.strict`, variable-bucket descriptions.
399
+
400
+ ## [7.6.0] - 2026-05-18
401
+
402
+ ### Added
403
+
404
+ - **`xynthesized.execution` scope:** `XynthesizedMemory.execution`, `XynthesizedDestinationScope` includes **`"execution"`**, PRE **`xynthesizedOutput.destination: "execution"`** writes and returns **`xynthesizedPatch.execution`** (same replace/merge semantics as job/task; no redirect to other buckets).
405
+ - **Smart-input:** `xynthesized.*` paths must use scope **`job`**, **`task`**, or **`execution`**; **`resolveXynthesizedSmartInputPath`** helper for in-package resolution against request **`xynthesized`**.
406
+ - **`TaskRequestBuilder.withXynthesizedExecution(key, value)`**.
407
+
408
+ ### Documentation
409
+
410
+ - **`RUNTASK_REQUEST.md`**, **`documenations/synthesized-context-guide.md`**, and **`documenations/schemas/v1/run-task-request.json`** updated for the execution bucket.
411
+
412
+ ## [7.2.0] - 2026-05-06
413
+
414
+ ### Changed
415
+
416
+ - **Breaking (exports):** Replaced **`AI_TASKS_FUNCX_*`** constants with **`FUNCX_EXECUTION_PLAN_FUNCTION_ID`** (`execution/plan`), **`FUNCX_EXECUTION_EVALUATE_RESULT_FUNCTION_ID`** (`execution/evaluate-result`), **`FUNCX_RESEARCH_PLAN_QUESTIONS_FUNCTION_ID`** (`research/plan-questions`).
417
+ - **Execution strategies:** Planner and optimizer call **`run(functionId, payload)`** with the **generic FuncX envelope** only (`goal`, `input`, `context`, `result?`, `args`, `attribution`). Responses are adapted via **`adaptExecutionPlanResult`** / **`adaptEvaluateResultResponse`** ([`genericExecutionFuncxEnvelope.ts`](src/execution-strategies/genericExecutionFuncxEnvelope.ts)).
418
+ - **`runPlanWebScopeQuestions`:** Optional **`backend: "funcx"`** for **`research/plan-questions`**; **`setResearchPlanQuestionsFuncxInvoker`** for tests.
419
+ - **`ExecutionType`:** Re-exported from **`@exellix/ai-tasks`** via local [`executionType.ts`](src/types/executionType.ts) (`DIRECT`) because **`@exellix/ai-skills`** no longer exports this symbol on supported versions.
420
+ - **`@x12i/funcx` ≥ 3.8.2:** **`unwrapFuncxRunValue`** delegates to **`getRunJsonResult`** (use **3.8.2+** for current normalization behavior). Re-exports: **`getRunJsonResult`**, **`isHttpRunSuccessBody`**, **`genericExecutionEnvelopeJsonSchema`**, **`buildAskAttribution`**, type **`GenericExecutionEnvelope`**.
421
+
422
+ ## [7.1.2] - 2026-05-06
423
+
424
+ ### Added
425
+
426
+ - **`narrix.webScopeQuestions`:** optional explicit web-scope questions on `RunTaskRequest.narrix`; when `webScopeTemplates` is unset, the NARRIX preprocessor runs `@exellix/narrix-web-scoper` **`scopeQuestionPack`** and stores a normalized `WebScoperResult` in `executionMemory.webContext`.
427
+ - **`runPlanWebScopeQuestions`** (and **`parseAndValidatePlanWebScopeQuestionsOutput`**, **`buildPlanWebScopeQuestionsUserPrompt`**) for AI-driven web-scope planning; FuncX path uses **`research/plan-questions`** (see **Unreleased** / **`FUNCX_RESEARCH_PLAN_QUESTIONS_FUNCTION_ID`**). FR tracker: **`documenations/funcx-scoping-integration-gaps.md`** §6.
428
+
429
+ ### Documentation
430
+
431
+ - **`documenations/web-scoping-in-ai-tasks.md`**, **README**, **RUNTASK_REQUEST.md:** documented `webScopeQuestions` shape and precedence vs templates.
432
+
433
+ ## [7.1.1] - 2026-05-06
434
+
435
+ ### Added
436
+
437
+ - **Package root type exports:** `XynthesizedMemory`, `SmartInputConfig`, `XynthesizedDestinationScope`, `XynthesizedOutputConfig`, `ExecutionStrategyInvocation`, `ExecutionStrategyPhase`, and `ExecutionStrategyWrapperKey` are re-exported from `@exellix/ai-tasks` alongside `RunTaskRequest`, so hosts can depend on stable names instead of `NonNullable<RunTaskRequest['xynthesized']>` or `RunTaskRequest['executionStrategies'][number]`.
438
+
439
+ ### Documentation
440
+
441
+ - **CHANGELOG discipline:** Documented that `package.json` is authoritative for the shipped semver and pointed cross-version migration readers at `BREAKING-CHANGES.md` / `RUNTASK_REQUEST.md` when intermediate entries are missing.
442
+
443
+ _Note: Releases **after 6.0.1** through **before 7.1.1** were not listed here chronologically; consult git history and `BREAKING-CHANGES.md` for that span._
444
+
445
+ ## [6.0.1] - 2026-05-05
446
+
447
+ ### Fixed
448
+
449
+ - **Synthesis E2E gate:** `test/synthesis/e2e-synthesis-real.test.ts` no longer requires `LLM_MODEL_STRONG` / `LLM_MODEL_NORMAL`; it runs when **`RUN_SYNTHESIS_E2E=1`** and a recognized provider key is set (`OPEN_ROUTER_KEY`, `GROK_API_KEY`, etc.). Warns when a model env var is missing.
450
+
451
+ ### Documentation
452
+
453
+ - **Xynthesis upstream work:** [`documenations/xynthesis-upstream-fixes-checklist.md`](documenations/xynthesis-upstream-fixes-checklist.md) (Activix `diagnostics.owner`, `jobId`/`taskId` hardening in `runSidekickGatewayCall`, tests to add in xynthesis).
454
+
455
+ ## [6.0.0] - 2026-05-04
456
+
457
+ ### Breaking
458
+
459
+ - **`runTask` / `RunTaskRequest`:** `agentId`, `jobTypeId`, and `taskTypeId` are **required** again (aligned with `@exellix/ai-skills` `RunSkillRequest`). `runTask()` calls **`assertRequiredRunSkillCorrelation`** and throws if any value is missing or whitespace-only.
460
+ - **`TaskRequestBuilder.build()`** throws unless those three fields were set (use **`withAiSkillsCorrelation`** or **`withAgentId` / `withJobTypeId` / `withTaskTypeId`**).
461
+ - **`TaskConvenienceMethods.executeDirect`** now requires an **`options`** object including **`agentId`**, **`jobTypeId`**, and **`taskTypeId`** (third argument is no longer optional).
462
+ - **`TaskConvenienceMethods.executeWithType`** now requires the **`options`** argument (same correlation fields as `RunTaskRequest`).
463
+
464
+ ### Added
465
+
466
+ - Exported **`assertRequiredRunSkillCorrelation`** from the package root for hosts that validate payloads before calling `runTask`.
467
+
468
+ ## [5.7.1] - 2026-05-04
469
+
470
+ ### Fixed
471
+
472
+ - **Types:** `RunTaskRequest` now **omits and re-declares** `agentId`, `jobTypeId`, and `taskTypeId` as **optional**, matching `runTask()` usage and latest `@exellix/ai-skills` `RunSkillRequest` where those fields are required. Callers can still pass them when the gateway requires them.
473
+
474
+ ## [5.7.0] - 2026-05-04
475
+
476
+ ### Added
477
+
478
+ - **RunTask request contract documentation:** [`RUNTASK_REQUEST.md`](RUNTASK_REQUEST.md) — normative field list, template merge precedence, `executionMemory` vs `jobMemory.execution`, `executionPipeline` semantics, xynthesis visibility notes, and examples.
479
+ - **JSON Schema fragment:** [`documenations/schemas/v1/run-task-request.json`](documenations/schemas/v1/run-task-request.json) and OpenAPI component `RunTaskRequestSubset` in [`documenations/schemas/openapi-3.1-components.yaml`](documenations/schemas/openapi-3.1-components.yaml).
480
+ - **Request shape helpers** (exported from package root): `normalizeRunTaskRequest`, `collectRunTaskRequestWarnings`, `collectExecutionPipelineWarnings`, `isRunTaskRequestWarningsEnabled`.
481
+ - **Env-gated diagnostics:** `AI_TASKS_REQUEST_WARNINGS=1` (also `true` / `yes`) logs structured JSON for deprecated duplicate fields, ignored pipeline steps, and observability hints at the start of each `runTask` call.
482
+
483
+ ### Changed
484
+
485
+ - **Types:** `RunTaskRequest` documents deprecated mirrors: optional root `question`, `inputs`, and `jobInput` (typed for discoverability; removal deferred to a future major after hosts migrate).
486
+
487
+ ### Notes
488
+
489
+ - **Additive / non-breaking:** Runtime merge behavior is unchanged; warnings are opt-in via env.
490
+ - **Cross-package:** Minimum orchestrator (e.g. graph-engine) version is **not declared** in `@exellix/ai-tasks` — follow the consuming app’s pinned `@exellix/ai-tasks` range; see `RUNTASK_REQUEST.md` § Orchestrator integration.