@satorio/machinery 0.2.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 (341) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/dictionary/all.json +4656 -0
  4. package/dictionary/all.toon +639 -0
  5. package/dictionary/core.json +221 -0
  6. package/dictionary/core.toon +33 -0
  7. package/dictionary/graphql.json +212 -0
  8. package/dictionary/graphql.toon +32 -0
  9. package/dictionary/http.json +113 -0
  10. package/dictionary/http.toon +21 -0
  11. package/dictionary/identifiers.json +266 -0
  12. package/dictionary/identifiers.toon +38 -0
  13. package/dictionary/index.json +96 -0
  14. package/dictionary/index.toon +18 -0
  15. package/dictionary/integration.json +131 -0
  16. package/dictionary/integration.toon +23 -0
  17. package/dictionary/money.json +383 -0
  18. package/dictionary/money.toon +51 -0
  19. package/dictionary/ports.json +392 -0
  20. package/dictionary/ports.toon +52 -0
  21. package/dictionary/postgres.json +473 -0
  22. package/dictionary/postgres.toon +61 -0
  23. package/dictionary/publishing.json +131 -0
  24. package/dictionary/publishing.toon +23 -0
  25. package/dictionary/queue.json +365 -0
  26. package/dictionary/queue.toon +49 -0
  27. package/dictionary/reference/api.mdx +843 -0
  28. package/dictionary/reference/uk/api.mdx +844 -0
  29. package/dictionary/storage.json +194 -0
  30. package/dictionary/storage.toon +30 -0
  31. package/dictionary/testing.json +707 -0
  32. package/dictionary/testing.toon +87 -0
  33. package/dictionary/time.json +311 -0
  34. package/dictionary/time.toon +43 -0
  35. package/dictionary/vitest.json +356 -0
  36. package/dictionary/vitest.toon +48 -0
  37. package/dictionary/workflow.json +185 -0
  38. package/dictionary/workflow.toon +29 -0
  39. package/dist/bin/command.d.ts +45 -0
  40. package/dist/bin/command.js +113 -0
  41. package/dist/bin.d.ts +2 -0
  42. package/dist/bin.js +11 -0
  43. package/dist/core/bigint-json.d.ts +6 -0
  44. package/dist/core/bigint-json.js +6 -0
  45. package/dist/core/closed-set.d.ts +14 -0
  46. package/dist/core/closed-set.js +8 -0
  47. package/dist/core/domain-error.d.ts +8 -0
  48. package/dist/core/domain-error.js +11 -0
  49. package/dist/core/environment.d.ts +124 -0
  50. package/dist/core/environment.js +115 -0
  51. package/dist/core/index.d.ts +13 -0
  52. package/dist/core/index.js +13 -0
  53. package/dist/core/ulid.d.ts +27 -0
  54. package/dist/core/ulid.js +27 -0
  55. package/dist/graphql/builder.d.ts +36 -0
  56. package/dist/graphql/builder.js +35 -0
  57. package/dist/graphql/context.d.ts +36 -0
  58. package/dist/graphql/context.js +69 -0
  59. package/dist/graphql/failure-classification.d.ts +11 -0
  60. package/dist/graphql/failure-classification.js +1 -0
  61. package/dist/graphql/failures.d.ts +62 -0
  62. package/dist/graphql/failures.js +30 -0
  63. package/dist/graphql/graphiql.d.ts +45 -0
  64. package/dist/graphql/graphiql.js +56 -0
  65. package/dist/graphql/index.d.ts +15 -0
  66. package/dist/graphql/index.js +14 -0
  67. package/dist/graphql/layer.d.ts +15 -0
  68. package/dist/graphql/layer.js +23 -0
  69. package/dist/graphql/request-handler.d.ts +26 -0
  70. package/dist/graphql/request-handler.js +33 -0
  71. package/dist/graphql/server.d.ts +19 -0
  72. package/dist/graphql/server.js +16 -0
  73. package/dist/graphql/settings.d.ts +55 -0
  74. package/dist/graphql/settings.js +82 -0
  75. package/dist/http/health.d.ts +70 -0
  76. package/dist/http/health.js +60 -0
  77. package/dist/http/index.d.ts +5 -0
  78. package/dist/http/index.js +5 -0
  79. package/dist/identifiers/client-code.d.ts +37 -0
  80. package/dist/identifiers/client-code.js +41 -0
  81. package/dist/identifiers/creditor-reference.d.ts +38 -0
  82. package/dist/identifiers/creditor-reference.js +32 -0
  83. package/dist/identifiers/damm.d.ts +22 -0
  84. package/dist/identifiers/damm.js +50 -0
  85. package/dist/identifiers/document-number.d.ts +68 -0
  86. package/dist/identifiers/document-number.js +73 -0
  87. package/dist/identifiers/document-numbers.d.ts +27 -0
  88. package/dist/identifiers/document-numbers.js +16 -0
  89. package/dist/identifiers/failures.d.ts +46 -0
  90. package/dist/identifiers/failures.js +48 -0
  91. package/dist/identifiers/index.d.ts +14 -0
  92. package/dist/identifiers/index.js +13 -0
  93. package/dist/identifiers/next-document-number.d.ts +26 -0
  94. package/dist/identifiers/next-document-number.js +31 -0
  95. package/dist/identifiers/ulid.d.ts +28 -0
  96. package/dist/identifiers/ulid.js +71 -0
  97. package/dist/integration/external-http-client.d.ts +22 -0
  98. package/dist/integration/external-http-client.js +74 -0
  99. package/dist/integration/index.d.ts +12 -0
  100. package/dist/integration/index.js +12 -0
  101. package/dist/integration/layer.d.ts +19 -0
  102. package/dist/integration/layer.js +30 -0
  103. package/dist/integration/retry.d.ts +65 -0
  104. package/dist/integration/retry.js +54 -0
  105. package/dist/integration/settings.d.ts +73 -0
  106. package/dist/integration/settings.js +92 -0
  107. package/dist/money/amount.d.ts +60 -0
  108. package/dist/money/amount.js +67 -0
  109. package/dist/money/arithmetic.d.ts +60 -0
  110. package/dist/money/arithmetic.js +73 -0
  111. package/dist/money/currency.d.ts +25 -0
  112. package/dist/money/currency.js +24 -0
  113. package/dist/money/decimal.d.ts +29 -0
  114. package/dist/money/decimal.js +39 -0
  115. package/dist/money/exchange-rate.d.ts +32 -0
  116. package/dist/money/exchange-rate.js +28 -0
  117. package/dist/money/failures.d.ts +86 -0
  118. package/dist/money/failures.js +97 -0
  119. package/dist/money/index.d.ts +15 -0
  120. package/dist/money/index.js +15 -0
  121. package/dist/money/percent.d.ts +35 -0
  122. package/dist/money/percent.js +50 -0
  123. package/dist/money/schema.d.ts +25 -0
  124. package/dist/money/schema.js +41 -0
  125. package/dist/ports/blob-store.d.ts +42 -0
  126. package/dist/ports/blob-store.js +13 -0
  127. package/dist/ports/document-number-counter.d.ts +36 -0
  128. package/dist/ports/document-number-counter.js +12 -0
  129. package/dist/ports/event-publisher.d.ts +29 -0
  130. package/dist/ports/event-publisher.js +13 -0
  131. package/dist/ports/external-http-client.d.ts +60 -0
  132. package/dist/ports/external-http-client.js +25 -0
  133. package/dist/ports/index.d.ts +17 -0
  134. package/dist/ports/index.js +17 -0
  135. package/dist/ports/integration-event-outbox.d.ts +44 -0
  136. package/dist/ports/integration-event-outbox.js +13 -0
  137. package/dist/ports/port-unavailable.d.ts +21 -0
  138. package/dist/ports/port-unavailable.js +30 -0
  139. package/dist/ports/processed-event-registry.d.ts +57 -0
  140. package/dist/ports/processed-event-registry.js +24 -0
  141. package/dist/ports/queue-message-producer.d.ts +26 -0
  142. package/dist/ports/queue-message-producer.js +12 -0
  143. package/dist/ports/queue-message-source.d.ts +39 -0
  144. package/dist/ports/queue-message-source.js +13 -0
  145. package/dist/ports/readiness-probe.d.ts +27 -0
  146. package/dist/ports/readiness-probe.js +13 -0
  147. package/dist/ports/transaction-boundary.d.ts +28 -0
  148. package/dist/ports/transaction-boundary.js +13 -0
  149. package/dist/postgres/client.d.ts +51 -0
  150. package/dist/postgres/client.js +81 -0
  151. package/dist/postgres/document-number-counter.d.ts +14 -0
  152. package/dist/postgres/document-number-counter.js +27 -0
  153. package/dist/postgres/failures.d.ts +28 -0
  154. package/dist/postgres/failures.js +18 -0
  155. package/dist/postgres/index.d.ts +18 -0
  156. package/dist/postgres/index.js +18 -0
  157. package/dist/postgres/integration-event-outbox.d.ts +15 -0
  158. package/dist/postgres/integration-event-outbox.js +60 -0
  159. package/dist/postgres/jsonb-value.d.ts +10 -0
  160. package/dist/postgres/jsonb-value.js +9 -0
  161. package/dist/postgres/layer.d.ts +57 -0
  162. package/dist/postgres/layer.js +72 -0
  163. package/dist/postgres/migrations/advisory-lock.d.ts +47 -0
  164. package/dist/postgres/migrations/advisory-lock.js +59 -0
  165. package/dist/postgres/migrations/runner.d.ts +56 -0
  166. package/dist/postgres/migrations/runner.js +69 -0
  167. package/dist/postgres/migrations/sql-file-loader.d.ts +59 -0
  168. package/dist/postgres/migrations/sql-file-loader.js +99 -0
  169. package/dist/postgres/processed-event-registry.d.ts +13 -0
  170. package/dist/postgres/processed-event-registry.js +44 -0
  171. package/dist/postgres/readiness-probe.d.ts +27 -0
  172. package/dist/postgres/readiness-probe.js +33 -0
  173. package/dist/postgres/settings.d.ts +134 -0
  174. package/dist/postgres/settings.js +210 -0
  175. package/dist/postgres/sql/0001_processed_event.sql +4 -0
  176. package/dist/postgres/sql/0002_integration_event_outbox.sql +13 -0
  177. package/dist/postgres/sql/0003_document_number_counter.sql +6 -0
  178. package/dist/postgres/sql-failure.d.ts +19 -0
  179. package/dist/postgres/sql-failure.js +22 -0
  180. package/dist/postgres/store-failure.d.ts +17 -0
  181. package/dist/postgres/store-failure.js +16 -0
  182. package/dist/postgres/transaction-boundary.d.ts +13 -0
  183. package/dist/postgres/transaction-boundary.js +21 -0
  184. package/dist/publishing/event-publisher.sns.d.ts +66 -0
  185. package/dist/publishing/event-publisher.sns.js +75 -0
  186. package/dist/publishing/event-publisher.stdout.d.ts +15 -0
  187. package/dist/publishing/event-publisher.stdout.js +24 -0
  188. package/dist/publishing/index.d.ts +10 -0
  189. package/dist/publishing/index.js +10 -0
  190. package/dist/publishing/layer.d.ts +25 -0
  191. package/dist/publishing/layer.js +39 -0
  192. package/dist/publishing/settings.d.ts +60 -0
  193. package/dist/publishing/settings.js +85 -0
  194. package/dist/queue/consumer.d.ts +91 -0
  195. package/dist/queue/consumer.js +92 -0
  196. package/dist/queue/envelope.d.ts +39 -0
  197. package/dist/queue/envelope.js +39 -0
  198. package/dist/queue/failures.d.ts +33 -0
  199. package/dist/queue/failures.js +15 -0
  200. package/dist/queue/index.d.ts +14 -0
  201. package/dist/queue/index.js +14 -0
  202. package/dist/queue/layer.d.ts +33 -0
  203. package/dist/queue/layer.js +58 -0
  204. package/dist/queue/message-codec.d.ts +43 -0
  205. package/dist/queue/message-codec.js +33 -0
  206. package/dist/queue/queue-message-producer.d.ts +61 -0
  207. package/dist/queue/queue-message-producer.js +52 -0
  208. package/dist/queue/queue-message-source.d.ts +93 -0
  209. package/dist/queue/queue-message-source.js +86 -0
  210. package/dist/queue/readiness.d.ts +78 -0
  211. package/dist/queue/readiness.js +86 -0
  212. package/dist/queue/settings.d.ts +106 -0
  213. package/dist/queue/settings.js +160 -0
  214. package/dist/storage/blob-store.d.ts +84 -0
  215. package/dist/storage/blob-store.js +109 -0
  216. package/dist/storage/index.d.ts +9 -0
  217. package/dist/storage/index.js +9 -0
  218. package/dist/storage/layer.d.ts +17 -0
  219. package/dist/storage/layer.js +30 -0
  220. package/dist/storage/settings.d.ts +48 -0
  221. package/dist/storage/settings.js +65 -0
  222. package/dist/testing/blob-store.d.ts +27 -0
  223. package/dist/testing/blob-store.js +45 -0
  224. package/dist/testing/clock.d.ts +29 -0
  225. package/dist/testing/clock.js +41 -0
  226. package/dist/testing/dna-perturbator/attention.d.ts +55 -0
  227. package/dist/testing/dna-perturbator/attention.js +49 -0
  228. package/dist/testing/dna-perturbator/chains.d.ts +31 -0
  229. package/dist/testing/dna-perturbator/chains.js +53 -0
  230. package/dist/testing/dna-perturbator/report.d.ts +12 -0
  231. package/dist/testing/dna-perturbator/report.js +22 -0
  232. package/dist/testing/dna-perturbator/verdict.d.ts +26 -0
  233. package/dist/testing/dna-perturbator/verdict.js +28 -0
  234. package/dist/testing/dna-perturbator.d.ts +48 -0
  235. package/dist/testing/dna-perturbator.js +145 -0
  236. package/dist/testing/document-number-counter.d.ts +29 -0
  237. package/dist/testing/document-number-counter.js +39 -0
  238. package/dist/testing/event-publisher.d.ts +28 -0
  239. package/dist/testing/event-publisher.js +33 -0
  240. package/dist/testing/external-http-client.d.ts +29 -0
  241. package/dist/testing/external-http-client.js +49 -0
  242. package/dist/testing/index.d.ts +24 -0
  243. package/dist/testing/index.js +24 -0
  244. package/dist/testing/integration-event-outbox.d.ts +37 -0
  245. package/dist/testing/integration-event-outbox.js +67 -0
  246. package/dist/testing/mutation-settings.d.ts +71 -0
  247. package/dist/testing/mutation-settings.js +57 -0
  248. package/dist/testing/postgres-rows.d.ts +12 -0
  249. package/dist/testing/postgres-rows.js +19 -0
  250. package/dist/testing/processed-event-registry.d.ts +25 -0
  251. package/dist/testing/processed-event-registry.js +39 -0
  252. package/dist/testing/queue-message-producer.d.ts +27 -0
  253. package/dist/testing/queue-message-producer.js +41 -0
  254. package/dist/testing/queue-message-source.d.ts +54 -0
  255. package/dist/testing/queue-message-source.js +71 -0
  256. package/dist/testing/quiet-reporter.d.ts +86 -0
  257. package/dist/testing/quiet-reporter.js +81 -0
  258. package/dist/testing/readiness-probe.d.ts +27 -0
  259. package/dist/testing/readiness-probe.js +33 -0
  260. package/dist/testing/scenario.d.ts +94 -0
  261. package/dist/testing/scenario.js +81 -0
  262. package/dist/testing/transaction-boundary.d.ts +30 -0
  263. package/dist/testing/transaction-boundary.js +36 -0
  264. package/dist/testing/typed-failure.d.ts +8 -0
  265. package/dist/testing/typed-failure.js +15 -0
  266. package/dist/time/calendar-day.d.ts +83 -0
  267. package/dist/time/calendar-day.js +112 -0
  268. package/dist/time/failures.d.ts +51 -0
  269. package/dist/time/failures.js +56 -0
  270. package/dist/time/index.d.ts +11 -0
  271. package/dist/time/index.js +11 -0
  272. package/dist/time/instant.d.ts +64 -0
  273. package/dist/time/instant.js +67 -0
  274. package/dist/time/period.d.ts +45 -0
  275. package/dist/time/period.js +55 -0
  276. package/dist/vitest/container-reuse.d.ts +14 -0
  277. package/dist/vitest/container-reuse.js +15 -0
  278. package/dist/vitest/dotenv.d.ts +16 -0
  279. package/dist/vitest/dotenv.js +48 -0
  280. package/dist/vitest/effect-single-instance.d.ts +36 -0
  281. package/dist/vitest/effect-single-instance.js +125 -0
  282. package/dist/vitest/fast-check-single-instance.d.ts +11 -0
  283. package/dist/vitest/fast-check-single-instance.js +26 -0
  284. package/dist/vitest/index.d.ts +31 -0
  285. package/dist/vitest/index.js +30 -0
  286. package/dist/vitest/localstack-container.d.ts +32 -0
  287. package/dist/vitest/localstack-container.js +55 -0
  288. package/dist/vitest/port-contract-tester.d.ts +8 -0
  289. package/dist/vitest/port-contract-tester.js +1 -0
  290. package/dist/vitest/port-contracts/blob-store.contract.d.ts +22 -0
  291. package/dist/vitest/port-contracts/blob-store.contract.js +108 -0
  292. package/dist/vitest/port-contracts/document-number-counter.contract.d.ts +18 -0
  293. package/dist/vitest/port-contracts/document-number-counter.contract.js +90 -0
  294. package/dist/vitest/port-contracts/event-publisher.contract.d.ts +35 -0
  295. package/dist/vitest/port-contracts/event-publisher.contract.js +67 -0
  296. package/dist/vitest/port-contracts/external-http-client.contract.d.ts +35 -0
  297. package/dist/vitest/port-contracts/external-http-client.contract.js +52 -0
  298. package/dist/vitest/port-contracts/integration-event-outbox.contract.d.ts +23 -0
  299. package/dist/vitest/port-contracts/integration-event-outbox.contract.js +75 -0
  300. package/dist/vitest/port-contracts/processed-event-registry.contract.d.ts +18 -0
  301. package/dist/vitest/port-contracts/processed-event-registry.contract.js +84 -0
  302. package/dist/vitest/port-contracts/queue-message-producer.contract.d.ts +26 -0
  303. package/dist/vitest/port-contracts/queue-message-producer.contract.js +48 -0
  304. package/dist/vitest/port-contracts/queue-message-source.contract.d.ts +29 -0
  305. package/dist/vitest/port-contracts/queue-message-source.contract.js +71 -0
  306. package/dist/vitest/port-contracts/readiness-probe.contract.d.ts +18 -0
  307. package/dist/vitest/port-contracts/readiness-probe.contract.js +41 -0
  308. package/dist/vitest/port-contracts/transaction-boundary.contract.d.ts +21 -0
  309. package/dist/vitest/port-contracts/transaction-boundary.contract.js +64 -0
  310. package/dist/vitest/postgres-container.d.ts +57 -0
  311. package/dist/vitest/postgres-container.js +118 -0
  312. package/dist/vitest/reader-port-contract.d.ts +41 -0
  313. package/dist/vitest/reader-port-contract.js +43 -0
  314. package/dist/vitest/repo-source-files.d.ts +37 -0
  315. package/dist/vitest/repo-source-files.js +61 -0
  316. package/dist/vitest/reset-tables.d.ts +18 -0
  317. package/dist/vitest/reset-tables.js +30 -0
  318. package/dist/vitest/settings-contract.d.ts +38 -0
  319. package/dist/vitest/settings-contract.js +77 -0
  320. package/dist/vitest/stub-server.d.ts +43 -0
  321. package/dist/vitest/stub-server.js +60 -0
  322. package/dist/vitest/term-registry.json +730 -0
  323. package/dist/vitest/testclock-fork-isolated-files.d.ts +13 -0
  324. package/dist/vitest/testclock-fork-isolated-files.js +18 -0
  325. package/dist/vitest/testclock-fork-isolation.d.ts +77 -0
  326. package/dist/vitest/testclock-fork-isolation.js +188 -0
  327. package/dist/workflow/claim-once.d.ts +16 -0
  328. package/dist/workflow/claim-once.js +9 -0
  329. package/dist/workflow/failures.d.ts +47 -0
  330. package/dist/workflow/failures.js +22 -0
  331. package/dist/workflow/index.d.ts +12 -0
  332. package/dist/workflow/index.js +12 -0
  333. package/dist/workflow/on-claim.d.ts +17 -0
  334. package/dist/workflow/on-claim.js +8 -0
  335. package/dist/workflow/publish-pending-events.d.ts +31 -0
  336. package/dist/workflow/publish-pending-events.js +31 -0
  337. package/dist/workflow/transactionally.d.ts +8 -0
  338. package/dist/workflow/transactionally.js +8 -0
  339. package/dist/workflow/versioned-payload.d.ts +35 -0
  340. package/dist/workflow/versioned-payload.js +43 -0
  341. package/package.json +309 -0
@@ -0,0 +1,730 @@
1
+ [
2
+ {
3
+ "id": "adapter",
4
+ "kind": "term",
5
+ "en": "adapter",
6
+ "uk": "адаптер",
7
+ "anchor": ["adapter"],
8
+ "definition": {
9
+ "en": "The one concrete implementation of a port a composition root mounts for one running app.",
10
+ "uk": "Одна конкретна реалізація порту, яку корінь композиції монтує для одного запущеного застосунку."
11
+ },
12
+ "ukPattern": "адаптер[а-яіїєґ]*"
13
+ },
14
+ {
15
+ "id": "allocation",
16
+ "kind": "term",
17
+ "en": "allocation",
18
+ "uk": "поділ за пропорціями",
19
+ "anchor": ["allocation"],
20
+ "definition": {
21
+ "en": "Splitting an amount by proportions so the parts add back to what went in, and the remainder goes out one minor unit at a time.",
22
+ "uk": "Поділ суми за пропорціями так, щоб частини склались назад у те, що зайшло, а решта вийшла по одній найдрібнішій одиниці."
23
+ },
24
+ "ukPattern": "поділ[а-яіїєґ]*\\s+за\\s+пропорціями"
25
+ },
26
+ {
27
+ "id": "blob-store",
28
+ "kind": "identifier",
29
+ "en": "blob store",
30
+ "uk": "сховище об'єктів",
31
+ "anchor": ["blob store", "BlobStore"],
32
+ "definition": {
33
+ "en": "The S3-shaped port for put, get, exists, and delete on a byte payload identified by a key.",
34
+ "uk": "Порт у формі S3 для put, get, exists і delete над байтовим payload, ідентифікованим ключем."
35
+ },
36
+ "ukPattern": "сховищ[а-яіїєґ]*\\s+об['ʼ]?єктів",
37
+ "avoid": {
38
+ "uk": [
39
+ "об'єктне сховище",
40
+ "об'єктного сховища",
41
+ "об'єктному сховищу",
42
+ "об'єктним сховищем",
43
+ "об'єктному сховищі",
44
+ "об'єктні сховища",
45
+ "об'єктних сховищ",
46
+ "об'єктними сховищами",
47
+ "об'єктних сховищах"
48
+ ]
49
+ }
50
+ },
51
+ {
52
+ "id": "calendar-day",
53
+ "kind": "identifier",
54
+ "en": "calendar day",
55
+ "uk": "календарний день",
56
+ "anchor": ["calendar day", "CalendarDay"],
57
+ "definition": {
58
+ "en": "One day of the calendar, with no time and no zone in it, written the way a person writes it or the way a machine does.",
59
+ "uk": "Один день календаря, без часу і без зони, записаний або так, як пише людина, або так, як пише машина."
60
+ },
61
+ "ukPattern": "календарн[а-яіїєґ]*\\s+(?:день|дн[а-яіїєґ]+)"
62
+ },
63
+ {
64
+ "id": "check-digit",
65
+ "kind": "term",
66
+ "en": "check digit",
67
+ "uk": "контрольна цифра",
68
+ "anchor": ["check digit"],
69
+ "definition": {
70
+ "en": "One extra digit computed from the others, so a number somebody mistyped fails on the doorstep instead of in an account.",
71
+ "uk": "Одна зайва цифра, порахована з решти, щоб хибно набраний номер упав на порозі, а не в чиємусь обліку."
72
+ },
73
+ "ukPattern": "контрольн[а-яіїєґ]*\\s+цифр[а-яіїєґ]*"
74
+ },
75
+ {
76
+ "id": "claim-once",
77
+ "kind": "term",
78
+ "en": "claim-once",
79
+ "uk": "резервація",
80
+ "anchor": ["claim-once"],
81
+ "definition": {
82
+ "en": "The shared exactly-once lock every \"take this exactly once\" use case calls, keyed by an idempotency key the use case itself builds.",
83
+ "uk": "Спільний замок: процедура застовблює роботу рівно один раз за ключем ідемпотентності, що його будує сама процедура."
84
+ },
85
+ "avoid": {
86
+ "uk": ["рівно-раз", "claim'ає", "клеймити", "клейм", "клейма", "клеймом"]
87
+ },
88
+ "ukPattern": "резервац[а-яіїєґ]*|застовб[а-яіїєґ]*"
89
+ },
90
+ {
91
+ "id": "closed-set",
92
+ "kind": "term",
93
+ "en": "closed set",
94
+ "uk": "чітко визначений перелік",
95
+ "anchor": ["closed set"],
96
+ "definition": {
97
+ "en": "A named list of allowed values with nothing outside it: the type refuses any value the list does not name.",
98
+ "uk": "Названий перелік дозволених значень, поза яким немає нічого: тип відмовляє будь-якому значенню, якого перелік не називає."
99
+ },
100
+ "avoid": {
101
+ "uk": [
102
+ "закритий набір",
103
+ "закритого набору",
104
+ "закритому набору",
105
+ "закритим набором",
106
+ "закритому наборі",
107
+ "закриті набори",
108
+ "закритих наборів",
109
+ "закритим наборам",
110
+ "закритими наборами",
111
+ "закритих наборах",
112
+ "закритий перелік",
113
+ "закритого переліку",
114
+ "фіксований перелік",
115
+ "фіксованого переліку",
116
+ "фіксованому переліку",
117
+ "фіксованим переліком",
118
+ "фіксовані переліки",
119
+ "фіксованих переліків",
120
+ "фіксованими переліками"
121
+ ]
122
+ },
123
+ "ukPattern": "чітко\\s+визначен[а-яіїєґ]*\\s+перелік[а-яіїєґ]*"
124
+ },
125
+ {
126
+ "id": "composition-root",
127
+ "kind": "term",
128
+ "en": "composition root",
129
+ "uk": "корінь композиції",
130
+ "anchor": ["composition root"],
131
+ "definition": {
132
+ "en": "The one place that knows an app's whole makeup: which driver backs which port, which queue is mounted, which server starts.",
133
+ "uk": "Єдине місце, що знає весь склад застосунку: який драйвер стоїть за яким портом, яка черга змонтована, який сервер стартує."
134
+ },
135
+ "avoid": {
136
+ "uk": [
137
+ "композиційний корінь",
138
+ "композиційного кореня",
139
+ "композиційному кореню",
140
+ "композиційним коренем",
141
+ "композиційному корені",
142
+ "композиційні корені"
143
+ ]
144
+ },
145
+ "ukPattern": "(?:корінь|коренем|кореню|корені|кореня)\\s+композиції"
146
+ },
147
+ {
148
+ "id": "consumer",
149
+ "kind": "term",
150
+ "en": "consumer",
151
+ "uk": "робітник",
152
+ "anchor": ["consumer"],
153
+ "ukPattern": "робітник(?:а|у|ові|ом|и|ів|ам|ами|ах)?",
154
+ "definition": {
155
+ "en": "The loop that takes a message from the queue and gives it one of three outcomes: acknowledged, retried later, or refused for good; your handler only decides, the consumer carries out.",
156
+ "uk": "Цикл, що бере повідомлення з черги і дає йому один із трьох кінцевих результатів: прийнято, повторити пізніше або відмовлено назавжди; ваш обробник лише вирішує, робітник виконує."
157
+ },
158
+ "avoid": {
159
+ "uk": [
160
+ "споживач",
161
+ "споживача",
162
+ "споживачу",
163
+ "споживачем",
164
+ "споживачі",
165
+ "споживачів",
166
+ "консюмер",
167
+ "консюмера",
168
+ "консюмери"
169
+ ]
170
+ }
171
+ },
172
+ {
173
+ "id": "creditor-reference",
174
+ "kind": "identifier",
175
+ "en": "creditor reference",
176
+ "uk": "платіжний референс",
177
+ "anchor": ["creditor reference", "CreditorReference"],
178
+ "definition": {
179
+ "en": "The ISO 11649 payment reference a payer types into a bank: the letters RF, two check digits, and the digits of the document number.",
180
+ "uk": "Платіжний референс ISO 11649, який платник набирає в банку: літери RF, дві контрольні цифри і цифри номера документа."
181
+ },
182
+ "ukPattern": "платіжн[а-яіїєґ]*\\s+референс[а-яіїєґ]*"
183
+ },
184
+ {
185
+ "id": "document-series",
186
+ "kind": "term",
187
+ "en": "series",
188
+ "uk": "серія",
189
+ "anchor": ["series"],
190
+ "definition": {
191
+ "en": "The kind of document a number stands for, taken from a closed set the service names: a proforma, an invoice, a credit note.",
192
+ "uk": "Вид документа, за який стоїть номер, узятий із чітко визначеного переліку самого сервісу: проформа, інвойс, кредит-нота."
193
+ },
194
+ "ukPattern": "сері(?:я|ї|ю|єю|й|ям|ями|ях)(?![а-яіїєґ])"
195
+ },
196
+ {
197
+ "id": "external-perimeter",
198
+ "kind": "term",
199
+ "en": "external perimeter",
200
+ "uk": "зовнішній периметр",
201
+ "anchor": ["external perimeter"],
202
+ "definition": {
203
+ "en": "The line between the machinery and something outside its own process — an HTTP service, an object store, a message bus — that the integration, storage, and publishing mechanisms hold against.",
204
+ "uk": "Межа між машинерією і чимось поза власним процесом — HTTP-сервісом, сховищем об'єктів, шиною повідомлень — яку тримають механізми integration, storage і publishing."
205
+ },
206
+ "avoid": {
207
+ "uk": ["зовнішні межі", "зовнішня межа"]
208
+ },
209
+ "ukPattern": "зовнішн[а-яіїєґ]*\\s+периметр[а-яіїєґ]*"
210
+ },
211
+ {
212
+ "id": "federation",
213
+ "kind": "term",
214
+ "en": "federation",
215
+ "uk": "федерація",
216
+ "anchor": ["federation", "GraphQL federation"],
217
+ "definition": {
218
+ "en": "The Apollo-shaped composition of several GraphQL subgraphs, each owned by its own service, into one schema a client reads as one.",
219
+ "uk": "Композиція кількох GraphQL-підграфів у стилі Apollo, кожен у власності свого сервісу, в одну схему, яку клієнт читає як одну."
220
+ },
221
+ "ukPattern": "федерац[а-яіїєґ]*"
222
+ },
223
+ {
224
+ "id": "full-check",
225
+ "kind": "term",
226
+ "en": "full check",
227
+ "uk": "повна перевірка",
228
+ "anchor": ["bun run check", "full check"],
229
+ "definition": {
230
+ "en": "The repository's whole `bun run check` run — formatter, types, dependency boundaries, Effect diagnostics, and the whole test suite — that must pass green before a commit.",
231
+ "uk": "Весь прогін `bun run check` цього репозиторію — форматер, типи, межі залежностей, діагностика Effect і весь набір тестів — який мусить пройти зеленим перед комітом."
232
+ },
233
+ "avoid": {
234
+ "en": ["gate", "gates"],
235
+ "uk": ["гейт", "гейту", "гейтом", "гейти", "гейтів", "гейтах", "гейта"]
236
+ },
237
+ "ukPattern": "повн[а-яіїєґ]*\\s+перевірк[а-яіїєґ]*"
238
+ },
239
+ {
240
+ "id": "guard",
241
+ "kind": "term",
242
+ "en": "guard",
243
+ "uk": "перевірка збірки",
244
+ "anchor": ["guard"],
245
+ "definition": {
246
+ "en": "A vitest suite, packaged as a callable function, that fails a build on one specific rule, proven by breaking that rule on purpose.",
247
+ "uk": "Набір vitest, запакований як функція, яку можна викликати; вона валить збірку на одному конкретному правилі й доведена навмисним порушенням цього правила."
248
+ },
249
+ "ukPattern": "(?:перевірк(?:а|и|у|ою|ці|ах|ам|ами)|перевірок)\\s+збірки",
250
+ "avoid": {
251
+ "uk": [
252
+ "вартовий",
253
+ "вартового",
254
+ "вартовому",
255
+ "вартовим",
256
+ "вартові",
257
+ "вартових",
258
+ "вартовими",
259
+ "вартова"
260
+ ]
261
+ }
262
+ },
263
+ {
264
+ "id": "implant",
265
+ "kind": "term",
266
+ "en": "implant",
267
+ "uk": "імплант",
268
+ "anchor": ["implant"],
269
+ "definition": {
270
+ "en": "The business module a service carries on this machinery: one bounded piece of business logic that never imports a neighbour. This package supports that shape and recommends it; the platform's own pages carry the detail, at [Business Machinery](https://docs.satorio.dev/business-machinery/).",
271
+ "uk": "Бізнес-модуль, який сервіс несе на цій машинерії: одна межована частина бізнес-логіки, що ніколи не імпортує сусідню. Цей пакет підтримує цю форму і радить її; подробиці несуть власні сторінки платформи, [Business Machinery](https://docs.satorio.dev/business-machinery/)."
272
+ },
273
+ "ukPattern": "бізнес-імплант[а-яіїєґ]*|імплант[а-яіїєґ]*"
274
+ },
275
+ {
276
+ "id": "instant",
277
+ "kind": "term",
278
+ "en": "instant",
279
+ "uk": "мить часу",
280
+ "anchor": ["instant"],
281
+ "definition": {
282
+ "en": "One moment on the world's clock, held as whole milliseconds and carrying no zone of its own.",
283
+ "uk": "Одна мить на світовому годиннику, що тримається як цілі мілісекунди і не несе власної зони."
284
+ },
285
+ "ukPattern": "мит[ьі]\\s+часу|миттю\\s+часу"
286
+ },
287
+ {
288
+ "id": "live-stand",
289
+ "kind": "term",
290
+ "en": "live stand",
291
+ "uk": "живий стенд",
292
+ "anchor": ["live stand"],
293
+ "definition": {
294
+ "en": "A real dependency started in a container for a test to run against, never mocked and never skipped when the container fails to start.",
295
+ "uk": "Реальна залежність, стартована в контейнері, проти якої запускається тест, ніколи не замокана і ніколи не пропущена, коли контейнер не стартує."
296
+ },
297
+ "ukPattern": "жив(?:ий|ого|ому|им)\\s+стенд[а-яіїєґ]*"
298
+ },
299
+ {
300
+ "id": "machinery",
301
+ "kind": "term",
302
+ "en": "the machinery",
303
+ "uk": "машинерія",
304
+ "anchor": ["machinery", "Machinery"],
305
+ "definition": {
306
+ "en": "This package: the engine half of a backend service, with no knowledge of the business domain it carries.",
307
+ "uk": "Цей пакет: половина сервісу-двигуна бекенду, яка нічого не знає про домен, який вона несе."
308
+ }
309
+ },
310
+ {
311
+ "id": "mechanism",
312
+ "kind": "term",
313
+ "en": "mechanism",
314
+ "uk": "механізм",
315
+ "anchor": ["mechanism"],
316
+ "definition": {
317
+ "en": "One npm subpath export of the package, with its own public entry point, that no import reaches around from outside.",
318
+ "uk": "Один subpath-експорт npm пакета, зі своєю публічною точкою входу, куди жоден import не заходить іззовні."
319
+ },
320
+ "avoid": {
321
+ "en": ["area", "areas"],
322
+ "uk": [
323
+ "область",
324
+ "області",
325
+ "областей",
326
+ "областю",
327
+ "областях",
328
+ "ділянка",
329
+ "ділянки",
330
+ "ділянок",
331
+ "ділянкою",
332
+ "ділянках"
333
+ ]
334
+ },
335
+ "ukPattern": "механізм[а-яіїєґ]*"
336
+ },
337
+ {
338
+ "id": "migration",
339
+ "kind": "term",
340
+ "en": "migration",
341
+ "uk": "міграція",
342
+ "anchor": ["migration"],
343
+ "definition": {
344
+ "en": "One numbered, forward-only SQL file that changes the Postgres schema, applied by the package's own migration runner.",
345
+ "uk": "Один пронумерований, лише прямий SQL-файл, що змінює схему Postgres, застосований власним виконавцем міграцій пакета."
346
+ },
347
+ "ukPattern": "міграці[а-яіїєґ]*|міграція"
348
+ },
349
+ {
350
+ "id": "minor-unit",
351
+ "kind": "term",
352
+ "en": "minor unit",
353
+ "uk": "найдрібніша одиниця",
354
+ "anchor": ["minor unit"],
355
+ "definition": {
356
+ "en": "The smallest unit a currency counts in, the cent of a dollar, and the whole number an amount is held as.",
357
+ "uk": "Найдрібніша одиниця, якою рахує валюта, цент долара, і ціле число, яким тримають суму."
358
+ },
359
+ "ukPattern": "найдрібніш[а-яіїєґ]*\\s+одиниц[а-яіїєґ]*"
360
+ },
361
+ {
362
+ "id": "outbox",
363
+ "kind": "identifier",
364
+ "en": "outbox",
365
+ "uk": "буфер трансмітера",
366
+ "anchor": ["outbox", "integration_event_outbox"],
367
+ "definition": {
368
+ "en": "The table a use case writes an event to, in the same transaction as its own state change.",
369
+ "uk": "Таблиця, куди процедура пише подію, у тій самій транзакції, що й власну зміну стану."
370
+ },
371
+ "ukPattern": "буфер(?:ами|ах|ам|ом|ів|а|у|і|и)?\\s+трансмітера",
372
+ "avoid": {
373
+ "uk": [
374
+ "скринька",
375
+ "скриньки",
376
+ "скриньці",
377
+ "скриньку",
378
+ "скринькою",
379
+ "скриньок",
380
+ "скринькам",
381
+ "скриньках",
382
+ "скриньками",
383
+ "скриня",
384
+ "скрині",
385
+ "скриню"
386
+ ]
387
+ }
388
+ },
389
+ {
390
+ "id": "outbox-relay",
391
+ "kind": "term",
392
+ "en": "outbox relay",
393
+ "uk": "трансмітер вихідних подій",
394
+ "anchor": ["outbox relay"],
395
+ "definition": {
396
+ "en": "The process that reads the messages waiting in the outbox, hands them to a publisher, and marks them delivered only after the publisher accepted them.",
397
+ "uk": "Процес, що читає повідомлення, які чекають у буфері трансмітера, передає їх публікатору і позначає доставленими лише після того, як публікатор їх прийняв."
398
+ },
399
+ "avoid": {
400
+ "uk": [
401
+ "ретранслятор",
402
+ "ретранслятора",
403
+ "ретранслятору",
404
+ "ретранслятором",
405
+ "ретрансляторі",
406
+ "ретранслятори",
407
+ "ретрансляторів",
408
+ "ретрансляторам",
409
+ "ретрансляторами",
410
+ "ретрансляторах"
411
+ ]
412
+ },
413
+ "ukPattern": "трансмітер(?:ами|ах|ам|ові|ом|ів|а|у|і|и)?\\s+вихідних\\s+подій"
414
+ },
415
+ {
416
+ "id": "package",
417
+ "kind": "term",
418
+ "en": "package",
419
+ "uk": "пакет",
420
+ "anchor": ["package"],
421
+ "definition": {
422
+ "en": "The npm package this documentation describes: one published name that hands out one subpath export per mechanism.",
423
+ "uk": "npm-пакет, який описує ця документація: одне опубліковане ім'я, що віддає один subpath-експорт на кожен механізм."
424
+ }
425
+ },
426
+ {
427
+ "id": "peer-dependency",
428
+ "kind": "term",
429
+ "en": "peer dependency",
430
+ "uk": "спільна залежність",
431
+ "anchor": ["peer dependency", "peer dependencies"],
432
+ "definition": {
433
+ "en": "A package the machinery expects your service to install itself, so one copy serves both instead of two copies quietly disagreeing.",
434
+ "uk": "Пакет, який машинерія чекає, що ви встановите самі, тож один екземпляр служить обом, а не два тихо розходяться між собою."
435
+ },
436
+ "avoid": {
437
+ "uk": [
438
+ "peer-залежність",
439
+ "peer-залежності",
440
+ "peer-залежностей",
441
+ "peer-залежністю",
442
+ "peer-залежностям",
443
+ "peer-залежностями",
444
+ "peer-залежностях",
445
+ "пірингова залежність",
446
+ "пірингові залежності",
447
+ "пірингових залежностей",
448
+ "пірингову залежність"
449
+ ]
450
+ },
451
+ "ukPattern": "спільн[а-яіїєґ]*\\s+залежн(?:ість|ост[а-яіїєґ]*)"
452
+ },
453
+ {
454
+ "id": "period",
455
+ "kind": "term",
456
+ "en": "period",
457
+ "uk": "період",
458
+ "anchor": ["period"],
459
+ "definition": {
460
+ "en": "A run of calendar days with both bounds inside it: the first day and the last day both belong to the period.",
461
+ "uk": "Проміжок календарних днів, обидві межі якого входять у нього: і перший, і останній день належать періоду."
462
+ },
463
+ "ukPattern": "період[а-яіїєґ]*"
464
+ },
465
+ {
466
+ "id": "port",
467
+ "kind": "term",
468
+ "en": "port",
469
+ "uk": "порт",
470
+ "anchor": ["port"],
471
+ "definition": {
472
+ "en": "A boundary the machinery defines and a service depends on, without knowing which driver answers it in production, a test, or a seeder.",
473
+ "uk": "Межа, яку визначає машинерія і від якої залежить сервіс, не знаючи, який драйвер відповідає на неї в продакшені, тесті чи сіячі."
474
+ },
475
+ "ukPattern": "порт[а-яіїєґ]*"
476
+ },
477
+ {
478
+ "id": "publisher",
479
+ "kind": "term",
480
+ "en": "publisher",
481
+ "uk": "публікатор",
482
+ "anchor": ["publisher"],
483
+ "definition": {
484
+ "en": "The adapter that hands an event to the world outside the service and reports back whether it was accepted.",
485
+ "uk": "Адаптер, що передає подію світу поза сервісом і звітує, чи її прийняли."
486
+ },
487
+ "avoid": {
488
+ "uk": [
489
+ "публішер",
490
+ "публішера",
491
+ "публішеру",
492
+ "публішером",
493
+ "публішери",
494
+ "публішерів",
495
+ "паблішер",
496
+ "паблішера",
497
+ "паблішеру",
498
+ "паблішером",
499
+ "паблішери",
500
+ "паблішерів"
501
+ ]
502
+ },
503
+ "ukPattern": "публікатор[а-яіїєґ]*"
504
+ },
505
+ {
506
+ "id": "readiness-probe",
507
+ "kind": "identifier",
508
+ "en": "readiness probe",
509
+ "uk": "проба готовності",
510
+ "anchor": ["ReadinessProbe", "readiness probe"],
511
+ "definition": {
512
+ "en": "An `Effect` that fails when a dependency does not answer, so `/readyz` reports `down` instead of `200` while it is out.",
513
+ "uk": "`Effect`, що провалюється, коли залежність не відповідає, тож `/readyz` звітує `down` замість `200`, доки вона недоступна."
514
+ },
515
+ "ukPattern": "проб[а-яіїєґ]*\\s+готовності"
516
+ },
517
+ {
518
+ "id": "refusal",
519
+ "kind": "term",
520
+ "en": "refusal",
521
+ "uk": "відмова",
522
+ "anchor": ["refusal"],
523
+ "definition": {
524
+ "en": "A message outcome that stops a consumer from retrying, because retrying the same message would never succeed.",
525
+ "uk": "Наслідок повідомлення, що зупиняє робітника від повтору, бо повтор того самого повідомлення ніколи не вдасться."
526
+ },
527
+ "ukPattern": "(?<!типізован[а-яіїєґ]{1,4} )відмов[а-яіїєґ]*"
528
+ },
529
+ {
530
+ "id": "reporting-month",
531
+ "kind": "term",
532
+ "en": "reporting month",
533
+ "uk": "звітний місяць",
534
+ "anchor": ["reporting month"],
535
+ "definition": {
536
+ "en": "The month a document reports on, written as two digits of year and two of month, which is also the month its count runs in.",
537
+ "uk": "Місяць, за який звітує документ, написаний двома цифрами року і двома цифрами місяця; у цьому ж місяці біжить його лічба."
538
+ },
539
+ "ukPattern": "звітн[а-яіїєґ]*\\s+місяц[а-яіїєґ]*|звітн[а-яіїєґ]*\\s+місяць"
540
+ },
541
+ {
542
+ "id": "runtime-guard",
543
+ "kind": "term",
544
+ "en": "runtime guard",
545
+ "uk": "охоронець на рантаймі",
546
+ "anchor": ["runtime guard"],
547
+ "definition": {
548
+ "en": "A function derived from a closed set or a tagged union that checks a value against it while the program runs, not only at compile time.",
549
+ "uk": "Функція, виведена з чітко визначеного переліку чи позначеного об'єднання, що звіряє значення проти нього під час роботи програми, не лише під час компіляції."
550
+ },
551
+ "ukPattern": "охоронц?[а-яіїєґ]*\\s+на\\s+рантайм[а-яіїєґ]*"
552
+ },
553
+ {
554
+ "id": "scale",
555
+ "kind": "term",
556
+ "en": "scale",
557
+ "uk": "масштаб суми",
558
+ "anchor": ["scale"],
559
+ "definition": {
560
+ "en": "How many decimal places an amount keeps, so a calculation that earns more digits does not lose them early.",
561
+ "uk": "Скільки десяткових знаків тримає сума, щоб розрахунок, який заробив більше цифр, не втратив їх зарано."
562
+ },
563
+ "ukPattern": "масштаб[а-яіїєґ]*\\s+суми"
564
+ },
565
+ {
566
+ "id": "scenario",
567
+ "kind": "term",
568
+ "en": "scenario",
569
+ "uk": "сценарій",
570
+ "anchor": ["scenario"],
571
+ "definition": {
572
+ "en": "A named sequence of steps written as data, not as a hand-written test script: the story a service should be able to tell, which the scenario player runs.",
573
+ "uk": "Названа послідовність кроків, записана як дані, а не як тестовий скрипт: історія, яку сервіс мусить уміти розповісти і яку проганяє програвач сценаріїв."
574
+ },
575
+ "ukPattern": "(?<!програвач[а-яіїєґ]{0,3}\\s)(?:сценарі[а-яіїєґ]*|сценарій)"
576
+ },
577
+ {
578
+ "id": "scenario-player",
579
+ "kind": "identifier",
580
+ "en": "scenario player",
581
+ "uk": "програвач сценаріїв",
582
+ "anchor": ["playScenario"],
583
+ "definition": {
584
+ "en": "The function that runs a scenario's steps in order, each at its own moment, through a service's own `perform` and `snapshot` functions.",
585
+ "uk": "Функція, що виконує кроки сценарію по порядку, кожен у власний момент, через власні функції `perform` і `snapshot` сервісу."
586
+ }
587
+ },
588
+ {
589
+ "id": "seeder",
590
+ "kind": "term",
591
+ "en": "seeder",
592
+ "uk": "сіяч",
593
+ "anchor": ["seeder"],
594
+ "definition": {
595
+ "en": "The scenario player run outside the test runner, against a real database, so a local or demo environment fills through the same path production takes.",
596
+ "uk": "Програвач сценаріїв, запущений поза виконавцем тестів, проти реальної бази даних, тож локальне чи демо-середовище наповнюється тим самим шляхом, що й продакшен."
597
+ },
598
+ "ukPattern": "сія[чц][а-яіїєґ]*",
599
+ "avoid": {
600
+ "uk": [
601
+ "сідер",
602
+ "сідера",
603
+ "сідеру",
604
+ "сідером",
605
+ "сідері",
606
+ "сідери",
607
+ "сідерів",
608
+ "сідерам",
609
+ "сідерами",
610
+ "сідерах"
611
+ ]
612
+ }
613
+ },
614
+ {
615
+ "id": "share",
616
+ "kind": "term",
617
+ "en": "share",
618
+ "uk": "частка суми",
619
+ "anchor": ["share"],
620
+ "definition": {
621
+ "en": "A part of an amount, written as a percentage or as a ratio, and held exactly rather than as a rounded number.",
622
+ "uk": "Частина суми, написана відсотком або відношенням, яку тримають точно, а не округленим числом."
623
+ },
624
+ "ukPattern": "частк[а-яіїєґ]*\\s+суми"
625
+ },
626
+ {
627
+ "id": "stub-server",
628
+ "kind": "term",
629
+ "en": "stub server",
630
+ "uk": "стаб-сервер",
631
+ "anchor": ["stub server"],
632
+ "definition": {
633
+ "en": "A real HTTP server on a local port, used to prove the actual wire shape a client sends and reads, including a real network timeout.",
634
+ "uk": "Реальний HTTP-сервер на локальному порту, що доводить справжню форму дроту, яку клієнт шле й читає, включно з реальним мережевим тайм-аутом."
635
+ },
636
+ "ukPattern": "стаб-сервер[а-яіїєґ]*"
637
+ },
638
+ {
639
+ "id": "test",
640
+ "kind": "term",
641
+ "en": "test",
642
+ "uk": "тест",
643
+ "anchor": ["test"],
644
+ "definition": {
645
+ "en": "One named check that runs the code and fails out loud when the result differs from what the check states.",
646
+ "uk": "Одна названа перевірка, що проганяє код і гучно падає, коли результат відрізняється від заявленого."
647
+ }
648
+ },
649
+ {
650
+ "id": "test-runner",
651
+ "kind": "term",
652
+ "en": "test runner",
653
+ "uk": "виконавець тестів",
654
+ "anchor": ["test runner", "vitest"],
655
+ "definition": {
656
+ "en": "The program that finds every test file, runs the tests in it, reports each result, and fails the whole run when one test fails; here it is vitest.",
657
+ "uk": "Програма, що знаходить кожен файл тестів, проганяє тести в ньому, звітує про кожен результат і валить увесь прогін, коли один тест падає; тут це vitest."
658
+ },
659
+ "avoid": {
660
+ "uk": [
661
+ "запускач тестів",
662
+ "запускач",
663
+ "запускача",
664
+ "запускачу",
665
+ "запускачеві",
666
+ "запускачем",
667
+ "запускачі",
668
+ "запускачів",
669
+ "запускачам",
670
+ "запускачами",
671
+ "запускачах",
672
+ "раннер",
673
+ "ранер",
674
+ "раннера",
675
+ "ранера"
676
+ ]
677
+ },
678
+ "ukPattern": "(?:виконавець|виконавц[а-яіїєґ]+)\\s+тестів"
679
+ },
680
+ {
681
+ "id": "time-zone",
682
+ "kind": "identifier",
683
+ "en": "time zone",
684
+ "uk": "часова зона",
685
+ "anchor": ["time zone", "TimeZone"],
686
+ "definition": {
687
+ "en": "One named place on the map of clocks, which decides what day and what wall time a moment reads as.",
688
+ "uk": "Одне назване місце на мапі годинників, яке вирішує, який день і який настінний час показує мить."
689
+ },
690
+ "ukPattern": "часов[а-яіїєґ]*\\s+зон[а-яіїєґ]*"
691
+ },
692
+ {
693
+ "id": "typed-failure",
694
+ "kind": "identifier",
695
+ "en": "typed failure",
696
+ "uk": "типізована відмова",
697
+ "anchor": ["Data.TaggedError", "DomainError", "typed failure"],
698
+ "definition": {
699
+ "en": "One `Data.TaggedError` subclass per distinct way an operation can fail, so a caller matches on `_tag` instead of guessing a cause from an error message.",
700
+ "uk": "Один підклас `Data.TaggedError` на кожен окремий спосіб, яким операція може провалитись, тож викликач порівнює за `_tag`, а не вгадує причину з тексту помилки."
701
+ },
702
+ "ukPattern": "типізован[а-яіїєґ]*\\s+відмов[а-яіїєґ]*"
703
+ },
704
+ {
705
+ "id": "use-case",
706
+ "kind": "term",
707
+ "en": "use case",
708
+ "uk": "процедура",
709
+ "anchor": ["use case"],
710
+ "definition": {
711
+ "en": "A sequence with an intent and a result: the steps by which a service carries out one intent; in code, one Effect describes it.",
712
+ "uk": "Послідовність із наміром і результатом: кроки, якими сервіс виконує один намір; у коді її описує один Effect."
713
+ },
714
+ "ukPattern": "процедур(?:ами|ах|ам|ою|а|и|і|у)?",
715
+ "avoid": {
716
+ "uk": [
717
+ "процедурний",
718
+ "процедурна",
719
+ "процедурне",
720
+ "процедурні",
721
+ "процедурного",
722
+ "процедурної",
723
+ "процедурних",
724
+ "процедурним",
725
+ "процедурними",
726
+ "процедурному"
727
+ ]
728
+ }
729
+ }
730
+ ]