@bluewombat/work-ledger 0.8.0 → 0.10.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,272 @@
1
+ import { isFeatureAggregate, isFeatureSummary } from "../records.js";
2
+ import { refused } from "./results.js";
3
+ /** States in which a Feature holds its Project: nothing else opens beside it. */
4
+ const HOLDING = new Set(["open", "submitted", "escalated"]);
5
+ function cloneIntention(feature) {
6
+ const intention = {
7
+ key: feature.key,
8
+ project: feature.project,
9
+ fingerprint: feature.fingerprint,
10
+ priority: feature.priority,
11
+ intention: feature.intention,
12
+ blocked_by: [...feature.blocked_by],
13
+ merge_when_ready: feature.merge_when_ready,
14
+ };
15
+ if (feature.skip_e2e === true) {
16
+ intention.skip_e2e = true;
17
+ }
18
+ if (feature.title !== undefined) {
19
+ intention.title = feature.title;
20
+ }
21
+ if (feature.manager !== undefined) {
22
+ intention.manager = feature.manager;
23
+ }
24
+ if (feature.external_id !== undefined) {
25
+ intention.external_id = feature.external_id;
26
+ }
27
+ if (feature.source !== undefined) {
28
+ intention.source = { ...feature.source };
29
+ }
30
+ return intention;
31
+ }
32
+ export function openFeatureCommands(options) {
33
+ const { persist, now } = options;
34
+ const loadFeature = async (key) => {
35
+ const found = await persist.load(key);
36
+ return found !== undefined && isFeatureAggregate(found) ? found : undefined;
37
+ };
38
+ const write = async (aggregate) => {
39
+ const saved = await persist.save(aggregate.intention.key, aggregate);
40
+ return saved.ok ? { ok: true } : refused("persist-failed");
41
+ };
42
+ const summaries = async () => (await persist.listSummaries()).filter(isFeatureSummary);
43
+ /** Load, check the state, change, write. */
44
+ const transition = async (key, from, change) => {
45
+ const found = await loadFeature(key);
46
+ if (found === undefined) {
47
+ return refused("not-found");
48
+ }
49
+ if (!from.includes(found.state)) {
50
+ return refused("illegal-transition");
51
+ }
52
+ const next = structuredClone(found);
53
+ change(next);
54
+ return await write(next);
55
+ };
56
+ return {
57
+ async admitFeature(feature) {
58
+ const existing = await loadFeature(feature.key);
59
+ if (existing === undefined) {
60
+ return await write({
61
+ kind: "feature",
62
+ intention: cloneIntention(feature),
63
+ state: "waiting",
64
+ received_at: now(),
65
+ tickets: [],
66
+ resumes: 0,
67
+ });
68
+ }
69
+ if (existing.state === "done") {
70
+ return refused("too-late");
71
+ }
72
+ if (existing.state === "cancelled") {
73
+ return refused("illegal-transition");
74
+ }
75
+ if (existing.state === "waiting") {
76
+ if (existing.intention.fingerprint === feature.fingerprint) {
77
+ return { ok: true };
78
+ }
79
+ const next = structuredClone(existing);
80
+ next.intention = cloneIntention(feature);
81
+ return await write(next);
82
+ }
83
+ if (feature.fingerprint === existing.intention.fingerprint ||
84
+ feature.fingerprint === existing.pending_fingerprint) {
85
+ return { ok: true };
86
+ }
87
+ const next = structuredClone(existing);
88
+ next.pending_fingerprint = feature.fingerprint;
89
+ return await write(next);
90
+ },
91
+ async nextFeature(project) {
92
+ const all = await summaries();
93
+ if (all.some((s) => s.project === project && HOLDING.has(s.state))) {
94
+ return undefined;
95
+ }
96
+ const waiting = all
97
+ .filter((s) => s.project === project && s.state === "waiting")
98
+ .sort((a, b) => b.priority - a.priority || a.received_at - b.received_at);
99
+ for (const candidate of waiting) {
100
+ const loaded = await loadFeature(candidate.key);
101
+ if (loaded === undefined) {
102
+ continue;
103
+ }
104
+ let unblocked = true;
105
+ for (const blocker of loaded.intention.blocked_by) {
106
+ if ((await loadFeature(blocker))?.state !== "done") {
107
+ unblocked = false;
108
+ break;
109
+ }
110
+ }
111
+ if (unblocked) {
112
+ return candidate;
113
+ }
114
+ }
115
+ return undefined;
116
+ },
117
+ async openFeature(input) {
118
+ const found = await loadFeature(input.key);
119
+ if (found === undefined) {
120
+ return refused("not-found");
121
+ }
122
+ if (found.state !== "waiting") {
123
+ return refused("illegal-transition");
124
+ }
125
+ const all = await summaries();
126
+ if (all.some((s) => s.project === found.intention.project && HOLDING.has(s.state))) {
127
+ return refused("project-busy");
128
+ }
129
+ const next = structuredClone(found);
130
+ next.state = "open";
131
+ if (input.line !== undefined) {
132
+ next.line = input.line;
133
+ }
134
+ next.tickets = [...input.tickets];
135
+ return await write(next);
136
+ },
137
+ async markFeatureSubmitted(input) {
138
+ return await transition(input.key, ["open"], (aggregate) => {
139
+ aggregate.state = "submitted";
140
+ // Rebuilt field by field so what was spent on the line is carried on
141
+ // purpose: offered again, it is the same delivery with new content.
142
+ const previous = aggregate.submission;
143
+ aggregate.submission = {
144
+ reference: input.reference,
145
+ submitted_at: previous?.submitted_at ?? now(),
146
+ ...(previous?.refusals === undefined ? {} : { refusals: previous.refusals }),
147
+ ...(previous?.realigns === undefined ? {} : { realigns: previous.realigns }),
148
+ ...(previous?.last_report === undefined ? {} : { last_report: previous.last_report }),
149
+ ...(previous?.last_refused_by === undefined
150
+ ? {}
151
+ : { last_refused_by: previous.last_refused_by }),
152
+ };
153
+ });
154
+ },
155
+ async recordFeatureRefusal(input) {
156
+ return await transition(input.key, ["submitted"], (aggregate) => {
157
+ if (aggregate.submission === undefined) {
158
+ return;
159
+ }
160
+ aggregate.submission = {
161
+ ...aggregate.submission,
162
+ refusals: (aggregate.submission.refusals ?? 0) + 1,
163
+ last_report: input.report,
164
+ ...(input.refusedBy === undefined ? {} : { last_refused_by: input.refusedBy }),
165
+ };
166
+ aggregate.state = "open";
167
+ // A parked refusal from before the line was offered is stale the moment
168
+ // a Submission has its own: two reports would leave the fix guessing.
169
+ delete aggregate.parked_refusal;
170
+ });
171
+ },
172
+ async recordFeatureRealign(key) {
173
+ return await transition(key, ["submitted"], (aggregate) => {
174
+ if (aggregate.submission === undefined) {
175
+ return;
176
+ }
177
+ // What an earlier refusal said was repaired already; left in place it
178
+ // would send the next round to repair it again.
179
+ const { last_report: _report, last_refused_by: _by, ...kept } = aggregate.submission;
180
+ aggregate.submission = { ...kept, realigns: (kept.realigns ?? 0) + 1 };
181
+ aggregate.state = "open";
182
+ delete aggregate.parked_refusal;
183
+ });
184
+ },
185
+ async recordFeatureParkedRefusal(input) {
186
+ return await transition(input.key, ["open"], (aggregate) => {
187
+ aggregate.parked_refusal = {
188
+ report: input.report,
189
+ ...(input.refusedBy === undefined ? {} : { refused_by: input.refusedBy }),
190
+ };
191
+ aggregate.parked_refusals = (aggregate.parked_refusals ?? 0) + 1;
192
+ });
193
+ },
194
+ async clearFeatureParkedRefusal(key) {
195
+ const found = await loadFeature(key);
196
+ if (found === undefined) {
197
+ return refused("not-found");
198
+ }
199
+ if (found.parked_refusal === undefined) {
200
+ return { ok: true };
201
+ }
202
+ const next = structuredClone(found);
203
+ delete next.parked_refusal;
204
+ return await write(next);
205
+ },
206
+ async markFeatureDone(key, input) {
207
+ return await transition(key, ["submitted"], (aggregate) => {
208
+ aggregate.state = "done";
209
+ if (input?.reference !== undefined) {
210
+ aggregate.integration_reference = input.reference;
211
+ }
212
+ });
213
+ },
214
+ async escalateFeature(input) {
215
+ return await transition(input.key, ["open", "submitted"], (aggregate) => {
216
+ aggregate.state = "escalated";
217
+ if (input.report !== undefined && input.report.trim().length > 0) {
218
+ aggregate.escalation = { report: input.report };
219
+ }
220
+ else {
221
+ aggregate.escalation = {};
222
+ }
223
+ delete aggregate.pending_fingerprint;
224
+ });
225
+ },
226
+ async resumeFeature(key) {
227
+ return await transition(key, ["escalated"], (aggregate) => {
228
+ aggregate.state = "open";
229
+ aggregate.resumes += 1;
230
+ delete aggregate.escalation;
231
+ });
232
+ },
233
+ async setFeatureSkipE2e(input) {
234
+ return await transition(input.key, ["waiting", "open", "escalated"], (aggregate) => {
235
+ if (input.skip) {
236
+ aggregate.intention.skip_e2e = true;
237
+ }
238
+ else {
239
+ delete aggregate.intention.skip_e2e;
240
+ }
241
+ });
242
+ },
243
+ async cancelFeature(key) {
244
+ const found = await loadFeature(key);
245
+ if (found === undefined) {
246
+ return refused("not-found");
247
+ }
248
+ if (found.state === "done") {
249
+ return refused("point-of-no-return");
250
+ }
251
+ if (found.state === "cancelled") {
252
+ return { ok: true };
253
+ }
254
+ const next = structuredClone(found);
255
+ next.state = "cancelled";
256
+ return await write(next);
257
+ },
258
+ async getFeature(key) {
259
+ const found = await loadFeature(key);
260
+ return found === undefined
261
+ ? { ok: false, code: "not-found" }
262
+ : { ok: true, aggregate: found };
263
+ },
264
+ async listFeatures() {
265
+ return await summaries();
266
+ },
267
+ async activeFeatureOn(project) {
268
+ return (await summaries()).find((s) => s.project === project && HOLDING.has(s.state));
269
+ },
270
+ };
271
+ }
272
+ //# sourceMappingURL=feature-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-commands.js","sourceRoot":"","sources":["../../src/ledger/feature-commands.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,9 @@
1
1
  import type { PersistencePort } from "../persist/port.js";
