frontier-mcp 0.6.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +33 -0
  2. package/dist/domain.d.ts +62 -29
  3. package/dist/domain.d.ts.map +1 -1
  4. package/dist/domain.js +9 -0
  5. package/dist/domain.js.map +1 -1
  6. package/dist/frontier.js +1 -1
  7. package/dist/frontier.js.map +1 -1
  8. package/dist/server.d.ts.map +1 -1
  9. package/dist/server.js +14 -8
  10. package/dist/server.js.map +1 -1
  11. package/dist/storage/driver.d.ts +36 -6
  12. package/dist/storage/driver.d.ts.map +1 -1
  13. package/dist/storage/driver.js +53 -5
  14. package/dist/storage/driver.js.map +1 -1
  15. package/dist/storage/markdown/create.d.ts +0 -2
  16. package/dist/storage/markdown/create.d.ts.map +1 -1
  17. package/dist/storage/markdown/create.js +0 -10
  18. package/dist/storage/markdown/create.js.map +1 -1
  19. package/dist/storage/markdown/driver.d.ts.map +1 -1
  20. package/dist/storage/markdown/driver.js +36 -18
  21. package/dist/storage/markdown/driver.js.map +1 -1
  22. package/dist/storage/markdown/frontmatter.js +1 -1
  23. package/dist/storage/markdown/header-doc.d.ts.map +1 -1
  24. package/dist/storage/markdown/header-doc.js +13 -11
  25. package/dist/storage/markdown/header-doc.js.map +1 -1
  26. package/dist/storage/markdown/legacy.d.ts +8 -4
  27. package/dist/storage/markdown/legacy.d.ts.map +1 -1
  28. package/dist/storage/markdown/legacy.js +20 -15
  29. package/dist/storage/markdown/legacy.js.map +1 -1
  30. package/dist/storage/markdown/migrate.d.ts +11 -3
  31. package/dist/storage/markdown/migrate.d.ts.map +1 -1
  32. package/dist/storage/markdown/migrate.js +69 -80
  33. package/dist/storage/markdown/migrate.js.map +1 -1
  34. package/dist/storage/markdown/schema.d.ts +9 -0
  35. package/dist/storage/markdown/schema.d.ts.map +1 -0
  36. package/dist/storage/markdown/schema.js +21 -0
  37. package/dist/storage/markdown/schema.js.map +1 -0
  38. package/dist/storage/markdown/serialize.d.ts +1 -1
  39. package/dist/storage/markdown/serialize.d.ts.map +1 -1
  40. package/dist/storage/markdown/serialize.js +110 -24
  41. package/dist/storage/markdown/serialize.js.map +1 -1
  42. package/dist/storage/markdown/ticket.d.ts +29 -6
  43. package/dist/storage/markdown/ticket.d.ts.map +1 -1
  44. package/dist/storage/markdown/ticket.js +100 -33
  45. package/dist/storage/markdown/ticket.js.map +1 -1
  46. package/dist/storage/markdown/watcher.d.ts +1 -1
  47. package/dist/storage/markdown/watcher.d.ts.map +1 -1
  48. package/dist/storage/markdown/watcher.js +91 -11
  49. package/dist/storage/markdown/watcher.js.map +1 -1
  50. package/dist/tools/create-tickets.js +1 -1
  51. package/dist/tools/create-tickets.js.map +1 -1
  52. package/dist/tools/edit-map.d.ts.map +1 -1
  53. package/dist/tools/edit-map.js +6 -2
  54. package/dist/tools/edit-map.js.map +1 -1
  55. package/dist/tools/get-board.d.ts.map +1 -1
  56. package/dist/tools/get-board.js +34 -7
  57. package/dist/tools/get-board.js.map +1 -1
  58. package/dist/tools/get-tickets.d.ts.map +1 -1
  59. package/dist/tools/get-tickets.js +16 -9
  60. package/dist/tools/get-tickets.js.map +1 -1
  61. package/dist/tools/list-efforts.d.ts +7 -0
  62. package/dist/tools/list-efforts.d.ts.map +1 -1
  63. package/dist/tools/list-efforts.js +15 -0
  64. package/dist/tools/list-efforts.js.map +1 -1
  65. package/dist/tools/migrate-effort.d.ts +6 -1
  66. package/dist/tools/migrate-effort.d.ts.map +1 -1
  67. package/dist/tools/migrate-effort.js +59 -20
  68. package/dist/tools/migrate-effort.js.map +1 -1
  69. package/dist/tools/update-ticket.d.ts +2 -0
  70. package/dist/tools/update-ticket.d.ts.map +1 -1
  71. package/dist/tools/update-ticket.js +11 -4
  72. package/dist/tools/update-ticket.js.map +1 -1
  73. package/dist/workspace.d.ts +11 -0
  74. package/dist/workspace.d.ts.map +1 -1
  75. package/dist/workspace.js +17 -5
  76. package/dist/workspace.js.map +1 -1
  77. package/docs/agents/issue-tracker.md +15 -9
  78. package/package.json +11 -11
  79. package/scripts/frontier-setup.cjs +451 -18
