@cosmicdrift/kumiko-server-runtime 0.155.0 → 0.155.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-server-runtime",
3
- "version": "0.155.0",
3
+ "version": "0.155.1",
4
4
  "description": "Production server-boot runtime for Kumiko apps: connections, schema-drift-gate, seeds, lifecycle, graceful shutdown. Symmetric to kumiko-dev-server's runDevApp, without dev/scaffold/codegen tooling.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -72,8 +72,9 @@
72
72
  }
73
73
  },
74
74
  "dependencies": {
75
- "@cosmicdrift/kumiko-bundled-features": "0.155.0",
76
- "@cosmicdrift/kumiko-framework": "0.155.0"
75
+ "@cosmicdrift/kumiko-bundled-features": "0.155.1",
76
+ "@cosmicdrift/kumiko-framework": "0.155.1",
77
+ "temporal-polyfill": "^0.3.2"
77
78
  },
78
79
  "publishConfig": {
79
80
  "registry": "https://registry.npmjs.org",
@@ -44,6 +44,7 @@ import { existsSync, readdirSync } from "node:fs";
44
44
  import { cp, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
45
45
  import { tmpdir } from "node:os";
46
46
  import { join, resolve } from "node:path";
47
+ import { Temporal } from "temporal-polyfill";
47
48
  import { canResolveTailwindStylesheet, resolveTailwindCli } from "./resolve-tailwind-cli";
48
49
 
49
50
  // Bun-Runtime-Check als module-level Konstante: alle Build-Schritte
@@ -188,7 +189,7 @@ export async function buildProdBundle(options: BuildProdBundleOptions = {}): Pro
188
189
  // nicht stale). Bei Bedarf an Server-Versionierung koppeln.
189
190
  const buildInfo: BuildInfo | undefined =
190
191
  Object.keys(manifest).length > 0
191
- ? { id: computeBuildId(manifest), builtAt: new Date().toISOString() }
192
+ ? { id: computeBuildId(manifest), builtAt: Temporal.Now.instant().toString() }
192
193
  : undefined;
193
194
 
194
195
  // 6. HTML pro Entry rendern. Convention: ein HTML-File pro Client-Entry,
@@ -364,7 +365,9 @@ function resolveStylesheetEntry(
364
365
  // Laut failen statt ein 15KB-Image zu liefern, das in prod nackt rendert.
365
366
  // @internal — exportiert nur für Unit-Tests.
366
367
  export function assertRendererWebShellPresent(css: string, stylesheet: ResolvedStylesheet): void {
368
+ // skip: not the renderer-web fallback stylesheet, invariant doesn't apply
367
369
  if (!stylesheet.isRendererWebFallback) return;
370
+ // skip: shell sentinel class present, styles were scanned correctly
368
371
  if (css.includes(RENDERER_WEB_SHELL_SENTINEL)) return;
369
372
  throw new Error(
370
373
  `[kumiko build] renderer-web-Fallback-CSS ohne Shell-Klasse "${RENDERER_WEB_SHELL_SENTINEL}" — ` +
@@ -47,6 +47,7 @@ export function assertPiiBootInvariants(
47
47
  console.warn(
48
48
  `[${tag}] ${piiEntities.length} entities carry pii/userOwned/tenantOwned annotations but no \`kms\` adapter is configured — fields are stored in PLAINTEXT locally. Pass { kms: new InMemoryKmsAdapter() } (ephemeral DB) or createPgKmsAdapter(...) to exercise crypto-shredding in dev.`,
49
49
  );
50
+ // skip: dev mode, plaintext-PII warning already logged above
50
51
  return;
51
52
  }
52
53
  if (opts.allowPlaintextPii) {
@@ -54,6 +55,7 @@ export function assertPiiBootInvariants(
54
55
  console.warn(
55
56
  `[${tag}] ${piiEntities.length} entities carry PII annotations but no \`kms\` adapter is configured — fields are stored in PLAINTEXT (allowPlaintextPii: "${opts.allowPlaintextPii}"). GDPR erasure via crypto-shredding is NOT possible until a KMS is provisioned.`,
56
57
  );
58
+ // skip: operator explicitly acknowledged plaintext PII via allowPlaintextPii, warning already logged above
57
59
  return;
58
60
  }
59
61
  throw new Error(
@@ -1103,6 +1103,7 @@ export async function runProdApp(options: RunProdAppOptions): Promise<ProdAppHan
1103
1103
  // signals it shouldn't respond to.
1104
1104
  let shuttingDown = false;
1105
1105
  const shutdown = async (signal: string) => {
1106
+ // skip: shutdown already in progress, avoid double-drain
1106
1107
  if (shuttingDown) return;
1107
1108
  shuttingDown = true;
1108
1109
  // biome-ignore lint/suspicious/noConsole: boot-time progress hint, no logger configured this early