@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.
Files changed (103) hide show
  1. package/dist/cards.d.ts +23 -0
  2. package/dist/cards.d.ts.map +1 -0
  3. package/dist/cards.js +150 -0
  4. package/dist/cards.js.map +1 -0
  5. package/dist/cli-plugin.d.ts.map +1 -1
  6. package/dist/cli-plugin.js +68 -5
  7. package/dist/cli-plugin.js.map +1 -1
  8. package/dist/commands/build.d.ts.map +1 -1
  9. package/dist/commands/build.js +13 -0
  10. package/dist/commands/build.js.map +1 -1
  11. package/dist/commands/create.js +3 -3
  12. package/dist/commands/create.js.map +1 -1
  13. package/dist/commands/history.d.ts +21 -0
  14. package/dist/commands/history.d.ts.map +1 -0
  15. package/dist/commands/history.js +261 -0
  16. package/dist/commands/history.js.map +1 -0
  17. package/dist/commands/init.d.ts +7 -2
  18. package/dist/commands/init.d.ts.map +1 -1
  19. package/dist/commands/init.js +149 -26
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/next.d.ts.map +1 -1
  22. package/dist/commands/next.js +22 -6
  23. package/dist/commands/next.js.map +1 -1
  24. package/dist/commands/plan-behaviors.js +2 -1
  25. package/dist/commands/plan-behaviors.js.map +1 -1
  26. package/dist/commands/render-pipeline.d.ts.map +1 -1
  27. package/dist/commands/render-pipeline.js +148 -128
  28. package/dist/commands/render-pipeline.js.map +1 -1
  29. package/dist/commands/serve.d.ts.map +1 -1
  30. package/dist/commands/serve.js +54 -0
  31. package/dist/commands/serve.js.map +1 -1
  32. package/dist/commands/templates.js +13 -13
  33. package/dist/commands/templates.js.map +1 -1
  34. package/dist/commands/update.d.ts.map +1 -1
  35. package/dist/commands/update.js +39 -11
  36. package/dist/commands/update.js.map +1 -1
  37. package/dist/commands/validate.d.ts.map +1 -1
  38. package/dist/commands/validate.js +119 -1
  39. package/dist/commands/validate.js.map +1 -1
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +86 -23
  42. package/dist/config.js.map +1 -1
  43. package/dist/diff.d.ts +35 -0
  44. package/dist/diff.d.ts.map +1 -0
  45. package/dist/diff.js +88 -0
  46. package/dist/diff.js.map +1 -0
  47. package/dist/entity-tabs-behavior.d.ts +13 -0
  48. package/dist/entity-tabs-behavior.d.ts.map +1 -0
  49. package/dist/entity-tabs-behavior.js +94 -0
  50. package/dist/entity-tabs-behavior.js.map +1 -0
  51. package/dist/history.d.ts +89 -0
  52. package/dist/history.d.ts.map +1 -0
  53. package/dist/history.js +336 -0
  54. package/dist/history.js.map +1 -0
  55. package/dist/index.d.ts +2 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +11 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/pipeline.d.ts +11 -11
  60. package/dist/pipeline.d.ts.map +1 -1
  61. package/dist/pipeline.js +468 -202
  62. package/dist/pipeline.js.map +1 -1
  63. package/dist/relationships.d.ts +36 -0
  64. package/dist/relationships.d.ts.map +1 -0
  65. package/dist/relationships.js +128 -0
  66. package/dist/relationships.js.map +1 -0
  67. package/dist/scanner-core.d.ts +10 -0
  68. package/dist/scanner-core.d.ts.map +1 -0
  69. package/dist/scanner-core.js +230 -0
  70. package/dist/scanner-core.js.map +1 -0
  71. package/dist/scanner.d.ts +2 -1
  72. package/dist/scanner.d.ts.map +1 -1
  73. package/dist/scanner.js +7 -124
  74. package/dist/scanner.js.map +1 -1
  75. package/dist/tags/bug.d.ts.map +1 -1
  76. package/dist/tags/bug.js +22 -1
  77. package/dist/tags/bug.js.map +1 -1
  78. package/dist/tags/decision.d.ts.map +1 -1
  79. package/dist/tags/decision.js +23 -1
  80. package/dist/tags/decision.js.map +1 -1
  81. package/dist/tags/milestone.d.ts.map +1 -1
  82. package/dist/tags/milestone.js +7 -4
  83. package/dist/tags/milestone.js.map +1 -1
  84. package/dist/tags/plan-history.d.ts +4 -0
  85. package/dist/tags/plan-history.d.ts.map +1 -0
  86. package/dist/tags/plan-history.js +46 -0
  87. package/dist/tags/plan-history.js.map +1 -0
  88. package/dist/tags/spec.d.ts.map +1 -1
  89. package/dist/tags/spec.js +4 -5
  90. package/dist/tags/spec.js.map +1 -1
  91. package/dist/tags/work.d.ts.map +1 -1
  92. package/dist/tags/work.js +28 -7
  93. package/dist/tags/work.js.map +1 -1
  94. package/dist/types.d.ts +20 -0
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/util.d.ts +2 -0
  97. package/dist/util.d.ts.map +1 -1
  98. package/dist/util.js +10 -0
  99. package/dist/util.js.map +1 -1
  100. package/package.json +26 -9
  101. package/styles/default.css +0 -586
  102. package/styles/minimal.css +0 -386
  103. 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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"}
