@orkestrel/scaffold 0.0.49 → 0.0.51

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.
@@ -4,7 +4,7 @@
4
4
  "storage": "AGENTS.md",
5
5
  "destination": "AGENTS.md",
6
6
  "executable": false,
7
- "digest": "152c8e8fb880814be96fb0b0a63524e98bf72125af97edddb72c140d2e3cc0ea"
7
+ "digest": "691f9fb52acd475a08109b93cdbed18628af36e9363f4803d84176a8117cf53c"
8
8
  },
9
9
  {
10
10
  "storage": "CLAUDE.md",
@@ -22,7 +22,7 @@
22
22
  "storage": "agents/orchestration.md",
23
23
  "destination": ".agents/orchestration.md",
24
24
  "executable": false,
25
- "digest": "b60e6a415a925c2180a272614ef3cbb76ba983ce42e67e35d3d9252d75f4d51f"
25
+ "digest": "63bacfdcd9b9918fb8302b723a0049bd3bbf74e939a8c1afbe50d0083c1742db"
26
26
  },
27
27
  {
28
28
  "storage": "agents/skills/enterprise-bootstrap/SKILL.md",
@@ -268,7 +268,7 @@
268
268
  "storage": "claude/agents/orkestrel.md",
269
269
  "destination": ".claude/agents/orkestrel.md",
270
270
  "executable": false,
271
- "digest": "77480937c601404b11bb8b278ae962bd647f070b71882cf22a61a15af2b9f62e"
271
+ "digest": "8e228a484383a04bf12fa510b3619eb7f38a512ec081ee0870ea7534b314945d"
272
272
  },
273
273
  {
274
274
  "storage": "claude/agents/planner.md",
@@ -316,7 +316,7 @@
316
316
  "storage": "claude/rules/architecture.md",
317
317
  "destination": ".claude/rules/architecture.md",
318
318
  "executable": false,
319
- "digest": "32bf977e77fb42cbf16bbcb92d9005d4879b194f5957ad6173c355054bfa0a88"
319
+ "digest": "94f70c20f927129cf9cb3965b3180a14e941e4f6eddf6512c4adc014e0bcbdf2"
320
320
  },
321
321
  {
322
322
  "storage": "claude/rules/browser.md",
@@ -358,7 +358,7 @@
358
358
  "storage": "claude/rules/tests.md",
359
359
  "destination": ".claude/rules/tests.md",
360
360
  "executable": false,
361
- "digest": "4b4771652eb802b1bbac690f5a4aa4793e443d93fff70838853ec6cb45bdce16"
361
+ "digest": "2f8658425bc48b8751a5526300827c90f22226d4605514ec866891b5be4fabfb"
362
362
  },
363
363
  {
364
364
  "storage": "claude/rules/typescript.md",
@@ -370,7 +370,7 @@
370
370
  "storage": "claude/rules/workspace.md",
371
371
  "destination": ".claude/rules/workspace.md",
372
372
  "executable": false,
373
- "digest": "eac73efda50bcf415968538caa83c326ee5e30076d7dadefe07512510e86df22"
373
+ "digest": "8120bac99d00b4cb0613b0dc6cb4048074c86fdb6f6583be07514229d90bbd07"
374
374
  },
375
375
  {
376
376
  "storage": "claude/rules/writing.md",
@@ -520,7 +520,7 @@
520
520
  "storage": "codex/config.toml",
521
521
  "destination": ".codex/config.toml",
522
522
  "executable": false,
523
- "digest": "5aa2e5903a9501fb53a6fa9b58d4e1d18b44e950f88fd928edbc3f5b5aadfc62"
523
+ "digest": "e67d555ed4381b098b203e14484718e64e5262715d87b3f71857511cff929560"
524
524
  },
525
525
  {
526
526
  "storage": "configs/helpers.ts",
@@ -604,7 +604,7 @@
604
604
  "storage": "guides/scaffold.md",
605
605
  "destination": "guides/scaffold.md",
606
606
  "executable": false,
607
- "digest": "f9e174b1ef9bed763ccd2b4af73f041aebb766f889c48f086fbe538ed8e6e4fd"
607
+ "digest": "1aace5325608c6880d73a2bae7c02936c26445ef7aff550c43a70333c7be85f6"
608
608
  },
609
609
  {
610
610
  "storage": "scripts/codex.sh",
@@ -634,7 +634,7 @@
634
634
  "storage": "tests/config.test.ts",
635
635
  "destination": "tests/config.test.ts",
636
636
  "executable": false,
637
- "digest": "c48dd9b1e4bdc03d058443846bef824ff2130f9f68fccf2690dfa5af954703c4"
637
+ "digest": "f8ddc2ab6cb54f2b1f51ad9212d7f09881271d265628299e5ce8f536cfec76a7"
638
638
  },
639
639
  {
640
640
  "storage": "tests/policy.test.ts",
@@ -688,5 +688,5 @@
688
688
  ".codex/agents",
689
689
  ".cursor/rules"
690
690
  ],
691
- "digest": "41556ba3ebba126ae600a6e2e7f32cbd208f20f00fa14b7e9ec21f5554802c89"
691
+ "digest": "1472dda0358190ef9900fcdf86fdfb0ed60053b6095ba7b9f1b0efe490cc85ce"
692
692
  }
File without changes
File without changes
File without changes
File without changes
@@ -152,11 +152,10 @@ describe('root configuration', () => {
152
152
  pool: 'threads',
153
153
  setup: ['./tests/setup.ts'],
154
154
  })
155
- // A row that is a configuration rather than a factory. A workspace with a
156
- // browser application emits one, because that factory refuses overrides and
157
- // so is not a value Vitest may call. It is required here, in a workspace that
158
- // has no browser application, so this proof exercises that resolution
159
- // wherever it runs instead of only where the shape happens to occur.
155
+ // A row that is a configuration rather than a factory. Every generated
156
+ // workspace registers the factory itself, so this shape is required here
157
+ // rather than observed: the proof exercises that resolution wherever it runs
158
+ // instead of only where a hand-written configuration happens to produce it.
160
159
  expected.set('concrete', { include: 'tests/concrete.test.ts', setup: ['./tests/setup.ts'] })
161
160
 
162
161
  const projects = configuration.test?.projects
@@ -297,6 +296,65 @@ describe('root configuration', () => {
297
296
  }).toThrow(/strictly equal/u)
298
297
  })
299
298
 
299
+ it('emits every project as a factory so the release mode reaches its proof', () => {
300
+ const projects = configuration.test?.projects
301
+ if (!Array.isArray(projects)) throw new Error('The root configuration carries no projects')
302
+ if (projects.length === 0) throw new Error('The root configuration registers no project')
303
+ // Measured: with `--mode release` on the command line, `import.meta.env.MODE` reads
304
+ // `release` inside a project Vitest calls and `test` inside an inline project
305
+ // configuration. `prepublishOnly` runs the distribution proof with `--mode release`, and
306
+ // that proof fails rather than skips only when it reads `release`, so converting these
307
+ // entries to inline configurations turns the publish gate into a skip while every suite
308
+ // stays green. The control is that conversion applied to one entry.
309
+ const inline = {
310
+ test: {
311
+ name: { label: 'inline' },
312
+ include: ['tests/inline.test.ts'],
313
+ setupFiles: ['./tests/setup.ts'],
314
+ },
315
+ }
316
+ const callable = projects.concat(inline).filter((entry) => typeof entry === 'function')
317
+ for (const entry of projects) expect(callable).toContain(entry)
318
+ expect(callable).not.toContain(inline)
319
+ })
320
+
321
+ it('keeps Vitest invocation fields out of project configurations', () => {
322
+ const projects = configuration.test?.projects
323
+ if (!Array.isArray(projects)) throw new Error('The root configuration carries no projects')
324
+ const factories = projects.filter((row) => typeof row === 'function')
325
+ if (factories.length === 0)
326
+ throw new Error('The root configuration registers no project factory')
327
+ const sentinel = {
328
+ command: 'sentinel-command',
329
+ isPreview: true,
330
+ isSsrBuild: true,
331
+ mode: 'sentinel-mode',
332
+ sentinel: true,
333
+ }
334
+ for (const factory of factories) {
335
+ const project: unknown = Reflect.apply(factory, undefined, [sentinel])
336
+ if (typeof project !== 'object' || project === null) {
337
+ throw new Error('A project factory returned no configuration')
338
+ }
339
+ for (const field of Object.keys(sentinel)) {
340
+ expect(Object.getOwnPropertyDescriptor(project, field)?.value).toBeUndefined()
341
+ }
342
+ }
343
+
344
+ const control = Object.defineProperty(() => ({ ...sentinel }), 'name', { value: 'control' })
345
+ expect(() => {
346
+ for (const factory of factories.concat(control)) {
347
+ const project: unknown = Reflect.apply(factory, undefined, [sentinel])
348
+ if (typeof project !== 'object' || project === null) {
349
+ throw new Error('A project factory returned no configuration')
350
+ }
351
+ for (const field of Object.keys(sentinel)) {
352
+ expect(Object.getOwnPropertyDescriptor(project, field)?.value).toBeUndefined()
353
+ }
354
+ }
355
+ }).toThrow(/expected/u)
356
+ })
357
+
300
358
  it('requires and validates every selected target wrapper', async () => {
301
359
  const required: string[] = []
302
360
  for (const axis of ['src', 'app']) {
@@ -513,6 +571,26 @@ describe('root configuration', () => {
513
571
  )
514
572
  })
515
573
 
574
+ it('rebuilds publishing workspaces before packing', () => {
575
+ const manifest: unknown = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8'))
576
+ if (typeof manifest !== 'object' || manifest === null) {
577
+ throw new Error('The package manifest is not a record')
578
+ }
579
+ const scripts: unknown = Object.getOwnPropertyDescriptor(manifest, 'scripts')?.value
580
+ if (typeof scripts !== 'object' || scripts === null) {
581
+ throw new Error('The package manifest carries no scripts')
582
+ }
583
+ const publishes = Object.getOwnPropertyDescriptor(manifest, 'private')?.value !== true
584
+ const prepack = Object.getOwnPropertyDescriptor(scripts, 'prepack')?.value
585
+ expect(prepack).toBe(publishes ? 'npm run build' : undefined)
586
+
587
+ const controlled = { ...scripts, prepack: 'npm run control' }
588
+ expect(() => {
589
+ const control = Object.getOwnPropertyDescriptor(controlled, 'prepack')?.value
590
+ expect(control).toBe(publishes ? 'npm run build' : undefined)
591
+ }).toThrow(/expected/u)
592
+ })
593
+
516
594
  it('keeps the committed host inventory aligned with the vendored checkout bytes', async () => {
517
595
  // Run this gate against a quiescent checkout. It compares two reads and cannot
518
596
  // distinguish stale committed data from a source edit made while it runs.