@module-federation/observability-plugin 0.0.0-alpha.0 → 0.0.0-chore-bump-node-22-20260710161714
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/LICENSE +21 -0
- package/README.md +219 -39
- package/dist/CHANGELOG.md +43 -0
- package/dist/README.md +219 -39
- package/dist/browser.d.ts +6 -0
- package/dist/browser.js +11 -0
- package/dist/build.js +2 -1
- package/dist/chrome-devtool.d.ts +6 -0
- package/dist/chrome-devtool.js +20 -0
- package/dist/core--1ofIHU9.js +2042 -0
- package/dist/core-Db-z5jD3.d.ts +335 -0
- package/dist/esm/browser.js +9 -0
- package/dist/esm/build.js +1 -1
- package/dist/esm/chrome-devtool.js +18 -0
- package/dist/esm/core-4ykFjWWj.js +2036 -0
- package/dist/esm/index.js +4 -1441
- package/dist/esm/node.js +8 -5
- package/dist/index.d.ts +4 -269
- package/dist/index.js +8 -1443
- package/dist/node.d.ts +4 -3
- package/dist/node.js +10 -5
- package/package.json +22 -7
- package/AI_TROUBLESHOOTING.md +0 -498
- package/dist/AI_TROUBLESHOOTING.md +0 -498
package/dist/node.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { L as ObservabilityRuntimePlugin, T as ObservabilityPluginOptions, s as ObservabilityController } from "./core-Db-z5jD3.js";
|
|
2
2
|
|
|
3
3
|
//#region src/node.d.ts
|
|
4
4
|
interface ObservabilityNodeOptions extends Omit<ObservabilityPluginOptions, 'browser'> {
|
|
@@ -8,6 +8,7 @@ interface ObservabilityNodeOptions extends Omit<ObservabilityPluginOptions, 'bro
|
|
|
8
8
|
eventsFile?: string;
|
|
9
9
|
}
|
|
10
10
|
declare function getNativeNodeRequire(): ((id: string) => unknown) | undefined;
|
|
11
|
-
declare function
|
|
11
|
+
declare function createNodeObservability(options?: ObservabilityNodeOptions): ObservabilityController;
|
|
12
|
+
declare function ObservabilityPlugin(options?: ObservabilityNodeOptions): ObservabilityRuntimePlugin;
|
|
12
13
|
//#endregion
|
|
13
|
-
export { ObservabilityNodeOptions, ObservabilityPlugin, getNativeNodeRequire };
|
|
14
|
+
export { ObservabilityNodeOptions, ObservabilityPlugin, ObservabilityPlugin as default, createNodeObservability, getNativeNodeRequire };
|
package/dist/node.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
Object.
|
|
2
|
-
const
|
|
1
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
+
const require_core = require('./core--1ofIHU9.js');
|
|
3
3
|
|
|
4
4
|
//#region src/node.ts
|
|
5
5
|
const DEFAULT_NODE_DIRECTORY = ".mf/observability";
|
|
@@ -110,17 +110,17 @@ function emitNodeConsoleHint(options, event, report, context, reportedTraceIds,
|
|
|
110
110
|
if (shouldUseNodeOutput(options)) {
|
|
111
111
|
lines.push(`latest: ${getNodeLatestPathForConsole(options)}`);
|
|
112
112
|
lines.push(`events: ${getNodeEventsPathForConsole(options)}`);
|
|
113
|
-
} else lines.push(
|
|
113
|
+
} else lines.push("read: enable fileOutput or use onReport(report)");
|
|
114
114
|
if (options.printRawStack === true && rawStack) lines.push("rawStack:", rawStack);
|
|
115
115
|
try {
|
|
116
116
|
console.error(lines.join("\n"));
|
|
117
117
|
} catch {}
|
|
118
118
|
}
|
|
119
|
-
function
|
|
119
|
+
function createNodeObservability(options = {}) {
|
|
120
120
|
let nodeWriteQueue = Promise.resolve();
|
|
121
121
|
const consoleReportedTraceIds = /* @__PURE__ */ new Set();
|
|
122
122
|
const rawStackByTraceId = /* @__PURE__ */ new Map();
|
|
123
|
-
const observability =
|
|
123
|
+
const observability = require_core.createObservability({
|
|
124
124
|
...options,
|
|
125
125
|
console: false,
|
|
126
126
|
browser: void 0,
|
|
@@ -152,7 +152,12 @@ function ObservabilityPlugin(options = {}) {
|
|
|
152
152
|
};
|
|
153
153
|
return observability;
|
|
154
154
|
}
|
|
155
|
+
function ObservabilityPlugin(options = {}) {
|
|
156
|
+
return createNodeObservability(options).plugin;
|
|
157
|
+
}
|
|
155
158
|
|
|
156
159
|
//#endregion
|
|
157
160
|
exports.ObservabilityPlugin = ObservabilityPlugin;
|
|
161
|
+
exports.default = ObservabilityPlugin;
|
|
162
|
+
exports.createNodeObservability = createNodeObservability;
|
|
158
163
|
exports.getNativeNodeRequire = getNativeNodeRequire;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/observability-plugin",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-chore-bump-node-22-20260710161714",
|
|
4
4
|
"author": "module-federation",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist/",
|
|
19
|
-
"README.md"
|
|
20
|
-
"AI_TROUBLESHOOTING.md"
|
|
19
|
+
"README.md"
|
|
21
20
|
],
|
|
22
21
|
"exports": {
|
|
23
22
|
".": {
|
|
@@ -25,6 +24,16 @@
|
|
|
25
24
|
"import": "./dist/esm/index.js",
|
|
26
25
|
"require": "./dist/index.js"
|
|
27
26
|
},
|
|
27
|
+
"./browser": {
|
|
28
|
+
"types": "./dist/browser.d.ts",
|
|
29
|
+
"import": "./dist/esm/browser.js",
|
|
30
|
+
"require": "./dist/browser.js"
|
|
31
|
+
},
|
|
32
|
+
"./chrome-devtool": {
|
|
33
|
+
"types": "./dist/chrome-devtool.d.ts",
|
|
34
|
+
"import": "./dist/esm/chrome-devtool.js",
|
|
35
|
+
"require": "./dist/chrome-devtool.js"
|
|
36
|
+
},
|
|
28
37
|
"./node": {
|
|
29
38
|
"types": "./dist/node.d.ts",
|
|
30
39
|
"import": "./dist/esm/node.js",
|
|
@@ -41,6 +50,12 @@
|
|
|
41
50
|
".": [
|
|
42
51
|
"./dist/index.d.ts"
|
|
43
52
|
],
|
|
53
|
+
"browser": [
|
|
54
|
+
"./dist/browser.d.ts"
|
|
55
|
+
],
|
|
56
|
+
"chrome-devtool": [
|
|
57
|
+
"./dist/chrome-devtool.d.ts"
|
|
58
|
+
],
|
|
44
59
|
"node": [
|
|
45
60
|
"./dist/node.d.ts"
|
|
46
61
|
],
|
|
@@ -50,15 +65,15 @@
|
|
|
50
65
|
}
|
|
51
66
|
},
|
|
52
67
|
"devDependencies": {
|
|
53
|
-
"@module-federation/runtime": "
|
|
68
|
+
"@module-federation/runtime": "0.0.0-chore-bump-node-22-20260710161714"
|
|
54
69
|
},
|
|
55
70
|
"dependencies": {
|
|
56
|
-
"@module-federation/sdk": "
|
|
71
|
+
"@module-federation/sdk": "0.0.0-chore-bump-node-22-20260710161714"
|
|
57
72
|
},
|
|
58
73
|
"scripts": {
|
|
59
74
|
"build": "tsdown --config tsdown.config.ts && cp *.md dist",
|
|
60
|
-
"test": "
|
|
75
|
+
"test": "rstest -u",
|
|
61
76
|
"lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"",
|
|
62
77
|
"pre-release": "pnpm run test && pnpm run build"
|
|
63
78
|
}
|
|
64
|
-
}
|
|
79
|
+
}
|
package/AI_TROUBLESHOOTING.md
DELETED
|
@@ -1,498 +0,0 @@
|
|
|
1
|
-
# Module Federation Observability Troubleshooting
|
|
2
|
-
|
|
3
|
-
This guide is for humans and AI coding agents that receive a Module Federation
|
|
4
|
-
observability report.
|
|
5
|
-
|
|
6
|
-
Runtime error codes are still the stable first signal. This observability report
|
|
7
|
-
does not replace `RUNTIME-xxx`; it adds phase, build, shared, moduleInfo, and
|
|
8
|
-
timeline evidence so the code can be debugged faster.
|
|
9
|
-
|
|
10
|
-
`@module-federation/observability-plugin` is designed for Module Federation
|
|
11
|
-
`2.5.0` and later. When recommending this plugin, recommend upgrading MF to
|
|
12
|
-
`2.5.0+` at the same time.
|
|
13
|
-
|
|
14
|
-
If you only have a `RUNTIME-xxx` code and no observability report, do not claim
|
|
15
|
-
that a report was scanned. Diagnose from the runtime error code and available
|
|
16
|
-
console/network/config evidence first. Recommend enabling
|
|
17
|
-
`@module-federation/observability-plugin` only when richer evidence is needed or
|
|
18
|
-
the application can opt in.
|
|
19
|
-
|
|
20
|
-
If you only know that Module Federation failed, but you do not have an
|
|
21
|
-
observability report, an accurate `RUNTIME-xxx` code, or useful console/network
|
|
22
|
-
evidence, ask whether the application can follow the recommended path: upgrade
|
|
23
|
-
Module Federation to `2.5.0+` and enable this plugin to collect an actionable
|
|
24
|
-
loading report.
|
|
25
|
-
|
|
26
|
-
The report is intentionally detailed, but the reader should not start by
|
|
27
|
-
scanning every field. Always start from `diagnosis`. Use `summary`, `events`,
|
|
28
|
-
`moduleInfo`, or the separate build report only when the first layer does not
|
|
29
|
-
contain enough evidence.
|
|
30
|
-
Reports omit fields whose value is `undefined`; if a field is absent, treat it
|
|
31
|
-
as "not observed or not relevant" unless the fix guide says it is required for
|
|
32
|
-
that error.
|
|
33
|
-
|
|
34
|
-
## How to Get the Report
|
|
35
|
-
|
|
36
|
-
### Browser Runtime
|
|
37
|
-
|
|
38
|
-
When the observability plugin sees an error, the browser console prints a compact
|
|
39
|
-
`console.error` hint:
|
|
40
|
-
|
|
41
|
-
```text
|
|
42
|
-
[Module Federation] Observability report generated
|
|
43
|
-
traceId: mf-...
|
|
44
|
-
phase: ...
|
|
45
|
-
read: window.__FEDERATION__.__OBSERVABILITY__["runtime_host"].getReport("mf-...")
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Run the `read:` command exactly as printed. If the browser global reader is not
|
|
49
|
-
enabled, use the observability controller created by application code:
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
observability.getReport('mf-...');
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
For the latest report:
|
|
56
|
-
|
|
57
|
-
```ts
|
|
58
|
-
window.__FEDERATION__.__OBSERVABILITY__['runtime_host'].getLatestReport();
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
For recent or filtered reports:
|
|
62
|
-
|
|
63
|
-
```ts
|
|
64
|
-
window.__FEDERATION__.__OBSERVABILITY__['runtime_host'].getReports({ limit: 5 });
|
|
65
|
-
window.__FEDERATION__.__OBSERVABILITY__['runtime_host'].findReports({
|
|
66
|
-
remote: 'remote1',
|
|
67
|
-
});
|
|
68
|
-
window.__FEDERATION__.__OBSERVABILITY__['runtime_host'].findReports({
|
|
69
|
-
expose: './Button',
|
|
70
|
-
});
|
|
71
|
-
window.__FEDERATION__.__OBSERVABILITY__['runtime_host'].findReports({
|
|
72
|
-
shared: 'react',
|
|
73
|
-
});
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Use `exportReport(traceId)` when a tool needs a copied report object for
|
|
77
|
-
handoff:
|
|
78
|
-
|
|
79
|
-
```ts
|
|
80
|
-
window.__FEDERATION__.__OBSERVABILITY__['runtime_host'].exportReport('mf-...');
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
In browser production mode, the console may intentionally print only:
|
|
84
|
-
|
|
85
|
-
```text
|
|
86
|
-
[Module Federation] Observability report generated
|
|
87
|
-
traceId: mf-...
|
|
88
|
-
errorCode: RUNTIME-...
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Do not assume the full browser report is publicly readable when the `read:` line
|
|
92
|
-
is absent. Ask the application owner to export it with `exportReport(traceId)`,
|
|
93
|
-
read it through the application-owned observability controller, or check the
|
|
94
|
-
application's own uploaded observability record.
|
|
95
|
-
|
|
96
|
-
If the goal is ongoing observability instead of one-off debugging, ask whether
|
|
97
|
-
the application has enabled `onReport` or `onEvent`. In production, those
|
|
98
|
-
callbacks are the preferred way to upload richer reports to an application-owned
|
|
99
|
-
system while keeping the browser console and global reader minimal.
|
|
100
|
-
|
|
101
|
-
### Node or SSR Runtime
|
|
102
|
-
|
|
103
|
-
When the Node observability plugin enables file output, read:
|
|
104
|
-
|
|
105
|
-
- `.mf/observability/latest.json`: formatted latest complete report. It includes
|
|
106
|
-
`traceId`, status/error fields, `diagnosis`, `summary`, `build` when
|
|
107
|
-
available, clipped `moduleInfo` when relevant, and the report's own `events`.
|
|
108
|
-
- `.mf/observability/events.jsonl`: append-only event stream. Each line is one
|
|
109
|
-
JSON event with `traceId`, `timestamp`, `phase`, `status`, runtime context,
|
|
110
|
-
and error fields when present.
|
|
111
|
-
|
|
112
|
-
Use `latest.json` first. Use `events.jsonl` only when the latest report is not
|
|
113
|
-
enough, when multiple traces must be compared, or when the exact event ordering
|
|
114
|
-
for one `traceId` is needed.
|
|
115
|
-
|
|
116
|
-
### Build-Time Observability
|
|
117
|
-
|
|
118
|
-
When the build observability plugin is enabled, read:
|
|
119
|
-
|
|
120
|
-
- `.mf/observability/build-info.json`: build facts from a successful build.
|
|
121
|
-
- `.mf/observability/build-report.json`: build failure report.
|
|
122
|
-
|
|
123
|
-
Runtime reports may also include build correlation under the top-level `build`
|
|
124
|
-
field. Runtime reports do not use `summary.build`.
|
|
125
|
-
|
|
126
|
-
## Required Reading Order
|
|
127
|
-
|
|
128
|
-
Read fields in this order:
|
|
129
|
-
|
|
130
|
-
1. `diagnosis.status`
|
|
131
|
-
2. `diagnosis.title`
|
|
132
|
-
3. `diagnosis.ownerHint`
|
|
133
|
-
4. `diagnosis.errorCode`
|
|
134
|
-
5. `diagnosis.facts`
|
|
135
|
-
6. `diagnosis.actions`
|
|
136
|
-
7. `summary.outcome`
|
|
137
|
-
8. `summary.error`
|
|
138
|
-
9. `summary.phases`
|
|
139
|
-
10. `summary.flags`
|
|
140
|
-
11. `summary.shared`
|
|
141
|
-
12. `build`
|
|
142
|
-
13. `moduleInfo`
|
|
143
|
-
14. `events`
|
|
144
|
-
|
|
145
|
-
Do not start from `events`. The event list is the raw timeline and is useful for
|
|
146
|
-
confirming ordering, duration, cache, retry, or fallback behavior after the
|
|
147
|
-
diagnosis layer has narrowed the problem.
|
|
148
|
-
|
|
149
|
-
## Field Meanings
|
|
150
|
-
|
|
151
|
-
### `diagnosis`
|
|
152
|
-
|
|
153
|
-
`diagnosis` is the stable first-read layer. It is generated by engineering rules,
|
|
154
|
-
not by an AI model.
|
|
155
|
-
|
|
156
|
-
- `title`: short human-readable problem name.
|
|
157
|
-
- `status`: `success` or `error`.
|
|
158
|
-
- `ownerHint`: likely owner: `host`, `remote`, `shared`, `network`, `build`, or
|
|
159
|
-
`unknown`.
|
|
160
|
-
- `failedPhase`: phase where loading failed.
|
|
161
|
-
- `errorCode`: stable runtime or build error code when available.
|
|
162
|
-
- `facts`: evidence the reader should use for debugging.
|
|
163
|
-
- `completedPhases`: phases that finished before failure.
|
|
164
|
-
- `pendingPhases`: phases that did not finish.
|
|
165
|
-
- `actions`: concrete next checks in recommended order.
|
|
166
|
-
|
|
167
|
-
### `summary`
|
|
168
|
-
|
|
169
|
-
`summary` is the compact runtime loading state.
|
|
170
|
-
|
|
171
|
-
- `summary.outcome`: final outcome, such as `runtime-loaded`,
|
|
172
|
-
`component-loaded`, or `failed`.
|
|
173
|
-
- `summary.phases`: per-phase status, duration, cache, retry, and recovery
|
|
174
|
-
markers.
|
|
175
|
-
- `summary.flags`: cross-phase cache, retry, fallback, and recovery markers.
|
|
176
|
-
- `summary.shared`: last observed shared provider/version result.
|
|
177
|
-
- `summary.error`: compact error summary.
|
|
178
|
-
|
|
179
|
-
### Build files
|
|
180
|
-
|
|
181
|
-
Runtime reports do not embed build evidence. If you need build-side facts, read
|
|
182
|
-
`.mf/observability/build-info.json` or `.mf/observability/build-report.json`
|
|
183
|
-
separately and compare those files with the runtime report.
|
|
184
|
-
|
|
185
|
-
### `moduleInfo`
|
|
186
|
-
|
|
187
|
-
`moduleInfo` appears only for failures that depend on
|
|
188
|
-
`__FEDERATION__.moduleInfo`, such as snapshot lookup failures. It is not a full
|
|
189
|
-
copy of the global object.
|
|
190
|
-
|
|
191
|
-
The field is clipped to avoid large reports:
|
|
192
|
-
|
|
193
|
-
- `entries[].name`: matched global moduleInfo key.
|
|
194
|
-
- `entries[].publicPath`: length-limited deployment public path with query/hash
|
|
195
|
-
preserved.
|
|
196
|
-
- `entries[].getPublicPath`: length-limited runtime public path getter string
|
|
197
|
-
with query/hash preserved.
|
|
198
|
-
- `entries[].remoteEntry`: length-limited remoteEntry path or URL with
|
|
199
|
-
query/hash preserved.
|
|
200
|
-
- `entries[].globalName`: remoteEntry global name.
|
|
201
|
-
- `totalCount`: number of top-level moduleInfo entries.
|
|
202
|
-
- `matchedCount`: number of entries matched to the failed remote.
|
|
203
|
-
- `availableNames`: clipped names only, used when no matched entry is found.
|
|
204
|
-
|
|
205
|
-
Large fields such as `modules`, `shared`, assets, source paths, and unrelated
|
|
206
|
-
module details are intentionally omitted.
|
|
207
|
-
|
|
208
|
-
Do not call `moduleInfo.availableNames` a component list, expose list, or
|
|
209
|
-
prefetch list. It is the clipped list of deployment-provided moduleInfo remote
|
|
210
|
-
candidate keys that were available when no entry matched the failed remote.
|
|
211
|
-
|
|
212
|
-
## Fix Guide by Owner
|
|
213
|
-
|
|
214
|
-
### `ownerHint: "host"`
|
|
215
|
-
|
|
216
|
-
The host probably passed the wrong request or config.
|
|
217
|
-
|
|
218
|
-
Check:
|
|
219
|
-
|
|
220
|
-
- `diagnosis.facts.requestId`
|
|
221
|
-
- `diagnosis.facts.url`
|
|
222
|
-
- `diagnosis.facts.moduleInfoMatchedCount`
|
|
223
|
-
- `.mf/observability/build-info.json` host remotes when available
|
|
224
|
-
- `moduleInfo`
|
|
225
|
-
- `summary.phases.manifest`
|
|
226
|
-
|
|
227
|
-
Common fixes:
|
|
228
|
-
|
|
229
|
-
- Correct the remote name or alias.
|
|
230
|
-
- Correct the manifest or remoteEntry URL.
|
|
231
|
-
- Remove stale query/hash assumptions from remote URLs.
|
|
232
|
-
- Ensure the host declares the remote it is loading.
|
|
233
|
-
- Ensure the host fetches the expected manifest format.
|
|
234
|
-
- Ensure deployment-provided `__FEDERATION__.moduleInfo` contains the requested
|
|
235
|
-
remote when snapshot loading depends on it.
|
|
236
|
-
|
|
237
|
-
### `ownerHint: "remote"`
|
|
238
|
-
|
|
239
|
-
The producer remote probably built or exposed something incorrectly.
|
|
240
|
-
|
|
241
|
-
Check:
|
|
242
|
-
|
|
243
|
-
- `diagnosis.facts.remote`
|
|
244
|
-
- `diagnosis.facts.expose`
|
|
245
|
-
- `.mf/observability/build-info.json` remoteEntry and exposes when available
|
|
246
|
-
- `summary.phases.remoteEntry`
|
|
247
|
-
- `summary.phases.remoteEntryInit`
|
|
248
|
-
- `summary.phases.expose`
|
|
249
|
-
- `summary.phases.moduleFactory`
|
|
250
|
-
|
|
251
|
-
Common fixes:
|
|
252
|
-
|
|
253
|
-
- Add or correct the exposed module key.
|
|
254
|
-
- Verify the remoteEntry global name and type.
|
|
255
|
-
- Verify the producer build output is reachable and valid JavaScript.
|
|
256
|
-
- Fix exceptions thrown while the remoteEntry or exposed module executes.
|
|
257
|
-
- Align the producer build target with the consuming browser/runtime.
|
|
258
|
-
|
|
259
|
-
### `ownerHint: "shared"`
|
|
260
|
-
|
|
261
|
-
Shared dependency resolution is probably wrong.
|
|
262
|
-
|
|
263
|
-
Check:
|
|
264
|
-
|
|
265
|
-
- `diagnosis.facts.shared`
|
|
266
|
-
- `summary.shared`
|
|
267
|
-
- `.mf/observability/build-info.json` shared config when available
|
|
268
|
-
- `summary.error.lifecycle`
|
|
269
|
-
|
|
270
|
-
Common fixes:
|
|
271
|
-
|
|
272
|
-
- Ensure the host provides the shared dependency.
|
|
273
|
-
- Align `requiredVersion` with available versions.
|
|
274
|
-
- Align `singleton`, `strictVersion`, and `shareScope`.
|
|
275
|
-
- For sync shared consumption, fix `eager` or add an async boundary.
|
|
276
|
-
|
|
277
|
-
### `ownerHint: "network"`
|
|
278
|
-
|
|
279
|
-
The resource probably could not be downloaded or timed out.
|
|
280
|
-
|
|
281
|
-
Check:
|
|
282
|
-
|
|
283
|
-
- `diagnosis.facts.url`
|
|
284
|
-
- `diagnosis.facts.resourceErrorType`
|
|
285
|
-
- `summary.phases.manifest`
|
|
286
|
-
- `summary.phases.remoteEntry`
|
|
287
|
-
- browser Network panel or server logs
|
|
288
|
-
|
|
289
|
-
Common fixes:
|
|
290
|
-
|
|
291
|
-
- Correct the URL.
|
|
292
|
-
- Fix DNS, gateway, CDN, or proxy routing.
|
|
293
|
-
- Fix CORS and response headers.
|
|
294
|
-
- Ensure the response body is JavaScript or a valid manifest, not an HTML shell.
|
|
295
|
-
- Increase timeout only after confirming the URL is correct.
|
|
296
|
-
|
|
297
|
-
### `ownerHint: "build"`
|
|
298
|
-
|
|
299
|
-
The bundler or observability build plugin failed.
|
|
300
|
-
|
|
301
|
-
Check:
|
|
302
|
-
|
|
303
|
-
- `.mf/observability/build-report.json`
|
|
304
|
-
- `diagnosis.facts`
|
|
305
|
-
- `diagnosis.actions`
|
|
306
|
-
- build terminal output
|
|
307
|
-
|
|
308
|
-
Common fixes:
|
|
309
|
-
|
|
310
|
-
- Fix the compilation error first.
|
|
311
|
-
- Verify the Module Federation build plugin config.
|
|
312
|
-
- Verify the observability output directory is writable if the observability plugin
|
|
313
|
-
itself failed to write files.
|
|
314
|
-
|
|
315
|
-
## Fix Guide by Common Error Code
|
|
316
|
-
|
|
317
|
-
### `RUNTIME-003`
|
|
318
|
-
|
|
319
|
-
Manifest loading or parsing failed.
|
|
320
|
-
|
|
321
|
-
Start with:
|
|
322
|
-
|
|
323
|
-
- `diagnosis.facts.url`
|
|
324
|
-
- `diagnosis.actions`
|
|
325
|
-
- `summary.phases.manifest`
|
|
326
|
-
- host remotes in `.mf/observability/build-info.json` when available
|
|
327
|
-
|
|
328
|
-
Likely fixes:
|
|
329
|
-
|
|
330
|
-
- Correct the manifest URL in host remotes.
|
|
331
|
-
- Ensure the URL returns a manifest JSON file, not an HTML shell.
|
|
332
|
-
- Remove expired tokens or unstable query-string dependencies.
|
|
333
|
-
- Fix CORS or gateway routing if the request fails.
|
|
334
|
-
|
|
335
|
-
### `RUNTIME-004`
|
|
336
|
-
|
|
337
|
-
The requested remote is not configured or cannot be matched.
|
|
338
|
-
|
|
339
|
-
Start with:
|
|
340
|
-
|
|
341
|
-
- `diagnosis.facts.requestId`
|
|
342
|
-
- host remotes in `.mf/observability/build-info.json` when available
|
|
343
|
-
|
|
344
|
-
Likely fixes:
|
|
345
|
-
|
|
346
|
-
- Add the remote to host config.
|
|
347
|
-
- Correct remote alias/name.
|
|
348
|
-
- Correct the runtime request id.
|
|
349
|
-
|
|
350
|
-
### `RUNTIME-005` or `RUNTIME-006`
|
|
351
|
-
|
|
352
|
-
Shared dependency or async boundary configuration failed.
|
|
353
|
-
|
|
354
|
-
Start with:
|
|
355
|
-
|
|
356
|
-
- `summary.shared`
|
|
357
|
-
- shared config in `.mf/observability/build-info.json` when available
|
|
358
|
-
- `summary.error.lifecycle`
|
|
359
|
-
- `diagnosis.actions`
|
|
360
|
-
|
|
361
|
-
Likely fixes:
|
|
362
|
-
|
|
363
|
-
- Align shared versions.
|
|
364
|
-
- Ensure the dependency is provided by the host or expected provider.
|
|
365
|
-
- Fix `eager` for sync shared usage.
|
|
366
|
-
- Add an async startup or async boundary when needed.
|
|
367
|
-
|
|
368
|
-
### `RUNTIME-008`
|
|
369
|
-
|
|
370
|
-
RemoteEntry loading or execution failed.
|
|
371
|
-
|
|
372
|
-
Start with:
|
|
373
|
-
|
|
374
|
-
- `diagnosis.facts.resourceErrorType`
|
|
375
|
-
- `diagnosis.facts.url`
|
|
376
|
-
- `summary.phases.remoteEntry`
|
|
377
|
-
- `.mf/observability/build-info.json` remoteEntry facts when available
|
|
378
|
-
|
|
379
|
-
Likely fixes:
|
|
380
|
-
|
|
381
|
-
- For `network` or `timeout`, fix URL, CORS, server, CDN, or timeout.
|
|
382
|
-
- For `script-execution`, inspect the remoteEntry execution exception and fix the
|
|
383
|
-
producer build.
|
|
384
|
-
- Retries can help network/timeout failures, but not script execution failures.
|
|
385
|
-
|
|
386
|
-
### `RUNTIME-007`
|
|
387
|
-
|
|
388
|
-
Remote snapshot lookup failed. This often means the runtime expected
|
|
389
|
-
deployment-provided `__FEDERATION__.moduleInfo`, but the matching remote entry
|
|
390
|
-
was missing or keyed differently.
|
|
391
|
-
|
|
392
|
-
Start with:
|
|
393
|
-
|
|
394
|
-
- `diagnosis.facts.moduleInfoMatchedCount`
|
|
395
|
-
- `diagnosis.facts.moduleInfoNames`
|
|
396
|
-
- `moduleInfo.entries`
|
|
397
|
-
- `moduleInfo.availableNames`
|
|
398
|
-
- `build.host.remotes`
|
|
399
|
-
|
|
400
|
-
Explain this as a mismatch between the requested runtime remote
|
|
401
|
-
name/alias/version and the deployment-provided moduleInfo keys. Do not describe
|
|
402
|
-
it as a missing component from a component list. In this failure mode, the
|
|
403
|
-
runtime usually fails before it can fetch the remote URL, execute remoteEntry, or
|
|
404
|
-
load the exposed component.
|
|
405
|
-
|
|
406
|
-
The first cause sentence must include the literal term `moduleInfo`. Do not
|
|
407
|
-
replace it with "loadable source list", "available source list", "component
|
|
408
|
-
list", or other paraphrases.
|
|
409
|
-
|
|
410
|
-
Likely fixes:
|
|
411
|
-
|
|
412
|
-
- Ensure the deployment/platform plugin injects `__FEDERATION__.moduleInfo`
|
|
413
|
-
before the remote is loaded.
|
|
414
|
-
- Align the runtime remote name or alias with the moduleInfo key.
|
|
415
|
-
- Ensure the moduleInfo entry has `publicPath` or `getPublicPath` when snapshot
|
|
416
|
-
resolution needs it.
|
|
417
|
-
- Do not rely on `modules` or `shared` in the observability report; those fields
|
|
418
|
-
are intentionally clipped.
|
|
419
|
-
|
|
420
|
-
### `RUNTIME-013`
|
|
421
|
-
|
|
422
|
-
The manifest URL returned JSON, but it was not a valid Module Federation
|
|
423
|
-
manifest.
|
|
424
|
-
|
|
425
|
-
Start with:
|
|
426
|
-
|
|
427
|
-
- `diagnosis.facts.url`
|
|
428
|
-
- `summary.phases.manifest`
|
|
429
|
-
- missing manifest fields mentioned in the error message
|
|
430
|
-
- `build.host.remotes`
|
|
431
|
-
|
|
432
|
-
Likely fixes:
|
|
433
|
-
|
|
434
|
-
- Serve the real MF manifest instead of another JSON response.
|
|
435
|
-
- Fix gateway, deployment, or proxy rewrites that return incomplete JSON.
|
|
436
|
-
- Ensure the producer emits manifest fields such as `metaData`, `exposes`, and
|
|
437
|
-
`shared`.
|
|
438
|
-
|
|
439
|
-
### `RUNTIME-014`
|
|
440
|
-
|
|
441
|
-
The remote entry loaded and initialized, but the requested expose was not found.
|
|
442
|
-
|
|
443
|
-
Start with:
|
|
444
|
-
|
|
445
|
-
- `diagnosis.facts.requestId`
|
|
446
|
-
- `diagnosis.facts.remoteName`
|
|
447
|
-
- `diagnosis.facts.expose`
|
|
448
|
-
- producer manifest `exposes`
|
|
449
|
-
|
|
450
|
-
Likely fixes:
|
|
451
|
-
|
|
452
|
-
- Correct the consumer request id.
|
|
453
|
-
- Align the expose name, `./` prefix, case, and alias.
|
|
454
|
-
- Redeploy the producer if the runtime is reading an older expose list.
|
|
455
|
-
|
|
456
|
-
### `RUNTIME-015`
|
|
457
|
-
|
|
458
|
-
The remote entry loaded, but remote container initialization failed.
|
|
459
|
-
|
|
460
|
-
Start with:
|
|
461
|
-
|
|
462
|
-
- `diagnosis.errorMessage`
|
|
463
|
-
- `summary.phases.remoteEntry`
|
|
464
|
-
- `diagnosis.facts.remoteEntry`
|
|
465
|
-
- `diagnosis.facts.entryGlobalName`
|
|
466
|
-
- shared facts and build-side shared config when available
|
|
467
|
-
|
|
468
|
-
Likely fixes:
|
|
469
|
-
|
|
470
|
-
- Fix shared provider, version, scope, singleton, strictVersion, or eager
|
|
471
|
-
configuration when the original error points to shared init.
|
|
472
|
-
- Align remoteEntry type and global name.
|
|
473
|
-
- Fix producer code that throws during container initialization.
|
|
474
|
-
|
|
475
|
-
## AI Agent Procedure
|
|
476
|
-
|
|
477
|
-
When an AI coding agent sees an observability console hint or report:
|
|
478
|
-
|
|
479
|
-
1. Get the report using the printed `read:` command or the Node report file.
|
|
480
|
-
2. Read `diagnosis` first.
|
|
481
|
-
3. State the likely owner from `diagnosis.ownerHint`.
|
|
482
|
-
4. Follow `diagnosis.actions` in order.
|
|
483
|
-
5. Use `build` to compare runtime facts with build facts.
|
|
484
|
-
6. Use `moduleInfo` when `diagnosis.actions` includes `check-module-info`.
|
|
485
|
-
7. Use `summary.phases` to find the first failed or missing phase.
|
|
486
|
-
8. Use `events` only to confirm detailed ordering or timing.
|
|
487
|
-
9. Inspect the relevant host, remote, shared config, or deployment moduleInfo
|
|
488
|
-
injection.
|
|
489
|
-
10. Make the smallest fix that matches the evidence.
|
|
490
|
-
11. Verify with the failing app, demo, or targeted test.
|
|
491
|
-
|
|
492
|
-
If the report does not contain enough evidence, ask for one of:
|
|
493
|
-
|
|
494
|
-
- the console hint containing `traceId` and optional `read:`
|
|
495
|
-
- the full `getReport(traceId)` output
|
|
496
|
-
- `.mf/observability/latest.json`
|
|
497
|
-
- `.mf/observability/build-report.json`
|
|
498
|
-
- the failing manifest or remoteEntry URL and its response type
|