@ultimat3/cli 19.2.0 → 19.3.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/CLAUDE.md +108 -6
- package/package.json +29 -29
- package/src/app-boundaries.ts +11 -2
- package/src/app-load.ts +5 -1
- package/src/budgets.ts +17 -6
- package/src/cmd-dev.ts +29 -39
- package/src/cmd-doctor.ts +61 -23
- package/src/cmd-generate.ts +5 -2
- package/src/cmd-i18n.ts +10 -3
- package/src/cmd-jobs.ts +56 -10
- package/src/cmd-test.ts +15 -10
- package/src/db-seed.ts +2 -1
- package/src/dev-queue.ts +16 -2
- package/src/dev-reload.ts +46 -0
- package/src/dev-runtime.ts +4 -1
- package/src/dev-sync.ts +11 -3
- package/src/dev-watch-tree.ts +226 -0
- package/src/dev-watch.ts +59 -37
- package/src/doctor-offline.ts +122 -0
- package/src/error-catalog.ts +4 -5
- package/src/fix-command.ts +40 -1
- package/src/fix-path.ts +10 -11
- package/src/flag-number.ts +15 -0
- package/src/generate-kinds.ts +54 -4
- package/src/generate-write.ts +25 -2
- package/src/gitignore.ts +145 -0
- package/src/hold.ts +50 -17
- package/src/index.ts +1 -1
- package/src/island-bundle.ts +2 -1
- package/src/island-states-load.ts +2 -1
- package/src/jobs-driver.ts +4 -1
- package/src/mcp-host.ts +18 -9
- package/src/parse.ts +17 -0
- package/src/path-segments.ts +14 -0
- package/src/prerender.ts +46 -20
- package/src/retry-memo.ts +37 -0
- package/src/serve.ts +5 -1
- package/src/source-files.ts +3 -1
- package/src/sw-artifacts.ts +71 -7
- package/src/templates/admin-page.ts +49 -1
- package/src/templates/scaffold-container.ts +12 -0
- package/src/templates/scaffold-repo.ts +7 -2
- package/src/test-passes.ts +79 -0
- package/src/test-shards.ts +110 -36
- package/src/verify-checks.ts +6 -6
- package/src/verify-step.ts +4 -4
- package/src/verify-tests.ts +14 -2
package/src/verify-step.ts
CHANGED
|
@@ -29,19 +29,19 @@ export const VERIFY_STEP_NAMES = [
|
|
|
29
29
|
'drift',
|
|
30
30
|
'contract-diff',
|
|
31
31
|
'budgets',
|
|
32
|
-
//
|
|
32
|
+
// A deliberate widening of a closed list rather than a `HostCheck`: an SEO gate
|
|
33
33
|
// is a MECHANISM every app with a `site/` surface wants (axiom 8), not a rule one host repo
|
|
34
34
|
// enforces — and `verifyCommand.run` passes no host checks at all, so the app path could not
|
|
35
35
|
// have carried it. It runs beside `budgets` because both read the app the same load produced.
|
|
36
36
|
'seo',
|
|
37
|
-
//
|
|
38
|
-
//
|
|
37
|
+
// Here by the same test the SEO step above passed, and not a rider for the same reason:
|
|
38
|
+
// `boundaries` asks whether an import was LEGAL and this asks whether a declaration
|
|
39
39
|
// REACHED the running app, which is a different question with a different fix (axiom 4). It
|
|
40
40
|
// costs no second app load — `budgets` already imported every module, and this reads the
|
|
41
41
|
// registries that load filled. Until it existed, an app could ship every user-facing string as
|
|
42
42
|
// `⟦key⟧` with `x verify` green, because nothing in the gate ever asked (issue #249).
|
|
43
43
|
'i18n',
|
|
44
|
-
//
|
|
44
|
+
// Here by the same test `seo` and `i18n` each passed: a rider must ask the SAME question
|
|
45
45
|
// off the same data, and "was this import legal?" is not "does the permission this app grants
|
|
46
46
|
// and requires exist?". Reported under `budgets` it would hand the reader a byte budget for an
|
|
47
47
|
// authz defect (axiom 4). Until it existed, `x new` shipped an app that answered HTTP 500 with
|
package/src/verify-tests.ts
CHANGED
|
@@ -44,7 +44,9 @@ const TYPED_SUFFIXES = '{contract,live,job,e2e,eval}';
|
|
|
44
44
|
* four sweeps. `type` is a closed union here and cannot be `'constructor'` today, which is
|
|
45
45
|
* exactly the argument every one of those thirteen had before it stopped being true.
|
|
46
46
|
*
|
|
47
|
-
* Same repair, and the same reason, as `packages/i18n/src/catalog.ts`.
|
|
47
|
+
* Same repair, and the same reason, as `packages/i18n/src/catalog.ts`. The read itself is guarded
|
|
48
|
+
* too (`summaryOf`), because a construction three screens above a read is not something a static
|
|
49
|
+
* rule should have to reason about.
|
|
48
50
|
*/
|
|
49
51
|
const SUMMARIES: Readonly<Record<TypedTest, string>> = Object.assign(
|
|
50
52
|
Object.create(null) as Record<TypedTest, string>,
|
|
@@ -255,6 +257,16 @@ const evalStep: VerifyStep = {
|
|
|
255
257
|
},
|
|
256
258
|
};
|
|
257
259
|
|
|
260
|
+
/**
|
|
261
|
+
* The one computed read of `SUMMARIES`, guarded. The table is already prototype-free
|
|
262
|
+
* (`Object.create(null)`), which is what makes the READ safe — and `scripts/proto-index.ts`
|
|
263
|
+
* recognises a guard on the read itself, not a construction three screens above it. So the guard
|
|
264
|
+
* is here: a rule that has to reason about how a table was built is one tightening away from
|
|
265
|
+
* reporting this line, and a pin is a rule with a hole in it.
|
|
266
|
+
*/
|
|
267
|
+
const summaryOf = (type: TypedTest): string =>
|
|
268
|
+
Object.hasOwn(SUMMARIES, type) ? SUMMARIES[type] : `${type} tests`;
|
|
269
|
+
|
|
258
270
|
const stepFor = (type: TestType): VerifyStep => {
|
|
259
271
|
if (type === 'unit') {
|
|
260
272
|
return {
|
|
@@ -266,7 +278,7 @@ const stepFor = (type: TestType): VerifyStep => {
|
|
|
266
278
|
if (type === 'eval') return evalStep;
|
|
267
279
|
return {
|
|
268
280
|
name: type,
|
|
269
|
-
summary:
|
|
281
|
+
summary: summaryOf(type),
|
|
270
282
|
applies: async (ctx) => (await filesFor(ctx.root, type)).length > 0,
|
|
271
283
|
run: (ctx) => runType(ctx, type),
|
|
272
284
|
};
|