feat(projects): project-less tasks via private personal project (+ requestIdleCallback polyfill fix)#5
Merged
Conversation
added 2 commits
May 18, 2026 17:13
…roject Tasks no longer require picking a project. A per-user private "My Tasks" project is lazily created server-side (hidden from normal project lists, owner-only ADMIN member, Secret network) and reused so project-less tasks need NO issue-schema change — they get states, custom fields, layouts, etc. for free. Backend (Inc1): Project.is_personal + personal_owner + migration 0126; GET workspaces/<slug>/projects/personal/ get-or-create endpoint mirroring the create() bootstrap; exclude is_personal from the normal project list/list_detail (still reachable by pk for issue CRUD). Frontend (Inc2): projectService.getPersonalProject; sidebar "My Tasks" entry (workspace.ts + sidebar-item staticItems + ce icon); /my-tasks route resolves the personal project and redirects to its issues page (reuses 100% of existing issue UI + create flow); i18n en/zh. Verified end-to-end against the local stack: migration applied, endpoint 200 creating a correct bucket, idempotent, excluded from the normal project list.
Pre-existing bug, unrelated to the personal-tasks feature. The repo ships a requestIdleCallback/cancelIdleCallback polyfill in core/lib/polyfills but no module ever imported it, so it was dead code: WebKit/Safari < 17.4 crashed in any virtualized list (render-if-visible-HOC's unguarded window.requestIdleCallback). Fix: side-effect import "@/lib/polyfills" in app/entry.client.tsx so the existing polyfill runs before any component mounts — fixes it globally, no new code, HOC left untouched.
Owner
Author
|
Deployed to production 2026-05-19 (user-authorized). Prod line |
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.
Round 1 — Personal Tasks (Asana-style project-less tasks)
Tasks no longer require picking a project. A per-user private "My Tasks" project is lazily created server-side and reused, so project-less tasks need no issue-schema change — they inherit states, custom fields, layouts, the create flow, everything.
Backend (Inc1) —
a7f1039e66Project.is_personal+personal_owner+ migration0126(additive, single leaf on0125).GET workspaces/<slug>/projects/personal/— get-or-create, mirrors thecreate()bootstrap (DEFAULT_STATES + ADMIN ProjectMember + identifier), Secret network, owner-only.is_personalfrom the normal project list/list_detail (still reachable by pk for issue CRUD + the My Tasks view).Frontend (Inc2) —
a7f1039e66projectService.getPersonalProject; sidebar My Tasks entry;/my-tasksroute resolves the personal project and redirects to its issues page (reuses 100% of existing issue UI + create flow); i18n en/zh.Verified end-to-end against the local stack: migration
0126applied, endpoint 200 creating a correct bucket (Secret / ADMIN / identifierMT…), idempotent, excluded from the normal project list.Independent fix —
3cdae19e3cPre-existing bug, unrelated to the feature: the repo ships a
requestIdleCallback/cancelIdleCallbackpolyfill incore/lib/polyfillsthat no module imported → dead code → WebKit/Safari < 17.4 crashed in any virtualized list. Fix = side-effect import atapp/entry.client.tsx; existing polyfill now runs globally, HOC untouched. Kept as a separate commit.Notes
6d750a9112; base =feature/lark-oauth-provider(repo convention).