@wenathlan/saddle 2.0.151 → 2.0.152
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/README.md +3 -3
- package/biome.jsonc +12 -5
- package/dist/App.d.ts +3 -0
- package/dist/App.js +50 -0
- package/dist/Sol/Sol.d.ts +3 -0
- package/dist/Sol/Sol.js +46 -0
- package/dist/Sol/agentbrowser/agentbrowser.d.ts +9 -0
- package/dist/Sol/agentbrowser/agentbrowser.js +121 -0
- package/dist/Sol/architecture/architecture.d.ts +9 -0
- package/dist/Sol/architecture/architecture.js +93 -0
- package/dist/Sol/compute/compute.d.ts +9 -0
- package/dist/Sol/compute/compute.js +22 -0
- package/dist/Sol/console/console.d.ts +15 -0
- package/dist/Sol/console/console.js +292 -0
- package/dist/Sol/dashboard/dashboard.d.ts +10 -0
- package/dist/Sol/dashboard/dashboard.js +181 -0
- package/dist/Sol/docs/docs.d.ts +9 -0
- package/dist/Sol/docs/docs.js +28 -0
- package/dist/Sol/home/home.d.ts +35 -0
- package/dist/Sol/home/home.js +239 -0
- package/dist/Sol/integrations/integrations.d.ts +9 -0
- package/dist/Sol/integrations/integrations.js +83 -0
- package/dist/Sol/intro/intro.d.ts +7 -0
- package/dist/Sol/intro/intro.js +102 -0
- package/dist/Sol/login/login.d.ts +16 -0
- package/dist/Sol/login/login.js +49 -0
- package/dist/Sol/notfound/notfound.d.ts +9 -0
- package/dist/Sol/notfound/notfound.js +15 -0
- package/dist/Sol/onboarding/onboarding.d.ts +25 -0
- package/dist/Sol/onboarding/onboarding.js +60 -0
- package/dist/Sol/playground/playground.d.ts +9 -0
- package/dist/Sol/playground/playground.js +127 -0
- package/dist/Sol/register/register.d.ts +16 -0
- package/dist/Sol/register/register.js +193 -0
- package/dist/Sol/shell/Shell.d.ts +124 -0
- package/dist/Sol/shell/Shell.js +335 -0
- package/dist/Sol/wingets/ComputeBootladder.d.ts +6 -0
- package/dist/Sol/wingets/ComputeBootladder.js +71 -0
- package/dist/Sol/wingets/ComputeModalitycatalog.d.ts +7 -0
- package/dist/Sol/wingets/ComputeModalitycatalog.js +71 -0
- package/dist/Sol/wingets/ConsoleApibadge.d.ts +7 -0
- package/dist/Sol/wingets/ConsoleApibadge.js +5 -0
- package/dist/Sol/wingets/ConsoleEdgelaw.d.ts +6 -0
- package/dist/Sol/wingets/ConsoleEdgelaw.js +36 -0
- package/dist/Sol/wingets/ConsoleEventstimeline.d.ts +19 -0
- package/dist/Sol/wingets/ConsoleEventstimeline.js +12 -0
- package/dist/Sol/wingets/ConsoleSnapshotcontrols.d.ts +8 -0
- package/dist/Sol/wingets/ConsoleSnapshotcontrols.js +8 -0
- package/dist/Sol/wingets/ConsoleSpecpanel.d.ts +21 -0
- package/dist/Sol/wingets/ConsoleSpecpanel.js +75 -0
- package/dist/Sol/wingets/ConsoleTerminal.d.ts +22 -0
- package/dist/Sol/wingets/ConsoleTerminal.js +77 -0
- package/dist/Sol/wingets/DashboardAccountpanel.d.ts +18 -0
- package/dist/Sol/wingets/DashboardAccountpanel.js +65 -0
- package/dist/Sol/wingets/DashboardAdminpanel.d.ts +6 -0
- package/dist/Sol/wingets/DashboardAdminpanel.js +90 -0
- package/dist/Sol/wingets/DashboardAuditlog.d.ts +8 -0
- package/dist/Sol/wingets/DashboardAuditlog.js +50 -0
- package/dist/Sol/wingets/DashboardCreatesandboxform.d.ts +10 -0
- package/dist/Sol/wingets/DashboardCreatesandboxform.js +71 -0
- package/dist/Sol/wingets/DashboardEventstimeline.d.ts +8 -0
- package/dist/Sol/wingets/DashboardEventstimeline.js +83 -0
- package/dist/Sol/wingets/DashboardGlobalsandboxestable.d.ts +8 -0
- package/dist/Sol/wingets/DashboardGlobalsandboxestable.js +57 -0
- package/dist/Sol/wingets/DashboardMeshnodestable.d.ts +8 -0
- package/dist/Sol/wingets/DashboardMeshnodestable.js +103 -0
- package/dist/Sol/wingets/DashboardSandboxlist.d.ts +10 -0
- package/dist/Sol/wingets/DashboardSandboxlist.js +163 -0
- package/dist/Sol/wingets/DashboardUserstable.d.ts +8 -0
- package/dist/Sol/wingets/DashboardUserstable.js +78 -0
- package/dist/Sol/wingets/HomeEntrygate.d.ts +23 -0
- package/dist/Sol/wingets/HomeEntrygate.js +73 -0
- package/dist/Sol/wingets/HomeMetricstrip.d.ts +9 -0
- package/dist/Sol/wingets/HomeMetricstrip.js +4 -0
- package/dist/Sol/wingets/HomeRuntimediagram.d.ts +1 -0
- package/dist/Sol/wingets/HomeRuntimediagram.js +22 -0
- package/dist/Sol/wingets/LoginForm.d.ts +19 -0
- package/dist/Sol/wingets/LoginForm.js +141 -0
- package/dist/Sol/wingets/RegisterPasswordconfirm.d.ts +13 -0
- package/dist/Sol/wingets/RegisterPasswordconfirm.js +16 -0
- package/dist/Sol/wingets/RegisterPasswordmeter.d.ts +19 -0
- package/dist/Sol/wingets/RegisterPasswordmeter.js +65 -0
- package/dist/Sol/wingets/RegisterUsernamerules.d.ts +11 -0
- package/dist/Sol/wingets/RegisterUsernamerules.js +16 -0
- package/dist/Sol/wingets/index.d.ts +39 -0
- package/dist/Sol/wingets/index.js +39 -0
- package/dist/alternatives.d.ts +508 -0
- package/dist/alternatives.js +950 -0
- package/dist/api.d.ts +154 -0
- package/dist/api.js +174 -0
- package/dist/auth.d.ts +268 -0
- package/dist/auth.js +476 -0
- package/dist/automation.d.ts +425 -0
- package/dist/automation.js +566 -0
- package/dist/browser.d.ts +561 -0
- package/dist/browser.js +1058 -0
- package/dist/capacitor.config.d.ts +45 -0
- package/dist/capacitor.config.js +48 -0
- package/dist/catalog.d.ts +43 -0
- package/dist/catalog.js +44 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.js +168 -0
- package/dist/communication.d.ts +181 -0
- package/dist/communication.js +376 -0
- package/dist/compute.d.ts +1160 -0
- package/dist/compute.js +2272 -0
- package/dist/dashboardlib.d.ts +58 -0
- package/dist/dashboardlib.js +161 -0
- package/dist/db.d.ts +569 -0
- package/dist/db.js +1080 -0
- package/dist/distribution.d.ts +528 -0
- package/dist/distribution.js +810 -0
- package/dist/drizzle.config.d.ts +20 -0
- package/dist/drizzle.config.js +18 -0
- package/dist/edgelandes.d.ts +70 -0
- package/dist/edgelandes.host.d.ts +26 -0
- package/dist/edgelandes.host.js +1089 -0
- package/dist/edgelandes.inproc.d.ts +27 -0
- package/dist/edgelandes.inproc.js +952 -0
- package/dist/edgelandes.js +1133 -0
- package/dist/edgelandes.ninety.d.ts +31 -0
- package/dist/edgelandes.ninety.js +174 -0
- package/dist/edgelandes.virtual.d.ts +25 -0
- package/dist/edgelandes.virtual.js +629 -0
- package/dist/edgeplane.d.ts +114 -0
- package/dist/edgeplane.js +305 -0
- package/dist/examplelocaljob.d.ts +1 -0
- package/{docs/example-localjob.ts → dist/examplelocaljob.js} +0 -1
- package/dist/execution.d.ts +529 -0
- package/dist/execution.js +760 -0
- package/dist/family.d.ts +16 -0
- package/dist/family.js +42 -0
- package/dist/familyurl.d.ts +21 -0
- package/dist/familyurl.js +24 -0
- package/dist/format.d.ts +18 -0
- package/dist/format.js +59 -0
- package/dist/foundation.d.ts +172 -0
- package/dist/foundation.js +312 -0
- package/dist/index.d.ts +735 -0
- package/dist/index.js +1020 -0
- package/dist/integration.d.ts +235 -0
- package/dist/integration.js +228 -0
- package/dist/intelligence.d.ts +93 -0
- package/dist/intelligence.js +144 -0
- package/dist/isolation.d.ts +128 -0
- package/dist/isolation.js +95 -0
- package/dist/labels.d.ts +665 -0
- package/dist/labels.js +751 -0
- package/dist/localauth.d.ts +127 -0
- package/dist/localauth.js +413 -0
- package/dist/media.d.ts +343 -0
- package/dist/media.js +985 -0
- package/dist/mesh.d.ts +177 -0
- package/dist/mesh.js +468 -0
- package/dist/modalityregistry.d.ts +109 -0
- package/dist/modalityregistry.js +1386 -0
- package/dist/modes.d.ts +358 -0
- package/dist/modes.js +133 -0
- package/dist/onboardingstate.d.ts +79 -0
- package/dist/onboardingstate.js +282 -0
- package/dist/orchestrator.d.ts +1338 -0
- package/dist/orchestrator.js +4310 -0
- package/dist/packager/targetcli.js +4 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.js +14 -0
- package/dist/performance.d.ts +415 -0
- package/dist/performance.js +826 -0
- package/dist/quantum.d.ts +809 -0
- package/dist/quantum.js +2072 -0
- package/dist/render.d.ts +380 -0
- package/dist/render.js +1072 -0
- package/dist/runall.d.ts +2 -0
- package/dist/runall.js +39 -0
- package/dist/runtimeprobe.d.ts +4 -0
- package/dist/runtimeprobe.js +8 -0
- package/dist/sandbox.d.ts +355 -0
- package/dist/sandbox.js +1721 -0
- package/dist/sandboxenvprofile.d.ts +29 -0
- package/dist/sandboxenvprofile.js +89 -0
- package/dist/sandboxprofile.d.ts +137 -0
- package/dist/sandboxprofile.js +241 -0
- package/dist/sandboxqueue.d.ts +108 -0
- package/dist/sandboxqueue.js +201 -0
- package/dist/sandboxquota.d.ts +121 -0
- package/dist/sandboxquota.js +236 -0
- package/dist/scheduler.d.ts +595 -0
- package/dist/scheduler.js +1258 -0
- package/dist/scriptlanes.d.ts +182 -0
- package/dist/scriptlanes.js +660 -0
- package/dist/scripts.buildengine.d.ts +1 -0
- package/dist/scripts.buildengine.js +39 -0
- package/dist/scripts.securitygate.d.ts +1 -0
- package/dist/scripts.securitygate.js +68 -0
- package/dist/scripts.validateflatnative.d.ts +1 -0
- package/dist/scripts.validateflatnative.js +72 -0
- package/dist/security.d.ts +500 -0
- package/dist/security.js +1169 -0
- package/dist/seedcatalog.d.ts +13 -0
- package/dist/seedcatalog.js +46 -0
- package/dist/server.d.ts +20 -0
- package/dist/server.js +53 -0
- package/dist/speccatalog.d.ts +31 -0
- package/dist/speccatalog.js +163 -0
- package/dist/tiers.d.ts +1001 -0
- package/dist/tiers.js +2169 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.js +5 -0
- package/dist/vaulthandoff.d.ts +141 -0
- package/dist/vaulthandoff.js +444 -0
- package/dist/virtual.d.ts +640 -0
- package/dist/virtual.js +1284 -0
- package/dist/virtualcpu.d.ts +315 -0
- package/dist/virtualcpu.js +1180 -0
- package/dist/virtualgpu.d.ts +344 -0
- package/dist/virtualgpu.js +1000 -0
- package/dist/virtualization.d.ts +606 -0
- package/dist/virtualization.js +1186 -0
- package/dist/virtualmemory.d.ts +817 -0
- package/dist/virtualmemory.js +1795 -0
- package/dist/vite.config.d.ts +3 -0
- package/dist/vite.config.js +43 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +25 -0
- package/dist/webserver.d.ts +166 -0
- package/dist/webserver.js +2226 -0
- package/dist/workloadlaw.d.ts +133 -0
- package/dist/workloadlaw.js +193 -0
- package/docs/artifactavailability.md +2 -2
- package/docs/{containerplatforms-2.1.0.md → containerplatforms.2.1.0.md} +1 -1
- package/docs/{documentmap-1.8.12.md → documentmap.1.8.12.md} +1 -1
- package/docs/ninety.modalities.md +108 -0
- package/docs/planning.ninety.md +391 -0
- package/docs/{releasenotes-1.8.13.md → releasenotes.1.8.13.md} +2 -2
- package/docs/{releasenotes-1.8.14.md → releasenotes.1.8.14.md} +1 -1
- package/docs/{repo-synthesis-1.8.16.md → repo.synthesis.1.8.16.md} +1 -1
- package/docs/{todo-1.8.15.md → todo.1.8.15.md} +1 -1
- package/docs/{todo-1.8.16.md → todo.1.8.16.md} +5 -5
- package/docs/todo.md +2 -2
- package/docs/workloadlaw.md +104 -0
- package/index.ts +1 -1
- package/manifest.json +1 -1
- package/modalityregistry.ts +1371 -34
- package/orchestrator.ts +1 -1
- package/package.json +73 -33
- package/docs/CONVERSA.txt +0 -1523
- package/docs/architecture-1.8.19.png +0 -0
- package/docs/assets/architecture.svg +0 -45
- package/docs/assets/saddle-browser-trace.webp +0 -0
- package/docs/assets/saddle-hero-bridge.webp +0 -0
- package/docs/assets/saddle-mark.webp +0 -0
- package/docs/assets/saddle-runtime-map.webp +0 -0
- package/docs/assets/saddlemark.svg +0 -13
- package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
- /package/docs/{architecture-1.8.19.md → architecture.1.8.19.md} +0 -0
- /package/docs/{architecture-1.8.19.mmd → architecture.1.8.19.mmd} +0 -0
- /package/docs/{artifactresearch-1.8.9.md → artifactresearch.1.8.9.md} +0 -0
- /package/docs/{batches-1816-1820.md → batches.1816.to.1820.md} +0 -0
- /package/docs/{brancharchive-2026-08-18.md → brancharchive.2026.08.18.md} +0 -0
- /package/docs/{containerplatforms-1.8.17.md → containerplatforms.1.8.17.md} +0 -0
- /package/docs/{e2ugh-engine.md → e2ugh.engine.md} +0 -0
- /package/docs/{flatbuildresearch-1.8.11.md → flatbuildresearch.1.8.11.md} +0 -0
- /package/docs/{licenseaudit-1.8.12.md → licenseaudit.1.8.12.md} +0 -0
- /package/docs/{mobileconversionresearch-1.8.10.md → mobileconversionresearch.1.8.10.md} +0 -0
- /package/docs/{native-wrappers.md → native.wrappers.md} +0 -0
- /package/docs/{nativeidentityresearch-1.8.11.md → nativeidentityresearch.1.8.11.md} +0 -0
- /package/docs/{releasenotes-1.8.12.md → releasenotes.1.8.12.md} +0 -0
- /package/docs/{releasenotes-1.8.15.md → releasenotes.1.8.15.md} +0 -0
- /package/docs/{releasenotes-1.8.16.md → releasenotes.1.8.16.md} +0 -0
- /package/docs/{releasenotes-1.8.17.md → releasenotes.1.8.17.md} +0 -0
- /package/docs/{releasenotes-1.8.18.md → releasenotes.1.8.18.md} +0 -0
- /package/docs/{releasenotes-1.8.19.md → releasenotes.1.8.19.md} +0 -0
- /package/docs/{reorganization-1.8.8.md → reorganization.1.8.8.md} +0 -0
- /package/docs/{reorganization-1.8.9.md → reorganization.1.8.9.md} +0 -0
- /package/docs/{repo-analysis-1.8.21.json → repo.analysis.1.8.21.json} +0 -0
- /package/docs/{repo-candidates-1.8.21.jsonl → repo.candidates.1.8.21.jsonl} +0 -0
- /package/docs/{repo-research-1.8.16.md → repo.research.1.8.16.md} +0 -0
- /package/docs/{repo-research-1.8.21.md → repo.research.1.8.21.md} +0 -0
- /package/docs/{repo-selected-1.8.21.json → repo.selected.1.8.21.json} +0 -0
- /package/docs/{repo-synthesis-1.8.21.md → repo.synthesis.1.8.21.md} +0 -0
- /package/docs/{research-1.8.18-isolation.md → research.1.8.18.isolation.md} +0 -0
- /package/docs/{research-1.8.19-virtual-browser.md → research.1.8.19.virtual.browser.md} +0 -0
- /package/docs/{scanningresearch-1.8.11.md → scanningresearch.1.8.11.md} +0 -0
- /package/docs/{securityaudit-1.8.7.md → securityaudit.1.8.7.md} +0 -0
- /package/docs/{securityreferences-1.8.11.md → securityreferences.1.8.11.md} +0 -0
- /package/docs/{securityresearch-1.8.11.md → securityresearch.1.8.11.md} +0 -0
- /package/docs/{signingresearch-1.8.12.md → signingresearch.1.8.12.md} +0 -0
- /package/docs/{tauri-glib-risk-1.8.11.md → tauri.glib.risk.1.8.11.md} +0 -0
- /package/docs/{todo-1.8.18.md → todo.1.8.18.md} +0 -0
- /package/docs/{todo-1.8.19.md → todo.1.8.19.md} +0 -0
- /package/docs/{toolchainresearch-1.8.9.md → toolchainresearch.1.8.9.md} +0 -0
- /package/docs/{web-duplicatecleanup.md → web.duplicatecleanup.md} +0 -0
- /package/docs/{web-ideas.md → web.ideas.md} +0 -0
- /package/docs/{workflowimprovements-2026-08-19.md → workflowimprovements.2026.08.19.md} +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { type ModalityRecord } from "./modalityregistry.ts";
|
|
2
|
+
/** The demand one workload lane puts on the sandbox — the join vocabulary
|
|
3
|
+
* the resolver reads (never a modality name: the nuclear law). */
|
|
4
|
+
export type WorkloadDemand = {
|
|
5
|
+
/** Whether the lane's pass needs a gpu path through the virtual drivers. */
|
|
6
|
+
gpu: boolean;
|
|
7
|
+
/** Whether the lane's pass needs a network path. */
|
|
8
|
+
network: boolean;
|
|
9
|
+
/** The isolation depth the lane demands at minimum. */
|
|
10
|
+
isolation: ModalityRecord["isolation"];
|
|
11
|
+
/** The boot budget the lane tolerates, in milliseconds (defaults to the
|
|
12
|
+
* cold ceiling of the ladder when absent). */
|
|
13
|
+
bootbudget?: number;
|
|
14
|
+
};
|
|
15
|
+
/** Where the heavy pass of the lane runs today — the honest truth the
|
|
16
|
+
* report reads beside the join verdict. */
|
|
17
|
+
export type LaneToday = "engine-lane" | "app-lane";
|
|
18
|
+
/** One workload lane of the family catalog: the app that owns the lane,
|
|
19
|
+
* the lane's stable id, the role sentence, the demand and the honest
|
|
20
|
+
* today. */
|
|
21
|
+
export type WorkloadLane = {
|
|
22
|
+
/** The official app slug that owns the lane. */
|
|
23
|
+
app: string;
|
|
24
|
+
/** The lane id inside the app (kebab-case, unique per app). */
|
|
25
|
+
lane: string;
|
|
26
|
+
/** What the lane does, in one sentence. */
|
|
27
|
+
role: string;
|
|
28
|
+
/** The demand the lane puts on the sandbox. */
|
|
29
|
+
demand: WorkloadDemand;
|
|
30
|
+
/** Where the heavy pass runs today (the honest truth). */
|
|
31
|
+
today: LaneToday;
|
|
32
|
+
};
|
|
33
|
+
/** The join verdict of one lane: computed from the registry, never
|
|
34
|
+
* declared by hand. */
|
|
35
|
+
export type LaneVerdict = "dispatchable" | "planned-only" | "unresolved";
|
|
36
|
+
/** One answered join: the lane row, the verdict and the candidate records
|
|
37
|
+
* the resolver answered (best candidate first). */
|
|
38
|
+
export type LaneJoin = {
|
|
39
|
+
/** The lane row the join answered. */
|
|
40
|
+
lane: WorkloadLane;
|
|
41
|
+
/** The honest verdict computed from the registry. */
|
|
42
|
+
verdict: LaneVerdict;
|
|
43
|
+
/** The modality records that satisfy the demand, best first. */
|
|
44
|
+
candidates: readonly ModalityRecord[];
|
|
45
|
+
/** How many candidates the registry already drives live. */
|
|
46
|
+
livecount: number;
|
|
47
|
+
};
|
|
48
|
+
/** The family workload lane catalog: the lanes of the eleven official
|
|
49
|
+
* apps, walked from the analysis waves (A1) that mapped every app's heavy
|
|
50
|
+
* passes. The rows carry demands and honest todays — never modality ids:
|
|
51
|
+
* the join computes the answer from the registry of record. */
|
|
52
|
+
export declare const FAMILYLANES: readonly WorkloadLane[];
|
|
53
|
+
/** The official app slugs the catalog covers — the lockstep vocabulary the
|
|
54
|
+
* ownership manifest of the os answers (every official app owns at least
|
|
55
|
+
* one workload lane here). */
|
|
56
|
+
export declare const CATALOGAPPS: readonly string[];
|
|
57
|
+
/** Answers the workload lanes one app owns.
|
|
58
|
+
*
|
|
59
|
+
* @param app the official app slug.
|
|
60
|
+
* @returns the lane rows of the app, catalog order.
|
|
61
|
+
*/
|
|
62
|
+
export declare function lanesof(app: string): readonly WorkloadLane[];
|
|
63
|
+
/** Answers one lane row by app and lane id.
|
|
64
|
+
*
|
|
65
|
+
* @param app the official app slug.
|
|
66
|
+
* @param lane the lane id inside the app.
|
|
67
|
+
* @returns the lane row, or undefined when the catalog carries no such
|
|
68
|
+
* lane.
|
|
69
|
+
*/
|
|
70
|
+
export declare function getlane(app: string, lane: string): WorkloadLane | undefined;
|
|
71
|
+
/** Joins one lane row against the registry of record: the nuclear law
|
|
72
|
+
* made executable — the demand rides the join resolver, the candidates
|
|
73
|
+
* answer best-first and the verdict is computed, never declared.
|
|
74
|
+
*
|
|
75
|
+
* @param row the lane row to join.
|
|
76
|
+
* @returns the answered join: the row, the verdict and the candidates.
|
|
77
|
+
*/
|
|
78
|
+
export declare function lanejoin(row: WorkloadLane): LaneJoin;
|
|
79
|
+
/** Joins one lane of one app by id — the surface the api route and the
|
|
80
|
+
* app mirrors read.
|
|
81
|
+
*
|
|
82
|
+
* @param app the official app slug.
|
|
83
|
+
* @param lane the lane id inside the app.
|
|
84
|
+
* @returns the answered join, or undefined when the catalog carries no
|
|
85
|
+
* such lane.
|
|
86
|
+
*/
|
|
87
|
+
export declare function familyjoin(app: string, lane: string): LaneJoin | undefined;
|
|
88
|
+
/** One app's workload answer: the lanes, the joins and the honest counts. */
|
|
89
|
+
export type AppWorkloadReport = {
|
|
90
|
+
/** The official app slug. */
|
|
91
|
+
app: string;
|
|
92
|
+
/** The lane count the app owns. */
|
|
93
|
+
lanes: number;
|
|
94
|
+
/** The lanes whose join answered at least one live modality. */
|
|
95
|
+
dispatchable: number;
|
|
96
|
+
/** The lanes whose join answered only planned records. */
|
|
97
|
+
plannedonly: number;
|
|
98
|
+
/** The lanes whose join answered nothing (a calibration defect). */
|
|
99
|
+
unresolved: number;
|
|
100
|
+
/** The lanes whose heavy pass still walks the app surface. */
|
|
101
|
+
applane: number;
|
|
102
|
+
/** The lanes whose heavy pass already walks an engine surface. */
|
|
103
|
+
enginelane: number;
|
|
104
|
+
/** The per-lane joins, catalog order. */
|
|
105
|
+
joins: readonly LaneJoin[];
|
|
106
|
+
};
|
|
107
|
+
/** The family workload report: the honest census of every app's lanes
|
|
108
|
+
* against the registry of record — the work order the next waves read.
|
|
109
|
+
* */
|
|
110
|
+
export type FamilyWorkloadReport = {
|
|
111
|
+
/** The official app count the catalog covers. */
|
|
112
|
+
apps: number;
|
|
113
|
+
/** The total lane count of the catalog. */
|
|
114
|
+
lanes: number;
|
|
115
|
+
/** The lanes whose join answered at least one live modality. */
|
|
116
|
+
dispatchable: number;
|
|
117
|
+
/** The lanes whose join answered only planned records (the gpu waits). */
|
|
118
|
+
plannedonly: number;
|
|
119
|
+
/** The lanes whose join answered nothing. */
|
|
120
|
+
unresolved: number;
|
|
121
|
+
/** The lanes whose heavy pass still walks the app surface — the honest
|
|
122
|
+
* migration list the next waves work through. */
|
|
123
|
+
applanemigration: number;
|
|
124
|
+
/** The per-app reports, catalog order. */
|
|
125
|
+
perapp: readonly AppWorkloadReport[];
|
|
126
|
+
};
|
|
127
|
+
/** Computes the honest family workload report from the catalog and the
|
|
128
|
+
* registry — every count derived, nothing hardcoded, so the report can
|
|
129
|
+
* never drift from either surface.
|
|
130
|
+
*
|
|
131
|
+
* @returns the family census of the workload law.
|
|
132
|
+
*/
|
|
133
|
+
export declare function workloadreport(): FamilyWorkloadReport;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// # workloadlaw — the family workload lane catalog and the join law of the
|
|
2
|
+
// engine (root layer, wave WL1). One row per heavy workload lane of every
|
|
3
|
+
// official app of the family: the app that owns the lane, the lane's name,
|
|
4
|
+
// the demand the lane puts on the sandbox (gpu, network, isolation depth,
|
|
5
|
+
// boot budget) and where the lane runs today. The law this module answers
|
|
6
|
+
// is the owner's nuclear modality law made executable for the whole
|
|
7
|
+
// family: the workload never chooses a modality by name — the join
|
|
8
|
+
// resolver reads the demand and answers the modality set that satisfies
|
|
9
|
+
// it, so the person chooses none and the platform resolves the join of
|
|
10
|
+
// all. Every lane row carries a demand and never a modality id: the
|
|
11
|
+
// candidates are always computed from the registry of record
|
|
12
|
+
// (modalityregistry.ts), so the answer can never drift from the catalog
|
|
13
|
+
// and a modality that turns live tomorrow answers the same lane without
|
|
14
|
+
// this file moving.
|
|
15
|
+
//
|
|
16
|
+
// The honest today fields: one row declares `today: "engine-lane"` when the
|
|
17
|
+
// heavy pass already runs on a server-side engine surface of the family
|
|
18
|
+
// (the os sandbox lane, the edge plane dispatcher, the app gateways the
|
|
19
|
+
// deploys serve), and `today: "app-lane"` when the heavy pass still walks
|
|
20
|
+
// inside the app surface (the seeded rehearsals, the browser fallbacks the
|
|
21
|
+
// catalog laws keep naming). The report reads both truths beside the join
|
|
22
|
+
// verdict — a lane that resolves dispatchable and still walks app-lane is
|
|
23
|
+
// the next wave's work order, named honestly instead of hidden. The join
|
|
24
|
+
// verdict itself answers from the registry alone: "dispatchable" when at
|
|
25
|
+
// least one live modality satisfies the demand, "planned-only" when only
|
|
26
|
+
// planned records do (the gpu lanes ride here today and say so), and
|
|
27
|
+
// "unresolved" when the demand fits nothing — a calibration defect the
|
|
28
|
+
// battery refuses.
|
|
29
|
+
//
|
|
30
|
+
// Pure data and pure functions: zero storage, zero node-only imports, the
|
|
31
|
+
// browser-pure bundle keeps carrying it, exactly the registry law.
|
|
32
|
+
import { resolvejoin } from "./modalityregistry.ts";
|
|
33
|
+
/** The family workload lane catalog: the lanes of the eleven official
|
|
34
|
+
* apps, walked from the analysis waves (A1) that mapped every app's heavy
|
|
35
|
+
* passes. The rows carry demands and honest todays — never modality ids:
|
|
36
|
+
* the join computes the answer from the registry of record. */
|
|
37
|
+
export const FAMILYLANES = Object.freeze([
|
|
38
|
+
// the argan lanes: the dns engine's heavy passes
|
|
39
|
+
{ app: "argan", lane: "dnssec-validate", role: "the dnssec chain validation walk: rrsig parsing, key tag checksums, validity windows and ds match rules over untrusted input", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
40
|
+
{ app: "argan", lane: "zonefile-parse-diff", role: "the master file parse and the external-dns diff: tokenizer, normalization, creates/deletes/updates by group", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
41
|
+
{ app: "argan", lane: "catalog-registry-serve", role: "the registry tables the catalog serves: mime types, protocols and seed rows over https and db, never the browser fallback", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "app-lane" },
|
|
42
|
+
{ app: "argan", lane: "label-store-seed", role: "the label manifest seed into the store: the upsert walk that protects translated rows, mirrored server-side", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
43
|
+
// the cadria lanes: the versawaze engine's generation passes
|
|
44
|
+
{ app: "cadria", lane: "analyze-wav", role: "the audio analysis pipeline: decode, downmix, resample, stft and the spectrum, rhythm, tonality, timbre and structure fusion", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
45
|
+
{ app: "cadria", lane: "generate-image", role: "the image generation walk: palette, composition blocks, rhythm scatter, texture and motion into the deterministic project", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
46
|
+
{ app: "cadria", lane: "render-svg", role: "the svg render of the image project: draw command compilation and the byte-deterministic serialization", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
47
|
+
{ app: "cadria", lane: "decode-video", role: "the frame-accurate video decode lane: the container-namespace pass the codec walk rides, never the visitor decoder", demand: { gpu: false, network: false, isolation: "namespace", bootbudget: 800 }, today: "app-lane" },
|
|
48
|
+
{ app: "cadria", lane: "compile-shader", role: "the shader program assembly: the fragment library, the deterministic manifest and the sha digest, no visitor gpu ever compiles", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
49
|
+
// the cobaia lanes: the monetization surface's light walks
|
|
50
|
+
{ app: "cobaia", lane: "plan-checkout", role: "the plan checkout surface: mrr plan rows, link validation and the billing webhook walk when it lands, secrets server-side", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
51
|
+
{ app: "cobaia", lane: "ads-slot", role: "the honest ad slot lane: the reserved slots and the rotation decision the deploy answers before the render", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
52
|
+
{ app: "cobaia", lane: "label-seed", role: "the label manifest seed of the monetization face: the store walk the sqlite vault carries", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
53
|
+
// the debonair lanes: the kathesis engine's audio walks
|
|
54
|
+
{ app: "debonair", lane: "ingest-audio", role: "the ingest worker: the stream separation, the pcm downmix and the payload json the reconstruction reads", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
55
|
+
{ app: "debonair", lane: "render-track", role: "the render worker: the composed plan render, the mastering chain and the wav encode into the take store", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
56
|
+
// the forge lanes: the execution clone's run walks
|
|
57
|
+
{ app: "forge", lane: "binary-run", role: "the binary run lane: the runner the saddle engine answers for the fleet, the mode gate resolving through the join", demand: { gpu: false, network: true, isolation: "namespace", bootbudget: 800 }, today: "app-lane" },
|
|
58
|
+
{ app: "forge", lane: "queue-priority", role: " the run queue walk: express, normal and batch ordering over the queue the lane serves", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
59
|
+
// the foundry lanes: the pipeline clone's graph walks
|
|
60
|
+
{ app: "foundry", lane: "pipeline-graph", role: "the pipeline graph lane: provision, pull, run, collect and store — the plan walk the herd drives", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
61
|
+
{ app: "foundry", lane: "image-artifact", role: "the image artifact lane: the format plans, the checksum seals and the shelf records the vault stores", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
62
|
+
// the getry lanes: the ai gateway's inference walks
|
|
63
|
+
{ app: "getry", lane: "inference-route", role: "the inference route lane: the provider pool, the sse parse and the model masking over the upstream calls", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
64
|
+
{ app: "getry", lane: "stream-fallback", role: "the resilience runner: the verdict ladder, the backoff walk and the trail the retry lane keeps", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
65
|
+
{ app: "getry", lane: "thinking-ladder", role: "the seven-level reasoning ladder: the budget resolution the request injects before the upstream call", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
66
|
+
{ app: "getry", lane: "router-rotation", role: "the rotation lane: the weighted draw, the cooldown ledger and the session rows the store keeps", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
67
|
+
// the saddle lanes: the engine's own dispatch surface
|
|
68
|
+
{ app: "saddle", lane: "edge-dispatch", role: "the edge plane dispatch itself: the visitor guard, the lane resolution and the artifact commit through the vault seam", demand: { gpu: false, network: true, isolation: "process", bootbudget: 1500 }, today: "engine-lane" },
|
|
69
|
+
// the stealthhead lanes: the fps platform's simulation walks
|
|
70
|
+
{ app: "stealthhead", lane: "match-simulate", role: "the authoritative match simulation: the fixed-step physics, the reconcile and rewind twin and the seeded spawns", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
71
|
+
{ app: "stealthhead", lane: "rank-compute", role: "the ranking walk: the elo ladder, the season batch and the position assignment over the standing rows", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "app-lane" },
|
|
72
|
+
{ app: "stealthhead", lane: "world-bake", role: "the world pre-compilation: the map bake through the render engine — the gpu pass the planned modalities answer", demand: { gpu: true, network: true, isolation: "vm", bootbudget: 1500 }, today: "app-lane" },
|
|
73
|
+
{ app: "stealthhead", lane: "ballistics-balance", role: "the armory balance sweep: falloff, shots-to-kill and ttk validation, offline and deterministic", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "app-lane" },
|
|
74
|
+
// the vault lanes: the storage engine's object walks
|
|
75
|
+
{ app: "vault", lane: "blob-ingest", role: "the object deposit lane: path and mime validation, the quota gate inside the write transaction and the detach walk", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
76
|
+
{ app: "vault", lane: "chunk-window", role: "the chunk window lane: the fixed slicing, the per-window digest and the brotli decision over the byte stream", demand: { gpu: false, network: false, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
77
|
+
{ app: "vault", lane: "digest-sha256", role: "the digest engine: the sha-256 master and chunk walks and the full re-verification the read path answers", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
78
|
+
{ app: "vault", lane: "ref-gc", role: "the reference gc lane: the soft-delete tombstones, the ref detach and the orphan sweep the store drives", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
79
|
+
// the devthink lanes: the os envelope's command walks
|
|
80
|
+
{ app: "devthink", lane: "chat-sandbox", role: "the chat sandbox lane: the session jail, the tool surface and the exec walks the engine dispatches server-side", demand: { gpu: false, network: true, isolation: "namespace", bootbudget: 1500 }, today: "engine-lane" },
|
|
81
|
+
{ app: "devthink", lane: "llm-gateway", role: "the universal gateway pipeline: model resolution, auth, body building, retry and the streaming byte passthrough", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
82
|
+
{ app: "devthink", lane: "stream-parse", role: "the streaming parser: the tolerant sse walk, the payload normalization and the delta tracking over the live stream", demand: { gpu: false, network: true, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
83
|
+
{ app: "devthink", lane: "graph-run", role: "the graph runner: the deterministic stage walk, the retry ladder and the progress views the console draws", demand: { gpu: false, network: false, isolation: "process", bootbudget: 25 }, today: "engine-lane" },
|
|
84
|
+
{ app: "devthink", lane: "mcp-serve", role: "the mcp registry lane: the tool catalog, the approval gates and the transports the server answers", demand: { gpu: false, network: true, isolation: "process", bootbudget: 800 }, today: "engine-lane" },
|
|
85
|
+
]);
|
|
86
|
+
/** The official app slugs the catalog covers — the lockstep vocabulary the
|
|
87
|
+
* ownership manifest of the os answers (every official app owns at least
|
|
88
|
+
* one workload lane here). */
|
|
89
|
+
export const CATALOGAPPS = Object.freeze([
|
|
90
|
+
"argan",
|
|
91
|
+
"cadria",
|
|
92
|
+
"cobaia",
|
|
93
|
+
"debonair",
|
|
94
|
+
"devthink",
|
|
95
|
+
"forge",
|
|
96
|
+
"foundry",
|
|
97
|
+
"getry",
|
|
98
|
+
"saddle",
|
|
99
|
+
"stealthhead",
|
|
100
|
+
"vault",
|
|
101
|
+
]);
|
|
102
|
+
/** Answers the workload lanes one app owns.
|
|
103
|
+
*
|
|
104
|
+
* @param app the official app slug.
|
|
105
|
+
* @returns the lane rows of the app, catalog order.
|
|
106
|
+
*/
|
|
107
|
+
export function lanesof(app) {
|
|
108
|
+
return FAMILYLANES.filter((row) => row.app === app);
|
|
109
|
+
}
|
|
110
|
+
/** Answers one lane row by app and lane id.
|
|
111
|
+
*
|
|
112
|
+
* @param app the official app slug.
|
|
113
|
+
* @param lane the lane id inside the app.
|
|
114
|
+
* @returns the lane row, or undefined when the catalog carries no such
|
|
115
|
+
* lane.
|
|
116
|
+
*/
|
|
117
|
+
export function getlane(app, lane) {
|
|
118
|
+
return FAMILYLANES.find((row) => row.app === app && row.lane === lane);
|
|
119
|
+
}
|
|
120
|
+
/** Joins one lane row against the registry of record: the nuclear law
|
|
121
|
+
* made executable — the demand rides the join resolver, the candidates
|
|
122
|
+
* answer best-first and the verdict is computed, never declared.
|
|
123
|
+
*
|
|
124
|
+
* @param row the lane row to join.
|
|
125
|
+
* @returns the answered join: the row, the verdict and the candidates.
|
|
126
|
+
*/
|
|
127
|
+
export function lanejoin(row) {
|
|
128
|
+
const candidates = resolvejoin({
|
|
129
|
+
base: "max",
|
|
130
|
+
gpu: row.demand.gpu,
|
|
131
|
+
network: row.demand.network,
|
|
132
|
+
isolation: row.demand.isolation,
|
|
133
|
+
bootbudget: row.demand.bootbudget,
|
|
134
|
+
});
|
|
135
|
+
const livecount = candidates.filter((modality) => modality.state === "live").length;
|
|
136
|
+
const verdict = livecount > 0 ? "dispatchable" : candidates.length > 0 ? "planned-only" : "unresolved";
|
|
137
|
+
return { lane: row, verdict, candidates, livecount };
|
|
138
|
+
}
|
|
139
|
+
/** Joins one lane of one app by id — the surface the api route and the
|
|
140
|
+
* app mirrors read.
|
|
141
|
+
*
|
|
142
|
+
* @param app the official app slug.
|
|
143
|
+
* @param lane the lane id inside the app.
|
|
144
|
+
* @returns the answered join, or undefined when the catalog carries no
|
|
145
|
+
* such lane.
|
|
146
|
+
*/
|
|
147
|
+
export function familyjoin(app, lane) {
|
|
148
|
+
const row = getlane(app, lane);
|
|
149
|
+
return row === undefined ? undefined : lanejoin(row);
|
|
150
|
+
}
|
|
151
|
+
/** Computes the honest family workload report from the catalog and the
|
|
152
|
+
* registry — every count derived, nothing hardcoded, so the report can
|
|
153
|
+
* never drift from either surface.
|
|
154
|
+
*
|
|
155
|
+
* @returns the family census of the workload law.
|
|
156
|
+
*/
|
|
157
|
+
export function workloadreport() {
|
|
158
|
+
const perapp = [];
|
|
159
|
+
let dispatchable = 0;
|
|
160
|
+
let plannedonly = 0;
|
|
161
|
+
let unresolved = 0;
|
|
162
|
+
let applanemigration = 0;
|
|
163
|
+
for (const app of CATALOGAPPS) {
|
|
164
|
+
const joins = lanesof(app).map(lanejoin);
|
|
165
|
+
const dispatchablecount = joins.filter((join) => join.verdict === "dispatchable").length;
|
|
166
|
+
const plannedonlycount = joins.filter((join) => join.verdict === "planned-only").length;
|
|
167
|
+
const unresolvedcount = joins.filter((join) => join.verdict === "unresolved").length;
|
|
168
|
+
const applanecount = joins.filter((join) => join.lane.today === "app-lane").length;
|
|
169
|
+
dispatchable += dispatchablecount;
|
|
170
|
+
plannedonly += plannedonlycount;
|
|
171
|
+
unresolved += unresolvedcount;
|
|
172
|
+
applanemigration += applanecount;
|
|
173
|
+
perapp.push({
|
|
174
|
+
app,
|
|
175
|
+
lanes: joins.length,
|
|
176
|
+
dispatchable: dispatchablecount,
|
|
177
|
+
plannedonly: plannedonlycount,
|
|
178
|
+
unresolved: unresolvedcount,
|
|
179
|
+
applane: applanecount,
|
|
180
|
+
enginelane: joins.length - applanecount,
|
|
181
|
+
joins,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
apps: CATALOGAPPS.length,
|
|
186
|
+
lanes: FAMILYLANES.length,
|
|
187
|
+
dispatchable,
|
|
188
|
+
plannedonly,
|
|
189
|
+
unresolved,
|
|
190
|
+
applanemigration,
|
|
191
|
+
perapp,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
@@ -141,7 +141,7 @@ The available metadata files are `manifest.android.1.8.15.json`, `manifest.conta
|
|
|
141
141
|
|
|
142
142
|
## 1.8.16 verified release matrix
|
|
143
143
|
|
|
144
|
-
The published [v1.8.16 release](https://github.com/wenathlan/saddle/releases/tag/v1.8.16) contains 38 attached assets: six Linux desktop artifacts, six Windows desktop artifacts, four macOS desktop artifacts, two Android artifacts, one container archive, one browser extension, nine manifests, and nine checksum files. The asset names match the matrix in [releasenotes
|
|
144
|
+
The published [v1.8.16 release](https://github.com/wenathlan/saddle/releases/tag/v1.8.16) contains 38 attached assets: six Linux desktop artifacts, six Windows desktop artifacts, four macOS desktop artifacts, two Android artifacts, one container archive, one browser extension, nine manifests, and nine checksum files. The asset names match the matrix in [releasenotes.1.8.16.md](releasenotes.1.8.16.md).
|
|
145
145
|
|
|
146
146
|
The release-event Android workflow stopped because production signing secrets were not configured. The separately successful manual Android run `31839378707` used the workflow's explicit `ci-test-key` option and attached the APK, AAB, checksum, and manifest. No iOS artifact is claimed because Apple signing, provisioning, and export credentials were not configured. Desktop artifacts remain `unsigned`, the container manifest remains `caller-owned`, and no result is represented as production signing, notarization, registry trust, SBOM validation, or vulnerability status without its own evidence.
|
|
147
147
|
|
|
@@ -151,7 +151,7 @@ The release-evidence API can normalize and evaluate results supplied by complete
|
|
|
151
151
|
|
|
152
152
|
The 1.8.17 candidate keeps the established release asset contract while expanding the GHCR image index to `linux/amd64`, `linux/arm64`, and `linux/ppc64le`. The workflow must inspect the pushed index before this document treats those platform variants as available. The attached `saddle.container.1.8.17.tar.gz` remains one archive artifact and is not evidence of a Windows container variant.
|
|
153
153
|
|
|
154
|
-
`windows/amd64`, `linux/arm/v7`, and `linux/386` are not claimed by this candidate. A Windows image requires its own versioned Windows base, Dockerfile, runner, and compatibility validation; the existing Debian Linux Dockerfile cannot produce it by adding a platform string. `unknown` descriptors are not runnable targets. The platform decision and evidence limits are detailed in [containerplatforms
|
|
154
|
+
`windows/amd64`, `linux/arm/v7`, and `linux/386` are not claimed by this candidate. A Windows image requires its own versioned Windows base, Dockerfile, runner, and compatibility validation; the existing Debian Linux Dockerfile cannot produce it by adding a platform string. `unknown` descriptors are not runnable targets. The platform decision and evidence limits are detailed in [containerplatforms.1.8.17.md](containerplatforms.1.8.17.md).
|
|
155
155
|
|
|
156
156
|
## 1.8.17 verified container publication
|
|
157
157
|
|
|
@@ -8,7 +8,7 @@ from a three-platform Linux manifest index to the four-architecture family
|
|
|
8
8
|
surface: `linux/amd64`, `linux/arm64`, `linux/ppc64le`, and `linux/s390x`.
|
|
9
9
|
The selection unifies the container surfaces of the grand merge: the saddle
|
|
10
10
|
lineage shipped amd64/arm64/ppc64le (the 1.8.17 decision, see
|
|
11
|
-
[containerplatforms
|
|
11
|
+
[containerplatforms.1.8.17.md](containerplatforms.1.8.17.md)) and the e2ugh
|
|
12
12
|
lineage published all four architectures for the virtual-hardware engine
|
|
13
13
|
(`publish ghcr vhe`). One product, one registry, one architecture surface:
|
|
14
14
|
the s390x leg joins the node engine from the e2ugh side of the family.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Canonical root documents
|
|
4
4
|
|
|
5
|
-
Project policies, notices and contribution guidance remain at the repository root so package consumers and forge interfaces can discover them without entering `docs`. The canonical license is the extensionless `LICENSE` file containing the official unmodified GNU GPL v3.0 text. Human-readable project policies use one Markdown file per context: `acceptable
|
|
5
|
+
Project policies, notices and contribution guidance remain at the repository root so package consumers and forge interfaces can discover them without entering `docs`. The canonical license is the extensionless `LICENSE` file containing the official unmodified GNU GPL v3.0 text. Human-readable project policies use one Markdown file per context: `acceptable.use.policy.md`, `authors.md`, `bug.report.md`, `cla.md`, `code.of.conduct.md`, `contributing.md`, `copyright.md`, `disclaimer.md`, `eula.md`, `export.control.md`, `governance.md`, `notice.md`, `privacy.policy.md`, `pull.request.template.md`, `security.md`, `support.md`, `terms.and.conditions.md`, `terms.of.use.md`, `third.party.notices.md` and `trademark.policy.md`.
|
|
6
6
|
|
|
7
7
|
The public scope README remains `/home/ubuntu/upload/README.md` and was not modified. The repository's own `README.md` remains a public project document and can receive release or signing-policy updates separately from the immutable scope reference.
|
|
8
8
|
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# ninety.modalities — the wave record
|
|
2
|
+
|
|
3
|
+
the ninety modalities wave (branch waved/ninety.modalities): the saddle
|
|
4
|
+
plane answers the ninety modality plan the owner charged — every planned
|
|
5
|
+
lane of the registry wires an honest executor, every app of the family
|
|
6
|
+
declares the modality its workloads ride, and the report never lies.
|
|
7
|
+
|
|
8
|
+
## the state the wave found
|
|
9
|
+
|
|
10
|
+
the registry carried the ninety records with 30 live, 3 host and 57
|
|
11
|
+
planned — the catalog promised more than the lanes wired. the edge plane
|
|
12
|
+
drove 16 lanes (10 live, 6 host) and every app of the family named its
|
|
13
|
+
sandbox seat only through the debonair precedent (4 ids).
|
|
14
|
+
|
|
15
|
+
## the wiring the wave answered
|
|
16
|
+
|
|
17
|
+
- **edgelandes.host.ts** (group a, 25 lanes): the sandbox jails
|
|
18
|
+
(bubblewrap, nsjail, chroot with the fakechroot fallback and the
|
|
19
|
+
privilege gate), the container extensions (podman, containerd, runc,
|
|
20
|
+
crun, the docker max/lite/ghcr profiles), the runtimes (clr, workerd),
|
|
21
|
+
the screens (xvfb-run, the wayland compositor seat), the mobile
|
|
22
|
+
termux host, the builds (bazel, buck2, turborepo), the ci runners
|
|
23
|
+
(actions-runner, gitlab-runner with the exec-removed refusal), the
|
|
24
|
+
network tunnels (tor with the socks circuit, i2p, wireguard with the
|
|
25
|
+
keygen law) and the storage daemons (minio mc, garage). every lane
|
|
26
|
+
probes its binary, runs under the hard deadline in a private temp dir
|
|
27
|
+
and answers the coded absence when the host carries no runtime.
|
|
28
|
+
- **edgelandes.inproc.ts** (group b, 19 lanes): the ram recipes (tmpfs,
|
|
29
|
+
mmap, overlayfs, loopram, gitram, zram with the real stored-block
|
|
30
|
+
zlib stream, zswap with the lru pool, swapfile) behind the oom-guard
|
|
31
|
+
quota, the delivery protocols (the cdn mirror manifest, the rfc6455
|
|
32
|
+
wss frame, the quic datagram, the grpc length prefix, the capnp
|
|
33
|
+
segment), the storage wire speakers (libsql envelope, the mysql
|
|
34
|
+
handshake packet, the postgres startup message, the s3 canonical
|
|
35
|
+
signer), the webcontainer seat (the frozen module vm) and the
|
|
36
|
+
local-optin consent gate — pure ts, deterministic, in-process.
|
|
37
|
+
- **edgelandes.virtual.ts** (group c, 7 lanes): the virtual hardware
|
|
38
|
+
compositions riding the engine's own catalogs — the full machine, the
|
|
39
|
+
vgpu mig slice, the screen with the session otp, the driver surface,
|
|
40
|
+
the kvm plan (the qemu argv through the lazy virtualization domain —
|
|
41
|
+
the .js specifier graph loads inside the executor, never the boot),
|
|
42
|
+
the gpuless mesa render and the virgl context. every report says
|
|
43
|
+
composed, never booted.
|
|
44
|
+
- **edgelandes.ninety.ts** (the merge seat): the six heavyweight probes
|
|
45
|
+
(browser-server, mobile-capacitor, mobile-postmarketos, pod-session,
|
|
46
|
+
confidential-sevsnp, confidential-tdx) and the merged lane tables the
|
|
47
|
+
dispatch plane reads — 73 lanes in the plane, every one carrying its
|
|
48
|
+
executor, the wiring self-check refusing a gap at boot.
|
|
49
|
+
- **edgeplane.ts**: the lane table rides the merged specs, the dispatch
|
|
50
|
+
reads the merged executors, the visitor law guard holds on every run.
|
|
51
|
+
- **modalityregistry.ts**: the honest flips — 51 planned lanes walk to
|
|
52
|
+
live (the lanes the wave wired), 6 walk to host (the heavyweight
|
|
53
|
+
probes), zero stay planned. the census: **81 live, 9 host, 0 planned,
|
|
54
|
+
90 records.**
|
|
55
|
+
- **the app declarations** (group e): every app of the family names the
|
|
56
|
+
modality its workloads ride — argan (17), cadria (16), cobaia (8),
|
|
57
|
+
devthink (78, the full vocabulary), forge (40), foundry (20), getry
|
|
58
|
+
(13), stealthhead (12), vault (25) and the debonair seat widened 4 →
|
|
59
|
+
23 — every one through the env opt-in (APP_WORKER_MODALITY), the ids
|
|
60
|
+
mirrored as the string contract, zero imports, the visitor law stated
|
|
61
|
+
in every header.
|
|
62
|
+
- **the vendor mirror**: devthink/modalities.ts re-synced byte-identical
|
|
63
|
+
to the engine registry (the single-source law), the census pins of the
|
|
64
|
+
sandboxlane and e2e suites updated to the new truth.
|
|
65
|
+
|
|
66
|
+
## the verification the wave recorded
|
|
67
|
+
|
|
68
|
+
- saddle: 28 files / **414 tests green** (379 base + 35 lane tests)
|
|
69
|
+
- argan 69 · cadria 548 · cobaia 30 · debonair 730 · devthink 194 files /
|
|
70
|
+
3512 · forge 90 · foundry 78 · getry 86 · stealthhead 152 · vault 98
|
|
71
|
+
- family total: **5807 tests green** (5680 base + 127 of the wave)
|
|
72
|
+
- biome zero findings on every file the wave authored
|
|
73
|
+
- the live proof: the webserver answers /api/v1/modalities with
|
|
74
|
+
{plancount: 90, live: 81, host: 9, planned: 0} and /api/v1/edge/lanes
|
|
75
|
+
with the 73 probed lanes (61 live, 12 host)
|
|
76
|
+
|
|
77
|
+
## the reconciliation with the parallel waves
|
|
78
|
+
|
|
79
|
+
the rebase onto main met two waves that landed while this one worked:
|
|
80
|
+
#239 (the tests home — the tests folders pure inside every app) and
|
|
81
|
+
#240 (the workload law — every app declares its lanes through
|
|
82
|
+
sandboxmodality.ts, the family seat with the join resolver and the
|
|
83
|
+
api routes). the reconciliation honored the no-duplication law: this
|
|
84
|
+
wave dropped its own app declaration seats (the modality.ts files of
|
|
85
|
+
group e) in favor of the #240 family seat the main branch pinned, and
|
|
86
|
+
kept everything the parallel waves did not touch — the fifty-seven
|
|
87
|
+
lane wirings, the registry flips, the vendor mirror sync and the
|
|
88
|
+
census pins. the two census rows #240 charged against the planned-only
|
|
89
|
+
gpu wait (the workload battery and the web workloads lane) now answer
|
|
90
|
+
the post-wave truth: the gpu records this wave wired live make the
|
|
91
|
+
stealthhead world-bake dispatchable, the family census carries zero
|
|
92
|
+
planned-only lanes, and the batteries say so.
|
|
93
|
+
|
|
94
|
+
## the honest notes
|
|
95
|
+
|
|
96
|
+
- the host binary lanes of group a name runtimes this host does not
|
|
97
|
+
carry — the lanes answer HOST_RUNTIME_ABSENT naming the runtime (the
|
|
98
|
+
language-ruby precedent: live means the engine drives it when the
|
|
99
|
+
host provides the seat).
|
|
100
|
+
- the kvm lane loads the virtualization domain lazily inside the
|
|
101
|
+
executor: the webserver's plain node host resolves only .ts
|
|
102
|
+
specifiers and the domain re-exports virtualgpu through a .js
|
|
103
|
+
specifier — the family law (a domain the host cannot resolve degrades
|
|
104
|
+
that one lane, never the engine boot) now pins the pattern for every
|
|
105
|
+
future lane that reaches the .js graph.
|
|
106
|
+
- the six heavyweight lanes stay host (probe only): the execution
|
|
107
|
+
wiring of a confidential compute seat or a pod session is the next
|
|
108
|
+
rung, and the registry says so.
|