@@ -1,11 +1,11 @@
1
- import type { TicketSummary } from '../../domain.ts';
1
+ import type { TicketSummary, UnimportedFrontmatter } from '../../domain.ts';
2
2
  export interface TicketFile {
3
3
  readonly filename: string;
4
4
  readonly contents: string;
5
5
  }
6
6
  /**
7
7
  * Parse one Ticket file into everything but its prose. Schema-conformant files
8
- * read from their frontmatter; everything else falls through to the Legacy
8
+ * read from their frontmatter; everything else falls through to the prose
9
9
  * parser and is flagged, because a server that is useless until its repo is
10
10
  * migrated never gets installed.
11
11
  *
@@ -13,13 +13,36 @@ export interface TicketFile {
13
13
  * workspace, and almost nothing above the seam reads prose. {@link ticketBody}
14
14
  * takes it out of the same contents for the few Tickets actually being worked.
15
15
  */
16
- export declare function parseTicketSummary(effort: string, file: TicketFile, fallbackOrder: number, revision: string): TicketSummary;
16
+ export declare function parseTicketSummary(effort: string, file: TicketFile, fallbackOrder: number, revision: string): ParsedTicket;
17
+ /**
18
+ * A Ticket as one file reads, before its Effort is known: prose sub-slice
19
+ * references are still as declared, because only the siblings can say whether
20
+ * `T38.1` names a slice of a Ticket here.
21
+ */
22
+ export interface ParsedTicket {
23
+ readonly ticket: TicketSummary;
24
+ readonly subSlices: readonly string[];
25
+ }
26
+ /**
27
+ * Decided once, over one Effort, so the Board, the Frontier, a lazy write and
28
+ * migration all see the same Edges (T82). A prose `T38.1` coarsens to `T38`
29
+ * only when `T38` is a Ticket of this Effort — ids read from prose headings
30
+ * included, which is why this runs after every file is parsed. Otherwise it
31
+ * stays as declared and dangles: a milestone label coarsened onto another
32
+ * Effort's resolved `T1` grants an Edge the file never declared.
33
+ */
34
+ export declare function resolveSubSlices(parsed: readonly ParsedTicket[]): TicketSummary[];
17
35
  /**
18
36
  * A Ticket's prose. A schema file's body is what sits below the frontmatter; a
19
- * Legacy file has no fence, so its whole contents are the prose — the same
37
+ * fenceless file has no fence, so its whole contents are the prose — the same
20
38
  * split {@link parseTicketSummary} makes, taken from the other side.
21
39
  */
22
40
  export declare function ticketBody(contents: string): string;
23
- /** The raw fence of a foreign-fenced file, byte for byte; undefined otherwise. */
24
- export declare function foreignFence(contents: string): string | undefined;
41
+ /**
42
+ * The frontmatter keys this schema does not import, and the file's own text for
43
+ * them. A foreign fence is shown whole, byte for byte; a fence with an id shows
44
+ * only its unimported entries, each sliced from the source rather than
45
+ * re-serialized. Undefined for a conforming Ticket and for a fenceless file.
46
+ */
47
+ export declare function unimportedFrontmatter(contents: string): UnimportedFrontmatter | undefined;
25
48
  //# sourceMappingURL=ticket.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/ticket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA0BnE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,aAAa,CAgCf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE"}
