@ontrails/trails 1.0.0-beta.13 → 1.0.0-beta.14

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 (140) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +16 -0
  3. package/__tests__/examples.test.ts +14 -0
  4. package/dist/src/app.d.ts.map +1 -1
  5. package/dist/src/app.js +13 -2
  6. package/dist/src/app.js.map +1 -1
  7. package/dist/src/clack.d.ts +1 -1
  8. package/dist/src/clack.js +1 -1
  9. package/dist/src/cli.js +2 -2
  10. package/dist/src/cli.js.map +1 -1
  11. package/dist/src/trails/add-trail.js +13 -13
  12. package/dist/src/trails/add-trail.js.map +1 -1
  13. package/dist/src/trails/add-trailhead.d.ts +13 -0
  14. package/dist/src/trails/add-trailhead.d.ts.map +1 -0
  15. package/dist/src/trails/add-trailhead.js +88 -0
  16. package/dist/src/trails/add-trailhead.js.map +1 -0
  17. package/dist/src/trails/add-verify.js +10 -10
  18. package/dist/src/trails/add-verify.js.map +1 -1
  19. package/dist/src/trails/create-scaffold.js +26 -26
  20. package/dist/src/trails/create-scaffold.js.map +1 -1
  21. package/dist/src/trails/create.d.ts +6 -6
  22. package/dist/src/trails/create.d.ts.map +1 -1
  23. package/dist/src/trails/create.js +29 -29
  24. package/dist/src/trails/create.js.map +1 -1
  25. package/dist/src/trails/dev-clean.d.ts +9 -0
  26. package/dist/src/trails/dev-clean.d.ts.map +1 -0
  27. package/dist/src/trails/dev-clean.js +65 -0
  28. package/dist/src/trails/dev-clean.js.map +1 -0
  29. package/dist/src/trails/dev-reset.d.ts +6 -0
  30. package/dist/src/trails/dev-reset.d.ts.map +1 -0
  31. package/dist/src/trails/dev-reset.js +38 -0
  32. package/dist/src/trails/dev-reset.js.map +1 -0
  33. package/dist/src/trails/dev-stats.d.ts +7 -0
  34. package/dist/src/trails/dev-stats.d.ts.map +1 -0
  35. package/dist/src/trails/dev-stats.js +61 -0
  36. package/dist/src/trails/dev-stats.js.map +1 -0
  37. package/dist/src/trails/dev-support.d.ts +64 -0
  38. package/dist/src/trails/dev-support.d.ts.map +1 -0
  39. package/dist/src/trails/dev-support.js +178 -0
  40. package/dist/src/trails/dev-support.js.map +1 -0
  41. package/dist/src/trails/draft-promote.d.ts +18 -0
  42. package/dist/src/trails/draft-promote.d.ts.map +1 -0
  43. package/dist/src/trails/draft-promote.js +386 -0
  44. package/dist/src/trails/draft-promote.js.map +1 -0
  45. package/dist/src/trails/guide.d.ts +13 -3
  46. package/dist/src/trails/guide.d.ts.map +1 -1
  47. package/dist/src/trails/guide.js +21 -37
  48. package/dist/src/trails/guide.js.map +1 -1
  49. package/dist/src/trails/load-app.d.ts +3 -1
  50. package/dist/src/trails/load-app.d.ts.map +1 -1
  51. package/dist/src/trails/load-app.js +53 -10
  52. package/dist/src/trails/load-app.js.map +1 -1
  53. package/dist/src/trails/project.d.ts.map +1 -1
  54. package/dist/src/trails/project.js +14 -3
  55. package/dist/src/trails/project.js.map +1 -1
  56. package/dist/src/trails/survey.d.ts +4 -58
  57. package/dist/src/trails/survey.d.ts.map +1 -1
  58. package/dist/src/trails/survey.js +52 -173
  59. package/dist/src/trails/survey.js.map +1 -1
  60. package/dist/src/trails/topo-constants.d.ts +3 -0
  61. package/dist/src/trails/topo-constants.d.ts.map +1 -0
  62. package/dist/src/trails/topo-constants.js +3 -0
  63. package/dist/src/trails/topo-constants.js.map +1 -0
  64. package/dist/src/trails/topo-export.d.ts +18 -0
  65. package/dist/src/trails/topo-export.d.ts.map +1 -0
  66. package/dist/src/trails/topo-export.js +34 -0
  67. package/dist/src/trails/topo-export.js.map +1 -0
  68. package/dist/src/trails/topo-history.d.ts +24 -0
  69. package/dist/src/trails/topo-history.d.ts.map +1 -0
  70. package/dist/src/trails/topo-history.js +33 -0
  71. package/dist/src/trails/topo-history.js.map +1 -0
  72. package/dist/src/trails/topo-pin.d.ts +21 -0
  73. package/dist/src/trails/topo-pin.d.ts.map +1 -0
  74. package/dist/src/trails/topo-pin.js +35 -0
  75. package/dist/src/trails/topo-pin.js.map +1 -0
  76. package/dist/src/trails/topo-read-support.d.ts +54 -0
  77. package/dist/src/trails/topo-read-support.d.ts.map +1 -0
  78. package/dist/src/trails/topo-read-support.js +178 -0
  79. package/dist/src/trails/topo-read-support.js.map +1 -0
  80. package/dist/src/trails/topo-reports.d.ts +50 -0
  81. package/dist/src/trails/topo-reports.d.ts.map +1 -0
  82. package/dist/src/trails/topo-reports.js +122 -0
  83. package/dist/src/trails/topo-reports.js.map +1 -0
  84. package/dist/src/trails/topo-show.d.ts +23 -0
  85. package/dist/src/trails/topo-show.d.ts.map +1 -0
  86. package/dist/src/trails/topo-show.js +53 -0
  87. package/dist/src/trails/topo-show.js.map +1 -0
  88. package/dist/src/trails/topo-store-support.d.ts +13 -0
  89. package/dist/src/trails/topo-store-support.d.ts.map +1 -0
  90. package/dist/src/trails/topo-store-support.js +55 -0
  91. package/dist/src/trails/topo-store-support.js.map +1 -0
  92. package/dist/src/trails/topo-support.d.ts +87 -0
  93. package/dist/src/trails/topo-support.d.ts.map +1 -0
  94. package/dist/src/trails/topo-support.js +165 -0
  95. package/dist/src/trails/topo-support.js.map +1 -0
  96. package/dist/src/trails/topo-unpin.d.ts +15 -0
  97. package/dist/src/trails/topo-unpin.d.ts.map +1 -0
  98. package/dist/src/trails/topo-unpin.js +39 -0
  99. package/dist/src/trails/topo-unpin.js.map +1 -0
  100. package/dist/src/trails/topo-verify.d.ts +5 -0
  101. package/dist/src/trails/topo-verify.d.ts.map +1 -0
  102. package/dist/src/trails/topo-verify.js +28 -0
  103. package/dist/src/trails/topo-verify.js.map +1 -0
  104. package/dist/src/trails/topo.d.ts +5 -0
  105. package/dist/src/trails/topo.d.ts.map +1 -0
  106. package/dist/src/trails/topo.js +67 -0
  107. package/dist/src/trails/topo.js.map +1 -0
  108. package/dist/src/trails/warden.d.ts +1 -1
  109. package/dist/src/trails/warden.d.ts.map +1 -1
  110. package/dist/src/trails/warden.js +28 -27
  111. package/dist/src/trails/warden.js.map +1 -1
  112. package/dist/tsconfig.tsbuildinfo +1 -1
  113. package/package.json +8 -7
  114. package/src/__tests__/draft-promote.test.ts +144 -0
  115. package/src/__tests__/load-app.test.ts +43 -0
  116. package/src/__tests__/survey.test.ts +85 -0
  117. package/src/__tests__/topo-dev.test.ts +424 -0
  118. package/src/app.ts +22 -0
  119. package/src/trails/dev-clean.ts +73 -0
  120. package/src/trails/dev-reset.ts +44 -0
  121. package/src/trails/dev-stats.ts +64 -0
  122. package/src/trails/dev-support.ts +326 -0
  123. package/src/trails/draft-promote.ts +704 -0
  124. package/src/trails/guide.ts +22 -37
  125. package/src/trails/load-app.ts +76 -13
  126. package/src/trails/project.ts +17 -3
  127. package/src/trails/survey.ts +56 -256
  128. package/src/trails/topo-constants.ts +2 -0
  129. package/src/trails/topo-export.ts +39 -0
  130. package/src/trails/topo-history.ts +40 -0
  131. package/src/trails/topo-pin.ts +42 -0
  132. package/src/trails/topo-read-support.ts +332 -0
  133. package/src/trails/topo-reports.ts +221 -0
  134. package/src/trails/topo-show.ts +58 -0
  135. package/src/trails/topo-store-support.ts +96 -0
  136. package/src/trails/topo-support.ts +274 -0
  137. package/src/trails/topo-unpin.ts +51 -0
  138. package/src/trails/topo-verify.ts +29 -0
  139. package/src/trails/topo.ts +73 -0
  140. package/src/trails/warden.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-store-support.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-store-support.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAiB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAcvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAmD1D,eAAO,MAAM,iBAAiB,GAC5B,KAAK,IAAI,EACT,UAAU;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KACtC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAmBzC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Stored-export pipeline for topo persistence.
