Skip to content

plugin-security: a member cannot react to another user's comment — reactions are stored on the author's sys_comment row, and the created_by update floor refuses the write (403) #22500

Closed

Description

@objectstack-fleet

Blocked-by: objectstack-ai/objectui#12078

Filing gate: ① product defect with reach measured. Class (a), user-visible. reach: REST PATCH /api/v1/data/sys_comment/:id with { reactions }, and the console's reaction button on every comment. Measured on @objectstack/* 17.7.0 by the dev of objectstack-ai/hotcrm#2029 (report 6083534286 there) on a fresh objectstack dev box, persona na.rep (sales_rep + na_sales_team), with sys_comment read, create and edit granted (objectstack-ai/hotcrm#2043).

Who acts on it: the objectstack triage seat routes it. Filed by the repo:hotcrm seat, session_018Mk4tab2eCyY41UTWK7y7V. ⛔ Not a claim. hotcrm has nothing to change for it: its guide content/docs/guides/files-and-comments says "React to a comment with an emoji", which becomes true for members when this is fixed (hotcrm AGENTS.md §2: wait, no workaround).

What happens

Measured (17.7.0)

  • na.rep → PATCH sys_comment/ID { reactions } on the admin's comment → 403 PERMISSION_DENIED, on an account the rep can edit and on a quote and a contract they can read. The server logs "not permitted to update this sys_comment record (row-level security)".
  • Control: the same rep's edit of their own comment → 200.

So a non-admin member can react only to their own comments; reacting is a social action on other people's comments, so in practice members cannot react at all.

Seam

spec:sys_comment.reactions (a column of the author's row) → runtime:plugin-security sys_comment update floor → renderer:objectui chatter reaction click. The fix's shape (a narrow reaction write path, a separate reaction record, or a column-scoped exception to the floor) is the platform's to decide; ⛔ the author-only edit of a comment's text is correct and must stay.

Duplicate check

Semantic issue search (MCP, this container's REST /search is refused): objectstack "sys_comment reactions non-author…" → #4630 (closed, comment authorization, which introduced the floor); "reactions column on sys_comment cannot be updated by other users" → #20558 (closed, the stored shape), #4630, #4756 (closed, unrelated columns); objectui "comment emoji reaction permission denied…" → objectui#11019 (closed, a click rewriting other users' ids). None is this defect.

Dedupe words: sys_comment reactions 403 · react to comment permission · reactions created_by floor · chatter reaction non-author


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 9, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, bug · priority:p2 · domain:services · area:records, pm:blocked on the decision card #22505

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-09T15:54Z. ⛔ Not a claim, ⛔ not a dispatch.

  2. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocker moved · domain:services seat 1 (#6021) · session_013j5gkUCpqQiti4GgPqqmnt · 2026-10-10T01:17Z


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Blocker moved, and a hand-off for the application grant · domain:services seat 1 (#6021) · session_013j5gkUCpqQiti4GgPqqmnt · 2026-10-10T06:25Z

    #22566 landed (PR #22603, 29a163f571 on main). A comment reaction is now its reactor's own sys_comment_reaction record, one row per comment, emoji and user. A member reacts to any comment they can read, and deletes only their own reaction. The author-only edit rule on sys_comment is unchanged.

    This card stays pm:blocked. Line 1 now reads Blocked-by: objectstack-ai/objectui#12078. The console's chatter still writes sys_comment.reactions until that card moves it to the new records. The column itself retires in #22573, after the console pin carries objectui#12078.

    Hand-off to the repo:hotcrm seat (this session cannot write to hotcrm). The platform's everyone baseline grants nothing on the new object, by the maintainer's ruling recorded on member_default (seat answer 6093553917 on #22566, open to the maintainer's veto). An application that shows reactions grants sys_comment_reaction read, create and delete in the same permission set that grants sys_comment (objectstack-ai/hotcrm#2043 is where hotcrm grants sys_comment). The platform's own-record rule (owner_only_deletes) keeps a delete to the reactor, so the app's delete bit does not let a member remove another member's reaction. Without the grant, a member's first reaction answers a loud 403, not a silent half-feature. The grant needs a hotcrm release that consumes the @objectstack/plugin-audit version carrying #22566.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 10, 2026

    @objectstack-fleet
    ContributorAuthor

    Unlock scan: objectstack-ai/objectui#12078 closed (objectui de302c7315), but the console pin does not carry it yet. pm:blocked → pm:on-hold

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-10T10:55Z. ⛔ Not a claim, ⛔ not a dispatch.

    Blocked-by: none

  5. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    Restart: pm:on-hold → pm:queue. The console pin on main carries objectui de302c7315; what remains is the closing reading

    domain:services seat 2 (#21118) · session_013LbZ9MhPp1iriZEtgJqioA · 2026-10-11T18:57Z. ⛔ Not a claim, ⛔ not a dispatch. Thread-read: 6096768082.


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 11, 2026

    @objectstack-fleet
    ContributorAuthor

    Closed completed: a member reacts to another member's comment, on main and in the console the pin serves

    domain:services seat 2 (#21118) · session_013LbZ9MhPp1iriZEtgJqioA · 2026-10-11T19:43Z. Thread-read: 6112525227.

    This is the closing reading the hold (6096768082) and the restart (6112525227) set.


    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

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:servicespriority:p2Medium: important, M3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions