@blxzer/cursor-trellis-core 0.5.0-beta.5 → 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.
- package/LICENSE +235 -235
- package/channel.d.ts +1 -0
- package/channel.js +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +27 -47
- package/task.d.ts +1 -0
- package/task.js +1 -0
- package/testing.d.ts +1 -0
- package/testing.js +1 -0
- package/dist/channel/api/assert.d.ts +0 -3
- package/dist/channel/api/assert.d.ts.map +0 -1
- package/dist/channel/api/assert.js +0 -11
- package/dist/channel/api/assert.js.map +0 -1
- package/dist/channel/api/context.d.ts +0 -21
- package/dist/channel/api/context.d.ts.map +0 -1
- package/dist/channel/api/context.js +0 -99
- package/dist/channel/api/context.js.map +0 -1
- package/dist/channel/api/create.d.ts +0 -9
- package/dist/channel/api/create.d.ts.map +0 -1
- package/dist/channel/api/create.js +0 -104
- package/dist/channel/api/create.js.map +0 -1
- package/dist/channel/api/inbox.d.ts +0 -51
- package/dist/channel/api/inbox.d.ts.map +0 -1
- package/dist/channel/api/inbox.js +0 -176
- package/dist/channel/api/inbox.js.map +0 -1
- package/dist/channel/api/interrupt.d.ts +0 -31
- package/dist/channel/api/interrupt.d.ts.map +0 -1
- package/dist/channel/api/interrupt.js +0 -102
- package/dist/channel/api/interrupt.js.map +0 -1
- package/dist/channel/api/post-thread.d.ts +0 -14
- package/dist/channel/api/post-thread.d.ts.map +0 -1
- package/dist/channel/api/post-thread.js +0 -109
- package/dist/channel/api/post-thread.js.map +0 -1
- package/dist/channel/api/read.d.ts +0 -17
- package/dist/channel/api/read.d.ts.map +0 -1
- package/dist/channel/api/read.js +0 -44
- package/dist/channel/api/read.js.map +0 -1
- package/dist/channel/api/resolve.d.ts +0 -21
- package/dist/channel/api/resolve.d.ts.map +0 -1
- package/dist/channel/api/resolve.js +0 -28
- package/dist/channel/api/resolve.js.map +0 -1
- package/dist/channel/api/runtime.d.ts +0 -70
- package/dist/channel/api/runtime.d.ts.map +0 -1
- package/dist/channel/api/runtime.js +0 -11
- package/dist/channel/api/runtime.js.map +0 -1
- package/dist/channel/api/send.d.ts +0 -4
- package/dist/channel/api/send.d.ts.map +0 -1
- package/dist/channel/api/send.js +0 -52
- package/dist/channel/api/send.js.map +0 -1
- package/dist/channel/api/spawn.d.ts +0 -13
- package/dist/channel/api/spawn.d.ts.map +0 -1
- package/dist/channel/api/spawn.js +0 -54
- package/dist/channel/api/spawn.js.map +0 -1
- package/dist/channel/api/title.d.ts +0 -5
- package/dist/channel/api/title.d.ts.map +0 -1
- package/dist/channel/api/title.js +0 -40
- package/dist/channel/api/title.js.map +0 -1
- package/dist/channel/api/types.d.ts +0 -65
- package/dist/channel/api/types.d.ts.map +0 -1
- package/dist/channel/api/types.js +0 -2
- package/dist/channel/api/types.js.map +0 -1
- package/dist/channel/api/watch-channels.d.ts +0 -40
- package/dist/channel/api/watch-channels.d.ts.map +0 -1
- package/dist/channel/api/watch-channels.js +0 -143
- package/dist/channel/api/watch-channels.js.map +0 -1
- package/dist/channel/api/watch.d.ts +0 -11
- package/dist/channel/api/watch.d.ts.map +0 -1
- package/dist/channel/api/watch.js +0 -17
- package/dist/channel/api/watch.js.map +0 -1
- package/dist/channel/api/workers.d.ts +0 -69
- package/dist/channel/api/workers.d.ts.map +0 -1
- package/dist/channel/api/workers.js +0 -145
- package/dist/channel/api/workers.js.map +0 -1
- package/dist/channel/index.d.ts +0 -38
- package/dist/channel/index.d.ts.map +0 -1
- package/dist/channel/index.js +0 -23
- package/dist/channel/index.js.map +0 -1
- package/dist/channel/internal/store/channel-metadata.d.ts +0 -23
- package/dist/channel/internal/store/channel-metadata.d.ts.map +0 -1
- package/dist/channel/internal/store/channel-metadata.js +0 -94
- package/dist/channel/internal/store/channel-metadata.js.map +0 -1
- package/dist/channel/internal/store/delivery.d.ts +0 -27
- package/dist/channel/internal/store/delivery.d.ts.map +0 -1
- package/dist/channel/internal/store/delivery.js +0 -37
- package/dist/channel/internal/store/delivery.js.map +0 -1
- package/dist/channel/internal/store/events.d.ts +0 -215
- package/dist/channel/internal/store/events.d.ts.map +0 -1
- package/dist/channel/internal/store/events.js +0 -206
- package/dist/channel/internal/store/events.js.map +0 -1
- package/dist/channel/internal/store/filter.d.ts +0 -21
- package/dist/channel/internal/store/filter.d.ts.map +0 -1
- package/dist/channel/internal/store/filter.js +0 -75
- package/dist/channel/internal/store/filter.js.map +0 -1
- package/dist/channel/internal/store/inbox.d.ts +0 -17
- package/dist/channel/internal/store/inbox.d.ts.map +0 -1
- package/dist/channel/internal/store/inbox.js +0 -30
- package/dist/channel/internal/store/inbox.js.map +0 -1
- package/dist/channel/internal/store/lock.d.ts +0 -17
- package/dist/channel/internal/store/lock.d.ts.map +0 -1
- package/dist/channel/internal/store/lock.js +0 -88
- package/dist/channel/internal/store/lock.js.map +0 -1
- package/dist/channel/internal/store/paths.d.ts +0 -43
- package/dist/channel/internal/store/paths.d.ts.map +0 -1
- package/dist/channel/internal/store/paths.js +0 -233
- package/dist/channel/internal/store/paths.js.map +0 -1
- package/dist/channel/internal/store/schema.d.ts +0 -77
- package/dist/channel/internal/store/schema.d.ts.map +0 -1
- package/dist/channel/internal/store/schema.js +0 -127
- package/dist/channel/internal/store/schema.js.map +0 -1
- package/dist/channel/internal/store/seq.d.ts +0 -12
- package/dist/channel/internal/store/seq.d.ts.map +0 -1
- package/dist/channel/internal/store/seq.js +0 -133
- package/dist/channel/internal/store/seq.js.map +0 -1
- package/dist/channel/internal/store/thread-state.d.ts +0 -37
- package/dist/channel/internal/store/thread-state.d.ts.map +0 -1
- package/dist/channel/internal/store/thread-state.js +0 -206
- package/dist/channel/internal/store/thread-state.js.map +0 -1
- package/dist/channel/internal/store/watch.d.ts +0 -10
- package/dist/channel/internal/store/watch.d.ts.map +0 -1
- package/dist/channel/internal/store/watch.js +0 -122
- package/dist/channel/internal/store/watch.js.map +0 -1
- package/dist/channel/internal/store/worker-state.d.ts +0 -56
- package/dist/channel/internal/store/worker-state.d.ts.map +0 -1
- package/dist/channel/internal/store/worker-state.js +0 -220
- package/dist/channel/internal/store/worker-state.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -7
- package/dist/index.js.map +0 -1
- package/dist/task/adapter-middleware.d.ts +0 -118
- package/dist/task/adapter-middleware.d.ts.map +0 -1
- package/dist/task/adapter-middleware.js +0 -508
- package/dist/task/adapter-middleware.js.map +0 -1
- package/dist/task/contract-migrate.d.ts +0 -29
- package/dist/task/contract-migrate.d.ts.map +0 -1
- package/dist/task/contract-migrate.js +0 -207
- package/dist/task/contract-migrate.js.map +0 -1
- package/dist/task/full-quality.d.ts +0 -89
- package/dist/task/full-quality.d.ts.map +0 -1
- package/dist/task/full-quality.js +0 -379
- package/dist/task/full-quality.js.map +0 -1
- package/dist/task/index.d.ts +0 -31
- package/dist/task/index.d.ts.map +0 -1
- package/dist/task/index.js +0 -20
- package/dist/task/index.js.map +0 -1
- package/dist/task/kernel-cli.d.ts +0 -44
- package/dist/task/kernel-cli.d.ts.map +0 -1
- package/dist/task/kernel-cli.js +0 -287
- package/dist/task/kernel-cli.js.map +0 -1
- package/dist/task/kernel-contract.d.ts +0 -113
- package/dist/task/kernel-contract.d.ts.map +0 -1
- package/dist/task/kernel-contract.js +0 -332
- package/dist/task/kernel-contract.js.map +0 -1
- package/dist/task/kernel-store.d.ts +0 -99
- package/dist/task/kernel-store.d.ts.map +0 -1
- package/dist/task/kernel-store.js +0 -735
- package/dist/task/kernel-store.js.map +0 -1
- package/dist/task/kernel-surface.d.ts +0 -39
- package/dist/task/kernel-surface.d.ts.map +0 -1
- package/dist/task/kernel-surface.js +0 -73
- package/dist/task/kernel-surface.js.map +0 -1
- package/dist/task/lite-context-pack.d.ts +0 -71
- package/dist/task/lite-context-pack.d.ts.map +0 -1
- package/dist/task/lite-context-pack.js +0 -175
- package/dist/task/lite-context-pack.js.map +0 -1
- package/dist/task/ondemand-topology.d.ts +0 -108
- package/dist/task/ondemand-topology.d.ts.map +0 -1
- package/dist/task/ondemand-topology.js +0 -453
- package/dist/task/ondemand-topology.js.map +0 -1
- package/dist/task/p36-artifact-migrate.d.ts +0 -61
- package/dist/task/p36-artifact-migrate.d.ts.map +0 -1
- package/dist/task/p36-artifact-migrate.js +0 -336
- package/dist/task/p36-artifact-migrate.js.map +0 -1
- package/dist/task/p36-wave-c.d.ts +0 -39
- package/dist/task/p36-wave-c.d.ts.map +0 -1
- package/dist/task/p36-wave-c.js +0 -100
- package/dist/task/p36-wave-c.js.map +0 -1
- package/dist/task/paths.d.ts +0 -37
- package/dist/task/paths.d.ts.map +0 -1
- package/dist/task/paths.js +0 -49
- package/dist/task/paths.js.map +0 -1
- package/dist/task/phase.d.ts +0 -27
- package/dist/task/phase.d.ts.map +0 -1
- package/dist/task/phase.js +0 -24
- package/dist/task/phase.js.map +0 -1
- package/dist/task/records.d.ts +0 -48
- package/dist/task/records.d.ts.map +0 -1
- package/dist/task/records.js +0 -100
- package/dist/task/records.js.map +0 -1
- package/dist/task/schema.d.ts +0 -77
- package/dist/task/schema.d.ts.map +0 -1
- package/dist/task/schema.js +0 -220
- package/dist/task/schema.js.map +0 -1
- package/dist/testing/index.d.ts +0 -2
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -4
- 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"}
|
package/dist/task/p36-wave-c.js
DELETED
|
@@ -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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"}
|
package/dist/task/paths.d.ts
DELETED
|
@@ -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
|
package/dist/task/paths.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/task/paths.js
DELETED
|
@@ -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
|
package/dist/task/paths.js.map
DELETED
|
@@ -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"}
|
package/dist/task/phase.d.ts
DELETED
|
@@ -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
|
package/dist/task/phase.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/task/phase.js
DELETED
|
@@ -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
|
package/dist/task/phase.js.map
DELETED
|
@@ -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"}
|