Review: Public catalog browsing controller, views, and routes

review-1815-2026-07-06 Review

review ready

Verdict: READY

Template Completeness

  • [x] Type (Feature)
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Feature Flag (none)
  • [x] Acceptance Criteria (5 items)
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related

Traceability

  • [x] story:catalog label — Epic 3 (US-3.1–3.2): Browse portfolio by three pillars; admin CRUD
  • [x] story note verified — found in project-iss user-stories section
  • [x] arch:rails label — Rails application component
  • [ ] arch note MISSING — [SCOPE] Create architecture note arch-rails for component rails (also flagged in parent review-1791-2026-07-05)
  • [x] Forgejo issue — ldraney/intelligentstaffingsystems#39, open

File Targets

  • [x] app/controllers/catalog_controller.rb — verified: does not exist yet (to be created). Controller directory exists with existing patterns (PagesController, LeadsController, SessionsController).
  • [x] app/views/catalog/ (index.html.erb, show.html.erb) — verified: directory does not exist yet (to be created). Other view directories (pages/, leads/, sessions/) exist as patterns.
  • [x] app/assets/stylesheets/catalog.css — verified: does not exist yet (to be created). Stylesheets directory exists with application.css, forms.css, pages.css.
  • [x] config/routes.rb — verified: exists (27 lines). Contains leads, pages, sessions, and health routes. Catalog resources route can be added cleanly.

Repo Placement

OK. Issue filed on ldraney/intelligentstaffingsystems, all file targets are in the same repo. No cross-repo concerns.

Dependencies

  • #38 CatalogEntry model (board item #1814) — HARD dependency, currently in backlog. Issue correctly documents "Depends on: #38 (CatalogEntry model must exist first)." Controller references CatalogEntry.published scope which will be created in #38.
  • #11 Catalog model, admin CRUD, and browsing UI (board item #1791) — parent ticket, marked decomposed. This item is one of its decomposition children (decomp:1791).
  • #41 Admin catalog CRUD + ActiveStorage (board item #1816) — sibling decomp item. No blocking relationship; both depend on #38 independently.

Acceptance Criteria

5 criteria, all verifiable by an agent:
  • GET /catalog lists published entries — testable via controller test
  • Pillar filter (?pillar=web_presence) narrows results — testable via controller test with params
  • GET /catalog/:id shows single entry — testable via controller test
  • Only published:true visible; unpublished returns 404 — testable via controller test
  • Responsive card layout — CSS verification; less automatable but standard
Test command specified: rails test test/controllers/catalog_controller_test.rb — valid convention.

Blast Radius

Low. All new files (no existing code modified except routes.rb). The catalog controller needs skip_before_action :authenticate_user! since ApplicationController enforces auth globally — the issue states "No authentication required" and the agent can follow SessionsController's pattern. No downstream consumers affected.

Decomposition Assessment

4 file targets in 1 repo, 5 acceptance criteria, 2 story points. Estimated agent work well under 5 minutes. No decomposition needed.

Recommendation

  • [SCOPE] Create architecture note arch-rails for the Rails component. This was also flagged in the parent ticket review (review-1791-2026-07-05) and affects all arch:rails items on board-iss. Not blocking for this ticket — the issue spec itself is complete and actionable.