Review: Communications tab (lead/client): contact methods (v2)

review-1822-2026-07-17-v2 Review

review ready

Verdict: READY

Re-review of board item #1822 — Forgejo issue ldraney/intelligentstaffingsystems#52. Type: Feature. Sprint B, 3 points. Re-review of review-1822-2026-07-17 (v1 verdict: NEEDS_REFINEMENT).

V1 Refinement Status

All three [BODY] recommendations from v1 were correctly applied:
  • [x] [BODY] File Targets clarity — Controller and view now described as "exists as a stub from #49" with specific modification instructions (add role branching, extract partial, add interactivity). Previously said "create or modify."
  • [x] [BODY] tabs.css migrationcommunications.css entry now documents that contact-card styles live in tabs.css (lines 87-133), which is staged for deletion, and must be migrated.
  • [x] [BODY] #49 blocker — Related section now explicitly marks #49 as "blocker dependency" with detail: "PR #73, merged… Must be merged before this work begins."
Two [SCOPE] items from v1 remain outstanding (external work, not issue body changes):
  • [ ] communications story entry not yet created in project-iss user-stories (issue body now documents this gap in a Traceability Note section)
  • [ ] arch-rails architecture note not yet created in pal-e-docs

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — Standalone, replaces old Messages tab #12
  • [x] Repo — ldraney/intelligentstaffingsystems
  • [x] User Story — lead/client wants clear contact methods
  • [x] Context — three action buttons (DM, Email, Appointment), role gating, detailed behavior
  • [x] File Targets — 5 files listed with exists/new annotations, migration path documented
  • [x] Feature Flag — none
  • [x] Acceptance Criteria — 9 items
  • [x] Test Expectations — 5 items with run command and existing test file reference
  • [x] Constraints — Stimulus, importmap, no Node, role branching pattern
  • [x] Checklist — present
  • [x] Related — present with explicit blocker and downstream dependencies
All required sections present.

Traceability

  • [x] story:communications label — present on board item
  • [ ] story note — communications not listed in project-iss user-stories section. Issue body documents the gap in a Traceability Note. Three board items (#1822, #1824, #1827) use this label. [SCOPE] Create user story entry communications on project-iss user-stories section.
  • [x] arch:rails label — present on board item
  • [ ] arch note — no arch-rails note found in pal-e-docs. [SCOPE] Create architecture note arch-rails for the Rails application component.
  • [x] Forgejo issue — ldraney/intelligentstaffingsystems#52, open

File Targets

  • [x] app/controllers/communications_controller.rb — verified: EXISTS on HEAD (16 lines, stub with empty index action). Issue correctly says "exists as a stub from #49, modify to add role-branching render logic."
  • [x] app/views/communications/index.html.erb — verified: EXISTS on HEAD (57 lines, renders three static contact cards with SVG icons). Issue correctly says "exists as a stub from #49, modify to add role-conditional rendering and extract partial."
  • [x] app/views/communications/_contact_cards.html.erb — verified: DOES NOT EXIST on HEAD. Correctly identified as new file (extracted partial).
  • [x] app/assets/stylesheets/communications.css — verified: DOES NOT EXIST on HEAD. Correctly identified as new file. Issue accurately notes that contact-card styles live in tabs.css lines 87-133 (verified: 47 lines of .tab-cards and .contact-card styles).
  • [x] app/javascript/controllers/clipboard_controller.js — verified: DOES NOT EXIST on HEAD. Correctly identified as new file. Importmap pin_all_from "app/javascript/controllers" confirmed on line 7 of importmap.rb.
  • [x] test/controllers/communications_controller_test.rb — verified: EXISTS on HEAD (55 lines). Correctly referenced.
  • [x] Route /communications — verified: exists on line 29 of routes.rb.
  • [x] admin? helper pattern — verified: exists in messages_controller.rb at line 100. Constraint to follow this pattern is accurate.

Repo Placement

OK — all work is in ldraney/intelligentstaffingsystems, matching the Forgejo issue repo.

Dependencies

  • #49 (tab bar restructure, board #1829) — in validation. Provides the stub controller, view, route, and nav entry. Explicitly marked as blocker in issue body. PR #73 merged.
  • #12 (messaging model, board #1792) — in backlog, decomposed. Scope overlap documented; decomposed children #40 and #42 already in done.
  • #54 (admin communications, board #1824, sprint:C) — depends on the role branching this ticket introduces.
  • #55 (live DM, board #1825, sprint:C) — depends on the DM placeholder this ticket creates.
  • #57 (board #1827, sprint:C) — depends on this ticket.
All dependencies accurately documented in the issue body.

Acceptance Criteria

9 AC items, all concrete and verifiable by an agent via endpoint assertions and assert_select. Test expectations reference existing test file (55 lines) and include run command. No missing criteria detected.

Blast Radius

  • tabs.css style migration is now documented in the issue body — the agent knows to migrate lines 87-133 to communications.css.
  • The admin? helper pattern from messages_controller.rb is explicitly called out in Constraints.
  • No downstream API consumers affected. Turbo Native picks up UI changes automatically.

Decomposition Assessment

  • 5 file targets in 1 repo — below the >3 files across >2 repos threshold
  • 9 acceptance criteria — above the >5 threshold
  • Estimated agent work — borderline 5 minutes
  • Work is cohesive: single controller/view/partial/CSS/stimulus in one feature area, existing stubs reduce scope
No decomposition needed. Same assessment as v1 — cohesive work within a single domain.

Recommendations

Issue body is complete and ready for implementation. Two [SCOPE] items from v1 remain as non-blocking external tasks:
  • [SCOPE] Create user story entry communications on project-iss user-stories section. Three board items (#1822, #1824, #1827) use this label. The issue body's Traceability Note documents the gap and recommends creating the entry rather than relabeling.
  • [SCOPE] Create architecture note arch-rails for the Rails application component. This is a generic component label shared across many tickets.
Neither [SCOPE] item blocks the implementation agent — the issue body contains all information needed to execute.