frontier-mcp 0.5.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 (85) hide show
  1. package/README.md +66 -15
  2. package/dist/domain.d.ts +69 -25
  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.d.ts +8 -0
  7. package/dist/frontier.d.ts.map +1 -1
  8. package/dist/frontier.js +33 -4
  9. package/dist/frontier.js.map +1 -1
  10. package/dist/server.d.ts.map +1 -1
  11. package/dist/server.js +26 -9
  12. package/dist/server.js.map +1 -1
  13. package/dist/storage/driver.d.ts +61 -6
  14. package/dist/storage/driver.d.ts.map +1 -1
  15. package/dist/storage/driver.js +67 -5
  16. package/dist/storage/driver.js.map +1 -1
  17. package/dist/storage/markdown/create.d.ts +2 -3
  18. package/dist/storage/markdown/create.d.ts.map +1 -1
  19. package/dist/storage/markdown/create.js +2 -11
  20. package/dist/storage/markdown/create.js.map +1 -1
  21. package/dist/storage/markdown/driver.d.ts.map +1 -1
  22. package/dist/storage/markdown/driver.js +155 -36
  23. package/dist/storage/markdown/driver.js.map +1 -1
  24. package/dist/storage/markdown/frontmatter.js +1 -1
  25. package/dist/storage/markdown/header-doc.d.ts.map +1 -1
  26. package/dist/storage/markdown/header-doc.js +13 -11
  27. package/dist/storage/markdown/header-doc.js.map +1 -1
  28. package/dist/storage/markdown/legacy.d.ts +8 -4
  29. package/dist/storage/markdown/legacy.d.ts.map +1 -1
  30. package/dist/storage/markdown/legacy.js +20 -15
  31. package/dist/storage/markdown/legacy.js.map +1 -1
  32. package/dist/storage/markdown/migrate.d.ts +13 -3
  33. package/dist/storage/markdown/migrate.d.ts.map +1 -1
  34. package/dist/storage/markdown/migrate.js +69 -79
  35. package/dist/storage/markdown/migrate.js.map +1 -1
  36. package/dist/storage/markdown/schema.d.ts +9 -0
  37. package/dist/storage/markdown/schema.d.ts.map +1 -0
  38. package/dist/storage/markdown/schema.js +21 -0
  39. package/dist/storage/markdown/schema.js.map +1 -0
  40. package/dist/storage/markdown/serialize.d.ts +1 -1
  41. package/dist/storage/markdown/serialize.d.ts.map +1 -1
  42. package/dist/storage/markdown/serialize.js +110 -24
  43. package/dist/storage/markdown/serialize.js.map +1 -1
  44. package/dist/storage/markdown/ticket.d.ts +29 -4
  45. package/dist/storage/markdown/ticket.d.ts.map +1 -1
  46. package/dist/storage/markdown/ticket.js +102 -30
  47. package/dist/storage/markdown/ticket.js.map +1 -1
  48. package/dist/storage/markdown/watcher.d.ts +1 -1
  49. package/dist/storage/markdown/watcher.d.ts.map +1 -1
  50. package/dist/storage/markdown/watcher.js +91 -11
  51. package/dist/storage/markdown/watcher.js.map +1 -1
  52. package/dist/tools/create-tickets.d.ts +12 -1
  53. package/dist/tools/create-tickets.d.ts.map +1 -1
  54. package/dist/tools/create-tickets.js +23 -6
  55. package/dist/tools/create-tickets.js.map +1 -1
  56. package/dist/tools/edit-map.d.ts.map +1 -1
  57. package/dist/tools/edit-map.js +6 -2
  58. package/dist/tools/edit-map.js.map +1 -1
  59. package/dist/tools/get-board.d.ts.map +1 -1
  60. package/dist/tools/get-board.js +34 -7
  61. package/dist/tools/get-board.js.map +1 -1
  62. package/dist/tools/get-tickets.d.ts.map +1 -1
  63. package/dist/tools/get-tickets.js +42 -11
  64. package/dist/tools/get-tickets.js.map +1 -1
  65. package/dist/tools/list-efforts.d.ts +7 -0
  66. package/dist/tools/list-efforts.d.ts.map +1 -1
  67. package/dist/tools/list-efforts.js +15 -0
  68. package/dist/tools/list-efforts.js.map +1 -1
  69. package/dist/tools/migrate-effort.d.ts +6 -1
  70. package/dist/tools/migrate-effort.d.ts.map +1 -1
  71. package/dist/tools/migrate-effort.js +62 -20
  72. package/dist/tools/migrate-effort.js.map +1 -1
  73. package/dist/tools/update-ticket.d.ts +2 -0
  74. package/dist/tools/update-ticket.d.ts.map +1 -1
  75. package/dist/tools/update-ticket.js +14 -7
  76. package/dist/tools/update-ticket.js.map +1 -1
  77. package/dist/tools/workspace-line.d.ts +2 -2
  78. package/dist/tools/workspace-line.js +2 -2
  79. package/dist/workspace.d.ts +11 -0
  80. package/dist/workspace.d.ts.map +1 -1
  81. package/dist/workspace.js +17 -5
  82. package/dist/workspace.js.map +1 -1
  83. package/docs/agents/issue-tracker.md +60 -27
  84. package/package.json +11 -11
  85. package/scripts/frontier-setup.cjs +451 -18
@@ -67,14 +67,36 @@ export interface StorageDriver {
67
67
  * them; every write refuses with {@link InvalidWorkspaceConfig}.
68
68
  */
69
69
  workspaceWarnings(): readonly string[];
70
+ /**
71
+ * How a reader would name this workspace's storage when it does not exist at
72
+ * all — the markdown driver's `.scratch/` — and undefined when it exists,
73
+ * empty or not. Never creates it: a read must leave a bare repository bare.
74
+ */
75
+ absentStorage(): string | undefined;
70
76
  /**
71
77
  * Whether `name` has the shape of an id this driver mints. Id shape is the
72
78
  * driver's to define; the domain only promises ids are opaque strings.
73
79
  */
74
80
  isId(name: string): boolean;
81
+ /**
82
+ * The configured id pattern when ids minted independently on two branches
83
+ * can collide after a merge — a purely counted pattern, which a second branch
84
+ * counts to the same number — with where it is configured, for a reader to
85
+ * act on. Undefined when minted ids survive a merge.
86
+ */
87
+ mergeCollidingIdPattern(): {
88
+ readonly pattern: string;
89
+ readonly configuredIn: string;
90
+ } | undefined;
91
+ /**
92
+ * Refuses as a write addressed to `handle` would refuse before it reads the
93
+ * Ticket — {@link DuplicateId} when more than one Ticket answers to it — and
94
+ * never writes. Lets a caller put that refusal ahead of its own rules.
95
+ */
96
+ assertAddressable(handle: string): Promise<void>;
75
97
  /**
76
98
  * The named Tickets with their bodies, addressed by id or by the
77
- * `<effort>#<order>` handle an id-less Legacy Ticket answers to. A name the
99
+ * `<effort>#<order>` handle an id-less Ticket answers to. A name the
78
100
  * workspace does not hold is simply absent: which names were asked for is the
79
101
  * caller's knowledge, not the driver's.
80
102
  *
@@ -126,9 +148,9 @@ export interface StorageDriver {
126
148
  /** Replace a Spec wholesale with opaque document bytes. */
127
149
  putSpec(effort: string, body: string, expectedRevision: string | undefined, options: HeaderDocOptions): Promise<SpecDocument>;
128
150
  /**
129
- * Normalize every Legacy Ticket in one Effort, mint ids for Tickets that have
130
- * none, and optionally rename files to the schema convention. Preview writes
131
- * nothing. Unrecognized files in the Effort directory are ignored.
151
+ * Normalize every Foreign Ticket in one Effort and mint ids for Tickets that
152
+ * have none. Filenames never change. Preview writes nothing and names a
153
+ * Ticket it would mint by its handle. Unrecognized files in the Effort directory are ignored.
132
154
  */
133
155
  migrateEffort(effort: string, options: MigrateOptions): Promise<MigrationReport>;
134
156
  /**
@@ -154,7 +176,16 @@ export declare class RevisionMismatch extends Error {
154
176
  }
155
177
  /** Thrown when the edit names a Ticket the workspace does not hold. */
156
178
  export declare class NoSuchTicket extends Error {
157
- constructor(handle: string);
179
+ constructor(handle: string, where?: string);
180
+ }
181
+ /**
182
+ * Thrown when a write is addressed to an id more than one Ticket carries. Which
183
+ * of them the caller means cannot be told, and picking one is how a duplicate
184
+ * becomes two Tickets with diverged content. Nothing renumbers either one: a
185
+ * new id cannot reach the commit messages and PR bodies already naming the old.
186
+ */
187
+ export declare class DuplicateId extends Error {
188
+ constructor(id: string, files: readonly string[]);
158
189
  }
159
190
  /** Thrown when a creation names an Effort that does not exist and may not be made. */
160
191
  export declare class NoSuchEffort extends Error {
@@ -174,7 +205,31 @@ export declare class NoSuchFogPatch extends Error {
174
205
  }
175
206
  /** Thrown when a Map value holds text the Map reader would take as structure rather than prose. */
176
207
  export declare class SectionBreakInValue extends Error {
177
- constructor(section: string, line: string, kind?: 'heading' | 'marker');
208
+ constructor(argument: string, line: string, kind?: 'heading' | 'marker');
209
+ }
210
+ /** Thrown when an `add_fog` or `rule_out` value spans lines: a bullet is one line to the reader. */
211
+ export declare class MultiLineBullet extends Error {
212
+ constructor(argument: string);
213
+ }
214
+ /** Thrown when `drop_keys` names a key the schema imports — those change through their own arguments. */
215
+ export declare class SchemaKeyNotDroppable extends Error {
216
+ constructor(keys: readonly string[]);
217
+ }
218
+ /** Thrown when `drop_keys` names a key the Ticket's frontmatter does not carry. */
219
+ export declare class NoSuchKey extends Error {
220
+ constructor(keys: readonly string[]);
221
+ }
222
+ /**
223
+ * Thrown when cutting the named keys out of the fence would not leave exactly
224
+ * the other keys behind — another entry aliases an anchor in a dropped one, or
225
+ * shares its line in a flow mapping.
226
+ */
227
+ export declare class KeyNotCleanlyDroppable extends Error {
228
+ constructor(keys: readonly string[]);
229
+ }
230
+ /** Thrown when `drop_keys` is addressed to a Ticket with no parseable frontmatter to drop from. */
231
+ export declare class NoFrontmatterToDrop extends Error {
232
+ constructor();
178
233
  }
179
234
  /** Thrown by every write while the workspace's configuration is broken. */
180
235
  export declare class InvalidWorkspaceConfig extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,YAAY,EACZ,MAAM,EACN,WAAW,EACX,UAAU,EACV,aAAa,EACd,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,WAAW,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,YAAY,EACZ,WAAW,EACX,UAAU,GACX,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;CACzF;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAE1C;;;;;OAKG;IACH,WAAW,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IAEjD;;;;OAIG;IACH,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAAC;IAEvC;;;;OAIG;IACH,aAAa,IAAI,MAAM,GAAG,SAAS,CAAC;IAEpC;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAE5B;;;;;OAKG;IACH,uBAAuB,IACnB;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAC3D,SAAS,CAAC;IAEd;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD;;;;;;;;;;OAUG;IACH,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAEpE;;;;;;;;;;;OAWG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,EAChB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B;;;;;;;;;;;OAWG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IAErC;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE9C;;;;OAIG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC;IAExB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEhD,2DAA2D;IAC3D,OAAO,CACL,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEjF;;;;;;;;;OASG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,uEAAuE;AACvE,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,MAAM,EAAE,MAAM,EAKzB;CACF;AAED,uEAAuE;AACvE,qBAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,MAAM,EAAE,MAAM,EAAE,KAAK,SAAmB,EASnD;CACF;AAED;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAO/C;CACF;AAED,sFAAsF;AACtF,qBAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,qEAAqE;AACrE,qBAAa,SAAU,SAAQ,KAAK;IAClC,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,uEAAuE;AACvE,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,IAAI,EAAE,MAAM,EAGvB;CACF;AAED,qEAAqE;AACrE,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,KAAK,EAAE,MAAM,EAGxB;CACF;AAED,mGAAmG;AACnG,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,SAAS,GAAG,QAAoB,EASjF;CACF;AAED,oGAAoG;AACpG,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,QAAQ,EAAE,MAAM,EAM3B;CACF;AAED,yGAAyG;AACzG,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,IAAI,EAAE,SAAS,MAAM,EAAE,EAMlC;CACF;AAED,mFAAmF;AACnF,qBAAa,SAAU,SAAQ,KAAK;IAClC,YAAY,IAAI,EAAE,SAAS,MAAM,EAAE,EAGlC;CACF;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,IAAI,EAAE,SAAS,MAAM,EAAE,EAOlC;CACF;AAED,mGAAmG;AACnG,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,cAKC;CACF;AAED,2EAA2E;AAC3E,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,EAAE,MAAM,EAM1B;CACF"}
@@ -1,3 +1,4 @@
1
+ import { bareIdOf } from '../domain.js';
1
2
  /** Thrown when the stored Ticket moved on since the caller read it. */
2
3
  export class RevisionMismatch extends Error {
3
4
  constructor(handle) {
@@ -7,11 +8,29 @@ export class RevisionMismatch extends Error {
7
8
  }
8
9
  /** Thrown when the edit names a Ticket the workspace does not hold. */
9
10
  export class NoSuchTicket extends Error {
10
- constructor(handle) {
11
- super(`No Ticket '${handle}' in this workspace.`);
11
+ constructor(handle, where = 'this workspace') {
12
+ const bare = bareIdOf(handle);
13
+ super(bare === undefined
14
+ ? `No Ticket '${handle}' in ${where}.`
15
+ : `No Ticket '${handle}' in ${where}. Ids resolve repo-wide, so the ` +
16
+ `'@<effort>' a Board shows is decoration — name it '${bare}'.`);
12
17
  this.name = 'NoSuchTicket';
13
18
  }
14
19
  }
20
+ /**
21
+ * Thrown when a write is addressed to an id more than one Ticket carries. Which
22
+ * of them the caller means cannot be told, and picking one is how a duplicate
23
+ * becomes two Tickets with diverged content. Nothing renumbers either one: a
24
+ * new id cannot reach the commit messages and PR bodies already naming the old.
25
+ */
26
+ export class DuplicateId extends Error {
27
+ constructor(id, files) {
28
+ super(`Nothing was written: ${id} is carried by ${String(files.length)} Ticket files — ` +
29
+ `${files.join(', ')} — so which one is meant cannot be told. Give all but one a new ` +
30
+ 'id by hand; FrontierMCP never renumbers.');
31
+ this.name = 'DuplicateId';
32
+ }
33
+ }
15
34
  /** Thrown when a creation names an Effort that does not exist and may not be made. */
16
35
  export class NoSuchEffort extends Error {
17
36
  constructor(slug) {
@@ -42,15 +61,58 @@ export class NoSuchFogPatch extends Error {
42
61
  }
43
62
  /** Thrown when a Map value holds text the Map reader would take as structure rather than prose. */
44
63
  export class SectionBreakInValue extends Error {
45
- constructor(section, line, kind = 'heading') {
64
+ constructor(argument, line, kind = 'heading') {
46
65
  super(kind === 'heading'
47
- ? `Nothing was written: ${section} cannot contain a level-2 heading ('${line}') — it ` +
66
+ ? `Nothing was written: ${argument} cannot contain a level-2 heading ('${line}') — it ` +
48
67
  'would split off as its own section. Use ### or deeper.'
49
- : `Nothing was written: ${section} cannot contain a GENERATED marker ('${line}') — the ` +
68
+ : `Nothing was written: ${argument} cannot contain a GENERATED marker ('${line}') — the ` +
50
69
  'server owns those blocks and would hide or overwrite the text beside one.');
51
70
  this.name = 'SectionBreakInValue';
52
71
  }
53
72
  }
73
+ /** Thrown when an `add_fog` or `rule_out` value spans lines: a bullet is one line to the reader. */
74
+ export class MultiLineBullet extends Error {
75
+ constructor(argument) {
76
+ super(`Nothing was written: ${argument} must be a single line — a newline would split the ` +
77
+ 'bullet, and the lines after the first could never be removed by value.');
78
+ this.name = 'MultiLineBullet';
79
+ }
80
+ }
81
+ /** Thrown when `drop_keys` names a key the schema imports — those change through their own arguments. */
82
+ export class SchemaKeyNotDroppable extends Error {
83
+ constructor(keys) {
84
+ super(`Nothing was written: ${keys.join(', ')} ${keys.length === 1 ? 'is a schema key' : 'are schema keys'}. ` +
85
+ 'drop_keys removes only Unimported frontmatter.');
86
+ this.name = 'SchemaKeyNotDroppable';
87
+ }
88
+ }
89
+ /** Thrown when `drop_keys` names a key the Ticket's frontmatter does not carry. */
90
+ export class NoSuchKey extends Error {
91
+ constructor(keys) {
92
+ super(`Nothing was written: no frontmatter key ${keys.map(key => `'${key}'`).join(', ')}.`);
93
+ this.name = 'NoSuchKey';
94
+ }
95
+ }
96
+ /**
97
+ * Thrown when cutting the named keys out of the fence would not leave exactly
98
+ * the other keys behind — another entry aliases an anchor in a dropped one, or
99
+ * shares its line in a flow mapping.
100
+ */
101
+ export class KeyNotCleanlyDroppable extends Error {
102
+ constructor(keys) {
103
+ super(`Nothing was written: ${keys.map(key => `'${key}'`).join(', ')} cannot be cut out without ` +
104
+ 'damaging the rest of the frontmatter — another entry refers to it or shares its line. ' +
105
+ 'Remove it by hand.');
106
+ this.name = 'KeyNotCleanlyDroppable';
107
+ }
108
+ }
109
+ /** Thrown when `drop_keys` is addressed to a Ticket with no parseable frontmatter to drop from. */
110
+ export class NoFrontmatterToDrop extends Error {
111
+ constructor() {
112
+ super('Nothing was written: this Ticket has no parseable frontmatter, so it has no keys to drop.');
113
+ this.name = 'NoFrontmatterToDrop';
114
+ }
115
+ }
54
116
  /** Thrown by every write while the workspace's configuration is broken. */
55
117
  export class InvalidWorkspaceConfig extends Error {
56
118
  constructor(problem) {
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"AA6MA,uEAAuE;AACvE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,MAAc;QACxB,KAAK,CACH,GAAG,MAAM,iFAAiF,CAC3F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,MAAc;QACxB,KAAK,CAAC,cAAc,MAAM,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,IAAY;QACtB,KAAK,CAAC,cAAc,IAAI,+CAA+C,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,IAAY;QACtB,KAAK,CAAC,sBAAsB,IAAI,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,IAAY;QACtB,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,KAAa;QACvB,KAAK,CAAC,0BAA0B,KAAK,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,mGAAmG;AACnG,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe,EAAE,IAAY,EAAE,IAAI,GAAyB,SAAS;QAC/E,KAAK,CACH,IAAI,KAAK,SAAS;YAChB,CAAC,CAAC,wBAAwB,OAAO,uCAAuC,IAAI,UAAU;gBAClF,wDAAwD;YAC5D,CAAC,CAAC,wBAAwB,OAAO,wCAAwC,IAAI,WAAW;gBACpF,2EAA2E,CAClF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CACH,wBAAwB,OAAO,yDAAyD;YACtF,4CAA4C,CAC/C,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,8 @@ export interface CreateRequest {
37
37
  * turned up on disk. That is what makes the invariant hold: a file carrying id X
38
38
  * is only ever written while X's guard is held, and the guard is only kept when a
39
39
  * scan taken after acquiring it shows X unused — so two sessions can never both
40
- * write X. See ADR 0005.
40
+ * write X. ADR 0006 decides which patterns take the guard; ADR 0005 argues why it
41
+ * sits on its own file and is never reclaimed.
41
42
  */
42
43
  export declare function createTicketFiles(request: CreateRequest): Promise<readonly string[]>;
43
44
  /**
@@ -59,8 +60,6 @@ interface Reserved {
59
60
  */
60
61
  export interface MintingPlan {
61
62
  reserve(storage: string, count: number, rescan: Rescan): Promise<Reserved>;
62
- /** Advisory ids for a preview, taking no guards. */
63
- peek(used: ReadonlySet<string>, count: number): readonly string[];
64
63
  }
65
64
  export declare function mintingPlan(pattern: IdPattern): MintingPlan;
66
65
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/create.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,iBAAiB,CAAC;AAwB1D,gFAAgF;AAChF,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IACvF,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAkC1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC,CASZ;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E;AAwGD,UAAU,QAAQ;IAChB,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3E,oDAAoD;IACpD,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACnE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAE3D"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/create.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,iBAAiB,CAAC;AAwB1D,gFAAgF;AAChF,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IACvF,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAkC1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC,CASZ;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E;AAwGD,UAAU,QAAQ;IAChB,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAE3D"}
@@ -32,7 +32,8 @@ const CANDIDATE_HEADROOM = 1000;
32
32
  * turned up on disk. That is what makes the invariant hold: a file carrying id X
33
33
  * is only ever written while X's guard is held, and the guard is only kept when a
34
34
  * scan taken after acquiring it shows X unused — so two sessions can never both
35
- * write X. See ADR 0005.
35
+ * write X. ADR 0006 decides which patterns take the guard; ADR 0005 argues why it
36
+ * sits on its own file and is never reclaimed.
36
37
  */
37
38
  export async function createTicketFiles(request) {
38
39
  const { storage, minting, effort, dir, issues, drafts, rescan, validate, createEffort } = request;
@@ -195,7 +196,6 @@ function randomPlan(pattern) {
195
196
  const tickets = await rescan();
196
197
  return { ids: draw(idsOf(tickets), count), tickets, release: () => Promise.resolve() };
197
198
  },
198
- peek: draw,
199
199
  };
200
200
  }
201
201
  function derivedPlan(pattern) {
@@ -234,15 +234,6 @@ function derivedPlan(pattern) {
234
234
  };
235
235
  return {
236
236
  reserve: (storage, count, rescan) => reserve(storage, count, rescan, 1),
237
- peek(usedIds, count) {
238
- const used = countersOf(usedIds);
239
- const ids = [];
240
- for (let candidate = highest(used) + 1; ids.length < count; candidate += 1) {
241
- if (!used.has(candidate))
242
- ids.push(render(pattern.tokens, candidate));
243
- }
244
- return ids;
245
- },
246
237
  };
247
238
  }
248
239
  function release(reservations) {
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/storage/markdown/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/storage/markdown/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/driver.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,cAAc,CAAC;AAuDtB,MAAM,WAAW,qBAAqB;IACpC;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,EACE,UAAgC,EAChC,iBAAiB,EACjB,eAAe,GAChB,GAAE,qBAA0B,GAC5B,aAAa,CA2Jf"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/driver.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAGV,aAAa,EAEd,MAAM,cAAc,CAAC;AAmEtB,MAAM,WAAW,qBAAqB;IACpC;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,EACE,UAAgC,EAChC,iBAAiB,EACjB,eAAe,GAChB,GAAE,qBAA0B,GAC5B,aAAa,CA6Lf"}
@@ -1,13 +1,14 @@
1
1
  import { mkdir, readdir, readFile } from 'node:fs/promises';
2
+ import { statSync } from 'node:fs';
2
3
  import { join } from 'node:path';
3
- import { InvalidWorkspaceConfig, NoSuchEffort, NoSuchMap, NoSuchSpec, NoSuchTicket, RevisionMismatch, } from '../driver.js';
4
+ import { InvalidWorkspaceConfig, NoSuchEffort, NoSuchMap, NoSuchSpec, DuplicateId, NoSuchTicket, RevisionMismatch, } from '../driver.js';
4
5
  import { createTicketFiles, mintingPlan } from './create.js';
5
- import { compileIdPattern, DEFAULT_ID_PATTERN, idMatcher, loadIdPattern } from './id-pattern.js';
6
+ import { CONFIG_FILE, compileIdPattern, DEFAULT_ID_PATTERN, idMatcher, loadIdPattern, } from './id-pattern.js';
6
7
  import { migrateEffortFiles } from './migrate.js';
7
8
  import { applyEdit } from './serialize.js';
8
9
  import { AtomicWriteConflict, currentRevision, GuardHeld, withGuard, writeAtomically, } from './write.js';
9
10
  import { applyMapEdit, assertNoSectionBreaks, readMapDocument, readSection, readSpecOpening, scaffoldMap, SECTION_HEADINGS, } from './header-doc.js';
10
- import { parseTicketSummary, ticketBody } from './ticket.js';
11
+ import { parseTicketSummary, resolveSubSlices, ticketBody, unimportedFrontmatter, } from './ticket.js';
11
12
  import { watchStorage } from './watcher.js';
12
13
  /**
13
14
  * The layout this driver serves, per AGENTS.md, under the storage directory it
@@ -58,7 +59,15 @@ export function createMarkdownDriver(root, { storageDir = DEFAULT_STORAGE_DIR, w
58
59
  const effectivePattern = idPattern.pattern ?? compileIdPattern(DEFAULT_ID_PATTERN).pattern ?? unreachable();
59
60
  const minting = mintingPlan(effectivePattern);
60
61
  const matchesId = idMatcher(effectivePattern);
62
+ const colliding = effectivePattern.survivesMerge
63
+ ? undefined
64
+ : { pattern: effectivePattern.source, configuredIn: `${storageDir}/${CONFIG_FILE}` };
61
65
  let writes = Promise.resolve();
66
+ // Set only when the cached scan completes, so a Board's duplicate warning
67
+ // describes the scan its lines were built from. The fresh walks behind
68
+ // readTickets, create and migrate never touch it. Kept beside the cache rather
69
+ // than in it because workspaceWarnings is synchronous.
70
+ let duplicates = new Map();
62
71
  const walk = async () => {
63
72
  // A repo that has never used the tracker is a supported starting state,
64
73
  // not an error: it simply holds no Efforts.
@@ -79,10 +88,20 @@ export function createMarkdownDriver(root, { storageDir = DEFAULT_STORAGE_DIR, w
79
88
  */
80
89
  let cachedScan;
81
90
  const scan = () => {
82
- cachedScan ??= walk().catch((error) => {
83
- cachedScan = undefined;
84
- throw error;
85
- });
91
+ if (cachedScan === undefined) {
92
+ const started = walk().then(efforts => {
93
+ // A walk an invalidation has already replaced must not overwrite the
94
+ // warning the newer scan's Board lines belong with.
95
+ if (cachedScan === started)
96
+ duplicates = duplicateClaims(efforts);
97
+ return efforts;
98
+ }, (error) => {
99
+ if (cachedScan === started)
100
+ cachedScan = undefined;
101
+ throw error;
102
+ });
103
+ cachedScan = started;
104
+ }
86
105
  return cachedScan;
87
106
  };
88
107
  /** Drop the scan, so the next read rebuilds from disk. */
@@ -117,13 +136,25 @@ export function createMarkdownDriver(root, { storageDir = DEFAULT_STORAGE_DIR, w
117
136
  isId(name) {
118
137
  return matchesId.test(name);
119
138
  },
139
+ mergeCollidingIdPattern() {
140
+ return colliding;
141
+ },
142
+ absentStorage() {
143
+ return isAbsent(storage) ? `${storageDir}/` : undefined;
144
+ },
120
145
  workspaceWarnings() {
121
- return idPattern.problem === undefined
146
+ const warnings = idPattern.problem === undefined
122
147
  ? []
123
148
  : [
124
- `${idPattern.problem} Writes are refused until it is fixed and the FrontierMCP server ` +
125
- 'is restarted.',
149
+ `${idPattern.problem} Writes are refused until it is fixed and the FrontierMCP ` +
150
+ 'server is restarted.',
126
151
  ];
152
+ if (duplicates.size > 0)
153
+ warnings.push(duplicateWarning(duplicates, colliding));
154
+ return warnings;
155
+ },
156
+ async assertAddressable(handle) {
157
+ await locate(storage, handle);
127
158
  },
128
159
  async readTickets(handles) {
129
160
  // Deliberately the fresh walk rather than the cached one. A body is read
@@ -155,7 +186,7 @@ export function createMarkdownDriver(root, { storageDir = DEFAULT_STORAGE_DIR, w
155
186
  return moved(() => serialized(() => saveSpec(storage, effort, body, expectedRevision, options)));
156
187
  },
157
188
  migrateEffort(effort, options) {
158
- return moved(() => serialized(() => migrate(storage, minting, effort, options, walk)), options.preview !== true);
189
+ return moved(() => serialized(() => migrate(storage, storageDir, minting, effort, options, walk)), options.preview !== true);
159
190
  },
160
191
  close() {
161
192
  watcher.close();
@@ -179,22 +210,39 @@ export function createMarkdownDriver(root, { storageDir = DEFAULT_STORAGE_DIR, w
179
210
  function unreachable() {
180
211
  throw new Error(`The default id pattern ${DEFAULT_ID_PATTERN} does not compile.`);
181
212
  }
182
- async function migrate(storage, minting, effort, options, walk) {
213
+ async function migrate(storage, storageDir, minting, effort, options, walk) {
183
214
  const dir = join(storage, effort);
184
215
  if ((await readEffort(storage, effort)) === undefined)
185
216
  throw new NoSuchEffort(effort);
186
217
  const entries = await readTicketFiles(dir, effort);
187
- const allTickets = (await walk()).flatMap(summariesOf);
218
+ const scanned = await walk();
219
+ // An id inferred from Foreign prose is preserved, so one another file already
220
+ // carries would be written into frontmatter as a duplicate — the same refusal
221
+ // as any write addressed to that id. A preview is a read, so it reports the
222
+ // conflict beside the rest of the plan instead.
223
+ const claims = duplicateClaims(scanned);
224
+ const conflicts = new Map();
225
+ for (const { ticket } of entries) {
226
+ if (!ticket.foreign || ticket.id === undefined)
227
+ continue;
228
+ const files = claims.get(ticket.id);
229
+ if (files === undefined)
230
+ continue;
231
+ if (options.preview !== true)
232
+ throw new DuplicateId(ticket.id, files);
233
+ conflicts.set(ticket.id, files);
234
+ }
188
235
  const issues = join(dir, ISSUES_DIR);
189
236
  return migrateEffortFiles({
190
237
  storage,
191
238
  minting,
192
239
  effort,
193
240
  issues,
241
+ directory: [...storageDir.split(/[\\/]/), effort, ISSUES_DIR].filter(Boolean).join('/'),
194
242
  entries,
195
- allTickets,
243
+ allTickets: scanned.flatMap(summariesOf),
196
244
  preview: options.preview,
197
- rename: options.rename,
245
+ conflicts,
198
246
  // Allocation must not share a walk started before the guards — same reason
199
247
  // createTickets builds its own rescan.
200
248
  rescan: async () => (await walk()).flatMap(summariesOf),
@@ -438,18 +486,66 @@ function ticketPointers(entries, status) {
438
486
  async function locate(storage, handle) {
439
487
  const slugs = await readDirectories(storage);
440
488
  const perEffort = await Promise.all(slugs.map(async (slug) => ({ slug, entries: await readTicketFiles(join(storage, slug), slug) })));
441
- for (const { slug, entries } of perEffort) {
442
- const found = entries.find(entry => entry.ticket.id === handle || entry.ticket.handle === handle);
443
- if (found !== undefined) {
444
- return {
445
- dir: join(storage, slug),
446
- effort: slug,
447
- filename: found.filename,
448
- ticket: found.ticket,
449
- };
489
+ const found = perEffort.flatMap(({ slug, entries }) => entries
490
+ .filter(entry => entry.ticket.id === handle || entry.ticket.handle === handle)
491
+ .map(entry => ({
492
+ dir: join(storage, slug),
493
+ effort: slug,
494
+ filename: entry.filename,
495
+ ticket: entry.ticket,
496
+ })));
497
+ if (found.length > 1) {
498
+ throw new DuplicateId(handle, found.map(entry => relativeFile(entry.effort, entry.filename)));
499
+ }
500
+ return found[0];
501
+ }
502
+ function relativeFile(effort, filename) {
503
+ return `${effort}/${ISSUES_DIR}/${filename}`;
504
+ }
505
+ /**
506
+ * Ids carried by more than one Ticket file, with every claimant. One id is one
507
+ * exact string: `T5` and `t5` are different ids, as they are to an Edge.
508
+ */
509
+ function duplicateClaims(scanned) {
510
+ const files = new Map();
511
+ for (const { effort, entries } of scanned) {
512
+ for (const { filename, ticket } of entries) {
513
+ if (ticket.id === undefined)
514
+ continue;
515
+ const claimants = files.get(ticket.id) ?? [];
516
+ claimants.push(relativeFile(effort.slug, filename));
517
+ files.set(ticket.id, claimants);
450
518
  }
451
519
  }
452
- return undefined;
520
+ return new Map([...files].filter(([, claimants]) => claimants.length > 1));
521
+ }
522
+ // Reported, never repaired: renumbering cannot reach the commit messages and
523
+ // PR bodies that already name the id, so the fix stays a human act.
524
+ // Capped because it rides every Board: the first few ids name their files, the
525
+ // next few are named bare, and the rest are counted. The count stays exact.
526
+ const DUPLICATES_WITH_FILES = 3;
527
+ const DUPLICATES_NAMED = 10;
528
+ function duplicateWarning(duplicates, colliding) {
529
+ const sorted = [...duplicates].toSorted(([a], [b]) => a.localeCompare(b));
530
+ const withFiles = sorted
531
+ .slice(0, DUPLICATES_WITH_FILES)
532
+ .map(([id, files]) => `${id} (${files.join(', ')})`);
533
+ const named = sorted
534
+ .slice(DUPLICATES_WITH_FILES, DUPLICATES_WITH_FILES + DUPLICATES_NAMED)
535
+ .map(([id]) => id);
536
+ const rest = sorted.length - DUPLICATES_WITH_FILES - named.length;
537
+ let listed = withFiles.join('; ');
538
+ if (named.length > 0)
539
+ listed += `; also ${named.join(' ')}`;
540
+ if (rest > 0)
541
+ listed += ` and ${String(rest)} more`;
542
+ // T56's one-way cross-reference: the pattern is named only once a duplicate
543
+ // has actually happened, as its likely cause.
544
+ const cause = colliding === undefined
545
+ ? ''
546
+ : `; the counted id pattern ${colliding.pattern} is the likely cause`;
547
+ return (`duplicate ids, each carried by more than one Ticket file (${String(duplicates.size)}): ` +
548
+ `${listed} — writes to them are refused; renumber all but one by hand${cause}`);
453
549
  }
454
550
  function defaultsFor(ticket) {
455
551
  return {
@@ -482,10 +578,12 @@ async function readBodies(storage, scanned, handles) {
482
578
  ticket,
483
579
  path: join(storage, entry.effort.slug, ISSUES_DIR, filename),
484
580
  })));
485
- return Promise.all(found.map(async ({ ticket, path }) => withBody(ticket, ticketBody(await readText(path)))));
581
+ return Promise.all(found.map(async ({ ticket, path }) => withBody(ticket, await readText(path))));
486
582
  }
487
- function withBody(ticket, body) {
488
- return { ...ticket, body };
583
+ function withBody(ticket, contents) {
584
+ const body = ticketBody(contents);
585
+ const unimported = unimportedFrontmatter(contents);
586
+ return unimported === undefined ? { ...ticket, body } : { ...ticket, body, unimported };
489
587
  }
490
588
  /**
491
589
  * Every Ticket in one Effort with the file behind it, in sort order, each read
@@ -508,22 +606,32 @@ async function readTicketFiles(dir, effort) {
508
606
  ]);
509
607
  // A file with no `NN-` prefix still needs a position; its place in the
510
608
  // sorted listing is the only order it has.
511
- return {
512
- filename,
513
- ticket: parseTicketSummary(effort, { filename, contents }, position + 1, revision ?? ''),
514
- };
609
+ return parseTicketSummary(effort, { filename, contents }, position + 1, revision ?? '');
515
610
  }));
516
- return withUniqueHandles(parsed.toSorted((a, b) => a.ticket.order - b.ticket.order));
611
+ const tickets = resolveSubSlices(parsed);
612
+ const files = filenames.map((filename, position) => ({
613
+ filename,
614
+ ticket: tickets[position],
615
+ }));
616
+ return withUniqueHandles(files.toSorted((a, b) => a.ticket.order - b.ticket.order));
517
617
  }
518
618
  /**
519
- * Two files can share an `NN-` prefix, which would give two id-less Tickets the
520
- * same `<effort>#<order>` handle and make one of them unfetchable. Later
521
- * collisions get a suffix, so every Ticket stays individually addressable.
619
+ * Two id-less Tickets can land on one order, which would make one of them
620
+ * unfetchable. The cause is a prefix-less file taking `position + 1`, which
621
+ * lands on whatever order a sibling's `NN-` prefix already gave: `a.md` listed
622
+ * second collides with `02-b.md`. Two prefix-less files never collide with each
623
+ * other. Later collisions in sort order get a `.2`, `.3` suffix.
624
+ *
625
+ * A Ticket with an id is never suffixed. Every claimant of a duplicated id must
626
+ * keep answering to that id, so a write addressed to it refuses; a suffix would
627
+ * be a handle reaching one claimant behind the refusal's back.
522
628
  */
523
629
  function withUniqueHandles(entries) {
524
630
  const seen = new Set();
525
631
  return entries.map(entry => {
526
632
  const { ticket } = entry;
633
+ if (ticket.id !== undefined)
634
+ return entry;
527
635
  if (!seen.has(ticket.handle)) {
528
636
  seen.add(ticket.handle);
529
637
  return entry;
@@ -592,4 +700,15 @@ function isMissing(error) {
592
700
  const code = error?.code;
593
701
  return code === 'ENOENT' || code === 'ENOTDIR';
594
702
  }
703
+ /** Follows symlinks, as the root walk does: a linked `.scratch` is still the tracker. */
704
+ /** Only a path with nothing at it: a file where the directory belongs is present, and unusable. */
705
+ function isAbsent(path) {
706
+ try {
707
+ statSync(path);
708
+ return false;
709
+ }
710
+ catch (error) {
711
+ return error.code === 'ENOENT';
712
+ }
713
+ }
595
714
  //# sourceMappingURL=driver.js.map