3
+ *
4
+ * Extracted from topo-support.ts so this branch (trl-131) owns its own file,
5
+ * keeping absorb routing clean across the stack.
6
+ */
7
+ import { InternalError, Result } from '@ontrails/core';
8
+ import { getStoredTopoExport, persistEstablishedTopoSave, } from '@ontrails/core/internal/topo-store';
9
+ import { openWriteTrailsDb, resolveTrailsDir, } from '@ontrails/core/internal/trails-db';
10
+ import { writeTrailheadLock, writeTrailheadMap } from '@ontrails/schema';
11
+ import { currentGitState, resolveRootDir, topoCounts } from './topo-support.js';
12
+ const persistAndReadStoredExport = (app, db, rootDir) => {
13
+ const saveResult = persistEstablishedTopoSave(db, app, {
14
+ ...currentGitState(rootDir),
15
+ ...topoCounts(app),
16
+ });
17
+ if (saveResult.isErr()) {
18
+ return saveResult;
19
+ }
20
+ const save = saveResult.value;
21
+ const storedExport = getStoredTopoExport(db, save.id);
22
+ if (storedExport === undefined) {
23
+ return Result.err(new InternalError(`Missing stored topo export for save "${save.id}"`));
24
+ }
25
+ return Result.ok({
26
+ save,
27
+ storedExport,
28
+ });
29
+ };
30
+ const writeStoredExportArtifacts = async (storedExport, trailsDir) => {
31
+ const mapPath = await writeTrailheadMap(JSON.parse(storedExport.trailheadMapJson), { dir: trailsDir });
32
+ const lockPath = await writeTrailheadLock(JSON.parse(storedExport.lockContent), { dir: trailsDir });
33
+ return {
34
+ hash: storedExport.trailheadHash,
35
+ lockPath,
36
+ mapPath,
37
+ };
38
+ };
39
+ export const exportCurrentTopo = async (app, options) => {
40
+ const rootDir = resolveRootDir(options?.rootDir);
41
+ const db = openWriteTrailsDb({ rootDir });
42
+ try {
43
+ const persisted = persistAndReadStoredExport(app, db, rootDir);
44
+ if (persisted.isErr()) {
45
+ return persisted;
46
+ }
47
+ const { save, storedExport } = persisted.value;
48
+ const artifacts = await writeStoredExportArtifacts(storedExport, resolveTrailsDir({ rootDir }));
49
+ return Result.ok({ ...artifacts, save });
50
+ }
51
+ finally {
52
+ db.close();
53
+ }
54
+ };
55
+ //# sourceMappingURL=topo-store-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-store-support.js","sourceRoot":"","sources":["../../../src/trails/topo-store-support.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEhF,MAAM,0BAA0B,GAAG,CACjC,GAAS,EACT,EAAwC,EACxC,OAAe,EAC0D,EAAE;IAC3E,MAAM,UAAU,GAAG,0BAA0B,CAAC,EAAE,EAAE,GAAG,EAAE;QACrD,GAAG,eAAe,CAAC,OAAO,CAAC;QAC3B,GAAG,UAAU,CAAC,GAAG,CAAC;KACnB,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;IAC9B,MAAM,YAAY,GAAG,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,aAAa,CAAC,wCAAwC,IAAI,CAAC,EAAE,GAAG,CAAC,CACtE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,IAAI;QACJ,YAAY;KACb,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,KAAK,EACtC,YAA8B,EAC9B,SAAiB,EACiD,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,iBAAiB,CACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,CAAiB,EACzD,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAkB,EACrD,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,YAAY,CAAC,aAAa;QAChC,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,GAAS,EACT,OAAuC,EACG,EAAE;IAC5C,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,0BAA0B,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAChD,YAAY,EACZ,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAC9B,CAAC;QACF,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { Topo } from '@ontrails/core';
2
+ import type { TopoPinRecord, TopoSaveRecord } from '@ontrails/core/internal/topo-saves';
3
+ import { z } from 'zod';
4
+ import type { BriefReport, SurveyListReport } from './topo-reports.js';
5
+ /** Output schema for a topo save record. Shared across topo trails. */
6
+ export declare const topoSaveOutput: z.ZodObject<{
7
+ createdAt: z.ZodString;
8
+ gitDirty: z.ZodBoolean;
9
+ gitSha: z.ZodOptional<z.ZodString>;
10
+ id: z.ZodString;
11
+ provisionCount: z.ZodNumber;
12
+ signalCount: z.ZodNumber;
13
+ trailCount: z.ZodNumber;
14
+ }, z.core.$strip>;
15
+ /** Output schema for a topo pin record. Shared across topo trails. */
16
+ export declare const topoPinOutput: z.ZodObject<{
17
+ createdAt: z.ZodString;
18
+ name: z.ZodString;
19
+ saveId: z.ZodString;
20
+ }, z.core.$strip>;
21
+ export declare const DEFAULT_APP_MODULE = "./src/app.ts";
22
+ export declare const DEFAULT_TOPO_HISTORY_LIMIT = 10;
23
+ export declare const LOCK_PATH = ".trails/trails.lock";
24
+ export declare const LEGACY_LOCK_PATH = ".trails/trailhead.lock";
25
+ /** Resolve the lockfile path, preferring the current name with legacy fallback. */
26
+ export declare const resolveLockPath: (trailsDir: string) => string;
27
+ export interface TopoSummaryReport {
28
+ readonly app: BriefReport;
29
+ readonly dbPath: string;
30
+ readonly list: SurveyListReport;
31
+ readonly lockExists: boolean;
32
+ readonly lockPath: string;
33
+ }
34
+ export interface TopoHistoryReport {
35
+ readonly dbPath: string;
36
+ readonly limit: number;
37
+ readonly pinCount: number;
38
+ readonly pins: TopoPinRecord[];
39
+ readonly saveCount: number;
40
+ readonly saves: TopoSaveRecord[];
41
+ }
42
+ export interface TopoExportReport {
43
+ readonly hash: string;
44
+ readonly lockPath: string;
45
+ readonly mapPath: string;
46
+ readonly save: TopoSaveRecord;
47
+ }
48
+ export interface TopoVerifyReport {
49
+ readonly committedHash: string;
50
+ readonly currentHash: string;
51
+ readonly lockPath: string;
52
+ readonly stale: false;
53
+ }
54
+ export declare const resolveRootDir: (cwd?: string) => string;
55
+ export declare const currentGitState: (rootDir: string) => {
56
+ readonly gitDirty: boolean;
57
+ readonly gitSha?: string;
58
+ };
59
+ export declare const topoCounts: (app: Topo) => Pick<TopoSaveRecord, "provisionCount" | "signalCount" | "trailCount">;
60
+ export declare const isolatedExampleInput: (name: string) => {
61
+ readonly module: string;
62
+ readonly rootDir: string;
63
+ };
64
+ export declare const createCurrentTopoSave: (app: Topo, options?: {
65
+ readonly rootDir?: string;
66
+ }) => TopoSaveRecord;
67
+ export declare const listTopoHistory: (options?: {
68
+ readonly limit?: number;
69
+ readonly rootDir?: string;
70
+ }) => TopoHistoryReport;
71
+ export declare const pinCurrentTopo: (app: Topo, input: {
72
+ readonly name: string;
73
+ readonly rootDir?: string;
74
+ }) => {
75
+ readonly pin: TopoPinRecord;
76
+ readonly save: TopoSaveRecord;
77
+ };
78
+ export declare const removeTopoPin: (input: {
79
+ readonly dryRun: boolean;
80
+ readonly name: string;
81
+ readonly rootDir?: string;
82
+ }) => {
83
+ readonly dryRun: boolean;
84
+ readonly pin?: TopoPinRecord;
85
+ readonly removed: boolean;
86
+ };
87
+ //# sourceMappingURL=topo-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-support.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { existsSync, mkdirSync, rmSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { getTopoPin, listTopoPins, listTopoSaves, pinTopoSave, unpinTopoSave, } from '@ontrails/core/internal/topo-saves';
6
+ import { persistEstablishedTopoSave } from '@ontrails/core/internal/topo-store';
7
+ import { openReadTrailsDb, openWriteTrailsDb, resolveTrailsDbPath, } from '@ontrails/core/internal/trails-db';
8
+ import { z } from 'zod';
9
+ /** Output schema for a topo save record. Shared across topo trails. */
10
+ export const topoSaveOutput = z.object({
11
+ createdAt: z.string(),
12
+ gitDirty: z.boolean(),
13
+ gitSha: z.string().optional(),
14
+ id: z.string(),
15
+ provisionCount: z.number(),
16
+ signalCount: z.number(),
17
+ trailCount: z.number(),
18
+ });
19
+ /** Output schema for a topo pin record. Shared across topo trails. */
20
+ export const topoPinOutput = z.object({
21
+ createdAt: z.string(),
22
+ name: z.string(),
23
+ saveId: z.string(),
24
+ });
25
+ export const DEFAULT_APP_MODULE = './src/app.ts';
26
+ export const DEFAULT_TOPO_HISTORY_LIMIT = 10;
27
+ export const LOCK_PATH = '.trails/trails.lock';
28
+ export const LEGACY_LOCK_PATH = '.trails/trailhead.lock';
29
+ /** Resolve the lockfile path, preferring the current name with legacy fallback. */
30
+ export const resolveLockPath = (trailsDir) => {
31
+ const primary = join(trailsDir, 'trails.lock');
32
+ if (existsSync(primary)) {
33
+ return primary;
34
+ }
35
+ const legacy = join(trailsDir, 'trailhead.lock');
36
+ return existsSync(legacy) ? legacy : primary;
37
+ };
38
+ const EXAMPLE_APP_MODULE = fileURLToPath(new URL('../app.ts', import.meta.url));
39
+ export const resolveRootDir = (cwd) => cwd ?? process.cwd();
40
+ const safeGit = (cwd, args) => {
41
+ const proc = Bun.spawnSync({
42
+ cmd: ['git', '-C', cwd, ...args],
43
+ stderr: 'ignore',
44
+ stdout: 'pipe',
45
+ });
46
+ if (!proc.success) {
47
+ return undefined;
48
+ }
49
+ const text = Buffer.from(proc.stdout).toString('utf8').trim();
50
+ return text.length === 0 ? undefined : text;
51
+ };
52
+ export const currentGitState = (rootDir) => {
53
+ const gitSha = safeGit(rootDir, ['rev-parse', 'HEAD']);
54
+ const status = safeGit(rootDir, ['status', '--porcelain']);
55
+ return {
56
+ gitDirty: (status?.length ?? 0) > 0,
57
+ ...(gitSha === undefined ? {} : { gitSha }),
58
+ };
59
+ };
60
+ export const topoCounts = (app) => ({
61
+ provisionCount: app.provisions.size,
62
+ signalCount: app.signals.size,
63
+ trailCount: app.trails.size,
64
+ });
65
+ const emptyTopoHistory = (dbPath, limit) => ({
66
+ dbPath,
67
+ limit,
68
+ pinCount: 0,
69
+ pins: [],
70
+ saveCount: 0,
71
+ saves: [],
72
+ });
73
+ const collectedTopoHistory = (dbPath, limit, pins, allSaves) => ({
74
+ dbPath,
75
+ limit,
76
+ pinCount: pins.length,
77
+ pins: [...pins],
78
+ saveCount: allSaves.length,
79
+ saves: allSaves.slice(0, limit),
80
+ });
81
+ const removeTopoPinWithDb = (input, pin, db) => input.dryRun
82
+ ? { dryRun: true, pin, removed: false }
83
+ : { dryRun: false, pin, removed: unpinTopoSave(db, input.name) };
84
+ export const isolatedExampleInput = (name) => {
85
+ const rootDir = join(tmpdir(), 'ontrails-trails-examples', name);
86
+ rmSync(rootDir, { force: true, recursive: true });
87
+ mkdirSync(rootDir, { recursive: true });
88
+ return {
89
+ module: EXAMPLE_APP_MODULE,
90
+ rootDir,
91
+ };
92
+ };
93
+ export const createCurrentTopoSave = (app, options) => {
94
+ const rootDir = resolveRootDir(options?.rootDir);
95
+ const db = openWriteTrailsDb({ rootDir });
96
+ try {
97
+ const result = persistEstablishedTopoSave(db, app, {
98
+ ...currentGitState(rootDir),
99
+ ...topoCounts(app),
100
+ });
101
+ if (result.isErr()) {
102
+ throw result.error;
103
+ }
104
+ return result.value;
105
+ }
106
+ finally {
107
+ db.close();
108
+ }
109
+ };
110
+ export const listTopoHistory = (options) => {
111
+ const rootDir = resolveRootDir(options?.rootDir);
112
+ const limit = options?.limit ?? DEFAULT_TOPO_HISTORY_LIMIT;
113
+ const dbPath = resolveTrailsDbPath({ rootDir });
114
+ if (!existsSync(dbPath)) {
115
+ return emptyTopoHistory(dbPath, limit);
116
+ }
117
+ const db = openReadTrailsDb({ rootDir });
118
+ try {
119
+ return collectedTopoHistory(dbPath, limit, listTopoPins(db), listTopoSaves(db));
120
+ }
121
+ finally {
122
+ db.close();
123
+ }
124
+ };
125
+ export const pinCurrentTopo = (app, input) => {
126
+ const rootDir = resolveRootDir(input.rootDir);
127
+ const db = openWriteTrailsDb({ rootDir });
128
+ try {
129
+ const result = persistEstablishedTopoSave(db, app, {
130
+ ...currentGitState(rootDir),
131
+ ...topoCounts(app),
132
+ });
133
+ if (result.isErr()) {
134
+ throw result.error;
135
+ }
136
+ const pin = pinTopoSave(db, {
137
+ name: input.name,
138
+ saveId: result.value.id,
139
+ });
140
+ return { pin, save: result.value };
141
+ }
142
+ finally {
143
+ db.close();
144
+ }
145
+ };
146
+ export const removeTopoPin = (input) => {
147
+ const rootDir = resolveRootDir(input.rootDir);
148
+ if (!existsSync(resolveTrailsDbPath({ rootDir }))) {
149
+ return { dryRun: input.dryRun, removed: false };
150
+ }
151
+ const db = input.dryRun
152
+ ? openReadTrailsDb({ rootDir })
153
+ : openWriteTrailsDb({ rootDir });
154
+ try {
155
+ const pin = getTopoPin(db, input.name);
156
+ if (pin === undefined) {
157
+ return { dryRun: input.dryRun, removed: false };
158
+ }
159
+ return removeTopoPinWithDb(input, pin, db);
160
+ }
161
+ finally {
162
+ db.close();
163
+ }
164
+ };
165
+ //# sourceMappingURL=topo-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-support.js","sourceRoot":"","sources":["../../../src/trails/topo-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare const topoUnpinTrail: import("@ontrails/core").Trail<{
2
+ dryRun: boolean;
3
+ name: string;
4
+ yes: boolean;
5
+ rootDir?: string | undefined;
6
+ }, {
7
+ dryRun: boolean;
8
+ removed: boolean;
9
+ pin?: {
10
+ createdAt: string;
11
+ name: string;
12
+ saveId: string;
13
+ } | undefined;
14
+ }>;
15
+ //# sourceMappingURL=topo-unpin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-unpin.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-unpin.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;;;;;;;;;;;EAyCzB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Result, ValidationError, trail } from '@ontrails/core';
2
+ import { z } from 'zod';
3
+ import { isolatedExampleInput, removeTopoPin, topoPinOutput, } from './topo-support.js';
4
+ export const topoUnpinTrail = trail('topo.unpin', {
5
+ blaze: (input, ctx) => {
6
+ if (input.dryRun !== true && input.yes !== true) {
7
+ return Result.err(new ValidationError('Refusing to remove a pin without `--yes` or `--dry-run`.'));
8
+ }
9
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
10
+ return Result.ok(removeTopoPin({ dryRun: input.dryRun, name: input.name, rootDir }));
11
+ },
12
+ description: 'Remove a named topo pin',
13
+ examples: [
14
+ {
15
+ input: {
16
+ ...isolatedExampleInput('topo-unpin'),
17
+ dryRun: true,
18
+ name: 'before-auth-refactor',
19
+ },
20
+ name: 'Preview pin removal',
21
+ },
22
+ ],
23
+ input: z.object({
24
+ dryRun: z
25
+ .boolean()
26
+ .default(true)
27
+ .describe('Preview the removal without changing state'),
28
+ name: z.string().describe('Pin name'),
29
+ rootDir: z.string().optional().describe('Workspace root directory'),
30
+ yes: z.boolean().default(false).describe('Confirm destructive changes'),
31
+ }),
32
+ intent: 'destroy',
33
+ output: z.object({
34
+ dryRun: z.boolean(),
35
+ pin: topoPinOutput.optional(),
36
+ removed: z.boolean(),
37
+ }),
38
+ });
39
+ //# sourceMappingURL=topo-unpin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-unpin.js","sourceRoot":"","sources":["../../../src/trails/topo-unpin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,EAAE;IAChD,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,0DAA0D,CAC3D,CACF,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,EAAE,CACd,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CACnE,CAAC;IACJ,CAAC;IACD,WAAW,EAAE,yBAAyB;IACtC,QAAQ,EAAE;QACR;YACE,KAAK,EAAE;gBACL,GAAG,oBAAoB,CAAC,YAAY,CAAC;gBACrC,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,sBAAsB;aAC7B;YACD,IAAI,EAAE,qBAAqB;SAC5B;KACF;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,4CAA4C,CAAC;QACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACnE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const topoVerifyTrail: import("@ontrails/core").Trail<{
2
+ module: string;
3
+ rootDir?: string | undefined;
4
+ }, import("./topo-support.js").TopoVerifyReport>;
5
+ //# sourceMappingURL=topo-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-verify.d.ts","sourceRoot":"","sources":["../../../src/trails/topo-verify.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe;;;gDAqB1B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { trail } from '@ontrails/core';
2
+ import { z } from 'zod';
3
+ import { loadApp } from './load-app.js';
4
+ import { verifyCurrentTopo } from './topo-read-support.js';
5
+ import { DEFAULT_APP_MODULE } from './topo-support.js';
6
+ export const topoVerifyTrail = trail('topo.verify', {
7
+ blaze: async (input, ctx) => {
8
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
9
+ const app = await loadApp(input.module, rootDir);
10
+ return verifyCurrentTopo(app, { rootDir });
11
+ },
12
+ description: 'Verify that the committed lockfile matches the current topo',
13
+ input: z.object({
14
+ module: z
15
+ .string()
16
+ .default(DEFAULT_APP_MODULE)
17
+ .describe('Path to the app module'),
18
+ rootDir: z.string().optional().describe('Workspace root directory'),
19
+ }),
20
+ intent: 'read',
21
+ output: z.object({
22
+ committedHash: z.string(),
23
+ currentHash: z.string(),
24
+ lockPath: z.string(),
25
+ stale: z.literal(false),
26
+ }),
27
+ });
28
+ //# sourceMappingURL=topo-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-verify.js","sourceRoot":"","sources":["../../../src/trails/topo-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE;IAClD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,WAAW,EAAE,6DAA6D;IAC1E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,OAAO,CAAC,kBAAkB,CAAC;aAC3B,QAAQ,CAAC,wBAAwB,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACpE,CAAC;IACF,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;KACxB,CAAC;CACH,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const topoTrail: import("@ontrails/core").Trail<{
2
+ module: string;
3
+ rootDir?: string | undefined;
4
+ }, import("./topo-support.js").TopoSummaryReport>;
5
+ //# sourceMappingURL=topo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo.d.ts","sourceRoot":"","sources":["../../../src/trails/topo.ts"],"names":[],"mappings":"AAkDA,eAAO,MAAM,SAAS;;;iDAsBpB,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { Result, trail } from '@ontrails/core';
2
+ import { z } from 'zod';
3
+ import { loadApp } from './load-app.js';
4
+ import { buildTopoSummary } from './topo-read-support.js';
5
+ import { DEFAULT_APP_MODULE } from './topo-support.js';
6
+ const summaryOutput = z.object({
7
+ app: z.object({
8
+ contractVersion: z.string(),
9
+ features: z.object({
10
+ detours: z.boolean(),
11
+ examples: z.boolean(),
12
+ outputSchemas: z.boolean(),
13
+ provisions: z.boolean(),
14
+ signals: z.boolean(),
15
+ }),
16
+ name: z.string(),
17
+ provisions: z.number(),
18
+ signals: z.number(),
19
+ trails: z.number(),
20
+ version: z.string(),
21
+ }),
22
+ dbPath: z.string(),
23
+ list: z.object({
24
+ count: z.number(),
25
+ entries: z.array(z.object({
26
+ examples: z.number(),
27
+ id: z.string(),
28
+ kind: z.string(),
29
+ safety: z.string(),
30
+ })),
31
+ provisionCount: z.number(),
32
+ provisions: z.array(z.object({
33
+ description: z.string().nullable(),
34
+ health: z.enum(['available', 'none']),
35
+ id: z.string(),
36
+ kind: z.literal('provision'),
37
+ lifetime: z.literal('singleton'),
38
+ usedBy: z.array(z.string()),
39
+ })),
40
+ }),
41
+ lockExists: z.boolean(),
42
+ lockPath: z.string(),
43
+ });
44
+ export const topoTrail = trail('topo', {
45
+ blaze: async (input, ctx) => {
46
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
47
+ const app = await loadApp(input.module, rootDir);
48
+ return Result.ok(buildTopoSummary(app, { rootDir }));
49
+ },
50
+ description: 'Show the current topo summary and entry list',
51
+ examples: [
52
+ {
53
+ input: {},
54
+ name: 'Show the current topo summary',
55
+ },
56
+ ],
57
+ input: z.object({
58
+ module: z
59
+ .string()
60
+ .default(DEFAULT_APP_MODULE)
61
+ .describe('Path to the app module'),
62
+ rootDir: z.string().optional().describe('Workspace root directory'),
63
+ }),
64
+ intent: 'read',
65
+ output: summaryOutput,
66
+ });
67
+ //# sourceMappingURL=topo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo.js","sourceRoot":"","sources":["../../../src/trails/topo.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export declare const wardenTrail: import("@ontrails/core").Trail<{
7
7
  driftOnly: boolean;
