@bleedingdev/modern-js-create 3.2.0-ultramodern.40 → 3.2.0-ultramodern.42

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/dist/index.js CHANGED
@@ -4676,7 +4676,7 @@ function createTemplateManifest(modernVersion, packageSource) {
4676
4676
  'provenance-present'
4677
4677
  ],
4678
4678
  materializationValidation: [
4679
- 'path-boundary-allowlist',
4679
+ 'path-boundary-policy',
4680
4680
  'path-boundary-denylist',
4681
4681
  'no-path-traversal',
4682
4682
  'no-absolute-paths',
@@ -5138,6 +5138,7 @@ async function fetchText(url) {
5138
5138
  return {
5139
5139
  ok: response.ok,
5140
5140
  status: response.status,
5141
+ accessControlAllowOrigin: response.headers.get('access-control-allow-origin'),
5141
5142
  contentType: response.headers.get('content-type'),
5142
5143
  body: await response.text(),
5143
5144
  };
@@ -5246,6 +5247,16 @@ async function validateApp(app, publicUrl) {
5246
5247
  manifest.ok,
5247
5248
  \`\${app.id} MF manifest returned HTTP \${manifest.status}\`,
5248
5249
  );
5250
+ evidence.assertions.push({
5251
+ type: 'mf-manifest-cors',
5252
+ route: manifestRoute,
5253
+ actual: manifest.accessControlAllowOrigin,
5254
+ status: manifest.accessControlAllowOrigin === '*' ? 'pass' : 'fail',
5255
+ });
5256
+ assert(
5257
+ manifest.accessControlAllowOrigin === '*',
5258
+ \`\${app.id} MF manifest is missing Cloudflare CORS headers\`,
5259
+ );
5249
5260
 
5250
5261
  const localeRoute = routes.locale ?? \`/locales/en/\${app.i18n?.namespace}.json\`;
5251
5262
  const locale = await fetchText(joinUrl(publicUrl, localeRoute));
@@ -5263,6 +5274,16 @@ async function validateApp(app, publicUrl) {
5263
5274
  statusCode: locale.status,
5264
5275
  });
5265
5276
  assert(locale.ok, \`\${app.id} locale JSON returned HTTP \${locale.status}\`);
5277
+ evidence.assertions.push({
5278
+ type: 'i18n-cors',
5279
+ route: localeRoute,
5280
+ actual: locale.accessControlAllowOrigin,
5281
+ status: locale.accessControlAllowOrigin === '*' ? 'pass' : 'fail',
5282
+ });
5283
+ assert(
5284
+ locale.accessControlAllowOrigin === '*',
5285
+ \`\${app.id} locale JSON is missing Cloudflare CORS headers\`,
5286
+ );
5266
5287
  assert(
5267
5288
  localeJson && Object.hasOwn(localeJson, app.i18n?.namespace),
5268
5289
  \`\${app.id} locale JSON is missing namespace \${app.i18n?.namespace}\`,
@@ -5377,23 +5398,13 @@ function writeApp(targetDir, scope, app, packageSource, enableTailwind) {
5377
5398
  writeFile(targetDir, `${app.directory}/module-federation.config.ts`, 'shell' === app.kind ? createShellModuleFederationConfig() : createRemoteModuleFederationConfig(app));
5378
5399
  writeFile(targetDir, `${app.directory}/src/routes/layout.tsx`, createLayout(app.id));
5379
5400
  writeFile(targetDir, `${app.directory}/src/routes/[lang]/page.tsx`, 'shell' === app.kind ? createShellPage() : createRemotePage(app));
5380
- for (const route of createRouteOwnedI18nPaths(app)){
5381
- if ('/' === route.canonicalPath || 'shell' === app.kind) continue;
5382
- const routePaths = new Set([
5383
- route.canonicalPath,
5384
- ...Object.values(route.localisedPaths)
5385
- ]);
5386
- for (const routePath of routePaths)if ('/' !== routePath) writeFile(targetDir, createRoutePageFilePath(app, routePath), createRouteAliasPage(routePath));
5387
- }
5401
+ for (const route of createRouteOwnedI18nPaths(app))if ('/' !== route.canonicalPath && 'shell' !== app.kind) writeFile(targetDir, createRoutePageFilePath(app, route.canonicalPath), createRouteAliasPage(route.canonicalPath));
5388
5402
  if ('shell' === app.kind) {
5389
5403
  writeFile(targetDir, `${app.directory}/src/routes/remote-components.tsx`, createShellRemoteComponents());
5390
5404
  writeFile(targetDir, `${app.directory}/src/effect/recommendations-client.ts`, createShellEffectClient(scope));
5391
5405
  writeFile(targetDir, `${app.directory}/src/routes/[lang]/tractors/page.tsx`, createShellTractorsPage());
5392
- writeFile(targetDir, `${app.directory}/src/routes/[lang]/traktory/page.tsx`, createShellTractorsPage());
5393
5406
  writeFile(targetDir, `${app.directory}/src/routes/[lang]/tractors/[slug]/page.tsx`, createShellProductPage());
5394
- writeFile(targetDir, `${app.directory}/src/routes/[lang]/traktory/[slug]/page.tsx`, createShellProductPage());
5395
5407
  writeFile(targetDir, `${app.directory}/src/routes/[lang]/cart/page.tsx`, createShellCartPage());
5396
- writeFile(targetDir, `${app.directory}/src/routes/[lang]/kosik/page.tsx`, createShellCartPage());
5397
5408
  }
5398
5409
  if (appHasEffectApi(app)) {
5399
5410
  writeFile(targetDir, `${app.directory}/shared/effect/api.ts`, createEffectSharedApi(app));
package/package.json CHANGED
@@ -21,7 +21,7 @@
21
21
  "engines": {
22
22
  "node": ">=20"
23
23
  },
24
- "version": "3.2.0-ultramodern.40",
24
+ "version": "3.2.0-ultramodern.42",
25
25
  "types": "./dist/types/index.d.ts",
26
26
  "main": "./dist/index.js",
27
27
  "bin": {
@@ -41,7 +41,7 @@
41
41
  "@types/node": "^25.9.1",
42
42
  "@typescript/native-preview": "7.0.0-dev.20260527.2",
43
43
  "tsx": "^4.22.3",
44
- "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.2.0-ultramodern.40"
44
+ "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.2.0-ultramodern.42"
45
45
  },
46
46
  "publishConfig": {
47
47
  "registry": "https://registry.npmjs.org/",
@@ -54,6 +54,6 @@
54
54
  "start": "node ./dist/index.js"
55
55
  },
56
56
  "ultramodern": {
57
- "frameworkVersion": "3.2.0-ultramodern.40"
57
+ "frameworkVersion": "3.2.0-ultramodern.42"
58
58
  }
59
59
  }
@@ -36,7 +36,7 @@ ScriptedAlchemy/TechsioCZ skills are private and are cloned only when the curren
36
36
  pnpm skills:install
37
37
  ```
38
38
 
39
- The installer copies only the allowlisted private skills from `.agents/skills-lock.json`: `plan-graph`, `dag`, `subagent-graph`, `helm`, and `debugger-mode`.
39
+ The installer copies only the pinned private skills from `.agents/skills-lock.json`: `plan-graph`, `dag`, `subagent-graph`, `helm`, and `debugger-mode`.
40
40
 
41
41
  ## Agent Reference Repositories
42
42
 
@@ -58,4 +58,4 @@ Agents may read files under `repos/` to understand upstream patterns, APIs, and
58
58
 
59
59
  ## Skill Provenance
60
60
 
61
- The vendored Rstack skills, public Module Federation skill, and private TechsioCZ skill allowlist are pinned in `.agents/skills-lock.json`. Do not update, remove, or replace them casually. If a skill needs updating, update the lock file and run `pnpm check`.
61
+ The vendored Rstack skills, public Module Federation skill, and private TechsioCZ skill set are pinned in `.agents/skills-lock.json`. Do not update, remove, or replace them casually. If a skill needs updating, update the lock file and run `pnpm check`.
@@ -4,22 +4,7 @@ packages:
4
4
  - services/*
5
5
  - packages/*
6
6
 
7
- minimumReleaseAge: 1440
8
- minimumReleaseAgeStrict: true
9
- minimumReleaseAgeIgnoreMissingTime: false
10
- minimumReleaseAgeExclude:
11
- - '@modern-js/*'
12
- - '@bleedingdev/*'
13
- - '@effect/tsgo'
14
- - '@effect/tsgo-*'
15
- - '@typescript/native-preview'
16
- - '@typescript/native-preview-*'
17
- - '@cloudflare/*'
18
- - miniflare
19
- - workerd
20
- - wrangler
21
- trustPolicy: no-downgrade
22
- trustPolicyIgnoreAfter: 1440
7
+ minimumReleaseAge: 0
23
8
  blockExoticSubdeps: true
24
9
  engineStrict: true
25
10
  pmOnFail: error
@@ -244,30 +244,18 @@ assert(
244
244
  JSON.stringify(['apps/*', 'apps/remotes/*', 'services/*', 'packages/*']),
245
245
  'pnpm-workspace.yaml must retain workspace package globs',
246
246
  );
247
- assert(readPnpmConfig('minimumReleaseAge') === 1440, 'pnpm minimumReleaseAge must be 1440');
248
- assert(readPnpmConfig('minimumReleaseAgeStrict') === true, 'pnpm minimumReleaseAgeStrict must be true');
249
- assert(
250
- readPnpmConfig('minimumReleaseAgeIgnoreMissingTime') === false,
251
- 'pnpm minimumReleaseAgeIgnoreMissingTime must be false',
252
- );
253
- assert(
254
- JSON.stringify(readPnpmConfig('minimumReleaseAgeExclude')) ===
255
- JSON.stringify([
256
- '@modern-js/*',
257
- '@bleedingdev/*',
258
- '@effect/tsgo',
259
- '@effect/tsgo-*',
260
- '@typescript/native-preview',
261
- '@typescript/native-preview-*',
262
- '@cloudflare/*',
263
- 'miniflare',
264
- 'workerd',
265
- 'wrangler',
266
- ]),
267
- 'pnpm minimumReleaseAgeExclude must retain framework and Cloudflare exceptions',
268
- );
269
- assert(readPnpmConfig('trustPolicy') === 'no-downgrade', 'pnpm trustPolicy must be no-downgrade');
270
- assert(readPnpmConfig('trustPolicyIgnoreAfter') === 1440, 'pnpm trustPolicyIgnoreAfter must be 1440');
247
+ assert(readPnpmConfig('minimumReleaseAge') === 0, 'pnpm minimumReleaseAge must be 0');
248
+ assert(readPnpmConfig('minimumReleaseAgeStrict') === undefined, 'pnpm minimumReleaseAgeStrict must stay unset');
249
+ assert(
250
+ readPnpmConfig('minimumReleaseAgeIgnoreMissingTime') === undefined,
251
+ 'pnpm minimumReleaseAgeIgnoreMissingTime must stay unset',
252
+ );
253
+ assert(
254
+ readPnpmConfig('minimumReleaseAgeExclude') === undefined,
255
+ 'pnpm minimumReleaseAgeExclude must stay unset',
256
+ );
257
+ assert(readPnpmConfig('trustPolicy') === undefined, 'pnpm trustPolicy must stay unset');
258
+ assert(readPnpmConfig('trustPolicyIgnoreAfter') === undefined, 'pnpm trustPolicyIgnoreAfter must stay unset');
271
259
  assert(readPnpmConfig('blockExoticSubdeps') === true, 'pnpm blockExoticSubdeps must be true');
272
260
  assert(readPnpmConfig('engineStrict') === true, 'pnpm engineStrict must be true');
273
261
  assert(readPnpmConfig('pmOnFail') === 'error', 'pnpm pmOnFail must be error');
@@ -492,7 +480,7 @@ assert(
492
480
  for (const skillName of privateAgentSkills) {
493
481
  assert(
494
482
  privateSource.baseline?.some((skill) => skill.name === skillName),
495
- `Agent skills lock must allowlist private skill ${skillName}`,
483
+ `Agent skills lock must pin private skill ${skillName}`,
496
484
  );
497
485
  }
498
486
 
@@ -926,7 +914,7 @@ assert(
926
914
  privateAgentSkills.every((skillName) =>
927
915
  manifest.agentSkills?.privateSource?.baseline?.includes(skillName),
928
916
  ),
929
- 'Template manifest must list every private agent skill allowlist entry',
917
+ 'Template manifest must list every pinned private agent skill entry',
930
918
  );
931
919
  assert(
932
920
  manifest.validation?.expectedCommands?.includes('mise exec -- pnpm run ultramodern:check'),