@knpkv/herdr-work 0.7.2 → 0.8.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"work-triage.d.ts","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAa,MAAM,YAAY,CAAA;AAIhF,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,WAAS,CAAA;AAE5C,oCAAoC;AACpC,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAErF,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,eAAe,CAAyD,CAAA;AAErH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;CAClD;AAED,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GACzB;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CAC1F,GACC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAE9B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CACpC;AAmDD;;;;GAIG;AACH,eAAO,MAAM,UAAU,aAAc,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,KAAG,UAyB3E,CAAA;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YAAa,iBAAiB,UAAS,eAAe,KAAe,MAenG,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB;;;;;;CAMoB,CAAA"}
1
+ {"version":3,"file":"work-triage.d.ts","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIvF,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,WAAS,CAAA;AAE5C,oCAAoC;AACpC,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAEjG,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,eAAe,CAO3D,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;CAClD;AAED,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GACzB;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CAC1F,GACC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAE9B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CACpC;AA2DD;;;;GAIG;AACH,eAAO,MAAM,UAAU,aAAc,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,KAAG,UAuCxF,CAAA;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YAAa,iBAAiB,UAAS,eAAe,KAAe,MAenG,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB;;;;;;;CAQoB,CAAA"}
@@ -1,8 +1,18 @@
1
1
  const DAY_MS = 86_400_000;
2
- /** How long a finished goal stays in the "Done in the last 24 hours" group. */
2
+ /** How long a finished goal stays in the "Finished in the last 24 hours" group. */
3
3
  export const workTriageDoneWindowMs = DAY_MS;
