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
|
@@ -1,72 +1,85 @@
|
|
|
1
|
-
import { rename as renameFile, unlink } from 'node:fs/promises';
|
|
2
1
|
import { join } from 'node:path';
|
|
3
|
-
import {
|
|
2
|
+
import { withIdReservations } from './create.js';
|
|
4
3
|
import { normalizeTicket } from './serialize.js';
|
|
5
|
-
import {
|
|
4
|
+
import { writeAtomically } from './write.js';
|
|
6
5
|
/**
|
|
7
|
-
* Normalize
|
|
8
|
-
*
|
|
6
|
+
* Normalize Foreign Tickets in one Effort and mint ids for those without.
|
|
7
|
+
* Filenames never change: another Effort's prose may link them by path.
|
|
8
|
+
*
|
|
9
|
+
* A real run mints through `withIdReservations`, so the pattern decides the
|
|
10
|
+
* strategy — a `<N>` pattern holds its guards until every file is on disk, a
|
|
11
|
+
* random one draws against a fresh scan (T62). A preview takes no guards and
|
|
12
|
+
* predicts no ids: an unminted Ticket is named by its handle, everywhere it
|
|
13
|
+
* appears, so two previews of unchanged files are identical.
|
|
9
14
|
*
|
|
10
15
|
* Bare sort-order Edges (`Blocked by: 01`) are rewritten to the id the target
|
|
11
16
|
* Ticket carries after this call — preserved or newly minted — so migration
|
|
12
17
|
* does not leave a Board full of unresolvable `01` references.
|
|
13
18
|
*/
|
|
14
19
|
export async function migrateEffortFiles(request) {
|
|
15
|
-
const { effort, entries, preview,
|
|
16
|
-
const candidates = entries.filter(entry => entry.ticket.
|
|
20
|
+
const { effort, entries, preview, directory } = request;
|
|
21
|
+
const candidates = entries.filter(entry => entry.ticket.foreign || entry.ticket.id === undefined);
|
|
17
22
|
if (candidates.length === 0) {
|
|
18
|
-
return { effort, preview,
|
|
23
|
+
return { effort, preview, directory, changes: [], crossEffortEdges: [], keptSubSlices: [] };
|
|
19
24
|
}
|
|
20
25
|
const needMint = candidates.filter(entry => entry.ticket.id === undefined).length;
|
|
21
|
-
const used = idsOf(request.allTickets);
|
|
22
26
|
if (preview) {
|
|
23
|
-
const plan = planChanges(candidates,
|
|
24
|
-
return {
|
|
27
|
+
const plan = planChanges(candidates, undefined, entries, request.conflicts);
|
|
28
|
+
return {
|
|
29
|
+
effort,
|
|
30
|
+
preview: true,
|
|
31
|
+
directory,
|
|
32
|
+
changes: plan.map(file => file.change),
|
|
33
|
+
...edgeNotes(plan, request),
|
|
34
|
+
};
|
|
25
35
|
}
|
|
26
36
|
return withIdReservations(request.minting, request.storage, needMint, request.rescan, async (minted) => {
|
|
27
|
-
const plan = planChanges(candidates, minted, entries
|
|
37
|
+
const plan = planChanges(candidates, minted, entries);
|
|
28
38
|
await applyPlan(request, plan);
|
|
29
39
|
return {
|
|
30
40
|
effort,
|
|
31
41
|
preview: false,
|
|
32
|
-
|
|
42
|
+
directory,
|
|
33
43
|
changes: plan.map(file => file.change),
|
|
44
|
+
...edgeNotes(plan, request),
|
|
34
45
|
};
|
|
35
46
|
});
|
|
36
47
|
}
|
|
37
|
-
|
|
48
|
+
/** `minted` undefined is a preview: unminted Tickets are named by handle. */
|
|
49
|
+
function planChanges(candidates, minted, entries, conflicts = new Map()) {
|
|
38
50
|
let mintAt = 0;
|
|
39
|
-
const
|
|
51
|
+
const nameByOrder = new Map();
|
|
40
52
|
// Every Ticket in the Effort contributes to Edge remapping — a blocker that
|
|
41
53
|
// already had an id must still be findable by its sort order.
|
|
42
54
|
for (const entry of entries) {
|
|
43
55
|
if (entry.ticket.id !== undefined)
|
|
44
|
-
|
|
56
|
+
nameByOrder.set(entry.ticket.order, entry.ticket.id);
|
|
45
57
|
}
|
|
46
58
|
const assigned = new Map();
|
|
47
59
|
for (const entry of candidates) {
|
|
48
60
|
if (entry.ticket.id !== undefined) {
|
|
49
61
|
assigned.set(entry.ticket.handle, entry.ticket.id);
|
|
50
|
-
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (minted === undefined) {
|
|
65
|
+
assigned.set(entry.ticket.handle, undefined);
|
|
66
|
+
nameByOrder.set(entry.ticket.order, entry.ticket.handle);
|
|
51
67
|
continue;
|
|
52
68
|
}
|
|
53
69
|
const id = minted[mintAt++];
|
|
54
70
|
if (id === undefined)
|
|
55
71
|
throw new Error('Reserved fewer ids than Tickets needing one.');
|
|
56
72
|
assigned.set(entry.ticket.handle, id);
|
|
57
|
-
|
|
73
|
+
nameByOrder.set(entry.ticket.order, id);
|
|
58
74
|
}
|
|
59
75
|
return candidates.map(entry => {
|
|
60
76
|
const id = assigned.get(entry.ticket.handle);
|
|
61
|
-
|
|
62
|
-
throw new Error(`No id planned for ${entry.ticket.handle}.`);
|
|
63
|
-
const to = rename ? ticketFilename(entry.ticket.order, id, entry.ticket.title) : entry.filename;
|
|
64
|
-
const blockedBy = remapEdges(entry.ticket.blockedBy, idByOrder);
|
|
77
|
+
const blockedBy = remapEdges(entry.ticket.blockedBy, nameByOrder);
|
|
65
78
|
return {
|
|
66
|
-
|
|
67
|
-
|
|
79
|
+
filename: entry.filename,
|
|
80
|
+
keptSubSlices: entry.ticket.keptSubSlices,
|
|
68
81
|
defaults: {
|
|
69
|
-
id,
|
|
82
|
+
id: id ?? entry.ticket.handle,
|
|
70
83
|
title: entry.ticket.title,
|
|
71
84
|
kind: entry.ticket.kind,
|
|
72
85
|
type: entry.ticket.type,
|
|
@@ -79,67 +92,25 @@ function planChanges(candidates, minted, entries, rename) {
|
|
|
79
92
|
id,
|
|
80
93
|
title: entry.ticket.title,
|
|
81
94
|
minted: entry.ticket.id === undefined,
|
|
82
|
-
normalized: entry.ticket.
|
|
83
|
-
|
|
84
|
-
toName: to === entry.filename ? undefined : to,
|
|
95
|
+
normalized: entry.ticket.foreign,
|
|
96
|
+
filename: entry.filename,
|
|
85
97
|
blockedBy,
|
|
98
|
+
duplicateFiles: entry.ticket.id === undefined ? undefined : conflicts.get(entry.ticket.id),
|
|
86
99
|
},
|
|
87
100
|
};
|
|
88
101
|
});
|
|
89
102
|
}
|
|
90
103
|
async function applyPlan(request, plan) {
|
|
91
|
-
const targets = new Set(plan.map(file => file.to));
|
|
92
|
-
const sources = new Set(plan.map(file => file.from));
|
|
93
|
-
for (const file of plan) {
|
|
94
|
-
if (file.to !== file.from && !sources.has(file.to)) {
|
|
95
|
-
// A name that already exists and is not being vacated would destroy a Ticket.
|
|
96
|
-
const clash = request.entries.some(entry => entry.filename === file.to);
|
|
97
|
-
if (clash) {
|
|
98
|
-
throw new Error(`Cannot rename to ${file.to}: that name is already taken in ${request.effort}.`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// Detect two Tickets collapsing onto one target name.
|
|
103
|
-
if (targets.size !== plan.length) {
|
|
104
|
-
throw new Error(`Rename would collide on a filename inside Effort '${request.effort}'.`);
|
|
105
|
-
}
|
|
106
104
|
const prepared = await Promise.all(plan.map(async (file) => ({
|
|
107
|
-
|
|
108
|
-
contents: normalizeTicket(await request.readContents(file.
|
|
109
|
-
})));
|
|
110
|
-
// Same-name updates are per-file atomic. Renames stage every new file first,
|
|
111
|
-
// land them, then remove the vacated names — so a failure mid-batch never
|
|
112
|
-
// deletes a source whose replacement did not land.
|
|
113
|
-
const inPlace = prepared.filter(file => file.from === file.to);
|
|
114
|
-
const moved = prepared.filter(file => file.from !== file.to);
|
|
115
|
-
await Promise.all(inPlace.map(file => writeAtomically(join(request.issues, file.to), file.contents)));
|
|
116
|
-
if (moved.length === 0)
|
|
117
|
-
return;
|
|
118
|
-
const staged = await Promise.allSettled(moved.map(async (file) => ({
|
|
119
|
-
temporary: await stage(join(request.issues, file.to), file.contents),
|
|
120
|
-
target: join(request.issues, file.to),
|
|
121
|
-
from: join(request.issues, file.from),
|
|
105
|
+
filename: file.filename,
|
|
106
|
+
contents: normalizeTicket(await request.readContents(file.filename), file.defaults),
|
|
122
107
|
})));
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
108
|
+
// Settled, not raced: the caller releases its `<N>` guards when this returns
|
|
109
|
+
// or throws, and they must stay held until every write has finished (T62).
|
|
110
|
+
const written = await Promise.allSettled(prepared.map(file => writeAtomically(join(request.issues, file.filename), file.contents)));
|
|
111
|
+
const failed = written.find(result => result.status === 'rejected');
|
|
112
|
+
if (failed !== undefined)
|
|
127
113
|
throw failed.reason;
|
|
128
|
-
}
|
|
129
|
-
const landed = await Promise.allSettled(ready.map(async (entry) => {
|
|
130
|
-
await renameFile(entry.temporary, entry.target);
|
|
131
|
-
return entry;
|
|
132
|
-
}));
|
|
133
|
-
const written = landed.filter(entry => entry.status === 'fulfilled').map(entry => entry.value);
|
|
134
|
-
const lost = landed.find(entry => entry.status === 'rejected');
|
|
135
|
-
if (lost !== undefined) {
|
|
136
|
-
await Promise.allSettled([
|
|
137
|
-
...written.map(entry => unlink(entry.target).catch(() => { })),
|
|
138
|
-
...ready.map(entry => unstage(entry.temporary)),
|
|
139
|
-
]);
|
|
140
|
-
throw lost.reason;
|
|
141
|
-
}
|
|
142
|
-
await Promise.all(written.map(entry => unlink(entry.from)));
|
|
143
114
|
}
|
|
144
115
|
/**
|
|
145
116
|
* A bare sort-order Edge becomes the id of the Ticket at that order. Real ids
|
|
@@ -152,7 +123,26 @@ function remapEdges(edges, idByOrder) {
|
|
|
152
123
|
return idByOrder.get(Number(edge)) ?? edge;
|
|
153
124
|
});
|
|
154
125
|
}
|
|
155
|
-
|
|
156
|
-
|
|
126
|
+
/** Grouped, never per Ticket: what a reader must check by hand after this call. */
|
|
127
|
+
function edgeNotes(plan, request) {
|
|
128
|
+
const effortOf = new Map();
|
|
129
|
+
for (const ticket of request.allTickets) {
|
|
130
|
+
if (ticket.id !== undefined && ticket.effort !== request.effort) {
|
|
131
|
+
effortOf.set(ticket.id, ticket.effort);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const local = new Set(plan.map(file => file.change.id));
|
|
135
|
+
const cross = new Set();
|
|
136
|
+
for (const file of plan) {
|
|
137
|
+
for (const edge of file.change.blockedBy) {
|
|
138
|
+
const foreign = effortOf.get(edge);
|
|
139
|
+
if (foreign !== undefined && !local.has(edge))
|
|
140
|
+
cross.add(`${edge}@${foreign}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// What the scan kept, not a pattern over what is written: a `T7.2` copied
|
|
144
|
+
// from a fence was never a prose sub-slice.
|
|
145
|
+
const kept = new Set(plan.flatMap(file => file.keptSubSlices));
|
|
146
|
+
return { crossEffortEdges: [...cross].toSorted(), keptSubSlices: [...kept].toSorted() };
|
|
157
147
|
}
|
|
158
148
|
//# sourceMappingURL=migrate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/storage/markdown/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/storage/markdown/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frontmatter keys a schema Ticket may carry, in the order a block this
|
|
3
|
+
* driver *creates* is written. The one list: parse reads it to tell imported
|
|
4
|
+
* keys from unimported ones, serialize writes in its order, and `drop_keys`
|
|
5
|
+
* refuses anything in it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const FIELD_ORDER: readonly ['id', 'title', 'kind', 'type', 'status', 'triage', 'blocked_by', 'claimed_by', 'claimed_at', 'answer_gist', 'dropped_reason'];
|
|
8
|
+
export declare const SCHEMA_KEYS: ReadonlySet<string>;
|
|
9
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,WAAW,YACtB,IAAI,EACJ,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,CACR,CAAC;AAEX,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAAwB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The frontmatter keys a schema Ticket may carry, in the order a block this
|
|
3
|
+
* driver *creates* is written. The one list: parse reads it to tell imported
|
|
4
|
+
* keys from unimported ones, serialize writes in its order, and `drop_keys`
|
|
5
|
+
* refuses anything in it.
|
|
6
|
+
*/
|
|
7
|
+
export const FIELD_ORDER = [
|
|
8
|
+
'id',
|
|
9
|
+
'title',
|
|
10
|
+
'kind',
|
|
11
|
+
'type',
|
|
12
|
+
'status',
|
|
13
|
+
'triage',
|
|
14
|
+
'blocked_by',
|
|
15
|
+
'claimed_by',
|
|
16
|
+
'claimed_at',
|
|
17
|
+
'answer_gist',
|
|
18
|
+
'dropped_reason',
|
|
19
|
+
];
|
|
20
|
+
export const SCHEMA_KEYS = new Set(FIELD_ORDER);
|
|
21
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/storage/markdown/schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI;IACJ,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,gBAAgB;CACR,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC"}
|
|
@@ -9,7 +9,7 @@ export interface Defaults {
|
|
|
9
9
|
readonly blockedBy: readonly string[];
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Normalize a Ticket file to schema frontmatter. A
|
|
12
|
+
* Normalize a Ticket file to schema frontmatter. A Foreign file with no fence
|
|
13
13
|
* gets a full block from {@link defaults}; a file that already has frontmatter
|
|
14
14
|
* keeps key order and only gains a missing id plus an updated Edge list (so a
|
|
15
15
|
* bare sort-order Edge can become the id migration just minted). Body prose is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/serialize.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/serialize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgBlD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAiB5E;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA6BxF;AAwSD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK/E"}
|
|
@@ -1,30 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
+
import { Document, isMap, isScalar, isSeq, parse, parseDocument } from 'yaml';
|
|
3
|
+
import { KeyNotCleanlyDroppable, NoFrontmatterToDrop, NoSuchKey, SchemaKeyNotDroppable, } from '../driver.js';
|
|
2
4
|
import { splitFrontmatter } from './frontmatter.js';
|
|
3
|
-
|
|
4
|
-
* Field order for frontmatter this driver *creates*. An existing file is never
|
|
5
|
-
* reordered — a new field is appended, because moving keys a write did not name
|
|
6
|
-
* is exactly the reformatting ADR 0003 forbids.
|
|
7
|
-
*/
|
|
8
|
-
const FIELD_ORDER = [
|
|
9
|
-
'id',
|
|
10
|
-
'title',
|
|
11
|
-
'kind',
|
|
12
|
-
'type',
|
|
13
|
-
'status',
|
|
14
|
-
'triage',
|
|
15
|
-
'blocked_by',
|
|
16
|
-
'claimed_by',
|
|
17
|
-
'claimed_at',
|
|
18
|
-
'answer_gist',
|
|
19
|
-
'dropped_reason',
|
|
20
|
-
];
|
|
5
|
+
import { FIELD_ORDER, SCHEMA_KEYS } from './schema.js';
|
|
21
6
|
/** The body sections a write may touch. Everything else is opaque prose. */
|
|
22
7
|
const ANSWER_HEADING = '## Answer';
|
|
23
8
|
const COMMENTS_HEADING = '## Comments';
|
|
24
9
|
/** Any `##` heading, so replacing the answer stops at the next section. */
|
|
25
10
|
const NEXT_SECTION = /^##[ \t]/m;
|
|
26
11
|
/**
|
|
27
|
-
* Normalize a Ticket file to schema frontmatter. A
|
|
12
|
+
* Normalize a Ticket file to schema frontmatter. A Foreign file with no fence
|
|
28
13
|
* gets a full block from {@link defaults}; a file that already has frontmatter
|
|
29
14
|
* keeps key order and only gains a missing id plus an updated Edge list (so a
|
|
30
15
|
* bare sort-order Edge can become the id migration just minted). Body prose is
|
|
@@ -57,7 +42,9 @@ export function normalizeTicket(contents, defaults) {
|
|
|
57
42
|
*/
|
|
58
43
|
export function applyEdit(contents, edit, defaults) {
|
|
59
44
|
const split = splitFrontmatter(contents);
|
|
60
|
-
const
|
|
45
|
+
const raw = withoutKeys(split.hasFence ? split.raw : undefined, edit.dropKeys);
|
|
46
|
+
const document = existingDocument(raw) ?? schemaFor(defaults);
|
|
47
|
+
const touchesFields = fieldsOf(edit).length > 0 || edit.blockedBy !== undefined;
|
|
61
48
|
for (const [field, value] of fieldsOf(edit)) {
|
|
62
49
|
if (value === null)
|
|
63
50
|
document.delete(field);
|
|
@@ -66,7 +53,11 @@ export function applyEdit(contents, edit, defaults) {
|
|
|
66
53
|
}
|
|
67
54
|
if (edit.blockedBy !== undefined)
|
|
68
55
|
setEdges(document, edit.blockedBy);
|
|
69
|
-
|
|
56
|
+
// A drop alone keeps the fence as text, so what remains is byte-identical
|
|
57
|
+
// rather than whatever a re-render would make of it.
|
|
58
|
+
const frontmatter = edit.dropKeys !== undefined && raw !== undefined && !touchesFields
|
|
59
|
+
? raw.replace(/(?:\r?\n)+$/, '')
|
|
60
|
+
: render(document);
|
|
70
61
|
// Only the outer edges are trimmed, and only newlines at the end — trailing
|
|
71
62
|
// spaces on the last line of a comment are part of what the author wrote.
|
|
72
63
|
let body = split.body.replace(/^\s+/, '').replace(/\n+$/, '');
|
|
@@ -77,6 +68,100 @@ export function applyEdit(contents, edit, defaults) {
|
|
|
77
68
|
body = withComment(body, edit.comment);
|
|
78
69
|
return `---\n${frontmatter}\n---\n\n${body}\n`;
|
|
79
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* The fence's text with the named top-level keys cut out. Each entry goes from
|
|
73
|
+
* the start of its key's line to the end of its value, so a block scalar, a
|
|
74
|
+
* nested map or a sequence goes whole, and a comment on the entry's own line
|
|
75
|
+
* goes with it. A comment on its own line above stays: nothing says it was
|
|
76
|
+
* about this key rather than a heading for what follows, and it is prose the
|
|
77
|
+
* caller did not name. Every name is resolved before anything is cut.
|
|
78
|
+
*
|
|
79
|
+
* The cut is text surgery, so its result is read back the way the reader reads
|
|
80
|
+
* a fence and refused unless exactly the other entries survive with the values
|
|
81
|
+
* they had: an alias left without its anchor, a flow mapping sharing the
|
|
82
|
+
* dropped entry's line, or an alias that falls back to an earlier anchor of the
|
|
83
|
+
* same name would otherwise land a fence that no longer parses, or one whose
|
|
84
|
+
* `status` quietly changed.
|
|
85
|
+
* When no key survives there is no fence left to keep, and undefined hands the
|
|
86
|
+
* write to the schema block every fenceless file gets.
|
|
87
|
+
*/
|
|
88
|
+
function withoutKeys(raw, dropKeys) {
|
|
89
|
+
if (dropKeys === undefined || dropKeys.length === 0)
|
|
90
|
+
return raw;
|
|
91
|
+
const document = existingDocument(raw);
|
|
92
|
+
if (raw === undefined || document === undefined || !isMap(document.contents)) {
|
|
93
|
+
throw new NoFrontmatterToDrop();
|
|
94
|
+
}
|
|
95
|
+
const refused = dropKeys.filter(key => SCHEMA_KEYS.has(key));
|
|
96
|
+
if (refused.length > 0)
|
|
97
|
+
throw new SchemaKeyNotDroppable(refused);
|
|
98
|
+
const spans = new Map();
|
|
99
|
+
for (const pair of document.contents.items) {
|
|
100
|
+
if (!isScalar(pair.key) || pair.key.range == null)
|
|
101
|
+
continue;
|
|
102
|
+
const name = String(pair.key.value);
|
|
103
|
+
if (!dropKeys.includes(name))
|
|
104
|
+
continue;
|
|
105
|
+
const value = pair.value;
|
|
106
|
+
const start = raw.lastIndexOf('\n', pair.key.range[0] - 1) + 1;
|
|
107
|
+
let end = value?.range?.[2] ?? pair.key.range[2];
|
|
108
|
+
if (raw[end - 1] !== '\n') {
|
|
109
|
+
const eol = raw.indexOf('\n', end);
|
|
110
|
+
end = eol === -1 ? raw.length : eol + 1;
|
|
111
|
+
}
|
|
112
|
+
spans.set(name, [start, end]);
|
|
113
|
+
}
|
|
114
|
+
const missing = [...new Set(dropKeys)].filter(key => !spans.has(key));
|
|
115
|
+
if (missing.length > 0)
|
|
116
|
+
throw new NoSuchKey(missing);
|
|
117
|
+
let cut = raw;
|
|
118
|
+
for (const [start, end] of [...spans.values()].toSorted((a, b) => b[0] - a[0])) {
|
|
119
|
+
cut = cut.slice(0, start) + cut.slice(end);
|
|
120
|
+
}
|
|
121
|
+
// Compared on the text that will be written, trimming included: a `|+`
|
|
122
|
+
// scalar left as the last entry would otherwise lose its trailing blank lines.
|
|
123
|
+
const written = cut.replace(/(?:\r?\n)+$/, '');
|
|
124
|
+
const expected = withoutEntries(valueOf(document), spans);
|
|
125
|
+
if (expected === undefined)
|
|
126
|
+
throw new NoFrontmatterToDrop();
|
|
127
|
+
const surviving = plainValue(written);
|
|
128
|
+
if (surviving === undefined ||
|
|
129
|
+
!isDeepStrictEqual(surviving, expected) ||
|
|
130
|
+
Object.keys(surviving).join('\0') !== Object.keys(expected).join('\0')) {
|
|
131
|
+
throw new KeyNotCleanlyDroppable([...spans.keys()]);
|
|
132
|
+
}
|
|
133
|
+
if (Object.keys(expected).length === 0)
|
|
134
|
+
return undefined;
|
|
135
|
+
return written;
|
|
136
|
+
}
|
|
137
|
+
/** A fence the reader would refuse — an alias with no anchor — has no values to compare. */
|
|
138
|
+
function valueOf(document) {
|
|
139
|
+
try {
|
|
140
|
+
return asPlainMap(document.toJS());
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function plainValue(text) {
|
|
147
|
+
try {
|
|
148
|
+
const value = parse(text);
|
|
149
|
+
return value === null || value === undefined ? {} : asPlainMap(value);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function asPlainMap(value) {
|
|
156
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
157
|
+
? value
|
|
158
|
+
: undefined;
|
|
159
|
+
}
|
|
160
|
+
function withoutEntries(value, dropped) {
|
|
161
|
+
if (value === undefined)
|
|
162
|
+
return undefined;
|
|
163
|
+
return Object.fromEntries(Object.entries(value).filter(([key]) => !dropped.has(key)));
|
|
164
|
+
}
|
|
80
165
|
/**
|
|
81
166
|
* The Edge list, replaced whole rather than merged — a caller changing Edges
|
|
82
167
|
* knows which ones it wants, and a merge would leave no way to remove one.
|
|
@@ -224,7 +309,8 @@ function existingDocument(raw) {
|
|
|
224
309
|
if (raw === undefined)
|
|
225
310
|
return undefined;
|
|
226
311
|
const parsed = parseDocument(raw);
|
|
227
|
-
|
|
312
|
+
// An empty fence parses clean to a null document, which would render `null`.
|
|
313
|
+
return parsed.errors.length > 0 || !isMap(parsed.contents) ? undefined : parsed;
|
|
228
314
|
}
|
|
229
315
|
function fieldsOf(edit) {
|
|
230
316
|
const pairs = [];
|
|
@@ -270,7 +356,7 @@ function render(document) {
|
|
|
270
356
|
return document.toString({ lineWidth: 0, flowCollectionPadding: false }).trimEnd();
|
|
271
357
|
}
|
|
272
358
|
/**
|
|
273
|
-
* A
|
|
359
|
+
* A fenceless Foreign file has no frontmatter, so a write is where it gets one — the
|
|
274
360
|
* "strict on write" half of the contract: the tracker converts itself as it is
|
|
275
361
|
* worked rather than in one risky pass. Only a created block gets to be in the
|
|
276
362
|
* schema's field order.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/storage/markdown/serialize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/storage/markdown/serialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
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,11 +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):
|
|
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
|
-
*
|
|
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;
|
|
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;
|
|
23
48
|
//# sourceMappingURL=ticket.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticket.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/ticket.ts"],"names":[],"mappings":"
|
|
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"}
|