@abloatai/ablo 0.54.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.55.0
4
+
5
+ ### `ablo doctor` says whether the writes reached anyone
6
+
7
+ Every other check asks whether something is configured. This one asks what
8
+ happened to the last hour of changes, which is the question the rest can all be
9
+ green through: a commit confirms, the row appears in your database, and no
10
+ subscriber is ever told.
11
+
12
+ ```
13
+ ✓ delivery 41 changes in the last hour, all deliverable
14
+ ```
15
+
16
+ and when they did not:
17
+
18
+ ```
19
+ ✗ delivery 3 of 41 changes in the last hour reached nobody (e.g. reports/rep_8c2)
20
+ → run `ablo check`. Rows written to Postgres outside Ablo carry no tenancy value, so nothing can route the change.
21
+ ```
22
+
23
+ A change Ablo cannot route is excluded from delivery and counted at the moment
24
+ it happens, so this is the engine's own record rather than something inferred
25
+ afterwards. When a change is undeliverable the report names one model and row,
26
+ because that is what turns "realtime is broken" into something you can open.
27
+
28
+ A server too old to answer the question reports the check as not determined
29
+ rather than as healthy. That distinction is the point of the check: folding an
30
+ unanswered question into a pass would report health the plane never claimed.
31
+
32
+ ### `ablo check` counts rows the sync layer cannot see
33
+
34
+ A model having a tenancy column was treated as the whole question. Ablo stamps
35
+ that value on the writes it makes, but a seed, a migration, or a backfill that
36
+ inserts straight into Postgres does not, and a row without it can never be routed
37
+ to anyone: it lands, it is queryable in Postgres, and the sync layer cannot see
38
+ it.
39
+
40
+ Those rows are counted now, so a report reading "23 models, 23 ok" over a table
41
+ full of them is no longer possible. The count stops at a cap, because the answer
42
+ that changes what you do next is whether there are any, and an uncounted scan of
43
+ a large table is not something a command you run on a whim should cost.
44
+
45
+ ### `GET /v1/logs/delivery`
46
+
47
+ The endpoint behind the check, for building your own monitoring:
48
+
49
+ ```
50
+ { "object": "log_delivery", "window_seconds": 3600,
51
+ "recorded": 41, "unroutable": 3,
52
+ "sample": { "model": "reports", "id": "rep_8c2", "at": "2026-08-19T09:12:04Z" } }
53
+ ```
54
+
55
+ Counts and at most one sample, never row data. The window it counted is in the
56
+ response, so nothing has to assume one.
57
+
58
+ ### Removed
59
+
60
+ `CapabilityExchangeResponse` is removed, as 0.54.0 announced. Use
61
+ `CapabilityMintResponse`, which it has resolved to throughout.
62
+
3
63
  ## 0.54.0
4
64
 
5
65
  ### A scoped session is scoped everywhere it is read
@@ -25,7 +25,7 @@ ABLO_API_KEY=sk_… npx ablo status
25
25
  • fulfilments typename=fulfilments
26
26
  • reviews typename=reviews
27
27
 
28
- ✓ write infrastructure is ready database constraints and row-level policies still apply
28
+ ✓ write infrastructure is ready. Your database constraints and row-level policies still apply.
29
29
  ```
30
30
 
31
31
  `status` asks the routing authority rather than sampling a read, because reads
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abloatai/ablo",
3
- "version": "0.54.0",
3
+ "version": "0.55.0",
4
4
  "description": "The public Ablo SDK for coordinated reads, commits, claims, observation, and reactive applications.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -137,8 +137,8 @@
137
137
  "directory": "packages/ablo"
138
138
  },
139
139
  "dependencies": {
140
- "@abloatai/humans": "^0.54.0",
141
- "@abloatai/transaction": "^0.54.0",
140
+ "@abloatai/humans": "^0.55.0",
141
+ "@abloatai/transaction": "^0.55.0",
142
142
  "zod": "^4.4.3"
143
143
  },
144
144
  "peerDependencies": {