@blxzer/cursor-trellis-core 0.5.0-beta.4 → 0.5.0

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 (197) hide show
  1. package/channel.d.ts +1 -0
  2. package/channel.js +1 -0
  3. package/index.d.ts +1 -0
  4. package/index.js +1 -0
  5. package/package.json +27 -47
  6. package/task.d.ts +1 -0
  7. package/task.js +1 -0
  8. package/testing.d.ts +1 -0
  9. package/testing.js +1 -0
  10. package/dist/channel/api/assert.d.ts +0 -3
  11. package/dist/channel/api/assert.d.ts.map +0 -1
  12. package/dist/channel/api/assert.js +0 -11
  13. package/dist/channel/api/assert.js.map +0 -1
  14. package/dist/channel/api/context.d.ts +0 -21
  15. package/dist/channel/api/context.d.ts.map +0 -1
  16. package/dist/channel/api/context.js +0 -99
  17. package/dist/channel/api/context.js.map +0 -1
  18. package/dist/channel/api/create.d.ts +0 -9
  19. package/dist/channel/api/create.d.ts.map +0 -1
  20. package/dist/channel/api/create.js +0 -104
  21. package/dist/channel/api/create.js.map +0 -1
  22. package/dist/channel/api/inbox.d.ts +0 -51
  23. package/dist/channel/api/inbox.d.ts.map +0 -1
  24. package/dist/channel/api/inbox.js +0 -176
  25. package/dist/channel/api/inbox.js.map +0 -1
  26. package/dist/channel/api/interrupt.d.ts +0 -31
  27. package/dist/channel/api/interrupt.d.ts.map +0 -1
  28. package/dist/channel/api/interrupt.js +0 -102
  29. package/dist/channel/api/interrupt.js.map +0 -1
  30. package/dist/channel/api/post-thread.d.ts +0 -14
  31. package/dist/channel/api/post-thread.d.ts.map +0 -1
  32. package/dist/channel/api/post-thread.js +0 -109
  33. package/dist/channel/api/post-thread.js.map +0 -1
  34. package/dist/channel/api/read.d.ts +0 -17
  35. package/dist/channel/api/read.d.ts.map +0 -1
  36. package/dist/channel/api/read.js +0 -44
  37. package/dist/channel/api/read.js.map +0 -1
  38. package/dist/channel/api/resolve.d.ts +0 -21
  39. package/dist/channel/api/resolve.d.ts.map +0 -1
  40. package/dist/channel/api/resolve.js +0 -28
  41. package/dist/channel/api/resolve.js.map +0 -1
  42. package/dist/channel/api/runtime.d.ts +0 -70
  43. package/dist/channel/api/runtime.d.ts.map +0 -1
  44. package/dist/channel/api/runtime.js +0 -11
  45. package/dist/channel/api/runtime.js.map +0 -1
  46. package/dist/channel/api/send.d.ts +0 -4
  47. package/dist/channel/api/send.d.ts.map +0 -1
  48. package/dist/channel/api/send.js +0 -52
  49. package/dist/channel/api/send.js.map +0 -1
  50. package/dist/channel/api/spawn.d.ts +0 -13
  51. package/dist/channel/api/spawn.d.ts.map +0 -1
  52. package/dist/channel/api/spawn.js +0 -54
  53. package/dist/channel/api/spawn.js.map +0 -1
  54. package/dist/channel/api/title.d.ts +0 -5
  55. package/dist/channel/api/title.d.ts.map +0 -1
  56. package/dist/channel/api/title.js +0 -40
  57. package/dist/channel/api/title.js.map +0 -1
  58. package/dist/channel/api/types.d.ts +0 -65
  59. package/dist/channel/api/types.d.ts.map +0 -1
  60. package/dist/channel/api/types.js +0 -2
  61. package/dist/channel/api/types.js.map +0 -1
  62. package/dist/channel/api/watch-channels.d.ts +0 -40
  63. package/dist/channel/api/watch-channels.d.ts.map +0 -1
  64. package/dist/channel/api/watch-channels.js +0 -143
  65. package/dist/channel/api/watch-channels.js.map +0 -1
  66. package/dist/channel/api/watch.d.ts +0 -11
  67. package/dist/channel/api/watch.d.ts.map +0 -1
  68. package/dist/channel/api/watch.js +0 -17
  69. package/dist/channel/api/watch.js.map +0 -1
  70. package/dist/channel/api/workers.d.ts +0 -69
  71. package/dist/channel/api/workers.d.ts.map +0 -1
  72. package/dist/channel/api/workers.js +0 -145
  73. package/dist/channel/api/workers.js.map +0 -1
  74. package/dist/channel/index.d.ts +0 -38
  75. package/dist/channel/index.d.ts.map +0 -1
  76. package/dist/channel/index.js +0 -23
  77. package/dist/channel/index.js.map +0 -1
  78. package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
  79. package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
  80. package/dist/channel/internal/store/channel-metadata.js +0 -94
  81. package/dist/channel/internal/store/channel-metadata.js.map +0 -1
  82. package/dist/channel/internal/store/delivery.d.ts +0 -27
  83. package/dist/channel/internal/store/delivery.d.ts.map +0 -1
  84. package/dist/channel/internal/store/delivery.js +0 -37
  85. package/dist/channel/internal/store/delivery.js.map +0 -1
  86. package/dist/channel/internal/store/events.d.ts +0 -215
  87. package/dist/channel/internal/store/events.d.ts.map +0 -1
  88. package/dist/channel/internal/store/events.js +0 -206
  89. package/dist/channel/internal/store/events.js.map +0 -1
  90. package/dist/channel/internal/store/filter.d.ts +0 -21
  91. package/dist/channel/internal/store/filter.d.ts.map +0 -1
  92. package/dist/channel/internal/store/filter.js +0 -75
  93. package/dist/channel/internal/store/filter.js.map +0 -1
  94. package/dist/channel/internal/store/inbox.d.ts +0 -17
  95. package/dist/channel/internal/store/inbox.d.ts.map +0 -1
  96. package/dist/channel/internal/store/inbox.js +0 -30
  97. package/dist/channel/internal/store/inbox.js.map +0 -1
  98. package/dist/channel/internal/store/lock.d.ts +0 -17
  99. package/dist/channel/internal/store/lock.d.ts.map +0 -1
  100. package/dist/channel/internal/store/lock.js +0 -88
  101. package/dist/channel/internal/store/lock.js.map +0 -1
  102. package/dist/channel/internal/store/paths.d.ts +0 -43
  103. package/dist/channel/internal/store/paths.d.ts.map +0 -1
  104. package/dist/channel/internal/store/paths.js +0 -233
  105. package/dist/channel/internal/store/paths.js.map +0 -1
  106. package/dist/channel/internal/store/schema.d.ts +0 -77
  107. package/dist/channel/internal/store/schema.d.ts.map +0 -1
  108. package/dist/channel/internal/store/schema.js +0 -127
  109. package/dist/channel/internal/store/schema.js.map +0 -1
  110. package/dist/channel/internal/store/seq.d.ts +0 -12
  111. package/dist/channel/internal/store/seq.d.ts.map +0 -1
  112. package/dist/channel/internal/store/seq.js +0 -133
  113. package/dist/channel/internal/store/seq.js.map +0 -1
  114. package/dist/channel/internal/store/thread-state.d.ts +0 -37
  115. package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
  116. package/dist/channel/internal/store/thread-state.js +0 -206
  117. package/dist/channel/internal/store/thread-state.js.map +0 -1
  118. package/dist/channel/internal/store/watch.d.ts +0 -10
  119. package/dist/channel/internal/store/watch.d.ts.map +0 -1
  120. package/dist/channel/internal/store/watch.js +0 -122
  121. package/dist/channel/internal/store/watch.js.map +0 -1
  122. package/dist/channel/internal/store/worker-state.d.ts +0 -56
  123. package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
  124. package/dist/channel/internal/store/worker-state.js +0 -220
  125. package/dist/channel/internal/store/worker-state.js.map +0 -1
  126. package/dist/index.d.ts +0 -3
  127. package/dist/index.d.ts.map +0 -1
  128. package/dist/index.js +0 -7
  129. package/dist/index.js.map +0 -1
  130. package/dist/task/adapter-middleware.d.ts +0 -118
  131. package/dist/task/adapter-middleware.d.ts.map +0 -1
  132. package/dist/task/adapter-middleware.js +0 -508
  133. package/dist/task/adapter-middleware.js.map +0 -1
  134. package/dist/task/contract-migrate.d.ts +0 -29
  135. package/dist/task/contract-migrate.d.ts.map +0 -1
  136. package/dist/task/contract-migrate.js +0 -207
  137. package/dist/task/contract-migrate.js.map +0 -1
  138. package/dist/task/full-quality.d.ts +0 -89
  139. package/dist/task/full-quality.d.ts.map +0 -1
  140. package/dist/task/full-quality.js +0 -379
  141. package/dist/task/full-quality.js.map +0 -1
  142. package/dist/task/index.d.ts +0 -31
  143. package/dist/task/index.d.ts.map +0 -1
  144. package/dist/task/index.js +0 -20
  145. package/dist/task/index.js.map +0 -1
  146. package/dist/task/kernel-cli.d.ts +0 -44
  147. package/dist/task/kernel-cli.d.ts.map +0 -1
  148. package/dist/task/kernel-cli.js +0 -287
  149. package/dist/task/kernel-cli.js.map +0 -1
  150. package/dist/task/kernel-contract.d.ts +0 -113
  151. package/dist/task/kernel-contract.d.ts.map +0 -1
  152. package/dist/task/kernel-contract.js +0 -332
  153. package/dist/task/kernel-contract.js.map +0 -1
  154. package/dist/task/kernel-store.d.ts +0 -99
  155. package/dist/task/kernel-store.d.ts.map +0 -1
  156. package/dist/task/kernel-store.js +0 -735
  157. package/dist/task/kernel-store.js.map +0 -1
  158. package/dist/task/kernel-surface.d.ts +0 -39
  159. package/dist/task/kernel-surface.d.ts.map +0 -1
  160. package/dist/task/kernel-surface.js +0 -73
  161. package/dist/task/kernel-surface.js.map +0 -1
  162. package/dist/task/lite-context-pack.d.ts +0 -71
  163. package/dist/task/lite-context-pack.d.ts.map +0 -1
  164. package/dist/task/lite-context-pack.js +0 -175
  165. package/dist/task/lite-context-pack.js.map +0 -1
  166. package/dist/task/ondemand-topology.d.ts +0 -108
  167. package/dist/task/ondemand-topology.d.ts.map +0 -1
  168. package/dist/task/ondemand-topology.js +0 -453
  169. package/dist/task/ondemand-topology.js.map +0 -1
  170. package/dist/task/p36-artifact-migrate.d.ts +0 -61
  171. package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
  172. package/dist/task/p36-artifact-migrate.js +0 -336
  173. package/dist/task/p36-artifact-migrate.js.map +0 -1
  174. package/dist/task/p36-wave-c.d.ts +0 -39
  175. package/dist/task/p36-wave-c.d.ts.map +0 -1
  176. package/dist/task/p36-wave-c.js +0 -100
  177. package/dist/task/p36-wave-c.js.map +0 -1
  178. package/dist/task/paths.d.ts +0 -37
  179. package/dist/task/paths.d.ts.map +0 -1
  180. package/dist/task/paths.js +0 -49
  181. package/dist/task/paths.js.map +0 -1
  182. package/dist/task/phase.d.ts +0 -27
  183. package/dist/task/phase.d.ts.map +0 -1
  184. package/dist/task/phase.js +0 -24
  185. package/dist/task/phase.js.map +0 -1
  186. package/dist/task/records.d.ts +0 -48
  187. package/dist/task/records.d.ts.map +0 -1
  188. package/dist/task/records.js +0 -100
  189. package/dist/task/records.js.map +0 -1
  190. package/dist/task/schema.d.ts +0 -77
  191. package/dist/task/schema.d.ts.map +0 -1
  192. package/dist/task/schema.js +0 -220
  193. package/dist/task/schema.js.map +0 -1
  194. package/dist/testing/index.d.ts +0 -2
  195. package/dist/testing/index.d.ts.map +0 -1
  196. package/dist/testing/index.js +0 -4
  197. package/dist/testing/index.js.map +0 -1
