Review: Property detail page: Projects section (depends on #122)
Verdict: APPROVED
Scope is clear and actionable. All file targets verified, traceability complete, dependencies documented and resolved. One minor line-reference inaccuracy in the body does not block implementation.
Template Completeness
- [x] Type (Feature)
- [x] Lineage
- [x] Repo
- [x] User Story
- [x] Context
- [x] File Targets
- [x] Feature Flag (None -- acceptable: read-only display on existing page, not a new user workflow)
- [x] Acceptance Criteria
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
Traceability
- [x] story:auth label -- "Log in with Keycloak, see role-appropriate tabs and features"
- [x] story note verified -- "auth" key found in project-landscaping-assistant user-stories section
- [x] arch:rails-app label -- Rails App (Shared Pattern)
- [x] arch note verified -- arch-rails-app note exists in pal-e-docs
- [x] Forgejo issue -- ldraney/landscaping-assistant#176, open
File Targets
- [x]
app/views/properties/show.html.erb-- verified: exists, current structure has property details + comments section, projects section would be inserted between them - [x]
app/views/properties/_service_requests.html.erb-- new partial (does not exist yet, expected) - [x]
app/assets/stylesheets/application.css-- verified: exists (59k). Line reference inaccuracy: ticket says.status-indicatorand.role-badgeat lines 1564-1616, but actual locations are lines 1999-2048. Class names are correct and findable by grep. - [x]
app/controllers/properties_controller.rb-- verified: exists, show action at line 78 currently loads comments but not service_requests - [x]
spec/requests/properties_spec.rb-- verified: exists (17k) - [x]
ServiceRequest::STATUSESandServiceRequest::VALID_TRANSITIONS-- verified: defined in app/models/service_request.rb at lines 5 and 7 - [x]
Property has_many :service_requests-- verified: association exists at line 9 of app/models/property.rb
Repo Placement
OK. Issue filed on ldraney/landscaping-assistant, all file targets are in the same repo. Single-repo change.
Dependencies
- [x] #122 (ServiceRequest model) -- DONE on board (item 1347), merged. Prerequisite satisfied.
- [x] #126 (CSS refresh) -- DONE on board (item 1351), merged. Prerequisite satisfied.
- [x] #206 (decline transitions bug) -- DONE on board (item 1452), merged. Non-blocking per ticket.
- [x] #123 (Client request form) -- backlog (item 1348), sibling ticket. Not a dependency.
- [x] #179 (Admin project workflow) -- backlog (item 1404), depends on THIS ticket. Correctly sequenced.
All upstream dependencies resolved. Downstream dependency (#179) correctly documents dependency on this ticket.
Acceptance Criteria
6 ACs, all testable and verifiable by an agent:
- Projects section visibility -- check DOM element presence in show response
- Active request grouping -- verify correct statuses rendered together
- Completed/declined separation -- check separate rendering section
- Request detail display -- verify description, badges, price in rendered HTML
- Empty state -- test with property that has no service_requests
- Mobile layout -- verify CSS uses 44px touch targets and proper spacing
All criteria are concrete and machine-verifiable via request specs.
Blast Radius
Contained. Changes are isolated to the property detail page:
- Existing
service_requestusage inproperty_commentsviews/controller is separate (comment-linked requests, not a standalone list). - New CSS classes are additive; existing
.status-indicatorand.role-badgepatterns are reused, not modified. - Controller change (eager-loading) adds a query, does not modify existing behavior.
- No other views render a project/request list -- this is the first.
Decomposition Assessment
5 file targets, 1 repo, 6 ACs -- all within the property detail page domain. Estimated agent work under 5 minutes. No decomposition needed.
Recommendation
[BODY]Fix CSS line references: ticket says.status-indicatorand.role-badgeat lines 1564-1616, actual location is lines ~1999-2048. Class names are correct; only the line numbers need updating.