@ontrails/trails 1.0.0-beta.3 → 1.0.0-beta.30

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.
Files changed (157) hide show
  1. package/CHANGELOG.md +886 -0
  2. package/README.md +27 -0
  3. package/package.json +30 -7
  4. package/src/app.ts +125 -2
  5. package/src/cli.ts +344 -11
  6. package/src/completions.ts +240 -0
  7. package/src/lifecycle-source-io.ts +33 -0
  8. package/src/load-app-mirror.ts +202 -0
  9. package/src/local-state-io.ts +173 -0
  10. package/src/mcp-app.ts +40 -0
  11. package/src/mcp-options.ts +76 -0
  12. package/src/mcp.ts +8 -0
  13. package/src/project-writes.ts +377 -0
  14. package/src/release/bindings.ts +39 -0
  15. package/src/release/check.ts +844 -0
  16. package/src/release/config.ts +63 -0
  17. package/src/release/contract-facts.ts +425 -0
  18. package/src/release/index.ts +125 -0
  19. package/src/release/native-bun-publish.ts +651 -0
  20. package/src/release/native-bun-registry.ts +754 -0
  21. package/src/release/pack-coherence.ts +457 -0
  22. package/src/release/packed-artifacts-smoke.ts +236 -0
  23. package/src/release/policy.ts +1684 -0
  24. package/src/release/semver.ts +104 -0
  25. package/src/release/smoke.ts +46 -0
  26. package/src/release/wayfinder-dogfood-smoke.ts +760 -0
  27. package/src/retired-topo-command.ts +36 -0
  28. package/src/run-adapter-check.ts +76 -0
  29. package/src/run-collision.ts +126 -0
  30. package/src/run-completions-install.ts +179 -0
  31. package/src/run-example.ts +149 -0
  32. package/src/run-examples.ts +148 -0
  33. package/src/run-quiet.ts +75 -0
  34. package/src/run-release-check.ts +74 -0
  35. package/src/run-schema.ts +41 -0
  36. package/src/run-trace.ts +273 -0
  37. package/src/run-warden.ts +39 -0
  38. package/src/run-watch.ts +432 -0
  39. package/src/run-wayfind-outline.ts +166 -0
  40. package/src/scaffold-version-sync.ts +183 -0
  41. package/src/scaffold-versions.generated.ts +12 -0
  42. package/src/trails/adapter-check.ts +244 -0
  43. package/src/trails/add-surface.ts +94 -40
  44. package/src/trails/add-trail.ts +79 -41
  45. package/src/trails/add-verify.ts +95 -25
  46. package/src/trails/compile.ts +59 -0
  47. package/src/trails/completions-complete.ts +165 -0
  48. package/src/trails/completions.ts +47 -0
  49. package/src/trails/create-adapter.ts +1084 -0
  50. package/src/trails/create-scaffold.ts +399 -104
  51. package/src/trails/create-versions.ts +62 -0
  52. package/src/trails/create.ts +186 -72
  53. package/src/trails/deprecate.ts +59 -0
  54. package/src/trails/dev-clean.ts +82 -0
  55. package/src/trails/dev-reset.ts +50 -0
  56. package/src/trails/dev-stats.ts +72 -0
  57. package/src/trails/dev-support.ts +360 -0
  58. package/src/trails/doctor.ts +77 -0
  59. package/src/trails/draft-promote.ts +949 -0
  60. package/src/trails/guide.ts +71 -69
  61. package/src/trails/load-app.ts +1193 -16
  62. package/src/trails/operator-context.ts +66 -0
  63. package/src/trails/project.ts +17 -3
  64. package/src/trails/regrade.ts +72 -0
  65. package/src/trails/release-check.ts +105 -0
  66. package/src/trails/release-smoke.ts +48 -0
  67. package/src/trails/revise.ts +53 -0
  68. package/src/trails/root-dir.ts +21 -0
  69. package/src/trails/run-example.ts +475 -0
  70. package/src/trails/run-examples.ts +129 -0
  71. package/src/trails/run.ts +434 -0
  72. package/src/trails/scaffold-json.ts +58 -0
  73. package/src/trails/survey.ts +896 -227
  74. package/src/trails/topo-activation.ts +385 -0
  75. package/src/trails/topo-constants.ts +2 -0
  76. package/src/trails/topo-history.ts +47 -0
  77. package/src/trails/topo-output-schemas.ts +259 -0
  78. package/src/trails/topo-pin.ts +38 -0
  79. package/src/trails/topo-read-support.ts +363 -0
  80. package/src/trails/topo-reports.ts +809 -0
  81. package/src/trails/topo-store-support.ts +307 -0
  82. package/src/trails/topo-support.ts +219 -0
  83. package/src/trails/topo-unpin.ts +61 -0
  84. package/src/trails/topo.ts +92 -0
  85. package/src/trails/validate.ts +27 -0
  86. package/src/trails/version-lifecycle-support.ts +935 -0
  87. package/src/trails/warden-guide.ts +129 -0
  88. package/src/trails/warden.ts +183 -58
  89. package/src/trails/wayfind.ts +1001 -0
  90. package/src/versions.ts +31 -0
  91. package/.turbo/turbo-build.log +0 -1
  92. package/.turbo/turbo-lint.log +0 -3
  93. package/.turbo/turbo-typecheck.log +0 -1
  94. package/__tests__/examples.test.ts +0 -6
  95. package/dist/bin/trails.d.ts +0 -3
  96. package/dist/bin/trails.d.ts.map +0 -1
  97. package/dist/bin/trails.js +0 -4
  98. package/dist/bin/trails.js.map +0 -1
  99. package/dist/src/app.d.ts +0 -2
  100. package/dist/src/app.d.ts.map +0 -1
  101. package/dist/src/app.js +0 -11
  102. package/dist/src/app.js.map +0 -1
  103. package/dist/src/clack.d.ts +0 -9
  104. package/dist/src/clack.d.ts.map +0 -1
  105. package/dist/src/clack.js +0 -84
  106. package/dist/src/clack.js.map +0 -1
  107. package/dist/src/cli.d.ts +0 -2
  108. package/dist/src/cli.d.ts.map +0 -1
  109. package/dist/src/cli.js +0 -13
  110. package/dist/src/cli.js.map +0 -1
  111. package/dist/src/trails/add-surface.d.ts +0 -13
  112. package/dist/src/trails/add-surface.d.ts.map +0 -1
  113. package/dist/src/trails/add-surface.js +0 -88
  114. package/dist/src/trails/add-surface.js.map +0 -1
  115. package/dist/src/trails/add-trail.d.ts +0 -11
  116. package/dist/src/trails/add-trail.d.ts.map +0 -1
  117. package/dist/src/trails/add-trail.js +0 -85
  118. package/dist/src/trails/add-trail.js.map +0 -1
  119. package/dist/src/trails/add-verify.d.ts +0 -10
  120. package/dist/src/trails/add-verify.d.ts.map +0 -1
  121. package/dist/src/trails/add-verify.js +0 -67
  122. package/dist/src/trails/add-verify.js.map +0 -1
  123. package/dist/src/trails/create-scaffold.d.ts +0 -15
  124. package/dist/src/trails/create-scaffold.d.ts.map +0 -1
  125. package/dist/src/trails/create-scaffold.js +0 -288
  126. package/dist/src/trails/create-scaffold.js.map +0 -1
  127. package/dist/src/trails/create.d.ts +0 -22
  128. package/dist/src/trails/create.d.ts.map +0 -1
  129. package/dist/src/trails/create.js +0 -121
  130. package/dist/src/trails/create.js.map +0 -1
  131. package/dist/src/trails/guide.d.ts +0 -11
  132. package/dist/src/trails/guide.d.ts.map +0 -1
  133. package/dist/src/trails/guide.js +0 -80
  134. package/dist/src/trails/guide.js.map +0 -1
  135. package/dist/src/trails/load-app.d.ts +0 -4
  136. package/dist/src/trails/load-app.d.ts.map +0 -1
  137. package/dist/src/trails/load-app.js +0 -24
  138. package/dist/src/trails/load-app.js.map +0 -1
  139. package/dist/src/trails/project.d.ts +0 -8
  140. package/dist/src/trails/project.d.ts.map +0 -1
  141. package/dist/src/trails/project.js +0 -43
  142. package/dist/src/trails/project.js.map +0 -1
  143. package/dist/src/trails/survey.d.ts +0 -33
  144. package/dist/src/trails/survey.d.ts.map +0 -1
  145. package/dist/src/trails/survey.js +0 -225
  146. package/dist/src/trails/survey.js.map +0 -1
  147. package/dist/src/trails/warden.d.ts +0 -19
  148. package/dist/src/trails/warden.d.ts.map +0 -1
  149. package/dist/src/trails/warden.js +0 -88
  150. package/dist/src/trails/warden.js.map +0 -1
  151. package/dist/tsconfig.tsbuildinfo +0 -1
  152. package/src/__tests__/create.test.ts +0 -349
  153. package/src/__tests__/guide.test.ts +0 -91
  154. package/src/__tests__/load-app.test.ts +0 -15
  155. package/src/__tests__/survey.test.ts +0 -161
  156. package/src/__tests__/warden.test.ts +0 -74
  157. package/tsconfig.json +0 -9
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Minimal semver comparison shared across release tooling.
3
+ *
4
+ * Extracted from `policy.ts` so the release policy engine and the registry
5
+ * classifier compare versions through one implementation instead of two.
6
+ */
7
+
8
+ interface ParsedSemver {
9
+ readonly major: number;
10
+ readonly minor: number;
11
+ readonly patch: number;
12
+ readonly prerelease: string | undefined;
13
+ }
14
+
15
+ export const parseSemver = (version: string): ParsedSemver | undefined => {
16
+ const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/u);
17
+ if (!match) {
18
+ return;
19
+ }
20
+ const [, major, minor, patch, prerelease] = match;
21
+ if (!major || !minor || !patch) {
22
+ return;
23
+ }
24
+ return {
25
+ major: Number.parseInt(major, 10),
26
+ minor: Number.parseInt(minor, 10),
27
+ patch: Number.parseInt(patch, 10),
28
+ prerelease,
29
+ };
30
+ };
31
+
32
+ const parsePrerelease = (value: string): (number | string)[] =>
33
+ value
34
+ .split('.')
35
+ .map((part) => (/^[0-9]+$/u.test(part) ? Number.parseInt(part, 10) : part));
36
+
37
+ const comparePrerelease = (leftValue: string, rightValue: string): number => {
38
+ const left = parsePrerelease(leftValue);
39
+ const right = parsePrerelease(rightValue);
40
+ const length = Math.max(left.length, right.length);
41
+
42
+ for (let index = 0; index < length; index += 1) {
43
+ const leftPart = left[index];
44
+ const rightPart = right[index];
45
+ if (leftPart === undefined) {
46
+ return -1;
47
+ }
48
+ if (rightPart === undefined) {
49
+ return 1;
50
+ }
51
+ if (leftPart === rightPart) {
52
+ continue;
53
+ }
54
+ if (typeof leftPart === 'number' && typeof rightPart === 'number') {
55
+ return leftPart - rightPart;
56
+ }
57
+ if (typeof leftPart === 'number') {
58
+ return -1;
59
+ }
60
+ if (typeof rightPart === 'number') {
61
+ return 1;
62
+ }
63
+ const delta = leftPart.localeCompare(rightPart);
64
+ if (delta !== 0) {
65
+ return delta;
66
+ }
67
+ }
68
+
69
+ return 0;
70
+ };
71
+
72
+ /**
73
+ * Compare two semver strings. Returns a negative number when `leftVersion`
74
+ * sorts before `rightVersion`, a positive number when it sorts after, and 0
75
+ * when equal. Unparseable inputs fall back to a locale comparison.
76
+ */
77
+ export const compareSemver = (
78
+ leftVersion: string,
79
+ rightVersion: string
80
+ ): number => {
81
+ const left = parseSemver(leftVersion);
82
+ const right = parseSemver(rightVersion);
83
+ if (!left || !right) {
84
+ return leftVersion.localeCompare(rightVersion);
85
+ }
86
+
87
+ for (const key of ['major', 'minor', 'patch'] as const) {
88
+ const delta = left[key] - right[key];
89
+ if (delta !== 0) {
90
+ return delta;
91
+ }
92
+ }
93
+
94
+ if (left.prerelease === right.prerelease) {
95
+ return 0;
96
+ }
97
+ if (!left.prerelease) {
98
+ return 1;
99
+ }
100
+ if (!right.prerelease) {
101
+ return -1;
102
+ }
103
+ return comparePrerelease(left.prerelease, right.prerelease);
104
+ };
@@ -0,0 +1,46 @@
1
+ import { runPackedArtifactsSmoke } from './packed-artifacts-smoke.js';
2
+ import type { PackedArtifactsSmokeResult } from './packed-artifacts-smoke.js';
3
+ import { runWayfinderDogfoodSmoke } from './wayfinder-dogfood-smoke.js';
4
+ import type { WayfinderDogfoodSmokeResult } from './wayfinder-dogfood-smoke.js';
5
+
6
+ export const releaseSmokeCheckValues = [
7
+ 'all',
8
+ 'packed-artifacts',
9
+ 'wayfinder-dogfood',
10
+ ] as const;
11
+ export type ReleaseSmokeCheck = (typeof releaseSmokeCheckValues)[number];
12
+
13
+ export type ReleaseSmokeCheckResult =
14
+ | PackedArtifactsSmokeResult
15
+ | WayfinderDogfoodSmokeResult;
16
+
17
+ export interface ReleaseSmokeResult {
18
+ readonly checks: readonly ReleaseSmokeCheckResult[];
19
+ readonly message: string;
20
+ readonly passed: true;
21
+ }
22
+
23
+ const checksForInput = (
24
+ check: ReleaseSmokeCheck
25
+ ): readonly Exclude<ReleaseSmokeCheck, 'all'>[] =>
26
+ check === 'all' ? ['packed-artifacts', 'wayfinder-dogfood'] : [check];
27
+
28
+ export const runReleaseSmoke = async (
29
+ check: ReleaseSmokeCheck
30
+ ): Promise<ReleaseSmokeResult> => {
31
+ const results: ReleaseSmokeCheckResult[] = [];
32
+
33
+ for (const selectedCheck of checksForInput(check)) {
34
+ if (selectedCheck === 'packed-artifacts') {
35
+ results.push(await runPackedArtifactsSmoke());
36
+ continue;
37
+ }
38
+ results.push(await runWayfinderDogfoodSmoke());
39
+ }
40
+
41
+ return {
42
+ checks: results,
43
+ message: results.map((result) => result.message).join('\n'),
44
+ passed: true,
45
+ };
46
+ };