@cleocode/contracts 2026.5.95 → 2026.5.97

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 (121) hide show
  1. package/dist/__tests__/enums.test.d.ts +14 -0
  2. package/dist/__tests__/enums.test.d.ts.map +1 -0
  3. package/dist/__tests__/enums.test.js +75 -0
  4. package/dist/__tests__/enums.test.js.map +1 -0
  5. package/dist/__tests__/jobs.test.d.ts +11 -0
  6. package/dist/__tests__/jobs.test.d.ts.map +1 -0
  7. package/dist/__tests__/jobs.test.js +48 -0
  8. package/dist/__tests__/jobs.test.js.map +1 -0
  9. package/dist/__tests__/memory-wire-shapes.test.d.ts +19 -0
  10. package/dist/__tests__/memory-wire-shapes.test.d.ts.map +1 -0
  11. package/dist/__tests__/memory-wire-shapes.test.js +119 -0
  12. package/dist/__tests__/memory-wire-shapes.test.js.map +1 -0
  13. package/dist/__tests__/operation-def.test.d.ts +20 -0
  14. package/dist/__tests__/operation-def.test.d.ts.map +1 -0
  15. package/dist/__tests__/operation-def.test.js +111 -0
  16. package/dist/__tests__/operation-def.test.js.map +1 -0
  17. package/dist/__tests__/provenance.test.d.ts +18 -0
  18. package/dist/__tests__/provenance.test.d.ts.map +1 -0
  19. package/dist/__tests__/provenance.test.js +142 -0
  20. package/dist/__tests__/provenance.test.js.map +1 -0
  21. package/dist/__tests__/scaffold-diagnostics.test.d.ts +19 -0
  22. package/dist/__tests__/scaffold-diagnostics.test.d.ts.map +1 -0
  23. package/dist/__tests__/scaffold-diagnostics.test.js +70 -0
  24. package/dist/__tests__/scaffold-diagnostics.test.js.map +1 -0
  25. package/dist/dispatch/identity.d.ts +72 -0
  26. package/dist/dispatch/identity.d.ts.map +1 -0
  27. package/dist/dispatch/identity.js +72 -0
  28. package/dist/dispatch/identity.js.map +1 -0
  29. package/dist/dispatch/operation-def.d.ts +92 -0
  30. package/dist/dispatch/operation-def.d.ts.map +1 -0
  31. package/dist/dispatch/operation-def.js +31 -0
  32. package/dist/dispatch/operation-def.js.map +1 -0
  33. package/dist/doctor.d.ts +52 -0
  34. package/dist/doctor.d.ts.map +1 -1
  35. package/dist/doctor.js +7 -0
  36. package/dist/doctor.js.map +1 -1
  37. package/dist/enums.d.ts +123 -0
  38. package/dist/enums.d.ts.map +1 -0
  39. package/dist/enums.js +139 -0
  40. package/dist/enums.js.map +1 -0
  41. package/dist/index.d.ts +16 -3
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +4 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/jobs.d.ts +39 -0
  46. package/dist/jobs.d.ts.map +1 -0
  47. package/dist/jobs.js +19 -0
  48. package/dist/jobs.js.map +1 -0
  49. package/dist/memory/budgeted.d.ts +67 -0
  50. package/dist/memory/budgeted.d.ts.map +1 -0
  51. package/dist/memory/budgeted.js +17 -0
  52. package/dist/memory/budgeted.js.map +1 -0
  53. package/dist/memory/fetch.d.ts +58 -0
  54. package/dist/memory/fetch.d.ts.map +1 -0
  55. package/dist/memory/fetch.js +19 -0
  56. package/dist/memory/fetch.js.map +1 -0
  57. package/dist/memory/observe.d.ts +158 -0
  58. package/dist/memory/observe.d.ts.map +1 -0
  59. package/dist/memory/observe.js +46 -0
  60. package/dist/memory/observe.js.map +1 -0
  61. package/dist/memory/search.d.ts +137 -0
  62. package/dist/memory/search.d.ts.map +1 -0
  63. package/dist/memory/search.js +22 -0
  64. package/dist/memory/search.js.map +1 -0
  65. package/dist/memory/timeline.d.ts +89 -0
  66. package/dist/memory/timeline.d.ts.map +1 -0
  67. package/dist/memory/timeline.js +22 -0
  68. package/dist/memory/timeline.js.map +1 -0
  69. package/dist/operations/focus.d.ts +199 -0
  70. package/dist/operations/focus.d.ts.map +1 -0
  71. package/dist/operations/focus.js +15 -0
  72. package/dist/operations/focus.js.map +1 -0
  73. package/dist/operations/index.d.ts +1 -0
  74. package/dist/operations/index.d.ts.map +1 -1
  75. package/dist/operations/index.js +1 -0
  76. package/dist/operations/index.js.map +1 -1
  77. package/dist/operations/session.d.ts +54 -0
  78. package/dist/operations/session.d.ts.map +1 -1
  79. package/dist/operations/tasks.d.ts +38 -0
  80. package/dist/operations/tasks.d.ts.map +1 -1
  81. package/dist/operations/worktree.d.ts +138 -1
  82. package/dist/operations/worktree.d.ts.map +1 -1
  83. package/dist/provenance.d.ts +257 -0
  84. package/dist/provenance.d.ts.map +1 -0
  85. package/dist/provenance.js +42 -0
  86. package/dist/provenance.js.map +1 -0
  87. package/dist/release/plan.d.ts +7 -7
  88. package/dist/scaffold-diagnostics.d.ts +110 -0
  89. package/dist/scaffold-diagnostics.d.ts.map +1 -0
  90. package/dist/scaffold-diagnostics.js +28 -0
  91. package/dist/scaffold-diagnostics.js.map +1 -0
  92. package/dist/session.d.ts +37 -0
  93. package/dist/session.d.ts.map +1 -1
  94. package/dist/session.js.map +1 -1
  95. package/dist/tasks/archive.d.ts +3 -3
  96. package/package.json +42 -2
  97. package/src/__tests__/enums.test.ts +114 -0
  98. package/src/__tests__/jobs.test.ts +76 -0
  99. package/src/__tests__/memory-wire-shapes.test.ts +371 -0
  100. package/src/__tests__/operation-def.test.ts +185 -0
  101. package/src/__tests__/provenance.test.ts +259 -0
  102. package/src/__tests__/scaffold-diagnostics.test.ts +137 -0
  103. package/src/dispatch/identity.ts +109 -0
  104. package/src/dispatch/operation-def.ts +102 -0
  105. package/src/doctor.ts +62 -0
  106. package/src/enums.ts +144 -0
  107. package/src/index.ts +89 -2
  108. package/src/jobs.ts +45 -0
  109. package/src/memory/budgeted.ts +75 -0
  110. package/src/memory/fetch.ts +66 -0
  111. package/src/memory/observe.ts +176 -0
  112. package/src/memory/search.ts +145 -0
  113. package/src/memory/timeline.ts +100 -0
  114. package/src/operations/focus.ts +226 -0
  115. package/src/operations/index.ts +1 -0
  116. package/src/operations/session.ts +56 -0
  117. package/src/operations/tasks.ts +40 -0
  118. package/src/operations/worktree.ts +149 -1
  119. package/src/provenance.ts +335 -0
  120. package/src/scaffold-diagnostics.ts +119 -0
  121. package/src/session.ts +37 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Scaffold + diagnostic result contracts.
