@ai-matrx/records-ui 0.76.0 → 0.77.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,68 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.77.0
4
+
5
+ **A publish button that would hand out a dead link is not drawn.** (lane STORE-OFF, from
6
+ FIX-10A's own "left behind, named".)
7
+
8
+ Of the seventeen published forms live on the main database on 2026-09-22, three belonged to
9
+ ONE organization whose record store is switched off — and `custom.form_public` answered every
10
+ one of them with nothing, which the public route turned into a 404. Their owner pressed
11
+ Publish here, was handed a URL, and sent it to her customers.
12
+
13
+ The STORE always said no: `custom.anon_publish` opens with `custom.assert_store_door`, which
14
+ refuses 42501 while the switch is down. What was missing was the SCREEN. `usePublishGate`
15
+ (new, exported) asks `custom.store_is_open` once per mount, and the forms rail, the form
16
+ builder and the booking builder all read it — so one switch cannot be described three ways.
17
+ The control is ABSENT, never greyed, and `PUBLISH_NEEDS_THE_STORE_ON` says where the switch
18
+ is and that nothing already built is lost.
19
+
20
+ An unreadable switch is deliberately NOT treated as a closed one here — the opposite of the
21
+ store's own rule, for the opposite reason: on a screen the cost of guessing wrong is hiding a
22
+ button from somebody who may press it, so only a definite `false` removes anything and the
23
+ door still refuses.
24
+
25
+ Guard: `src/a-publish-control-needs-the-store-on.test.tsx`, shown RED (1 of 2 clauses) on the
26
+ bytes before this change and GREEN after.
27
+
28
+ **Consumer action:** none — no API changed. `usePublishGate` and
29
+ `PUBLISH_NEEDS_THE_STORE_ON` are available to a host that wants the same gate on its own
30
+ publish surface.
31
+
32
+ ## 0.76.0
33
+
34
+ **An archived portal was reachable from nowhere.** (lane PUBLISH-SWEEP, closing ORG-CLEANUP's
35
+ own "left behind, named".)
36
+
37
+ * The store grew `custom.portal_archive`, `custom.portal_restore` and the archive-aware
38
+ `custom.list_portals`, and nine of Rincon Plumbing Co's ten identical "Your jobs and
39
+ invoices" portals were archived through them from a script. No screen could do any of it:
40
+ the Portals rail reads `custom.portals`, which hides archived portals by design — so those
41
+ nine vanished from every client in the platform, with no way to see one, no way to bring one
42
+ back, and no way to archive the tenth when somebody made another mess. The same shape
43
+ `ArchivedView` closed for records, one surface later.
44
+ * `ArchivedDisclosure` (new, exported) is the archived-items law's ONE CLICK, written once so
45
+ any rail that grows an archive reveals it with the same control and the same words:
46
+ the default hides, one press on the surface itself reveals, and an empty archive is a
47
+ sentence rather than a blank.
48
+ * `ArchivedPortals` (new, exported) reads `list_portals(org, 'archived')` — the archive-aware
49
+ door, never a filter over a list that already hid them — and restores through the store's own
50
+ door with the portal's title typed back. It is organization-wide on purpose: a portal is
51
+ archived because nobody is standing on it, and narrowing the archive to the Table you happen
52
+ to be on is how an archived portal becomes unreachable from every page at once.
53
+ * `PortalsPanel` grows both halves: Archive on a live portal, with the consequence said in the
54
+ words of what actually happens before the click and the store's own sentence after it, and
55
+ the archive below the list, re-read whenever the rail changed something or somebody reveals
56
+ it.
57
+
58
+ Guard: `src/an-archived-portal-can-come-back.test.tsx` (Meridian Tax & Bookkeeping's three
59
+ identical client portals), shown RED on the rail wiring removed and the archive lane wrong,
60
+ then GREEN.
61
+
62
+ **The import wizard adds the columns as its own step.** (lane IMPORT-2.)
63
+
64
+ **Consumer action:** none — everything here is additive.
65
+
3
66
  ## 0.75.0
4
67
 
5
68
  **0.74.0 was tagged and never reached npm** — its release gate failed on