mirror of https://github.com/docusealco/docuseal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1342 lines
31 KiB
1342 lines
31 KiB
# Plan to Address PO Validation Findings
|
|
|
|
**Date:** 2026-01-13
|
|
**Author:** John (Product Manager)
|
|
**Status:** Draft - Pending Approval
|
|
**Related:** PO_Master_Validation_Report.md, PO_Validation_Summary.md
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
The PO validation identified **15 issues** (3 blocking, 5 high-priority, 7 medium-priority) that must be addressed before development can proceed. This plan provides a systematic approach to resolve all issues and achieve **FINAL APPROVAL** for the FloDoc v3 PRD.
|
|
|
|
**Current State:** 85% Ready → **Target State:** 100% Ready for Development
|
|
|
|
---
|
|
|
|
## 🎯 Decision Required: Production Deployment Strategy
|
|
|
|
**CRITICAL FIRST STEP:** Before addressing any other issues, you must decide on the production deployment approach.
|
|
|
|
### Option A: Local Docker MVP Only (Recommended for Current Phase)
|
|
**Pros:**
|
|
- Fastest path to validation
|
|
- No cloud infrastructure costs
|
|
- Management can demo locally first
|
|
- Defer production investment until MVP proven
|
|
|
|
**Cons:**
|
|
- Cannot deploy to production without new stories
|
|
- Requires explicit scope documentation
|
|
|
|
**Action:** Add scope declaration to PRD Section 1.1
|
|
|
|
### Option B: Add Production Stories 8.1-8.4
|
|
**Pros:**
|
|
- Production-ready after implementation
|
|
- Complete end-to-end solution
|
|
- No follow-up work needed
|
|
|
|
**Cons:**
|
|
- Adds 4 stories (~2-3 weeks)
|
|
- Increases scope significantly
|
|
- Higher upfront cost
|
|
|
|
**Action:** Create Stories 8.1-8.4 (see details below)
|
|
|
|
### Option C: Minimal Production Story 8.1
|
|
**Pros:**
|
|
- Basic production capability
|
|
- Smaller scope than Option B
|
|
- Demonstrates production path
|
|
|
|
**Cons:**
|
|
- Still requires monitoring/analytics later
|
|
- May need additional stories
|
|
|
|
**Action:** Create Story 8.1 only, defer 8.2-8.4
|
|
|
|
---
|
|
|
|
## 📋 Action Plan by Issue
|
|
|
|
### 🔴 BLOCKING ISSUES (Must Fix Before Development)
|
|
|
|
#### Issue #1: Production Deployment Strategy Undefined
|
|
|
|
**Location:** Section 2.3, Story 2.3, Stories 8.1-8.4 (Deferred)
|
|
|
|
**Recommended Approach:**
|
|
Based on your stated goal ("validate locally first before investing in production"), I recommend **Option A** with the following additions:
|
|
|
|
**Actions:**
|
|
1. **Add scope declaration to PRD Section 1.1:**
|
|
```markdown
|
|
## Scope Boundaries
|
|
|
|
**In Scope (MVP):**
|
|
- Local Docker development environment
|
|
- 3-portal cohort management workflow
|
|
- Single institution support
|
|
- Demo validation with sample data
|
|
|
|
**Out of Scope (Post-MVP):**
|
|
- Production infrastructure (deferred to Stories 8.1-8.4)
|
|
- Cloud deployment pipeline
|
|
- Monitoring/analytics infrastructure
|
|
- Multi-institution support
|
|
```
|
|
|
|
2. **Update Story 8.0.1 Background:**
|
|
- Explicitly state "Local Docker MVP only"
|
|
- Add note: "Production infrastructure TBD after validation"
|
|
|
|
3. **Optional:** Add minimal Story 8.1 for future reference:
|
|
```markdown
|
|
#### Story 8.1: Basic Production Deployment (Deferred)
|
|
|
|
**Status:** Deferred - Post-MVP
|
|
**Priority:** Medium
|
|
**Epic:** Deployment
|
|
|
|
**User Story:**
|
|
**As a** System Administrator,
|
|
**I want** basic production deployment capability,
|
|
**So that** FloDoc can be deployed after MVP validation.
|
|
|
|
**Acceptance Criteria:**
|
|
- [ ] Docker image for production
|
|
- [ ] Basic AWS/GCP deployment script
|
|
- [ ] SSL certificate setup
|
|
- [ ] Database backup strategy
|
|
|
|
**Note:** This story is deferred pending MVP validation success.
|
|
```
|
|
|
|
**Effort:** 0.5 days (documentation only)
|
|
**Risk:** Low (if Option A chosen)
|
|
**Owner:** PO
|
|
|
|
---
|
|
|
|
#### Issue #2: Security Audit Methodology Missing
|
|
|
|
**Location:** Section 7.1, Story 7.4
|
|
|
|
**Current State:**
|
|
```
|
|
Story 7.4 Acceptance Criteria:
|
|
"1. ✅ Security audit completed"
|
|
```
|
|
|
|
**Required Enhancement:**
|
|
Add detailed security audit checklist to Story 7.4.
|
|
|
|
**Actions:**
|
|
|
|
1. **Update Story 7.4 Acceptance Criteria:**
|
|
|
|
```markdown
|
|
#### Story 7.4: Security Audit & Penetration Testing
|
|
|
|
**Status:** Draft (needs enhancement)
|
|
**Priority:** High
|
|
**Epic:** Testing
|
|
|
|
##### User Story
|
|
|
|
**As a** System Administrator,
|
|
**I want** comprehensive security verification,
|
|
**So that** the 3-portal system is secure and POPIA compliant.
|
|
|
|
##### Background
|
|
|
|
Security is critical for the FloDoc 3-portal system due to:
|
|
- Ad-hoc token access for students/sponsors
|
|
- Student personal data handling
|
|
- Digital signature legal requirements
|
|
- South African POPIA compliance
|
|
|
|
##### Technical Implementation Notes
|
|
|
|
**Security Audit Checklist:**
|
|
|
|
```ruby
|
|
# Security verification tasks
|
|
class SecurityAudit
|
|
def self.run
|
|
{
|
|
owasp_verification: owasp_top_10_checklist,
|
|
authentication_audit: auth_flow_verification,
|
|
popia_compliance: popia_checklist,
|
|
penetration_testing: pen_test_scope,
|
|
security_headers: header_verification
|
|
}
|
|
end
|
|
end
|
|
```
|
|
|
|
##### Acceptance Criteria
|
|
|
|
**Functional:**
|
|
1. ✅ OWASP Top 10 Verification
|
|
- SQL injection prevention tested
|
|
- XSS protection verified
|
|
- CSRF tokens validated
|
|
- Authentication bypass attempts blocked
|
|
|
|
2. ✅ Authentication Flow Security
|
|
- Ad-hoc token generation security verified
|
|
- Token expiration (24h) enforced
|
|
- JWT secret strength validated (min 256 bits)
|
|
- Token renewal flow secure
|
|
|
|
3. ✅ Data Privacy (POPIA Compliance)
|
|
- Personal data encrypted at rest
|
|
- Right to deletion implemented
|
|
- Data retention policies defined (7 years for legal docs)
|
|
- Student data isolation verified
|
|
|
|
4. ✅ Penetration Testing Scope
|
|
- API endpoint fuzzing completed
|
|
- Token manipulation attempts blocked
|
|
- Role escalation testing passed
|
|
- Bulk operation rate limiting verified
|
|
|
|
5. ✅ Security Headers
|
|
- Content-Security-Policy configured
|
|
- X-Frame-Options set to DENY
|
|
- HSTS enabled
|
|
- CORS policies restricted
|
|
|
|
**Integration:**
|
|
1. ✅ Security tests integrate with CI/CD
|
|
2. ✅ Audit results logged to SecurityEvent model
|
|
|
|
**Security:**
|
|
1. ✅ No critical vulnerabilities found
|
|
2. ✅ All findings documented with remediation
|
|
|
|
**Quality:**
|
|
1. ✅ Security audit report generated
|
|
2. ✅ Penetration test summary provided
|
|
|
|
##### Integration Verification (IV1-4)
|
|
|
|
**IV1: API Integration**
|
|
- Security tests call `/api/v1/flodoc/*` endpoints
|
|
- Verify token validation on all routes
|
|
|
|
**IV2: Pinia Store**
|
|
- N/A (backend security focus)
|
|
|
|
**IV3: Getters**
|
|
- N/A (backend security focus)
|
|
|
|
**IV4: Token Routing**
|
|
- Ad-hoc token security verified
|
|
- JWT validation on all protected routes
|
|
|
|
##### Test Requirements
|
|
|
|
**Component Specs:**
|
|
```ruby
|
|
# spec/security/security_audit_spec.rb
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe SecurityAudit do
|
|
describe 'OWASP Top 10' do
|
|
it 'prevents SQL injection' do
|
|
# Test implementation
|
|
end
|
|
|
|
it 'prevents XSS attacks' do
|
|
# Test implementation
|
|
end
|
|
end
|
|
|
|
describe 'POPIA Compliance' do
|
|
it 'encrypts personal data' do
|
|
# Test implementation
|
|
end
|
|
end
|
|
end
|
|
```
|
|
|
|
**Integration Tests:**
|
|
- End-to-end security workflow tests
|
|
- Token lifecycle tests
|
|
|
|
**E2E Tests:**
|
|
- Penetration simulation tests
|
|
|
|
##### Rollback Procedure
|
|
|
|
**If security audit fails:**
|
|
1. Do not deploy to production
|
|
2. Remediate critical findings first
|
|
3. Re-run audit
|
|
4. Document all fixes
|
|
5. Get security sign-off
|
|
|
|
**Data Safety:** No data changes required for audit
|
|
|
|
##### Risk Assessment
|
|
|
|
**HIGH because:**
|
|
- Ad-hoc token system is new and untested
|
|
- POPIA compliance is legally required
|
|
- Digital signatures have legal implications
|
|
|
|
**Specific Risks:**
|
|
1. **Token Leakage:** Ad-hoc tokens could be intercepted
|
|
2. **Data Breach:** Student PII exposure
|
|
3. **Legal Liability:** Non-compliant signatures
|
|
|
|
**Mitigation:**
|
|
- Use HTTPS only
|
|
- Token expiration (24h)
|
|
- Audit logging
|
|
- Security review before production
|
|
|
|
##### Success Metrics
|
|
- 0 critical vulnerabilities
|
|
- 100% OWASP Top 10 coverage
|
|
- POPIA compliance verified
|
|
- Penetration test pass rate >95%
|
|
```
|
|
|
|
**Effort:** 1 day (enhancing story + running audit)
|
|
**Risk:** Medium (requires security expertise)
|
|
**Owner:** Dev + QA (with PO oversight)
|
|
|
|
---
|
|
|
|
#### Issue #3: User Communication & Training Plan Missing
|
|
|
|
**Location:** Section 7.3
|
|
|
|
**Current State:** No plan exists for existing DocuSeal users
|
|
|
|
**Actions:**
|
|
|
|
1. **Create New Story 8.5:**
|
|
|
|
```markdown
|
|
#### Story 8.5: User Communication & Training Materials
|
|
|
|
**Status:** Draft
|
|
**Priority:** High
|
|
**Epic:** Deployment & Documentation
|
|
**Estimated Effort:** 2 days
|
|
**Risk Level:** Medium
|
|
|
|
##### User Story
|
|
|
|
**As a** Training Provider (TP Admin),
|
|
**I want** clear guidance on using FloDoc's 3-portal system,
|
|
**So that** I can manage cohorts effectively without confusion.
|
|
|
|
##### Background
|
|
|
|
Existing DocuSeal users need to understand:
|
|
- What changed (3-portal workflow)
|
|
- How to use new features (cohort management)
|
|
- Where to get help (support channels)
|
|
- What's different (ad-hoc student/sponsor access)
|
|
|
|
Without this communication, adoption will suffer and support will be overwhelmed.
|
|
|
|
##### Technical Implementation Notes
|
|
|
|
**Documentation Structure:**
|
|
```
|
|
docs/user/
|
|
├── migration-announcement.md
|
|
├── tp-portal-guide.md
|
|
├── student-portal-tutorial.md
|
|
├── sponsor-portal-guide.md
|
|
└── faq.md
|
|
```
|
|
|
|
**Email Templates:**
|
|
```ruby
|
|
# app/views/mailers/user_announcement/
|
|
├── migration_email.html.erb
|
|
├── welcome_floDoc.html.erb
|
|
└── feature_highlights.html.erb
|
|
```
|
|
|
|
**UI Help Integration:**
|
|
```vue
|
|
<!-- app/javascript/tp_portal/components/HelpOverlay.vue -->
|
|
<template>
|
|
<div class="help-overlay">
|
|
<h2>FloDoc Quick Start</h2>
|
|
<ol>
|
|
<li>Create a cohort</li>
|
|
<li>Upload documents</li>
|
|
<li>Invite students</li>
|
|
</ol>
|
|
</div>
|
|
</template>
|
|
```
|
|
|
|
##### Acceptance Criteria
|
|
|
|
**Functional:**
|
|
1. ✅ Migration announcement email sent to all existing users
|
|
2. ✅ TP Portal "Getting Started" guide created (5 steps)
|
|
3. ✅ Student Portal onboarding tutorial (3 steps, mobile-friendly)
|
|
4. ✅ Sponsor Portal quick-start guide (bulk signing focus)
|
|
5. ✅ FAQ document with 20 common questions
|
|
6. ✅ Support contact process defined
|
|
7. ✅ Help overlay in each portal
|
|
|
|
**UI/UX:**
|
|
1. ✅ Help buttons visible in all portals
|
|
2. ✅ Tutorial tooltips on first login
|
|
3. ✅ Mobile-responsive documentation
|
|
|
|
**Integration:**
|
|
1. ✅ Email templates integrate with existing mailer system
|
|
2. ✅ Help content accessible via `/help` routes
|
|
|
|
**Security:**
|
|
1. ✅ No sensitive data in documentation
|
|
2. ✅ Token links in emails are single-use
|
|
|
|
**Quality:**
|
|
1. ✅ All documentation reviewed by PO
|
|
2. ✅ No spelling/grammar errors
|
|
3. ✅ Consistent branding
|
|
|
|
##### Integration Verification (IV1-4)
|
|
|
|
**IV1: API Integration**
|
|
- Email sending uses existing Devise mailer
|
|
- Help content served via static pages or API
|
|
|
|
**IV2: Pinia Store**
|
|
- Help state management for "show on first login"
|
|
|
|
**IV3: Getters**
|
|
- `showTutorial` getter for first-time users
|
|
|
|
**IV4: Token Routing**
|
|
- Email links use secure single-use tokens
|
|
|
|
##### Test Requirements
|
|
|
|
**Component Specs:**
|
|
```javascript
|
|
// spec/javascript/tp_portal/components/HelpOverlay.spec.js
|
|
import { mount } from '@vue/test-utils'
|
|
import HelpOverlay from '@/tp_portal/components/HelpOverlay.vue'
|
|
|
|
describe('HelpOverlay', () => {
|
|
it('displays 5-step guide', () => {
|
|
const wrapper = mount(HelpOverlay)
|
|
expect(wrapper.text()).toContain('Create a cohort')
|
|
})
|
|
})
|
|
```
|
|
|
|
**Integration Tests:**
|
|
- Email delivery tests
|
|
- Help route accessibility
|
|
|
|
**E2E Tests:**
|
|
- First-time user tutorial flow
|
|
|
|
##### Rollback Procedure
|
|
|
|
**If communication fails:**
|
|
1. Revert email templates
|
|
2. Remove help overlays
|
|
3. Restore original DocuSeal docs
|
|
4. Notify users of rollback
|
|
|
|
**Data Safety:** No database changes
|
|
|
|
##### Risk Assessment
|
|
|
|
**MEDIUM because:**
|
|
- User confusion could lead to support overload
|
|
- Poor adoption affects project success
|
|
- Requires coordination with support team
|
|
|
|
**Specific Risks:**
|
|
1. **Email Fatigue:** Too many emails annoy users
|
|
2. **Documentation Overload:** Too much information
|
|
3. **Support Unprepared:** Team not ready for questions
|
|
|
|
**Mitigation:**
|
|
- Phased communication rollout
|
|
- Clear, concise documentation
|
|
- Support team training session
|
|
|
|
##### Success Metrics
|
|
- 80% user adoption rate within 30 days
|
|
- <10 support tickets per week
|
|
- Positive user feedback (>4/5 rating)
|
|
- <5% rollback requests
|
|
```
|
|
|
|
**Effort:** 2 days
|
|
**Risk:** Medium
|
|
**Owner:** PO + Support Team
|
|
|
|
---
|
|
|
|
### ⚠️ HIGH-PRIORITY ISSUES (Should Fix Before Development)
|
|
|
|
#### Issue #4: Feature Flag Strategy Missing
|
|
|
|
**Location:** Section 7.2
|
|
|
|
**Problem:** No mechanism to toggle FloDoc features
|
|
|
|
**Solution:** Add feature flag system to Story 1.2
|
|
|
|
**Actions:**
|
|
|
|
1. **Enhance Story 1.2 (CohortService & Models):**
|
|
|
|
```markdown
|
|
##### Technical Implementation Notes
|
|
|
|
**Feature Flag System:**
|
|
|
|
```ruby
|
|
# app/models/feature_flag.rb
|
|
class FeatureFlag < ApplicationRecord
|
|
validates :name, uniqueness: true
|
|
|
|
def self.enabled?(feature_name)
|
|
flag = find_by(name: feature_name)
|
|
flag&.enabled || false
|
|
end
|
|
|
|
def self.enable!(feature_name)
|
|
find_or_create_by(name: feature_name).update(enabled: true)
|
|
end
|
|
|
|
def self.disable!(feature_name)
|
|
find_or_create_by(name: feature_name).update(enabled: false)
|
|
end
|
|
end
|
|
|
|
# app/controllers/concerns/feature_flag_check.rb
|
|
module FeatureFlagCheck
|
|
extend ActiveSupport::Concern
|
|
|
|
def require_feature(feature_name)
|
|
unless FeatureFlag.enabled?(feature_name)
|
|
render json: { error: "Feature not available" }, status: 403
|
|
end
|
|
end
|
|
end
|
|
|
|
# Usage in controllers
|
|
class Flodoc::CohortsController < ApplicationController
|
|
before_action :require_feature(:flodoc_cohorts)
|
|
|
|
# ...
|
|
end
|
|
```
|
|
|
|
**Database Migration:**
|
|
```ruby
|
|
# db/migrate/20250113000001_create_feature_flags.rb
|
|
class CreateFeatureFlags < ActiveRecord::Migration[7.0]
|
|
def change
|
|
create_table :feature_flags do |t|
|
|
t.string :name, null: false, index: { unique: true }
|
|
t.boolean :enabled, default: false
|
|
t.text :description
|
|
|
|
t.timestamps
|
|
end
|
|
|
|
# Seed default flags
|
|
reversible do |dir|
|
|
dir.up do
|
|
FeatureFlag.create!(name: 'flodoc_cohorts', enabled: false, description: '3-portal cohort management')
|
|
FeatureFlag.create!(name: 'flodoc_portals', enabled: false, description: 'Student/Sponsor portals')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
```
|
|
|
|
**Admin UI for Flags:**
|
|
```vue
|
|
<!-- app/javascript/tp_portal/views/FeatureFlags.vue -->
|
|
<template>
|
|
<div class="feature-flags">
|
|
<h2>Feature Flags</h2>
|
|
<div v-for="flag in flags" :key="flag.name" class="flag-row">
|
|
<span>{{ flag.description }}</span>
|
|
<ToggleSwitch v-model="flag.enabled" @change="updateFlag(flag)" />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
```
|
|
|
|
**Acceptance Criteria Updates:**
|
|
- ✅ FeatureFlag model created
|
|
- ✅ FeatureFlagCheck concern implemented
|
|
- ✅ Default flags seeded (flodoc_cohorts, flodoc_portals)
|
|
- ✅ Admin UI for toggling flags
|
|
- ✅ All FloDoc routes protected by flags
|
|
- ✅ Rollback: Can disable features instantly
|
|
|
|
**Effort:** 0.5 days (add to existing story)
|
|
**Risk:** Low
|
|
**Owner:** Dev
|
|
|
|
---
|
|
|
|
#### Issue #5: Detailed API Contract Specifications Missing
|
|
|
|
**Location:** Section 9.1, Story 3.4
|
|
|
|
**Problem:** No request/response examples
|
|
|
|
**Solution:** Enhance Story 3.4 with API contracts
|
|
|
|
**Actions:**
|
|
|
|
1. **Update Story 3.4 Acceptance Criteria:**
|
|
|
|
```markdown
|
|
##### Acceptance Criteria
|
|
|
|
**Functional:**
|
|
1. ✅ API documentation generated
|
|
2. ✅ Request/response examples for all endpoints
|
|
3. ✅ Error code definitions (400, 401, 403, 404, 422, 500)
|
|
4. ✅ Authentication header examples
|
|
5. ✅ Rate limiting headers documented
|
|
|
|
**API Contract Examples:**
|
|
|
|
```http
|
|
### POST /api/v1/flodoc/cohorts
|
|
Request:
|
|
Headers:
|
|
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
|
|
Content-Type: application/json
|
|
Body:
|
|
{
|
|
"name": "Spring 2025 Learnership",
|
|
"program_type": "learnership",
|
|
"start_date": "2025-03-01",
|
|
"end_date": "2025-08-31",
|
|
"signatory_mapping": {
|
|
"tp_admin": "admin@training.co.za",
|
|
"sponsor": "hr@company.co.za"
|
|
}
|
|
}
|
|
|
|
Response (201 Created):
|
|
{
|
|
"id": 123,
|
|
"name": "Spring 2025 Learnership",
|
|
"status": "draft",
|
|
"cohort_token": "abc123def456",
|
|
"created_at": "2025-01-13T10:00:00Z",
|
|
"links": {
|
|
"self": "/api/v1/flodoc/cohorts/123",
|
|
"enroll": "/api/v1/flodoc/cohorts/123/enroll"
|
|
}
|
|
}
|
|
|
|
Response (422 Unprocessable Entity):
|
|
{
|
|
"errors": ["name can't be blank", "program_type must be learnership or skills"]
|
|
}
|
|
```
|
|
|
|
```http
|
|
### GET /api/v1/flodoc/cohorts/:id
|
|
Request:
|
|
Headers:
|
|
Authorization: Bearer <jwt_token>
|
|
|
|
Response (200 OK):
|
|
{
|
|
"id": 123,
|
|
"name": "Spring 2025 Learnership",
|
|
"status": "draft",
|
|
"students_enrolled": 5,
|
|
"students_completed": 0,
|
|
"sponsor_status": "pending",
|
|
"documents": [
|
|
{
|
|
"id": 456,
|
|
"name": "Learnership Agreement.pdf",
|
|
"status": "signed_by_tp"
|
|
}
|
|
]
|
|
}
|
|
|
|
Response (404 Not Found):
|
|
{
|
|
"error": "Cohort not found"
|
|
}
|
|
```
|
|
|
|
```http
|
|
### POST /api/v1/flodoc/submissions/:id/complete
|
|
Request:
|
|
Headers:
|
|
Authorization: Bearer <ad_hoc_token>
|
|
Body:
|
|
{
|
|
"signature": "data:image/png;base64,...",
|
|
"ip_address": "192.168.1.100"
|
|
}
|
|
|
|
Response (200 OK):
|
|
{
|
|
"status": "completed",
|
|
"completed_at": "2025-01-13T10:30:00Z",
|
|
"download_url": "/api/v1/flodoc/documents/789/download"
|
|
}
|
|
|
|
Response (403 Forbidden):
|
|
{
|
|
"error": "Invalid or expired token"
|
|
}
|
|
```
|
|
|
|
**Error Codes:**
|
|
| Code | Meaning | Example |
|
|
|------|---------|---------|
|
|
| 400 | Bad Request | Missing required field |
|
|
| 401 | Unauthorized | Missing/invalid JWT |
|
|
| 403 | Forbidden | Invalid ad-hoc token |
|
|
| 404 | Not Found | Resource doesn't exist |
|
|
| 422 | Unprocessable | Validation failed |
|
|
| 500 | Server Error | Unexpected error |
|
|
|
|
**Rate Limiting:**
|
|
```
|
|
X-RateLimit-Limit: 100
|
|
X-RateLimit-Remaining: 99
|
|
X-RateLimit-Reset: 1642057200
|
|
```
|
|
|
|
**Integration:**
|
|
1. ✅ OpenAPI/Swagger documentation generated
|
|
2. ✅ Postman collection available
|
|
3. ✅ API tests use contract examples
|
|
|
|
**Security:**
|
|
1. ✅ All endpoints require authentication
|
|
2. ✅ Ad-hoc tokens expire in 24h
|
|
3. ✅ Rate limiting on all routes
|
|
|
|
**Quality:**
|
|
1. ✅ Documentation reviewed by frontend team
|
|
2. ✅ Examples tested and working
|
|
|
|
**Effort:** 0.5 days (add to existing story)
|
|
**Risk:** Low
|
|
**Owner:** Dev
|
|
|
|
---
|
|
|
|
#### Issue #6: User Documentation Missing
|
|
|
|
**Location:** Section 9.2
|
|
|
|
**Problem:** No help guides for 3 portals
|
|
|
|
**Solution:** Create Story 8.6 (similar to Story 8.5 but focused on in-app help)
|
|
|
|
**Actions:**
|
|
|
|
1. **Create Story 8.6:**
|
|
|
|
```markdown
|
|
#### Story 8.6: In-App User Documentation & Help System
|
|
|
|
**Status:** Draft
|
|
**Priority:** High
|
|
**Epic:** Deployment & Documentation
|
|
**Estimated Effort:** 1.5 days
|
|
**Risk Level:** Low
|
|
|
|
##### User Story
|
|
|
|
**As a** User (TP Admin, Student, or Sponsor),
|
|
**I want** contextual help and documentation,
|
|
**So that** I can solve problems without contacting support.
|
|
|
|
##### Background
|
|
|
|
Users need immediate access to:
|
|
- How-to guides
|
|
- Error explanations
|
|
- Best practices
|
|
- Keyboard shortcuts
|
|
|
|
##### Technical Implementation Notes
|
|
|
|
**Help System Architecture:**
|
|
```
|
|
app/javascript/shared/help/
|
|
├── HelpButton.vue
|
|
├── HelpModal.vue
|
|
├── guides/
|
|
│ ├── tp-cohort-creation.md
|
|
│ ├── student-signing.md
|
|
│ └── sponsor-bulk-review.md
|
|
└── error-codes.json
|
|
```
|
|
|
|
**Contextual Help:**
|
|
```vue
|
|
<!-- Component with help -->
|
|
<template>
|
|
<div>
|
|
<h2>Create Cohort</h2>
|
|
<HelpButton section="cohort-creation" />
|
|
<!-- form -->
|
|
</div>
|
|
</template>
|
|
```
|
|
|
|
**Error Help:**
|
|
```javascript
|
|
// Error code mapping
|
|
const ERROR_HELP = {
|
|
'token_expired': {
|
|
message: 'Your access link has expired',
|
|
action: 'Request a new link from your training provider',
|
|
severity: 'high'
|
|
},
|
|
'invalid_token': {
|
|
message: 'This link is invalid',
|
|
action: 'Contact your training provider',
|
|
severity: 'high'
|
|
}
|
|
}
|
|
```
|
|
|
|
##### Acceptance Criteria
|
|
|
|
**Functional:**
|
|
1. ✅ Help button on every major screen
|
|
2. ✅ Modal with contextual guides
|
|
3. ✅ Error code explanations
|
|
4. ✅ Searchable FAQ
|
|
5. ✅ Keyboard shortcut reference
|
|
|
|
**UI/UX:**
|
|
1. ✅ Help accessible in 1 click
|
|
2. ✅ Mobile-friendly help modals
|
|
3. ✅ Consistent help iconography
|
|
|
|
**Integration:**
|
|
1. ✅ Help content loaded from markdown files
|
|
2. ✅ Error messages link to help
|
|
|
|
**Security:**
|
|
1. ✅ No sensitive data in help content
|
|
|
|
**Quality:**
|
|
1. ✅ All guides reviewed by PO
|
|
2. ✅ < 200 words per guide
|
|
|
|
##### Integration Verification (IV1-4)
|
|
|
|
**IV1: API Integration**
|
|
- Help content served via static API or webpack
|
|
|
|
**IV2: Pinia Store**
|
|
- Help state for "shown guides"
|
|
|
|
**IV3: Getters**
|
|
- `getGuide(guideName)` helper
|
|
|
|
**IV4: Token Routing**
|
|
- N/A
|
|
|
|
##### Test Requirements
|
|
|
|
**Component Specs:**
|
|
- Help modal renders correctly
|
|
- Error help displays proper guidance
|
|
|
|
**Integration Tests:**
|
|
- Help routes accessible
|
|
|
|
**E2E Tests:**
|
|
- User clicks help button → sees guide
|
|
|
|
##### Rollback Procedure
|
|
|
|
**If help system fails:**
|
|
1. Remove help buttons
|
|
2. Disable help routes
|
|
3. Restore original error messages
|
|
|
|
**Data Safety:** No DB changes
|
|
|
|
##### Risk Assessment
|
|
|
|
**LOW because:**
|
|
- Documentation only, no code changes
|
|
- Can be updated independently
|
|
- No security implications
|
|
|
|
**Specific Risks:**
|
|
1. **Inaccurate Help:** Wrong information
|
|
2. **Overwhelming:** Too much text
|
|
|
|
**Mitigation:**
|
|
- PO review
|
|
- User testing
|
|
|
|
##### Success Metrics
|
|
- <50% support ticket increase
|
|
- Positive user feedback
|
|
- Help usage >30% of sessions
|
|
```
|
|
|
|
**Effort:** 1.5 days
|
|
**Risk:** Low
|
|
**Owner:** Dev
|
|
|
|
---
|
|
|
|
#### Issue #7: Knowledge Transfer Plan Missing
|
|
|
|
**Location:** Section 9.3
|
|
|
|
**Problem:** No KT plan for operations/support
|
|
|
|
**Solution:** Create Story 8.7
|
|
|
|
**Actions:**
|
|
|
|
1. **Create Story 8.7:**
|
|
|
|
```markdown
|
|
#### Story 8.7: Knowledge Transfer & Operations Documentation
|
|
|
|
**Status:** Draft
|
|
**Priority:** High
|
|
**Epic:** Deployment & Documentation
|
|
**Estimated Effort:** 1 day
|
|
**Risk Level:** Medium
|
|
|
|
##### User Story
|
|
|
|
**As a** Support/Operations Team,
|
|
**I want** comprehensive runbooks and documentation,
|
|
**So that** I can support FloDoc without ad-hoc knowledge transfer.
|
|
|
|
##### Background
|
|
|
|
Operations team needs:
|
|
- Docker command reference
|
|
- Troubleshooting guides
|
|
- Deployment procedures
|
|
- Incident response
|
|
|
|
##### Technical Implementation Notes
|
|
|
|
**Documentation Structure:**
|
|
```
|
|
docs/operations/
|
|
├── runbook.md
|
|
├── troubleshooting.md
|
|
├── deployment-guide.md
|
|
├── incident-response.md
|
|
└── code-review-checklist.md
|
|
```
|
|
|
|
**Runbook Sections:**
|
|
1. System Architecture Overview
|
|
2. Docker Commands Reference
|
|
3. Database Management
|
|
4. Log Interpretation
|
|
5. Common Issues & Solutions
|
|
|
|
**Code Review Checklist:**
|
|
```markdown
|
|
### Pre-Deployment Checklist
|
|
- [ ] Security audit passed
|
|
- [ ] Database migrations reversible
|
|
- [ ] Rollback procedure tested
|
|
- [ ] API contracts updated
|
|
- [ ] Tests passing
|
|
- [ ] Documentation updated
|
|
```
|
|
|
|
##### Acceptance Criteria
|
|
|
|
**Functional:**
|
|
1. ✅ Operations runbook created
|
|
2. ✅ Troubleshooting guide (10 common issues)
|
|
3. ✅ Deployment procedure documented
|
|
4. ✅ Incident response plan
|
|
5. ✅ Code review checklist
|
|
6. ✅ Support team training session held
|
|
|
|
**Integration:**
|
|
1. ✅ Documentation linked from admin portal
|
|
2. ✅ Runbook accessible to support team
|
|
|
|
**Security:**
|
|
1. ✅ No credentials in documentation
|
|
2. ✅ Access control for sensitive docs
|
|
|
|
**Quality:**
|
|
1. ✅ All docs reviewed by senior dev
|
|
2. ✅ Tested procedures (dry run)
|
|
|
|
##### Integration Verification (IV1-4)
|
|
|
|
**IV1: API Integration**
|
|
- N/A (documentation only)
|
|
|
|
**IV2: Pinia Store**
|
|
- N/A
|
|
|
|
**IV3: Getters**
|
|
- N/A
|
|
|
|
**IV4: Token Routing**
|
|
- N/A
|
|
|
|
##### Test Requirements
|
|
|
|
**Integration Tests:**
|
|
- Support team can follow runbook
|
|
- Deployment procedure works
|
|
|
|
**E2E Tests:**
|
|
- N/A
|
|
|
|
##### Rollback Procedure
|
|
|
|
**If KT fails:**
|
|
1. Schedule in-person training
|
|
2. Create video walkthroughs
|
|
3. Pair programming sessions
|
|
|
|
**Data Safety:** N/A
|
|
|
|
##### Risk Assessment
|
|
|
|
**MEDIUM because:**
|
|
- Support team unprepared without this
|
|
- Poor KT leads to operational issues
|
|
- Requires time from senior devs
|
|
|
|
**Specific Risks:**
|
|
1. **Knowledge Gap:** Team not ready
|
|
2. **Documentation Drift:** Docs become outdated
|
|
|
|
**Mitigation:**
|
|
- Assign doc owner
|
|
- Quarterly review process
|
|
|
|
##### Success Metrics
|
|
- Support team passes knowledge test
|
|
- <10% escalation to devs
|
|
- Deployment success rate >95%
|
|
```
|
|
|
|
**Effort:** 1 day
|
|
**Risk:** Medium
|
|
**Owner:** Dev + Support Team
|
|
|
|
---
|
|
|
|
#### Issue #8: Analytics & Monitoring Missing
|
|
|
|
**Location:** Section 10.2
|
|
|
|
**Problem:** No usage tracking or error monitoring
|
|
|
|
**Solution:** Defer to Stories 8.1-8.4 (production infrastructure)
|
|
|
|
**Decision:**
|
|
- **If Option A (Local MVP):** Accept gap, document as post-MVP
|
|
- **If Option B/C (Production):** Add to Stories 8.1-8.4
|
|
|
|
**Recommendation:** Accept gap for now, add to post-MVP backlog
|
|
|
|
**Effort:** 0 days (deferred)
|
|
**Risk:** Low (for local demo)
|
|
**Owner:** PO (to document)
|
|
|
|
---
|
|
|
|
### 📊 MEDIUM-PRIORITY ISSUES (Consider Fixing)
|
|
|
|
#### Issues #9-15: Infrastructure & Documentation Gaps
|
|
|
|
| Issue | Location | Description | Recommendation | Effort |
|
|
|-------|----------|-------------|----------------|--------|
|
|
| #9 | Section 3.3 | DNS/domain registration | Defer to production | 0 |
|
|
| #10 | Section 3.3 | CDN/static hosting | Defer to production | 0 |
|
|
| #11 | Section 3.3 | Cloud provisioning | Defer to production | 0 |
|
|
| #12 | Section 10.1 | Extensibility patterns | Post-MVP documentation | 0.5 |
|
|
| #13 | Section 9.3 | Code review process | Add to Story 8.7 | 0 |
|
|
| #14 | Section 2.3 | Blue-green deployment | Defer to production | 0 |
|
|
| #15 | Section 7.2 | Monitoring triggers | Defer to production | 0 |
|
|
|
|
**Total Medium-Priority Effort:** 0.5 days (if #12 addressed)
|
|
|
|
---
|
|
|
|
## 📅 Implementation Timeline
|
|
|
|
### Phase 1: Critical Fixes (0.5 days)
|
|
**Goal:** Address 3 blocking issues
|
|
|
|
| Task | Owner | Effort | Output |
|
|
|------|-------|--------|--------|
|
|
| 1. Decide deployment strategy | PO | 0.1d | Decision + scope doc |
|
|
| 2. Update PRD Section 1.1 | PO | 0.1d | Scope declaration |
|
|
| 3. Enhance Story 7.4 (security) | Dev | 0.2d | Security checklist |
|
|
| 4. Create Story 8.5 (user comm) | PO | 0.1d | New story |
|
|
|
|
**Total:** 0.5 days
|
|
|
|
---
|
|
|
|
### Phase 2: High-Priority Fixes (2.5 days)
|
|
**Goal:** Address 5 high-priority issues
|
|
|
|
| Task | Owner | Effort | Output |
|
|
|------|-------|--------|--------|
|
|
| 5. Add feature flags to Story 1.2 | Dev | 0.5d | Feature flag system |
|
|
| 6. Enhance Story 3.4 (API contracts) | Dev | 0.5d | API documentation |
|
|
| 7. Create Story 8.6 (user docs) | PO | 0.5d | New story |
|
|
| 8. Create Story 8.7 (KT plan) | PO | 0.5d | New story |
|
|
| 9. Document monitoring gap | PO | 0.1d | Post-MVP note |
|
|
|
|
**Total:** 2.1 days
|
|
|
|
---
|
|
|
|
### Phase 3: Medium-Priority Fixes (0.5 days)
|
|
**Goal:** Address 1 medium-priority issue
|
|
|
|
| Task | Owner | Effort | Output |
|
|
|------|-------|--------|--------|
|
|
| 10. Add extensibility docs (Story 12) | Dev | 0.5d | Architecture doc |
|
|
|
|
**Total:** 0.5 days
|
|
|
|
---
|
|
|
|
### Phase 4: Validation (0.5 days)
|
|
**Goal:** Re-validate PRD
|
|
|
|
| Task | Owner | Effort | Output |
|
|
|------|-------|--------|--------|
|
|
| 11. Update PRD with all fixes | PO | 0.2d | PRD v2.1 |
|
|
| 12. Run PO validation again | PO | 0.1d | Validation report |
|
|
| 13. Get final approval | PO | 0.2d | Approval signal |
|
|
|
|
**Total:** 0.5 days
|
|
|
|
---
|
|
|
|
## 🎯 Total Effort Summary
|
|
|
|
| Phase | Effort | Owner |
|
|
|-------|--------|-------|
|
|
| Phase 1: Critical | 0.5 days | PO + Dev |
|
|
| Phase 2: High-Priority | 2.1 days | PO + Dev |
|
|
| Phase 3: Medium-Priority | 0.5 days | Dev |
|
|
| Phase 4: Validation | 0.5 days | PO |
|
|
| **TOTAL** | **3.6 days** | **~1 week** |
|
|
|
|
---
|
|
|
|
## 📋 Updated PRD Structure After Fixes
|
|
|
|
### New Stories to Add
|
|
|
|
**Story 8.5:** User Communication & Training Materials (2 days)
|
|
**Story 8.6:** In-App User Documentation (1.5 days)
|
|
**Story 8.7:** Knowledge Transfer & Operations (1 day)
|
|
|
|
**Optional:**
|
|
**Story 8.1:** Basic Production Deployment (Deferred)
|
|
**Story 8.2:** CI/CD Pipeline (Deferred)
|
|
**Story 8.3:** Monitoring & Alerting (Deferred)
|
|
**Story 8.4:** Production Documentation (Deferred)
|
|
|
|
### Stories to Enhance
|
|
|
|
**Story 1.2:** Add feature flag system
|
|
**Story 3.4:** Add API contract examples
|
|
**Story 7.4:** Add security audit checklist
|
|
|
|
### PRD Sections to Update
|
|
|
|
**Section 1.1:** Add scope boundaries
|
|
**Section 2.3:** Clarify deployment approach
|
|
**Section 7.1:** Add security checklist reference
|
|
**Section 7.3:** Add user communication plan reference
|
|
**Section 9.1:** Add API contract examples
|
|
**Section 9.2:** Add user documentation plan
|
|
**Section 9.3:** Add KT plan reference
|
|
|
|
---
|
|
|
|
## ✅ Success Criteria
|
|
|
|
### Before Development Can Proceed:
|
|
|
|
1. ✅ **Deployment Strategy Decided** (Option A/B/C)
|
|
2. ✅ **PRD Updated** with scope declaration
|
|
3. ✅ **Story 7.4 Enhanced** with security checklist
|
|
4. ✅ **Story 8.5 Created** (user communication)
|
|
5. ✅ **All changes committed** to git
|
|
6. ✅ **PO Re-validation** passed
|
|
|
|
### After Development (Post-MVP):
|
|
|
|
7. ✅ **Stories 8.6-8.7** implemented
|
|
8. ✅ **Stories 8.1-8.4** (if production needed)
|
|
9. ✅ **Monitoring & Analytics** implemented
|
|
10. ✅ **User feedback** collected
|
|
|
|
---
|
|
|
|
## 🚀 Next Actions (Immediate)
|
|
|
|
### For You (PO):
|
|
|
|
**Action 1:** Choose deployment strategy
|
|
```
|
|
Command: Reply with Option A, B, or C
|
|
```
|
|
|
|
**Action 2:** Once chosen, I'll help you:
|
|
- Update PRD Section 1.1
|
|
- Create Story 8.5
|
|
- Enhance Story 7.4
|
|
|
|
**Action 3:** After your approval:
|
|
- Commit changes to git
|
|
- Run `*execute-checklist-po @docs/prd.md`
|
|
- Get final approval
|
|
|
|
### For Dev (After PO Approval):
|
|
|
|
**Wait for:** PO signal with updated PRD
|
|
|
|
**Then implement:**
|
|
1. Story 1.2 enhancements (feature flags)
|
|
2. Story 3.4 enhancements (API contracts)
|
|
3. Stories 8.5-8.7 (new stories)
|
|
|
|
---
|
|
|
|
## 📊 Risk Assessment
|
|
|
|
### If We Skip These Fixes:
|
|
|
|
| Issue | Risk | Impact |
|
|
|-------|------|--------|
|
|
| No deployment strategy | 🔴 HIGH | Cannot deploy to production |
|
|
| No security audit | 🔴 HIGH | Legal/compliance risk |
|
|
| No user communication | 🔴 HIGH | Poor adoption, support overload |
|
|
| No feature flags | ⚠️ MEDIUM | All-or-nothing deployment |
|
|
| No API contracts | ⚠️ MEDIUM | Integration issues |
|
|
| No user docs | ⚠️ MEDIUM | Support burden |
|
|
| No KT plan | ⚠️ MEDIUM | Operational issues |
|
|
|
|
**Overall Risk:** 🔴 **UNACCEPTABLE** without fixes
|
|
|
|
### If We Fix All Issues:
|
|
|
|
| Benefit | Impact |
|
|
|---------|--------|
|
|
| Clear scope | ✅ Stakeholder alignment |
|
|
| Secure system | ✅ Legal compliance |
|
|
| User-ready | ✅ High adoption |
|
|
| Well-documented | ✅ Low support burden |
|
|
| Production path | ✅ Future-ready |
|
|
|
|
**Overall Risk:** ✅ **ACCEPTABLE** for development
|
|
|
|
---
|
|
|
|
## 💡 Recommendation
|
|
|
|
**Approach:** Option A (Local Docker MVP) + Complete Fixes
|
|
|
|
**Rationale:**
|
|
1. Aligns with management goal ("validate locally first")
|
|
2. Fastest path to demo
|
|
3. Defers production investment
|
|
4. All blocking issues addressed
|
|
5. Clear path to production later
|
|
|
|
**Timeline:**
|
|
- **Week 1:** Fix all issues (3.6 days)
|
|
- **Week 2:** PO re-validation + approval
|
|
- **Week 3+:** Development begins
|
|
|
|
---
|
|
|
|
## 📎 Appendices
|
|
|
|
### Appendix A: Decision Matrix
|
|
|
|
| Criteria | Option A | Option B | Option C |
|
|
|----------|----------|----------|----------|
|
|
| Time to Demo | ✅ Fastest | ⚠️ Slow | ⚠️ Medium |
|
|
| Production Ready | ❌ No | ✅ Yes | ⚠️ Partial |
|
|
| Cost | ✅ Low | 🔴 High | ⚠️ Medium |
|
|
| Risk | ✅ Low | ⚠️ Medium | ⚠️ Medium |
|
|
| **Recommendation** | ✅ **BEST** | ❌ Overkill | ⚠️ OK |
|
|
|
|
### Appendix B: Issue Priority Matrix
|
|
|
|
| Priority | Issues | Effort | Urgency |
|
|
|----------|--------|--------|---------|
|
|
| 🔴 Blocking | 1, 2, 3 | 0.5d | Immediate |
|
|
| ⚠️ High | 4, 5, 6, 7, 8 | 2.1d | Before Dev |
|
|
| 📊 Medium | 9-15 | 0.5d | Optional |
|
|
|
|
### Appendix C: Quick Reference
|
|
|
|
**3 Blocking Issues:**
|
|
1. Production deployment strategy
|
|
2. Security audit checklist
|
|
3. User communication plan
|
|
|
|
**5 High-Priority Issues:**
|
|
4. Feature flags
|
|
5. API contracts
|
|
6. User documentation
|
|
7. Knowledge transfer
|
|
8. Monitoring (deferred)
|
|
|
|
**Decision Required:**
|
|
- Choose deployment option (A/B/C)
|
|
|
|
---
|
|
|
|
**Document Prepared By:** John (Product Manager)
|
|
**Date:** 2026-01-13
|
|
**Status:** Draft - Pending Your Approval
|
|
**Next Step:** Choose deployment strategy (Option A/B/C)
|