@llm4ts/flow 2.17.0 → 2.18.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.
@@ -0,0 +1,180 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { type EpicBrief, type InheritedDecision, type PackIndex } from "./EpicBrief.ts";
3
+ /** One brief's word on one scenario. */
4
+ export declare const Claim: Schema.Struct<{
5
+ readonly epicId: Schema.String;
6
+ /** Whether the brief is approved; a draft's claim binds nothing. */
7
+ readonly approved: Schema.Boolean;
8
+ readonly disposition: Schema.Literals<readonly ["in-scope", "dropped", "provided", "deferred"]>;
9
+ /** The in-scope item's title, the reason, the pointer or the deferral note. */
10
+ readonly note: Schema.String;
11
+ /** The epics this claim was kept against on purpose (`keep: <why>` in its brief). */
12
+ readonly keptAgainst: Schema.$Array<Schema.String>;
13
+ /** Whether the claim still binds: false for a draft's, an overruled one, a deferral handed over. */
14
+ readonly standing: Schema.Boolean;
15
+ }>;
16
+ export type Claim = typeof Claim.Type;
17
+ export declare const LedgerStatus: Schema.Literals<readonly ["unclaimed", "in-scope", "dropped", "provided", "deferred", "proposed", "conflict"]>;
18
+ export type LedgerStatus = typeof LedgerStatus.Type;
19
+ /** How far the owning epic is: brief approved, planned, stories merging, landed. */
20
+ export declare const DeliveryState: Schema.Literals<readonly ["approved", "planned", "in-progress", "landed"]>;
21
+ export type DeliveryState = typeof DeliveryState.Type;
22
+ export declare const LedgerEntry: Schema.Struct<{
23
+ readonly program: Schema.String;
24
+ readonly scenario: Schema.String;
25
+ readonly status: Schema.Literals<readonly ["unclaimed", "in-scope", "dropped", "provided", "deferred", "proposed", "conflict"]>;
26
+ /** Every claim on the scenario, approved or not, in brief order. */
27
+ readonly claims: Schema.$Array<Schema.Struct<{
28
+ readonly epicId: Schema.String;
29
+ /** Whether the brief is approved; a draft's claim binds nothing. */
30
+ readonly approved: Schema.Boolean;
31
+ readonly disposition: Schema.Literals<readonly ["in-scope", "dropped", "provided", "deferred"]>;
32
+ /** The in-scope item's title, the reason, the pointer or the deferral note. */
33
+ readonly note: Schema.String;
34
+ /** The epics this claim was kept against on purpose (`keep: <why>` in its brief). */
35
+ readonly keptAgainst: Schema.$Array<Schema.String>;
36
+ /** Whether the claim still binds: false for a draft's, an overruled one, a deferral handed over. */
37
+ readonly standing: Schema.Boolean;
38
+ }>>;
39
+ /** The approved epics behind the status; both sides of a conflict. */
40
+ readonly owners: Schema.$Array<Schema.String>;
41
+ /** In-scope entries only: the owning epic's delivery state. */
42
+ readonly delivery: Schema.optionalKey<Schema.Literals<readonly ["approved", "planned", "in-progress", "landed"]>>;
43
+ }>;
44
+ export type LedgerEntry = typeof LedgerEntry.Type;
45
+ export declare const ProgramTotals: Schema.Struct<{
46
+ readonly program: Schema.String;
47
+ readonly scenarios: Schema.Int;
48
+ readonly inScope: Schema.Int;
49
+ readonly dropped: Schema.Int;
50
+ readonly provided: Schema.Int;
51
+ readonly deferred: Schema.Int;
52
+ readonly proposed: Schema.Int;
53
+ readonly unclaimed: Schema.Int;
54
+ readonly conflicts: Schema.Int;
55
+ }>;
56
+ export type ProgramTotals = typeof ProgramTotals.Type;
57
+ /** A claim on a program or scenario the pack no longer has. */
58
+ export declare const StaleClaim: Schema.Struct<{
59
+ readonly epicId: Schema.String;
60
+ readonly program: Schema.String;
61
+ readonly scenario: Schema.String;
62
+ readonly disposition: Schema.Literals<readonly ["in-scope", "dropped", "provided", "deferred"]>;
63
+ }>;
64
+ export type StaleClaim = typeof StaleClaim.Type;
65
+ export declare const LedgerBriefInfo: Schema.Struct<{
66
+ readonly epicId: Schema.String;
67
+ readonly status: Schema.Literals<readonly ["draft", "approved"]>;
68
+ readonly delivery: Schema.optionalKey<Schema.Literals<readonly ["approved", "planned", "in-progress", "landed"]>>;
69
+ }>;
70
+ export type LedgerBriefInfo = typeof LedgerBriefInfo.Type;
71
+ export declare const CoverageLedger: Schema.Struct<{
72
+ readonly entries: Schema.$Array<Schema.Struct<{
73
+ readonly program: Schema.String;
74
+ readonly scenario: Schema.String;
75
+ readonly status: Schema.Literals<readonly ["unclaimed", "in-scope", "dropped", "provided", "deferred", "proposed", "conflict"]>;
76
+ /** Every claim on the scenario, approved or not, in brief order. */
77
+ readonly claims: Schema.$Array<Schema.Struct<{
78
+ readonly epicId: Schema.String;
79
+ /** Whether the brief is approved; a draft's claim binds nothing. */
80
+ readonly approved: Schema.Boolean;
81
+ readonly disposition: Schema.Literals<readonly ["in-scope", "dropped", "provided", "deferred"]>;
82
+ /** The in-scope item's title, the reason, the pointer or the deferral note. */
83
+ readonly note: Schema.String;
84
+ /** The epics this claim was kept against on purpose (`keep: <why>` in its brief). */
85
+ readonly keptAgainst: Schema.$Array<Schema.String>;
86
+ /** Whether the claim still binds: false for a draft's, an overruled one, a deferral handed over. */
87
+ readonly standing: Schema.Boolean;
88
+ }>>;
89
+ /** The approved epics behind the status; both sides of a conflict. */
90
+ readonly owners: Schema.$Array<Schema.String>;
91
+ /** In-scope entries only: the owning epic's delivery state. */
92
+ readonly delivery: Schema.optionalKey<Schema.Literals<readonly ["approved", "planned", "in-progress", "landed"]>>;
93
+ }>>;
94
+ readonly programs: Schema.$Array<Schema.Struct<{
95
+ readonly program: Schema.String;
96
+ readonly scenarios: Schema.Int;
97
+ readonly inScope: Schema.Int;
98
+ readonly dropped: Schema.Int;
99
+ readonly provided: Schema.Int;
100
+ readonly deferred: Schema.Int;
101
+ readonly proposed: Schema.Int;
102
+ readonly unclaimed: Schema.Int;
103
+ readonly conflicts: Schema.Int;
104
+ }>>;
105
+ readonly stale: Schema.$Array<Schema.Struct<{
106
+ readonly epicId: Schema.String;
107
+ readonly program: Schema.String;
108
+ readonly scenario: Schema.String;
109
+ readonly disposition: Schema.Literals<readonly ["in-scope", "dropped", "provided", "deferred"]>;
110
+ }>>;
111
+ /** Briefs designed against another legacy repository than the pack in hand. */
112
+ readonly skipped: Schema.$Array<Schema.String>;
113
+ readonly briefs: Schema.$Array<Schema.Struct<{
114
+ readonly epicId: Schema.String;
115
+ readonly status: Schema.Literals<readonly ["draft", "approved"]>;
116
+ readonly delivery: Schema.optionalKey<Schema.Literals<readonly ["approved", "planned", "in-progress", "landed"]>>;
117
+ }>>;
118
+ readonly totals: Schema.Struct<{
119
+ readonly scenarios: Schema.Int;
120
+ /** Decided: in scope, dropped or provided by an approved brief. */
121
+ readonly accounted: Schema.Int;
122
+ /** Dropped, provided, or in scope in an epic that landed. */
123
+ readonly delivered: Schema.Int;
124
+ /** Unclaimed, deferred, only proposed, or in conflict. */
125
+ readonly remaining: Schema.Int;
126
+ readonly conflicts: Schema.Int;
127
+ }>;
128
+ }>;
129
+ export type CoverageLedger = typeof CoverageLedger.Type;
130
+ export interface LedgerBrief {
131
+ /** The epic's folder name. */
132
+ readonly epicId: string;
133
+ readonly brief: EpicBrief;
134
+ }
135
+ /** What `epic-stories` recorded for an epic. */
136
+ export interface EpicProgress {
137
+ readonly epicId: string;
138
+ readonly planned: boolean;
139
+ readonly stories: number;
140
+ readonly merged: number;
141
+ readonly landed: boolean;
142
+ }
143
+ export interface LedgerInputs {
144
+ readonly pack: PackIndex;
145
+ readonly briefs: ReadonlyArray<LedgerBrief>;
146
+ readonly epics: ReadonlyArray<EpicProgress>;
147
+ /** The legacy repository the pack came from; briefs naming another are skipped. */
148
+ readonly legacy?: string;
149
+ }
150
+ /**
151
+ * Whether two `Legacy:` paths name the same repository. The same checkout is
152
+ * written with or without a trailing slash, and lives under another home on a
153
+ * colleague's machine or in CI: the folder's name is what stays.
154
+ */
155
+ export declare const sameLegacy: (left: string, right: string) => boolean;
156
+ export declare const buildLedger: (inputs: LedgerInputs) => CoverageLedger;
157
+ /**
158
+ * What approved briefs decided, scenario by scenario: the view another brief
159
+ * inherits. Only claims that still stand: an overruled decision, or a
160
+ * deferral another epic took up, binds nobody.
161
+ */
162
+ export declare const inheritedFrom: (ledger: CoverageLedger) => ReadonlyArray<InheritedDecision>;
163
+ /** `142 scenarios · 96 accounted for (68%) · 58 delivered · 46 remaining · 2 conflicts`. */
164
+ export declare const ledgerHeadline: (ledger: CoverageLedger) => string;
165
+ export interface RenderLedgerOptions {
166
+ /** The legacy repository the pack was read from. */
167
+ readonly legacy: string;
168
+ /** Brief files that did not parse, with the first thing wrong in each. */
169
+ readonly unreadable?: ReadonlyArray<{
170
+ readonly dir: string;
171
+ readonly reason: string;
172
+ }>;
173
+ }
174
+ /**
175
+ * The ledger as a page a person reads: the headline, a table per program,
176
+ * then only the lists that need someone: conflicts, scenarios still
177
+ * deferred, unclaimed ones, what drafts propose, stale citations.
178
+ */
179
+ export declare const renderLedger: (ledger: CoverageLedger, options: RenderLedgerOptions) => string;
180
+ //# sourceMappingURL=CoverageLedger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoverageLedger.d.ts","sourceRoot":"","sources":["../src/CoverageLedger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,415 @@
1
+ import * as Schema from "effect/Schema";
2
+ import { BriefStatus, crossProblem, dispositionWords, hasOverride } from "./EpicBrief.js";
3
+ /**
4
+ * The coverage ledger: what the epic briefs of a target repository have
5
+ * decided about a legacy extract pack, scenario by scenario. It is derived,
6
+ * never state: a pure function of the pack, the briefs and the epics'
7
+ * recorded progress. The report, the context the next brief inherits and the
8
+ * checks across briefs all read it. Only approved briefs bind; a draft's
9
+ * claims are shown as proposed.
10
+ */
11
+ const Disposition = Schema.Literals(["in-scope", "dropped", "provided", "deferred"]);
12
+ /** One brief's word on one scenario. */
13
+ export const Claim = Schema.Struct({
14
+ epicId: Schema.String,
15
+ /** Whether the brief is approved; a draft's claim binds nothing. */
16
+ approved: Schema.Boolean,
17
+ disposition: Disposition,
18
+ /** The in-scope item's title, the reason, the pointer or the deferral note. */
19
+ note: Schema.String,
20
+ /** The epics this claim was kept against on purpose (`keep: <why>` in its brief). */
21
+ keptAgainst: Schema.Array(Schema.String),
22
+ /** Whether the claim still binds: false for a draft's, an overruled one, a deferral handed over. */
23
+ standing: Schema.Boolean
24
+ });
25
+ export const LedgerStatus = Schema.Literals([
26
+ "unclaimed",
27
+ "in-scope",
28
+ "dropped",
29
+ "provided",
30
+ "deferred",
31
+ "proposed",
32
+ "conflict"
33
+ ]);
34
+ /** How far the owning epic is: brief approved, planned, stories merging, landed. */
35
+ export const DeliveryState = Schema.Literals(["approved", "planned", "in-progress", "landed"]);
36
+ export const LedgerEntry = Schema.Struct({
37
+ program: Schema.String,
38
+ scenario: Schema.String,
39
+ status: LedgerStatus,
40
+ /** Every claim on the scenario, approved or not, in brief order. */
41
+ claims: Schema.Array(Claim),
42
+ /** The approved epics behind the status; both sides of a conflict. */
43
+ owners: Schema.Array(Schema.String),
44
+ /** In-scope entries only: the owning epic's delivery state. */
45
+ delivery: Schema.optionalKey(DeliveryState)
46
+ });
47
+ export const ProgramTotals = Schema.Struct({
48
+ program: Schema.String,
49
+ scenarios: Schema.Int,
50
+ inScope: Schema.Int,
51
+ dropped: Schema.Int,
52
+ provided: Schema.Int,
53
+ deferred: Schema.Int,
54
+ proposed: Schema.Int,
55
+ unclaimed: Schema.Int,
56
+ conflicts: Schema.Int
57
+ });
58
+ /** A claim on a program or scenario the pack no longer has. */
59
+ export const StaleClaim = Schema.Struct({
60
+ epicId: Schema.String,
61
+ program: Schema.String,
62
+ scenario: Schema.String,
63
+ disposition: Disposition
64
+ });
65
+ export const LedgerBriefInfo = Schema.Struct({
66
+ epicId: Schema.String,
67
+ status: BriefStatus,
68
+ delivery: Schema.optionalKey(DeliveryState)
69
+ });
70
+ export const CoverageLedger = Schema.Struct({
71
+ entries: Schema.Array(LedgerEntry),
72
+ programs: Schema.Array(ProgramTotals),
73
+ stale: Schema.Array(StaleClaim),
74
+ /** Briefs designed against another legacy repository than the pack in hand. */
75
+ skipped: Schema.Array(Schema.String),
76
+ briefs: Schema.Array(LedgerBriefInfo),
77
+ totals: Schema.Struct({
78
+ scenarios: Schema.Int,
79
+ /** Decided: in scope, dropped or provided by an approved brief. */
80
+ accounted: Schema.Int,
81
+ /** Dropped, provided, or in scope in an epic that landed. */
82
+ delivered: Schema.Int,
83
+ /** Unclaimed, deferred, only proposed, or in conflict. */
84
+ remaining: Schema.Int,
85
+ conflicts: Schema.Int
86
+ })
87
+ });
88
+ const claimsOf = (epicId, brief) => {
89
+ const approved = brief.status === "approved";
90
+ const disposed = (disposition, entries) => entries.map((entry) => ({
91
+ epicId,
92
+ approved,
93
+ disposition,
94
+ note: entry.note,
95
+ program: entry.program,
96
+ scenario: entry.scenario
97
+ }));
98
+ return [
99
+ ...brief.scope.flatMap((item) => item.citations.map((citation) => ({
100
+ epicId,
101
+ approved,
102
+ disposition: "in-scope",
103
+ note: item.title,
104
+ program: citation.program,
105
+ scenario: citation.scenario
106
+ }))),
107
+ ...disposed("dropped", brief.dropped),
108
+ ...disposed("provided", brief.provided),
109
+ ...disposed("deferred", brief.deferred)
110
+ ];
111
+ };
112
+ const unique = (values) => [...new Set(values)];
113
+ const trimmed = (path) => path.replace(/[\\/]+$/, "");
114
+ const lastSegment = (path) => trimmed(path).split(/[\\/]/).at(-1) ?? "";
115
+ /**
116
+ * Whether two `Legacy:` paths name the same repository. The same checkout is
117
+ * written with or without a trailing slash, and lives under another home on a
118
+ * colleague's machine or in CI: the folder's name is what stays.
119
+ */
120
+ export const sameLegacy = (left, right) => trimmed(left) === trimmed(right) ||
121
+ (lastSegment(left).length > 0 && lastSegment(left) === lastSegment(right));
122
+ const deliveryOf = (progress) => progress === undefined
123
+ ? "approved"
124
+ : progress.landed
125
+ ? "landed"
126
+ : progress.merged > 0
127
+ ? "in-progress"
128
+ : progress.planned
129
+ ? "planned"
130
+ : "approved";
131
+ export const buildLedger = (inputs) => {
132
+ const legacy = inputs.legacy;
133
+ const skipped = inputs.briefs
134
+ .filter((entry) => legacy !== undefined && !sameLegacy(entry.brief.legacy, legacy))
135
+ .map((entry) => entry.epicId);
136
+ const read = inputs.briefs.filter((entry) => !skipped.includes(entry.epicId));
137
+ const briefById = new Map(read.map((entry) => [entry.epicId, entry.brief]));
138
+ const progressById = new Map(inputs.epics.map((epic) => [epic.epicId, epic]));
139
+ const known = new Map(inputs.pack.programs.map((program) => [program.name, program.scenarios]));
140
+ const bySlot = new Map();
141
+ const stale = [];
142
+ for (const entry of read) {
143
+ for (const claim of claimsOf(entry.epicId, entry.brief)) {
144
+ if (!(known.get(claim.program) ?? []).includes(claim.scenario)) {
145
+ stale.push({
146
+ epicId: claim.epicId,
147
+ program: claim.program,
148
+ scenario: claim.scenario,
149
+ disposition: claim.disposition
150
+ });
151
+ continue;
152
+ }
153
+ const key = `${claim.program}\u0000${claim.scenario}`;
154
+ bySlot.set(key, [...(bySlot.get(key) ?? []), claim]);
155
+ }
156
+ }
157
+ /**
158
+ * The status the approved claims give a scenario. Deferrals bind nobody.
159
+ * Every other pair of claims is put to `crossProblem`, the rule the
160
+ * per-brief check uses: a clash nobody kept on purpose is a conflict;
161
+ * shared ownership needs one `keep:`; a contradiction is settled for the
162
+ * one brief that kept its decision, and the other claim becomes history.
163
+ */
164
+ const settle = (program, scenario, located) => {
165
+ const binding = located.filter((claim) => claim.approved && claim.disposition !== "deferred");
166
+ const deferrers = located.filter((claim) => claim.approved && claim.disposition === "deferred");
167
+ const kept = (mine, theirs) => {
168
+ const brief = briefById.get(mine.epicId);
169
+ const problem = crossProblem(program, scenario, mine.disposition, {
170
+ epic: theirs.epicId,
171
+ disposition: theirs.disposition
172
+ });
173
+ return brief !== undefined && problem !== undefined && hasOverride(brief, problem);
174
+ };
175
+ const keptAgainst = new Map();
176
+ const overruled = new Set();
177
+ let disputed = false;
178
+ for (let i = 0; i < binding.length; i += 1) {
179
+ for (let j = i + 1; j < binding.length; j += 1) {
180
+ const left = binding[i];
181
+ const right = binding[j];
182
+ if (left === undefined || right === undefined)
183
+ continue;
184
+ if (left.epicId === right.epicId) {
185
+ // One brief disposing of a scenario twice disagrees with itself.
186
+ if (left.disposition !== right.disposition)
187
+ disputed = true;
188
+ continue;
189
+ }
190
+ const clash = crossProblem(program, scenario, left.disposition, {
191
+ epic: right.epicId,
192
+ disposition: right.disposition
193
+ });
194
+ if (clash === undefined)
195
+ continue;
196
+ const leftKeeps = kept(left, right);
197
+ const rightKeeps = kept(right, left);
198
+ if (leftKeeps)
199
+ keptAgainst.set(left, [...(keptAgainst.get(left) ?? []), right.epicId]);
200
+ if (rightKeeps)
201
+ keptAgainst.set(right, [...(keptAgainst.get(right) ?? []), left.epicId]);
202
+ if (clash.kind === "AlreadyOwned") {
203
+ if (!leftKeeps && !rightKeeps)
204
+ disputed = true;
205
+ }
206
+ else if (leftKeeps === rightKeeps) {
207
+ // Nobody kept it, or both insist: still a contradiction.
208
+ disputed = true;
209
+ }
210
+ else {
211
+ overruled.add(leftKeeps ? right : left);
212
+ }
213
+ }
214
+ }
215
+ const survivors = binding.filter((claim) => !overruled.has(claim));
216
+ const conflict = disputed || (binding.length > 0 && survivors.length === 0);
217
+ const status = located.filter((claim) => claim.approved).length === 0
218
+ ? located.length === 0
219
+ ? "unclaimed"
220
+ : "proposed"
221
+ : conflict
222
+ ? "conflict"
223
+ : (survivors[0]?.disposition ?? "deferred");
224
+ const standing = (claim) => !claim.approved
225
+ ? false
226
+ : conflict
227
+ ? claim.disposition !== "deferred"
228
+ : claim.disposition === "deferred"
229
+ ? status === "deferred"
230
+ : !overruled.has(claim);
231
+ const owners = status === "conflict"
232
+ ? unique(binding.map((claim) => claim.epicId))
233
+ : status === "deferred"
234
+ ? unique(deferrers.map((claim) => claim.epicId))
235
+ : unique(survivors.map((claim) => claim.epicId));
236
+ return {
237
+ status,
238
+ owners: located.filter((claim) => claim.approved).length === 0 ? [] : owners,
239
+ claims: located.map((claim) => ({
240
+ epicId: claim.epicId,
241
+ approved: claim.approved,
242
+ disposition: claim.disposition,
243
+ note: claim.note,
244
+ keptAgainst: keptAgainst.get(claim) ?? [],
245
+ standing: standing(claim)
246
+ }))
247
+ };
248
+ };
249
+ const entries = [];
250
+ for (const program of inputs.pack.programs) {
251
+ for (const scenario of program.scenarios) {
252
+ const located = bySlot.get(`${program.name}\u0000${scenario}`) ?? [];
253
+ const { status, owners, claims } = settle(program.name, scenario, located);
254
+ const [owner] = owners;
255
+ entries.push({
256
+ program: program.name,
257
+ scenario,
258
+ status,
259
+ claims,
260
+ owners,
261
+ ...(status === "in-scope" && owner !== undefined
262
+ ? { delivery: deliveryOf(progressById.get(owner)) }
263
+ : {})
264
+ });
265
+ }
266
+ }
267
+ const count = (list, status) => list.filter((entry) => entry.status === status).length;
268
+ const programs = inputs.pack.programs.map((program) => {
269
+ const own = entries.filter((entry) => entry.program === program.name);
270
+ return {
271
+ program: program.name,
272
+ scenarios: own.length,
273
+ inScope: count(own, "in-scope"),
274
+ dropped: count(own, "dropped"),
275
+ provided: count(own, "provided"),
276
+ deferred: count(own, "deferred"),
277
+ proposed: count(own, "proposed"),
278
+ unclaimed: count(own, "unclaimed"),
279
+ conflicts: count(own, "conflict")
280
+ };
281
+ });
282
+ const accounted = count(entries, "in-scope") + count(entries, "dropped") + count(entries, "provided");
283
+ return {
284
+ entries,
285
+ programs,
286
+ stale,
287
+ skipped,
288
+ briefs: read.map((entry) => ({
289
+ epicId: entry.epicId,
290
+ status: entry.brief.status,
291
+ ...(entry.brief.status === "approved"
292
+ ? { delivery: deliveryOf(progressById.get(entry.epicId)) }
293
+ : {})
294
+ })),
295
+ totals: {
296
+ scenarios: entries.length,
297
+ accounted,
298
+ delivered: count(entries, "dropped") +
299
+ count(entries, "provided") +
300
+ entries.filter((entry) => entry.status === "in-scope" && entry.delivery === "landed")
301
+ .length,
302
+ remaining: entries.length - accounted,
303
+ conflicts: count(entries, "conflict")
304
+ }
305
+ };
306
+ };
307
+ /**
308
+ * What approved briefs decided, scenario by scenario: the view another brief
309
+ * inherits. Only claims that still stand: an overruled decision, or a
310
+ * deferral another epic took up, binds nobody.
311
+ */
312
+ export const inheritedFrom = (ledger) => ledger.entries.flatMap((entry) => entry.claims
313
+ .filter((claim) => claim.approved && claim.standing)
314
+ .map((claim) => ({
315
+ program: entry.program,
316
+ scenario: entry.scenario,
317
+ epic: claim.epicId,
318
+ disposition: claim.disposition,
319
+ note: claim.note,
320
+ ...(claim.keptAgainst.length === 0 ? {} : { keptAgainst: claim.keptAgainst })
321
+ })));
322
+ // ---- The report -----------------------------------------------------------------
323
+ const percent = (part, whole) =>
324
+ // Floored: 299 of 300 is 99%, never a whole it has not reached.
325
+ `${whole === 0 ? 0 : Math.floor((part / whole) * 100)}%`;
326
+ const plural = (count, word) => `${count} ${word}${count === 1 ? "" : "s"}`;
327
+ /** `142 scenarios · 96 accounted for (68%) · 58 delivered · 46 remaining · 2 conflicts`. */
328
+ export const ledgerHeadline = (ledger) => {
329
+ const totals = ledger.totals;
330
+ return [
331
+ plural(totals.scenarios, "scenario"),
332
+ `${totals.accounted} accounted for (${percent(totals.accounted, totals.scenarios)})`,
333
+ `${totals.delivered} delivered`,
334
+ `${totals.remaining} remaining`,
335
+ plural(totals.conflicts, "conflict")
336
+ ].join(" · ");
337
+ };
338
+ const deliveryWords = {
339
+ approved: "approved",
340
+ planned: "planned",
341
+ "in-progress": "in progress",
342
+ landed: "landed"
343
+ };
344
+ const claimText = (claim) => `${claim.epicId}: ${dispositionWords[claim.disposition]}${claim.note.length === 0 ? "" : ` (${claim.note})`}`;
345
+ const titled = (title, lines) => lines.length === 0 ? [] : [`## ${title}`, "", ...lines, ""];
346
+ /**
347
+ * The ledger as a page a person reads: the headline, a table per program,
348
+ * then only the lists that need someone: conflicts, scenarios still
349
+ * deferred, unclaimed ones, what drafts propose, stale citations.
350
+ */
351
+ export const renderLedger = (ledger, options) => {
352
+ const of = (status) => ledger.entries.filter((entry) => entry.status === status);
353
+ const name = (entry) => `${entry.program} › ${entry.scenario}`;
354
+ const unclaimed = ledger.programs.flatMap((program) => {
355
+ const open = of("unclaimed").filter((entry) => entry.program === program.program);
356
+ return open.length === 0
357
+ ? []
358
+ : [`- ${program.program}: ${open.map((entry) => entry.scenario).join("; ")}`];
359
+ });
360
+ return [
361
+ "# Coverage ledger",
362
+ "",
363
+ ledgerHeadline(ledger),
364
+ "",
365
+ `Legacy: ${options.legacy}`,
366
+ "",
367
+ "Derived from the epic briefs of this repository and the legacy extract pack. Regenerate",
368
+ "it with `epic-design --coverage`; to change it, change a brief.",
369
+ "",
370
+ "## Briefs",
371
+ "",
372
+ ...(ledger.briefs.length === 0
373
+ ? ["no epic brief yet"]
374
+ : ledger.briefs.map((brief) => {
375
+ const delivery = brief.delivery === undefined || brief.delivery === "approved"
376
+ ? ""
377
+ : `, ${deliveryWords[brief.delivery]}`;
378
+ return `- ${brief.epicId} — ${brief.status}${delivery}`;
379
+ })),
380
+ "",
381
+ "## Programs",
382
+ "",
383
+ "| Program | Scenarios | In scope | Dropped | Provided | Deferred | Proposed | Unclaimed | Conflicts | Accounted |",
384
+ "| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |",
385
+ ...ledger.programs.map((program) => `| ${[
386
+ program.program,
387
+ program.scenarios,
388
+ program.inScope,
389
+ program.dropped,
390
+ program.provided,
391
+ program.deferred,
392
+ program.proposed,
393
+ program.unclaimed,
394
+ program.conflicts,
395
+ percent(program.inScope + program.dropped + program.provided, program.scenarios)
396
+ ].join(" | ")} |`),
397
+ "",
398
+ ...titled("Conflicts", of("conflict").map((entry) => `- ${name(entry)} — ${entry.claims
399
+ .filter((claim) => claim.approved)
400
+ .map(claimText)
401
+ .join("; ")}`)),
402
+ ...titled("Deferred, still waiting", of("deferred").map((entry) => {
403
+ const claim = entry.claims.find((c) => c.approved && c.disposition === "deferred");
404
+ return `- ${name(entry)} — deferred by ${claim?.epicId ?? entry.owners.join(", ")}${claim === undefined || claim.note.length === 0 ? "" : `: ${claim.note}`}`;
405
+ })),
406
+ ...titled("Unclaimed", unclaimed),
407
+ ...titled("Proposed by drafts", of("proposed").map((entry) => `- ${name(entry)} — ${entry.claims.map(claimText).join("; ")}`)),
408
+ ...titled("Stale citations", ledger.stale.map((claim) => `- ${claim.epicId} cites ${claim.program} › ${claim.scenario} (${dispositionWords[claim.disposition]}), which the pack no longer has`)),
409
+ ...titled("Skipped briefs", ledger.skipped.map((epicId) => `- ${epicId}`)),
410
+ ...titled("Briefs that could not be read", (options.unreadable ?? []).map((brief) => `- ${brief.dir}: ${brief.reason}`))
411
+ ]
412
+ .join("\n")
413
+ .replace(/\n+$/, "\n");
414
+ };
415
+ //# sourceMappingURL=CoverageLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoverageLedger.js","sourceRoot":"","sources":["../src/CoverageLedger.ts"],"names":[],"mappings":"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"}