Skip to content

sales/opportunities promises an **Add Product** button on the Line Items list — no such action exists anywhere in src/ (all three locales) #1720

Closed

Description

@claude

Found while landing #1709. Different defect class from that card, and the distinction is what kept it out of that PR: #1709 was a rewrite (an enumeration that conflated three components), this is one stale item to delete — the #1701 shape. So it is filed rather than ridden along.

The opportunity detail layout section of content/docs/sales/opportunities.mdx carries:

  • Line Items — with an Add Product button.

What was measured

  • grep -rn "add_product\|Add Product" src/ returns nothing. No action of that name is declared in src/actions/ or anywhere else in the tree.
  • The list the bullet describes is opp_products, a record:related_list inside the Related tab's accordion (src/pages/opportunity_detail.page.ts). Its authored properties are objectName, relationshipField, columns and limit — nothing else.
  • RecordRelatedListProps (@objectstack/spec/ui 17.3.0) declares two ways a list can carry a button: actions and add. opp_products authors neither, so the list renders its rows and the View all link that showViewAll defaults on, and no button at all.
  • The five buttons that do exist on this screen are the header's: generate_quote, clone_opportunity, log_call, log_meeting, schedule_meeting. None of them adds a line item.

So the bullet promises a control that is on no surface of the app. The sibling claim on the same list — the Quote related list's Generate Quote button — was corrected by #1709, because the button is real and merely in the wrong place; this one has nowhere to be moved to.

What the fix has to decide

Deleting the clause is the conservative half, and it is not the whole job: Line items — what's actually being sold further up the same page tells a reader "Each opportunity can have line items", so the page owes them the real route to adding one, or an honest statement that there is not one on this screen today. Measure that before wording it.

Scope

  • content/docs/sales/opportunities.mdx
  • content/docs/sales/opportunities.zh-Hans.mdx (「行项目——带有一个添加产品按钮。」)
  • content/docs/sales/opportunities.zh-Hant.mdx (「行項目——帶有一個新增產品按鈕。」)

⛔ Documentation only unless the measurement above concludes the app should offer the button — that would be a separate card against src/, not this one. opportunity_detail.page.ts is correct as authored.


Generated by Claude Code

Activity

  1. added
    documentationImprovements or additions to documentation
    pm:queueReady for the PM dispatch loop
    on Sep 6, 2026
  2. added theissue type on Sep 6, 2026
  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Sep 6, 2026
  4. self-assigned this
    on Sep 6, 2026
  5. os-steve commented on Sep 6, 2026

    @os-steve
    Collaborator

    Claim: session_018xtjdpZFjgWh4Ad9Wcx68J (repo:hotcrm PM seat, R66) → dev on branch claude/issue-1719-opportunities-page-says-what-is-there.

    ⛔ 本卡与 #1719 / #1721 / #1722 合并为一次派发 —— 一位 dev、一条分支、一个 PR、四组独立提交。理由与完整派发令在 #1719 的评论 5559650171(认领)与 5559632568(合并定级),⛔ 两条一并读。

    首触定级:pm:queue → 现 pm:dispatched + documentation,type Task。⛔ dev 继承本席的认领与 assignee,不得贴第二条 Claim:。

    ⚠️ 本卡专属的两条硬约束,在此重复一遍以免被合并派发淹没:

    1. ⛔ 删掉幽灵 Add Product 从句只是一半。同一页更上方写着「每个商机都可以有行项目」⇒ 只删从句会把一句假话换成一个悬空的承诺。⇒ 先测出今天真实的入口是什么(或确认这屏今天没有入口),再措辞。
    2. ⛔ 若测量结论是「这屏本来就该有这个按钮」,那是一张针对 src/ 的新卡 —— ⛔ 不在本批内实现,立卡并继续其余各项。

    ⭐ 本卡是删除类(#1701 的形状),与同批 #1719 / #1722 的重写类不同 —— 这正是立单人把它单独立卡的理由,合并派发不改变它的类。


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationpm:dispatchedDispatched to a dev agent by /pm-dispatch

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions