|
1 | 1 | # @object-ui/app-shell — Changelog |
2 | 2 |
|
| 3 | +## 17.2.1 |
| 4 | + |
| 5 | +### Patch Changes |
| 6 | + |
| 7 | +- 12bf669: The record discussion panel now says "loading" while it is loading, instead of |
| 8 | + "No comments yet" (objectui#3209). |
| 9 | + |
| 10 | + FROM: opening any record page showed the discussion/chatter panel asserting |
| 11 | + `No comments yet` for the whole first leg of the page, then contradicting |
| 12 | + itself when the comments appeared. TO: the panel shows the loading row until |
| 13 | + the feed has actually answered, and only then commits to "this record has no |
| 14 | + comments". |
| 15 | + |
| 16 | + objectui#3205 gave `RecordActivityTimeline` the render branch that prefers a |
| 17 | + loading row over the empty copy, and `RecordChatterPanel` already forwarded |
| 18 | + `loading` to it in both positions — but on the chatter chain **nothing |
| 19 | + produced the signal**, so that branch could never fire. `record:activity` |
| 20 | + computes its own flag and was visibly fixed by #3205; chatter was not. The |
| 21 | + four wiring points are one chain and are all closed here, because any one of |
| 22 | + them left open still ships the empty copy to some user: |
| 23 | + |
| 24 | + - `RecordDetailView` — the host that OWNS the feed fetch — now derives a |
| 25 | + `feedLoading` flag from its two reads (`sys_comment` + `sys_activity`); |
| 26 | + - `<DiscussionContextProvider loading={feedLoading}>` publishes it (the field |
| 27 | + was already declared on `DiscussionContextValue`, and already read by |
| 28 | + `record:activity`); |
| 29 | + - the auto-appended `<RecordChatterPanel loading={feedLoading}>` — the panel |
| 30 | + authored pages get when they place no discussion slot — receives it |
| 31 | + directly; |
| 32 | + - the `record:chatter` / `record:discussion` renderer forwards |
| 33 | + `loading={discussion?.loading}`, so a hand-placed block is on the same |
| 34 | + chain as the synthesized one. |
| 35 | + |
| 36 | + The two reads run in parallel, so the flag closes over **both**: it clears on |
| 37 | + `Promise.allSettled`, and a REJECTED read counts as an answer. A deployment |
| 38 | + without the audit plugin 404s `sys_activity` and an object with |
| 39 | + `enable.feeds: false` 403s `sys_comment`; neither may pin the panel in a |
| 40 | + permanent spinner, which would be a worse bug than the one being fixed. The |
| 41 | + flag is keyed by `object:recordId` rather than being a plain boolean, so the |
| 42 | + first render of a record already reads as loading (no one-frame flash of the |
| 43 | + empty state) and navigating between records cannot show the previous record's |
| 44 | + settled answer. |
| 45 | + |
| 46 | + No tolerance was added at the consumer. The timeline still does not guess that |
| 47 | + "no items yet and just mounted" means loading — that guess is wrong the moment |
| 48 | + a record genuinely has no comments, and the signal belongs to whoever owns the |
| 49 | + fetch. Same shape as objectui#3165 / #3205: divergence converges at the |
| 50 | + producer. |
| 51 | + |
| 52 | +- 30ac2e1: `ToolPreview` stops advertising retired `ToolSchema` flags (objectui#3236). |
| 53 | + |
| 54 | + The metadata-admin tool preview painted a header strip of flag pills read |
| 55 | + straight off the raw draft: `Requires confirmation`, `Active` / `Disabled`, |
| 56 | + `built-in`, and the `category` tag. All four keys have been removed from |
| 57 | + `@objectstack/spec`'s `ToolSchema` — `requiresConfirmation` in the 16.x line |
| 58 | + (objectstack#3715, ADR-0033 §2) and `category` / `active` / `builtIn` in |
| 59 | + 17.0.0 (objectstack#3896 audit close-out). The schema is `.strict()` and now |
| 60 | + rejects each by name with an upgrade prescription, so no newly authored tool |
| 61 | + can carry them; verified against the `@objectstack/spec@17.0.0-rc.1` this repo |
| 62 | + depends on. |
| 63 | + |
| 64 | + New metadata could not reach these pills — but rows stored before the removals |
| 65 | + still carry the keys, and for those the preview kept rendering. That is the |
| 66 | + harmful direction, not a cosmetic one: |
| 67 | + |
| 68 | + - `Requires confirmation` advertised a safety pause that no execution path has |
| 69 | + ever performed. Nothing read the key — not the LLM tool set (a tool reaches |
| 70 | + the model as name/description/parameters only), not `ToolRegistry.execute`, |
| 71 | + not `POST /ai/tools/:name/execute`. A reviewer reading the preview saw a |
| 72 | + destructive tool marked as gated when it was not. The real gate is |
| 73 | + `action.ai.requiresConfirmation`, which the HITL approval queue reads. |
| 74 | + - `Disabled` claimed a tool had been withdrawn while `ToolRegistry.getAll()` |
| 75 | + kept handing it to the LLM and the execute route kept running it. |
| 76 | + |
| 77 | + Same shape as objectui#2962: a UI badge advertising a capability the runtime |
| 78 | + does not have. The pills are gone; the surviving header strip shows label, |
| 79 | + machine name and the `objectName` pill (`objectName` is still a live spec key), |
| 80 | + and nothing else in the preview changed — parameters table, example LLM call |
| 81 | + and output schema are untouched. |
| 82 | + |
| 83 | + New tests feed the preview a stale draft that still carries all four retired |
| 84 | + keys and assert none of them renders, so the pills cannot grow back: the names |
| 85 | + survive in the spec's tombstone guidance, which gives the next reader a |
| 86 | + plausible-looking reason to "restore" them. |
| 87 | + |
| 88 | +- Updated dependencies [825bbe3] |
| 89 | +- Updated dependencies [d2363e7] |
| 90 | +- Updated dependencies [a321fa4] |
| 91 | + - @object-ui/components@17.2.1 |
| 92 | + - @object-ui/fields@17.2.1 |
| 93 | + - @object-ui/i18n@17.2.1 |
| 94 | + - @object-ui/layout@17.2.1 |
| 95 | + - @object-ui/plugin-editor@17.2.1 |
| 96 | + - @object-ui/react@17.2.1 |
| 97 | + - @object-ui/types@17.2.1 |
| 98 | + - @object-ui/core@17.2.1 |
| 99 | + - @object-ui/data-objectstack@17.2.1 |
| 100 | + - @object-ui/auth@17.2.1 |
| 101 | + - @object-ui/permissions@17.2.1 |
| 102 | + - @object-ui/collaboration@17.2.1 |
| 103 | + - @object-ui/providers@17.2.1 |
| 104 | + |
3 | 105 | ## 17.2.0 |
4 | 106 |
|
5 | 107 | ### Minor Changes |
|
0 commit comments