@@ -1,336 +0,0 @@
1
- /**
2
- * P36 wave B — artifact dual-read + optional write (not wave C).
3
- *
4
- * User default: keep reading old task.json / evidence / pool. Maintainer
5
- * may write required_controls + Topology projections. Never delete
6
- * business prose. Archive is read-only. Failure rolls back to dual-read.
7
- */
8
- import fs from "node:fs";
9
- import path from "node:path";
10
- import { resolveRequiredControls } from "./full-quality.js";
11
- import { projectLegacyStatus } from "./kernel-contract.js";
12
- import { STAGE5_SCHEMA_VERSION, defaultDependencyGraph, defaultTopology, expandDependsOnToRequires, topologyKindFromChildren, } from "./ondemand-topology.js";
13
- import { loadTaskRecord, writeTaskRecord } from "./records.js";
14
- import { isPlainObject } from "./schema.js";
15
- export const P36_ARTIFACT_SOURCE = "p36-artifact-migrate";
16
- export function planArtifactMigration(options) {
17
- const root = path.resolve(options.root);
18
- const tasksRoot = options.tasksDir
19
- ? path.resolve(options.tasksDir)
20
- : path.join(root, ".cstl", "tasks");
21
- const poolRoot = options.poolDir
22
- ? path.resolve(options.poolDir)
23
- : path.join(root, ".cstl", "pool", "items");
24
- const degraded = [];
25
- const tasks = [];
26
- const writable = [];
27
- for (const file of collectFiles(tasksRoot, "task.json")) {
28
- const scanned = scanTaskArtifact(file, tasksRoot);
29
- if (scanned.degraded) {
30
- degraded.push(scanned.degraded);
31
- continue;
32
- }
33
- if (!scanned.task)
34
- continue;
35
- tasks.push(scanned.task);
36
- if (scanned.write)
37
- writable.push(scanned.write);
38
- }
39
- for (const file of collectFiles(poolRoot, ".md")) {
40
- if (isArchivePath(poolRoot, file))
41
- continue;
42
- const poolWrite = projectPoolPriority(file);
43
- if (poolWrite)
44
- writable.push(poolWrite);
45
- }
46
- const dualRead = tasks.filter((task) => task.dualRead).length;
47
- const activeDualRead = tasks.filter((task) => task.dualRead && !task.archive && isActiveStatus(task.status)).length;
48
- const archiveSkipped = tasks.filter((task) => task.archive).length;
49
- return {
50
- scanned: tasks.length,
51
- dualRead,
52
- activeDualRead,
53
- archiveSkipped,
54
- writable,
55
- tasks,
56
- degraded,
57
- continueOk: tasks.length === 0 || tasks.every((task) => task.continueOk),
58
- };
59
- }
60
- export function applyArtifactMigration(options) {
61
- const snapshots = [];
62
- let written = 0;
63
- try {
64
- for (const target of options.plan.writable) {
65
- if (options.onBeforeWrite)
66
- options.onBeforeWrite(target);
67
- if (!fs.existsSync(target.path)) {
68
- throw new Error(`missing ${target.path}`);
69
- }
70
- snapshots.push({
71
- path: target.path,
72
- content: fs.readFileSync(target.path, "utf-8"),
73
- });
74
- writeArtifactTarget(target);
75
- written += 1;
76
- }
77
- return { ok: true, wrote: written > 0, written, rolledBack: false };
78
- }
79
- catch (err) {
80
- restoreSnapshots(snapshots);
81
- return {
82
- ok: false,
83
- wrote: false,
84
- written: 0,
85
- rolledBack: snapshots.length > 0,
86
- error: err instanceof Error ? err.message : String(err),
87
- };
88
- }
89
- }
90
- export function formatArtifactVernacular(plan, writeArtifacts) {
91
- const lines = [
92
- writeArtifacts
93
- ? `产物:将写入 ${plan.writable.length} 个投影(required_controls / Topology;不删正文)。归档 ${plan.archiveSkipped} 个只读。`
94
- : `产物:${plan.activeDualRead} 个进行中的任务仍按旧形状可读,这次不用改它们。归档 ${plan.archiveSkipped} 个只读。`,
95
- ];
96
- if (plan.degraded.length > 0) {
97
- lines.push(`degraded:${plan.degraded.length}(仍可再跑 update)`);
98
- }
99
- else {
100
- lines.push("degraded:无");
101
- }
102
- return lines;
103
- }
104
- function writeArtifactTarget(target) {
105
- if (target.kind === "pool") {
106
- if (target.nextText === undefined) {
107
- throw new Error(`pool write missing text: ${target.path}`);
108
- }
109
- fs.writeFileSync(target.path, target.nextText, "utf-8");
110
- return;
111
- }
112
- const record = loadTaskRecord({ taskDir: path.dirname(target.path) });
113
- writeTaskRecord({
114
- taskDir: path.dirname(target.path),
115
- record,
116
- extra: target.extra ?? {},
117
- });
118
- }
119
- function restoreSnapshots(snapshots) {
120
- for (const snapshot of [...snapshots].reverse()) {
121
- if (snapshot.content === null) {
122
- if (fs.existsSync(snapshot.path))
123
- fs.unlinkSync(snapshot.path);
124
- continue;
125
- }
126
- fs.writeFileSync(snapshot.path, snapshot.content, "utf-8");
127
- }
128
- }
129
- function scanTaskArtifact(file, tasksRoot) {
130
- let parsed;
131
- try {
132
- parsed = JSON.parse(fs.readFileSync(file, "utf-8"));
133
- }
134
- catch {
135
- return { degraded: `${file}: task.json is not readable JSON` };
136
- }
137
- if (!isPlainObject(parsed)) {
138
- return { degraded: `${file}: task.json is not an object` };
139
- }
140
- const id = typeof parsed.id === "string" ? parsed.id : path.basename(path.dirname(file));
141
- const status = typeof parsed.status === "string" ? parsed.status : "";
142
- const archive = isArchivePath(tasksRoot, file);
143
- const continueOk = status.trim() !== "";
144
- if (continueOk) {
145
- projectLegacyStatus(status);
146
- }
147
- const missing = [];
148
- const extra = {};
149
- if (!hasRequiredControls(parsed)) {
150
- missing.push("required_controls");
151
- extra.required_controls = resolveRequiredControls({
152
- rigor: inferLegacyRigor(parsed),
153
- });
154
- }
155
- const parent = typeof parsed.parent === "string" && parsed.parent.trim() !== ""
156
- ? parsed.parent
157
- : null;
158
- const children = asStringArray(parsed.children);
159
- if (!hasTopology(parsed)) {
160
- missing.push("topology");
161
- extra.topology = defaultTopology({
162
- id,
163
- parent,
164
- children,
165
- });
166
- }
167
- else {
168
- const repaired = repairMisclassifiedTopology(parsed, { id, parent, children });
169
- if (repaired) {
170
- missing.push("topology");
171
- extra.topology = repaired;
172
- }
173
- }
174
- const dependsOn = asStringArray(parsed.depends_on);
175
- if (!hasDependencyGraph(parsed) && dependsOn.length > 0) {
176
- missing.push("dependency_graph");
177
- extra.dependency_graph = expandDependsOnToRequires(defaultDependencyGraph(), id, dependsOn);
178
- }
179
- const dualRead = missing.length > 0;
180
- const writable = dualRead && !archive && Object.keys(extra).length > 0;
181
- return {
182
- task: {
183
- path: file,
184
- id,
185
- status,
186
- archive,
187
- continueOk,
188
- dualRead,
189
- writable,
190
- missing,
191
- },
192
- write: writable
193
- ? {
194
- kind: "task",
195
- path: file,
196
- extra,
197
- }
198
- : undefined,
199
- };
200
- }
201
- function projectPoolPriority(file) {
202
- let text;
203
- try {
204
- text = fs.readFileSync(file, "utf-8");
205
- }
206
- catch {
207
- return null;
208
- }
209
- if (!text.startsWith("---"))
210
- return null;
211
- const close = text.indexOf("\n---", 3);
212
- if (close === -1)
213
- return null;
214
- const frontmatter = text.slice(0, close);
215
- if (/^priority\s*:/m.test(frontmatter))
216
- return null;
217
- return {
218
- kind: "pool",
219
- path: file,
220
- nextText: text.replace(/^---\r?\n/, "---\npriority: P2\n"),
221
- };
222
- }
223
- function collectFiles(root, match) {
224
- if (!fs.existsSync(root))
225
- return [];
226
- const out = [];
227
- const stack = [root];
228
- while (stack.length > 0) {
229
- const current = stack.pop();
230
- if (current === undefined)
231
- continue;
232
- let entries;
233
- try {
234
- entries = fs.readdirSync(current, { withFileTypes: true });
235
- }
236
- catch {
237
- continue;
238
- }
239
- for (const entry of entries) {
240
- const full = path.join(current, entry.name);
241
- if (entry.isDirectory()) {
242
- stack.push(full);
243
- }
244
- else if (entry.isFile()) {
245
- if (match === "task.json" && entry.name === "task.json")
246
- out.push(full);
247
- if (match === ".md" && entry.name.endsWith(".md"))
248
- out.push(full);
249
- }
250
- }
251
- }
252
- return out.sort();
253
- }
254
- function isArchivePath(root, file) {
255
- const rel = path.relative(root, file).replace(/\\/g, "/");
256
- return rel.split("/").includes("archive");
257
- }
258
- function hasRequiredControls(parsed) {
259
- const raw = parsed.required_controls;
260
- return (isPlainObject(raw) && (raw.rigor === "lite" || raw.rigor === "full"));
261
- }
262
- function hasTopology(parsed) {
263
- const raw = parsed.topology;
264
- return isPlainObject(raw) && (raw.kind === "single" || raw.kind === "parent-child");
265
- }
266
- function repairMisclassifiedTopology(parsed, record) {
267
- const raw = parsed.topology;
268
- if (!isPlainObject(raw))
269
- return null;
270
- const parentId = raw.parent_id === null || raw.parent_id === undefined
271
- ? record.parent
272
- : typeof raw.parent_id === "string" && raw.parent_id.trim() !== ""
273
- ? raw.parent_id.trim()
274
- : null;
275
- const children = uniqueStrings([
276
- ...asStringArray(raw.children),
277
- ...record.children,
278
- ]);
279
- const expectedKind = topologyKindFromChildren(children);
280
- if (raw.kind === expectedKind)
281
- return null;
282
- return {
283
- schema_version: STAGE5_SCHEMA_VERSION,
284
- kind: expectedKind,
285
- parent_id: parentId,
286
- children,
287
- };
288
- }
289
- function uniqueStrings(values) {
290
- const out = [];
291
- for (const value of values) {
292
- if (typeof value !== "string")
293
- continue;
294
- const id = value.trim();
295
- if (!id || out.includes(id))
296
- continue;
297
- out.push(id);
298
- }
299
- return out;
300
- }
301
- function hasDependencyGraph(parsed) {
302
- const raw = parsed.dependency_graph;
303
- return isPlainObject(raw) && Array.isArray(raw.edges);
304
- }
305
- function inferLegacyRigor(parsed) {
306
- const meta = isPlainObject(parsed.meta) ? parsed.meta : {};
307
- const candidates = [
308
- parsed.task_kind,
309
- parsed.task_type,
310
- parsed.kind,
311
- parsed.mode,
312
- meta.task_kind,
313
- meta.task_type,
314
- meta.classification,
315
- meta.mode,
316
- ];
317
- for (const value of candidates) {
318
- if (typeof value !== "string")
319
- continue;
320
- const normalized = value.toLowerCase().replace(/_/g, "-");
321
- if (normalized.includes("full"))
322
- return "full";
323
- if (normalized.includes("lite"))
324
- return "lite";
325
- }
326
- return "lite";
327
- }
328
- function isActiveStatus(status) {
329
- return !["completed", "done", "cancelled", "canceled"].includes(status);
330
- }
331
- function asStringArray(value) {
332
- if (!Array.isArray(value))
333
- return [];
334
- return value.filter((item) => typeof item === "string");
335
- }
336
- //# sourceMappingURL=p36-artifact-migrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"p36-artifact-migrate.js","sourceRoot":"","sources":["../../src/task/p36-artifact-migrate.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- /**
2
- * P36 Wave C: confirm-gated stop-read of leftover Task fields.
3
- *
4
- * Written only after `cstl update` confirm. Dry-run and refuse never write.
5
- * Runtime closeout reads this flag; leftover kind/mode/classification stay
6
- * dual-read until it exists.
7
- */
8
- import { type ContractMigrateReport } from "./contract-migrate.js";
9
- export declare const WAVE_C_STATE_REL = ".cstl/.p36-wave-c.json";
10
- export declare const WAVE_C_SCHEMA_VERSION = 1;
11
- export interface WaveCState {
12
- schema_version: number;
13
- wave: "C";
14
- confirmed: boolean;
15
- confirmedAt: string | null;
16
- }
17
- export interface WaveCPlan {
18
- confirmed: boolean;
19
- scanned: number;
20
- leftoverCloseout: number;
21
- alreadyNewShape: number;
22
- vernacular: string[];
23
- }
24
- export declare function waveCStatePath(root: string): string;
25
- export declare function emptyWaveCState(): WaveCState;
26
- export declare function readWaveCState(root: string): WaveCState;
27
- export declare function isWaveCConfirmed(root: string): boolean;
28
- export declare function writeWaveCConfirmed(root: string, at?: Date): WaveCState;
29
- export declare function planWaveC(options: {
30
- root: string;
31
- report?: ContractMigrateReport;
32
- }): WaveCPlan;
33
- export declare function formatWaveCVernacular(plan: {
34
- confirmed: boolean;
35
- scanned: number;
36
- leftoverCloseout: number;
37
- alreadyNewShape: number;
38
- }): string[];
39
- //# sourceMappingURL=p36-wave-c.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"p36-wave-c.d.ts","sourceRoot":"","sources":["../../src/task/p36-wave-c.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,gBAAgB,2BAA2B,CAAC;AACzD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,eAAe,IAAI,UAAU,CAO5C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAmBvD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,GAAE,IAAiB,GACpB,UAAU,CAWZ;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,GAAG,SAAS,CA4BZ;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,EAAE,CAWX"}
@@ -1,100 +0,0 @@
1
- /**
2
- * P36 Wave C: confirm-gated stop-read of leftover Task fields.
3
- *
4
- * Written only after `cstl update` confirm. Dry-run and refuse never write.
5
- * Runtime closeout reads this flag; leftover kind/mode/classification stay
6
- * dual-read until it exists.
7
- */
8
- import fs from "node:fs";
9
- import path from "node:path";
10
- import { scanContractMigration, } from "./contract-migrate.js";
11
- import { isPlainObject } from "./schema.js";
12
- export const WAVE_C_STATE_REL = ".cstl/.p36-wave-c.json";
13
- export const WAVE_C_SCHEMA_VERSION = 1;
14
- export function waveCStatePath(root) {
15
- return path.join(path.resolve(root), WAVE_C_STATE_REL);
16
- }
17
- export function emptyWaveCState() {
18
- return {
19
- schema_version: WAVE_C_SCHEMA_VERSION,
20
- wave: "C",
21
- confirmed: false,
22
- confirmedAt: null,
23
- };
24
- }
25
- export function readWaveCState(root) {
26
- const file = waveCStatePath(root);
27
- if (!fs.existsSync(file))
28
- return emptyWaveCState();
29
- try {
30
- const parsed = JSON.parse(fs.readFileSync(file, "utf-8"));
31
- if (!isPlainObject(parsed))
32
- return emptyWaveCState();
33
- return {
34
- schema_version: parsed.schema_version === WAVE_C_SCHEMA_VERSION
35
- ? WAVE_C_SCHEMA_VERSION
36
- : WAVE_C_SCHEMA_VERSION,
37
- wave: "C",
38
- confirmed: parsed.confirmed === true,
39
- confirmedAt: typeof parsed.confirmedAt === "string" ? parsed.confirmedAt : null,
40
- };
41
- }
42
- catch {
43
- return emptyWaveCState();
44
- }
45
- }
46
- export function isWaveCConfirmed(root) {
47
- return readWaveCState(root).confirmed;
48
- }
49
- export function writeWaveCConfirmed(root, at = new Date()) {
50
- const state = {
51
- schema_version: WAVE_C_SCHEMA_VERSION,
52
- wave: "C",
53
- confirmed: true,
54
- confirmedAt: at.toISOString(),
55
- };
56
- const file = waveCStatePath(root);
57
- fs.mkdirSync(path.dirname(file), { recursive: true });
58
- fs.writeFileSync(file, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
59
- return state;
60
- }
61
- export function planWaveC(options) {
62
- const confirmed = isWaveCConfirmed(options.root);
63
- const report = options.report ?? scanContractMigration({ root: options.root });
64
- const leftoverPaths = new Set();
65
- for (const finding of report.findings) {
66
- if (finding.kind === "retired-field" ||
67
- finding.kind === "children-inferred-parent" ||
68
- finding.kind === "file-inferred-rigor" ||
69
- finding.kind === "legacy-parent") {
70
- leftoverPaths.add(finding.path);
71
- }
72
- }
73
- const leftoverCloseout = leftoverPaths.size;
74
- const alreadyNewShape = Math.max(0, report.scanned - leftoverCloseout);
75
- return {
76
- confirmed,
77
- scanned: report.scanned,
78
- leftoverCloseout,
79
- alreadyNewShape,
80
- vernacular: formatWaveCVernacular({
81
- confirmed,
82
- scanned: report.scanned,
83
- leftoverCloseout,
84
- alreadyNewShape,
85
- }),
86
- };
87
- }
88
- export function formatWaveCVernacular(plan) {
89
- if (plan.confirmed) {
90
- return [
91
- "已确认停读旧形状。新任务只认 topology / required_controls,不再靠 leftover kind/mode/classification 推断 Rigor / Parent。",
92
- ];
93
- }
94
- return [
95
- "确认后才会停读旧形状:不再把 leftover kind/mode/classification 当 Rigor/Parent 唯一真相。",
96
- `已扫描 ${plan.scanned} 个任务:${plan.alreadyNewShape} 个已是新形状,${plan.leftoverCloseout} 个仍靠旧字段。`,
97
- "拒绝或失败:项目仍能 Continue / Close,可再跑 update。",
98
- ];
99
- }
100
- //# sourceMappingURL=p36-wave-c.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"p36-wave-c.js","sourceRoot":"","sources":["../../src/task/p36-wave-c.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- /**
2
- * Task directory naming.
3
- *
4
- * User-created task dirs follow the `MM-DD-slug` pattern produced by
5
- * `.trellis/scripts/common/task_store.py::cmd_create`:
6
- *
7
- * <tasks-dir>/05-13-trellis-core-sdk-package/
8
- *
9
- * Trellis also creates system onboarding tasks during `trellis init` using a
10
- * `00-slug` prefix, such as `00-bootstrap-guidelines` and `00-join-new-developer`.
11
- *
12
- * `MM` is the two-digit month, `DD` is the two-digit day, and `slug` is
13
- * a lower-kebab-case identifier composed of `[a-z0-9-]+` characters.
14
- */
15
- export interface TaskDirParts {
16
- /**
17
- * The directory prefix. Dated tasks use `MM-DD`; Trellis system onboarding
18
- * tasks use `00`.
19
- */
20
- prefix: string;
21
- /** Two-digit month for dated tasks, or `null` for `00-*` system tasks. */
22
- month: string | null;
23
- /** Two-digit day for dated tasks, or `null` for `00-*` system tasks. */
24
- day: string | null;
25
- slug: string;
26
- }
27
- /**
28
- * Validate a task directory base name (no slashes). Returns the parsed
29
- * components when valid, or `null` when the name does not match a canonical
30
- * task dir shape.
31
- *
32
- * Throws `TypeError` if `name` is not a string — guards downstream code
33
- * from accidentally validating `Buffer`, `Path`, or other inputs.
34
- */
35
- export declare function validateTaskDirName(name: string): TaskDirParts | null;
36
- export declare function isValidTaskDirName(name: string): boolean;
37
- //# sourceMappingURL=paths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/task/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAqBrE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD"}
@@ -1,49 +0,0 @@
1
- /**
2
- * Task directory naming.
3
- *
4
- * User-created task dirs follow the `MM-DD-slug` pattern produced by
5
- * `.trellis/scripts/common/task_store.py::cmd_create`:
6
- *
7
- * <tasks-dir>/05-13-trellis-core-sdk-package/
8
- *
9
- * Trellis also creates system onboarding tasks during `trellis init` using a
10
- * `00-slug` prefix, such as `00-bootstrap-guidelines` and `00-join-new-developer`.
11
- *
12
- * `MM` is the two-digit month, `DD` is the two-digit day, and `slug` is
13
- * a lower-kebab-case identifier composed of `[a-z0-9-]+` characters.
14
- */
15
- const DATED_TASK_DIR_RE = /^(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])-([a-z0-9]+(?:-[a-z0-9]+)*)$/;
16
- const SYSTEM_TASK_DIR_RE = /^00-(bootstrap-guidelines|join-[a-z0-9]+(?:-[a-z0-9]+)*)$/;
17
- /**
18
- * Validate a task directory base name (no slashes). Returns the parsed
19
- * components when valid, or `null` when the name does not match a canonical
20
- * task dir shape.
21
- *
22
- * Throws `TypeError` if `name` is not a string — guards downstream code
23
- * from accidentally validating `Buffer`, `Path`, or other inputs.
24
- */
25
- export function validateTaskDirName(name) {
26
- if (typeof name !== "string") {
27
- throw new TypeError("task directory name must be a string");
28
- }
29
- const dated = DATED_TASK_DIR_RE.exec(name);
30
- if (dated) {
31
- const [, month, day, slug] = dated;
32
- if (month === undefined || day === undefined || slug === undefined) {
33
- return null;
34
- }
35
- return { prefix: `${month}-${day}`, month, day, slug };
36
- }
37
- const system = SYSTEM_TASK_DIR_RE.exec(name);
38
- if (system) {
39
- const [, slug] = system;
40
- if (slug === undefined)
41
- return null;
42
- return { prefix: "00", month: null, day: null, slug };
43
- }
44
- return null;
45
- }
46
- export function isValidTaskDirName(name) {
47
- return validateTaskDirName(name) !== null;
48
- }
49
- //# sourceMappingURL=paths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/task/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,iBAAiB,GACrB,oEAAoE,CAAC;AACvE,MAAM,kBAAkB,GACtB,2DAA2D,CAAC;AAe9D;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAC5C,CAAC"}
@@ -1,27 +0,0 @@
1
- import type { TrellisTaskRecord } from "./schema.js";
2
- /**
3
- * Coarse-grained Trellis task phase derived from task status.
4
- *
5
- * This mapping is a **legacy machine alias** of {@link TrellisTaskRecord.status}
6
- * (`plan` / `implement` / …). Humans and agents should use Kernel Phase
7
- * titles from `projectKernelSurface` (Open / Define / Approve / Execute /
8
- * Verify / Integrate? / Close) — not these names, and not `planning`.
9
- *
10
- * Mapping:
11
- *
12
- * status | phase
13
- * --------------------|-----------
14
- * planning | plan
15
- * in_progress | implement
16
- * review | review
17
- * completed | done | completed
18
- * <anything else> | unknown
19
- */
20
- export type TrellisTaskPhase = "plan" | "implement" | "review" | "completed" | "unknown";
21
- /**
22
- * Infer the phase of a task from either its parsed record or its raw
23
- * status string. Accepts a record so callers that already have one don't
24
- * need to re-pluck `status` first.
25
- */
26
- export declare function inferTaskPhase(recordOrStatus: TrellisTaskRecord | string | null | undefined): TrellisTaskPhase;
27
- //# sourceMappingURL=phase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../../src/task/phase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,WAAW,GACX,QAAQ,GACR,WAAW,GACX,SAAS,CAAC;AAEd;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAC5D,gBAAgB,CAkBlB"}
@@ -1,24 +0,0 @@
1
- /**
2
- * Infer the phase of a task from either its parsed record or its raw
3
- * status string. Accepts a record so callers that already have one don't
4
- * need to re-pluck `status` first.
5
- */
6
- export function inferTaskPhase(recordOrStatus) {
7
- const status = typeof recordOrStatus === "string"
8
- ? recordOrStatus
9
- : recordOrStatus?.status;
10
- switch (status) {
11
- case "planning":
12
- return "plan";
13
- case "in_progress":
14
- return "implement";
15
- case "review":
16
- return "review";
17
- case "completed":
18
- case "done":
19
- return "completed";
20
- default:
21
- return "unknown";
22
- }
23
- }
24
- //# sourceMappingURL=phase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"phase.js","sourceRoot":"","sources":["../../src/task/phase.ts"],"names":[],"mappings":"AA2BA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,cAA6D;IAE7D,MAAM,MAAM,GACV,OAAO,cAAc,KAAK,QAAQ;QAChC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,cAAc,EAAE,MAAM,CAAC;IAC7B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,UAAU;YACb,OAAO,MAAM,CAAC;QAChB,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}