1
+ {"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/ticket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,aAAa,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAS1F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,YAAY,CAmCd;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,aAAa,EAAE,CAyBjF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAUzF"}
@@ -1,28 +1,13 @@
1
+ import { isMap, isScalar, parseDocument } from 'yaml';
1
2
  import { STATUSES } from '../../domain.js';
2
- import { parseLegacyBody } from './legacy.js';
3
+ import { parseProseBody } from './legacy.js';
3
4
  import { splitFrontmatter } from './frontmatter.js';
5
+ import { SCHEMA_KEYS } from './schema.js';
4
6
  /** `<NN>-<rest>.md` — `NN` carries sort order and nothing else. */
5
7
  const FILENAME_ORDER = /^(\d+)/;
6
- /**
7
- * Keys a schema Ticket may carry. Same set as FIELD_ORDER in serialize.ts,
8
- * duplicated here so parse does not depend on the write module.
9
- */
10
- const SCHEMA_KEYS = new Set([
11
- 'id',
12
- 'title',
13
- 'kind',
14
- 'type',
15
- 'status',
16
- 'triage',
17
- 'blocked_by',
18
- 'answer_gist',
19
- 'dropped_reason',
20
- 'claimed_by',
21
- 'claimed_at',
22
- ]);
23
8
  /**
24
9
  * Parse one Ticket file into everything but its prose. Schema-conformant files
25
- * read from their frontmatter; everything else falls through to the Legacy
10
+ * read from their frontmatter; everything else falls through to the prose
26
11
  * parser and is flagged, because a server that is useless until its repo is
27
12
  * migrated never gets installed.
28
13
  *
@@ -34,12 +19,12 @@ export function parseTicketSummary(effort, file, fallbackOrder, revision) {
34
19
  const { fields } = splitFrontmatter(file.contents);
35
20
  const order = readOrder(file.filename) ?? fallbackOrder;
36
21
  if (fields === undefined)
37
- return parseLegacy(effort, order, file.contents, revision);
22
+ return parseUnfenced(effort, order, file.contents, revision);
38
23
  const id = text(fields['id']);
39
24
  const rawStatus = text(fields['status']);
40
25
  const mappedStatus = readStatus(rawStatus);
41
26
  const unrecognizedStatus = rawStatus !== undefined && mappedStatus === undefined ? rawStatus : undefined;
42
- return {
27
+ const ticket = {
43
28
  id,
44
29
  handle: handleFor(id, effort, order),
45
30
  title: text(fields['title']) ?? '(untitled)',
@@ -54,29 +39,108 @@ export function parseTicketSummary(effort, file, fallbackOrder, revision) {
54
39
  blockedBy: readEdgeList(fields['blocked_by']),
55
40
  effort,
56
41
  order,
57
- legacy: isForeignFence(fields),
42
+ foreign: isForeignFence(fields),
43
+ foreignFenced: isForeignFence(fields),
58
44
  unrecognizedStatus,
59
45
  collapsedRefs: [],
46
+ keptSubSlices: [],
60
47
  revision,
61
48
  };
49
+ return { ticket, subSlices: [] };
50
+ }
51
+ /**
52
+ * Decided once, over one Effort, so the Board, the Frontier, a lazy write and
53
+ * migration all see the same Edges (T82). A prose `T38.1` coarsens to `T38`
54
+ * only when `T38` is a Ticket of this Effort — ids read from prose headings
55
+ * included, which is why this runs after every file is parsed. Otherwise it
56
+ * stays as declared and dangles: a milestone label coarsened onto another
57
+ * Effort's resolved `T1` grants an Edge the file never declared.
58
+ */
59
+ export function resolveSubSlices(parsed) {
60
+ const local = new Set(parsed.map(entry => entry.ticket.id).filter(id => id !== undefined));
61
+ return parsed.map(({ ticket, subSlices }) => {
62
+ if (subSlices.length === 0)
63
+ return ticket;
64
+ const slices = new Set(subSlices);
65
+ const collapsed = [];
66
+ const kept = [];
67
+ const edges = ticket.blockedBy.map(edge => {
68
+ if (!slices.has(edge))
69
+ return edge;
70
+ const parent = edge.slice(0, edge.indexOf('.'));
71
+ // Its own id is no parent: `T5` blocked by `T5.2` would become a self-Edge.
72
+ if (!local.has(parent) || parent === ticket.id) {
73
+ kept.push(edge);
74
+ return edge;
75
+ }
76
+ collapsed.push(edge);
77
+ return parent;
78
+ });
79
+ return {
80
+ ...ticket,
81
+ blockedBy: [...new Set(edges)],
82
+ collapsedRefs: collapsed,
83
+ keptSubSlices: kept,
84
+ };
85
+ });
62
86
  }
63
87
  /**
64
88
  * A Ticket's prose. A schema file's body is what sits below the frontmatter; a
65
- * Legacy file has no fence, so its whole contents are the prose — the same
89
+ * fenceless file has no fence, so its whole contents are the prose — the same
66
90
  * split {@link parseTicketSummary} makes, taken from the other side.
67
91
  */
68
92
  export function ticketBody(contents) {
69
93
  const { fields, body } = splitFrontmatter(contents);
70
94
  return (fields === undefined ? contents : body).trim();
71
95
  }
72
- /** The raw fence of a foreign-fenced file, byte for byte; undefined otherwise. */
73
- export function foreignFence(contents) {
96
+ /**
97
+ * The frontmatter keys this schema does not import, and the file's own text for
98
+ * them. A foreign fence is shown whole, byte for byte; a fence with an id shows
99
+ * only its unimported entries, each sliced from the source rather than
100
+ * re-serialized. Undefined for a conforming Ticket and for a fenceless file.
101
+ */
102
+ export function unimportedFrontmatter(contents) {
74
103
  const { fields, raw } = splitFrontmatter(contents);
75
- return fields !== undefined && isForeignFence(fields) ? raw : undefined;
104
+ if (fields === undefined || raw === undefined)
105
+ return undefined;
106
+ const keys = Object.keys(fields).filter(key => !SCHEMA_KEYS.has(key));
107
+ if (keys.length === 0)
108
+ return undefined;
109
+ if (isForeignFence(fields))
110
+ return { keys, yaml: raw, whole: true };
111
+ const entries = unimportedEntries(raw);
112
+ return entries === undefined
113
+ ? { keys, yaml: raw, whole: true }
114
+ : { keys, yaml: entries, whole: false };
76
115
  }
77
- function parseLegacy(effort, order, contents, revision) {
78
- const inferred = parseLegacyBody(contents);
79
- return {
116
+ /**
117
+ * The unimported pairs cut from the fence's own text, or undefined when one of
118
+ * them cannot be cut cleanly — a non-scalar or explicit (`? key`) key — in which
119
+ * case the caller shows the whole fence rather than a block that disagrees with
120
+ * the keys it names.
121
+ */
122
+ function unimportedEntries(raw) {
123
+ const doc = parseDocument(raw);
124
+ if (!isMap(doc.contents))
125
+ return undefined;
126
+ const slices = [];
127
+ for (const pair of doc.contents.items) {
128
+ if (isScalar(pair.key) && SCHEMA_KEYS.has(String(pair.key.value)))
129
+ continue;
130
+ const start = isScalar(pair.key) ? pair.key.range?.[0] : undefined;
131
+ const value = pair.value;
132
+ const end = value?.range?.[2] ?? (isScalar(pair.key) ? pair.key.range?.[2] : undefined);
133
+ if (start === undefined || end === undefined)
134
+ return undefined;
135
+ if (raw.slice(raw.lastIndexOf('\n', start - 1) + 1, start).trim() !== '')
136
+ return undefined;
137
+ slices.push(raw.slice(start, end).replace(/\s+$/, ''));
138
+ }
139
+ return slices.join(raw.includes('\r\n') ? '\r\n' : '\n');
140
+ }
141
+ function parseUnfenced(effort, order, contents, revision) {
142
+ const inferred = parseProseBody(contents);
143
+ const ticket = {
80
144
  id: inferred.id,
81
145
  handle: handleFor(inferred.id, effort, order),
82
146
  title: inferred.title,
@@ -84,7 +148,7 @@ function parseLegacy(effort, order, contents, revision) {
84
148
  type: inferred.type,
85
149
  status: inferred.status,
86
150
  triage: inferred.triage,
87
- // A Legacy file records its answer as prose in the body, not as a field.
151
+ // A fenceless file records its answer as prose in the body, not as a field.
88
152
  answerGist: undefined,
89
153
  droppedReason: undefined,
90
154
  claimedBy: undefined,
@@ -92,14 +156,17 @@ function parseLegacy(effort, order, contents, revision) {
92
156
  blockedBy: inferred.blockedBy,
93
157
  effort,
94
158
  order,
95
- legacy: true,
159
+ foreign: true,
160
+ foreignFenced: false,
96
161
  unrecognizedStatus: inferred.unrecognizedStatus,
97
- collapsedRefs: inferred.collapsedRefs,
162
+ collapsedRefs: [],
163
+ keptSubSlices: [],
98
164
  revision,
99
165
  };
166
+ return { ticket, subSlices: inferred.subSlices };
100
167
  }
101
168
  /**
102
- * A Ticket with no id still has to be nameable, or a whole Effort of Legacy Tickets
169
+ * A Ticket with no id still has to be nameable, or a whole Effort of Foreign Tickets
103
170
  * has no route to its own bodies. `<effort>#<order>` is that fallback — an
104
171
  * address, deliberately not an id: it is not repo-stable and never appears as
105
172
  * an Edge.
@@ -1 +1 @@
1
- {"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../../src/storage/markdown/ticket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ticket.js","sourceRoot":"","sources":["../../../src/storage/markdown/ticket.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export interface WatchStorageOptions {
19
19
  * answer, handed down.
20
20
  *
21
21
  * If the storage directory does not exist yet, the workspace root is watched
22
- * until it appears, then the recursive watch is attached.
22
+ * until it appears, then the storage watch is attached.
23
23
  *
24
24
  * **A watch is not live the moment `watch()` returns.** On macOS libuv
25
25
  * registers the FSEvents stream off-thread, and multiplexes every watch in the
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/watcher.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAIlC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AA2BD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,IAAI,EACtB,EAAE,UAAgC,EAAE,QAA4B,EAAE,GAAE,mBAAwB,GAC3F,cAAc,CA+FhB"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/watcher.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAIlC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AAwFD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,IAAI,EACtB,EAAE,UAAgC,EAAE,QAA4B,EAAE,GAAE,mBAAwB,GAC3F,cAAc,CA8GhB"}
@@ -1,4 +1,4 @@
1
- import { existsSync, watch } from 'node:fs';
1
+ import { existsSync, readdirSync, watch } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  /**
4
4
  * Long enough to coalesce the burst a branch switch makes, short enough that a
@@ -23,6 +23,69 @@ const DEFAULT_DEBOUNCE_MS = 50;
23
23
  * it is per watch, not per event.
24
24
  */
25
25
  const DEFAULT_SETTLE_MS = [50, 250, 1000];
26
+ /**
27
+ * Where `{ recursive: true }` is Node's own watch. Elsewhere — Linux — it is
28
+ * `lib/internal/fs/recursive_watch.js`, which from 24.22.0 throws inside its
29
+ * own event callback when a watched directory is replaced by a same-named
30
+ * file (`ENOTDIR`, nodejs/node#66791). No `error` listener sees that throw,
31
+ * so it kills the process; there we watch each directory ourselves instead.
32
+ */
33
+ const NATIVE_RECURSIVE = process.platform === 'darwin' || process.platform === 'win32';
34
+ /**
35
+ * One non-recursive watch per directory under `dir`. The set of directories is
36
+ * re-synced on `resync()`, which the caller runs before each invalidation, so a
37
+ * directory created during a debounce is watched before the scan that reads
38
+ * it. Every filesystem call is caught: this runs in our own event callback,
39
+ * which is the whole point. Returns undefined when `dir` cannot be watched.
40
+ */
41
+ function watchDirectories(dir, onEvent) {
42
+ const watchers = new Map();
43
+ const resync = () => {
44
+ const seen = new Set();
45
+ const visit = (path) => {
46
+ seen.add(path);
47
+ if (!watchers.has(path)) {
48
+ try {
49
+ const watcher = watch(path, onEvent);
50
+ watcher.on('error', () => {
51
+ watcher.close();
52
+ if (watchers.get(path) === watcher)
53
+ watchers.delete(path);
54
+ });
55
+ watchers.set(path, watcher);
56
+ }
57
+ catch {
58
+ seen.delete(path);
59
+ return;
60
+ }
61
+ }
62
+ let entries;
63
+ try {
64
+ entries = readdirSync(path, { withFileTypes: true });
65
+ }
66
+ catch {
67
+ return;
68
+ }
69
+ for (const entry of entries)
70
+ if (entry.isDirectory())
71
+ visit(join(path, entry.name));
72
+ };
73
+ visit(dir);
74
+ for (const [path, watcher] of watchers) {
75
+ if (seen.has(path))
76
+ continue;
77
+ watcher.close();
78
+ watchers.delete(path);
79
+ }
80
+ return watchers.has(dir);
81
+ };
82
+ const close = () => {
83
+ for (const watcher of watchers.values())
84
+ watcher.close();
85
+ watchers.clear();
86
+ };
87
+ return resync() ? { close, resync } : (close(), undefined);
88
+ }
26
89
  /**
27
90
  * Watch `storageDir` under a resolved workspace and call `invalidate` when it
28
91
  * changes. Never writes — only schedules invalidation after debouncing.
@@ -37,7 +100,7 @@ const DEFAULT_SETTLE_MS = [50, 250, 1000];
37
100
  * answer, handed down.
38
101
  *
39
102
  * If the storage directory does not exist yet, the workspace root is watched
40
- * until it appears, then the recursive watch is attached.
103
+ * until it appears, then the storage watch is attached.
41
104
  *
42
105
  * **A watch is not live the moment `watch()` returns.** On macOS libuv
43
106
  * registers the FSEvents stream off-thread, and multiplexes every watch in the
@@ -53,6 +116,7 @@ export function watchStorage(root, storageDir, invalidate, { debounceMs = DEFAUL
53
116
  const storagePath = join(root, storageDir);
54
117
  let timer;
55
118
  let storageWatcher;
119
+ let resyncDirectories;
56
120
  let rootWatcher;
57
121
  // Held so close() can clear them: a settle timer that outlives the driver
58
122
  // keeps a test worker's event loop alive long after the workspace is gone.
@@ -62,6 +126,11 @@ export function watchStorage(root, storageDir, invalidate, { debounceMs = DEFAUL
62
126
  clearTimeout(timer);
63
127
  timer = setTimeout(() => {
64
128
  timer = undefined;
129
+ if (resyncDirectories?.() === false) {
130
+ storageWatcher?.close();
131
+ storageWatcher = undefined;
132
+ resyncDirectories = undefined;
133
+ }
65
134
  invalidate();
66
135
  }, debounceMs);
67
136
  };
@@ -73,7 +142,7 @@ export function watchStorage(root, storageDir, invalidate, { debounceMs = DEFAUL
73
142
  * Each pass retries the attach before dropping the scan, because the event a
74
143
  * root watch is warming up to miss is "the storage directory appeared" — and
75
144
  * losing that one costs more than a stale scan. Nothing would ever call
76
- * {@link attachStorageWatcher} again, so the recursive watch would never take
145
+ * {@link attachStorageWatcher} again, so the storage watch would never take
77
146
  * over and every later change would go unseen. Re-attaching here is idempotent:
78
147
  * a watch already in place returns immediately.
79
148
  */
@@ -91,13 +160,23 @@ export function watchStorage(root, storageDir, invalidate, { debounceMs = DEFAUL
91
160
  if (storageWatcher !== undefined || !existsSync(storagePath))
92
161
  return;
93
162
  try {
94
- storageWatcher = watch(storagePath, { recursive: true }, () => {
95
- scheduleInvalidate();
96
- });
97
- storageWatcher.on('error', () => {
98
- storageWatcher?.close();
99
- storageWatcher = undefined;
100
- });
163
+ if (NATIVE_RECURSIVE) {
164
+ const watcher = watch(storagePath, { recursive: true }, () => {
165
+ scheduleInvalidate();
166
+ });
167
+ watcher.on('error', () => {
168
+ watcher.close();
169
+ storageWatcher = undefined;
170
+ });
171
+ storageWatcher = watcher;
172
+ }
173
+ else {
174
+ const tree = watchDirectories(storagePath, scheduleInvalidate);
175
+ if (tree === undefined)
176
+ return;
177
+ storageWatcher = tree;
178
+ resyncDirectories = tree.resync;
179
+ }
101
180
  rootWatcher?.close();
102
181
  rootWatcher = undefined;
103
182
  settle();
@@ -113,7 +192,7 @@ export function watchStorage(root, storageDir, invalidate, { debounceMs = DEFAUL
113
192
  rootWatcher = watch(root, (_event, filename) => {
114
193
  // One segment deep, so the name a root watch reports can match it
115
194
  // whole. A nested path would never match, and the watch would never
116
- // hand over to the recursive one.
195
+ // hand over to the storage one.
117
196
  if (filename !== storageDir)
118
197
  return;
119
198
  attachStorageWatcher();
@@ -142,6 +221,7 @@ export function watchStorage(root, storageDir, invalidate, { debounceMs = DEFAUL
142
221
  storageWatcher?.close();
143
222
  rootWatcher?.close();
144
223
  storageWatcher = undefined;
224
+ resyncDirectories = undefined;
145
225
  rootWatcher = undefined;
146
226
  },
147
227
  };
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/storage/markdown/watcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/storage/markdown/watcher.ts"],"names":[],"mappings":"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"}
@@ -141,7 +141,7 @@ function checkCycles(drafts, names, existing, resolve = edge => edge) {
141
141
  }
142
142
  /** A name for a keyless draft that no Edge can collide with. */
143
143
  function placeholderFor(index, keys) {
144
- let name = `#${String(index)}`;
144
+ let name = `draft ${String(index + 1)}`;
145
145
  while (keys.has(name))
146
146
  name = `${name}.`;
147
147
  return name;
@@ -1 +1 @@
1
- {"version":3,"file":"create-tickets.js","sourceRoot":"","sources":["../../src/tools/create-tickets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-tickets.js","sourceRoot":"","sources":["../../src/tools/create-tickets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"edit-map.d.ts","sourceRoot":"","sources":["../../src/tools/edit-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAgC7B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAIyE,CAAC;AAEzG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAQ3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAwBvE"}
1
+ {"version":3,"file":"edit-map.d.ts","sourceRoot":"","sources":["../../src/tools/edit-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzD,eAAO,MAAM,kBAAkB;;;;;;;;;;iBAsC7B,CAAC;AAEH,eAAO,MAAM,kBAAkB,QAIyE,CAAC;AAEzG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAQ3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,CAwBvE"}
@@ -9,7 +9,11 @@ export const editMapInputSchema = z.object({
9
9
  'existing Map; create with no section fields reads an existing Map like a plain read.'),
10
10
  destination: z.string().optional().describe('Replace the Destination section.'),
11
11
  notes: z.string().optional().describe('Replace the Notes section.'),
12
- add_fog: z.string().min(1).optional().describe('Append a fog patch under Not yet specified.'),
12
+ add_fog: z
13
+ .string()
14
+ .min(1)
15
+ .optional()
16
+ .describe('Append a fog patch under Not yet specified. One line.'),
13
17
  graduate_fog: z
14
18
  .string()
15
19
  .min(1)
@@ -19,7 +23,7 @@ export const editMapInputSchema = z.object({
19
23
  .string()
20
24
  .min(1)
21
25
  .optional()
22
- .describe('Append a hand-ruled item under Out of scope. Never touches Decisions-so-far.'),
26
+ .describe('Append a hand-ruled item under Out of scope. Never touches Decisions-so-far. One line.'),
23
27
  expected_revision: z
24
28
  .string()
25
29
  .min(1)
@@ -1 +1 @@
1
- {"version":3,"file":"edit-map.js","sourceRoot":"","sources":["../../src/tools/edit-map.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit-map.js","sourceRoot":"","sources":["../../src/tools/edit-map.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-board.d.ts","sourceRoot":"","sources":["../../src/tools/get-board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG1D,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAEwC,CAAC;AAEzE,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,aAAa,EAAE,EAC7B,iBAAiB,GAAE,SAAS,MAAM,EAAO,GACxC,KAAK,CAQP;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAgChD"}
1
+ {"version":3,"file":"get-board.d.ts","sourceRoot":"","sources":["../../src/tools/get-board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,MAAM,EAAU,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlE,eAAO,MAAM,mBAAmB;;;iBAG9B,CAAC;AAEH,eAAO,MAAM,mBAAmB,QAEwC,CAAC;AAEzE,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,gFAAgF;IAChF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,aAAa,EAAE,EAC7B,iBAAiB,GAAE,SAAS,MAAM,EAAO,GACxC,KAAK,CAQP;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAgChD"}
@@ -112,11 +112,19 @@ function renderEdge(id, from, board) {
112
112
  return `${id}?`;
113
113
  return blocker.effort === from.effort ? id : `${id}@${blocker.effort}`;
114
114
  }
115
+ /** The field each lifecycle Status requires, as the tracker doc states it. */
116
+ const LIFECYCLE_FIELDS = [
117
+ ['resolved', 'answer_gist', ticket => ticket.answerGist],
118
+ ['dropped', 'dropped_reason', ticket => ticket.droppedReason],
119
+ ['claimed', 'claimed_by', ticket => ticket.claimedBy],
120
+ // Without it a claim can never be flagged stale.
121
+ ['claimed', 'claimed_at', ticket => ticket.claimedAt],
122
+ ];
115
123
  /**
116
124
  * Broken Edges surface here rather than through a separate validation tool,
117
125
  * because a validation tool nobody calls is a validator that does not exist.
118
126
  *
119
- * Every warning is grouped, never itemized per Ticket. An Effort of Legacy
127
+ * Every warning is grouped, never itemized per Ticket. An Effort of Foreign
120
128
  * Tickets can carry a dangling Edge on nearly every one of them, and a warnings
121
129
  * block longer than the Board it annotates would undo the saving the Board
122
130
  * exists to deliver.
@@ -174,13 +182,32 @@ function collectWarnings(board) {
174
182
  warnings.push(`stale claim, held longer than ${String(STALE_AFTER_HOURS)}h (${String(stale.size)}): ` +
175
183
  `${[...stale].toSorted().join(' ')} — flagged only, never released; ask the holder`);
176
184
  }
177
- const legacy = board.tickets.filter(ticket => ticket.legacy);
178
- if (legacy.length > 0) {
179
- warnings.push(`${String(legacy.length)}/${String(board.tickets.length)} Tickets are Legacy — title, ` +
180
- 'status and Edges are inferred from prose. Run migrate_effort to normalize.');
185
+ const foreign = board.tickets.filter(ticket => ticket.foreign && !ticket.foreignFenced);
186
+ if (foreign.length > 0) {
187
+ warnings.push(`${String(foreign.length)}/${String(board.tickets.length)} Tickets are Foreign — title, ` +
188
+ 'status and Edges are inferred, not read from schema frontmatter. Run migrate_effort to normalize.');
181
189
  }
182
- // Tracked separately from Legacy, because normalizing a Legacy file gives it
183
- // frontmatter without giving it an id. It would otherwise leave the Legacy
190
+ // Counted apart from the prose-inferred ones: these fields were read from a
191
+ // fence, so pointing a reader at prose would send them after a `Status:` line
192
+ // that is not there.
193
+ const fenced = board.tickets.filter(ticket => ticket.foreignFenced);
194
+ if (fenced.length > 0) {
195
+ warnings.push(`${String(fenced.length)}/${String(board.tickets.length)} Tickets have a foreign fence — ` +
196
+ 'title, status and Edges came from frontmatter that was not imported; get_tickets shows ' +
197
+ 'the rest of it. Run migrate_effort to normalize.');
198
+ }
199
+ // A file with no fence records its answer as prose, so it never carries these
200
+ // fields; counting it would repeat the Foreign warning above as a false alarm.
201
+ const fielded = board.tickets.filter(ticket => !ticket.foreign || ticket.foreignFenced);
202
+ for (const [status, field, value] of LIFECYCLE_FIELDS) {
203
+ const holding = fielded.filter(ticket => ticket.status === status);
204
+ const missing = holding.filter(ticket => value(ticket) === undefined).length;
205
+ if (missing > 0) {
206
+ warnings.push(`${String(missing)}/${String(holding.length)} ${status} Tickets carry no ${field}`);
207
+ }
208
+ }
209
+ // Tracked separately from Foreign, because normalizing a Foreign file gives it
210
+ // frontmatter without giving it an id. It would otherwise leave the Foreign
184
211
  // count and take its need for migration silently with it, while still being
185
212
  // unaddressable by anything but its handle.
186
213
  const unidentified = board.tickets.filter(ticket => ticket.id === undefined);