3
+ *
4
+ * Canonical home for the result shapes produced by CLEO's directory/file
5
+ * scaffolding utilities (`ensure*`) and read-only health-check utilities
6
+ * (`check*`). Promoted to `@cleocode/contracts` in Phase 0a of the
7
+ * SG-ARCH-SOLID Saga to eliminate duplicate definitions that previously
8
+ * lived in `packages/core/src/scaffold.ts`, `injection.ts`, `hooks.ts`,
9
+ * `schema-management.ts`, and `validation/doctor/checks.ts`.
10
+ *
11
+ * Consolidated types:
12
+ * - {@link ScaffoldResult} — was defined 3× in core (scaffold/injection/hooks)
13
+ * - {@link CheckStatus} — was defined 2× in core (scaffold/doctor checks)
14
+ * - {@link CheckResult} — was defined 2× in core (scaffold/doctor checks)
15
+ * - {@link HookCheckResult} — single canonical definition (no prior duplication;
16
+ * promoted here to keep all scaffold-diagnostic shapes co-located)
17
+ *
18
+ * NOT consolidated (intentional — different domain shape):
19
+ * - `CheckResult` in `packages/core/src/schema-management.ts` is a
20
+ * `{ ok, installed, bundled, missing, stale }` schema-install report,
21
+ * unrelated to diagnostic checks. It retains its local definition and
22
+ * will be renamed in a follow-up slice if/when its naming collision
23
+ * warrants a separate cleanup task.
24
+ *
25
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 (Phase 0a)
26
+ */
27
+ /**
28
+ * Result of an `ensure*` scaffolding operation.
29
+ *
30
+ * All ensure functions in `@cleocode/core` are idempotent — they may
31
+ * create, repair, or skip the requested resource and report which
32
+ * action they took.
33
+ *
34
+ * Originally defined in:
35
+ * - `packages/core/src/scaffold.ts`
36
+ * - `packages/core/src/injection.ts`
37
+ * - `packages/core/src/hooks.ts`
38
+ *
39
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 (Phase 0a)
40
+ */
41
+ export interface ScaffoldResult {
42
+ /** What action was taken: created, repaired, or skipped. */
43
+ action: 'created' | 'repaired' | 'skipped';
44
+ /** Filesystem path that was operated on. */
45
+ path: string;
46
+ /** Human-readable explanation of the result. */
47
+ details?: string;
48
+ }
49
+ /**
50
+ * Status of a `check*` diagnostic.
51
+ *
52
+ * Originally defined in:
53
+ * - `packages/core/src/scaffold.ts`
54
+ * - `packages/core/src/validation/doctor/checks.ts`
55
+ *
56
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 (Phase 0a)
57
+ */
58
+ export type CheckStatus = 'passed' | 'failed' | 'warning' | 'info';
59
+ /**
60
+ * Result of a `check*` diagnostic (used by `cleo doctor` and scaffold
61
+ * health checks).
62
+ *
63
+ * Originally defined in:
64
+ * - `packages/core/src/scaffold.ts`
65
+ * - `packages/core/src/validation/doctor/checks.ts`
66
+ *
67
+ * The scaffold.ts and doctor/checks.ts definitions were structurally
68
+ * identical; this is the consolidated shape with TSDoc preserved.
69
+ *
70
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 (Phase 0a)
71
+ */
72
+ export interface CheckResult {
73
+ /** Unique check identifier (e.g. "cleo_structure", "sqlite_db"). */
74
+ id: string;
75
+ /** Category grouping (e.g. "scaffold", "global"). */
76
+ category: string;
77
+ /** Diagnostic outcome: passed, failed, warning, or info. */
78
+ status: CheckStatus;
79
+ /** Human-readable description of the check result. */
80
+ message: string;
81
+ /** Structured metadata about the check (paths, sizes, missing items). */
82
+ details: Record<string, unknown>;
83
+ /** Suggested CLI command to fix the issue, or null if passed. */
84
+ fix: string | null;
85
+ }
86
+ /**
87
+ * Result of a git-hook installation check.
88
+ *
89
+ * Reports whether a managed hook (commit-msg, pre-commit, pre-push) is
90
+ * installed in `.git/hooks/` and whether the installed copy matches the
91
+ * source template under `packages/core/templates/git-hooks/`.
92
+ *
93
+ * Originally defined in `packages/core/src/hooks.ts`. Promoted here to
94
+ * co-locate all scaffold-diagnostic shapes.
95
+ *
96
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 (Phase 0a)
97
+ */
98
+ export interface HookCheckResult {
99
+ /** Hook name (commit-msg, pre-commit, pre-push). */
100
+ hook: string;
101
+ /** Whether the hook is installed at `.git/hooks/<hook>`. */
102
+ installed: boolean;
103
+ /** Whether the installed hook bytes match the source template. */
104
+ current: boolean;
105
+ /** Absolute path of the source template that should be installed. */
106
+ sourcePath: string;
107
+ /** Absolute path where the hook is (or would be) installed. */
108
+ installedPath: string;
109
+ }
110
+ //# sourceMappingURL=scaffold-diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-diagnostics.d.ts","sourceRoot":"","sources":["../src/scaffold-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC7B,4DAA4D;IAC5D,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,MAAM,EAAE,WAAW,CAAC;IACpB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,iEAAiE;IACjE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAID;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,aAAa,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Scaffold + diagnostic result contracts.
3
+ *
4
+ * Canonical home for the result shapes produced by CLEO's directory/file
5
+ * scaffolding utilities (`ensure*`) and read-only health-check utilities
6
+ * (`check*`). Promoted to `@cleocode/contracts` in Phase 0a of the
7
+ * SG-ARCH-SOLID Saga to eliminate duplicate definitions that previously
8
+ * lived in `packages/core/src/scaffold.ts`, `injection.ts`, `hooks.ts`,
9
+ * `schema-management.ts`, and `validation/doctor/checks.ts`.
10
+ *
11
+ * Consolidated types:
12
+ * - {@link ScaffoldResult} — was defined 3× in core (scaffold/injection/hooks)
13
+ * - {@link CheckStatus} — was defined 2× in core (scaffold/doctor checks)
14
+ * - {@link CheckResult} — was defined 2× in core (scaffold/doctor checks)
15
+ * - {@link HookCheckResult} — single canonical definition (no prior duplication;
16
+ * promoted here to keep all scaffold-diagnostic shapes co-located)
17
+ *
18
+ * NOT consolidated (intentional — different domain shape):
19
+ * - `CheckResult` in `packages/core/src/schema-management.ts` is a
20
+ * `{ ok, installed, bundled, missing, stale }` schema-install report,
21
+ * unrelated to diagnostic checks. It retains its local definition and
22
+ * will be renamed in a follow-up slice if/when its naming collision
23
+ * warrants a separate cleanup task.
24
+ *
25
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 (Phase 0a)
26
+ */
27
+ export {};
28
+ //# sourceMappingURL=scaffold-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-diagnostics.js","sourceRoot":"","sources":["../src/scaffold-diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
package/dist/session.d.ts CHANGED
@@ -131,6 +131,43 @@ export interface Session {
131
131
  gradeMode?: boolean;
132
132
  /** ID of the provider adapter used for this session. @defaultValue undefined */
133
133
  providerId?: string | null;
134
+ /**
135
+ * Human-readable agent handle for multi-agent isolation (T9975).
136
+ *
137
+ * Set via `cleo session start --agent <handle>`. Allows concurrent agent
138
+ * sessions to be distinguished in `cleo session list --all` and enables
139
+ * `cleo briefing` env-precedence detection when `CLEO_SESSION_ID` is set.
140
+ *
141
+ * @defaultValue undefined
142
+ */
143
+ agentHandle?: string | null;
144
+ /**
145
+ * Denormalised scope type ("global" | "epic") for fast index queries (T9975).
146
+ *
147
+ * Derived from `scope.type` at session creation; cached in the DB column
148
+ * `scope_kind` to avoid JSON parsing in hot paths.
149
+ *
150
+ * @defaultValue undefined
151
+ */
152
+ scopeKind?: string | null;
153
+ /**
154
+ * Denormalised scope target ID (e.g. "T9964") for epic sessions (T9975).
155
+ *
156
+ * Derived from `scope.epicId` / `scope.rootTaskId` at session creation.
157
+ * NULL for global sessions.
158
+ *
159
+ * @defaultValue undefined
160
+ */
161
+ scopeId?: string | null;
162
+ /**
163
+ * ISO 8601 timestamp of the last mutation on this session (T9975).
164
+ *
165
+ * Updated on session start, task focus change, and task completion.
166
+ * Used by the idle auto-end lifecycle hook and `cleo session list --all`.
167
+ *
168
+ * @defaultValue undefined
169
+ */
170
+ lastActivity?: string | null;
134
171
  }
