@refrakt-md/plan 0.9.5 → 0.9.7
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/dist/cards.d.ts +23 -0
- package/dist/cards.d.ts.map +1 -0
- package/dist/cards.js +150 -0
- package/dist/cards.js.map +1 -0
- package/dist/cli-plugin.d.ts.map +1 -1
- package/dist/cli-plugin.js +68 -5
- package/dist/cli-plugin.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +13 -0
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/create.js +3 -3
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/history.d.ts +21 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +261 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +7 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +149 -26
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/next.d.ts.map +1 -1
- package/dist/commands/next.js +22 -6
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/plan-behaviors.js +2 -1
- package/dist/commands/plan-behaviors.js.map +1 -1
- package/dist/commands/render-pipeline.d.ts.map +1 -1
- package/dist/commands/render-pipeline.js +148 -128
- package/dist/commands/render-pipeline.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +54 -0
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/templates.js +13 -13
- package/dist/commands/templates.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +39 -11
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +119 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +86 -23
- package/dist/config.js.map +1 -1
- package/dist/diff.d.ts +35 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +88 -0
- package/dist/diff.js.map +1 -0
- package/dist/entity-tabs-behavior.d.ts +13 -0
- package/dist/entity-tabs-behavior.d.ts.map +1 -0
- package/dist/entity-tabs-behavior.js +94 -0
- package/dist/entity-tabs-behavior.js.map +1 -0
- package/dist/history.d.ts +89 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +336 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/pipeline.d.ts +11 -11
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +468 -202
- package/dist/pipeline.js.map +1 -1
- package/dist/relationships.d.ts +36 -0
- package/dist/relationships.d.ts.map +1 -0
- package/dist/relationships.js +128 -0
- package/dist/relationships.js.map +1 -0
- package/dist/scanner-core.d.ts +10 -0
- package/dist/scanner-core.d.ts.map +1 -0
- package/dist/scanner-core.js +230 -0
- package/dist/scanner-core.js.map +1 -0
- package/dist/scanner.d.ts +2 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +7 -124
- package/dist/scanner.js.map +1 -1
- package/dist/tags/bug.d.ts.map +1 -1
- package/dist/tags/bug.js +22 -1
- package/dist/tags/bug.js.map +1 -1
- package/dist/tags/decision.d.ts.map +1 -1
- package/dist/tags/decision.js +23 -1
- package/dist/tags/decision.js.map +1 -1
- package/dist/tags/milestone.d.ts.map +1 -1
- package/dist/tags/milestone.js +7 -4
- package/dist/tags/milestone.js.map +1 -1
- package/dist/tags/plan-history.d.ts +4 -0
- package/dist/tags/plan-history.d.ts.map +1 -0
- package/dist/tags/plan-history.js +46 -0
- package/dist/tags/plan-history.js.map +1 -0
- package/dist/tags/spec.d.ts.map +1 -1
- package/dist/tags/spec.js +4 -5
- package/dist/tags/spec.js.map +1 -1
- package/dist/tags/work.d.ts.map +1 -1
- package/dist/tags/work.js +28 -7
- package/dist/tags/work.js.map +1 -1
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +10 -0
- package/dist/util.js.map +1 -1
- package/package.json +26 -9
- package/styles/default.css +0 -586
- package/styles/minimal.css +0 -386
- package/styles/tokens.css +0 -13
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { resolve, join } from 'node:path';
|
|
2
|
+
import { scanPlanFiles } from '../scanner.js';
|
|
3
|
+
import { extractEntityHistory, extractBatchHistory, readHistoryCache, writeHistoryCache, buildGlobalTimeline, } from '../history.js';
|
|
4
|
+
function findEntity(id, dir) {
|
|
5
|
+
const entities = scanPlanFiles(dir);
|
|
6
|
+
const entity = entities.find(e => e.attributes.id === id || e.attributes.name === id);
|
|
7
|
+
if (!entity)
|
|
8
|
+
return null;
|
|
9
|
+
return { entity, absPath: resolve(join(dir, entity.file)) };
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Convert --since value to a git-compatible --since string.
|
|
13
|
+
* Accepts: "7d", "30d", "2w", or ISO date strings.
|
|
14
|
+
*/
|
|
15
|
+
function normalizeSince(since) {
|
|
16
|
+
const durationMatch = since.match(/^(\d+)([dwmy])$/);
|
|
17
|
+
if (durationMatch) {
|
|
18
|
+
const n = durationMatch[1];
|
|
19
|
+
const unitMap = { d: 'days', w: 'weeks', m: 'months', y: 'years' };
|
|
20
|
+
const unit = unitMap[durationMatch[2]] ?? 'days';
|
|
21
|
+
return `${n} ${unit} ago`;
|
|
22
|
+
}
|
|
23
|
+
// Assume ISO date or other git-compatible format
|
|
24
|
+
return since;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Format a date string for display (e.g. "Apr 12").
|
|
28
|
+
*/
|
|
29
|
+
function formatDate(isoDate) {
|
|
30
|
+
const d = new Date(isoDate);
|
|
31
|
+
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
32
|
+
return `${months[d.getMonth()]} ${String(d.getDate()).padStart(2, ' ')}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Format a single attribute change for display.
|
|
36
|
+
*/
|
|
37
|
+
function formatAttrChange(change) {
|
|
38
|
+
if (change.from === null)
|
|
39
|
+
return `${change.field}: +${change.to}`;
|
|
40
|
+
if (change.to === null)
|
|
41
|
+
return `${change.field}: -${change.from}`;
|
|
42
|
+
return `${change.field}: ${change.from} → ${change.to}`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format a single criteria change for display.
|
|
46
|
+
*/
|
|
47
|
+
function formatCriteriaChange(change) {
|
|
48
|
+
switch (change.action) {
|
|
49
|
+
case 'checked': return `☑ ${change.text}`;
|
|
50
|
+
case 'unchecked': return `☐ ${change.text}`;
|
|
51
|
+
case 'added': return `+ ${change.text}`;
|
|
52
|
+
case 'removed': return `- ${change.text}`;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// ─── Single-Entity Mode ───
|
|
56
|
+
function formatSingleEntity(entity, events, limit) {
|
|
57
|
+
const id = entity.attributes.id ?? entity.attributes.name ?? '';
|
|
58
|
+
const title = entity.title ?? '(untitled)';
|
|
59
|
+
const lines = [`${id}: ${title}`, ''];
|
|
60
|
+
// Display newest-first
|
|
61
|
+
const reversed = [...events].reverse().slice(0, limit);
|
|
62
|
+
for (const event of reversed) {
|
|
63
|
+
const date = formatDate(event.date);
|
|
64
|
+
const hash = event.shortHash;
|
|
65
|
+
if (event.kind === 'created') {
|
|
66
|
+
const attrs = event.initialAttributes ?? {};
|
|
67
|
+
const parts = Object.entries(attrs)
|
|
68
|
+
.filter(([k]) => k !== 'id')
|
|
69
|
+
.map(([, v]) => v);
|
|
70
|
+
lines.push(`${date} Created (${parts.join(', ')})${' '.repeat(Math.max(1, 40 - parts.join(', ').length))}${hash}`);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// First line: date + first change + hash
|
|
74
|
+
const changeLines = [];
|
|
75
|
+
if (event.attributeChanges) {
|
|
76
|
+
for (const c of event.attributeChanges) {
|
|
77
|
+
changeLines.push(formatAttrChange(c));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (event.criteriaChanges) {
|
|
81
|
+
for (const c of event.criteriaChanges) {
|
|
82
|
+
changeLines.push(formatCriteriaChange(c));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (event.kind === 'resolution') {
|
|
86
|
+
changeLines.push('Resolution recorded');
|
|
87
|
+
}
|
|
88
|
+
if (event.kind === 'content') {
|
|
89
|
+
changeLines.push('Content edited');
|
|
90
|
+
}
|
|
91
|
+
if (changeLines.length > 0) {
|
|
92
|
+
lines.push(`${date} ${changeLines[0]}${' '.repeat(Math.max(1, 48 - changeLines[0].length))}${hash}`);
|
|
93
|
+
for (let i = 1; i < changeLines.length; i++) {
|
|
94
|
+
lines.push(` ${changeLines[i]}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return lines.join('\n');
|
|
100
|
+
}
|
|
101
|
+
function groupByCommit(batchHistory, entities) {
|
|
102
|
+
const entityByFile = new Map(entities.map(e => [e.file, e]));
|
|
103
|
+
const commitMap = new Map();
|
|
104
|
+
for (const [file, events] of batchHistory) {
|
|
105
|
+
const entity = entityByFile.get(file);
|
|
106
|
+
const entityId = entity?.attributes.id ?? entity?.attributes.name ?? file;
|
|
107
|
+
for (const event of events) {
|
|
108
|
+
let group = commitMap.get(event.hash);
|
|
109
|
+
if (!group) {
|
|
110
|
+
group = {
|
|
111
|
+
hash: event.hash,
|
|
112
|
+
shortHash: event.shortHash,
|
|
113
|
+
date: event.date,
|
|
114
|
+
author: event.author,
|
|
115
|
+
message: event.message,
|
|
116
|
+
entityEvents: [],
|
|
117
|
+
};
|
|
118
|
+
commitMap.set(event.hash, group);
|
|
119
|
+
}
|
|
120
|
+
group.entityEvents.push({ file, entityId, event });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Sort newest first
|
|
124
|
+
const groups = [...commitMap.values()];
|
|
125
|
+
groups.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
|
|
126
|
+
return groups;
|
|
127
|
+
}
|
|
128
|
+
function formatEntitySummary(entityId, event) {
|
|
129
|
+
if (event.kind === 'created') {
|
|
130
|
+
const attrs = event.initialAttributes ?? {};
|
|
131
|
+
const parts = Object.entries(attrs)
|
|
132
|
+
.filter(([k]) => k !== 'id' && k !== 'name')
|
|
133
|
+
.map(([, v]) => v);
|
|
134
|
+
return `${entityId} Created (${parts.join(', ')})`;
|
|
135
|
+
}
|
|
136
|
+
const parts = [];
|
|
137
|
+
if (event.attributeChanges) {
|
|
138
|
+
for (const c of event.attributeChanges) {
|
|
139
|
+
parts.push(formatAttrChange(c));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (event.criteriaChanges && event.criteriaChanges.length > 0) {
|
|
143
|
+
const checked = event.criteriaChanges.filter(c => c.action === 'checked').length;
|
|
144
|
+
const total = event.criteriaChanges.length;
|
|
145
|
+
parts.push(`☑ ${checked}/${total} criteria`);
|
|
146
|
+
}
|
|
147
|
+
if (event.kind === 'resolution') {
|
|
148
|
+
parts.push('Resolution recorded');
|
|
149
|
+
}
|
|
150
|
+
if (event.kind === 'content') {
|
|
151
|
+
parts.push('Content edited');
|
|
152
|
+
}
|
|
153
|
+
return `${entityId} ${parts.join(', ')}`;
|
|
154
|
+
}
|
|
155
|
+
function formatGlobalFeed(groups, limit) {
|
|
156
|
+
const lines = [];
|
|
157
|
+
const limited = groups.slice(0, limit);
|
|
158
|
+
for (const group of limited) {
|
|
159
|
+
const date = formatDate(group.date);
|
|
160
|
+
lines.push(`${date} ${group.shortHash} ${group.message}`);
|
|
161
|
+
for (const { entityId, event } of group.entityEvents) {
|
|
162
|
+
lines.push(` ${formatEntitySummary(entityId, event)}`);
|
|
163
|
+
}
|
|
164
|
+
lines.push('');
|
|
165
|
+
}
|
|
166
|
+
return lines.join('\n');
|
|
167
|
+
}
|
|
168
|
+
// ─── Main Runner ───
|
|
169
|
+
export function runHistory(options) {
|
|
170
|
+
const { dir, id, limit, since, type, author, status, all, formatJson } = options;
|
|
171
|
+
if (id) {
|
|
172
|
+
// Single-entity mode
|
|
173
|
+
const found = findEntity(id, dir);
|
|
174
|
+
if (!found) {
|
|
175
|
+
const errMsg = `Entity not found: ${id}`;
|
|
176
|
+
if (formatJson) {
|
|
177
|
+
console.log(JSON.stringify({ error: errMsg }));
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
console.error(`Error: ${errMsg}`);
|
|
181
|
+
}
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
const events = extractEntityHistory(found.entity.file, dir);
|
|
185
|
+
if (formatJson) {
|
|
186
|
+
console.log(JSON.stringify({ id, events: [...events].reverse().slice(0, limit) }, null, 2));
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.log(formatSingleEntity(found.entity, events, limit));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Global mode
|
|
194
|
+
const gitSince = since ? normalizeSince(since) : undefined;
|
|
195
|
+
const cache = readHistoryCache(dir);
|
|
196
|
+
const batchHistory = extractBatchHistory(dir, '.', { since: gitSince, cache });
|
|
197
|
+
writeHistoryCache(dir, cache);
|
|
198
|
+
// Get entity metadata for ID resolution
|
|
199
|
+
const entities = scanPlanFiles(dir);
|
|
200
|
+
// Apply filters
|
|
201
|
+
const typeFilter = type ? new Set(type.split(',').map(t => t.trim().toLowerCase())) : null;
|
|
202
|
+
const entityByFile = new Map(entities.map(e => [e.file, e]));
|
|
203
|
+
if (typeFilter || author || status || !all) {
|
|
204
|
+
for (const [file, events] of batchHistory) {
|
|
205
|
+
const entity = entityByFile.get(file);
|
|
206
|
+
// Type filter
|
|
207
|
+
if (typeFilter && entity && !typeFilter.has(entity.type)) {
|
|
208
|
+
batchHistory.delete(file);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
// Author filter (applied per-event, remove non-matching events)
|
|
212
|
+
if (author) {
|
|
213
|
+
const filtered = events.filter(e => e.author.toLowerCase().includes(author.toLowerCase()));
|
|
214
|
+
if (filtered.length === 0) {
|
|
215
|
+
batchHistory.delete(file);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
batchHistory.set(file, filtered);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Status filter — keep only events where status transitioned to the given value
|
|
222
|
+
if (status) {
|
|
223
|
+
const filtered = events.filter(e => {
|
|
224
|
+
if (e.kind === 'created') {
|
|
225
|
+
return e.initialAttributes?.status === status;
|
|
226
|
+
}
|
|
227
|
+
if (e.attributeChanges) {
|
|
228
|
+
return e.attributeChanges.some(c => c.field === 'status' && c.to === status);
|
|
229
|
+
}
|
|
230
|
+
return false;
|
|
231
|
+
});
|
|
232
|
+
if (filtered.length === 0) {
|
|
233
|
+
batchHistory.delete(file);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
batchHistory.set(file, filtered);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Exclude content-only events from global feed (unless --all)
|
|
240
|
+
if (!all) {
|
|
241
|
+
const filtered = (batchHistory.get(file) ?? events).filter(e => e.kind !== 'content');
|
|
242
|
+
if (filtered.length === 0) {
|
|
243
|
+
batchHistory.delete(file);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
batchHistory.set(file, filtered);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (formatJson) {
|
|
252
|
+
const allEvents = buildGlobalTimeline(batchHistory).slice(0, limit);
|
|
253
|
+
console.log(JSON.stringify({ events: allEvents }, null, 2));
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
const groups = groupByCommit(batchHistory, entities);
|
|
257
|
+
console.log(formatGlobalFeed(groups, limit));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/commands/history.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
export declare const EXIT_SUCCESS = 0;
|
|
2
2
|
export declare const EXIT_ALREADY_EXISTS = 1;
|
|
3
|
+
export type AgentTarget = 'claude' | 'cursor' | 'copilot' | 'windsurf' | 'cline' | 'none';
|
|
4
|
+
/** Map of agent tool names to their instruction file paths (relative to project root). */
|
|
5
|
+
export declare const AGENT_FILES: Record<string, string>;
|
|
3
6
|
export interface InitOptions {
|
|
4
7
|
dir: string;
|
|
5
|
-
/** Path to the project root (for
|
|
8
|
+
/** Path to the project root (for agent instruction files). Defaults to '.' */
|
|
6
9
|
projectRoot?: string;
|
|
10
|
+
/** Which AI tool instruction file(s) to update. Auto-detects when omitted. */
|
|
11
|
+
agent?: AgentTarget;
|
|
7
12
|
}
|
|
8
13
|
export interface InitResult {
|
|
9
14
|
dir: string;
|
|
10
15
|
created: string[];
|
|
11
|
-
|
|
16
|
+
agentFilesUpdated: string[];
|
|
12
17
|
}
|
|
13
18
|
/**
|
|
14
19
|
* Initialize a plan directory structure with example files.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAE1F,0FAA0F;AAC1F,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM9C,CAAC;AAEF,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAoHD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CA8GxD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,32 +1,135 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
3
|
import { runCreate } from './create.js';
|
|
4
4
|
import { STATUS_PAGES, renderStatusPage, renderTypeIndexPage } from './templates.js';
|
|
5
5
|
export const EXIT_SUCCESS = 0;
|
|
6
6
|
export const EXIT_ALREADY_EXISTS = 1;
|
|
7
|
-
|
|
7
|
+
/** Map of agent tool names to their instruction file paths (relative to project root). */
|
|
8
|
+
export const AGENT_FILES = {
|
|
9
|
+
claude: 'CLAUDE.md',
|
|
10
|
+
cursor: '.cursorrules',
|
|
11
|
+
copilot: '.github/copilot-instructions.md',
|
|
12
|
+
windsurf: '.windsurfrules',
|
|
13
|
+
cline: '.clinerules',
|
|
14
|
+
};
|
|
15
|
+
/** Short pointer appended to agent instruction files. */
|
|
16
|
+
const POINTER_SECTION = `
|
|
8
17
|
## Plan
|
|
9
18
|
|
|
10
|
-
Project planning content lives in \`plan/\`
|
|
19
|
+
Project planning content lives in \`plan/\` using \`@refrakt-md/plan\`. See \`plan/INSTRUCTIONS.md\` for the full workflow guide.
|
|
11
20
|
|
|
12
|
-
|
|
21
|
+
Quick start: \`refrakt plan next\` | \`refrakt plan status\` | \`refrakt plan create work --title "..."\`
|
|
22
|
+
`;
|
|
23
|
+
/** Full tool-agnostic workflow guide written to plan/INSTRUCTIONS.md. */
|
|
24
|
+
const INSTRUCTIONS_CONTENT = `# Plan — Workflow Guide
|
|
25
|
+
|
|
26
|
+
This directory contains project planning content using the \`@refrakt-md/plan\` runes package. All files are Markdoc (\`.md\` with \`{% %}\` tags).
|
|
27
|
+
|
|
28
|
+
## Directory Layout
|
|
29
|
+
|
|
30
|
+
\`\`\`
|
|
31
|
+
plan/
|
|
32
|
+
specs/ — Specifications (what to build)
|
|
33
|
+
work/ — Work items and bugs (how to build it)
|
|
34
|
+
decisions/ — Architecture decision records (why it's built this way)
|
|
35
|
+
milestones/ — Named release targets with scope and goals
|
|
36
|
+
\`\`\`
|
|
37
|
+
|
|
38
|
+
## Workflow
|
|
13
39
|
|
|
14
40
|
1. Find next work item: \`refrakt plan next\`
|
|
15
41
|
2. Start working: \`refrakt plan update <id> --status in-progress\`
|
|
16
|
-
3.
|
|
17
|
-
4.
|
|
18
|
-
5.
|
|
42
|
+
3. Read referenced specs and decisions before implementing
|
|
43
|
+
4. Check off criteria: \`refrakt plan update <id> --check "criterion text"\`
|
|
44
|
+
5. Mark complete with resolution: \`refrakt plan update <id> --status done --resolve "summary of what was done"\`
|
|
45
|
+
6. Check project status: \`refrakt plan status\`
|
|
19
46
|
|
|
20
47
|
When marking a work item done, always provide a \`--resolve\` summary unless the change is trivial. This captures implementation context (files changed, decisions made, branch/PR) for future reference.
|
|
48
|
+
|
|
49
|
+
## ID Conventions
|
|
50
|
+
|
|
51
|
+
| Type | Prefix | Example |
|
|
52
|
+
|------|--------|---------|
|
|
53
|
+
| Spec | \`SPEC-\` | \`SPEC-023\` |
|
|
54
|
+
| Work | \`WORK-\` | \`WORK-051\` |
|
|
55
|
+
| Decision | \`ADR-\` | \`ADR-005\` |
|
|
56
|
+
| Bug | \`BUG-\` | \`BUG-001\` |
|
|
57
|
+
| Milestone | \`v\`+semver | \`v1.0.0\` |
|
|
58
|
+
|
|
59
|
+
IDs are auto-assigned when you omit \`--id\` from \`refrakt plan create\`.
|
|
60
|
+
|
|
61
|
+
## Valid Statuses
|
|
62
|
+
|
|
63
|
+
- **spec**: \`draft\` → \`review\` → \`accepted\` → \`superseded\` | \`deprecated\`
|
|
64
|
+
- **work**: \`draft\` → \`ready\` → \`in-progress\` → \`review\` → \`done\` (also: \`blocked\`)
|
|
65
|
+
- **bug**: \`reported\` → \`confirmed\` → \`in-progress\` → \`fixed\` (also: \`wontfix\`, \`duplicate\`)
|
|
66
|
+
- **decision**: \`proposed\` → \`accepted\` → \`superseded\` | \`deprecated\`
|
|
67
|
+
- **milestone**: \`planning\` → \`active\` → \`complete\`
|
|
68
|
+
|
|
69
|
+
## Creating Items
|
|
70
|
+
|
|
71
|
+
\`\`\`bash
|
|
72
|
+
refrakt plan create work --title "Description"
|
|
73
|
+
refrakt plan create bug --title "Description"
|
|
74
|
+
refrakt plan create spec --title "Description"
|
|
75
|
+
refrakt plan create decision --title "Description"
|
|
76
|
+
refrakt plan create milestone --id v1.0 --title "Description"
|
|
77
|
+
\`\`\`
|
|
78
|
+
|
|
79
|
+
## When to Create Each Type
|
|
80
|
+
|
|
81
|
+
- **Spec**: A new feature idea, design proposal, or system description. Source of truth for *what* to build.
|
|
82
|
+
- **Work item**: A discrete, implementable piece of work with acceptance criteria.
|
|
83
|
+
- **Bug**: A defect report. Use instead of a work item when something is broken rather than missing.
|
|
84
|
+
- **Decision**: An architectural choice that needs to be recorded for future reference.
|
|
85
|
+
|
|
86
|
+
## JSON Output
|
|
87
|
+
|
|
88
|
+
All commands support \`--format json\` for machine-readable output. This is useful for scripting, CI pipelines, and programmatic integration.
|
|
21
89
|
`;
|
|
90
|
+
/**
|
|
91
|
+
* Detect which agent instruction files already exist in the project root.
|
|
92
|
+
* Returns the relative file paths of existing files.
|
|
93
|
+
*/
|
|
94
|
+
function detectAgentFiles(projectRoot) {
|
|
95
|
+
const found = [];
|
|
96
|
+
for (const relPath of Object.values(AGENT_FILES)) {
|
|
97
|
+
if (existsSync(join(projectRoot, relPath))) {
|
|
98
|
+
found.push(relPath);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return found;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Append the plan pointer section to an agent instruction file.
|
|
105
|
+
* Creates the file (and parent directories) if it doesn't exist.
|
|
106
|
+
* Returns true if the file was updated.
|
|
107
|
+
*/
|
|
108
|
+
function appendPointer(projectRoot, relPath) {
|
|
109
|
+
const filePath = join(projectRoot, relPath);
|
|
110
|
+
if (existsSync(filePath)) {
|
|
111
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
112
|
+
if (content.includes('plan/INSTRUCTIONS.md') || content.includes('refrakt plan next')) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
appendFileSync(filePath, POINTER_SECTION);
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
const dir = dirname(filePath);
|
|
119
|
+
if (!existsSync(dir)) {
|
|
120
|
+
mkdirSync(dir, { recursive: true });
|
|
121
|
+
}
|
|
122
|
+
writeFileSync(filePath, POINTER_SECTION.trimStart());
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
22
125
|
/**
|
|
23
126
|
* Initialize a plan directory structure with example files.
|
|
24
127
|
*/
|
|
25
128
|
export function runInit(options) {
|
|
26
|
-
const { dir, projectRoot = '.' } = options;
|
|
129
|
+
const { dir, projectRoot = '.', agent } = options;
|
|
27
130
|
const created = [];
|
|
28
131
|
// Create directories
|
|
29
|
-
const dirs = ['work', '
|
|
132
|
+
const dirs = ['work', 'specs', 'decisions', 'milestones'];
|
|
30
133
|
for (const sub of dirs) {
|
|
31
134
|
const path = join(dir, sub);
|
|
32
135
|
if (!existsSync(path)) {
|
|
@@ -36,10 +139,10 @@ export function runInit(options) {
|
|
|
36
139
|
}
|
|
37
140
|
// Create example files — use runCreate which generates slug-based filenames
|
|
38
141
|
const examples = [
|
|
39
|
-
{ type: 'spec', id: 'SPEC-001', title: 'Example Spec', subDir: '
|
|
142
|
+
{ type: 'spec', id: 'SPEC-001', title: 'Example Spec', subDir: 'specs', slug: 'example-spec.md' },
|
|
40
143
|
{ type: 'work', id: 'WORK-001', title: 'Example Work Item', subDir: 'work', slug: 'example-work-item.md', attrs: { priority: 'medium', complexity: 'simple', tags: '' } },
|
|
41
|
-
{ type: 'decision', id: 'ADR-001', title: 'Example Decision', subDir: '
|
|
42
|
-
{ type: 'milestone', id: 'v0.1.0', title: 'First Release', subDir: '
|
|
144
|
+
{ type: 'decision', id: 'ADR-001', title: 'Example Decision', subDir: 'decisions', slug: 'example-decision.md' },
|
|
145
|
+
{ type: 'milestone', id: 'v0.1.0', title: 'First Release', subDir: 'milestones', slug: 'first-release.md' },
|
|
43
146
|
];
|
|
44
147
|
for (const ex of examples) {
|
|
45
148
|
const filePath = join(dir, ex.subDir, ex.slug);
|
|
@@ -75,10 +178,10 @@ This directory contains project planning content.
|
|
|
75
178
|
|
|
76
179
|
## Structure
|
|
77
180
|
|
|
78
|
-
- [Specifications](
|
|
181
|
+
- [Specifications](specs/) — What to build
|
|
79
182
|
- [Work Items](work/) — How to build it
|
|
80
|
-
- [Decisions](
|
|
81
|
-
- [Milestones](
|
|
183
|
+
- [Decisions](decisions/) — Why it's built this way
|
|
184
|
+
- [Milestones](milestones/) — Named release targets
|
|
82
185
|
|
|
83
186
|
## Quick Start
|
|
84
187
|
|
|
@@ -90,20 +193,40 @@ refrakt plan create work --id WORK-002 --title "My task"
|
|
|
90
193
|
`);
|
|
91
194
|
created.push(indexFile);
|
|
92
195
|
}
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
196
|
+
// Create INSTRUCTIONS.md
|
|
197
|
+
const instructionsFile = join(dir, 'INSTRUCTIONS.md');
|
|
198
|
+
if (!existsSync(instructionsFile)) {
|
|
199
|
+
writeFileSync(instructionsFile, INSTRUCTIONS_CONTENT);
|
|
200
|
+
created.push(instructionsFile);
|
|
201
|
+
}
|
|
202
|
+
// Update agent instruction files
|
|
203
|
+
const agentFilesUpdated = [];
|
|
204
|
+
if (agent === 'none') {
|
|
205
|
+
// Skip — user explicitly opted out
|
|
206
|
+
}
|
|
207
|
+
else if (agent) {
|
|
208
|
+
// Specific agent requested
|
|
209
|
+
const relPath = AGENT_FILES[agent];
|
|
210
|
+
if (relPath && appendPointer(projectRoot, relPath)) {
|
|
211
|
+
agentFilesUpdated.push(relPath);
|
|
101
212
|
}
|
|
102
213
|
}
|
|
103
214
|
else {
|
|
104
|
-
|
|
105
|
-
|
|
215
|
+
// Auto-detect: append to all existing agent files, fallback to CLAUDE.md
|
|
216
|
+
const existing = detectAgentFiles(projectRoot);
|
|
217
|
+
if (existing.length > 0) {
|
|
218
|
+
for (const relPath of existing) {
|
|
219
|
+
if (appendPointer(projectRoot, relPath)) {
|
|
220
|
+
agentFilesUpdated.push(relPath);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
if (appendPointer(projectRoot, AGENT_FILES.claude)) {
|
|
226
|
+
agentFilesUpdated.push(AGENT_FILES.claude);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
106
229
|
}
|
|
107
|
-
return { dir, created,
|
|
230
|
+
return { dir, created, agentFilesUpdated };
|
|
108
231
|
}
|
|
109
232
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAIrC,0FAA0F;AAC1F,MAAM,CAAC,MAAM,WAAW,GAA2B;IAClD,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,cAAc;IACtB,OAAO,EAAE,iCAAiC;IAC1C,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,aAAa;CACpB,CAAC;AAgBF,yDAAyD;AACzD,MAAM,eAAe,GAAG;;;;;;CAMvB,CAAC;AAEF,yEAAyE;AACzE,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiE5B,CAAC;AAEF;;;GAGG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAClD,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,WAAmB,EAAE,OAAe;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvF,OAAO,KAAK,CAAC;QACd,CAAC;QACD,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAoB;IAC3C,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,qBAAqB;IACrB,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAED,4EAA4E;IAC5E,MAAM,QAAQ,GAAoJ;QACjK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE;QACjG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;QACzK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE;QAChH,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,EAAE;KAC3G,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,2CAA2C;IAC3C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,kEAAkE;IAClE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,aAAa,CAAC,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,aAAa,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;;;CAkB1B,CAAC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,yBAAyB;IACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnC,aAAa,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,iCAAiC;IACjC,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACtB,mCAAmC;IACpC,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QAClB,2BAA2B;QAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,OAAO,IAAI,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;YACpD,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;SAAM,CAAC;QACP,yEAAyE;QACzE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,IAAI,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;oBACzC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,MAAM,WAAW,WAAW;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAyFxD"}
|
package/dist/commands/next.js
CHANGED
|
@@ -48,13 +48,29 @@ export function runNext(options) {
|
|
|
48
48
|
const status = e.attributes.status ?? '';
|
|
49
49
|
return readyStatuses.includes(status);
|
|
50
50
|
});
|
|
51
|
-
// Exclude items with unfinished dependencies
|
|
51
|
+
// Exclude items with unfinished dependencies.
|
|
52
|
+
// If the entity has scoped refs, only refs in the Dependencies section block.
|
|
53
|
+
// Otherwise, fall back to treating all refs as potential blockers (backward compat).
|
|
52
54
|
candidates = candidates.filter(e => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
//
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
const hasDepsSection = (e.knownSectionsPresent ?? []).includes('Dependencies');
|
|
56
|
+
if (hasDepsSection) {
|
|
57
|
+
// Section-aware: only Dependencies refs block
|
|
58
|
+
for (const ref of e.scopedRefs) {
|
|
59
|
+
if (ref.section !== 'Dependencies')
|
|
60
|
+
continue;
|
|
61
|
+
const refStatus = statusMap.get(ref.id);
|
|
62
|
+
if (refStatus !== undefined && !DONE_STATUSES.has(refStatus)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Fallback: all refs treated as potential blockers (same as before)
|
|
69
|
+
for (const refId of e.refs) {
|
|
70
|
+
const refStatus = statusMap.get(refId);
|
|
71
|
+
if (refStatus !== undefined && !DONE_STATUSES.has(refStatus)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
58
74
|
}
|
|
59
75
|
}
|
|
60
76
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,8CAA8C;AAE9C,MAAM,cAAc,GAA2B;IAC9C,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACN,CAAC;AAEF,MAAM,gBAAgB,GAA2B;IAChD,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;CACV,CAAC;AAEF,0DAA0D;AAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEjD,mDAAmD;AACnD,MAAM,cAAc,GAA6B;IAChD,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,GAAG,EAAE,CAAC,WAAW,CAAC;CAClB,CAAC;AAEF,qBAAqB;AAErB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AACjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AA4BnC;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAoB;IAC3C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,GAAG,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAE3E,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAEpC,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAChD,IAAI,EAAE;YAAE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE7D,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;QACzC,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,
|
|
1
|
+
{"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { initRuneBehaviors, initLayoutBehaviors, registerBehaviors, tabsBehavior } from '@refrakt-md/behaviors';
|
|
2
|
+
import { entityTabsBehavior } from '../entity-tabs-behavior.js';
|
|
2
3
|
// Register plan-specific behaviors
|
|
3
|
-
registerBehaviors({ 'milestone-backlog': tabsBehavior });
|
|
4
|
+
registerBehaviors({ 'milestone-backlog': tabsBehavior, 'plan-entity-tabs': entityTabsBehavior });
|
|
4
5
|
// Initialize all rune + layout behaviors on DOM ready
|
|
5
6
|
initRuneBehaviors(document);
|
|
6
7
|
initLayoutBehaviors(document);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-behaviors.js","sourceRoot":"","sources":["../../src/commands/plan-behaviors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-behaviors.js","sourceRoot":"","sources":["../../src/commands/plan-behaviors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,mCAAmC;AACnC,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAEjG,sDAAsD;AACtD,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC5B,mBAAmB,CAAC,QAAQ,CAAC,CAAC"}
|