8
- format: "summary" | "text" | "github" | "json";
8
+ format: "text" | "summary" | "github" | "json";
9
9
  lintOnly: boolean;
10
10
  rootDir?: string | undefined;
11
11
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"warden.d.ts","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,eAAO,MAAM,WAAW;;;;;;;;;;;;EAiFtB,CAAC"}
1
+ {"version":3,"file":"warden.d.ts","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,eAAO,MAAM,WAAW;;;;;;;;;;;;EAkFtB,CAAC"}
@@ -11,6 +11,33 @@ import { loadApp } from './load-app.js';
11
11
  // Trail definition
12
12
  // ---------------------------------------------------------------------------
13
13
  export const wardenTrail = trail('warden', {
14
+ blaze: async (input, ctx) => {
15
+ const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
16
+ // oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
17
+ const topo = await loadApp('./src/app.ts', rootDir).catch(() => undefined);
18
+ const report = await runWarden({
19
+ driftOnly: input.driftOnly,
20
+ lintOnly: input.lintOnly,
21
+ rootDir,
22
+ topo,
23
+ });
24
+ const formatters = {
25
+ github: formatGitHubAnnotations,
26
+ json: formatJson,
27
+ summary: formatSummary,
28
+ text: formatWardenReport,
29
+ };
30
+ const formatter = formatters[input.format] ?? formatWardenReport;
31
+ const formatted = formatter(report);
32
+ return Result.ok({
33
+ diagnostics: report.diagnostics,
34
+ drift: report.drift,
35
+ errorCount: report.errorCount,
36
+ formatted,
37
+ passed: report.passed,
38
+ warnCount: report.warnCount,
39
+ });
40
+ },
14
41
  description: 'Run governance checks (lint + drift)',
15
42
  examples: [
16
43
  {
@@ -47,6 +74,7 @@ export const wardenTrail = trail('warden', {
47
74
  })),
48
75
  drift: z
49
76
  .object({
77
+ blockedReason: z.string().optional(),
50
78
  committedHash: z.string().nullable(),
51
79
  currentHash: z.string(),
52
80
  stale: z.boolean(),
@@ -57,32 +85,5 @@ export const wardenTrail = trail('warden', {
57
85
  passed: z.boolean(),
58
86
  warnCount: z.number(),
59
87
  }),
60
- run: async (input, ctx) => {
61
- const rootDir = input.rootDir ?? ctx.cwd ?? process.cwd();
62
- // oxlint-disable-next-line prefer-await-to-then -- catch converts rejection to undefined cleanly
63
- const topo = await loadApp('./src/app.ts', rootDir).catch(() => undefined);
64
- const report = await runWarden({
65
- driftOnly: input.driftOnly,
66
- lintOnly: input.lintOnly,
67
- rootDir,
68
- topo,
69
- });
70
- const formatters = {
71
- github: formatGitHubAnnotations,
72
- json: formatJson,
73
- summary: formatSummary,
74
- text: formatWardenReport,
75
- };
76
- const formatter = formatters[input.format] ?? formatWardenReport;
77
- const formatted = formatter(report);
78
- return Result.ok({
79
- diagnostics: report.diagnostics,
80
- drift: report.drift,
81
- errorCount: report.errorCount,
82
- formatted,
83
- passed: report.passed,
84
- warnCount: report.warnCount,
85
- });
86
- },
87
88
  });
88
89
  //# sourceMappingURL=warden.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"warden.js","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"warden.js","sourceRoot":"","sources":["../../../src/trails/warden.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"root":["../src/app.ts","../src/clack.ts","../src/cli.ts","../src/trails/add-surface.ts","../src/trails/add-trail.ts","../src/trails/add-verify.ts","../src/trails/create-scaffold.ts","../src/trails/create.ts","../src/trails/guide.ts","../src/trails/load-app.ts","../src/trails/project.ts","../src/trails/survey.ts","../src/trails/warden.ts","../bin/trails.ts"],"version":"5.9.3"}
1
+ {"root":["../src/app.ts","../src/clack.ts","../src/cli.ts","../src/trails/add-trail.ts","../src/trails/add-trailhead.ts","../src/trails/add-verify.ts","../src/trails/create-scaffold.ts","../src/trails/create.ts","../src/trails/dev-clean.ts","../src/trails/dev-reset.ts","../src/trails/dev-stats.ts","../src/trails/dev-support.ts","../src/trails/draft-promote.ts","../src/trails/guide.ts","../src/trails/load-app.ts","../src/trails/project.ts","../src/trails/survey.ts","../src/trails/topo-constants.ts","../src/trails/topo-export.ts","../src/trails/topo-history.ts","../src/trails/topo-pin.ts","../src/trails/topo-read-support.ts","../src/trails/topo-reports.ts","../src/trails/topo-show.ts","../src/trails/topo-store-support.ts","../src/trails/topo-support.ts","../src/trails/topo-unpin.ts","../src/trails/topo-verify.ts","../src/trails/topo.ts","../src/trails/warden.ts","../bin/trails.ts"],"version":"5.9.3"}