@wenathlan/saddle 1.8.18 → 2.0.3
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/Dockerfile +1346 -0
- package/README.md +33 -12
- package/alternatives.ts +1218 -0
- package/biome.json +153 -0
- package/boards.json +1517 -0
- package/compute.ts +3144 -0
- package/cores.json +1801 -0
- package/dist/acquisition.d.ts +359 -0
- package/dist/acquisition.d.ts.map +1 -0
- package/dist/acquisition.js +629 -0
- package/dist/acquisition.js.map +1 -0
- package/dist/alternatives.d.ts +509 -0
- package/dist/alternatives.d.ts.map +1 -0
- package/dist/alternatives.js +951 -0
- package/dist/alternatives.js.map +1 -0
- package/dist/automation.d.ts +426 -0
- package/dist/automation.d.ts.map +1 -0
- package/dist/automation.js +561 -0
- package/dist/automation.js.map +1 -0
- package/dist/browser.d.ts +562 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +1057 -0
- package/dist/browser.js.map +1 -0
- package/dist/capacitor.config.d.ts +13 -0
- package/dist/capacitor.config.d.ts.map +1 -0
- package/dist/capacitor.config.js +26 -0
- package/dist/capacitor.config.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +111 -0
- package/dist/cli.js.map +1 -0
- package/dist/communication.d.ts +192 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +418 -0
- package/dist/communication.js.map +1 -0
- package/dist/compute.d.ts +1161 -0
- package/dist/compute.d.ts.map +1 -0
- package/dist/compute.js +2273 -0
- package/dist/compute.js.map +1 -0
- package/dist/distribution.d.ts +529 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +811 -0
- package/dist/distribution.js.map +1 -0
- package/dist/execution.d.ts +530 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +761 -0
- package/dist/execution.js.map +1 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +60 -0
- package/dist/format.js.map +1 -0
- package/dist/foundation.d.ts +176 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +309 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +733 -123
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1018 -123
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +236 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +236 -0
- package/dist/integration.js.map +1 -0
- package/dist/intelligence.d.ts +94 -0
- package/dist/intelligence.d.ts.map +1 -0
- package/dist/intelligence.js +145 -0
- package/dist/intelligence.js.map +1 -0
- package/dist/{isolation/contracts.d.ts → isolation.d.ts} +12 -1
- package/dist/isolation.d.ts.map +1 -0
- package/dist/{isolation/contracts.js → isolation.js} +13 -1
- package/dist/isolation.js.map +1 -0
- package/dist/media.d.ts +344 -0
- package/dist/media.d.ts.map +1 -0
- package/dist/media.js +986 -0
- package/dist/media.js.map +1 -0
- package/dist/modes.d.ts +359 -0
- package/dist/modes.d.ts.map +1 -0
- package/dist/modes.js +134 -0
- package/dist/modes.js.map +1 -0
- package/dist/{library/public.d.ts → operations.d.ts} +15 -1
- package/dist/operations.d.ts.map +1 -0
- package/dist/{library/public.js → operations.js} +18 -7
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator.d.ts +1339 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +4308 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/packager/targetcli.js +4 -22
- package/dist/performance.d.ts +416 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +827 -0
- package/dist/performance.js.map +1 -0
- package/dist/quantum.d.ts +810 -0
- package/dist/quantum.d.ts.map +1 -0
- package/dist/quantum.js +2073 -0
- package/dist/quantum.js.map +1 -0
- package/dist/render.d.ts +381 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +1073 -0
- package/dist/render.js.map +1 -0
- package/dist/scheduler.d.ts +596 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +1259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/security.d.ts +501 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +1170 -0
- package/dist/security.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/{server/node.js → server.js} +16 -2
- package/dist/server.js.map +1 -0
- package/dist/tiers.d.ts +1002 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +2165 -0
- package/dist/tiers.js.map +1 -0
- package/dist/virtual.d.ts +641 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1285 -0
- package/dist/virtual.js.map +1 -0
- package/dist/virtualcpu.d.ts +316 -0
- package/dist/virtualcpu.d.ts.map +1 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualcpu.js.map +1 -0
- package/dist/virtualgpu.d.ts +345 -0
- package/dist/virtualgpu.d.ts.map +1 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualgpu.js.map +1 -0
- package/dist/virtualization.d.ts +607 -0
- package/dist/virtualization.d.ts.map +1 -0
- package/dist/virtualization.js +1187 -0
- package/dist/virtualization.js.map +1 -0
- package/dist/virtualmemory.d.ts +818 -0
- package/dist/virtualmemory.d.ts.map +1 -0
- package/dist/virtualmemory.js +1796 -0
- package/dist/virtualmemory.js.map +1 -0
- package/dist/webscrape.d.ts +720 -0
- package/dist/webscrape.d.ts.map +1 -0
- package/dist/webscrape.js +2697 -0
- package/dist/webscrape.js.map +1 -0
- package/docker.config +769 -0
- package/docs/CONVERSA.txt +1523 -0
- package/docs/alternatives.md +499 -0
- package/docs/architecture-1.8.19.md +76 -0
- package/docs/architecture-1.8.19.mmd +33 -0
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/architecture.md +355 -0
- package/docs/brancharchive-2026-08-18.md +18 -0
- package/docs/browser.md +7 -0
- package/docs/consolidation.md +70 -0
- package/docs/e2ugh-engine.md +528 -0
- package/{dist/examples/localjob.js → docs/example-localjob.ts} +3 -3
- package/{dist/examples/publicapi.js → docs/example-publicapi.ts} +2 -2
- package/docs/hardware.md +342 -0
- package/docs/optimization.md +126 -0
- package/docs/performance.md +499 -0
- package/docs/planning.1.8.18.md +94 -0
- package/docs/planning.1.8.19.md +49 -0
- package/docs/releasenotes-1.8.19.md +35 -0
- package/docs/research-1.8.19-virtual-browser.md +27 -0
- package/docs/security.md +454 -0
- package/docs/todo-1.8.18.md +12 -0
- package/docs/todo-1.8.19.md +241 -0
- package/docs/viability.md +777 -0
- package/docs/virtualization.md +335 -0
- package/docs/web-duplicatecleanup.md +9 -0
- package/docs/web-ideas.md +106 -0
- package/docs/workflowimprovements-2026-08-19.md +70 -0
- package/gpumonitor.cpp +1543 -0
- package/gpus.json +2408 -0
- package/index.ts +1478 -0
- package/media.ts +1337 -0
- package/mttg.config +1549 -0
- package/orchestrator.ts +5462 -0
- package/package.json +304 -56
- package/passage.config +1331 -0
- package/performance.ts +1049 -0
- package/processors.json +2217 -0
- package/qemu.config +1062 -0
- package/qemubridge.py +1340 -0
- package/quantum.ts +2393 -0
- package/render.ts +1325 -0
- package/scheduler.ts +1600 -0
- package/security.ts +1449 -0
- package/tiers.ts +2871 -0
- package/tsconfig.json +29 -0
- package/virtualcpu.ts +1273 -0
- package/virtualgpu.ts +1181 -0
- package/virtualhardware.c +1011 -0
- package/virtualhardware.json +739 -0
- package/virtualization.ts +1628 -0
- package/virtualizationcore.cpp +4635 -0
- package/virtualmemory.ts +2303 -0
- package/vm.config.json +1910 -0
- package/{extension → web/extension}/manifest.json +1 -1
- package/web/readme.md +382 -0
- package/web/tsconfig.json +25 -0
- package/dist/adapters/forge.d.ts +0 -17
- package/dist/adapters/forge.d.ts.map +0 -1
- package/dist/adapters/forge.js +0 -19
- package/dist/adapters/forge.js.map +0 -1
- package/dist/adapters/forgejo.d.ts +0 -49
- package/dist/adapters/forgejo.d.ts.map +0 -1
- package/dist/adapters/forgejo.js +0 -8
- package/dist/adapters/forgejo.js.map +0 -1
- package/dist/adapters/github.d.ts +0 -12
- package/dist/adapters/github.d.ts.map +0 -1
- package/dist/adapters/github.js +0 -20
- package/dist/adapters/github.js.map +0 -1
- package/dist/adapters/gitlab.d.ts +0 -17
- package/dist/adapters/gitlab.d.ts.map +0 -1
- package/dist/adapters/gitlab.js +0 -10
- package/dist/adapters/gitlab.js.map +0 -1
- package/dist/adapters/huggingface.d.ts +0 -17
- package/dist/adapters/huggingface.d.ts.map +0 -1
- package/dist/adapters/huggingface.js +0 -6
- package/dist/adapters/huggingface.js.map +0 -1
- package/dist/adapters/socket.d.ts +0 -11
- package/dist/adapters/socket.d.ts.map +0 -1
- package/dist/adapters/socket.js +0 -17
- package/dist/adapters/socket.js.map +0 -1
- package/dist/adapters/transport.d.ts +0 -7
- package/dist/adapters/transport.d.ts.map +0 -1
- package/dist/adapters/transport.js +0 -36
- package/dist/adapters/transport.js.map +0 -1
- package/dist/ai/chunk.d.ts +0 -2
- package/dist/ai/chunk.d.ts.map +0 -1
- package/dist/ai/chunk.js +0 -36
- package/dist/ai/chunk.js.map +0 -1
- package/dist/ai/llmstxt.d.ts +0 -6
- package/dist/ai/llmstxt.d.ts.map +0 -1
- package/dist/ai/llmstxt.js +0 -12
- package/dist/ai/llmstxt.js.map +0 -1
- package/dist/ai/provenance.d.ts +0 -22
- package/dist/ai/provenance.d.ts.map +0 -1
- package/dist/ai/provenance.js +0 -25
- package/dist/ai/provenance.js.map +0 -1
- package/dist/ai/rag.d.ts +0 -26
- package/dist/ai/rag.d.ts.map +0 -1
- package/dist/ai/rag.js +0 -22
- package/dist/ai/rag.js.map +0 -1
- package/dist/ai/tokens.d.ts +0 -15
- package/dist/ai/tokens.d.ts.map +0 -1
- package/dist/ai/tokens.js +0 -9
- package/dist/ai/tokens.js.map +0 -1
- package/dist/api/auth.d.ts +0 -16
- package/dist/api/auth.d.ts.map +0 -1
- package/dist/api/auth.js +0 -19
- package/dist/api/auth.js.map +0 -1
- package/dist/api/contracts.d.ts +0 -28
- package/dist/api/contracts.d.ts.map +0 -1
- package/dist/api/contracts.js +0 -14
- package/dist/api/contracts.js.map +0 -1
- package/dist/api/control.d.ts +0 -10
- package/dist/api/control.d.ts.map +0 -1
- package/dist/api/control.js +0 -35
- package/dist/api/control.js.map +0 -1
- package/dist/api/http.d.ts +0 -7
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -12
- package/dist/api/http.js.map +0 -1
- package/dist/api/rate.d.ts +0 -28
- package/dist/api/rate.d.ts.map +0 -1
- package/dist/api/rate.js +0 -36
- package/dist/api/rate.js.map +0 -1
- package/dist/api/security.d.ts +0 -12
- package/dist/api/security.d.ts.map +0 -1
- package/dist/api/security.js +0 -56
- package/dist/api/security.js.map +0 -1
- package/dist/api/service.d.ts +0 -5
- package/dist/api/service.d.ts.map +0 -1
- package/dist/api/service.js +0 -70
- package/dist/api/service.js.map +0 -1
- package/dist/apps/registry.d.ts +0 -33
- package/dist/apps/registry.d.ts.map +0 -1
- package/dist/apps/registry.js +0 -24
- package/dist/apps/registry.js.map +0 -1
- package/dist/binary/archive.d.ts +0 -27
- package/dist/binary/archive.d.ts.map +0 -1
- package/dist/binary/archive.js +0 -46
- package/dist/binary/archive.js.map +0 -1
- package/dist/binary/build.d.ts +0 -29
- package/dist/binary/build.d.ts.map +0 -1
- package/dist/binary/build.js +0 -17
- package/dist/binary/build.js.map +0 -1
- package/dist/binary/transform.d.ts +0 -70
- package/dist/binary/transform.d.ts.map +0 -1
- package/dist/binary/transform.js +0 -105
- package/dist/binary/transform.js.map +0 -1
- package/dist/bot/adapter.d.ts +0 -5
- package/dist/bot/adapter.d.ts.map +0 -1
- package/dist/bot/adapter.js +0 -11
- package/dist/bot/adapter.js.map +0 -1
- package/dist/bot/bot.d.ts +0 -28
- package/dist/bot/bot.d.ts.map +0 -1
- package/dist/bot/bot.js +0 -52
- package/dist/bot/bot.js.map +0 -1
- package/dist/bot/commands.d.ts +0 -8
- package/dist/bot/commands.d.ts.map +0 -1
- package/dist/bot/commands.js +0 -19
- package/dist/bot/commands.js.map +0 -1
- package/dist/bot/permissions.d.ts +0 -13
- package/dist/bot/permissions.d.ts.map +0 -1
- package/dist/bot/permissions.js +0 -16
- package/dist/bot/permissions.js.map +0 -1
- package/dist/browser/actions.d.ts +0 -33
- package/dist/browser/actions.d.ts.map +0 -1
- package/dist/browser/actions.js +0 -44
- package/dist/browser/actions.js.map +0 -1
- package/dist/browser/agent.d.ts +0 -21
- package/dist/browser/agent.d.ts.map +0 -1
- package/dist/browser/agent.js +0 -13
- package/dist/browser/agent.js.map +0 -1
- package/dist/browser/context.d.ts +0 -43
- package/dist/browser/context.d.ts.map +0 -1
- package/dist/browser/context.js +0 -54
- package/dist/browser/context.js.map +0 -1
- package/dist/browser/fingerprint.d.ts +0 -4
- package/dist/browser/fingerprint.d.ts.map +0 -1
- package/dist/browser/fingerprint.js +0 -12
- package/dist/browser/fingerprint.js.map +0 -1
- package/dist/browser/index.d.ts +0 -11
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -11
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/playwright.d.ts +0 -11
- package/dist/browser/playwright.d.ts.map +0 -1
- package/dist/browser/playwright.js +0 -24
- package/dist/browser/playwright.js.map +0 -1
- package/dist/browser/recorder.d.ts +0 -21
- package/dist/browser/recorder.d.ts.map +0 -1
- package/dist/browser/recorder.js +0 -58
- package/dist/browser/recorder.js.map +0 -1
- package/dist/browser/session.d.ts +0 -14
- package/dist/browser/session.d.ts.map +0 -1
- package/dist/browser/session.js +0 -21
- package/dist/browser/session.js.map +0 -1
- package/dist/browser/snapshot.d.ts +0 -69
- package/dist/browser/snapshot.d.ts.map +0 -1
- package/dist/browser/snapshot.js +0 -133
- package/dist/browser/snapshot.js.map +0 -1
- package/dist/captcha/contract.d.ts +0 -35
- package/dist/captcha/contract.d.ts.map +0 -1
- package/dist/captcha/contract.js +0 -17
- package/dist/captcha/contract.js.map +0 -1
- package/dist/captcha/evidence.d.ts +0 -10
- package/dist/captcha/evidence.d.ts.map +0 -1
- package/dist/captcha/evidence.js +0 -9
- package/dist/captcha/evidence.js.map +0 -1
- package/dist/captcha/guard.d.ts +0 -23
- package/dist/captcha/guard.d.ts.map +0 -1
- package/dist/captcha/guard.js +0 -12
- package/dist/captcha/guard.js.map +0 -1
- package/dist/cli/main.d.ts +0 -4
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -46
- package/dist/cli/main.js.map +0 -1
- package/dist/core/errors.d.ts +0 -84
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -54
- package/dist/core/errors.js.map +0 -1
- package/dist/core/events.d.ts +0 -9
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -21
- package/dist/core/events.js.map +0 -1
- package/dist/core/hash.d.ts +0 -10
- package/dist/core/hash.d.ts.map +0 -1
- package/dist/core/hash.js +0 -82
- package/dist/core/hash.js.map +0 -1
- package/dist/core/ids.d.ts +0 -10
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -15
- package/dist/core/ids.js.map +0 -1
- package/dist/delivery/manifest.d.ts +0 -35
- package/dist/delivery/manifest.d.ts.map +0 -1
- package/dist/delivery/manifest.js +0 -68
- package/dist/delivery/manifest.js.map +0 -1
- package/dist/deploy/index.d.ts +0 -6
- package/dist/deploy/index.d.ts.map +0 -1
- package/dist/deploy/index.js +0 -6
- package/dist/deploy/index.js.map +0 -1
- package/dist/dispatch/resumable.d.ts +0 -102
- package/dist/dispatch/resumable.d.ts.map +0 -1
- package/dist/dispatch/resumable.js +0 -64
- package/dist/dispatch/resumable.js.map +0 -1
- package/dist/dispatch/workflow.d.ts +0 -6
- package/dist/dispatch/workflow.d.ts.map +0 -1
- package/dist/dispatch/workflow.js +0 -37
- package/dist/dispatch/workflow.js.map +0 -1
- package/dist/domain/artifacts.d.ts +0 -12
- package/dist/domain/artifacts.d.ts.map +0 -1
- package/dist/domain/artifacts.js +0 -14
- package/dist/domain/artifacts.js.map +0 -1
- package/dist/domain/jobs.d.ts +0 -12
- package/dist/domain/jobs.d.ts.map +0 -1
- package/dist/domain/jobs.js +0 -20
- package/dist/domain/jobs.js.map +0 -1
- package/dist/domain/providers.d.ts +0 -10
- package/dist/domain/providers.d.ts.map +0 -1
- package/dist/domain/providers.js +0 -8
- package/dist/domain/providers.js.map +0 -1
- package/dist/domain/runtime.d.ts +0 -14
- package/dist/domain/runtime.d.ts.map +0 -1
- package/dist/domain/runtime.js +0 -10
- package/dist/domain/runtime.js.map +0 -1
- package/dist/domain/sessions.d.ts +0 -12
- package/dist/domain/sessions.d.ts.map +0 -1
- package/dist/domain/sessions.js +0 -57
- package/dist/domain/sessions.js.map +0 -1
- package/dist/examples/localjob.d.ts +0 -2
- package/dist/examples/localjob.d.ts.map +0 -1
- package/dist/examples/localjob.js.map +0 -1
- package/dist/examples/publicapi.d.ts +0 -2
- package/dist/examples/publicapi.d.ts.map +0 -1
- package/dist/examples/publicapi.js.map +0 -1
- package/dist/extension/build.d.ts +0 -9
- package/dist/extension/build.d.ts.map +0 -1
- package/dist/extension/build.js +0 -85
- package/dist/extension/build.js.map +0 -1
- package/dist/extension/content.d.ts +0 -6
- package/dist/extension/content.d.ts.map +0 -1
- package/dist/extension/content.js +0 -135
- package/dist/extension/content.js.map +0 -1
- package/dist/extension/index.d.ts +0 -7
- package/dist/extension/index.d.ts.map +0 -1
- package/dist/extension/index.js +0 -7
- package/dist/extension/index.js.map +0 -1
- package/dist/extension/pagebridge.d.ts +0 -6
- package/dist/extension/pagebridge.d.ts.map +0 -1
- package/dist/extension/pagebridge.js +0 -42
- package/dist/extension/pagebridge.js.map +0 -1
- package/dist/extension/permissions.d.ts +0 -26
- package/dist/extension/permissions.d.ts.map +0 -1
- package/dist/extension/permissions.js +0 -28
- package/dist/extension/permissions.js.map +0 -1
- package/dist/extension/popup.d.ts +0 -5
- package/dist/extension/popup.d.ts.map +0 -1
- package/dist/extension/popup.js +0 -26
- package/dist/extension/popup.js.map +0 -1
- package/dist/extension/protocol.d.ts +0 -58
- package/dist/extension/protocol.d.ts.map +0 -1
- package/dist/extension/protocol.js +0 -101
- package/dist/extension/protocol.js.map +0 -1
- package/dist/extension/serviceworker.d.ts +0 -25
- package/dist/extension/serviceworker.d.ts.map +0 -1
- package/dist/extension/serviceworker.js +0 -102
- package/dist/extension/serviceworker.js.map +0 -1
- package/dist/extension/worker.d.ts +0 -28
- package/dist/extension/worker.d.ts.map +0 -1
- package/dist/extension/worker.js +0 -22
- package/dist/extension/worker.js.map +0 -1
- package/dist/format/check.d.ts +0 -8
- package/dist/format/check.d.ts.map +0 -1
- package/dist/format/check.js +0 -38
- package/dist/format/check.js.map +0 -1
- package/dist/isolation/contracts.d.ts.map +0 -1
- package/dist/isolation/contracts.js.map +0 -1
- package/dist/library/public.d.ts.map +0 -1
- package/dist/library/public.js.map +0 -1
- package/dist/mcp/browser.d.ts +0 -9
- package/dist/mcp/browser.d.ts.map +0 -1
- package/dist/mcp/browser.js +0 -13
- package/dist/mcp/browser.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -35
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js +0 -40
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/transport.d.ts +0 -7
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js +0 -17
- package/dist/mcp/transport.js.map +0 -1
- package/dist/memory/bridge.d.ts +0 -14
- package/dist/memory/bridge.d.ts.map +0 -1
- package/dist/memory/bridge.js +0 -16
- package/dist/memory/bridge.js.map +0 -1
- package/dist/memory/engine.d.ts +0 -38
- package/dist/memory/engine.d.ts.map +0 -1
- package/dist/memory/engine.js +0 -109
- package/dist/memory/engine.js.map +0 -1
- package/dist/memory/modes.d.ts +0 -43
- package/dist/memory/modes.d.ts.map +0 -1
- package/dist/memory/modes.js +0 -66
- package/dist/memory/modes.js.map +0 -1
- package/dist/memory/objects.d.ts +0 -21
- package/dist/memory/objects.d.ts.map +0 -1
- package/dist/memory/objects.js +0 -20
- package/dist/memory/objects.js.map +0 -1
- package/dist/memory/planner.d.ts +0 -66
- package/dist/memory/planner.d.ts.map +0 -1
- package/dist/memory/planner.js +0 -108
- package/dist/memory/planner.js.map +0 -1
- package/dist/memory/targets.d.ts +0 -78
- package/dist/memory/targets.d.ts.map +0 -1
- package/dist/memory/targets.js +0 -29
- package/dist/memory/targets.js.map +0 -1
- package/dist/memory/transforms.d.ts +0 -19
- package/dist/memory/transforms.d.ts.map +0 -1
- package/dist/memory/transforms.js +0 -14
- package/dist/memory/transforms.js.map +0 -1
- package/dist/modes/matrix.d.ts +0 -23
- package/dist/modes/matrix.d.ts.map +0 -1
- package/dist/modes/matrix.js +0 -18
- package/dist/modes/matrix.js.map +0 -1
- package/dist/modes/modes.d.ts +0 -33
- package/dist/modes/modes.d.ts.map +0 -1
- package/dist/modes/modes.js +0 -15
- package/dist/modes/modes.js.map +0 -1
- package/dist/modes/resolve.d.ts +0 -96
- package/dist/modes/resolve.d.ts.map +0 -1
- package/dist/modes/resolve.js +0 -48
- package/dist/modes/resolve.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -14
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -18
- package/dist/observability/metrics.js.map +0 -1
- package/dist/packager/manifest.d.ts +0 -66
- package/dist/packager/manifest.d.ts.map +0 -1
- package/dist/packager/manifest.js +0 -94
- package/dist/packager/manifest.js.map +0 -1
- package/dist/packager/publish.d.ts +0 -51
- package/dist/packager/publish.d.ts.map +0 -1
- package/dist/packager/publish.js +0 -18
- package/dist/packager/publish.js.map +0 -1
- package/dist/packager/targetcli.d.ts +0 -7
- package/dist/packager/targetcli.d.ts.map +0 -1
- package/dist/packager/targetcli.js.map +0 -1
- package/dist/persistence/adapter.d.ts +0 -5
- package/dist/persistence/adapter.d.ts.map +0 -1
- package/dist/persistence/adapter.js +0 -11
- package/dist/persistence/adapter.js.map +0 -1
- package/dist/persistence/drizzle.d.ts +0 -2
- package/dist/persistence/drizzle.d.ts.map +0 -1
- package/dist/persistence/drizzle.js +0 -12
- package/dist/persistence/drizzle.js.map +0 -1
- package/dist/persistence/memory.d.ts +0 -2
- package/dist/persistence/memory.d.ts.map +0 -1
- package/dist/persistence/memory.js +0 -27
- package/dist/persistence/memory.js.map +0 -1
- package/dist/persistence/migrations.d.ts +0 -19
- package/dist/persistence/migrations.d.ts.map +0 -1
- package/dist/persistence/migrations.js +0 -13
- package/dist/persistence/migrations.js.map +0 -1
- package/dist/persistence/prisma.d.ts +0 -2
- package/dist/persistence/prisma.d.ts.map +0 -1
- package/dist/persistence/prisma.js +0 -25
- package/dist/persistence/prisma.js.map +0 -1
- package/dist/persistence/schema.d.ts +0 -63
- package/dist/persistence/schema.d.ts.map +0 -1
- package/dist/persistence/schema.js +0 -28
- package/dist/persistence/schema.js.map +0 -1
- package/dist/persistence/sql.d.ts +0 -3
- package/dist/persistence/sql.d.ts.map +0 -1
- package/dist/persistence/sql.js +0 -37
- package/dist/persistence/sql.js.map +0 -1
- package/dist/protocol/blocks.d.ts +0 -10
- package/dist/protocol/blocks.d.ts.map +0 -1
- package/dist/protocol/blocks.js +0 -26
- package/dist/protocol/blocks.js.map +0 -1
- package/dist/protocol/json.d.ts +0 -6
- package/dist/protocol/json.d.ts.map +0 -1
- package/dist/protocol/json.js +0 -6
- package/dist/protocol/json.js.map +0 -1
- package/dist/protocol/ndjson.d.ts +0 -3
- package/dist/protocol/ndjson.d.ts.map +0 -1
- package/dist/protocol/ndjson.js +0 -20
- package/dist/protocol/ndjson.js.map +0 -1
- package/dist/protocol/sse.d.ts +0 -7
- package/dist/protocol/sse.d.ts.map +0 -1
- package/dist/protocol/sse.js +0 -25
- package/dist/protocol/sse.js.map +0 -1
- package/dist/proxy/pool.d.ts +0 -9
- package/dist/proxy/pool.d.ts.map +0 -1
- package/dist/proxy/pool.js +0 -27
- package/dist/proxy/pool.js.map +0 -1
- package/dist/queue/idempotency.d.ts +0 -10
- package/dist/queue/idempotency.d.ts.map +0 -1
- package/dist/queue/idempotency.js +0 -13
- package/dist/queue/idempotency.js.map +0 -1
- package/dist/queue/persistent.d.ts +0 -14
- package/dist/queue/persistent.d.ts.map +0 -1
- package/dist/queue/persistent.js +0 -66
- package/dist/queue/persistent.js.map +0 -1
- package/dist/queue/queue.d.ts +0 -7
- package/dist/queue/queue.d.ts.map +0 -1
- package/dist/queue/queue.js +0 -55
- package/dist/queue/queue.js.map +0 -1
- package/dist/queue/saga.d.ts +0 -5
- package/dist/queue/saga.d.ts.map +0 -1
- package/dist/queue/saga.js +0 -20
- package/dist/queue/saga.js.map +0 -1
- package/dist/release/assets.d.ts +0 -144
- package/dist/release/assets.d.ts.map +0 -1
- package/dist/release/assets.js +0 -157
- package/dist/release/assets.js.map +0 -1
- package/dist/release/evidence.d.ts +0 -92
- package/dist/release/evidence.d.ts.map +0 -1
- package/dist/release/evidence.js +0 -148
- package/dist/release/evidence.js.map +0 -1
- package/dist/release/verify.d.ts +0 -12
- package/dist/release/verify.d.ts.map +0 -1
- package/dist/release/verify.js +0 -112
- package/dist/release/verify.js.map +0 -1
- package/dist/runners/chain.d.ts +0 -125
- package/dist/runners/chain.d.ts.map +0 -1
- package/dist/runners/chain.js +0 -95
- package/dist/runners/chain.js.map +0 -1
- package/dist/runners/health.d.ts +0 -36
- package/dist/runners/health.d.ts.map +0 -1
- package/dist/runners/health.js +0 -26
- package/dist/runners/health.js.map +0 -1
- package/dist/runners/heartbeat.d.ts +0 -23
- package/dist/runners/heartbeat.d.ts.map +0 -1
- package/dist/runners/heartbeat.js +0 -29
- package/dist/runners/heartbeat.js.map +0 -1
- package/dist/runners/inprocess.d.ts +0 -17
- package/dist/runners/inprocess.d.ts.map +0 -1
- package/dist/runners/inprocess.js +0 -20
- package/dist/runners/inprocess.js.map +0 -1
- package/dist/runners/scheduler.d.ts +0 -5
- package/dist/runners/scheduler.d.ts.map +0 -1
- package/dist/runners/scheduler.js +0 -19
- package/dist/runners/scheduler.js.map +0 -1
- package/dist/runtime/abort.d.ts +0 -8
- package/dist/runtime/abort.d.ts.map +0 -1
- package/dist/runtime/abort.js +0 -13
- package/dist/runtime/abort.js.map +0 -1
- package/dist/runtime/compatibility.d.ts +0 -37
- package/dist/runtime/compatibility.d.ts.map +0 -1
- package/dist/runtime/compatibility.js +0 -10
- package/dist/runtime/compatibility.js.map +0 -1
- package/dist/runtime/detect.d.ts +0 -13
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/detect.js +0 -18
- package/dist/runtime/detect.js.map +0 -1
- package/dist/runtime/engine.d.ts +0 -20
- package/dist/runtime/engine.d.ts.map +0 -1
- package/dist/runtime/engine.js +0 -61
- package/dist/runtime/engine.js.map +0 -1
- package/dist/runtime/retry.d.ts +0 -19
- package/dist/runtime/retry.d.ts.map +0 -1
- package/dist/runtime/retry.js +0 -54
- package/dist/runtime/retry.js.map +0 -1
- package/dist/runtime/worker.d.ts +0 -10
- package/dist/runtime/worker.d.ts.map +0 -1
- package/dist/runtime/worker.js +0 -25
- package/dist/runtime/worker.js.map +0 -1
- package/dist/scrape/cache.d.ts +0 -45
- package/dist/scrape/cache.d.ts.map +0 -1
- package/dist/scrape/cache.js +0 -45
- package/dist/scrape/cache.js.map +0 -1
- package/dist/scrape/crawl.d.ts +0 -47
- package/dist/scrape/crawl.d.ts.map +0 -1
- package/dist/scrape/crawl.js +0 -114
- package/dist/scrape/crawl.js.map +0 -1
- package/dist/scrape/extract.d.ts +0 -63
- package/dist/scrape/extract.d.ts.map +0 -1
- package/dist/scrape/extract.js +0 -47
- package/dist/scrape/extract.js.map +0 -1
- package/dist/scrape/normalize.d.ts +0 -52
- package/dist/scrape/normalize.d.ts.map +0 -1
- package/dist/scrape/normalize.js +0 -102
- package/dist/scrape/normalize.js.map +0 -1
- package/dist/scrape/robots.d.ts +0 -37
- package/dist/scrape/robots.d.ts.map +0 -1
- package/dist/scrape/robots.js +0 -71
- package/dist/scrape/robots.js.map +0 -1
- package/dist/scrape/schema.d.ts +0 -23
- package/dist/scrape/schema.d.ts.map +0 -1
- package/dist/scrape/schema.js +0 -92
- package/dist/scrape/schema.js.map +0 -1
- package/dist/scrape/scraper.d.ts +0 -6
- package/dist/scrape/scraper.d.ts.map +0 -1
- package/dist/scrape/scraper.js +0 -46
- package/dist/scrape/scraper.js.map +0 -1
- package/dist/scrape/semantic.d.ts +0 -25
- package/dist/scrape/semantic.d.ts.map +0 -1
- package/dist/scrape/semantic.js +0 -27
- package/dist/scrape/semantic.js.map +0 -1
- package/dist/server/node.d.ts +0 -7
- package/dist/server/node.d.ts.map +0 -1
- package/dist/server/node.js.map +0 -1
- package/dist/sessions/file.d.ts +0 -25
- package/dist/sessions/file.d.ts.map +0 -1
- package/dist/sessions/file.js +0 -13
- package/dist/sessions/file.js.map +0 -1
- package/dist/sessions/replay.d.ts +0 -9
- package/dist/sessions/replay.d.ts.map +0 -1
- package/dist/sessions/replay.js +0 -70
- package/dist/sessions/replay.js.map +0 -1
- package/dist/sessions/store.d.ts +0 -25
- package/dist/sessions/store.d.ts.map +0 -1
- package/dist/sessions/store.js +0 -13
- package/dist/sessions/store.js.map +0 -1
- package/dist/storage/adapter.d.ts +0 -5
- package/dist/storage/adapter.d.ts.map +0 -1
- package/dist/storage/adapter.js +0 -11
- package/dist/storage/adapter.js.map +0 -1
- package/dist/storage/cache.d.ts +0 -23
- package/dist/storage/cache.d.ts.map +0 -1
- package/dist/storage/cache.js +0 -79
- package/dist/storage/cache.js.map +0 -1
- package/dist/storage/checksum.d.ts +0 -3
- package/dist/storage/checksum.d.ts.map +0 -1
- package/dist/storage/checksum.js +0 -19
- package/dist/storage/checksum.js.map +0 -1
- package/dist/storage/chunked.d.ts +0 -21
- package/dist/storage/chunked.d.ts.map +0 -1
- package/dist/storage/chunked.js +0 -67
- package/dist/storage/chunked.js.map +0 -1
- package/dist/storage/content.d.ts +0 -24
- package/dist/storage/content.d.ts.map +0 -1
- package/dist/storage/content.js +0 -44
- package/dist/storage/content.js.map +0 -1
- package/dist/storage/filehosting.d.ts +0 -2
- package/dist/storage/filehosting.d.ts.map +0 -1
- package/dist/storage/filehosting.js +0 -24
- package/dist/storage/filehosting.js.map +0 -1
- package/dist/storage/githubcontents.d.ts +0 -2
- package/dist/storage/githubcontents.d.ts.map +0 -1
- package/dist/storage/githubcontents.js +0 -29
- package/dist/storage/githubcontents.js.map +0 -1
- package/dist/storage/index.d.ts +0 -12
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -12
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/local.d.ts +0 -2
- package/dist/storage/local.d.ts.map +0 -1
- package/dist/storage/local.js +0 -72
- package/dist/storage/local.js.map +0 -1
- package/dist/storage/memory.d.ts +0 -6
- package/dist/storage/memory.d.ts.map +0 -1
- package/dist/storage/memory.js +0 -36
- package/dist/storage/memory.js.map +0 -1
- package/dist/storage/pool.d.ts +0 -95
- package/dist/storage/pool.d.ts.map +0 -1
- package/dist/storage/pool.js +0 -202
- package/dist/storage/pool.js.map +0 -1
- package/dist/storage/s3compatible.d.ts +0 -3
- package/dist/storage/s3compatible.d.ts.map +0 -1
- package/dist/storage/s3compatible.js +0 -70
- package/dist/storage/s3compatible.js.map +0 -1
- package/dist/storage/sync.d.ts +0 -47
- package/dist/storage/sync.d.ts.map +0 -1
- package/dist/storage/sync.js +0 -75
- package/dist/storage/sync.js.map +0 -1
- package/dist/surfaces/adapters.d.ts +0 -97
- package/dist/surfaces/adapters.d.ts.map +0 -1
- package/dist/surfaces/adapters.js +0 -50
- package/dist/surfaces/adapters.js.map +0 -1
- package/dist/surfaces/controls.d.ts +0 -18
- package/dist/surfaces/controls.d.ts.map +0 -1
- package/dist/surfaces/controls.js +0 -45
- package/dist/surfaces/controls.js.map +0 -1
- package/dist/surfaces/manifest.d.ts +0 -68
- package/dist/surfaces/manifest.d.ts.map +0 -1
- package/dist/surfaces/manifest.js +0 -42
- package/dist/surfaces/manifest.js.map +0 -1
- package/dist/surfaces/n8n.d.ts +0 -25
- package/dist/surfaces/n8n.d.ts.map +0 -1
- package/dist/surfaces/n8n.js +0 -31
- package/dist/surfaces/n8n.js.map +0 -1
- package/dist/surfaces/operations.d.ts +0 -32
- package/dist/surfaces/operations.d.ts.map +0 -1
- package/dist/surfaces/operations.js +0 -53
- package/dist/surfaces/operations.js.map +0 -1
- package/dist/surfaces/requirements.d.ts +0 -29
- package/dist/surfaces/requirements.d.ts.map +0 -1
- package/dist/surfaces/requirements.js +0 -50
- package/dist/surfaces/requirements.js.map +0 -1
- package/dist/surfaces/targets.d.ts +0 -196
- package/dist/surfaces/targets.d.ts.map +0 -1
- package/dist/surfaces/targets.js +0 -27
- package/dist/surfaces/targets.js.map +0 -1
- package/dist/webhook/delivery.d.ts +0 -18
- package/dist/webhook/delivery.d.ts.map +0 -1
- package/dist/webhook/delivery.js +0 -36
- package/dist/webhook/delivery.js.map +0 -1
- package/dist/webhook/receiver.d.ts +0 -26
- package/dist/webhook/receiver.d.ts.map +0 -1
- package/dist/webhook/receiver.js +0 -24
- package/dist/webhook/receiver.js.map +0 -1
- package/dist/webhook/signature.d.ts +0 -3
- package/dist/webhook/signature.d.ts.map +0 -1
- package/dist/webhook/signature.js +0 -7
- package/dist/webhook/signature.js.map +0 -1
- package/dist/workflow/manifest.d.ts +0 -22
- package/dist/workflow/manifest.d.ts.map +0 -1
- package/dist/workflow/manifest.js +0 -21
- package/dist/workflow/manifest.js.map +0 -1
- package/dist/workflow/registry.d.ts +0 -7
- package/dist/workflow/registry.d.ts.map +0 -1
- package/dist/workflow/registry.js +0 -18
- package/dist/workflow/registry.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -6
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -18
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/triggers.d.ts +0 -64
- package/dist/workflow/triggers.d.ts.map +0 -1
- package/dist/workflow/triggers.js +0 -99
- package/dist/workflow/triggers.js.map +0 -1
- /package/{extension/README.md → docs/extension.md} +0 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# e2ugh v6 - Virtualization Stack Reference
|
|
2
|
+
|
|
3
|
+
This document specifies the execution layer of the engine: QEMU 11.1.0 and KVM, the boot chain (OVMF, Secure Boot, measured boot), libvirt overlay, the GPU passthrough triad (VFIO, vGPU, MIG), the passage network stack, storage volumes, Docker 29.7.2 and containerd integration, the microVM engines (Firecracker, Cloud Hypervisor, gVisor, Kata, CRIU), the MTTG multi-tenant scheduler with cgroups v2, passage security with snapshot rollback, the Mesa rendering summary, the WASM tier, checkpoint/restore and the alternative hypervisors. Hardware identities are in `hardware.md`; orchestration policy and module wiring are in `architecture.md`; the spoofing threat model is in `security.md`.
|
|
4
|
+
|
|
5
|
+
Context map (24 related contexts): QEMU 11.1.0, MTTCG internals, QMP, EPYC-v5,
|
|
6
|
+
microvm and q35 machines, KVM-less runners, OVMF secure boot, swtpm,
|
|
7
|
+
libvirt overlay, vm.config schema, VFIO, vGPU unlock, MIG, Looking Glass,
|
|
8
|
+
passage six modes, OVS and DPDK, XDP and eBPF, io_uring ZCRX, WireGuard
|
|
9
|
+
zero-trust, storage volumes, Docker 29.7.2, containerd microVMs, MTTG
|
|
10
|
+
cgroups v2, checkpoint/restore, Mesa stack summary, WASM tier.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 1. Stack overview (24 layers)
|
|
15
|
+
|
|
16
|
+
| # | Layer | Version (2026-08-23) | Role |
|
|
17
|
+
| --- | --- | --- | --- |
|
|
18
|
+
| 1 | QEMU | 11.1.0 | full-system TCG/MTTCG and KVM guests |
|
|
19
|
+
| 2 | KVM | kernel 7.1.9 stable / 6.18.45 longterm host | hardware acceleration when `/dev/kvm` exists |
|
|
20
|
+
| 3 | HVF / WHPX | macOS / Windows | same plan, different `-accel` |
|
|
21
|
+
| 4 | libvirt | 12.5.0 (overlay only) | optional XML lifecycle, hooks, nodedev detach |
|
|
22
|
+
| 5 | VFIO / IOMMU | kernel | device passthrough group isolation |
|
|
23
|
+
| 6 | vendor-reset | - | reset quirks for Navi and older NVIDIA ids |
|
|
24
|
+
| 7 | single-GPU passage | - | unbind/rebind host console flow |
|
|
25
|
+
| 8 | NVIDIA vGPU | R570/R580 branches | licensed GRID profiles |
|
|
26
|
+
| 9 | AMD MxGPU / SR-IOV | ROCm 7.x | VF passthrough on Instinct |
|
|
27
|
+
| 10 | virtio-gpu Venus | Mesa both sides | Vulkan in the guest via virtio |
|
|
28
|
+
| 11 | Docker Engine | 29.7.2, API 1.52 | default execution path |
|
|
29
|
+
| 12 | Dockerfile / Buildx | syntax 1.14 / 0.36.1 | multi-stage image builds, GHA cache |
|
|
30
|
+
| 13 | Podman / nerdctl | 6.1 | rootless OCI twins |
|
|
31
|
+
| 14 | Firecracker | 1.16.1 | 125 ms microVMs, snapshot warm pools |
|
|
32
|
+
| 15 | Cloud Hypervisor | 53.0 | rust-vmm VMM, vfio-user |
|
|
33
|
+
| 16 | Kata Containers | 4.1.0 | VM-per-container, runtime-rs |
|
|
34
|
+
| 17 | gVisor | release-20260817.0 | userspace kernel (runsc, systrap) |
|
|
35
|
+
| 18 | Wasmtime / WASI | 48.0.0 / 0.3.0 | fuel-metered component tier |
|
|
36
|
+
| 19 | Incus / LXD | 7.2 / 6.0.4 | system containers plus VM mode |
|
|
37
|
+
| 20 | KubeVirt | current | CRDs wrapping QEMU |
|
|
38
|
+
| 21 | nested virtualization | - | Docker-in-QEMU, WSL2-in-QEMU |
|
|
39
|
+
| 22 | snapshots | - | qcow2 internal/external, migrate-to-file |
|
|
40
|
+
| 23 | live migration | QEMU 11 | pre-copy/post-copy, multifd |
|
|
41
|
+
| 24 | swtpm | 2.0 | TPM 2.0 emulator, measured boot |
|
|
42
|
+
|
|
43
|
+
## 2. QEMU 11.1.0 and KVM
|
|
44
|
+
|
|
45
|
+
Released 2026-08-11 with more than 3200 commits from 285 authors and 12 CVE fixes. Release line relevant to the engine: 10.1.0 (2025-08-26, previous generation baseline), 11.0.0 (2026-04-22: nitro accelerator, CET virtualization, Diamond Rapids CPU model, TCG plugins in C++, 32-bit x86 hosts dropped), 11.1.0 (UFS 4.1 emulation, vhost-host-user virtio-rtc, hvf nested virtualization).
|
|
46
|
+
|
|
47
|
+
### 2.1 MTTCG (one host thread per vCPU)
|
|
48
|
+
|
|
49
|
+
Multi-threaded TCG lets a KVM-less host run a parallel guest. Four load-bearing parts:
|
|
50
|
+
|
|
51
|
+
1. Per-vCPU host threads: one QEMUThread per vCPU, each running its own translation loop; a 192-vCPU guest is 192 host threads plus main loop and async workers (verified with `ps -T`).
|
|
52
|
+
2. TranslationBlock cache: one shared code buffer sized by `tb-size` MiB; blocks translated by vCPU 0 are reused by vCPU 1; large code footprints (LLVM, kernel builds) want 512-1024 MiB - the engine passes 1024 (1536 in the older F1 template; `qemu.config` keeps both as documented variants).
|
|
53
|
+
3. QHT (`util/qht.c`): lockless, RCU-protected hash from guest PC to TranslationBlock; readers scale without contention, which makes the shared cache viable.
|
|
54
|
+
4. Cross-thread invalidation through RCU lists and tb_lock; guest-side JITs (V8, JVM) trigger invalidation storms, so JIT-heavy workloads route to Docker instead.
|
|
55
|
+
|
|
56
|
+
Memory-model rule (when MTTCG is enabled):
|
|
57
|
+
|
|
58
|
+
| Guest on host | MTTCG | Consequence |
|
|
59
|
+
| --- | --- | --- |
|
|
60
|
+
| x86_64 on x86_64 | allowed, the default | the engine case; one host thread per vCPU without explicit flags |
|
|
61
|
+
| aarch64 on x86_64 | allowed (weak on strong) | cross-arch CI works |
|
|
62
|
+
| x86_64 on aarch64 | not allowed | falls back to single-threaded TCG |
|
|
63
|
+
| any with `-icount` | forced single-thread | deterministic virtual time and record/replay are incompatible with MTTCG |
|
|
64
|
+
|
|
65
|
+
Flag form and implementation anchors: `--accel tcg,thread=multi,tb-size=1024`; `tcg-accel-ops-mttcg.c` with `mttcg_qemu_thread_new` / `tcg_register_thread` / `qemu_thread_create`; queues at 2 x vCPU; near-linear scaling to 192 vCPUs with under 8% overhead; never combined with KVM (TCG and KVM are alternative accelerators). Naming warning: MTTCG is not MTTG (section 12).
|
|
66
|
+
|
|
67
|
+
### 2.2 CPU models and machines
|
|
68
|
+
|
|
69
|
+
`-cpu EPYC-v5` is the engine default (confirmed in `target/i386/cpu.c`; EPYC-v4 covers Zen 4); the turbo argv in `virtualization.ts` uses `DiamondRapids` with `host-phys-bits=true`, `hidden=1` and the `NV43FIX` hv_vendor_id that keeps NVIDIA drivers alive inside guests (`kvm=off` equivalents for hiding the hypervisor); portable ladders `EPQC-Genoa` / `GraniteRapids` / `SierraForest` / `qemu64`; `host` is KVM-only and never used in CI. Machines: `q35` with `smm=on,kernel-irqchip=split` for identity-complete guests; `microvm` with direct kernel boot for boot-latency-sensitive tests (about 4x faster than the default PC machine); the nitro accelerator remains a reference for AWS-shaped enclaves.
|
|
70
|
+
|
|
71
|
+
### 2.3 QMP runtime surface
|
|
72
|
+
|
|
73
|
+
Runtime control runs over QMP on a unix socket (`-qmp unix:/run/qemu-<id>.qmp,server,nowait`); the bridge clients (`qemubridge.py`, `qemuruntime`, the C++ `QmpClient`) speak this surface:
|
|
74
|
+
|
|
75
|
+
| QMP/HMP call | Purpose in the engine |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `query-status` | lifecycle inspection feeding `vm:phase` events |
|
|
78
|
+
| `query-cpus-fast` | per-vCPU thread accounting for the MTTG floor checks |
|
|
79
|
+
| `device_add` (`epyc-v5-x86_64-cpu`) | CPU hotplug; requires `maxcpus` headroom on `-smp` |
|
|
80
|
+
| `device_add` (nvme namespace, vfio-pci) | device hotplug for storage and GPU attach |
|
|
81
|
+
| `snapshot-save` / `snapshot-load` | internal snapshots for the pool |
|
|
82
|
+
| `migrate` (to file, `tcp:host:port`) | pool warm boots and live migration |
|
|
83
|
+
| `balloon` / `object-add` (memory-backend, cxl-type3) | memory elasticity commands exported by `memorymodularizer` |
|
|
84
|
+
| `query-qemu-features` | feature probe absorbed from the v5 bridge |
|
|
85
|
+
| `dirty-rate` (page-sampling) | migration readiness polling |
|
|
86
|
+
| `qmp_capabilities` handshake | greeting filter with the 1 MiB read cap on the C++ side |
|
|
87
|
+
|
|
88
|
+
Since QEMU 11.0, TCG plugins written in C++ observe guest execution (instructions, memory accesses, translation events) without changing translated code - the engine uses them for guest-activity telemetry in research builds. A duplicate `-qmp` push in the inherited wrapper argv was deduplicated during the v2 merge (documented in the module header). Live-migration tuning recovered from the v4 production pool: xbzrle compressed transfer with a 64 MiB cache, auto-converge on CPU-throttle convergence, and `-accel kvm,dirty-ring-size=65536` (the same dirty-ring size the appendix B F-005 target assumes for sub-800 ms vGPU pre-copy).
|
|
89
|
+
|
|
90
|
+
### 2.4 Running without KVM
|
|
91
|
+
|
|
92
|
+
GitHub-hosted runners do not expose `/dev/kvm` ([actions/runner-images#12933](https://github.com/actions/runner-images/issues/12933)); a February 2025 community incident showed the implicit TCG fallback can break, so the engine always passes the accelerator explicitly. Policy: TCG is 10-30x slower than KVM for CPU-bound guests and CI timeouts scale accordingly; Firecracker/Kata/CLH paths run only on self-hosted or bare-metal runners and the factory refuses them without KVM (KVM detector in `orchestrator.ts`), suggesting the QEMU TCG strategy instead of failing at boot.
|
|
93
|
+
|
|
94
|
+
## 3. Boot: OVMF, Secure Boot, measured boot
|
|
95
|
+
|
|
96
|
+
OVMF/EDK2 edk2-stable202605 (released 2026-05-22; the tag format is edk2-stableAAAMM, so day-level spellings such as 20260213 do not exist): `OVMF_CODE_4M.secboot.fd` plus `OVMF_VARS_4M.fd` on pflash with `readonly=on` for code; Secure Boot with SMM; measured boot into a swtpm 2.0 TPM 2.0 (socket 0600 qemu:qemu, TPM 2.0 emulator for BitLocker-class workflows); SHIM plus Grub FV paths for signed distributions; boot order `ncd` with menu timeout; `reboot_on_panic` behavior documented. Host tuning at boot: `transparent_hugepage` policy (always/madvise/never), KSM/UKSM toggles, memory prealloc with `share=off`, ACPI SRAT for sp-mem, NVDIMM emulation, DAMON mtier hooks. Intel TDX (the module live update without reboot is a documented kernel technique, applied through `sept-ve-disabled`) and SEV-SNP (cbitpos=51, reduced-phys-bits=1) guest objects are one flag away in the turbo argv; the confidential-computing posture (RATS RFC9334 attestation, KDS, SVSM VMPL2 vTPM) is specified in `security.md`.
|
|
97
|
+
|
|
98
|
+
Boot chain, flag by flag:
|
|
99
|
+
|
|
100
|
+
| Boot element | QEMU form | Purpose |
|
|
101
|
+
| --- | --- | --- |
|
|
102
|
+
| firmware code | `-drive if=pflash,format=raw,readonly=on,file=OVMF_CODE_4M.secboot.fd` | UEFI with Secure Boot keys |
|
|
103
|
+
| firmware vars | `-drive if=pflash,format=raw,file=OVMF_VARS_4M.fd` | per-guest variable store |
|
|
104
|
+
| SMM | `-machine q35,smm=on` + `kernel-irqchip=split` | Secure Boot requires SMM |
|
|
105
|
+
| measured boot | `-device tpm-tis,tpmdev=tpm0 -tpmdev emulator,id=tpm0,chardev=socket` | PCR extension into the vTPM |
|
|
106
|
+
| swtpm socket | `chardev=socket,path=/run/swtpm-<id>.sock,server=nowait` | 0600 qemu:qemu permissions |
|
|
107
|
+
| 64-bit MMIO window | `-fw_cfg opt/ovmf/X-PciMmio64Mb,string=65536` | 64 GB window for 32 GB+ BARs |
|
|
108
|
+
| TPM crb (forge path) | `-device tpm-crb,tpmdev=tpm0` | the forge-mode twin |
|
|
109
|
+
|
|
110
|
+
## 4. libvirt overlay
|
|
111
|
+
|
|
112
|
+
libvirt 12.5.0 remains optional: `qemu.conf` ships as a drop-in for `/etc/libvirt/qemu.conf.d/` (14 device entries in the overlay section of `qemu.config`). The overlay consumes: domain XML `cputune` (`vcpupin`, `emulatorpin`, `iothreadpin`), `numatune` (bind/preferred/interleave), memory backing (hugepages, memfd), `nodedev-detach`/`nodedev-reattach` for VFIO with the dynamic-binding hook (alive check, 10 s cooldown, BAR2 `resource2_resize`), driverctl persistent overrides, ACS override as a last resort (security smell, warned), virtiofsd 1.14.0 (9p removed in the runtime-rs lineage), EROFS snapshotter, nydus 0.15.13, vhost-net/vhost-user, OVS/DPDK/AF_XDP integration, MicroOVN, Incus 7.2 as the lxc|qemu driver daemon.
|
|
113
|
+
|
|
114
|
+
## 5. VM configuration spec
|
|
115
|
+
|
|
116
|
+
`vm.config` is one schema in three serializations (JSON machine twin with 22 profiles, TOML human file, INI-like forge variant; deterministic SHA-256 identity). Sections: `meta` (name, uuid, version, format_version, hypervisor), `vcpu` (model, count, topology sockets/cores/threads/dies, pinning array, unlimited bool, cpu_flags `+avx512f +avx512bw -vmx`), `vmem` (size_mb, vramMb, ballooning, hugepages 1G/2M), `numa` (nodes, policy bind, host_nodes), `host_tuning` (THP never, KSM false, mem_prealloc), `firmware` (ovmf code/vars, secureBoot, smm), `boot` (order, menu, timeout), `disks` (qcow2/raw/nvme/vfio, cache none, io io_uring, discard unmap), `net_passage` (bridge, macvtap, passthrough, vhost-user, user), `mttg` (groups, tenant_id, cpus shares, quota, memoryMax, iothreadPin), `qemu` (binary, machine q35, accel kvm, argsExtra), `docker` (enabled, runtime, socket, sidecar_containers, compose_file, engineVersion 29.7.2), `telemetry` (prom_port, logLevel), validation via JSON Schema 2020-12 with `$defs` and `unevaluatedProperties` (ajv 8+ compatible). The planner CLI reads the TOML, plans topology, emits QEMU argv and a `docker run` line, and lints (`planlint`: mttg floor at vcpus, overcommit at most 64, vcpus at most 4096, topology-product warning).
|
|
117
|
+
|
|
118
|
+
## 6. GPU passthrough: VFIO, vGPU, MIG
|
|
119
|
+
|
|
120
|
+
Identity data, MIG profile tables and the vGPU size formula live in `hardware.md` sections 4 and 6; this section covers the mechanics.
|
|
121
|
+
|
|
122
|
+
- **VFIO/IOMMU.** `intel_iommu=on iommu=pt` or `amd_iommu=on`; group isolation verified with `find /sys/kernel/iommu_groups`; the bind path in `virtualgpu.ts` uses driverctl with the `new_id` fallback, `disable_idle_d3=1`, `pcie_port_pm=off`, and an alive check; unbind restores the host driver. QEMU device form: `-device vfio-pci,host=01:00.0,multifunction=on,x-vga=on,romfile=vendor.rom,rombar=1` with `-vga none -nographic`; BAR1 at 32 GB (Blackwell) needs Above-4G + ReBAR, the 64 GB MMIO window via `-fw_cfg opt/ovmf/X-PciMmio64Mb,string=65536`.
|
|
123
|
+
- **vendor-reset.** Navi 21 and some NVIDIA ids need the reset quirk (`vendor-reset` module families polaris10 through navi48 in `vendorresetfamilies`) or the GPU stays dead after the first VM; RDNA 3/4 and Blackwell are closer to native on 6.12-6.14 kernels.
|
|
124
|
+
- **romfile.** sysfs rom dump (echo 1/0 to the rom node), rombar, 4-byte pptable patches, IGD passthrough for Gen11/12 with `x-igd-lpc` on the LPC bridge.
|
|
125
|
+
- **vGPU.** Licensed GRID profiles (R570/R580 branches; vgpu-unlock lineage with vcfgclone and general-merge patchers, the vgpu_unlock-rs Rust LD_PRELOAD rewrite); the profile-size formula and the 384 MiB minimum framebuffer are code in `virtualgpu.ts`.
|
|
126
|
+
- **MDEV/SR-IOV.** mdev sysfs types (`nvidia-b100-mig-*` for Blackwell layouts); Intel `i915-sriov-dkms` 2026.08.02 with `xe.max_vfs=7`, `xe.force_probe=0xa7a0`; AMD MxGPU temporal partitioning.
|
|
127
|
+
- **Looking Glass B7.** D3D12 `ID3D12Resource` path over IVSHMEM DMA with zero CPU copy (about 300 UPS), kvmfr module 0.0.12-7 (kernels 6.13+), 128 MiB shmem default; the XML recipe ships in `virtualgpu.ts` (`lookingglassb7`).
|
|
128
|
+
- **virtio-gpu Venus.** Vulkan in the guest via the venus native context with `blob=on` and `hostmem=` as the VRAM window (`-device virtio-gpu-gl-pci,venus=true,hostmem=8G` in the turbo argv); Mesa on both sides.
|
|
129
|
+
|
|
130
|
+
Passthrough PCI id table (the ids `passage.config` binds with driver quirks; the GN8is row was recovered from the v4 CUDA research):
|
|
131
|
+
|
|
132
|
+
| PCI ID | Device | Note |
|
|
133
|
+
| --- | --- | --- |
|
|
134
|
+
| 10DE:2B85 | RTX 5090 | primary passage pair, vendor-reset not needed |
|
|
135
|
+
| 10DE:22E8 | GN8is L20-48G (L20-class Ada, 48 GB) | cloud GN8is shape; recovered from the v4 pool CUDA notes |
|
|
136
|
+
| 10DE:26B5 | RTX PRO 6000 Blackwell | 96 GB, ReBAR 64 GB window required |
|
|
137
|
+
| 1002:75A0 | Instinct MI350X | DeviceHunt-verified assignment |
|
|
138
|
+
| 1AF4:1050 | virtio-gpu | venus context, hostmem window instead of a discrete GPU |
|
|
139
|
+
|
|
140
|
+
## 7. NVIDIA CUDA compute surface
|
|
141
|
+
|
|
142
|
+
Driver branch R575 anchors the stack (575.57.08 / CUDA 12.9 in every virtual identity profile; R580/R590 branches recorded for Blackwell server SKUs; 575.51.03 kept as the v4 variant spelling in data files). CUDA 12.9/13.3 features cited by capacity planning: Tile Programming C++, cuOpt 26.06, cuml-cu13. Container runtime: nvidia-container-toolkit with CDI specs (`/etc/cdi/nvidia.yaml`, `nvidia.com/gpu=0` device references, `nvidia-ctk cdi generate` fallback hint). Telemetry: DCGM 3.6.1 plus eBPF uprobes on `cudaMalloc`/`launchKernel` (per-VM GPU telemetry without agent installation). Kubernetes: DRA GA on 1.35 with device-plugin 0.17.4 and CDI cold-plug. VergeOS-style universal GPU mode and WASI-GFX (wasi:webgpu) remain roadmap items (F-ledger, `viability.md` appendices).
|
|
143
|
+
|
|
144
|
+
## 8. Network passage
|
|
145
|
+
|
|
146
|
+
Passage is the data-plane bridging layer (six modes, implemented in `virtualization.ts`):
|
|
147
|
+
|
|
148
|
+
| Mode | Mechanism | Envelope |
|
|
149
|
+
| --- | --- | --- |
|
|
150
|
+
| direct | plain `--netdev user` hostfwd on a random host port | simplest; never localhost |
|
|
151
|
+
| bridge | Linux bridge (VLAN filtering, STP) + `virtio-net-pci` vhost, `mq=on`, queues 8, MTU 9000 | default tenant path |
|
|
152
|
+
| nat | iptables/nftables NAT over the bridge | multi-sandbox hosts |
|
|
153
|
+
| overlayVxlan | VXLAN vni 1000, dstport 4789, MTU 1400 (+1.1 ms/hop), ovs-vsctl managed | multi-host tenants |
|
|
154
|
+
| zeroTrust | per-tenant network namespaces `tenant-*`, WireGuard mesh (kernel mainline module, in-tree since 5.6; no out-of-tree snapshot is pinned) on 10.200.0.0/16:51820, PSK rotation 24 h | tenant isolation with mTLS per-VM certs |
|
|
155
|
+
| latencyOptimization | OVS-DPDK 26.07 (1024x2M hugepages, pmd cores [2,3], vhost-user) + XDP driver mode `xdp_lb.bpf.o` (XDP_REDIRECT) + io_uring ZCRX header/data split | 6 us / 100 Gbps class |
|
|
156
|
+
|
|
157
|
+
Data-plane building blocks with versions:
|
|
158
|
+
|
|
159
|
+
| Building block | Version | Envelope |
|
|
160
|
+
| --- | --- | --- |
|
|
161
|
+
| OVS | 3.7.1 (3.7.90 devel) | OpenFlow 1.6, conntrack NAT/QoS; kernel, DPDK and AF_XDP datapaths |
|
|
162
|
+
| DPDK | 26.07.0 (25.11.1 LTS) | 1024x2M hugepages, pmd core pinning, vhost-user |
|
|
163
|
+
| macvtap | kernel | four modes: bridge / vepa / private / passthrough (one VM per VF) |
|
|
164
|
+
| ipvlan / ipvtap | kernel | l2 / l3 / l3s; shared MAC, about 2000 tenants per host |
|
|
165
|
+
| SR-IOV | kernel + NIC | VF passthrough at about 8 us / 98% line rate |
|
|
166
|
+
| XDP | driver mode | 10 Mpps DROP/PASS/TX/REDIRECT; 14 Mpps drop versus 1.2 Mpps iptables |
|
|
167
|
+
| libbpf | 1.6.0 | CO-RE/BTF relocations, STRUCT_OPS map attachment |
|
|
168
|
+
| cilium/ebpf | Go v0.21.0 | first major 2026 release with XDP breaking changes |
|
|
169
|
+
| xdp-tools | 1.5.2 | libxdp dispatcher and loaders |
|
|
170
|
+
| AF_XDP | zerocopy | frame size 4096, UMEM management |
|
|
171
|
+
| io_uring ZCRX | kernel 7.x | zero-copy receive with header/data split (BNXT/mlx5 hw, soft fallback) |
|
|
172
|
+
| WireGuard | kernel mainline (in-tree since 5.6) | netns-per-tenant mesh, PSK rotation 24 h |
|
|
173
|
+
| QUIC/HTTP3 | gateway | 0-RTT via the pingora L7 gateway (7 routes, 4 upstreams in `passage.config`) |
|
|
174
|
+
|
|
175
|
+
Decision matrix: latency-critical trading path 6 us at 100 Gbps (latencyOptimization); database tenants 8 us at 98% (SR-IOV); bare-metal tenants 25 us at 25 Gbps (bridge). Socket hygiene: vsock + hvsock debug via socat (`unix-connect` to the kata hvsock), multi-queue virtio-net with vhost, MTU 9000, `52:54:00` MAC prefix policy - all in `passage.config`.
|
|
176
|
+
|
|
177
|
+
## 9. Storage and volumes
|
|
178
|
+
|
|
179
|
+
Formats: qcow2 (internal snapshots), raw, nvme, vfio device disks. Component map:
|
|
180
|
+
|
|
181
|
+
| Component | Version / form | Notes |
|
|
182
|
+
| --- | --- | --- |
|
|
183
|
+
| virtio-blk | virtio 1.3 packed rings (`VIRTIO_F_VERSION_1` + `RING_PACKED`) | queue-size 1024, ats, iothreads |
|
|
184
|
+
| cache modes | none / writeback / writethrough | `cache=none` default |
|
|
185
|
+
| async engine | `aio=io_uring` | native threads; fixed registered buffers |
|
|
186
|
+
| discard | `unmap` (or ignore) | thin provisioning on qcow2 |
|
|
187
|
+
| virtiofsd | 1.14.0 (bundled) | 9p removed in the runtime-rs lineage |
|
|
188
|
+
| EROFS snapshotter | current | read-only layered snapshots |
|
|
189
|
+
| nydus | 0.15.13 | lazy-pull image service |
|
|
190
|
+
| containerd CDI | annotations | cold-plug plus QMP `device_add` hot-plug |
|
|
191
|
+
| SPDK | v26.05 | bdev_malloc, memory tiering, NVMe-oF under 150 ms, NVMe KV, JSON-RPC |
|
|
192
|
+
| nullfs | Linux 7.0 | new scratch filesystem for builds |
|
|
193
|
+
| XFS self-healing | Linux 7.0 | background scrub |
|
|
194
|
+
| wrapped keys | Linux 6.15 | hardware-wrapped inline encryption |
|
|
195
|
+
| THP / khugepaged | always / defer+madvise | -15% TLB miss, +8% QEMU on the reference pass |
|
|
196
|
+
| KSM / UKSM | rich-area detection; UKSM upstream is unmaintained, the engine documents the sroeschus/uksm community fork (active, ported to recent kernels) as the only viable UKSM source | 600-2400 MB/s scan, 30-45% RAM reclaimed on fleets |
|
|
197
|
+
| zram | zstd / lz4hc dual | dynamic compressor switching (ZRAM_MULTI_COMP) |
|
|
198
|
+
| zswap | lz4hc over zsmalloc | 20% pool default |
|
|
199
|
+
| snapshots | qcow2 external/internal, QMP `savevm` transactional, migrate-to-file | the rollback transaction is section 13 |
|
|
200
|
+
|
|
201
|
+
## 10. Docker integration
|
|
202
|
+
|
|
203
|
+
Docker Engine 29.7.2 (2026-08-05, API 1.52, go1.24.6, runc 1.3.0) with containerd 2.3.4 (time-based minors every four months; containerd carries no LTS designation). The engine contract, flag by flag:
|
|
204
|
+
|
|
205
|
+
| Docker flag | Value | Why |
|
|
206
|
+
| --- | --- | --- |
|
|
207
|
+
| `--memory-swap` | -1 | unlimited swap up to host capacity; the elastic-RAM foundation |
|
|
208
|
+
| `--shm-size` | 2g | lifts the 64 MB `/dev/shm` default (PyTorch bus-error fix) |
|
|
209
|
+
| `--cpus` | from vcpus/overcommit | container analogue of `-smp` |
|
|
210
|
+
| `--pids-limit` | 0 | container analogue of unlimited threads |
|
|
211
|
+
| `--tmpfs /tmp` | size=20G | shader cache and scratch |
|
|
212
|
+
| `--rm` / AutoRemove | on | sandbox ephemerality |
|
|
213
|
+
| `--cpus` nano form | NanoCpus 4e9 presets | orchestrator presets |
|
|
214
|
+
| `--gpus` | CDI `nvidia.com/gpu=0` | device selection through the CDI spec |
|
|
215
|
+
|
|
216
|
+
Build: Buildx 0.36.1, BuildKit cache mounts, GHA cache `mode=max` (103 s to 25 s on the reference workload), multi-stage Dockerfile syntax 1.14, distroless runtime. Compose 5.5.0 (Spec v2.40 canonical `compose.yaml`; the deprecated `version:` field recorded as history), three-service stack (engine, qemu guest, gpu sidecar). Rootless: gvisor-tap-vsock 0.8.3 (slirp4netns removed from packaging), private time namespaces, cgroups v2 delegation. CDI for GPUs across nvidia/amd/intel. Ecosystem twins: Podman 6.1 (volume rename, provider-agnostic CLI), nerdctl, LXC 6.0.4 / Incus 7.2, Nanos and Unikraft 0.21.0 Ijiraq (VirtioFS PAL) for unikernel deployments, Wasmtime 36/46 shims for WASM containers. Docker VMM beta (Desktop 4.86+, Apple Containerization framework 1.0.0 from WWDC26, macOS 26, per-container VMs with vmnet and shmSize remount) tracked as an engine candidate. 2026 CVE ledger applied: CVE-2026-17106 (go-archive), CVE-2026-15793 (BuildKit), CVE-2026-41567 (docker cp PATH hijack TOCTOU), CVE-2026-32288 (sparse tar OOM), CVE-2026-53489 (CRI checkpoint symlink read), CVE-2026-15264 (vhost-user-gpu EGL).
|
|
217
|
+
|
|
218
|
+
## 11. containerd and microVM engines
|
|
219
|
+
|
|
220
|
+
- **Firecracker 1.16.1** (2026-07-02). 125 ms cold boot, under 5 MiB per microVM, 150 VMs/s per host; snapshots restore in about 4 ms (File backend: MAP_PRIVATE mapping, kernel-driven copy-on-write page faults; Uffd backend: userfaultfd userspace fault serving - the E2B primitive), diff snapshots and PCI virtio hotplug in developer preview, Linux 6.18 host support, MTU negotiation via VIRTIO_NET_F_MTU, virtio-pmem rate limiter; jailer sandboxing; strictly requires KVM (bare metal or nested). API over unix socket: PUT machine-config / boot-source / drives, InstanceStart, PATCH snapshot/create, CLI `--restore-file` / `--api-sock`. The warm pool keeps restored VMs idle (prewarm/acquire/release/refill/drain) so acquires are page-fault replays at 3-5 ms.
|
|
221
|
+
- **Cloud Hypervisor 53.0** (2026-07-12, six-week cadence, rust-vmm). Offloaded snapshot/restore daemon (userfaultfd + vhost-user moves the copy load out of the VMM), migratable VFIO on the same host (mlx5_vfio_pci reference, pre-opened VFIO devices), experimental vfio-user via `--user-device socket=<path>` with `ch-remote add-user-device` hotplug; the engine's `clhruntime` strategy speaks it directly.
|
|
222
|
+
- **gVisor release-20260817.0** (2026-08-19). runsc OCI runtime; systrap platform default (seccomp SECCOMP_RET_TRAP delivering SIGSYS to the Sentry; faster than ptrace, no `/dev/kvm` needed unlike the KVM platform); DirectFS cuts the emulation cost for I/O-heavy workloads; typical overhead 10-30% (up to 2x syscall-bound); io_uring disabled by default. Runs on GitHub-hosted runners - the no-KVM interception path.
|
|
223
|
+
- **Kata Containers 4.1.0** (2026-08-21). runtime-rs (Rust) default since 4.0, Go runtime deprecated (removal not before 5.0, projected Q1 2028); hypervisors QEMU, CLH, Firecracker, Dragonball, OpenVMM (4.1); 4.1 adds CLH VM templates, configurable nested virtualization, NVSwitch passthrough through IOMMUFD, rootless and seccomp baseline for QEMU; CoCo v0.14.0 with Trustee for confidential deployments.
|
|
224
|
+
- **CRIU 4.2.1** (2026-07-21). Process-tree checkpoint/restore (the CRIUTIBILITY 4.2 line plus a year of distro patches); integrates with runc, Podman, CRI-O and Kubernetes checkpointing; pairs with userfaultfd restore; SELinux relabel on restore is mandatory and audited; encrypted checkpoints (ChaCha20-Poly1305) and WASM linear-memory snapshots are implemented capabilities in the checkpoint/restore surface of `virtualization.ts` (v3 redistribution: the CRIU plans, MAP_PRIVATE snapshots, UFFD projection, dirty-page diffing and the migration state machine moved there from the retired `future.ts`, with the AI-session checkpoint planner in `compute.ts`).
|
|
225
|
+
|
|
226
|
+
Engine comparison matrix (the same table the orchestrator selects from):
|
|
227
|
+
|
|
228
|
+
| Engine | Version | Cold start | Memory per instance | Isolation boundary | KVM required | Snapshot/restore | Best use |
|
|
229
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
230
|
+
| Docker (baseline) | 29.7.2 | 1-2 s | 10s of MB | namespaces, seccomp, cgroups | no | CRIU-based | default execution path |
|
|
231
|
+
| QEMU TCG | 11.1.0 | seconds (microvm about 4x faster) | guest RAM plus tb-size | full software VM | no | savevm/loadvm, migrate-to-file | CI without KVM, CPUID identities |
|
|
232
|
+
| QEMU KVM | 11.1.0 | sub-second | guest RAM | full VM, accelerated | yes | same as TCG | self-hosted throughput |
|
|
233
|
+
| Firecracker | 1.16.1 | 125 ms | under 5 MiB | microVM, minimal devices | yes | File/Uffd, ~4 ms restore, diff dev preview | warm pools at 150 VMs/s |
|
|
234
|
+
| Cloud Hypervisor | 53.0 | hundreds of ms | tens of MB | full VM, Rust VMM | yes | offloaded daemon (uffd + vhost-user) | snapshotted VMs with devices |
|
|
235
|
+
| gVisor | 20260817.0 | near-native container start | sentry overhead | userspace kernel | no (systrap) | not a snapshot engine | no-KVM interception |
|
|
236
|
+
| Kata | 4.1.0 | hundreds of ms to s | VM plus runtime-rs | VM per container | yes | hypervisor-level plus CRIU | untrusted OCI workloads |
|
|
237
|
+
| CRIU | 4.2.1 | millisecond restores | process tree | composes with others | no | process-tree checkpoint | warm workers |
|
|
238
|
+
|
|
239
|
+
E2B reference point: sub-200 ms published cold (about 150 ms measured), 5-30 ms snapshot starts on Firecracker+UFFD; the engine target is 125 ms cold and 3-5 ms pool acquire with the same primitives, plus the QEMU TCG path for the no-KVM environments E2B does not serve. Adjacent data points: Morph 250 ms VM forks; Vercel Sandbox GA 2026-01-30 (Firecracker-based); CubeSandbox 67 ms avg / P95 90 / P99 137 ms; EmberVM uffd O(1) CoW resume (400 ms P99 2 s with 533 MB/s prefetch); Fly Machines ~300 ms checkpoint restores. Block-I/O comparison recovered from the v4 pool benchmark pass (fio inside the guest): Firecracker versus Kata at 4749 versus 1113 MB/s on one access pattern and 3842 versus 302 MB/s on the other (4.3x and 12.7x deltas; passthrough-backed virtio-blk both sides, otherwise identical host).
|
|
240
|
+
|
|
241
|
+
## 12. MTTG: multi-tenant thread groups with cgroups v2
|
|
242
|
+
|
|
243
|
+
MTTG is the M:N scheduler (unrelated to MTTCG): `mttggrid` in `virtualization.ts` (TS mirror of the forge `Mttg` class) multiplexes up to `MTTG_MAX = 1,000,000` virtual threads onto host lanes with round-robin deques and Chase-Lev style work stealing; the guest fw_cfg handshake (`opt/aetherforge/mttg`) advertises it opt-in. Worked example: 32 host threads carrying 65,536 virtual threads is a 2048x multiplex; QEMU `-smp` stays at 32 - MTTG is userspace on top.
|
|
244
|
+
|
|
245
|
+
Tenant isolation uses cgroups v2 exclusively (controller files written by `tenantcgroupbuilder` under `/sys/fs/cgroup/vhe`):
|
|
246
|
+
|
|
247
|
+
| cgroup v2 file | Range / default | Effect |
|
|
248
|
+
| --- | --- | --- |
|
|
249
|
+
| `cpu.weight` | 1-10000 (default 100) | proportional CPU share |
|
|
250
|
+
| `cpu.max` | quota period | hard bandwidth cap |
|
|
251
|
+
| `cpu.max.burst` | accumulated burst | the Khlebnikov burst extension |
|
|
252
|
+
| `cpuset.cpus` / `mems` / `effective` / `exclusive` | core lists | NUMA-aware pinning and partition |
|
|
253
|
+
| `memory.high` | 0.8x quota | soft throttle with synchronous reclaim |
|
|
254
|
+
| `memory.max` | quota | hard OOM kill boundary |
|
|
255
|
+
| `memory.low` | floor | recursive protection |
|
|
256
|
+
| `io.weight` / `io.max` | 1-10000 / BPS+IOPS | block IO control |
|
|
257
|
+
| `pids.max` | 1024 | anti-fork-bomb |
|
|
258
|
+
|
|
259
|
+
Scheduler context with versions: EEVDF since kernel 6.6 (CFS retired in 6.12; virtual-deadline, earliest eligible lag >= 0, VRT decaying; `PLACE_LAG`/`RUN_TO_PARITY` sysctls in 6.10 measured at -13.5% latency for interactive loads); BORE (burst-Oriented Response Estimator: score via bitcount normalized 0-39, 1.25x timeslice scaling, `sched_bore` sysctls - lifetime 75000000 ns, penalty offset 24, scale 1536; CachyOS ships it default); sched_ext since 6.12 (SCX extensible BPF scheduler class, commit f0e1a0643a59 with the Microsoft backport; `scx_layered`, `scx_bpfland` policies); QoS classes guaranteed/burstable/besteffort/idle mapped to tenants gold/silver/bronze; `cpumaxqos` renders the three shapes (`max 100000` burstable, `N*100000 100000` guaranteed, `max` besteffort/idle); PSI pressure stalls plus DAMON mtier auto-tuning; `numa_balancing` TNF_FAULT_LOCAL page-fault migration; FFmpeg 7.1.1 Blackwell transcode QoS with weighted vRAM (31 modes, 5 codecs, 24 MTTG stages on NVENC dual 8K120 - the encoding matrix is in `hardware.md` section 9). Docker+MTTG merged surface (dockermttg): Buildx Bake HCL matrices, Dockerfile 1.6+ syntax, CDI device requests, `saddle.slice` parent, OCI provenance labels max, no-new-privileges plus Tini 0.19.0, pinned Actions with OTEL tracing, and the passage memory pipeline 512 MB - 4 TB with internal priority.
|
|
260
|
+
|
|
261
|
+
## 13. Passage security and snapshot rollback
|
|
262
|
+
|
|
263
|
+
Snapshot rollback is a five-phase transaction: phase 0 detect (health probes on vCPU steal and memory pressure; QMP SHUTDOWN/STOP events; circuit breaker opens after 5 failures); phase 1 quiesce (qemu-guest-agent fs-freeze/fs-thaw, pipeline drain, WAL fsync with an idempotency token per operation - `randomUUID`, duplicates deduped); phase 2 loadvm with RAM verification; phase 3 network reattach (netdev detach/attach on the bridge, virtio-net-pci queues 4, hostfwd on a random host port - `127.0.0.1` is explicitly forbidden in the binding validator); phase 4 GPU rebind (vfio-pci unbind with `driver_override`, iommufd fd close, rebind with a fresh iommufd object). Write-ahead log at `/saddle/data/wal/<vmId>.wal.jsonl` and audit at `audit/<tenant>.jsonl`, both append-only. Gateway posture: TLS 1.3 only, mTLS with per-VM certificate rotation and JWT issuer, seccomp plus AppArmor profiles, RBAC with immutable audit, disaster recovery to offsite S3. The security layers themselves (Landlock, seccomp, eBPF LSM, PQ TLS) are specified in `security.md` and composed fail-closed by `security.ts`.
|
|
264
|
+
|
|
265
|
+
## 14. Mesa rendering stack (summary)
|
|
266
|
+
|
|
267
|
+
The complete 190-variable Mesa contract, presets and probes live in `render.ts` and are summarized in `readme.md`; the virtualization-relevant facts: llvmpipe delivers OpenGL 4.6 core (161/161 extensions, Mesamatrix) with AVX-512 selected at runtime by Gallivm (MR !17813) and the rasterizer thread ceiling raised to 32 (MR 31551); lavapipe delivers the Vulkan 1.4 surface (Khronos-conformant on the 1.3 CTS, submission 2022-07-19) selected through `VK_DRIVER_FILES` (`VK_ICD_FILENAMES` deprecated by the loader); Rusticl delivers OpenCL 3.1 (sole frontend since Clover was deleted in Mesa 25.2; `RUSTICL_DEVICE_TYPE=gpu` makes clinfo report the device as a GPU; `cl_khr_fp16` default, only fp64 needs `RUSTICL_FEATURES`). Headless GLX runs on the validated Xvfb recipe `Xvfb :99 -ac -screen 0 1920x1080x24 -nolisten tcp +extension GLX +render -noreset` with an xdpyinfo wait loop (50 retries at 0.1 s), stale-lock cleanup (`/tmp/.X99-lock`, `/tmp/.X11-unix/X99`) and a 20 GB `MESA_SHADER_CACHE_DIR` tmpfs. Zink (OpenGL-on-Vulkan) is available as the GL compatibility path; the full env surface and smi-adapter rendering are `render.ts` territory. Mesa gains recovered from the v4 pool notes: the RadeonSI Rust conversion started on 2025-03-27 with about 900 lines of Rust in-tree (the beginning of the Rust-in-Mesa program that Rusticl and NVK already follow); Rusticl shared-virtual-memory support is tracked at the SVM 23.3 milestone; and the Rusticl int64 path (`RUSTICL_FEATURES` int64 lane) completes the fp64 story clinfo probes ask about.
|
|
268
|
+
|
|
269
|
+
## 15. WASM tier: Wasmtime and WASI
|
|
270
|
+
|
|
271
|
+
Wasmtime 48.0.0 (LTS, support until 2028-08-20) is the smallest engine tier: a virtual CPU budget instead of a virtual CPU map. Fuel metering (deterministic 50M-fuel budgets) and epoch interruption (180 s deadlines, about 10% overhead) implement the same M:N discipline MTTG applies to threads. WASI 0.2.8 Preview 2 ships today; WASI 0.3.0 was ratified 2026-06-11 with the component model native async - the engine's `compute.ts` (the v3 home of the wasm tier, moved out of the retired `future.ts`) implements the 0.3 async runtime with cancellation, WIT bindings generation, deny-by-default component ACL, wasi:nn and wasi:webgpu bridges (the wasipreview2 note: preview 2 remains the interchange target until the 0.3 ecosystem RTMs; both surfaces are wired in `compute.ts`, aligned with wgpu 30.x for the WebGPU side). Adjacent runtimes recorded: WAMR, WasmEdge, Wasmer, Extism 1.30, wasmCloud, Spin 3.6.0 (the spinframework repo) with wasi:http 0.3.
|
|
272
|
+
|
|
273
|
+
## 16. Alternative hypervisors
|
|
274
|
+
|
|
275
|
+
Xen 4.22 (PVH dom0, 16383 CPUs); Hyper-V WS2025 LTSC v12.0 (2048 vCPUs, GPU paravirtualization); bhyve (FreeBSD, KVM 6.18 LTS guest note); Apple Virtualization.framework `Vz` (the Apple Containers 1.2.2 base); WHPX and HVF as `-accel` twins of the same plan; Incus/LXC 6.0.4 system containers; KubeVirt CRDs (translate `vm.config` to a `VirtualMachine` spec; migration belongs to KubeVirt). Nested virtualization: Docker-in-QEMU and WSL2-in-QEMU with `kvm_intel.nested=1`; never combined with SEV-SNP.
|
|
276
|
+
|
|
277
|
+
## 17. Operations runbooks (condensed)
|
|
278
|
+
|
|
279
|
+
| Runbook | Rule |
|
|
280
|
+
| --- | --- |
|
|
281
|
+
| Host hardening | IOMMU on; `vfio-pci.ids` only for the passthrough pair; swtpm socket 0600 qemu:qemu; Looking Glass shm 0660; QEMU seccomp sandbox on; never expose `-monitor tcp:` |
|
|
282
|
+
| VFIO troubleshooting | `dmesg \| grep -e DMAR -e AMD-Vi`; walk `/sys/kernel/iommu_groups`; if the GPU shares a group with storage, stop - ACS override is the last resort |
|
|
283
|
+
| Reset troubleshooting | black screen after first VM: vendor-reset, kernel 6.14+, or a second GPU for the host; `journalctl -k \| grep vfio` |
|
|
284
|
+
| Overcommit troubleshooting | guest stalls, host load in the hundreds: lower vcpus or pin with `cpuset.cpus`; `vmstat 1` with non-zero si/so means off-RAM - enable zswap or cut `memory.gib` |
|
|
285
|
+
| Pinning | `numactl --cpunodebind=0 --membind=0` plus taskset for emulator versus vCPU threads (`debug-threads=on` names them); CCD0 for latency, CCD1 for background on X3D hosts |
|
|
286
|
+
| Logging | QEMU stdout is the serial console (`-serial mon:stdio`); libvirt `stdio_handler=logd`; Docker json-file with rotation |
|
|
287
|
+
| Backup | qcow2 plus `qemu-img snapshot`; back the virtiofs host path, not the guest mount |
|
|
288
|
+
| Capacity | physical floor x overcommit = honest vCPU budget (MTTG adds concurrency, not CPU time); never advertise more RAM than zswap can carry unless the guest is sparse |
|
|
289
|
+
| Incident: unbind of the only GPU | SSH in, `virsh destroy`, rebind via the libvirt hook; if SSH was on that GPU's display, that is why `passage.config` insists on a second path |
|
|
290
|
+
| Issue template | CPU, GPU, kernel, QEMU version, Docker version, IOMMU isolated, attached TOML; PRs without tests stay draft |
|
|
291
|
+
|
|
292
|
+
## 18. Micro-techniques recovered from the v4 pool
|
|
293
|
+
|
|
294
|
+
Small production techniques the analysis pool documented that belong to this stack but had no home in the v3 docs; each is one flag, one env var or one socket away from the surfaces above.
|
|
295
|
+
|
|
296
|
+
| Technique | Domain | Note |
|
|
297
|
+
| --- | --- | --- |
|
|
298
|
+
| `IORING_SETUP_NO_MMAP` with the mpscq ring layout | storage / passage | maps the SQ/CQ rings through a normal allocation instead of the mmap region; avoids fork-inherited mapping issues in the bridge processes |
|
|
299
|
+
| `IORING_SETUP_COOP_TASKRUN` + `IORING_SETUP_SINGLE_ISSUER` | storage | cooperative CQE task work and the single-issuer hint; trims IPI overhead on the fixed-buffer NVMe path |
|
|
300
|
+
| CUDA MPS (Multi-Process Service) | GPU compute | partitions one physical GPU among multiple client processes without MIG or vGPU licenses; complements the time-slicing profiles in `hardware.md` section 6 |
|
|
301
|
+
| `SOURCE_DATE_EPOCH` | reproducible builds | deterministic timestamps for the image build layer so the level-9 source zip rebuilds byte-identically |
|
|
302
|
+
| `vsock://2:1024` | microVM sockets | AF_VSOCK address shape for the guest agent channel: CID 2 (host side of the device), port 1024 (the reserved agent port in the v4 API reference) |
|
|
303
|
+
| `/dev/shm` remount workaround | containers | when a runtime ignores `--shm-size` (recorded against the Apple containerization path), remount tmpfs on `/dev/shm` with the required size from the entrypoint |
|
|
304
|
+
|
|
305
|
+
## Sources
|
|
306
|
+
|
|
307
|
+
1. QEMU 11.1.0 announcement: https://www.qemu.org/2026/08/11/qemu-11-1-0/
|
|
308
|
+
2. QEMU MTTCG design: https://www.qemu.org/docs/master/devel/multi-thread-tcg.html
|
|
309
|
+
3. TCG internals: https://www.qemu.org/docs/master/devel/tcg.html
|
|
310
|
+
4. microvm machine: https://www.qemu.org/docs/master/system/i386/microvm.html
|
|
311
|
+
5. QEMU source (EPYC-v5, target/i386/cpu.c): https://gitlab.com/qemu-project/qemu
|
|
312
|
+
6. GitHub runners lack /dev/kvm: https://github.com/actions/runner-images/issues/12933
|
|
313
|
+
7. TCG fallback incident: https://github.com/orgs/community/discussions/151747
|
|
314
|
+
8. Firecracker releases: https://github.com/firecracker-microvm/firecracker/releases
|
|
315
|
+
9. Firecracker snapshot support: https://github.com/firecracker-microvm/firecracker/blob/main/docs/snapshot-support.md
|
|
316
|
+
10. Firecracker microVM paper: https://arxiv.org/abs/2102.12892
|
|
317
|
+
11. AWS restore measurements: https://brooker.co.za/blog/2022/11/29/snapstart.html
|
|
318
|
+
12. Cloud Hypervisor v53: https://github.com/cloud-hypervisor/cloud-hypervisor/releases and https://www.cloudhypervisor.org
|
|
319
|
+
13. vfio-user: https://github.com/cloud-hypervisor/cloud-hypervisor/blob/main/docs/vfio-user.md
|
|
320
|
+
14. gVisor platforms: https://gvisor.dev/docs/architecture_guide/platforms
|
|
321
|
+
15. gVisor performance: https://gvisor.dev/docs/architecture_guide/performance
|
|
322
|
+
16. Kata 4.0/4.1: https://katacontainers.io/blog/kata-containers-4-0-0-release-overview and https://github.com/kata-containers/kata-containers/releases
|
|
323
|
+
17. CRIU: https://github.com/checkpoint-restore/criu/releases and https://criu.org
|
|
324
|
+
18. E2B on Firecracker versus QEMU: https://e2b.dev/blog/firecracker-vs-qemu
|
|
325
|
+
19. E2B self-hosting requirements: https://github.com/e2b-dev/infra/blob/main/self-host.md
|
|
326
|
+
20. OVS: https://docs.openvswitch.org
|
|
327
|
+
21. DPDK releases: https://core.dpdk.org
|
|
328
|
+
22. XDP and eBPF tooling: https://github.com/xdp-project/xdp-tools, https://github.com/libbpf/libbpf, https://github.com/cilium/ebpf
|
|
329
|
+
23. WireGuard: https://www.wireguard.com
|
|
330
|
+
24. Docker Engine 29 release notes: https://docs.docker.com/engine/release-notes/29
|
|
331
|
+
25. containerd releases: https://github.com/containerd/containerd/releases
|
|
332
|
+
26. EEVDF and scheduler changes: https://lwn.net/Articles/969066 and the kernel tree documentation
|
|
333
|
+
27. Wasmtime and WASI: https://github.com/bytecodealliance/wasmtime/releases, https://wasi.dev/roadmap
|
|
334
|
+
28. Mesa release notes: https://docs.mesa3d.org/relnotes/26.2.1.html
|
|
335
|
+
29. Xvfb manual: https://man.archlinux.org/man/Xvfb.1
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# web duplicate cleanup
|
|
2
|
+
|
|
3
|
+
This directory was audited on 2026-08-13. The canonical file is the path without a numeric copy suffix. All files whose names ended in `(1)`, `(2)` or `(3)` were removed, followed by removal of the explicitly authorized `other1` and `other2` directories during the root architecture migration.
|
|
4
|
+
|
|
5
|
+
The cleanup removed **310 duplicate-suffix files** and then removed **50 files** under `other1` and `other2`. Exact copies were consolidated by retaining the canonical path. The duplicate groups covered configuration files, client components, hooks, pages, server/shared modules, lockfiles, patches and project metadata.
|
|
6
|
+
|
|
7
|
+
Two divergent variants received a conservative review. The useful compiler options from `tsconfig (2).json`—`target: ESNext`, `forceConsistentCasingInFileNames` and `resolveJsonModule`—were merged into `tsconfig.json`; conflicting `strict`, `jsx`, `include`, `exclude` and `outDir` values were not copied over the active project configuration. The divergent `vite.config(2).ts` only omitted the active `base` setting, so the canonical `vite.config.ts` was retained. The divergent `package (2).json` described a different `@wenathlan/uka` application rather than Saddle Pages and was not merged into the canonical Saddle Pages manifest.
|
|
8
|
+
|
|
9
|
+
The web tree now has one canonical root-based application and no `other1` or `other2` directories. Future files should use the canonical path directly and should not be created with numeric copy suffixes.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Saddle — direção visual e plano inicial
|
|
2
|
+
|
|
3
|
+
## Três direções possíveis
|
|
4
|
+
|
|
5
|
+
### 1. Signal & Ledger
|
|
6
|
+
|
|
7
|
+
Uma linguagem editorial de sistemas: papel quente, tinta quase preta, acentos de sinalização e diagramas como protagonistas. A sensação é de um manual técnico raro, transformado em produto digital.
|
|
8
|
+
|
|
9
|
+
**Probabilidade:** 0,07
|
|
10
|
+
|
|
11
|
+
### 2. Quiet Compute
|
|
12
|
+
|
|
13
|
+
Uma interface silenciosa e quase arquitetônica, com superfícies claras, tipografia precisa e muito espaço negativo. A tecnologia aparece como infraestrutura confiável, não como espetáculo.
|
|
14
|
+
|
|
15
|
+
**Probabilidade:** 0,03
|
|
16
|
+
|
|
17
|
+
### 3. Night Shift Console
|
|
18
|
+
|
|
19
|
+
Um ambiente operacional escuro, denso e imersivo, com trilhas de execução, estados de workers e sinais luminosos. A direção é apropriada para uma experiência de console, mas deve evitar o neon genérico.
|
|
20
|
+
|
|
21
|
+
**Probabilidade:** 0,09
|
|
22
|
+
|
|
23
|
+
## Direção escolhida: Signal & Ledger
|
|
24
|
+
|
|
25
|
+
### Design Movement
|
|
26
|
+
|
|
27
|
+
Brutalismo editorial contemporâneo combinado com design suíço de informação e referências de manuais de engenharia. A interface deve parecer um artefato operacional: rigorosa, legível, modular e com marcas de uso intencionais.
|
|
28
|
+
|
|
29
|
+
### Core Principles
|
|
30
|
+
|
|
31
|
+
1. **Infraestrutura visível:** transformar conceitos abstratos — storage, runners, memória, workflows — em estruturas, trilhas, mapas e relações legíveis.
|
|
32
|
+
2. **Contraste de registro:** combinar títulos expressivos com microcopy monoespaçada, como se cada tela fosse simultaneamente manifesto e console.
|
|
33
|
+
3. **Assimetria funcional:** usar colunas deslocadas, numeração lateral, blocos de evidência e cortes editoriais em vez de centralizar tudo em cartões iguais.
|
|
34
|
+
4. **Sinalização com propósito:** o laranja não é decoração; indica ação, fluxo ativo, calor computacional ou ponto de entrada.
|
|
35
|
+
|
|
36
|
+
### Color Philosophy
|
|
37
|
+
|
|
38
|
+
O fundo principal será um papel mineral levemente quente, próximo de um documento técnico impresso. O texto será um preto-azulado profundo para preservar leitura e autoridade. O laranja **Saddle Ember** funcionará como sinal de operação — raro, específico e imediatamente reconhecível. Verdes e azuis aparecerão apenas como estados semânticos, nunca como gradientes decorativos.
|
|
39
|
+
|
|
40
|
+
### Layout Paradigm
|
|
41
|
+
|
|
42
|
+
As páginas usarão uma malha editorial com trilho lateral numerado, conteúdo principal deslocado e módulos de evidência que invadem a coluna adjacente. A home começa com um split assimétrico: manifesto à esquerda, um mapa visual de runtime à direita. As páginas internas mantêm o mesmo cabeçalho e uma faixa de contexto com o número da seção, permitindo que o usuário saiba onde está sem depender de um menu pesado.
|
|
43
|
+
|
|
44
|
+
### Signature Elements
|
|
45
|
+
|
|
46
|
+
- **Rail de execução:** uma linha vertical fina com marcadores numerados que acompanha as seções e simula a sequência de boot do sistema.
|
|
47
|
+
- **Cards de evidência:** painéis com borda, rótulo monoespaçado, pequenos dados e uma ação explícita, como se fossem registros de execução.
|
|
48
|
+
- **Diagrama de sela:** o símbolo visual nasce de dois suportes curvos que conectam armazenamento e processamento, repetido como watermark, favicon e detalhe de transição.
|
|
49
|
+
|
|
50
|
+
### Interaction Philosophy
|
|
51
|
+
|
|
52
|
+
As interações devem parecer comandos que respondem imediatamente. Hover revela contexto e desloca o elemento poucos pixels; cliques confirmam com compressão breve; abas e filtros mudam o foco sem apagar o contexto. Links para áreas ainda não implementadas devem usar feedback discreto e honesto, nunca fingir uma ação concluída.
|
|
53
|
+
|
|
54
|
+
### Animation
|
|
55
|
+
|
|
56
|
+
Entradas de página usam fade e deslocamento vertical de 12–18px, com stagger de 40–60ms entre blocos. Diagramas desenham suas linhas apenas uma vez, em 260–420ms, e os indicadores ativos pulsam com baixa amplitude. Estados de hover ficam entre 140–190ms e usam easing de saída forte. Toda animação não essencial é desativada em `prefers-reduced-motion`.
|
|
57
|
+
|
|
58
|
+
### Typography System
|
|
59
|
+
|
|
60
|
+
- **Display:** `Space Grotesk`, pesos 500–700, para títulos curtos e assertivos.
|
|
61
|
+
- **Body:** `DM Sans`, pesos 400–500, para explicações e navegação.
|
|
62
|
+
- **Technical:** `IBM Plex Mono`, pesos 400–600, para rótulos, métricas, paths e estados.
|
|
63
|
+
|
|
64
|
+
Os títulos devem ser compactos, com largura de linha controlada e quebras deliberadas. Labels técnicos usam caixa alta, tracking de 0.12em e tamanho reduzido. O corpo nunca deve parecer código.
|
|
65
|
+
|
|
66
|
+
### Brand Essence
|
|
67
|
+
|
|
68
|
+
**Saddle é uma camada de execução distribuída para transformar armazenamento de terceiros em memória e trabalho computacional publicável, sem exigir uma máquina local do operador.**
|
|
69
|
+
|
|
70
|
+
Personalidade: **inventiva, operacional, indisciplinada**.
|
|
71
|
+
|
|
72
|
+
### Brand Voice
|
|
73
|
+
|
|
74
|
+
Headlines são curtas, concretas e levemente provocativas. CTAs descrevem o próximo movimento em vez de prometer resultados vagos. Microcopy trata o usuário como alguém capaz de entender sistemas complexos.
|
|
75
|
+
|
|
76
|
+
> “A máquina não está na sua mesa. Está na cadeia.”
|
|
77
|
+
|
|
78
|
+
> “Mapeie os bytes. Dispare o trabalho.”
|
|
79
|
+
|
|
80
|
+
### Wordmark & Logo
|
|
81
|
+
|
|
82
|
+
O logotipo será composto por um símbolo sem texto: dois arcos horizontais incompletos, conectados por um eixo vertical deslocado, formando uma sela abstrata e sugerindo uma ponte entre bucket e runner. O wordmark “SADDLE” será tipográfico em caixa alta, com espaçamento controlado e um corte sutil no segundo D para lembrar uma porta de entrada de dados.
|
|
83
|
+
|
|
84
|
+
### Signature Brand Color
|
|
85
|
+
|
|
86
|
+
**Saddle Ember — `#E86F2D`**, um laranja queimado de alta visibilidade, usado para ações, nós ativos e pontos de passagem do sistema.
|
|
87
|
+
|
|
88
|
+
## Plano de páginas
|
|
89
|
+
|
|
90
|
+
| Prioridade | Rota | Papel | Conteúdo previsto |
|
|
91
|
+
|---|---|---|---|
|
|
92
|
+
| 1 | `/` | Landing / manifesto | Hero assimétrico, tese Storage = Compute, mapa de arquitetura, superfícies do produto, sequência de funcionamento e CTA para explorar a documentação. |
|
|
93
|
+
| 2 | `/architecture` | Arquitetura | Camadas do sistema, cadeia de providers, storage backends, fluxo repo → CI → Pages e notas de limites físicos. |
|
|
94
|
+
| 3 | `/agent-browser` | Agent Browser | Captura e replay, eventos de sessão, replay determinístico, stealth e evidências. |
|
|
95
|
+
| 4 | `/compute` | Compute & memory | Virtual memory, runners, farm, provider chain e estados de execução. |
|
|
96
|
+
| 5 | `/integrations` | Integrações | Superfícies de pacote, plataformas suportadas e caminhos de adoção. |
|
|
97
|
+
| 6 | `/docs` | Documentação | Índice navegável de conceitos, quick start editorial e links para os próximos guias. |
|
|
98
|
+
|
|
99
|
+
## Ordem de implementação
|
|
100
|
+
|
|
101
|
+
1. Criar o shell global, a navegação e o sistema tipográfico.
|
|
102
|
+
2. Implementar a home com o manifesto e o mapa de runtime.
|
|
103
|
+
3. Criar o conjunto de componentes reutilizáveis para rails, métricas, cards e diagramas.
|
|
104
|
+
4. Implementar as páginas de arquitetura e agent browser, que validam a linguagem do produto.
|
|
105
|
+
5. Adicionar compute, integrações e docs com o mesmo shell.
|
|
106
|
+
6. Verificar rotas, responsividade, foco de teclado, contrastes e estados de interação.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Workflow improvement assessment — 2026-08-19
|
|
2
|
+
|
|
3
|
+
## Scope and method
|
|
4
|
+
|
|
5
|
+
This assessment reviewed the 19 tracked GitHub Actions workflows, the two local composite actions, the operational record, and the workflow categories supplied by the user: continuous integration, security, Pages, automation and deployment. It distinguishes controls already implemented from candidates that would add observable value. A candidate is not treated as implemented merely because a starter template exists.
|
|
6
|
+
|
|
7
|
+
GitHub exposes starter workflows as a catalog that can be filtered by category; templates can require secrets or extra setup and are not automatically suitable for a repository.[1] The current repository already covers its TypeScript engine, browser-facing web build, native artifacts, six registries, security scans, cache retention and GitHub Pages. The correct next step is selective hardening rather than adding every template.
|
|
8
|
+
|
|
9
|
+
## Current coverage
|
|
10
|
+
|
|
11
|
+
| Area | Assessment |
|
|
12
|
+
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
13
|
+
| Continuous integration | Engine build, type and syntax checks, active and legacy tests, package smoke check, cross-runtime compatibility and UKA tests form a strong baseline. Node 26.7.0 is used for the central engine path. |
|
|
14
|
+
| Workflow security | CodeQL scans GitHub Actions, JavaScript/TypeScript and Rust. The security workflow also runs dependency review, npm audit, cargo audit with an explicit reviewed-risk gate, OSV, TruffleHog, Trivy filesystem scanning and SBOM generation. |
|
|
15
|
+
| Release and artifacts | Release validation, target plans, extension, container archive, seven-target desktop matrix, Android/iOS paths, GHCR and five package registry workflows are present. Local composite actions centralize release-version resolution and package validation. |
|
|
16
|
+
| Web deployment | GitHub Pages builds the unified `web/` surface, normalizes the repository base path, creates a fallback, uploads the Pages artifact and deploys with serialized concurrency. |
|
|
17
|
+
| Maintenance | Cache retention has a dry-run default, dependency updates run weekly and release workflows expose manual dispatches. |
|
|
18
|
+
|
|
19
|
+
## Implemented improvement
|
|
20
|
+
|
|
21
|
+
The repository now includes `workflow lint`. It runs only for pull requests that change workflow or local composite-action files, uses a read-only token, and checks workflow syntax, expressions, action inputs, reusable workflow calls, cron syntax and common workflow-security errors. `actionlint` performs these checks without running project code, making it an appropriate low-cost complement to CodeQL's broader Actions analysis.[2]
|
|
22
|
+
|
|
23
|
+
The action references are pinned to full commit SHAs. GitHub identifies full SHA pinning as the immutable form of action reference and recommends least-privilege workflow tokens.[3] The new workflow has only `contents: read`; it introduces no secrets, package publishing, network credentials or self-hosted runner.
|
|
24
|
+
|
|
25
|
+
## Prioritized candidates
|
|
26
|
+
|
|
27
|
+
### High priority
|
|
28
|
+
|
|
29
|
+
**Dependabot grouping.** Group minor and patch updates by ecosystem while keeping major upgrades separate. This would reduce branch and pull-request churn after the recent cleanup while retaining update coverage. The grouping policy changes the review unit, so it should be approved separately before implementation.
|
|
30
|
+
|
|
31
|
+
**Release-readiness aggregation.** Add a manually invoked report that aggregates completed validation, artifact availability and registry evidence before a public release is created. This can reuse the existing serializable release-evidence API and requires no new secret. It must not claim that release-event workflows can prevent a release that has already been published.
|
|
32
|
+
|
|
33
|
+
### Medium priority
|
|
34
|
+
|
|
35
|
+
**OpenSSF Scorecard in report-only mode.** Scorecard can identify supply-chain policy gaps involving action pinning, token permissions and branch protection. It is feasible for this public repository but needs a narrowly scoped job permission of `security-events: write` and `id-token: write` to publish results. It should not become a merge-blocking gate until findings are reviewed.[4]
|
|
36
|
+
|
|
37
|
+
**Reusable release workflows.** Extract repeated release-only preparation steps into one or more reusable workflows. GitHub supports explicit inputs and secrets in reusable workflows, but permissions can only be maintained or reduced through nested calls. A refactor must preserve the current release-tag behavior exactly.[5]
|
|
38
|
+
|
|
39
|
+
**Artifact-attestation inventory.** Add a report that records which non-container artifacts have checksums, manifests, SBOMs or provenance. This should make evidence easier to inspect without claiming signing or trust that does not exist. GHCR already performs provenance and SBOM publication; desktop and mobile signing remain caller-owned.
|
|
40
|
+
|
|
41
|
+
**Persistent failure summary.** Add a human-readable summary only for repeated failures, so GitHub 503 service outages can be distinguished from source failures. This is deferred because it needs a destination, issue policy and write permission; it must not create or close issues automatically without a retention policy.
|
|
42
|
+
|
|
43
|
+
### Low or conditional priority
|
|
44
|
+
|
|
45
|
+
**PR labels, greetings and stale automation.** These improve triage only. They are not recommended now because the repository has no open PRs and automatic stale closure could conflict with deliberate archival decisions.
|
|
46
|
+
|
|
47
|
+
**Additional language scanners.** They are not recommended. The repository has substantive TypeScript and Rust code already covered by CodeQL. Package metadata for Maven, NuGet and RubyGems does not justify Java, C# or Ruby source scanning.
|
|
48
|
+
|
|
49
|
+
**OIDC trusted publishing.** This can replace long-lived publishing credentials for registries that support it, but it requires a registry-specific trust configuration owned by the account administrator. It cannot be enabled correctly through source changes alone.[6]
|
|
50
|
+
|
|
51
|
+
**Browser micro-VM or remote browser tests.** These require images, network policy, credentials and an isolated runtime. They are not a current CI candidate: GitHub-hosted runners must not be represented as the user's browser, storage or VM.
|
|
52
|
+
|
|
53
|
+
## Controls intentionally not added
|
|
54
|
+
|
|
55
|
+
The repository does not add self-hosted runners, automatic PR creation or approval, long-lived cloud credentials, SaaS scanner credentials, browser downloads or remote execution. GitHub warns that public-repository self-hosted runners can be persistently compromised by untrusted pull-request code.[3] The public workflows should remain on ephemeral GitHub-hosted runners until a later design establishes a separately isolated, operator-owned execution plane.
|
|
56
|
+
|
|
57
|
+
The analysis also does not recommend duplicate security scanners merely to increase the workflow count. Trivy, OSV, npm audit, cargo audit, CodeQL, TruffleHog, dependency review and SBOM generation have different purposes. An additional scanner should be introduced only with a defined signal, owner, remediation route and operating cost.
|
|
58
|
+
|
|
59
|
+
## Recommended sequence
|
|
60
|
+
|
|
61
|
+
The next low-risk work is to observe the new workflow-lint gate on normal workflow changes. The next design task is a non-publishing release-readiness aggregation command and report. Dependabot grouping and Scorecard should follow only after the desired review policy is chosen. Remote browser or micro-VM integration remains a 1.8.19 adapter and infrastructure design task, not a GitHub Actions template.
|
|
62
|
+
|
|
63
|
+
## References
|
|
64
|
+
|
|
65
|
+
[1]: https://docs.github.com/actions/writing-workflows/using-workflow-templates "GitHub Docs: Using workflow templates"
|
|
66
|
+
[2]: https://github.com/rhysd/actionlint "actionlint: static checker for GitHub Actions workflows"
|
|
67
|
+
[3]: https://docs.github.com/en/actions/reference/security/secure-use "GitHub Docs: Secure use reference"
|
|
68
|
+
[4]: https://github.com/ossf/scorecard-action "OpenSSF Scorecard Action"
|
|
69
|
+
[5]: https://docs.github.com/en/actions/how-tos/reuse-automations/reuse-workflows "GitHub Docs: Reuse workflows"
|
|
70
|
+
[6]: https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments "GitHub Docs: Security hardening your deployments"
|