@aeolus-fleet/core 0.24.1 → 0.25.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.
Files changed (165) hide show
  1. package/README.md +5 -5
  2. package/dist/adapters/prisma/generated/browser.d.ts +15 -5
  3. package/dist/adapters/prisma/generated/client.d.ts +15 -5
  4. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +60 -0
  5. package/dist/adapters/prisma/generated/enums.d.ts +15 -1
  6. package/dist/adapters/prisma/generated/enums.js +13 -1
  7. package/dist/adapters/prisma/generated/enums.js.map +1 -1
  8. package/dist/adapters/prisma/generated/internal/class.d.ts +11 -0
  9. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  10. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  11. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +109 -1
  12. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +16 -0
  13. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  14. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +17 -0
  15. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +16 -0
  16. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  17. package/dist/adapters/prisma/generated/models/CrewRequest.d.ts +3 -2
  18. package/dist/adapters/prisma/generated/models/Delivery.d.ts +304 -4
  19. package/dist/adapters/prisma/generated/models/Fleet.d.ts +267 -0
  20. package/dist/adapters/prisma/generated/models/Lease.d.ts +332 -1
  21. package/dist/adapters/prisma/generated/models/OverdueDelivery.d.ts +1687 -0
  22. package/dist/adapters/prisma/generated/models/OverdueDelivery.js +2 -0
  23. package/dist/adapters/prisma/generated/models/OverdueDelivery.js.map +1 -0
  24. package/dist/adapters/prisma/generated/models/Ship.d.ts +271 -0
  25. package/dist/adapters/prisma/generated/models.d.ts +1 -0
  26. package/dist/adapters/prisma/history.js +231 -46
  27. package/dist/adapters/prisma/history.js.map +1 -1
  28. package/dist/adapters/prisma/installation.js +30 -1
  29. package/dist/adapters/prisma/installation.js.map +1 -1
  30. package/dist/adapters/prisma/messaging.js +11 -7
  31. package/dist/adapters/prisma/messaging.js.map +1 -1
  32. package/dist/adapters/prisma/overdue.d.ts +4 -0
  33. package/dist/adapters/prisma/overdue.js +63 -0
  34. package/dist/adapters/prisma/overdue.js.map +1 -0
  35. package/dist/adapters/prisma/registry.js +32 -7
  36. package/dist/adapters/prisma/registry.js.map +1 -1
  37. package/dist/adapters/prisma/rows.d.ts +12 -1
  38. package/dist/adapters/prisma/rows.js +46 -1
  39. package/dist/adapters/prisma/rows.js.map +1 -1
  40. package/dist/adapters/prisma/unit-of-work.d.ts +2 -1
  41. package/dist/adapters/prisma/unit-of-work.js +2 -0
  42. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  43. package/dist/adapters/trpc/context.d.ts +16 -0
  44. package/dist/adapters/trpc/fleet.d.ts +233 -15
  45. package/dist/adapters/trpc/fleet.js +52 -8
  46. package/dist/adapters/trpc/fleet.js.map +1 -1
  47. package/dist/adapters/trpc/installation.d.ts +14 -0
  48. package/dist/adapters/trpc/installation.js +7 -1
  49. package/dist/adapters/trpc/installation.js.map +1 -1
  50. package/dist/adapters/trpc/router.d.ts +301 -9
  51. package/dist/adapters/trpc/ship-protocol.js +2 -2
  52. package/dist/adapters/trpc/ship-protocol.js.map +1 -1
  53. package/dist/adapters/trpc/ship.d.ts +87 -0
  54. package/dist/adapters/trpc/ship.js +96 -1
  55. package/dist/adapters/trpc/ship.js.map +1 -1
  56. package/dist/adapters/trpc/starting-prompt-text.d.ts +1 -1
  57. package/dist/adapters/trpc/starting-prompt-text.js +22 -25
  58. package/dist/adapters/trpc/starting-prompt-text.js.map +1 -1
  59. package/dist/adapters/trpc/trpc.js +5 -0
  60. package/dist/adapters/trpc/trpc.js.map +1 -1
  61. package/dist/app.d.ts +4 -2
  62. package/dist/app.js +21 -9
  63. package/dist/app.js.map +1 -1
  64. package/dist/domain/messaging/delivery.d.ts +88 -28
  65. package/dist/domain/messaging/delivery.js +213 -39
  66. package/dist/domain/messaging/delivery.js.map +1 -1
  67. package/dist/domain/messaging/dismiss-delivery.d.ts +1 -1
  68. package/dist/domain/messaging/dismiss-delivery.js +1 -1
  69. package/dist/domain/messaging/hand-over-delivery.d.ts +38 -0
  70. package/dist/domain/messaging/hand-over-delivery.js +46 -0
  71. package/dist/domain/messaging/hand-over-delivery.js.map +1 -0
  72. package/dist/domain/messaging/message.d.ts +12 -1
  73. package/dist/domain/messaging/message.js +2 -0
  74. package/dist/domain/messaging/message.js.map +1 -1
  75. package/dist/domain/messaging/overdue.d.ts +60 -0
  76. package/dist/domain/messaging/overdue.js +52 -0
  77. package/dist/domain/messaging/overdue.js.map +1 -0
  78. package/dist/domain/messaging/ports.d.ts +20 -0
  79. package/dist/domain/messaging/public.d.ts +1 -0
  80. package/dist/domain/messaging/public.js +2 -0
  81. package/dist/domain/messaging/public.js.map +1 -0
  82. package/dist/domain/messaging/push-receive-deliveries.d.ts +48 -0
  83. package/dist/domain/messaging/push-receive-deliveries.js +70 -0
  84. package/dist/domain/messaging/push-receive-deliveries.js.map +1 -0
  85. package/dist/domain/messaging/receive-deliveries.d.ts +39 -6
  86. package/dist/domain/messaging/receive-deliveries.js +80 -50
  87. package/dist/domain/messaging/receive-deliveries.js.map +1 -1
  88. package/dist/domain/messaging/report-handled.d.ts +22 -0
  89. package/dist/domain/messaging/report-handled.js +13 -0
  90. package/dist/domain/messaging/report-handled.js.map +1 -0
  91. package/dist/domain/messaging/report-not-handled.d.ts +22 -0
  92. package/dist/domain/messaging/report-not-handled.js +13 -0
  93. package/dist/domain/messaging/report-not-handled.js.map +1 -0
  94. package/dist/domain/messaging/report-turn-end.d.ts +29 -0
  95. package/dist/domain/messaging/report-turn-end.js +36 -0
  96. package/dist/domain/messaging/report-turn-end.js.map +1 -0
  97. package/dist/domain/messaging/resend-delivery.d.ts +1 -1
  98. package/dist/domain/messaging/resend-delivery.js +1 -1
  99. package/dist/domain/messaging/tell-overdue-deliveries.d.ts +25 -0
  100. package/dist/domain/messaging/tell-overdue-deliveries.js +30 -0
  101. package/dist/domain/messaging/tell-overdue-deliveries.js.map +1 -0
  102. package/dist/domain/registry/crew-request.d.ts +12 -6
  103. package/dist/domain/registry/crew-request.js +21 -3
  104. package/dist/domain/registry/crew-request.js.map +1 -1
  105. package/dist/domain/registry/installation-fleet.d.ts +3 -2
  106. package/dist/domain/registry/installation-fleet.js.map +1 -1
  107. package/dist/domain/registry/leases.d.ts +26 -0
  108. package/dist/domain/registry/leases.js +26 -1
  109. package/dist/domain/registry/leases.js.map +1 -1
  110. package/dist/domain/registry/ping-status.d.ts +2 -2
  111. package/dist/domain/registry/ping-status.js +7 -4
  112. package/dist/domain/registry/ping-status.js.map +1 -1
  113. package/dist/domain/registry/ports.d.ts +40 -0
  114. package/dist/domain/registry/public.d.ts +2 -2
  115. package/dist/domain/registry/public.js +1 -1
  116. package/dist/domain/registry/public.js.map +1 -1
  117. package/dist/domain/registry/report-turn.d.ts +28 -0
  118. package/dist/domain/registry/report-turn.js +28 -0
  119. package/dist/domain/registry/report-turn.js.map +1 -0
  120. package/dist/domain/registry/request-crew.d.ts +6 -2
  121. package/dist/domain/registry/request-crew.js +14 -3
  122. package/dist/domain/registry/request-crew.js.map +1 -1
  123. package/dist/domain/registry/turn.d.ts +25 -0
  124. package/dist/domain/registry/turn.js +30 -0
  125. package/dist/domain/registry/turn.js.map +1 -0
  126. package/dist/domain/shared/delivery-way.d.ts +83 -0
  127. package/dist/domain/shared/delivery-way.js +89 -0
  128. package/dist/domain/shared/delivery-way.js.map +1 -0
  129. package/dist/domain/shared/errors.d.ts +1 -1
  130. package/dist/domain/shared/errors.js.map +1 -1
  131. package/dist/domain/shared/history.d.ts +116 -19
  132. package/dist/domain/shared/history.js +1 -1
  133. package/dist/domain/shared/history.js.map +1 -1
  134. package/dist/domain/shared/read-message.d.ts +7 -3
  135. package/dist/domain/shared/read-message.js +7 -4
  136. package/dist/domain/shared/read-message.js.map +1 -1
  137. package/dist/domain/shared/read-needs-attention.d.ts +5 -5
  138. package/dist/domain/shared/read-needs-attention.js +4 -4
  139. package/dist/domain/shared/read-needs-attention.js.map +1 -1
  140. package/dist/domain/shared/read-no-ship-can-take.d.ts +13 -0
  141. package/dist/domain/shared/read-no-ship-can-take.js +12 -0
  142. package/dist/domain/shared/read-no-ship-can-take.js.map +1 -0
  143. package/dist/domain/shared/read-overdue.d.ts +13 -0
  144. package/dist/domain/shared/read-overdue.js +12 -0
  145. package/dist/domain/shared/read-overdue.js.map +1 -0
  146. package/dist/domain/shared/read-ship-messages.d.ts +4 -1
  147. package/dist/domain/shared/read-ship-messages.js +6 -1
  148. package/dist/domain/shared/read-ship-messages.js.map +1 -1
  149. package/dist/domain/shared/read-ship-way.d.ts +41 -0
  150. package/dist/domain/shared/read-ship-way.js +39 -0
  151. package/dist/domain/shared/read-ship-way.js.map +1 -0
  152. package/dist/repeating-pass.d.ts +15 -0
  153. package/dist/repeating-pass.js +31 -0
  154. package/dist/repeating-pass.js.map +1 -0
  155. package/dist/wiring.d.ts +19 -0
  156. package/dist/wiring.js +25 -0
  157. package/dist/wiring.js.map +1 -1
  158. package/package.json +2 -2
  159. package/src/adapters/prisma/migrations/20261012190000_delivery_handed/migration.sql +11 -0
  160. package/src/adapters/prisma/migrations/20261012210000_push_receive/migration.sql +7 -0
  161. package/src/adapters/prisma/migrations/20261013090000_handled/migration.sql +6 -0
  162. package/src/adapters/prisma/migrations/20261013100000_turn/migration.sql +6 -0
  163. package/src/adapters/prisma/migrations/20261013120000_overdue/migration.sql +28 -0
  164. package/src/adapters/prisma/migrations/20261013140000_delivery_state_index/migration.sql +4 -0
  165. package/src/adapters/prisma/schema.prisma +69 -6
@@ -0,0 +1,36 @@
1
+ import { holdLease } from '../registry/public.js';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { recordEvent } from '../shared/events.js';
4
+ import { ok } from '../shared/result.js';
5
+ import { endTurn } from './delivery.js';
6
+ /**
7
+ * The unit of work of handled and not handled, which differ only in how the
8
+ * turn ended: hold the crew's lease, so a release waits for it and an ended
9
+ * lease is refused; lock the delivery, so two reports take turns; apply the
10
+ * report and write its event.
11
+ */
12
+ export async function reportTurnEnd(deps, report) {
13
+ const { tx } = deps;
14
+ const { crew, deliveryId, end } = report;
15
+ const held = await holdLease(tx, crew);
16
+ if (!held.isOk) {
17
+ return held;
18
+ }
19
+ const delivery = await tx.deliveries.findForUpdate(crew.fleetId, deliveryId);
20
+ if (!delivery) {
21
+ return refuse('DELIVERY_NOT_FOUND', `Delivery ${deliveryId} does not exist`);
22
+ }
23
+ const ended = endTurn(delivery, { crew, end, at: deps.clock.now() });
24
+ if (!ended.isOk) {
25
+ return ended;
26
+ }
27
+ const { delivery: changed, events } = ended.value;
28
+ if (events.length > 0) {
29
+ await tx.deliveries.update(changed);
30
+ }
31
+ for (const event of events) {
32
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
33
+ }
34
+ return ok(undefined);
35
+ }
36
+ //# sourceMappingURL=report-turn-end.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-turn-end.js","sourceRoot":"","sources":["../../../src/domain/messaging/report-turn-end.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAqC,MAAM,uBAAuB,CAAC;AAGrF,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAqC,MAAM,eAAe,CAAC;AAU3E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAA6D,EAC7D,MAA4D;IAE5D,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,oBAAoB,EAAE,YAAY,UAAU,iBAAiB,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;AACvB,CAAC"}
@@ -25,7 +25,7 @@ export type ResendDelivery = (caller: Caller, input: {
25
25
  messageId: MessageId;
26
26
  }, ResendDeliveryRefusal>>;
27
27
  /**
28
- * Use case: the operator resends an undeliverable delivery from Needs
28
+ * Use case: the operator resends an undeliverable or not handled delivery from Needs
29
29
  * attention (docs/blueprint.md, "DeliveryUndeliverable"). Its scope
30
30
  * (fleet:manage) is checked before this runs. A resend is a retry of the same
31
31
  * delivery: a new message with the original's sender, selector, payload,
@@ -16,7 +16,7 @@ function resendKey(deliveryId) {
16
16
  return `resend-${deliveryId}`;
17
17
  }
18
18
  /**
19
- * Use case: the operator resends an undeliverable delivery from Needs
19
+ * Use case: the operator resends an undeliverable or not handled delivery from Needs
20
20
  * attention (docs/blueprint.md, "DeliveryUndeliverable"). Its scope
21
21
  * (fleet:manage) is checked before this runs. A resend is a retry of the same
22
22
  * delivery: a new message with the original's sender, selector, payload,
@@ -0,0 +1,25 @@
1
+ import type { IdGenerator } from '@aeolus-fleet/common';
2
+ import type { FleetRepository } from '../registry/public.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type EventLog } from '../shared/events.js';
5
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
6
+ import type { OverdueDeliveryRepository, PushedCrews } from './ports.js';
7
+ export interface TellOverdueTx {
8
+ overdueDeliveries: OverdueDeliveryRepository;
9
+ events: EventLog;
10
+ }
11
+ export type TellOverdueDeliveries = () => Promise<void>;
12
+ /**
13
+ * Use case: one pass of the 10 and 60 minute clocks (#586, decision 0040),
14
+ * run by core, never through the API. For every fleet, each open pushed
15
+ * lease's oldest delivery whose clock ran out is told to argo: stored once
16
+ * per lease and delivery with DeliveryOverdue, in one unit of work. What is
17
+ * stored outlives the process, so a pass after a restart tells nothing again.
18
+ */
19
+ export declare function createTellOverdueDeliveries(deps: {
20
+ fleets: Pick<FleetRepository, 'list'>;
21
+ pushedCrews: PushedCrews;
22
+ uow: UnitOfWork<TellOverdueTx>;
23
+ clock: Clock;
24
+ ids: IdGenerator;
25
+ }): TellOverdueDeliveries;
@@ -0,0 +1,30 @@
1
+ import { recordEvent } from '../shared/events.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { overdueDelivery, overdueEvent } from './overdue.js';
4
+ /**
5
+ * Use case: one pass of the 10 and 60 minute clocks (#586, decision 0040),
6
+ * run by core, never through the API. For every fleet, each open pushed
7
+ * lease's oldest delivery whose clock ran out is told to argo: stored once
8
+ * per lease and delivery with DeliveryOverdue, in one unit of work. What is
9
+ * stored outlives the process, so a pass after a restart tells nothing again.
10
+ */
11
+ export function createTellOverdueDeliveries(deps) {
12
+ return async () => {
13
+ for (const fleet of await deps.fleets.list()) {
14
+ for (const crew of await deps.pushedCrews.waiting(fleet.id)) {
15
+ const now = deps.clock.now();
16
+ const overdue = overdueDelivery(crew, now);
17
+ if (!overdue) {
18
+ continue;
19
+ }
20
+ await deps.uow.run(async (tx) => {
21
+ if (await tx.overdueDeliveries.tell(overdue, now)) {
22
+ await recordEvent({ events: tx.events, ids: deps.ids }, overdueEvent(overdue, now));
23
+ }
24
+ return ok(undefined);
25
+ });
26
+ }
27
+ }
28
+ };
29
+ }
30
+ //# sourceMappingURL=tell-overdue-deliveries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tell-overdue-deliveries.js","sourceRoot":"","sources":["../../../src/domain/messaging/tell-overdue-deliveries.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAU7D;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAM3C;IACC,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC9B,IAAI,MAAM,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;wBAClD,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtF,CAAC;oBACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type CrewStatus, type FleetId, type Scope, type ShipId } from '@aeolus-fleet/common';
1
+ import { type CrewStatus, type FleetId, type LabelValueId, type Scope, type ShipId } from '@aeolus-fleet/common';
2
2
  import { type Caller } from '../shared/caller.js';
3
3
  import { type DomainError } from '../shared/errors.js';
4
4
  import type { Actor, NewEvent } from '../shared/events.js';
@@ -8,8 +8,8 @@ import { type CrewRequestShipRefusal, type Ship } from './ship.js';
8
8
  /**
9
9
  * A standing request that a ship be kept crewed (docs/blueprint.md, "Crew
10
10
  * request"; decision 0029): at most one per ship, in three parts with one
11
- * writer each. The settings, which the server stores without meaning, by a
12
- * requester with fleet:manage; the assignment, the trierarch ship that crews
11
+ * writer each. The settings, crew settings (decision 0027) the server checks but
12
+ * never acts on, by a requester with fleet:manage; the assignment, the trierarch ship that crews
13
13
  * it, by a ship with crew:assign; the status, by the assigned trierarch.
14
14
  * Removing an assigned request marks it releasing; it goes once its
15
15
  * trierarch confirms.
@@ -47,18 +47,22 @@ export interface GiveBack {
47
47
  type NotFound = DomainError<'CREW_REQUEST_NOT_FOUND'>;
48
48
  type Releasing = DomainError<'CREW_REQUEST_RELEASING'>;
49
49
  type NotTheCallers = DomainError<'CREW_REQUEST_NOT_ASSIGNED_TO_CALLER'>;
50
- export type RequestCrewRefusal = CrewRequestShipRefusal | Releasing | DomainError<'CREW_REQUEST_SETTINGS_TOO_LARGE'>;
50
+ export type RequestCrewRefusal = CrewRequestShipRefusal | Releasing | DomainError<'CREW_REQUEST_SETTINGS_TOO_LARGE'> | DomainError<'CREW_REQUEST_SETTINGS_INVALID'>;
51
51
  /**
52
52
  * A requester asks that the ship be kept crewed, with these settings: the
53
53
  * request it holds now, replacing the settings of any it held and keeping its
54
54
  * assignment and status, its crew not final until the new settings run, and
55
55
  * CrewRequested with the settings version, never
56
56
  * the settings. Never argo, the viewer ship or a retired ship; settings of at
57
- * most 16 KB; never while the request is releasing.
57
+ * most 16 KB that are crew settings (decision 0027), as placement reads
58
+ * them, each machine label one of the fleet's label values (#811), so a
59
+ * request never waits for a machine no label lets match; never while the
60
+ * request is releasing.
58
61
  */
59
- export declare function requestCrew({ ship, current }: {
62
+ export declare function requestCrew({ ship, current, labelValues }: {
60
63
  ship: Ship;
61
64
  current: CrewRequest | undefined;
65
+ labelValues: ReadonlySet<LabelValueId>;
62
66
  }, input: {
63
67
  settings: JsonObject;
64
68
  at: Date;
@@ -67,6 +71,8 @@ export declare function requestCrew({ ship, current }: {
67
71
  request: CrewRequest;
68
72
  events: NewEvent[];
69
73
  }, RequestCrewRefusal>;
74
+ /** The machine labels the settings name, to look up among the fleet's label values; none when they are not crew settings. */
75
+ export declare function machineLabelsOf(settings: JsonObject): readonly LabelValueId[];
70
76
  /**
71
77
  * A requester removes the ship's crew request. Unassigned, it goes at once,
72
78
  * with CrewRequestRemoved. Assigned, it is marked releasing, with
@@ -1,4 +1,4 @@
1
- import { CREW_REQUEST_REASON_MAX_LENGTH, CREW_REQUEST_SETTINGS_MAX_BYTES, isOneLine, crewRequestSettingsBytes, } from '@aeolus-fleet/common';
1
+ import { CREW_REQUEST_REASON_MAX_LENGTH, CREW_REQUEST_SETTINGS_MAX_BYTES, isOneLine, readCrewSettings, crewRequestSettingsBytes, } from '@aeolus-fleet/common';
2
2
  import { hasScope } from '../shared/caller.js';
3
3
  import { refuse } from '../shared/errors.js';
4
4
  import { ok } from '../shared/result.js';
@@ -18,9 +18,12 @@ function event(ship, change) {
18
18
  * assignment and status, its crew not final until the new settings run, and
19
19
  * CrewRequested with the settings version, never
20
20
  * the settings. Never argo, the viewer ship or a retired ship; settings of at
21
- * most 16 KB; never while the request is releasing.
21
+ * most 16 KB that are crew settings (decision 0027), as placement reads
22
+ * them, each machine label one of the fleet's label values (#811), so a
23
+ * request never waits for a machine no label lets match; never while the
24
+ * request is releasing.
22
25
  */
23
- export function requestCrew({ ship, current }, input) {
26
+ export function requestCrew({ ship, current, labelValues }, input) {
24
27
  const requestable = checkCanBeRequestedCrew(ship);
25
28
  if (!requestable.isOk) {
26
29
  return requestable;
@@ -32,6 +35,16 @@ export function requestCrew({ ship, current }, input) {
32
35
  if (bytes > CREW_REQUEST_SETTINGS_MAX_BYTES) {
33
36
  return refuse('CREW_REQUEST_SETTINGS_TOO_LARGE', `settings is ${String(bytes)} bytes, the limit is ${String(CREW_REQUEST_SETTINGS_MAX_BYTES)} (decision 0029)`);
34
37
  }
38
+ // Read as placement reads them, so a request is never stored that no trierarch could take (#809).
39
+ const read = readCrewSettings(input.settings);
40
+ if ('refusal' in read) {
41
+ return refuse('CREW_REQUEST_SETTINGS_INVALID', read.refusal.reason);
42
+ }
43
+ for (const [index, valueId] of (read.settings.machineLabels ?? []).entries()) {
44
+ if (!labelValues.has(valueId)) {
45
+ return refuse('CREW_REQUEST_SETTINGS_INVALID', `settings are not valid crew settings: machineLabels.${String(index)}: The fleet has no label value ${valueId}`);
46
+ }
47
+ }
35
48
  const request = {
36
49
  fleetId: ship.fleetId,
37
50
  shipId: ship.id,
@@ -50,6 +63,11 @@ export function requestCrew({ ship, current }, input) {
50
63
  };
51
64
  return ok({ request, events: [event(ship, { at: input.at, actor: input.actor, type: 'CrewRequested', details: { settingsVersion: request.settingsVersion } })] });
52
65
  }
66
+ /** The machine labels the settings name, to look up among the fleet's label values; none when they are not crew settings. */
67
+ export function machineLabelsOf(settings) {
68
+ const read = readCrewSettings(settings);
69
+ return 'settings' in read ? (read.settings.machineLabels ?? []) : [];
70
+ }
53
71
  /**
54
72
  * A requester removes the ship's crew request. Unassigned, it goes at once,
55
73
  * with CrewRequestRemoved. Assigned, it is marked releasing, with
@@ -1 +1 @@
1
- {"version":3,"file":"crew-request.js","sourceRoot":"","sources":["../../../src/domain/registry/crew-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crew-request.js","sourceRoot":"","sources":["../../../src/domain/registry/crew-request.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  import type { FleetId } from '@aeolus-fleet/common';
2
2
  import { type FleetLimit, type InstallationSettings } from './limits.js';
3
- import type { InstallationFleetFacts, InstallationFleetWindow } from './ports.js';
3
+ import type { FleetHealth, InstallationFleetFacts, InstallationFleetWindow } from './ports.js';
4
4
  /** How far back an installation's fleet counts its messages, and over how many UTC days. */
5
5
  export declare const MESSAGE_WINDOW_DAYS = 7;
6
6
  export declare const MESSAGE_WINDOW_MS: number;
7
7
  /**
8
8
  * A fleet as the installation describes it (docs/blueprint.md,
9
9
  * "Installation"): its facts and measures, its messages today and per UTC day
10
- * of the last 7 days, today last, and the limits that apply to it.
10
+ * of the last 7 days, today last, the limits that apply to it and its health.
11
11
  */
12
12
  export interface InstallationFleet {
13
13
  fleetId: FleetId;
@@ -27,6 +27,7 @@ export interface InstallationFleet {
27
27
  ships: FleetLimit;
28
28
  dailyMessages: FleetLimit;
29
29
  };
30
+ health: FleetHealth;
30
31
  }
31
32
  /** What a read at `now` counts over: the last 7 times 24 hours, and the last 7 UTC days from the first one's start. */
32
33
  export declare function messageWindow(now: Date): InstallationFleetWindow;
@@ -1 +1 @@
1
- {"version":3,"file":"installation-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/installation-fleet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA8C,MAAM,aAAa,CAAC;AAGxF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAqB9D,gGAAgG;AAChG,SAAS,OAAO,CAAC,GAAS;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,mBAAmB,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAClK,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,aAAa,CAAC,GAAS;IACrC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,QAAQ,gBAAgB,CAAC,EAAE,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA6B,EAAE,IAAuD;IACtH,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1I,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACrI,OAAO,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;AAC3J,CAAC"}
1
+ {"version":3,"file":"installation-fleet.js","sourceRoot":"","sources":["../../../src/domain/registry/installation-fleet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAA8C,MAAM,aAAa,CAAC;AAGxF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAsB9D,gGAAgG;AAChG,SAAS,OAAO,CAAC,GAAS;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,mBAAmB,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAClK,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,aAAa,CAAC,GAAS;IACrC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,QAAQ,gBAAgB,CAAC,EAAE,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAA6B,EAAE,IAAuD;IACtH,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1I,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACrI,OAAO,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC;AAC3J,CAAC"}
@@ -64,3 +64,29 @@ export declare function holdLease(tx: HoldLeaseTx, crew: {
64
64
  fleetId: FleetId;
65
65
  leaseId: LeaseId;
66
66
  }): Promise<Result<Ship, LeaseEnded>>;
67
+ /**
68
+ * Marks the crew's lease pushed (decision 0040): from its first push receive
69
+ * until it ends, the computer side takes its deliveries and the agent's plain
70
+ * receive answers nothing. The first mark writes LeasePushed, caused by the
71
+ * crew's ship; a lease already pushed, or one that has ended, stays as it
72
+ * was. Call it first in the unit of work, before the lease is held.
73
+ */
74
+ export declare function markLeasePushed(deps: {
75
+ tx: {
76
+ leases: Pick<LeaseRepository, 'markPushed'>;
77
+ events: EventLog;
78
+ };
79
+ ids: IdGenerator;
80
+ }, crew: {
81
+ fleetId: FleetId;
82
+ shipId: ShipId;
83
+ leaseId: LeaseId;
84
+ at: Date;
85
+ }): Promise<void>;
86
+ /** Whether the crew's lease is pushed: a push receive has marked it. */
87
+ export declare function isLeasePushed(tx: {
88
+ leases: Pick<LeaseRepository, 'isPushed'>;
89
+ }, crew: {
90
+ fleetId: FleetId;
91
+ leaseId: LeaseId;
92
+ }): Promise<boolean>;
@@ -1,5 +1,5 @@
1
1
  import { refuse } from '../shared/errors.js';
2
- import { recordEvent } from '../shared/events.js';
2
+ import { recordEvent, shipActor } from '../shared/events.js';
3
3
  import { ok } from '../shared/result.js';
4
4
  import { refuseEndedLease } from './lease.js';
5
5
  /**
@@ -77,4 +77,29 @@ export async function holdLease(tx, crew) {
77
77
  const ship = lease && (await tx.ships.find(crew.fleetId, lease.shipId));
78
78
  return ship ? ok(ship) : refuseEndedLease();
79
79
  }
80
+ /**
81
+ * Marks the crew's lease pushed (decision 0040): from its first push receive
82
+ * until it ends, the computer side takes its deliveries and the agent's plain
83
+ * receive answers nothing. The first mark writes LeasePushed, caused by the
84
+ * crew's ship; a lease already pushed, or one that has ended, stays as it
85
+ * was. Call it first in the unit of work, before the lease is held.
86
+ */
87
+ export async function markLeasePushed(deps, crew) {
88
+ const { tx, ids } = deps;
89
+ const { fleetId, shipId, leaseId, at } = crew;
90
+ if (await tx.leases.markPushed({ fleetId, leaseId, at })) {
91
+ await recordEvent({ events: tx.events, ids }, {
92
+ fleetId,
93
+ type: 'LeasePushed',
94
+ occurredAt: at,
95
+ actor: shipActor(shipId),
96
+ shipId,
97
+ details: { leaseId },
98
+ });
99
+ }
100
+ }
101
+ /** Whether the crew's lease is pushed: a push receive has marked it. */
102
+ export async function isLeasePushed(tx, crew) {
103
+ return tx.leases.isPushed(crew.fleetId, crew.leaseId);
104
+ }
80
105
  //# sourceMappingURL=leases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"leases.js","sourceRoot":"","sources":["../../../src/domain/registry/leases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"leases.js","sourceRoot":"","sources":["../../../src/domain/registry/leases.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,SAAS,EAA6B,MAAM,qBAAqB,CAAC;AAExF,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAuD,MAAM,YAAY,CAAC;AAkBnG;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAe,EACf,KAAuG;IAEvG,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IACvD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnI,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,OAAO;QACP,IAAI,EAAE,aAAa;QACnB,UAAU,EAAE,EAAE;QACd,KAAK;QACL,MAAM;QACN,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;KACxG,CAAC,CAAC;IACH,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAe,EACf,KAA6F;IAE7F,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEtD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC1E,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,GAAG,QAAQ;QACX,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,CAAC,MAAM,EAAE;KAClE,CAAC,CAAC;IACH,KAAK,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,CAAC;QACtE,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC5C,GAAG,QAAQ;YACX,IAAI,EAAE,kBAAkB;YACxB,SAAS;YACT,UAAU;YACV,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SAC/B,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAe,EACf,IAA4C;IAE5C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAiG,EACjG,IAAsE;IAEtE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC5C,OAAO;YACP,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC;YACxB,MAAM;YACN,OAAO,EAAE,EAAE,OAAO,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAiD,EACjD,IAA4C;IAE5C,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC"}
@@ -9,8 +9,8 @@ export interface PingStatus {
9
9
  }
10
10
  /**
11
11
  * The status of a ship's last ping: waiting while its delivery is pending or
12
- * in flight, answered once pong acknowledged it, received when a plain ack
13
- * did, and undeliverable once it was handed out again and again and never
12
+ * in flight, answered once pong acknowledged it, acknowledged when a plain ack
13
+ * did, and so on after its turn ended, handled or not, and undeliverable once it was handed out again and again and never
14
14
  * acknowledged (it is in Needs attention too). A ping the operator dismissed,
15
15
  * or one abandoned with a retired ship, shows none.
16
16
  */
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The status of a ship's last ping: waiting while its delivery is pending or
3
- * in flight, answered once pong acknowledged it, received when a plain ack
4
- * did, and undeliverable once it was handed out again and again and never
3
+ * in flight, answered once pong acknowledged it, acknowledged when a plain ack
4
+ * did, and so on after its turn ended, handled or not, and undeliverable once it was handed out again and again and never
5
5
  * acknowledged (it is in Needs attention too). A ping the operator dismissed,
6
6
  * or one abandoned with a retired ship, shows none.
7
7
  */
@@ -12,11 +12,14 @@ export function pingStatusOf(lastPing) {
12
12
  const { sentAt, deliveryState, answeredWithPongAt } = lastPing;
13
13
  switch (deliveryState) {
14
14
  case 'pending':
15
- case 'delivered':
15
+ case 'received':
16
+ case 'handed':
16
17
  return { state: 'waiting', sentAt, answeredAt: null };
17
18
  case 'acknowledged':
19
+ case 'handled':
20
+ case 'notHandled':
18
21
  return answeredWithPongAt === null
19
- ? { state: 'received', sentAt, answeredAt: null }
22
+ ? { state: 'acknowledged', sentAt, answeredAt: null }
20
23
  : { state: 'answered', sentAt, answeredAt: answeredWithPongAt };
21
24
  case 'undeliverable':
22
25
  return { state: 'undeliverable', sentAt, answeredAt: null };
@@ -1 +1 @@
1
- {"version":3,"file":"ping-status.js","sourceRoot":"","sources":["../../../src/domain/registry/ping-status.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAA+B;IAC1D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,QAAQ,CAAC;IAC/D,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxD,KAAK,cAAc;YACjB,OAAO,kBAAkB,KAAK,IAAI;gBAChC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;gBACjD,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACpE,KAAK,eAAe;YAClB,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9D,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ping-status.js","sourceRoot":"","sources":["../../../src/domain/registry/ping-status.ts"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,QAA+B;IAC1D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,QAAQ,CAAC;IAC/D,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxD,KAAK,cAAc,CAAC;QACpB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY;YACf,OAAO,kBAAkB,KAAK,IAAI;gBAChC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;gBACrD,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACpE,KAAK,eAAe;YAClB,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC9D,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -12,6 +12,7 @@ import type { NetworkSettings } from './network-settings.js';
12
12
  import type { ReachRefusal } from './reach-refusal.js';
13
13
  import type { Ship } from './ship.js';
14
14
  import type { ShipReport } from './ship-report.js';
15
+ import type { Turn } from './turn.js';
15
16
  /** The crew a report speaks for: its ship and lease, in its fleet. */
16
17
  export interface CrewOfLease {
17
18
  fleetId: FleetId;
@@ -166,6 +167,15 @@ export interface LeaseRepository {
166
167
  leaseId: LeaseId;
167
168
  report: ShipReport;
168
169
  }): Promise<void>;
170
+ /** The open lease's turn, locked until the unit of work ends, so two turn reports take turns; undefined once it has ended. */
171
+ findTurnForUpdate(fleetId: FleetId, leaseId: LeaseId): Promise<{
172
+ turn: Turn | null;
173
+ } | undefined>;
174
+ saveTurn(change: {
175
+ fleetId: FleetId;
176
+ leaseId: LeaseId;
177
+ turn: Turn;
178
+ }): Promise<void>;
169
179
  /**
170
180
  * The lease's report and the last report of the lease its ship held before
171
181
  * it, the one that ended last; undefined once this lease has ended.
@@ -180,6 +190,18 @@ export interface LeaseRepository {
180
190
  leaseId: LeaseId;
181
191
  endedAt: Date;
182
192
  }): Promise<Lease | undefined>;
193
+ /**
194
+ * Marks the open lease pushed from `at`, keeping an earlier mark, before
195
+ * anything else of the lease is locked: two marks take turns and never
196
+ * deadlock with the units of work holding it. True when this call marked it.
197
+ */
198
+ markPushed(pushed: {
199
+ fleetId: FleetId;
200
+ leaseId: LeaseId;
201
+ at: Date;
202
+ }): Promise<boolean>;
203
+ /** Whether a push receive marked the lease pushed. */
204
+ isPushed(fleetId: FleetId, leaseId: LeaseId): Promise<boolean>;
183
205
  }
184
206
  /**
185
207
  * Outbound port: crew requests, at most one per ship, always within one
@@ -396,6 +418,24 @@ export interface InstallationFleetFacts {
396
418
  }[];
397
419
  /** How its limits are set. */
398
420
  limitSettings: FleetLimitSettings;
421
+ /** Whether its deliveries reach their ships. */
422
+ health: FleetHealth;
423
+ }
424
+ /**
425
+ * A fleet's health as the installation reads it (#304): where its deliveries
426
+ * wait, read from their states and times, never their payloads.
427
+ */
428
+ export interface FleetHealth {
429
+ /** When its oldest pending delivery was sent; null when none is pending. */
430
+ oldestPendingAt: Date | null;
431
+ /** Since when its oldest delivery in flight (received or handed) is in its state, as the overdue clocks read it; null when none is. */
432
+ oldestInFlightAt: Date | null;
433
+ /** Its pending deliveries to a type no active ship can take: none of the type, or none of the reachable ones (decision 0034). */
434
+ noShipCanTake: number;
435
+ /** Its undeliverable and not handled deliveries: what Needs attention lists for Resend or Dismiss. */
436
+ needsAttention: number;
437
+ /** The overdue deliveries argo was told of that still stand: what Needs attention shows as overdue. */
438
+ overdue: number;
399
439
  }
400
440
  /** What a read of the installation's fleets counts messages over: since a moment, and per UTC day from a first day. */
401
441
  export interface InstallationFleetWindow {
@@ -1,6 +1,6 @@
1
1
  export { location, refuseEndedLease, type Lease, type LeaseEnded, type LeaseEndReason, type Location } from './lease.js';
2
- export { endLease, holdLease, takeOverOperatorLease, type HoldLeaseTx, type LeaseTx } from './leases.js';
3
- export type { InFlightDeliveries, LeaseRepository, ShipRepository } from './ports.js';
2
+ export { endLease, holdLease, isLeasePushed, markLeasePushed, takeOverOperatorLease, type HoldLeaseTx, type LeaseTx } from './leases.js';
3
+ export type { FleetRepository, InFlightDeliveries, LeaseRepository, ShipRepository } from './ports.js';
4
4
  export { findPingableShip, type PingableShipTx, type UnpingableShip } from './pingable-ship.js';
5
5
  export { checkReach, type CheckReachTx, type NotReachable } from './check-reach.js';
6
6
  export { resolveSelector, type ResolveSelectorTx, type UnresolvableSelector } from './resolve-selector.js';
@@ -1,7 +1,7 @@
1
1
  // Registry's published surface: what other contexts may use. Use cases are not
2
2
  // part of it; adapters import them from their own modules.
3
3
  export { location, refuseEndedLease } from './lease.js';
4
- export { endLease, holdLease, takeOverOperatorLease } from './leases.js';
4
+ export { endLease, holdLease, isLeasePushed, markLeasePushed, takeOverOperatorLease } from './leases.js';
5
5
  export { findPingableShip } from './pingable-ship.js';
6
6
  export { checkReach } from './check-reach.js';
7
7
  export { resolveSelector } from './resolve-selector.js';
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/domain/registry/public.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAmE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAkC,MAAM,aAAa,CAAC;AAEzG,OAAO,EAAE,gBAAgB,EAA4C,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAwC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAqD,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAgC,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAa,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/domain/registry/public.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2DAA2D;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAmE,MAAM,YAAY,CAAC;AACzH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAqB,EAAkC,MAAM,aAAa,CAAC;AAEzI,OAAO,EAAE,gBAAgB,EAA4C,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAwC,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAqD,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAgC,MAAM,YAAY,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAa,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAwB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { IdGenerator, TurnState } from '@aeolus-fleet/common';
2
+ import type { Crew } from '../shared/caller.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import { type EventLog } from '../shared/events.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { UnitOfWork } from '../shared/unit-of-work.js';
7
+ import { type LeaseEnded } from './lease.js';
8
+ import type { LeaseRepository } from './ports.js';
9
+ export interface ReportTurnTx {
10
+ leases: Pick<LeaseRepository, 'findTurnForUpdate' | 'saveTurn'>;
11
+ events: EventLog;
12
+ }
13
+ export type ReportTurn = (crew: Crew, input: {
14
+ turn: TurnState;
15
+ at: Date;
16
+ }) => Promise<Result<undefined, LeaseEnded>>;
17
+ /**
18
+ * Use case: a pushed ship's hooks report its session's turn (`turn`,
19
+ * decision 0040), idle or busy, with the time they saw it. No scope beyond
20
+ * being the crew: it speaks only for its own session. The turn is kept with
21
+ * the crew's lease, locked meanwhile, and TurnReported is written when it
22
+ * changed, in one unit of work. Refused once the lease has ended.
23
+ */
24
+ export declare function createReportTurn(deps: {
25
+ uow: UnitOfWork<ReportTurnTx>;
26
+ clock: Clock;
27
+ ids: IdGenerator;
28
+ }): ReportTurn;
@@ -0,0 +1,28 @@
1
+ import { recordEvent } from '../shared/events.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { refuseEndedLease } from './lease.js';
4
+ import { reportTurn } from './turn.js';
5
+ /**
6
+ * Use case: a pushed ship's hooks report its session's turn (`turn`,
7
+ * decision 0040), idle or busy, with the time they saw it. No scope beyond
8
+ * being the crew: it speaks only for its own session. The turn is kept with
9
+ * the crew's lease, locked meanwhile, and TurnReported is written when it
10
+ * changed, in one unit of work. Refused once the lease has ended.
11
+ */
12
+ export function createReportTurn(deps) {
13
+ return (crew, input) => deps.uow.run(async (tx) => {
14
+ const held = await tx.leases.findTurnForUpdate(crew.fleetId, crew.leaseId);
15
+ if (!held) {
16
+ return refuseEndedLease();
17
+ }
18
+ const { turn, events } = reportTurn(held.turn, { crew, ...input, now: deps.clock.now() });
19
+ if (events.length > 0) {
20
+ await tx.leases.saveTurn({ fleetId: crew.fleetId, leaseId: crew.leaseId, turn });
21
+ }
22
+ for (const event of events) {
23
+ await recordEvent({ events: tx.events, ids: deps.ids }, event);
24
+ }
25
+ return ok(undefined);
26
+ });
27
+ }
28
+ //# sourceMappingURL=report-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-turn.js","sourceRoot":"","sources":["../../../src/domain/registry/report-turn.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAiB,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AASvC;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAuE;IACtG,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAA0C,EAAE;QAChE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,gBAAgB,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -6,11 +6,12 @@ import { type EventLog } from '../shared/events.js';
6
6
  import { type Result } from '../shared/result.js';
7
7
  import type { UnitOfWork } from '../shared/unit-of-work.js';
8
8
  import { type RequestCrewRefusal } from './crew-request.js';
9
- import type { CrewRequestRepository, ShipRepository } from './ports.js';
9
+ import type { CrewRequestRepository, LabelRepository, ShipRepository } from './ports.js';
10
10
  import type { JsonObject } from './report-details.js';
11
11
  export interface RequestCrewTx {
12
12
  ships: Pick<ShipRepository, 'findForUpdate'>;
13
13
  crewRequests: CrewRequestRepository;
14
+ labels: Pick<LabelRepository, 'findByValueForShare'>;
14
15
  events: EventLog;
15
16
  }
16
17
  export type RequestCrew = (caller: Caller, input: {
@@ -23,7 +24,10 @@ export type RequestCrew = (caller: Caller, input: {
23
24
  * Use case: a requester asks that a ship be kept crewed, with these settings,
24
25
  * replacing any request the ship holds. Its scope (fleet:manage) is checked
25
26
  * before this runs. In one unit of work, locking the ship first, as a retire
26
- * does, so a retire and a request never cross: the request and CrewRequested.
27
+ * does, so a retire and a request never cross; then holding the label of
28
+ * each machine label, as an assignment does, so a change of its values waits
29
+ * and the request never names a value it removed: the request and
30
+ * CrewRequested.
27
31
  */
28
32
  export declare function createRequestCrew(deps: {
29
33
  uow: UnitOfWork<RequestCrewTx>;