@@ -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 CLAUDE.md). Defaults to '.' */
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
- claudeMdUpdated: boolean;
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,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CACzB;AAkBD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CA0FxD"}
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"}
@@ -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
- const WORKFLOW_SECTION = `
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/\` as Markdoc files using the \`@refrakt-md/plan\` runes package.
19
+ Project planning content lives in \`plan/\` using \`@refrakt-md/plan\`. See \`plan/INSTRUCTIONS.md\` for the full workflow guide.
11
20
 
12
- ### Workflow
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. Check off criteria: \`refrakt plan update <id> --check "criterion text"\`
17
- 4. Mark complete with resolution: \`refrakt plan update <id> --status done --resolve "summary of what was done"\`
18
- 5. Check project status: \`refrakt plan status\`
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', 'spec', 'decision', 'milestone'];
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: 'spec', slug: 'example-spec.md' },
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: 'decision', slug: 'example-decision.md' },
42
- { type: 'milestone', id: 'v0.1.0', title: 'First Release', subDir: 'milestone', slug: 'first-release.md' },
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](spec/) — What to build
181
+ - [Specifications](specs/) — What to build
79
182
  - [Work Items](work/) — How to build it
80
- - [Decisions](decision/) — Why it's built this way
81
- - [Milestones](milestone/) — Named release targets
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
- // Update CLAUDE.md
94
- let claudeMdUpdated = false;
95
- const claudeMdPath = join(projectRoot, 'CLAUDE.md');
96
- if (existsSync(claudeMdPath)) {
97
- const content = readFileSync(claudeMdPath, 'utf-8');
98
- if (!content.includes('refrakt plan next')) {
99
- appendFileSync(claudeMdPath, WORKFLOW_SECTION);
100
- claudeMdUpdated = true;
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
- writeFileSync(claudeMdPath, `# CLAUDE.md\n${WORKFLOW_SECTION}`);
105
- claudeMdUpdated = true;
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, claudeMdUpdated };
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":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -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,CA2ExD"}
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"}
@@ -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
- for (const refId of e.refs) {
54
- const refStatus = statusMap.get(refId);
55
- // If the referenced entity exists and isn't done, exclude this item
56
- if (refStatus !== undefined && !DONE_STATUSES.has(refStatus)) {
57
- return false;
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":"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"}
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;AAEhH,mCAAmC;AACnC,iBAAiB,CAAC,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC,CAAC;AAEzD,sDAAsD;AACtD,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC5B,mBAAmB,CAAC,QAAQ,CAAC,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"}