135
172
  /**
136
173
  * Result of a session start operation.
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmJH;;;;;;;;;;GAUG;AACH,MAAM,OAAO,WAAW;IACL,SAAS,CAAY;IAEtC,YAAY,QAAmB;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,iDAAiD;IACjD,MAAM,CAAC,IAAI,CAAC,QAAmB;QAC7B,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,4BAA4B;IAC5B,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,+CAA+C;IAC/C,cAAc,CAAC,GAAG,QAAyB;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,QAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,mEAAmE;IACnE,WAAW,CAAC,IAAY,EAAE,UAAmB;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACzC,IAAI,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,UAAU,CAAC,KAA8B,EAAE,UAAU,GAAG,IAAI;QAC1D,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,UAAU;QACR,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,4DAA4D;IAC5D,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,gCAAgC;IAChC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,CAAC;CACF"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAwLH;;;;;;;;;;GAUG;AACH,MAAM,OAAO,WAAW;IACL,SAAS,CAAY;IAEtC,YAAY,QAAmB;QAC7B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,iDAAiD;IACjD,MAAM,CAAC,IAAI,CAAC,QAAmB;QAC7B,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,4BAA4B;IAC5B,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,+CAA+C;IAC/C,cAAc,CAAC,GAAG,QAAyB;QACzC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,QAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,mEAAmE;IACnE,WAAW,CAAC,IAAY,EAAE,UAAmB;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACzC,IAAI,UAAU,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,UAAU,CAAC,KAA8B,EAAE,UAAU,GAAG,IAAI;QAC1D,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,UAAU;QACR,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,4DAA4D;IAC5D,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,gCAAgC;IAChC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3C,CAAC;CACF"}
@@ -51,8 +51,8 @@ import { z } from 'zod';
51
51
  export declare const ArchiveReason: z.ZodEnum<{
52
52
  cancelled: "cancelled";
53
53
  superseded: "superseded";
54
- reconciled: "reconciled";
55
54
  verified: "verified";
55
+ reconciled: "reconciled";
56
56
  shadowed: "shadowed";
57
57
  "completed-unverified": "completed-unverified";
58
58
  }>;
@@ -67,8 +67,8 @@ export declare const ArchiveReason: z.ZodEnum<{
67
67
  export declare const ArchiveReasonSchema: z.ZodEnum<{
68
68
  cancelled: "cancelled";
69
69
  superseded: "superseded";
70
- reconciled: "reconciled";
71
70
  verified: "verified";
71
+ reconciled: "reconciled";
72
72
  shadowed: "shadowed";
73
73
  "completed-unverified": "completed-unverified";
74
74
  }>;
@@ -93,7 +93,7 @@ export type ArchiveReasonValue = z.infer<typeof ArchiveReason>;
93
93
  * Useful when a Drizzle column or a discriminated union needs the raw
94
94
  * tuple form (e.g. `text('archive_reason', { enum: ARCHIVE_REASON_VALUES })`).
95
95
  */