2
- import type { EscalationKind, FeatureAggregate, FeatureIntention, FeatureSummary, RefusalCode, TraceRecord } from "../records.js";
3
- import { type PlanDraft } from "./check-plan.js";
4
- export type FeatureAdmission = FeatureIntention;
5
- export type CommandOk = {
6
- ok: true;
7
- };
8
- export type CommandRefused = {
9
- ok: false;
10
- code: RefusalCode;
11
- };
12
- export type CommandResult = CommandOk | CommandRefused;
2
+ import type { EscalationKind, TicketAggregate, TicketIntention, TicketSummary, TraceRecord } from "../records.js";
3
+ import { type FeatureCommands } from "./feature-commands.js";
4
+ import { type CommandRefused, type CommandResult } from "./results.js";
5
+ export type TicketAdmission = TicketIntention;
6
+ export type { CommandOk, CommandRefused, CommandResult } from "./results.js";
13
7
  export type ClaimResult = {
14
8
  ok: true;
15
9
  key: string;
@@ -19,7 +13,7 @@ export type ClaimResult = {
19
13
  } | CommandRefused;
20
14
  export type GetResult = {
21
15
  ok: true;
22
- aggregate: FeatureAggregate;
16
+ aggregate: TicketAggregate;
23
17
  } | {
24
18
  ok: false;
25
19
  code: "not-found";
@@ -32,33 +26,24 @@ export type OpenWorkLedgerOptions = {
32
26
  export type EscalateInput = {
33
27
  key: string;
34
28
  kind: EscalationKind;
35
- subtaskId?: string;
36
29
  /** Why it stopped. Kept so the person who reads the escalation is told. */
37
30
  report?: string;
38
31
  };
39
32
  export type RecordAttemptInput = {
40
33
  key: string;
41
- subtaskId: string;
42
34
  number: number;
43
35
  trace?: TraceRecord;
44
36
  };
45
37
  export type DeclareWorkspaceInput = {
46
38
  key: string;
47
- feature?: string;
48
- subtask?: string;
49
- };
50
- export type ClearWorkspaceInput = {
51
- key: string;
52
- feature?: boolean;
53
- subtask?: boolean;
39
+ path: string;
54
40
  };
55
41
  export type DeclaredWorkspace = {
56
42
  key: string;
57
- feature?: string;
58
- subtask?: string;
43
+ path: string;
59
44
  };
60
- export type WorkLedger = {
61
- admit(feature: FeatureAdmission): Promise<CommandResult>;
45
+ export type WorkLedger = FeatureCommands & {
46
+ admit(ticket: TicketAdmission): Promise<CommandResult>;
62
47
  recordInvalid(input: {
63
48
  key: string;
64
49
  project: string;
@@ -68,26 +53,17 @@ export type WorkLedger = {
68
53
  fingerprint?: string;
69
54
  priority?: number;
70
55
  }): Promise<CommandResult>;
71
- claim(project: string): Promise<ClaimResult>;
72
- recordPlan(input: {
73
- key: string;
74
- plannedAt: string;
75
- subtasks: PlanDraft[];
76
- }): Promise<CommandResult>;
77
- refusePlan(input: {
78
- key: string;
79
- code: string;
80
- reason: string;
81
- }): Promise<CommandResult>;
82
- startSubtask(input: {
83
- key: string;
84
- subtaskId: string;
85
- }): Promise<CommandResult>;
56
+ /**
57
+ * Take the next Ticket that may start. `limit` is how many Tickets of the
58
+ * Project may be active at once; default 1. Two calls never take the same
59
+ * Ticket or go past the limit.
60
+ */
61
+ claim(project: string, limit?: number): Promise<ClaimResult>;
86
62
  recordAttempt(input: RecordAttemptInput): Promise<CommandResult>;
87
- markSubtaskIntegrated(input: {
88
- key: string;
89
- subtaskId: string;
90
- }): Promise<CommandResult>;
63
+ /** The unit starts: from here the Ticket holds a lease until it ends. */
64
+ startUnit(key: string): Promise<CommandResult>;
65
+ /** The unit passed its Gates: the work is assembled and judged next. */
66
+ markIntegrating(key: string): Promise<CommandResult>;
91
67
  markSubmitted(input: {
92
68
  key: string;
93
69
  reference: string;
@@ -97,6 +73,10 @@ export type WorkLedger = {
97
73
  report: string;
98
74
  refusedBy?: string;
99
75
  }): Promise<CommandResult>;
76
+ /** The line moved on while the Submission waited: back to `integrating` to be aligned again. */
77
+ recordRealign(input: {
78
+ key: string;
79
+ }): Promise<CommandResult>;
100
80
  recordParkedRefusal(input: {
101
81
  key: string;
102
82
  report: string;
@@ -108,25 +88,28 @@ export type WorkLedger = {
108
88
  reference?: string | undefined;
109
89
  }): Promise<CommandResult>;
110
90
  escalate(input: EscalateInput): Promise<CommandResult>;
111
- resumeReady(key: string): Promise<CommandResult>;
91
+ resumeTicket(key: string): Promise<CommandResult>;
112
92
  cancel(key: string): Promise<CommandResult>;
113
93
  declareWorkspace(input: DeclareWorkspaceInput): Promise<CommandResult>;
114
- clearWorkspace(input: ClearWorkspaceInput): Promise<CommandResult>;
94
+ clearWorkspace(key: string): Promise<CommandResult>;
95
+ /** The stage made before the producer is complete in the declared workspace. */
96
+ markFirstStageDone(key: string): Promise<CommandResult>;
115
97
  expireBail(key: string): Promise<CommandResult>;
116
98
  /**
117
- * Drop a held Subtask (or planning) without waiting for the bail clock.
118
- * Same ledger outcome as an expired bail in those states.
99
+ * Drop a held unit without waiting for the bail clock. Unlike an expired bail it spends no
100
+ * Attempt: the unit stopped on purpose and recorded the Attempts it finished.
119
101
  */
120
102
  releaseBail(key: string): Promise<CommandResult>;
121
103
  renewBail(key: string): Promise<CommandResult>;
122
104
  get(key: string): Promise<GetResult>;
123
- /** Every known Feature, whatever its state. */
124
- list(): Promise<FeatureSummary[]>;
125
- /** Every Feature mid-flight, whatever its Project. */
126
- listInFlight(): Promise<FeatureSummary[]>;
127
- activeOn(project: string): Promise<FeatureSummary | undefined>;
128
- nextReceived(project: string): Promise<FeatureSummary | undefined>;
129
- nextRunnable(key: string): Promise<string | undefined>;
105
+ /** Every known Ticket, whatever its state. */
106
+ list(): Promise<TicketSummary[]>;
107
+ /** Every Ticket mid-flight, whatever its Project. */
108
+ listInFlight(): Promise<TicketSummary[]>;
109
+ activeOn(project: string): Promise<TicketSummary | undefined>;
110
+ /** Every active Ticket of a Project, escalated ones included. */
111
+ activeTickets(project: string): Promise<TicketSummary[]>;
112
+ nextReceived(project: string): Promise<TicketSummary | undefined>;
130
113
  listDeclaredWorkspaces(): Promise<DeclaredWorkspace[]>;
131
114
  };
132
115
  export declare function openWorkLedger(options: OpenWorkLedgerOptions): WorkLedger;
@@ -1 +1 @@
1
- {"version":3,"file":"open-work-ledger.d.ts","sourceRoot":"","sources":["../../src/ledger/open-work-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"open-work-ledger.d.ts","sourceRoot":"","sources":["../../src/ledger/open-work-ledger.ts"],"names":[],"mappings":"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"}