Skip to content

[sync] T6836 Recast computed backfill assignments to physical column types - #3620

Open
tea-artist wants to merge 1 commit into
developfrom
sync/ee-20260729-033958
Open

[sync] T6836 Recast computed backfill assignments to physical column types#3620
tea-artist wants to merge 1 commit into
developfrom
sync/ee-20260729-033958

Conversation

@tea-artist

@tea-artist tea-artist commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

🔄 Automated sync from EE repository.

238 commit(s) synced since last sync.

Authors

Included commits

  • T6836 Recast computed backfill assignments to physical column types (nichenqin)
  • fix(space): refine T6832 mobile navigation styles (Jun Lu)
  • fix(v2): derive lookup dbFieldType when pending rebuild has stale TEXT T6805 (nichenqin)
  • fix(v2): skip trashed tables in computed plans instead of dead-lettering T6830 (nichenqin)
  • fix(billing): resolve the billing cycle on the server instead of the browser T6788 (Uno)
  • fix(form): link Teable branding to homepage T6831 (nichenqin)
  • fix(sentry): load client Sentry via instrumentation-client so Turbopack builds report browser errors T6825 (teable-mini[bot])
  • fix(T6827): prevent duplicate node deletion requests (Jun Lu)
  • feat(v2): auto-index conditional lookup match columns T6826 (nichenqin)
  • fix(v2): keep scalar field-reference filters index-sargable T6821 (nichenqin)
  • T6823 default number formatting when lookup options omit it (nichenqin)
  • test(v2): cover manyOne number lookup rebuild backfill T6824 (nichenqin)
  • feat(security): symmetric encryption key rotation via cipher entry arrays T6475 (Boris)
  • feat(sdk): allow adding select options in link editor record creation T6683 (SkyHuang)
  • fix(v2): defer undo capture during table duplicate (nichenqin)
  • fix(admin): badge computed-outbox anomalies by problem group (nichenqin)
  • perf(v2): skip throwaway DomainError stacks and computed-backfill JIT compile T6811 (nichenqin)
  • fix(grid): keep column header interactive when all groups are collapsed T6673 (SkyHuang)
  • T6786 infer lookup multiplicity from persisted scalar storage (nichenqin)
  • fix(v2): refuse system column drops in dropColumnStatement T6809 (nichenqin)
  • fix(v2): resolve symmetric oneOne order column to the hosting FK column T6810 (nichenqin)
  • fix(v2): stop dropping __id when deleting a two-way oneOne link T6807 (nichenqin)
  • T6800 fix V2 selection record read fan-out (nichenqin)
  • T6799 perf(v2): skip unused work on value-preserving field convert (nichenqin)
  • feat(onboarding): first-run user onboarding flow with AI-driven setup (T6708)(T6671)(T6744) (Aries X)
  • feat(T6791): improve sign-up entry flow (Jun Lu)
  • fix(sdk): show record comments full width on mobile T6482 (teable-mini[bot])
  • fix(ssr): degrade invalid recordId query param on base table page T6773 (nichenqin)
  • fix(v2): dead-letter computed tasks stuck on trashed tables T6795 (nichenqin)
  • perf(v2): set-based isNotEmpty conditional residuals + cross-base dependent probe T6777 T6778 (nichenqin)
  • fix(markdown): align editor styles T6672 (Jun Lu)
  • fix(v2): keep grouped date sort across user lookup snapshots T6751 (nichenqin)
  • T6770 recast jsonb computed backfill assignments (nichenqin)
  • fix(v2): reject table.create not-null records before schema operation T6768 (nichenqin)
  • T6767 avoid jsonb casts on leftover text lookup titles (nichenqin)
  • T6765 preserve lookup dbFieldType on pending rebuild (nichenqin)
  • perf(v2): skip unused columns in field-delete undo snapshot T6766 (nichenqin)
  • T6761 serialize only the added view when persisting duplicate (nichenqin)
  • fix(v2): restore field identity on legacy unique constraint errors T6758 (nichenqin)
  • T6752 fix automation date filter getDatetimeFormatting crash (nichenqin)
  • fix(v2): stop computed activity advisory-lock thundering herd (try-once reconcile + contention log + opt-in async projection) T6753 (nichenqin)
  • fix: skip legacy pending fields in v2 paste (nichenqin)
  • feat(chat): context usage ring in input footer + persist compaction divider T6757 (Pengap)
  • feat(skills): add space and system skill scopes with sandbox manifest sync T6559 (Uno)
  • T6748 perf(v2): skip search-doc rewrites, probe small insert cascades, slim match projection (nichenqin)
  • fix(v2): cap computed advisory locks on wide host fan-out T6747 (nichenqin)
  • feat(v2): isolate oversized computed cells instead of dead-lettering T6728 (nichenqin)
  • T6734 recast computed backfill assignments to physical column types (nichenqin)
  • perf(v2): skip one-level clamp for explicit-seed lookup fanout T6706 (nichenqin)
  • fix(ee): enforce access-token scope under authority matrix T6724 T6691 (teable-mini[bot])
  • fix(v2): skip stale non-link computed edges T6729 (nichenqin)
  • fix: optimize app product page SEO T6732 (Gary Guangyu Li)
  • feat(analytics): meta pixel on auth pages + signup consent/geo stamping T6731 (Bieber)
  • fix(ai-agent): present_files per-chat isolation T6565 T6726 (Pengap)
  • feat(storage): upload-time and sign-time attachment cache-control T6721 (Boris)
  • feat(cold-archive): prefix-resume with per-bucket verified deletion T6528 (Uno)
  • T6706 lock computed cascades per record and keep small chains in one stage (nichenqin)
  • fix(v2): stop claiming leftover csv imports as dottea repairs T6720 (nichenqin)
  • fix(v2): forward aggregate through table-query-ops repository wrapper T6719 (nichenqin)
  • fix(v2): prevent computed outbox stack overflow on large batches T6713 (nichenqin)
  • T6705 reject delete that would empty a required link (nichenqin)
  • fix(v2): stop claiming leftover CSV imports as DotTea repairs T6711 (nichenqin)
  • ci: run community e2e suite in v2 mode by default T6703 (teable-mini[bot])
  • T6694 route duplicate reads through v2 (nichenqin)
  • fix(sdk): restore link candidate filter when switching back to all list T6679 T6680 (SkyHuang)
  • perf(v2): pipeline delete-stream chunk finalization off the critical path T6692 (nichenqin)
  • perf(v2): page ids-only selection sweeps by 10k instead of the public limit cap T6688 (nichenqin)
  • feat(aggregation): route row-count, aggregation and group-points through v2 queries T6684 (nichenqin)
  • feat: cold storage archive for workflow runs and audit logs (T6528) (Uno)
  • perf(v2): ids-only reads for selection id resolution and delete chunk loads T6686 (nichenqin)
  • fix(v2): only notify user fields on active assignment, coalesce notify bursts T6663 (Uno)
  • perf(v2): project duplicated view from the command result instead of reloading the table T6682 (nichenqin)
  • fix(sdk): strip unreadable view-default sort/filter when inlining record subscription T6678 (nichenqin)
  • fix(notification): stop sending BYODB database health notifications to the notification center T6681 (nichenqin)
  • perf(v2): skip record undo snapshots for value-preserving field conversions T6676 (nichenqin)
  • fix(archive): route record archive deletes through V2FeatureGuard T6668 (nichenqin)
  • perf(v2): probe multi-level stages, restore orphaned deferrals, fold activity projections T6648 (nichenqin)
  • fix(v2): compute search hit index on the v2 page ids instead of the legacy doc-id scan T6669 (nichenqin)
  • fix(automation): floor how often scheduled and email triggers may fire T6650 (Uno)
  • fix(v2): skip user field notifications for import and table duplicate T6662 (nichenqin)
  • fix(v2): close provisioning-wait gaps in table findOne T6666 (nichenqin)
  • fix(v2): exclude deleted users from write-path user lookup, drop dead phone match T6661 (nichenqin)
  • fix(v2): keep view realtime state consistent (nichenqin)
  • T6660 fix(v2): wait out table provisioning instead of flapping Table not found (nichenqin)
  • fix(v2): allow user field values for non-collaborator members T6661 (nichenqin)
  • fix(v2): probe view order on the transaction connection during record insert (nichenqin)
  • fix(v2): verify outbox persistence and guard zero-row merges against silent continuation loss T6648 (nichenqin)
  • T6651 Sync Grid view sort and group state in realtime (nichenqin)
  • feat(analytics): onboarding experiment gating (XE1/XE2/XE4/XE5) — signup-time assignment, exposure, kill switches T6654 (Bieber)
  • fix(base-node): skip non-ready tables when reconciling sidebar nodes T6656 (nichenqin)
  • fix(grid): keep truncated cell text within maxWidth and stop double ellipsis (SkyHuang)
  • feat: app builder github sync T6366 (SkyHuang)
  • feat(analytics): aggregated build ops, signup identity/attribution, api adoption events T6644 (Bieber)
  • fix(record): group user fields by id+title identity in v2 group queries T6626 (SkyHuang)
  • T6641 fix(v2): resolve LastModifiedBy user names in record reads (nichenqin)
  • perf(v2): defer paused computed backlog out of the claim hot scan T6512 (nichenqin)
  • fix(v2): stop reusing committed unit-of-work transactions T6635 (nichenqin)
  • test(v2): cover concurrent wide/narrow cascade convergence T6629 (nichenqin)
  • fix(v2): lock all computed cascades in the batch-shard namespace T6637 (nichenqin)
  • fix(v2): restore v1 collaborator scoping for user field value resolution T6640 (nichenqin)
  • fix(v2): skip read-only BYODB targets in computed outbox redrive (nichenqin)
  • perf(v2): back off activity advisory lock retries exponentially T6638 (nichenqin)
  • fix(chat): declare stream identity first and keep binding transient to stop duplicate rows T6636 (Pengap)
  • fix(v2): purge computed dead letters on permanent delete and add anomaly discard-group T6634 (nichenqin)
  • fix(admin): count only routable anomalies in computed outbox monitoring (nichenqin)
  • fix(v2): bound computed activity projection waits to break cross-connection deadlock (nichenqin)
  • perf(v2): relay-claim cascade continuations inside the stage transaction T6630 (nichenqin)
  • fix(security): block private-network SSRF in data-db preflight (GHSA-p7jc-ccj3-j23x) (nichenqin)
  • feat(admin): configurable and hot-adjustable computed outbox claim concurrency T6627 (nichenqin)
  • feat(T6371): group space collaborators by principal (Jun Lu)
  • fix(v2): preserve field descriptions on base import and default EE/AI e2e to v2 T6522 (nichenqin)
  • fix(backend): retitle raw DomainError POJO Sentry events T6503 (nichenqin)
  • feat(byodb): connection health lane with read-only detection, fail-fast, breaker and owner notify T6623 (nichenqin)
  • fix(v2): absorb read-only ledger failures into deferred wakeups and classify them (nichenqin)
  • fix(v2): accept legacy variable-length record ids in RecordId parse T6621 (nichenqin)
  • fix(v2): normalize computed outbox error signatures to stop group fragmentation T6622 (nichenqin)
  • perf: reduce v2 id-keyed record mapping overhead (nichenqin)
  • fix(v2): surface orphaned BullMQ refs behind computed outbox failed count T6620 (nichenqin)
  • fix(field): guard shared db column on field delete and reserve names from live fields T6619 (nichenqin)
  • fix(byodb): make space data database settings read-only T6618 (nichenqin)
  • fix(v2): drop pending computed tasks on permanent table delete, classify stale table refs T6617 (nichenqin)
  • fix(v2): batch computed field backfills and expose timeout config T6616 (nichenqin)
  • fix(v2): project swapped self-table filter refs into pruned propagation source T6615 (nichenqin)
  • fix(v2): degrade dangling computed aggregation sources to hasError-like NULL T6614 (nichenqin)
  • T6606 feat(v2): convert dry run for field conversion plan (nichenqin)
  • perf(v2): scale stage budgets up for provably-small computed runs T6611 (nichenqin)
  • perf(v2): cut computed outbox claim and wakeup chatter T6611 (nichenqin)
  • perf(v2): batch computed locks, request-scoped meta caching, lean delete/create hot paths T6610 (nichenqin)
  • fix(v2): normalize undefined realtime set values to null T6608 (nichenqin)
  • fix(admin): scan full failed retention in outbox queue browser and search anomalies server-side (nichenqin)
  • feat(admin): runtime-adjustable computed worker concurrency + data_constraint failure kind (nichenqin)
  • fix(v2): classify integrity constraint violations as non-retryable dead letters T6609 (nichenqin)
  • fix(field): treat longText options as their own schema in field options unions T6606 (nichenqin)
  • fix: prevent conditional rollup field editor crash on cold start T6607 (nichenqin)
  • test(v2): harden orphan one-many link field deletion coverage T6538 (nichenqin)
  • fix(mail): report user SMTP rejections as 424 upstream failures T6592 (Uno)
  • fix(share): keep already-converted form cover/logo urls intact T6604 (teable-mini[bot])
  • fix(auth): improve mobile login layout T6447 (Jun Lu)
  • fix(v2): collect stage output seed groups without dirty temp table T6600 (nichenqin)
  • feat(admin): filterable BullMQ job browser for computed outbox queue T6601 (teable-mini[bot])
  • fix(v2): fall back to lateral path for unresolvable conditional field-reference groups T6599 (nichenqin)
  • feat(backend): allow api keys to read compute activity (nichenqin)
  • perf(v2): select paged record reads through a narrow id subquery T6593 (nichenqin)
  • fix(v2): normalize legacy view column metadata T6597 (nichenqin)
  • T6595 append fields after sparse view metadata (nichenqin)
  • feat(admin): surface computed pause backlog and BullMQ global pause in monitoring (nichenqin)
  • feat(app): customizable site favicon, title and description for generated apps T6366 (SkyHuang)
  • fix(v2): bounded computed pauses with lease-aware release and BYODB dual-side lifecycle (nichenqin)
  • fix(admin): hide and refuse orphaned computed-outbox anomalies T6589 (teable-mini[bot])
  • fix: restore complete computed dead-letter groups T6591 (nichenqin)
  • T6502 skip lookup-of-link fields in filter-link-records (nichenqin)
  • refactor(admin): computed-outbox page UX and failure/dead-letter clarity T6590 (teable-mini[bot])
  • feat: recover computed dead letters in ordered batches T6587 (nichenqin)
  • fix(field): report stored pending state on v2 field read endpoints T6581 (teable-mini[bot])
  • fix: treat repeated record deletes as idempotent T6586 (nichenqin)
  • fix(v2): restore conditional lookup fields from trash T6580 (teable-mini[bot])
  • feat(automation): add runtime AI endpoint with attachment support for scripts T6414 (Uno)
  • fix(billing): unify v2 usage-limit error contract and paywall UX T6472 (Aries X)
  • perf(chat): parallel best-effort attachment double-write and scan-free upload quota gate (Uno)
  • fix(secrets): boot with warnings instead of refusing on missing secret env vars T6578 (Boris)
  • fix(config): stop the Joi default shadowing the cache provider fallback T6582 (Boris)
  • test: cover cross-base linked-record picker metadata T6572 (nichenqin)
  • fix(backend): degrade unsupported computed field references T6576 (nichenqin)
  • fix: remint shared view ids when duplicating tables (nichenqin)
  • T6571 Fix scalar lookup isNoneOf filter SQL (nichenqin)
  • fix(v2): ghost-table hardening and conditional propagation materialization T6526 (teable-mini[bot])
  • T6568 Preserve incomplete view filter conditions (nichenqin)
  • fix(share): skip foreign authority matrix on link candidate reads T6548 (nichenqin)
  • fix(v2): emit valid ops when clearing view filters (nichenqin)
  • chore(observability): upgrade @opentelemetry packages to stable 2.10 / experimental 0.221 T6562 (Pengap)
  • Revert "fix(db): give node-pg the UTC contract for naive timestamps T6493" (Uno)
  • fix(v2): fence BYODB spaces out of shared outbox and defuse post-switch zombie backlog T6526 (teable-mini[bot])
  • fix(db): give node-pg the UTC contract for naive timestamps T6493 (Uno)
  • fix(v2): default-on stage budgets and tolerant field-reference filters T6526 (teable-mini[bot])
  • feat(v2): split computed update plans into budget-bounded frontier stages T6526 (teable-mini[bot])
  • fix(observability): bound runaway traces and drop duplicate request spans T6553 (Pengap)
  • feat(admin): in-app announcement system T6412 (Uno)
  • fix(share): align table share permission with view share under authority matrix T6541 (Aries X)
  • feat(T6549): update changelog banner to App Builder visual editing (Jocky Zhou)
  • T6544 T6545 fix view filter and legacy column metadata state (nichenqin)
  • T6546 perf(v2): reduce hybrid lookup propagation latency (nichenqin)
  • fix(ai): report swallowed ai-proxy billing and ai-agent stream failures to Sentry T6547 (Pengap)
  • fix(v2): allow column cleanup after linked table deletion (nichenqin)
  • test(v2): add v1-parity e2e coverage for drifted contract cases T6520 (teable-mini[bot])
  • fix(user): backfill default avatar paths via migration instead of admin system check T6492 (Aries X)
  • fix(sdk): tolerate missing date filter formatting (nichenqin)
  • refactor(cold-archive): extract a shared kernel from the two cold subsystems T6528 (Uno)
  • feat(admin): add system check to detect and repair users without avatars T6492 (Aries X)
  • feat(auth): remove hardcoded secret fallbacks and add JWT secret rotation T6490 (Boris)
  • perf(realtime): compress the ShareDB websocket with permessage-deflate T6487 (Pengap)
  • T6507 fix(byodb): shared-rows retry, cleanup, pause isolation, search degrade (nichenqin)
  • fix(v2): await RecordsDeleted trash projections before undo (nichenqin)
  • fix(record): stop writing record history for imported and duplicated records T6524 (Aries X)
  • fix(byodb): run migration worker in-process with slim module (nichenqin)
  • chore(cold-archive): unify cold kill-switch envs into BACKEND_STORAGE_COLD_ARCHIVE_DISABLED T6529 (SkyHuang)
  • feat(T6468): optimize mobile attachment preview (Jun Lu)
  • feat(sdk): improve mobile record details T6435 T6483 (Jun Lu)
  • T6500 Cast computed backfill DISTINCT comparisons (nichenqin)
  • T6511 normalize V2 empty cell writes to null (nichenqin)
  • fix(v2): strip null link titles on empty foreign primary T6509 (nichenqin)
  • fix(v2): restore V1 link single/multi cell shape compatibility T6510 (nichenqin)
  • fix(v2): accept empty-primary link title null rewrite T6508 (nichenqin)
  • fix(v2): normalize empty cell values to null on write paths T6520 (teable-mini[bot])
  • T6518 Normalize V2 rating field conversions (nichenqin)
  • T6514 Chunk JSON formula cascades through materialized CTEs (nichenqin)
  • perf(app): parallelize base page SSR prelude and dedupe table-list fetch T6384 (Aries X)
  • fix(v2-search): review fixes for the pg_bigm/pg_trgm generated-document search path (teable-mini[bot])
  • T6420 migrate View APIs to v2 (nichenqin)
  • T6519 safely convert invalid calendar dates in V2 (nichenqin)
  • fix(v2): reject calendar-invalid date values T6517 (nichenqin)
  • fix(v2): round rating typecast into strict domain T6515 (nichenqin)
  • T6495 fix projected record read query extra regression (nichenqin)
  • T6463 trigger automations when watched formula values change (nichenqin)
  • feat(app): entry URLs for pinned bases and tables T6488 (Aries X)
  • perf(automation): single-pass trigger matching with cached subscription snapshots T6476 (Uno)
  • feat(t6499): update changelog banner to GPT 5.6 Price Cuts in Teable (Jocky Zhou)
  • feat(T6410): improve app publish status and version history (Jun Lu)
  • feat: record archive & table trash record viewer T6204 T6343 (SkyHuang)
  • fix(v2): attribute DomainError stacks for Sentry grouping (nichenqin)
  • perf(app): prefetch base entry URLs so base-list clicks skip the redirect chain T6488 (Aries X)
  • T6411 Pure V2 record read via query plugin (no hybrid snapshot) (nichenqin)
  • fix(v2): localize v2 errors via throw-site localization T6310 (Uno)
  • feat(t6397): remove generation legacy cutover; drop unattributed task runs, base_id NOT NULL (Uno)
  • feat(billing): net-arrears credit gates with mid-run overage grace T6466 (Pengap)
  • feat(admin): AI generation queue monitoring console T6465 (Uno)
  • perf(sdk): shrink the initial record window to 64 rows, aligned explicitly (Aries X)
  • T6469 serialize clear background tasks (nichenqin)
  • fix(test): renew invalid shared e2e sessions T6480 (nichenqin)
  • feat(app): show main-area skeletons while base page chunks load T6409 (Aries X)
  • fix(record): switch socket snapshot-bulk to POST body and surface socket errors T6479 (Boris)
  • fix(app): collapse the expanded chat panel when clicking a sidebar node T6478 (Aries X)
  • perf(app): warm the table chunk and base page bundle from the space page T6471 (Aries X)
  • feat(compute-activity): simplify panel for T6394 (Jun Lu)
  • feat(share): add mobile share actions (T6364) (Jun Lu)
  • feat(app): allow removing table and base emoji icons T6455 (SkyHuang)
  • fix(sdk): keep select tags visible after single/multi convert T6459 (nichenqin)
  • fix(grid): patch group collapse/expand in place instead of full refresh T6323 (SkyHuang)
  • feat(billing): seat confirmation before invites and role changes T6407 (SkyHuang)

Latest source commit: teableio/teable-ee@5984354

This PR was automatically created by the sync workflow.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5d24ae0c57

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +287 to +288
const userCount = members.filter((m) => m.principalType === PrincipalType.User).length;
if (await confirmSeat({ role: role as IRole, count: userCount, action: 'invite' })) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Count department members in the seat delta

When the organization selection contains only departments, userCount is zero, so useSeatConfirm returns immediately and skips both the cloud billing confirmation and the EE license limit. Department collaborators grant access to their users—the backend includes a user's organization departments when resolving collaborators—so assigning a billable role to a department can consume multiple seats. Resolve the department's newly billable members instead of filtering departments out; the same zero-seat assumption is present in the base invitation and department role-change handlers.

Useful? React with 👍 / 👎.

Comment on lines 267 to +269
onCreate={async (ro) => {
if (!(await confirmSeat({ role: ro.role, count: ro.emails.length, action: 'invite' }))) {
return false;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Gate email invitations using the actual seat increase

On an EE instance, ro.emails.length is not necessarily the number of new seats. For example, inviting a user who is already billable through another base or space creates a new collaborator without increasing the instance-wide billable-user count. If the instance is at its seat limit, this calculation rejects that valid invitation because seats + emails.length exceeds the limit. The confirmation needs a server-derived count of newly billable users; the base email flow has the same issue.

Useful? React with 👍 / 👎.

Comment on lines +243 to +245
onUpdate={async (invitationId, role) => {
if (await confirmSeat({ role, count: 1, action: 'link' })) {
updateInviteLink({

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid charging a seat for billable-to-billable link updates

Updating an existing invitation link from one billable role to another, such as Creator to Editor, does not add a collaborator or consume a seat—the backend only updates the invitation row. Nevertheless this always checks with count: 1, so an EE instance at its seat limit cannot make that role adjustment, and cloud users receive an inaccurate bill-increase confirmation. Compare the existing link role and apply a positive delta only when the transition actually introduces billable access; the base-link handler repeats this behavior.

Useful? React with 👍 / 👎.

const { confirm, alert } = useConfirm();
const queryClient = useQueryClient();

const isPaidSpace = isCloud && level != null && level !== BillingProductLevel.Free;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Wait for the cloud billing level before allowing the action

On Cloud, level is undefined while useBillingLevel is still fetching, and it remains undefined if that query fails. This classifies the space as unpaid; because isEE is also false, the callback falls through to true. A paid customer who submits an invitation or role change before the usage query resolves therefore bypasses the required bill-increase confirmation. Await or block on the billing query rather than treating an unknown level as Free.

Useful? React with 👍 / 👎.

queryFn: () => getInstanceUsage().then((res) => res.data),
staleTime: 0,
})
.catch(() => undefined);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Do not fail open when the EE usage request fails

When the instance-usage request fails, this catch converts the error to undefined, leaving seatLimit absent and allowing the callback to return true. During any transient usage-service or network failure, the self-hosted seat-limit dialog and the stated hard stop are therefore bypassed, and the billable mutation is attempted without knowing whether capacity remains. Surface the failure or fail closed instead of silently authorizing the action.

Useful? React with 👍 / 👎.

@coveralls

coveralls commented Jul 29, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 31371708818

Coverage at 56.749% (no base build to compare)

Details

  • Coverage remained the same as the base build.
  • Patch coverage: Could not be determined — this PR's diff is too large for GitHub to return (406 error at GitHub).
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 70065
Covered Lines: 39761
Line Coverage: 56.75%
Relevant Branches: 11761
Covered Branches: 9275
Branch Coverage: 78.86%
Branches in Coverage %: No
Coverage Strength: 2683.25 hits per line

💛 - Coveralls

@tea-artist tea-artist changed the title [sync] feat(billing): seat confirmation before invites and role changes T6407 [sync] fix(grid): patch group collapse/expand in place instead of full refresh T6323 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from 5d24ae0 to f0f79a9 Compare July 29, 2026 04:27
@tea-artist tea-artist changed the title [sync] fix(grid): patch group collapse/expand in place instead of full refresh T6323 [sync] fix(sdk): keep select tags visible after single/multi convert T6459 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from f0f79a9 to e600e6e Compare July 29, 2026 05:57

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e600e6e93d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

return;
}
if (knownCount > 0) {
ctx.nextGroupPoints.push({ type: GroupPointType.Row, count: knownCount });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore nested headers when expanding a parent

When a multi-level group's parent is collapsed, its descendant headers are removed from groupPoints; re-expanding that parent here restores only one aggregate row block and cannot reconstruct those headers. The locally patched state therefore flattens the parent, and useGridAsyncRecords subsequently caches that malformed structure, so on a slow or failed fresh delivery the child groups remain missing and cannot be expanded or collapsed. Preserve the cached subtree for parent expansion, or avoid applying the in-place expansion when only an aggregate count is available.

Useful? React with 👍 / 👎.

// deliveries re-send a structurally identical list on every page (and
// after an exact local collapse patch): keep the previous reference so
// the grid does not rebuild its O(total rows) linear layout for nothing
setGroupPoints((prev) => (isEqual(prev, freshGroupPoints) ? prev : freshGroupPoints));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Refill row counts on equal server deliveries

After a same-view filter, sort, or row-hiding search change, the layout effect clears groupRowCounts; if the authoritative delivery has structurally equal group points—which is common when sorting within groups or when a filter preserves each group's count—this equality branch retains the old state reference, so the effect that collects counts never runs again. Collapsing a group then omits its now-missing count, and re-expanding it takes the unknown-size path that drops every loaded row behind it until another delivery arrives. Refresh the count cache from every authoritative delivery even when the React layout state can retain its reference.

Useful? React with 👍 / 👎.

@tea-artist tea-artist changed the title [sync] fix(sdk): keep select tags visible after single/multi convert T6459 [sync] feat(app): allow removing table and base emoji icons T6455 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from e600e6e to 49b46d0 Compare July 29, 2026 07:30
@tea-artist tea-artist changed the title [sync] feat(app): allow removing table and base emoji icons T6455 [sync] feat(share): add mobile share actions (T6364) Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from 49b46d0 to d6ab6e0 Compare July 29, 2026 10:03
@tea-artist tea-artist changed the title [sync] feat(share): add mobile share actions (T6364) [sync] feat(compute-activity): simplify panel for T6394 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from d6ab6e0 to bee7cb1 Compare July 29, 2026 11:24

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bee7cb196b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

})
}
onCreate={async (role) => {
if (await confirmSeat({ role, count: 1, action: 'link' })) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Do not reserve an EE seat when creating an invitation link

On an EE instance already at its seat limit, this count: 1 makes useSeatConfirm reject creating a billable-role link even though link creation consumes no seat: InvitationService.generateInvitationLink only creates the invitation, while a collaborator is added later by acceptInvitationLink. The eventual accepter may also already be billable, so capacity cannot be determined at link-creation time; retain the Cloud warning but do not apply the EE seat-delta gate here. The space-link creation handler has the same problem.

Useful? React with 👍 / 👎.

const isInIframe = useIsInIframe();
const [dismissed, setDismissed] = useState(false);

if (!isHydrated || !isMobile || isInIframe || dismissed) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Hide the mobile operation bar for explicit embed URLs

When a ?embed=... share URL is opened outside an actual iframe on a viewport at or below 640px, isInIframe is false and this condition renders the fixed edit/save bar. The share view components consistently treat the query parameter itself as embed mode and suppress their headers, so a direct embed preview or new-tab embed now gains an operation overlay despite requesting chrome-free embed output. Check router.query.embed here in addition to the window iframe state.

Useful? React with 👍 / 👎.

const handleUpdateRole = useCallback(
(role: IRole, item: CollaboratorItem) => {
async (role: IRole, item: CollaboratorItem) => {
const addedSeats = item.type === PrincipalType.User && !item.billable ? 1 : 0;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Derive role-change deltas from populated billing data

For the base and space collaborator-list responses implemented in this tree, CollaboratorService.getListByBase and getListBySpace never populate the optional billable property, so every user reaches this expression with item.billable === undefined and is treated as a new seat. Consequently, changing an already billable user from Creator to Editor shows a false Cloud cost-increase confirmation and is blocked entirely on an EE instance at its seat limit. Populate the billing status or obtain the actual server-side seat delta before gating the role update; the invitation-dialog role handlers repeat this assumption.

Useful? React with 👍 / 👎.

@tea-artist tea-artist changed the title [sync] feat(compute-activity): simplify panel for T6394 [sync] perf(app): warm the table chunk and base page bundle from the space page T6471 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from bee7cb1 to f2f75f1 Compare July 29, 2026 13:11

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f2f75f1457

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +25 to +26
if (connection?.saveData || connection?.effectiveType === '2g') {
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Skip prefetching on slow-2g connections

When the Network Information API reports effectiveType === 'slow-2g' and data saver is disabled, this condition still schedules the heavy Table chunk download. Since slow-2g is an explicit effective-connection type and is slower than 2g, the users most affected by this speculative download bypass the protection described by the hook; exclude both 2g and slow-2g before warming the bundles.

Useful? React with 👍 / 👎.

@tea-artist tea-artist changed the title [sync] perf(app): warm the table chunk and base page bundle from the space page T6471 [sync] fix(app): collapse the expanded chat panel when clicking a sidebar node T6478 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from f2f75f1 to a937e10 Compare July 29, 2026 14:21
@tea-artist tea-artist changed the title [sync] fix(app): collapse the expanded chat panel when clicking a sidebar node T6478 [sync] fix(record): switch socket snapshot-bulk to POST body and surface socket errors T6479 Jul 29, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from a937e10 to 0985fee Compare July 29, 2026 23:57
@tea-artist tea-artist changed the title [sync] fix(record): switch socket snapshot-bulk to POST body and surface socket errors T6479 [sync] feat(app): show main-area skeletons while base page chunks load T6409 Jul 30, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from 0985fee to 7a06430 Compare July 30, 2026 00:11
@tea-artist tea-artist changed the title [sync] feat(app): show main-area skeletons while base page chunks load T6409 [sync] fix(test): renew invalid shared e2e sessions T6480 Jul 30, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from 7a06430 to 0fe137f Compare July 30, 2026 00:23
@tea-artist tea-artist changed the title [sync] fix(test): renew invalid shared e2e sessions T6480 [sync] T6469 serialize clear background tasks Jul 30, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from 0fe137f to becce22 Compare July 30, 2026 00:25
@tea-artist tea-artist changed the title [sync] T6469 serialize clear background tasks [sync] perf(sdk): shrink the initial record window to 64 rows, aligned explicitly Jul 30, 2026
@tea-artist
tea-artist force-pushed the sync/ee-20260729-033958 branch from becce22 to d75e6a3 Compare July 30, 2026 03:56
@tea-artist tea-artist changed the title [sync] perf(sdk): shrink the initial record window to 64 rows, aligned explicitly [sync] feat(admin): AI generation queue monitoring console T6465 Jul 30, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

27 similar comments
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

…types

Synced from teableio/teable-ee@5984354

Co-authored-by: Aries X <caoxing9@gmail.com>
Co-authored-by: Bieber <artist@teable.io>
Co-authored-by: Boris <boris2code@outlook.com>
Co-authored-by: Gary Guangyu Li <gary@teable.ai>
Co-authored-by: Jocky Zhou <jocky@teable.ai>
Co-authored-by: Jun Lu <hammond@teable.io>
Co-authored-by: Pengap <penganpingprivte@gmail.com>
Co-authored-by: SkyHuang <sky.huang.fe@gmail.com>
Co-authored-by: Uno <uno@teable.ai>
Co-authored-by: nichenqin <nichenqin@hotmail.com>
Co-authored-by: teable-mini[bot] <310066019+teable-mini[bot]@users.noreply.github.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants