Files
headroom/openspec/changes/headroom-foundation/specs/project-lifecycle/spec.md

4.9 KiB

ADDED Requirements

Requirement: Create project

The system SHALL allow authorized users to create projects with project code, title, type, and status.

Scenario: Create new project

  • WHEN a manager creates a project with code "PROJ-001", title "Client Dashboard Redesign", and type "Project"
  • THEN the system creates the project with initial status "Initial"
  • AND the system assigns a unique identifier to the project

Scenario: Project code must be unique

  • WHEN attempting to create a project with a code that already exists
  • THEN the system rejects the request with validation error "Project code must be unique"

Requirement: Project status state machine

The system SHALL enforce project status transitions according to defined workflow states.

Scenario: Valid status transition

  • WHEN a project in "Initial" status transitions to "Gathering Estimates"
  • THEN the system updates the project status

Scenario: Project reaches Estimate Approved

  • WHEN a project transitions to "Estimate Approved" status
  • THEN the system requires approved estimate to be set
  • AND the approved estimate must be greater than 0

Scenario: Project workflow progression

  • WHEN a project progresses through statuses: Initial → Gathering Estimates → Estimate Pending Approval → Estimate Approved → Funded → Scheduled → In-Progress → Ready for Prod → Done
  • THEN the system allows each transition in sequence

Scenario: Estimate rework path

  • WHEN a project in "Estimate Pending Approval" status requires changes
  • THEN the system allows transition back to "Estimate Rework" status
  • AND from "Estimate Rework" the project can return to "Estimate Pending Approval"

Scenario: Project on hold

  • WHEN a project is placed "On-Hold" from any active status
  • THEN the system allows the transition
  • AND allocations for future months are flagged but not deleted

Scenario: Project cancelled

  • WHEN a project is marked as "Cancelled"
  • THEN the system prevents new allocations
  • AND existing allocations are preserved for historical tracking

Requirement: Manage approved estimate

The system SHALL track the total approved billable hours for each project.

Scenario: Set approved estimate

  • WHEN a project reaches "Estimate Approved" status with approved estimate of 120 hours
  • THEN the system stores the approved estimate
  • AND the approved estimate becomes the baseline for allocation validation

Scenario: Update approved estimate

  • WHEN a manager updates the approved estimate from 120 to 150 hours
  • THEN the system updates the approved estimate
  • AND the system re-validates all allocations against the new estimate

Requirement: Manage forecasted effort

The system SHALL track month-by-month breakdown of forecasted effort for each project.

Scenario: Set forecasted effort

  • WHEN a manager sets forecasted effort for a 120-hour project as: February 40h, March 60h, April 20h
  • THEN the system stores the forecasted effort as JSON: {"2026-02": 40, "2026-03": 60, "2026-04": 20}

Scenario: Forecasted effort must equal approved estimate

  • WHEN the sum of forecasted effort (40 + 60 + 20 = 120) equals the approved estimate (120)
  • THEN the system accepts the forecasted effort

Scenario: Forecasted effort validation fails

  • WHEN the sum of forecasted effort (40 + 60 + 30 = 130) exceeds the approved estimate (120) by more than 5%
  • THEN the system rejects the forecasted effort with validation error "Forecasted effort exceeds approved estimate"

Scenario: Under-forecasted effort

  • WHEN the sum of forecasted effort (40 + 50 + 10 = 100) is less than the approved estimate (120)
  • THEN the system displays a YELLOW warning "Under-forecasted by 20 hours"

Requirement: Distinguish project types

The system SHALL differentiate between "Project" (billable) and "Support" (ongoing ops) project types.

Scenario: Billable project

  • WHEN a project is created with type "Project"
  • THEN the system tracks it as billable work
  • AND it appears in revenue forecasts

Scenario: Support project

  • WHEN a project is created with type "Support"
  • THEN the system tracks it as ongoing operations
  • AND it appears in capacity allocation but may have different reporting treatment

Requirement: Cannot allocate to completed or cancelled projects

The system SHALL prevent new allocations to projects in "Done" or "Cancelled" status.

Scenario: Attempt to allocate to done project

  • WHEN attempting to create an allocation for a project with status "Done"
  • THEN the system rejects the allocation with error "Cannot allocate to completed projects"

Scenario: Attempt to allocate to cancelled project

  • WHEN attempting to create an allocation for a project with status "Cancelled"
  • THEN the system rejects the allocation with error "Cannot allocate to cancelled projects"