Review: Onboarding flow, solo-to-business transition, and activity feed
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- Child of #107
- [x] Repo -- ldraney/landscaping-assistant
- [x] User Story -- present
- [x] Context -- present (detailed)
- [x] File Targets -- present but marked "TBD"
- [ ] Feature Flag -- MISSING (required for Feature type)
- [x] Acceptance Criteria -- present (12 items)
- [x] Test Expectations -- present
- [x] Constraints -- present
- [x] Checklist -- present
- [x] Related -- present
Traceability
- [x] story:auth label -- "Auth: Log in with Keycloak, see role-appropriate tabs and features"
- [x] story note verified -- found in project-landscaping-assistant user-stories section
- [x] arch:rails-app label -- present on board item
- [ ] arch note MISSING -- [SCOPE] Create architecture note arch-rails-app for the Rails app component
- [x] Forgejo issue -- https://forgejo.tail5b443a.ts.net/ldraney/landscaping-assistant/issues/118, open
File Targets
- [x]
app/controllers/registrations_controller.rb(new) -- does not exist yet, OK - [x]
app/controllers/business_requests_controller.rb(new) -- does not exist yet, OK - [x]
app/models/business.rb(new) -- does not exist yet, OK - [x]
app/models/property.rb-- verified: exists, has_many associations, scope :owned_by, no business_id yet - [x]
app/models/user_business.rb(new) -- does not exist yet, OK - [x]
app/views/sessions/new.html.erb-- verified: exists - [x]
app/controllers/activity_feed_controller.rb(new) -- does not exist yet, OK - [ ]
app/models/property_comment.rb-- ISSUE: listed as "(new)" but already exists. Has belongs_to :property, belongs_to :crew_member, photo attachments (up to 5 photos), body validation. Crew can already post comments with photos on properties. - [ ]
app/controllers/join_crew_controller.rb-- ISSUE: exists in codebase (empty controller) but not mentioned in file targets. Directly relevant to "join business" flow.
Repo Placement
Issue filed on ldraney/landscaping-assistant -- correct for the Rails app work. However, cross-repo work is not explicitly scoped:
- Keycloak self-registration may require realm config changes (pal-e-services or keycloak-theme repo)
- Telegram alert routing is in pal-e-platform (PR #410 mentioned in constraints)
- Multiple repos affected but no separate Forgejo issues planned for non-Rails work
Dependencies
- #107 (parent auth issue) -- referenced, not on board
- #115 / #1337 (Phase 1: Keycloak login) -- done
- #117 / #1339 (Crew tab) -- done
- #1403 (Property detail: Projects section) -- in todo, also story:auth phase:3. Potential ordering dependency.
- #1574 (Crew/team grouping) -- in backlog. Title: "Crew/team grouping: model, scoping, controller updates, and digester integration". Significant overlap with this ticket's business/crew model concepts. Relationship not documented.
Acceptance Criteria
12 acceptance criteria. Assessment:
- AC 1-7, 9-12: testable via request specs
- AC 8: "Properties created while solo are preserved (exact handling TBD)" -- NOT TESTABLE. Contains explicit TBD. Must specify exact behavior (archive, transfer, or hide) before implementation.
- AC 10: "Crew can post questions and photos on properties" -- partially already implemented (PropertyComment model exists with photo support). Needs clarification on what's new vs existing.
- AC 5: "Business admin receives Telegram alert" -- testable but cross-system, requires pal-e-platform integration
Blast Radius
- Property model multi-tenancy: Adding business_id to Property affects ALL property queries. Current scoping uses
owned_by(sub)(Keycloak subject). Switching to business_id-based scoping touches: properties_controller, work_queue_items_controller, weeks_controller, days_controller, uploads_controller, and all property-dependent views. - Role system: Current role enforcement uses Keycloak realm roles (member, lead, admin, super_admin) via ApplicationController#require_role. The "solo" concept (user is their own admin) has no current analog. Tab visibility is hardcoded in TAB_ROLES constant.
- Existing crew model: CrewMember model already exists and is used for property comments. The new UserBusiness join table concept may conflict or need to integrate with existing CrewMember associations.
Decomposition Assessment
NEEDS DECOMPOSITION -- exceeds all thresholds:
- 9+ file targets across 3+ repos (landscaping-assistant, keycloak/pal-e-services, pal-e-platform)
- 12 acceptance criteria (threshold: 5)
- Estimated agent work: days, not minutes
- The issue itself states: "This ticket is a planning/umbrella ticket -- break into sub-tickets before implementation"
- Checklist item "Sub-tickets created for each deliverable" is unchecked
Recommendations
[BODY]Add Feature Flag section -- this multi-part feature needs a flag strategy (likely multiple flags: one for self-registration, one for business join, one for activity feed)[BODY]Fix property_comment.rb: listed as "(new)" but already exists with photo upload support. Clarify what's new vs existing.[BODY]AC #8: remove TBD -- must specify exact property transition behavior (archive, transfer, or hide) before implementation can begin[BODY]Add join_crew_controller.rb to file targets -- it already exists and is directly relevant to the "join business" flow[BODY]Document relationship with #1574 (Crew/team grouping) -- significant concept overlap needs resolution[BODY]Scope cross-repo work explicitly: Keycloak realm config changes, pal-e-platform Telegram integration[SCOPE]Create architecture note arch-rails-app for the Rails app component[DECOMPOSE]12 AC across 9+ files and 3+ repos. Route to skill-decompose-ticket. Suggested sub-ticket breakdown: (1) Self-registration + Keycloak config, (2) Business model + multi-tenancy migration, (3) Join-business request flow + Telegram alert, (4) Role transition (solo-to-crew) + property scoping, (5) Activity feed for admin, (6) Tab layout updates