feat(tasks): add artifact comments and mention activity - #76407
Conversation
Combine task artifact commenting in the desktop app with backend activity-feed delivery for comment mentions. Generated-By: PostHog Code Task-Id: 49201d1f-5d24-4117-b923-cc1d240c8ebc
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
🤖 CI report✅ Bundle size — no changeUncompressed size of every built Total: 65.51 MiB · no change No file changed by more than 1000 B. Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report ✅ Eager graph — within budgetHow much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy
🟢 Largest files eagerly shipped from
|
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 789 B | src/scenes/ChunkLoadErrorBoundary.tsx |
| 762 B | src/index.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 285.6 KiB | ../node_modules/.pnpm/posthog-js@1.409.5/node_modules/posthog-js/dist/rrweb.js |
| 267.7 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 235.5 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 231.5 KiB | ../node_modules/.pnpm/posthog-js@1.409.5/node_modules/posthog-js/dist/module.js |
| 154.3 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 105.3 KiB | src/lib/api.ts |
| 94.7 KiB | ../packages/quill/packages/quill/dist/index.js |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
✅ Toolbar bundle — eager 2.19 MiB within budget
What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.
| Metric | Size | Δ vs base | Budget |
|---|---|---|---|
| Eager (shipped) entry + static imports |
2.19 MiB · 17 files | no change | ████░░░░░░ 38.3% of 5.72 MiB |
| Deferred (lazy) | 2.08 MiB · 33 files | no change | n/a — loads on demand |
Loader dist/toolbar.js |
1.1 KiB | no change | █░░░░░░░░░ 5.8% of 19.5 KiB |
Largest eagerly-shipped chunks
| Size | File |
|---|---|
| 718.3 KiB | dist/toolbar/toolbar-app-FT4UJ3IP.css |
| 551.4 KiB | dist/toolbar/chunk-chunk-AGSGCCBT.js |
| 484.6 KiB | dist/toolbar/chunk-chunk-T44C2V5C.js |
| 133.6 KiB | dist/toolbar/chunk-chunk-KBLX73CM.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-T5KY5WYR.js |
| 71.0 KiB | dist/toolbar/toolbar-app-FKUW2FOM.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-27JL52RE.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-3JVI3ZTF.js |
| 20.9 KiB | dist/toolbar/chunk-chunk-HJ3ZJMTU.js |
| 12.2 KiB | dist/toolbar/chunk-chunk-PIK3PADE.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🔺 +1.3 KiB (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1381.30 MiB · 🔺 +1.3 KiB (+0.0%)
⚠️ Django migration SQL — 1 new migration to review
We've detected new migrations on this PR. Review the SQL output for each migration:
products/tasks/backend/migrations/0078_taskactivity_comment.py
BEGIN;
--
-- Add field comment to taskactivity
--
ALTER TABLE "posthog_task_activity" ADD COLUMN "comment_id" uuid NULL;
COMMIT;Last updated: 2026-08-02 10:54 UTC (875f8a0)
✅ Django migration risk — migration analysis complete
We've analyzed your migrations for potential risks.
Summary: 1 Safe | 0 Needs Review | 0 Blocked
✅ Safe
Brief or no lock, backwards compatible
tasks.0078_taskactivity_comment
└─ #1 ✅ AddField
Adding nullable field requires brief lock
model: taskactivity, field: comment
📚 How to Deploy These Changes Safely
AddField:
This operation acquires a brief lock but doesn't rewrite the table.
Deployment uses lock timeouts with automatic retries, so lock contention will cause retries rather than connection pile-up.
Last updated: 2026-08-02 10:54 UTC (875f8a0)
Validate task ownership for comment reads and writes, add whole-document and canvas comments, deep-link activity mentions to their exact thread, and bound task-wide comment polling. Generated-By: PostHog Code Task-Id: 49201d1f-5d24-4117-b923-cc1d240c8ebc
Avoid private cross-product model imports in comments API tests and prevent a task-run fixture from shadowing TestCase.run. Generated-By: PostHog Code Task-Id: 49201d1f-5d24-4117-b923-cc1d240c8ebc
Give the mutable nested API payload an explicit dictionary type so mypy accepts updating its task context. Generated-By: PostHog Code Task-Id: 49201d1f-5d24-4117-b923-cc1d240c8ebc
Run task-comment ownership validation through TeamAndOrgViewSetMixin.safely_get_object so standard permission checks remain intact and API schema generation can import the viewset. Generated-By: PostHog Code Task-Id: 49201d1f-5d24-4117-b923-cc1d240c8ebc
Record the task_id query parameter added to task-owned comment reads in the generated MCP tool schema snapshot. Generated-By: PostHog Code Task-Id: 49201d1f-5d24-4117-b923-cc1d240c8ebc
Problem
Agent output is reviewed in its artifacts, but feedback without a precise attachment point loses the context needed to act on it. Reviewers need to comment on exact text, image regions, or a whole artifact/canvas, discuss that feedback in threads, resolve it, and bring mentioned teammates directly back to the discussion.
Changes
CommentAPI, generated OpenAPI client, existing task activity model, mention composer/renderer, task thread APIs, and Quill primitives.Artifact anchors and thread state remain in
item_context; existing resource IDs remain the comment identity. No separate comment persistence model, forwarding endpoint, or notification system is introduced.How did you test this code?
git diff --checkpasses.Not in this PR
Comment-specific web/email notification destinations are unchanged.
👉 Stay up-to-date with PostHog coding conventions for a smoother review.
Automatic notifications
Docs update
No user-facing docs are affected.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
This combines artifact commenting and task-activity mention handling into one complete flow in the PostHog monorepo.
Created with PostHog Code