96
- export declare const ARCHIVE_REASON_VALUES: ("cancelled" | "superseded" | "reconciled" | "verified" | "shadowed" | "completed-unverified")[];
96
+ export declare const ARCHIVE_REASON_VALUES: ("cancelled" | "superseded" | "verified" | "reconciled" | "shadowed" | "completed-unverified")[];
97
97
  /**
98
98
  * The single tombstone value within {@link ArchiveReason}.
99
99
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleocode/contracts",
3
- "version": "2026.5.95",
3
+ "version": "2026.5.97",
4
4
  "description": "Domain types, interfaces, and contracts for the CLEO ecosystem",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -10,6 +10,30 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js"
12
12
  },
13
+ "./provenance": {
14
+ "types": "./dist/provenance.d.ts",
15
+ "import": "./dist/provenance.js"
16
+ },
17
+ "./provenance.js": {
18
+ "types": "./dist/provenance.d.ts",
19
+ "import": "./dist/provenance.js"
20
+ },
21
+ "./jobs": {
22
+ "types": "./dist/jobs.d.ts",
23
+ "import": "./dist/jobs.js"
24
+ },
25
+ "./jobs.js": {
26
+ "types": "./dist/jobs.d.ts",
27
+ "import": "./dist/jobs.js"
28
+ },
29
+ "./enums": {
30
+ "types": "./dist/enums.d.ts",
31
+ "import": "./dist/enums.js"
32
+ },
33
+ "./enums.js": {
34
+ "types": "./dist/enums.d.ts",
35
+ "import": "./dist/enums.js"
36
+ },
13
37
  "./nexus-contract-ops": {
14
38
  "types": "./dist/nexus-contract-ops.d.ts",
15
39
  "import": "./dist/nexus-contract-ops.js"
@@ -50,6 +74,14 @@
50
74
  "types": "./dist/nexus-tasks-bridge-ops.d.ts",
51
75
  "import": "./dist/nexus-tasks-bridge-ops.js"
52
76
  },
77
+ "./dispatch/*": {
78
+ "types": "./dist/dispatch/*.d.ts",
79
+ "import": "./dist/dispatch/*.js"
80
+ },
81
+ "./dispatch/*.js": {
82
+ "types": "./dist/dispatch/*.d.ts",
83
+ "import": "./dist/dispatch/*.js"
84
+ },
53
85
  "./operations/*": {
54
86
  "types": "./dist/operations/*.d.ts",
55
87
  "import": "./dist/operations/*.js"
@@ -73,6 +105,14 @@
73
105
  "./memory/*.js": {
74
106
  "types": "./dist/memory/*.d.ts",
75
107
  "import": "./dist/memory/*.js"
108
+ },
109
+ "./*": {
110
+ "types": "./dist/*.d.ts",
111
+ "import": "./dist/*.js"
112
+ },
113
+ "./*.js": {
114
+ "types": "./dist/*.d.ts",
115
+ "import": "./dist/*.js"
76
116
  }
77
117
  },
78
118
  "engines": {
@@ -98,7 +138,7 @@
98
138
  "dependencies": {
99
139
  "zod": "^4.3.6",
100
140
  "zod-to-json-schema": "^3.25.2",
101
- "@cleocode/lafs": "2026.5.95"
141
+ "@cleocode/lafs": "2026.5.97"
102
142
  },
103
143
  "scripts": {
104
144
  "build": "tsc -b --force && node scripts/emit-schemas.mjs",
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Structural-equivalence + value-set tests for the task-axis enum
3
+ * constants promoted in Phase 0c (T9955).
4
+ *
5
+ * These tests pin the runtime value sets of the 6 `as const` arrays
6
+ * (`TASK_KINDS`, `TASK_SCOPES`, `TASK_SEVERITIES`, `TASK_SIZES`,
7
+ * `ARCHIVE_REASONS`, `TASK_RELATION_TYPES`) so that:
8
+ * - The Drizzle row-type narrowing in `tasks-schema.ts` stays byte-identical.
9
+ * - The DB CHECK constraints they back keep their canonical value list.
10
+ *
11
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 · T9955 (Phase 0c)
12
+ */
13
+
14
+ import { describe, expect, it } from 'vitest';
15
+ import {
16
+ ARCHIVE_REASONS,
17
+ TASK_KINDS,
18
+ TASK_RELATION_TYPES,
19
+ TASK_SCOPES,
20
+ TASK_SEVERITIES,
21
+ TASK_SIZES,
22
+ } from '../enums.js';
23
+
24
+ // ─── Compile-time readonly-tuple guarantees ─────────────────────────
25
+
26
+ /**
27
+ * Compile-time assertion that `T` is a readonly tuple (not a mutable
28
+ * `string[]`). Drizzle's `text({ enum })` narrowing depends on the
29
+ * literal tuple shape, so accidental widening MUST fail at build time.
30
+ */
31
+ type _AssertReadonlyTuple<T extends readonly string[]> = T;
32
+
33
+ type _PinTaskKinds = _AssertReadonlyTuple<typeof TASK_KINDS>;
34
+ type _PinTaskScopes = _AssertReadonlyTuple<typeof TASK_SCOPES>;
35
+ type _PinTaskSeverities = _AssertReadonlyTuple<typeof TASK_SEVERITIES>;
36
+ type _PinTaskSizes = _AssertReadonlyTuple<typeof TASK_SIZES>;
37
+ type _PinArchiveReasons = _AssertReadonlyTuple<typeof ARCHIVE_REASONS>;
38
+ type _PinTaskRelationTypes = _AssertReadonlyTuple<typeof TASK_RELATION_TYPES>;
39
+
40
+ // ─── Runtime value-set assertions ───────────────────────────────────
41
+
42
+ describe('task-axis enum constants', () => {
43
+ it('TASK_KINDS holds the 6 canonical task kinds', () => {
44
+ expect(TASK_KINDS).toEqual(['work', 'research', 'experiment', 'bug', 'spike', 'release']);
45
+ });
46
+
47
+ it('TASK_SCOPES holds project / feature / unit (in canonical order)', () => {
48
+ expect(TASK_SCOPES).toEqual(['project', 'feature', 'unit']);
49
+ });
50
+
51
+ it('TASK_SEVERITIES holds P0 through P3 in increasing severity order', () => {
52
+ expect(TASK_SEVERITIES).toEqual(['P0', 'P1', 'P2', 'P3']);
53
+ });
54
+
55
+ it('TASK_SIZES holds small / medium / large (CLEO avoids time estimates)', () => {
56
+ expect(TASK_SIZES).toEqual(['small', 'medium', 'large']);
57
+ });
58
+
59
+ it('ARCHIVE_REASONS holds exactly the 6 truth-grade closure reasons', () => {
60
+ expect(ARCHIVE_REASONS).toEqual([
61
+ 'verified',
62
+ 'reconciled',
63
+ 'superseded',
64
+ 'shadowed',
65
+ 'cancelled',
66
+ 'completed-unverified',
67
+ ]);
68
+ });
69
+
70
+ it('TASK_RELATION_TYPES includes "groups" (ADR-073 Saga membership)', () => {
71
+ expect(TASK_RELATION_TYPES).toContain('groups');
72
+ expect(TASK_RELATION_TYPES).toEqual([
73
+ 'related',
74
+ 'blocks',
75
+ 'duplicates',
76
+ 'absorbs',
77
+ 'fixes',
78
+ 'extends',
79
+ 'supersedes',
80
+ 'groups',
81
+ ]);
82
+ });
83
+
84
+ it('All enum arrays are non-empty readonly tuples', () => {
85
+ expect(TASK_KINDS.length).toBeGreaterThan(0);
86
+ expect(TASK_SCOPES.length).toBeGreaterThan(0);
87
+ expect(TASK_SEVERITIES.length).toBeGreaterThan(0);
88
+ expect(TASK_SIZES.length).toBeGreaterThan(0);
89
+ expect(ARCHIVE_REASONS.length).toBeGreaterThan(0);
90
+ expect(TASK_RELATION_TYPES.length).toBeGreaterThan(0);
91
+ });
92
+
93
+ // The six `_Pin…` aliases above will fail compilation if any const
94
+ // array is accidentally widened to `string[]`. The reference below
95
+ // prevents unused-locals diagnostics from removing them.
96
+ it('compile-time readonly-tuple pins are wired (no-op at runtime)', () => {
97
+ const pinned: [
98
+ _PinTaskKinds,
99
+ _PinTaskScopes,
100
+ _PinTaskSeverities,
101
+ _PinTaskSizes,
102
+ _PinArchiveReasons,
103
+ _PinTaskRelationTypes,
104
+ ] = [
105
+ TASK_KINDS,
106
+ TASK_SCOPES,
107
+ TASK_SEVERITIES,
108
+ TASK_SIZES,
109
+ ARCHIVE_REASONS,
110
+ TASK_RELATION_TYPES,
111
+ ];
112
+ expect(pinned).toHaveLength(6);
113
+ });
114
+ });
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Structural-equivalence tests for the background-job contracts.
3
+ *
4
+ * Pins the literal shape of {@link BackgroundJobStatus} promoted in
5
+ * Phase 0c (T9955) so accidental narrowing or widening triggers a
6
+ * compile-time failure during `tsc -b` in the CI gate.
7
+ *
8
+ * @since SG-ARCH-SOLID Saga T9831 · E-CONTRACTS-FOUNDATION T9832 · T9955 (Phase 0c)
9
+ */
10
+
11
+ import { describe, expect, it } from 'vitest';
12
+ import type { BackgroundJobStatus } from '../jobs.js';
13
+
14
+ // ─── Compile-time structural-equality helpers ───────────────────────
15
+
16
+ /** Resolve to `1` IFF `A` and `B` are mutually assignable; `2` otherwise. */
17
+ type Equals<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? 1 : 2;
18
+
19
+ /** Compile-time assert that `T` resolves to `1`. */
20
+ type AssertEquals1<T extends 1> = T;
21
+
22
+ // ─── BackgroundJobStatus shape pin ──────────────────────────────────
23
+
24
+ type _BackgroundJobStatusShape =
25
+ | 'pending'
26
+ | 'running'
27
+ | 'complete'
28
+ | 'failed'
29
+ | 'cancelled'
30
+ | 'orphaned';
31
+
32
+ type _AssertBackgroundJobStatusPinned = AssertEquals1<
33
+ Equals<BackgroundJobStatus, _BackgroundJobStatusShape>
34
+ >;
35
+
36
+ // ─── Runtime constructibility smoke ─────────────────────────────────
37
+
38
+ describe('jobs contracts', () => {
39
+ it('BackgroundJobStatus enumerates the 6 documented lifecycle states', () => {
40
+ const all: BackgroundJobStatus[] = [
41
+ 'pending',
42
+ 'running',
43
+ 'complete',
44
+ 'failed',
45
+ 'cancelled',
46
+ 'orphaned',
47
+ ];
48
+ expect(all).toHaveLength(6);
49
+ });
50
+
51
+ it('BackgroundJobStatus distinguishes terminal from in-flight states', () => {
52
+ const terminal: BackgroundJobStatus[] = ['complete', 'failed', 'cancelled', 'orphaned'];
53
+ const inFlight: BackgroundJobStatus[] = ['pending', 'running'];
54
+ expect(terminal).toHaveLength(4);
55
+ expect(inFlight).toHaveLength(2);
56
+ });
57
+
58
+ it('Every BackgroundJobStatus is a non-empty string literal', () => {
59
+ const statuses: BackgroundJobStatus[] = [
60
+ 'pending',
61
+ 'running',
62
+ 'complete',
63
+ 'failed',
64
+ 'cancelled',
65
+ 'orphaned',
66
+ ];
67
+ for (const s of statuses) {
68
+ expect(s.length).toBeGreaterThan(0);
69
+ }
70
+ });
71
+
72
+ it('compile-time pin is wired (no-op at runtime)', () => {
73
+ const pinned: _AssertBackgroundJobStatusPinned = 1;
74
+ expect(pinned).toBe(1);
75
+ });
76
+ });