Skip to content

Improvement: Projects/Documents/Products low-severity gaps (sharing auto-save model, Spend currency, team-id validation, create-task toast wording, raw author id, PPT double-download, create-wizard review image) #2088

Description

@yannickmonney

Area / route
A batch of confirmed low-severity projects-core / projects-files / knowledge-docs / knowledge-entries defects, each independently fixable. Grouped as polish; itemized below.

Sites

  • [52] Project Overview Sharing controls auto-save on change while identity uses a global Save bar (inconsistent save model; no Save affordance for visibility; diverges from the F3 guide)
    • Evidence: project-sharing-section.tsx:125-134 (commit→applySave immediate), :136-155 (handleOwningTeamChange/handleSharedTeamsChange call commit on every change); contrast project-overview.tsx:127-136 (identity uses useFormEditor + useRegisterActiveEditor global Save bar)
  • [54] Project Metrics "Spend" KPI and Daily-spend chart show a bare number with no currency symbol (local formatCents ignores the canonical formatCostCents helper)
    • Evidence: project-metrics-page.tsx:112-117 (formatCents — no currency), :370-372 (StatCard label 'metrics.cost', value={formatCents(totals.cost)}), :493 (chart valueFormatter formatCents(v*100)); en.json tasks.metrics.cost = 'Spend ({days}d)'
  • [55] project sharing mutations accept non-existent/cross-org team IDs without validation (PROJECT_TEAM_INVALID defined but never thrown)
    • Evidence: convex/projects/mutations.ts:245-260 (validateSharing — no team-existence query) and :549 (updateProjectSharing calls only validateSharing); grep shows PROJECT_TEAM_INVALID has zero throw sites in convex/ (only error_codes.test.ts:116); client handler references it in project-sharing-section.tsx:104-108
  • [59] Create-task success toast reuses imperative "Create task" label instead of a past-tense "Task created" confirmation
    • Evidence: task-modal.tsx:248 (toast({ title: t('actions.create'), variant: 'success' })); messages/en.json tasks.actions has only 'create':'Create task' (no created/success key)
  • [64] Shared project threads show a raw userId fragment (userId.slice(0,8)) instead of the author's name
    • Evidence: app/features/projects/components/project-threads-tab.tsx:161 ({thread.userId.slice(0, 8)}); convex/projects/queries.ts:341-360 (listProjectThreads returns only userId, no display name)
  • [67] unpreviewable file (PPT/PPTX) shows two competing Download buttons with divergent toast copy in the preview dialog
    • Evidence: Header download button: services/platform/app/features/documents/components/document-preview-dialog.tsx:290-304; inner EmptyState download button: services/platform/app/features/documents/components/document-preview.tsx:164-184 (separate handleDownload at 104-142). PPTX reaches this branch because the upload allowlist includes ppt/pptx (file-types.ts:448-463) but document-preview.tsx has no PPT/PPTX branch (only PDF/DOC(X)/XLS(X)/image/text).
  • [72] Product create wizard Review step omits the selected image (review summary incomplete)
    • Evidence: product-create-dialog.tsx:274-306 (review step rows: name/description/price/stock/category/status — no image, no tags); :198-221 (basics step has ProductImageField but no tags input)

Notes
Per item: [52] align the Sharing save model with the global Save bar (or label it auto-saving); [54] use formatCostCents for the Spend KPI/chart; [55] validate team IDs and throw PROJECT_TEAM_INVALID; [59] add a past-tense tasks.actions.created key; [64] resolve the author name in listProjectThreads; [67] collapse the duplicate PPT download button to a single shared handler/toast; [72] echo the selected image in the create-wizard Review step. [59] distinct from #1991; [64] needs a backend return-shape change.


Filed by an automated manual-review pass (live browser QA + a 25-agent code-grounded audit, each finding adversarially verified). Deduped against open issues (incl. #1972#1999, settings/forms epic #1941#1966, audit cluster #1842#1846) and recently-closed issues.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions