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.
- package/README.md +66 -15
- package/dist/domain.d.ts +69 -25
- package/dist/domain.d.ts.map +1 -1
- package/dist/domain.js +9 -0
- package/dist/domain.js.map +1 -1
- package/dist/frontier.d.ts +8 -0
- package/dist/frontier.d.ts.map +1 -1
- package/dist/frontier.js +33 -4
- package/dist/frontier.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +26 -9
- package/dist/server.js.map +1 -1
- package/dist/storage/driver.d.ts +61 -6
- package/dist/storage/driver.d.ts.map +1 -1
- package/dist/storage/driver.js +67 -5
- package/dist/storage/driver.js.map +1 -1
- package/dist/storage/markdown/create.d.ts +2 -3
- package/dist/storage/markdown/create.d.ts.map +1 -1
- package/dist/storage/markdown/create.js +2 -11
- package/dist/storage/markdown/create.js.map +1 -1
- package/dist/storage/markdown/driver.d.ts.map +1 -1
- package/dist/storage/markdown/driver.js +155 -36
- package/dist/storage/markdown/driver.js.map +1 -1
- package/dist/storage/markdown/frontmatter.js +1 -1
- package/dist/storage/markdown/header-doc.d.ts.map +1 -1
- package/dist/storage/markdown/header-doc.js +13 -11
- package/dist/storage/markdown/header-doc.js.map +1 -1
- package/dist/storage/markdown/legacy.d.ts +8 -4
- package/dist/storage/markdown/legacy.d.ts.map +1 -1
- package/dist/storage/markdown/legacy.js +20 -15
- package/dist/storage/markdown/legacy.js.map +1 -1
- package/dist/storage/markdown/migrate.d.ts +13 -3
- package/dist/storage/markdown/migrate.d.ts.map +1 -1
- package/dist/storage/markdown/migrate.js +69 -79
- package/dist/storage/markdown/migrate.js.map +1 -1
- package/dist/storage/markdown/schema.d.ts +9 -0
- package/dist/storage/markdown/schema.d.ts.map +1 -0
- package/dist/storage/markdown/schema.js +21 -0
- package/dist/storage/markdown/schema.js.map +1 -0
- package/dist/storage/markdown/serialize.d.ts +1 -1
- package/dist/storage/markdown/serialize.d.ts.map +1 -1
- package/dist/storage/markdown/serialize.js +110 -24
- package/dist/storage/markdown/serialize.js.map +1 -1
- package/dist/storage/markdown/ticket.d.ts +29 -4
- package/dist/storage/markdown/ticket.d.ts.map +1 -1
- package/dist/storage/markdown/ticket.js +102 -30
- package/dist/storage/markdown/ticket.js.map +1 -1
- package/dist/storage/markdown/watcher.d.ts +1 -1
- package/dist/storage/markdown/watcher.d.ts.map +1 -1
- package/dist/storage/markdown/watcher.js +91 -11
- package/dist/storage/markdown/watcher.js.map +1 -1
- package/dist/tools/create-tickets.d.ts +12 -1
- package/dist/tools/create-tickets.d.ts.map +1 -1
- package/dist/tools/create-tickets.js +23 -6
- package/dist/tools/create-tickets.js.map +1 -1
- package/dist/tools/edit-map.d.ts.map +1 -1
- package/dist/tools/edit-map.js +6 -2
- package/dist/tools/edit-map.js.map +1 -1
- package/dist/tools/get-board.d.ts.map +1 -1
- package/dist/tools/get-board.js +34 -7
- package/dist/tools/get-board.js.map +1 -1
- package/dist/tools/get-tickets.d.ts.map +1 -1
- package/dist/tools/get-tickets.js +42 -11
- package/dist/tools/get-tickets.js.map +1 -1
- package/dist/tools/list-efforts.d.ts +7 -0
- package/dist/tools/list-efforts.d.ts.map +1 -1
- package/dist/tools/list-efforts.js +15 -0
- package/dist/tools/list-efforts.js.map +1 -1
- package/dist/tools/migrate-effort.d.ts +6 -1
- package/dist/tools/migrate-effort.d.ts.map +1 -1
- package/dist/tools/migrate-effort.js +62 -20
- package/dist/tools/migrate-effort.js.map +1 -1
- package/dist/tools/update-ticket.d.ts +2 -0
- package/dist/tools/update-ticket.d.ts.map +1 -1
- package/dist/tools/update-ticket.js +14 -7
- package/dist/tools/update-ticket.js.map +1 -1
- package/dist/tools/workspace-line.d.ts +2 -2
- package/dist/tools/workspace-line.js +2 -2
- package/dist/workspace.d.ts +11 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +17 -5
- package/dist/workspace.js.map +1 -1
- package/docs/agents/issue-tracker.md +60 -27
- package/package.json +11 -11
- package/scripts/frontier-setup.cjs +451 -18
package/dist/storage/driver.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
130
|
-
* none
|
|
131
|
-
*
|
|
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(
|
|
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":"
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/driver.js
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
64
|
+
constructor(argument, line, kind = 'heading') {
|
|
46
65
|
super(kind === 'heading'
|
|
47
|
-
? `Nothing was written: ${
|
|
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: ${
|
|
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":"
|
|
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.
|
|
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
|
|
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.
|
|
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":"
|
|
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
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
146
|
+
const warnings = idPattern.problem === undefined
|
|
122
147
|
? []
|
|
123
148
|
: [
|
|
124
|
-
`${idPattern.problem} Writes are refused until it is fixed and the FrontierMCP
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
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
|
|
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,
|
|
581
|
+
return Promise.all(found.map(async ({ ticket, path }) => withBody(ticket, await readText(path))));
|
|
486
582
|
}
|
|
487
|
-
function withBody(ticket,
|
|
488
|
-
|
|
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
|
-
|
|
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
|
|
520
|
-
*
|
|
521
|
-
*
|
|
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
|