feat: bundled features — archived-emails all-sources view, ingestion-source details, advanced search, date-format preference#383
Open
kisst wants to merge 63 commits into
Open
Conversation
Adds vitest.config.ts and one smoke test per package, plus test/test:watch scripts. Dependency declared in package.json; install deferred to verification phase.
…bs-OU#372) Allow archived emails to record that the original Date header was missing or unparseable, rather than silently substituting the ingestion timestamp. Adds OriginalDateSource union and ArchivedEmail.originalDateSource.
Adds popover, calendar, range-calendar, date-picker, command, combobox, toggle-group, tabs, sheet, and tooltip components. No business-logic consumers yet; primitives only.
The Bulgarian locale ships in packages/frontend/src/lib/translations/bg/ and the settings page already lists it as a selectable language, but the type union omitted it, causing a svelte-check error on the settings page. Pre-existing on main; surfacing it during this PR's svelte-check runs.
|
All contributors have signed the CLA ✍️ ✅ |
Author
|
I have read the CLA Document and I hereby sign the CLA |
fee3251 to
ea371ca
Compare
Author
|
@wayneshn would appreciate your eyes on this when you have time — it's a chunky bundle but the integration fixes (5 commits) are small and isolated. Happy to split into per-feature PRs if you'd prefer. |
…efore insert Some IMAP/MIME-parsed emails contain U+0000 or unpaired UTF-16 surrogates in headers or decoded bodies. Postgres rejects these with error 22021 (invalid byte sequence for encoding UTF8), and the worker's retry loop then blocks the entire mailbox sync. Add a helper that strips NULs and replaces lone surrogates with U+FFFD, and apply it to every text field that goes into the archived_emails INSERT.
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.
Why a bundle
Started out wanting to test just
feat/archived-emails-view-all-sourcesagainst my own production archive (214k emails). Once that worked I tried to merge the other in-flight branches one by one and hit conflicts and regressions that only surface when these features run together. Sending them as a bundle so the integration fixes don't get split across separate PRs and reviewers can see the failure modes I had to resolve.What's in here
/dashboard/ingestions)0035_lonely_roulette.sqlIssues found while integrating
ArchivedEmailService.tsusesdesc()from drizzle-orm but the import was never added — only the cross-source list endpoint uses it, so it never tripped before the merge. Fix:5f1b723.formatDateTimeStorethrough (including patchingSearchResults.svelte, which the date-format branch didn't know about). Fix:be80056.Oldest,Newest,Last synccolumns were hardcoded totoLocaleDateStringwhileCreated atalready went throughformatDateStore. Inconsistent once date-format was in. Fix:9af3c79.start:workersinpackage.json. Reindex jobs sat inwaitingforever in my test. Fix:648170c.containsFilterexperimental feature wasn't enabled. Subject/from CONTAINS filters returned 4xx until I added aclient.updateExperimentalFeatures({ containsFilter: true })call inconfigureEmailIndex(). Fix:fee3251.What I tested
POST /v1/admin/reindex(scope=full): orchestrator enqueued 213,723 rows in 428 batches; indexing worker drains them withcontainsFilterenabled and the new filterable attributes liveNotes for maintainers
0035_lonely_roulette.sqland the Meilisearch settings update are required for advanced-search filtering. The reindex orchestrator in this PR is what populates the new fields on existing data.meilidatavolume, settings-update tasks can sit behind queued document tasks. In my testing I had to recreate the volume once to apply the new filterable attributes; the reindex worker handles it cleanly on a fresh index.