fix: complete pinned message lifecycle - #1
Merged
jjjhenriksen merged 6 commits intoJul 28, 2026
Merged
Conversation
…#133) * feat(embed): follow the host application theme * fix(embed): isolate host themes and refresh embedded assets * test(embed): prove theme matching across real browser origins * build(embed): refresh browser-verified web assets * build(embed): remove stale hashed web bundles --------- Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
* fix(embed): apply validated host palette before first paint * build(embed): refresh first-paint palette web assets --------- Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
…s-lifecycle # Conflicts: # apps/api/internal/webassets/dist/200.html # apps/api/internal/webassets/dist/_app/immutable/entry/app.C0jTAm08.js # apps/api/internal/webassets/dist/_app/immutable/nodes/0.erneJbxK.js # apps/api/internal/webassets/dist/_app/immutable/nodes/11.BPwHOykE.js # apps/api/internal/webassets/dist/_app/immutable/nodes/11.COwgNK6M.js # apps/api/internal/webassets/dist/_app/immutable/nodes/11.vvKR-XrD.js # apps/api/internal/webassets/dist/_app/immutable/nodes/12.D2jzbKVo.js # apps/api/internal/webassets/dist/_app/immutable/nodes/13.0lkaA9sE.js # apps/api/internal/webassets/dist/_app/immutable/nodes/3.BoPssj0u.js # apps/api/internal/webassets/dist/_app/immutable/nodes/4.B1Q5W4BL.js # apps/api/internal/webassets/dist/_app/immutable/nodes/4.CV83zLxh.js # apps/api/internal/webassets/dist/_app/immutable/nodes/4.D81lYOij.js # apps/api/internal/webassets/dist/_app/immutable/nodes/5.C04PopFT.js # apps/api/internal/webassets/dist/_app/immutable/nodes/5.DW2e0mkr.js # apps/api/internal/webassets/dist/_app/immutable/nodes/5.gnDXXEBJ.js # apps/api/internal/webassets/dist/index.html
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related: openclaw#117
What Problem This Solves
Fixes the remaining lifecycle gaps in the pinned-messages feature branch: pins could race with message deletion on PostgreSQL, disappear from exports, survive message deletion without a matching event, fail silently in thread UI, and remain visible in direct-message navigation.
Why This Change Was Made
This assistance branch merges current upstream
mainintocodex/pinned-messages, preserves Jacqueline's public pin API/event names and 100-pin limit, and addresses the five actionable ClawSweeper findings without expanding the feature contract.The backend now serializes PostgreSQL pin/delete changes, exports pins from both stores, and removes a pin in the same delete transaction before emitting
message.deleted. The UI surfaces pin failures, keeps the open pinned list reconciled after edits/deletes, and limits pin controls to channel conversations.Maintainer acceptance of shared pins as a durable public API/export/event contract remains a product decision for the original PR.
User Impact
Channel pins remain consistent across deletion, realtime updates, and exports. Pin failures are visible instead of silent, and direct-message views no longer expose unsupported pin controls.
Evidence
umask 0022; pnpm check— passedpnpm test:e2e tests/e2e/pinned-messages.spec.ts --project=chromium— 5 passedgo test ./apps/api/internal/store/sqlite ./apps/api/internal/store/postgres ./apps/api/internal/httpapi— passedpnpm generate:sqlc— passedpnpm typecheck && pnpm -r typecheck && pnpm lint && pnpm fmt:check && git diff --check— passedThe PostgreSQL integration suite compiles locally but skips without
CLICKCLACK_POSTGRES_TEST_DSN; hosted CI remains the authoritative PostgreSQL run. Exact-head screenshots were inspected locally for the visible thread error and absent desktop-DM pin controls; public CI and ClawSweeper proof should be refreshed on the original PR after this branch is accepted.AI-assisted: implementation, tests, and review were performed with Codex under human direction.