deepseek-ai/deepseek-harness · error
web boot: ${String(failures.length)} entr${failures.length =
Error message
web boot: ${String(failures.length)} entr${failures.length === 1 ? 'y' : 'ies'} did not activate\n${failures.join('\n')} What it means
After the Cordis loader reaches quiescence, AppWebEntry.assertEntriesActive audits every manifest entry. An entry with no fiber failed its import; an entry whose fiber is not active either failed during apply or is still pending because a service it injects is provided by no loaded plugin. Each offending entry contributes one line and boot aborts with the aggregate list.
Source
Thrown at packages/client/web/src/boot.ts:156
private assertEntriesActive(ctx: Context): void {
const failures: string[] = []
for (const entry of ctx.loader.entries()) {
const name = entry.options.name
if (entry.fiber === undefined) {
failures.push(`${name}: import failed (see console for the import error)`)
continue
}
const state = STATE_LABELS[entry.fiber.state]
if (state === 'active') continue
if (state === 'pending') {
const missing = Object.keys(entry.fiber.inject).filter(service => ctx.get(service) === undefined)
failures.push(`${name}: pending (waiting for service${missing.length === 1 ? '' : 's'}: ${missing.join(', ') || 'unknown'})`)
} else {
failures.push(`${name}: ${state}`)
}
}
if (failures.length > 0) {
throw new Error(`web boot: ${String(failures.length)} entr${failures.length === 1 ? 'y' : 'ies'} did not activate\n${failures.join('\n')}`)
}
}
}
View on GitHub (pinned to b150a551b8)
Solutions
- Read the per-entry lines: 'import failed' means the browser console holds the import error — open it, rebuild that package (pnpm --filter <pkg> bundle), and hard-refresh.
- For 'pending (waiting for service X)', find which plugin should provide service X and why it is absent: missing from cordis.patch.yml, failed to load, or the service name changed.
- Verify the new-package checklist surfaces for the failing row: aggregate tsconfig reference, patch.yml row, bundle package.json dependency.
- After fixing, hard-refresh so cached bundles are bypassed before re-testing.
Example fix
# before — ui-foo row in cordis.patch.yml but its package missing from
# packages/bundle/web-app/package.json → the row cannot import
plugins:
- '@deepseek-ai/dsh-client-ui-foo'
# after — also declare the dependency so the healed node_modules resolves the row
# packages/bundle/web-app/package.json
"dependencies": { "@deepseek-ai/dsh-client-ui-foo": "workspace:*" } Defensive patterns
Strategy: try-catch
Validate before calling
// preflight: every manifest row's package must be resolvable before serving
for (const row of manifest.plugins) {
try { require.resolve(row.id + '/package.json') }
catch { throw new Error(`manifest row ${row.id} has no installed package — check the bundle dependency`) }
} Try / catch
try {
await entry.run()
} catch (err) {
// err.message carries per-entry lines: 'import failed' vs 'pending (waiting for service X)'
// route the fix by line kind; activation failures are deterministic — never retry boot in a loop
reportBootFailure(err.message)
} Prevention
- Keep the three registration surfaces (tsconfig aggregate, cordis.patch.yml, bundle package.json) in one change when adding a plugin.
- Rebuild bundles (pnpm --filter <pkg> bundle) before probing a live server; the registry serves lib/client.js, not sources.
- Run pnpm run test:gui after touching client plugins so import/apply failures surface in CI, not on the boot page.
When it happens
Trigger: A manifest plugin row throws during import (missing ./client export, broken build, stale bundle) or during apply, or stays pending because no loaded entry provides a service in its inject list — the provider plugin was removed, renamed, or itself failed to import.
Common situations: Adding a client plugin while missing one of the three registration surfaces (tsconfig.client.json aggregate reference, cordis.patch.yml row, bundle package.json dependency); renaming or removing a plugin whose service another entry injects; probing a live server against stale lib/client.js bundles after editing sources.
Related errors
- context-unavailable
- client-modules: ${subject} ${field} must be a string array
- client-modules: window.__DSH_BOOT__ is missing or not an obj
- client-modules: boot manifest rev must be a string
- client-modules: ctx.baseUrl is unset — the node half needs t
AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24).
Data as JSON: /api/errors/19c833d3a0a792d2.
Report an issue: GitHub.