Review: Projects tab: project request and management (v2)

review-1821-2026-07-17-v2 Review

review approved

Verdict: APPROVED

Re-review of board item #1821 — Forgejo issue ldraney/intelligentstaffingsystems#51. Feature type, sprint:B, 5 points. Previous review review-1821-2026-07-17 was NEEDS_REFINEMENT with 8 recommendations. This re-review verifies refinements were applied.

Refinement Audit

5 of 5 [BODY] recommendations applied correctly. 1 [DECOMPOSE] acknowledged with deliberate deferral. 2 [SCOPE] items remain as documentation follow-up (tracked in issue body).
# Tag Recommendation Status
1 [SCOPE] Create "projects" user story entry on project-iss NOT DONE — tracked in issue body Traceability section
2 [SCOPE] Create arch-rails note NOT DONE — acknowledged as general-purpose label in issue body
3 [BODY] Fix file targets: controller + index.html.erb to "modify" FIXED
4 [BODY] Add config/routes.rb to file targets FIXED
5 [BODY] Add test file targets FIXED
6 [BODY] Add Lead model has_many to file targets FIXED
7 [BODY] Clarify AC #6 status field FIXED — now specifies submitted/active/completed
8 [DECOMPOSE] 8 AC, ~10 file targets, route to skill-decompose-ticket ACKNOWLEDGED — Decomposition Note added, deliberately kept as one ticket

Template Completeness

  • [x] Type — Feature
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets — now properly split into "Files to modify" and "Files to create" with accurate descriptions
  • [x] Feature Flag — None (acceptable; no feature-flags doc in repo)
  • [x] Acceptance Criteria — 8 items, all testable
  • [x] Test Expectations — 9 items with run command
  • [x] Constraints
  • [x] Checklist
  • [x] Related
  • [x] Decomposition Note (extra section, acceptable)
  • [x] Traceability (extra section, documents outstanding gaps)

Traceability

  • [x] story:projects label present
  • [ ] story note MISSING — project-iss user-stories section has no "projects" key. Issue body explicitly tracks this: "needs to be created before or during implementation." Non-blocking for implementation — the user story IS defined in the issue body itself.
  • [x] arch:rails label present
  • [ ] arch note MISSING — search for arch-rails returned no results. This is a general-purpose label shared across ~15 board items. Issue body acknowledges as "general Rails application component." Non-blocking — this is a platform-wide documentation gap, not specific to this ticket.
  • [x] Forgejo issue — ldraney/intelligentstaffingsystems#51, state: open

File Targets

All file targets verified against main branch:
Files to modify (all verified to exist):
  • [x] app/controllers/projects_controller.rb — exists as stub from #49, empty index action. Correctly listed as modify.
  • [x] app/views/projects/index.html.erb — exists as stub from #49, empty-state placeholder. Correctly listed as modify.
  • [x] config/routes.rb — exists, has resources :projects, only: %i[index]. Correctly describes adding :new, :create.
  • [x] app/models/lead.rb — exists, currently has has_many :messages only. Correctly listed for adding has_many :project_requests.
  • [x] test/controllers/projects_controller_test.rb — exists with 7 tests. Correctly listed as extend.
Files to create (all verified to NOT exist):
  • [x] app/views/projects/new.html.erb — does not exist. Correct.
  • [x] app/views/projects/_project_card.html.erb — does not exist. Correct.
  • [x] app/models/project_request.rb — does not exist. Correct. Model fields specified (lead_id, business_name, description, target_audience, inspiration, status).
  • [x] app/assets/stylesheets/projects.css — does not exist. Correct.
  • [x] db/migrate/XXX_create_project_requests.rb — no project migrations exist. Correct. Status column default specified (submitted).
  • [x] test/models/project_request_test.rb — does not exist. Correct.

Repo Placement

OK — issue filed on ldraney/intelligentstaffingsystems, all work targets that repo. No cross-repo impact.

Dependencies

  • #49 (tab bar restructure, board item 1829) — in validation column. Created stubs this ticket extends. Already merged to main (commit bf5f912). Not a blocker.
  • #56 (CRM, Sprint C, board item 1826) — in backlog. Forward dependency: CRM will consume ProjectRequest records. Documented in issue body. Not a blocker.
  • #50 (catalog Sprint B, board item 1820) — in todo. Same sprint, independent work. No conflict.
  • #52 (communications Sprint B, board item 1822) — in backlog. Same sprint, independent work. No conflict.
  • No blockers found. All dependencies documented in issue body.

Acceptance Criteria

8 AC, all testable by an agent:
  • AC 1-5 and 7-8: clear, directly testable via endpoint tests and model tests
  • AC 6: now includes explicit status field values (submitted, active, completed) — FIXED from previous review. Agent can implement status enum and test card rendering by status.
Test Expectations section includes 9 specific test cases with a run command. Comprehensive coverage.

Blast Radius

  • Navigation helper (app/helpers/navigation_helper.rb) — already references :projects tab with path /projects for lead/client/admin roles. No changes needed.
  • Tab bar tests (test/controllers/tab_bar_test.rb) — already verify projects tab link. Additive controller changes should not break.
  • Existing stub tests (test/controllers/projects_controller_test.rb) — 7 tests for index access and empty state. Extension is additive.
  • Lead model — adding has_many :project_requests is additive. No existing code depends on absence of this association.
  • docs/user-stories.md — already mentions ProjectRequest (line 156). Consistent with ticket scope.
  • No blast radius concerns.

Decomposition Assessment

Two of three 5-minute rule criteria exceeded (same as v1 review):
  • >3 file targets across >2 repos — NO (1 repo)
  • >5 acceptance criteria — YES (8 AC)
  • Estimated agent work >5 minutes — YES (~10 minutes)
Issue body includes explicit Decomposition Note acknowledging this and deliberately keeping as one ticket: "the implementing agent can assess whether to split at implementation time." This is a reasonable override — the work is cohesive (one repo, one domain, one feature) and the natural split would add coordination overhead without improving clarity. Accepted as deliberate deferral.

Recommendation

All [BODY] refinements from review-1821-2026-07-17 were correctly applied. The issue body is complete, accurate, and implementable. Two [SCOPE] items remain as non-blocking follow-up:
  • [SCOPE] Create user story entry "projects" on project-iss user-stories section — tracked in issue body, can be done during or after implementation.
  • [SCOPE] Create architecture note arch-rails — platform-wide gap affecting ~15 board items, not specific to this ticket. Consider creating as a separate todo.
No action needed on the issue body. Ticket is ready for implementation.