4
- export const workTriageGroups = ["needs-you", "blocked", "moving", "done", "earlier"];
5
- /** Which states have finished. Keyed by every WorkState, so a new state must be placed here to compile. */
4
+ export const workTriageGroups = [
5
+ "needs-you",
6
+ "blocked",
7
+ "moving",
8
+ "planned",
9
+ "done",
10
+ "earlier"
11
+ ];
12
+ /**
13
+ * Which displayed states have finished. Keyed by every WorkDisplayState, so a new state must be
14
+ * placed here to compile.
15
+ */
6
16
  const terminalState = {
7
17
  planned: false,
8
18
  working: false,
@@ -12,23 +22,25 @@ const terminalState = {
12
22
  completed: true,
13
23
  abandoned: true
14
24
  };
15
- const terminal = (goal) => terminalState[goal.state];
16
25
  const openRequestsOf = (goal) => (goal.requests ?? []).filter((request) => request.state === "open").toSorted((a, b) => a.requestedAt - b.requestedAt);
17
26
  /**
18
27
  * One group per goal, first match wins. An open request outranks every state, so a blocked goal
19
28
  * with an open request is in "needs you" and not in the blocked count. A request without an
20
29
  * approval target still counts: a person must act, even when the hub link is missing.
21
30
  */
22
- const groupOf = (goal, openRequests, asOf) => {
31
+ const groupOf = (finishedAt, displayState, openRequests, asOf) => {
23
32
  if (openRequests.length > 0)
24
33
  return "needs-you";
25
- if (goal.state === "blocked")
34
+ if (displayState === "blocked")
26
35
  return "blocked";
27
- if (terminal(goal))
28
- return asOf - goal.updatedAt <= workTriageDoneWindowMs ? "done" : "earlier";
36
+ if (terminalState[displayState])
37
+ return asOf - finishedAt <= workTriageDoneWindowMs ? "done" : "earlier";
38
+ // Not started yet: listed after the work that is moving, never counted as moving.
39
+ if (displayState === "planned")
40
+ return "planned";
29
41
  return "moving";
30
42
  };
31
- const groupOrder = { "needs-you": 0, blocked: 1, moving: 2, done: 3, earlier: 4 };
43
+ const groupOrder = { "needs-you": 0, blocked: 1, moving: 2, planned: 3, done: 4, earlier: 5 };
32
44
  /**
33
45
  * Within "needs you", the oldest open request first; elsewhere, the most recently updated goal
34
46
  * first. Ties keep the snapshot's own order, so the order is stable across polls.
@@ -55,10 +67,24 @@ const compareRows = (left, right) => {
55
67
  * so a zero here is a real zero.
56
68
  */
57
69
  export const workTriage = (snapshot) => {
70
+ const overlay = new Map((snapshot.observed ?? []).map((entry) => [entry.goalId, entry]));
58
71
  const rows = snapshot.goals
59
72
  .map((goal, index) => {
60
73
  const openRequests = openRequestsOf(goal);
61
- return { goal, group: groupOf(goal, openRequests, snapshot.asOf), index, openRequests };
74
+ const observed = overlay.get(goal.id) ?? null;
75
+ const displayState = observed?.displayState ?? goal.state;
76
+ // A goal its owner already recorded as finished finished then; one finished only by its observed
77
+ // pull request finished when that pull request closed.
78
+ const finishedAt = terminalState[goal.state]
79
+ ? goal.updatedAt
80
+ : (observed?.pullRequest?.fact.closedAt ?? goal.updatedAt);
81
+ return {
82
+ displayState,
83
+ goal,
84
+ group: groupOf(finishedAt, displayState, openRequests, snapshot.asOf),
85
+ index,
86
+ openRequests
87
+ };
62
88
  })
63
89
  .toSorted(compareRows);
64
90
  const needsYou = rows.filter((row) => row.group === "needs-you");
@@ -108,7 +134,9 @@ export const workTriageGroupTitle = {
108
134
  "needs-you": "Needs you",
109
135
  blocked: "Blocked",
110
136
  moving: "Moving",
111
- done: "Done in the last 24 hours",
137
+ planned: "Not started",
138
+ // Completed, deployed and abandoned alike; each row's state word says which.
139
+ done: "Finished in the last 24 hours",
112
140
  earlier: "Finished earlier"
113
141
  };
114
142
  //# sourceMappingURL=work-triage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"work-triage.js","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"work-triage.js","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knpkv/herdr-work",
3
- "version": "0.7.2",
3
+ "version": "0.8.1",
4
4
  "description": "Durable fleet work checkpoints and departure-board projections",
5
5
  "license": "MIT",
6
6
  "author": "knpkv",
@@ -52,8 +52,8 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "effect": "4.0.0",
55
- "@knpkv/herdr-fleet": "^0.6.1",
56
- "@knpkv/rly": "^0.12.0"
55
+ "@knpkv/herdr-fleet": "^0.7.0",
56
+ "@knpkv/rly": "^0.12.1"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@effect/platform-node": "4.0.0",
package/src/styles.css CHANGED
@@ -163,6 +163,8 @@
163
163
  }
164
164
 
165
165
  .work-row-caption {
166
+ /* The clock ticks every second; even digits keep the line from re-wrapping each tick. */
167
+ font-variant-numeric: tabular-nums;
166
168
  grid-area: caption;
167
169
  }
168
170
 
@@ -210,6 +212,14 @@
210
212
  padding-block: var(--rly-space-8);
211
213
  }
212
214
 
215
+ /* A narrow page stacks each fact's name above its value, so values are not squeezed into a sliver. */
216
+ @container work-page (width < 30rem) {
217
+ .work-facts > div {
218
+ gap: var(--rly-space-2);
219
+ grid-template-columns: minmax(0, 1fr);
220
+ }
221
+ }
222
+
213
223
  .work-facts > div:last-child {
214
224
  border-block-end: 0;
215
225
  }
@@ -220,6 +230,11 @@
220
230
  var(--rly-type-meta-font);
221
231
  }
222
232
 
233
+ /* A note under a fact's value, on its own line. */
234
+ .work-fact-note {
235
+ margin: var(--rly-space-0);
236
+ }
237
+
223
238
  .work-facts dd {
224
239
  margin: var(--rly-space-0);
225
240
  min-inline-size: var(--rly-space-0);
@@ -237,6 +252,15 @@
237
252
  color: var(--rly-color-blocked-ink);
238
253
  }
239
254
 
255
+ .work-note[data-tone="held"] > b:first-child {
256
+ color: var(--rly-color-held-ink);
257
+ }
258
+
259
+ /* An unreadable source: a dashed edge, like the hatched mark its timeline event carries. */
260
+ .work-note[data-tone="unknown"] {
261
+ border-style: dashed;
262
+ }
263
+
240
264
  .work-detail-section {
241
265
  display: grid;
242
266
  gap: var(--rly-space-8);
@@ -264,6 +288,17 @@
264
288
  justify-content: space-between;
265
289
  }
266
290
 
291
+ /* Read out when a request's outcome replaces its bar; the state word already shows it. */
292
+ .work-request-announcement {
293
+ block-size: 1px;
294
+ clip-path: inset(50%);
295
+ inline-size: 1px;
296
+ margin: var(--rly-space-0);
297
+ overflow: hidden;
298
+ position: absolute;
299
+ white-space: nowrap;
300
+ }
301
+
267
302
  .work-activity {
268
303
  display: grid;
269
304
  list-style: none;