docs(roadmap): add gap closure phases 8-9
Milestone audit found 4 gaps: - Session ID bug in error handling (critical) - Additional work sections not integrated (Montage, etc.) - Sonstiges free text missing - i18n not implemented (REQ-7) Phase 8: Bug Fixes & Legacy Parity Phase 9: Internationalization Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,8 @@ None
|
||||
- [x] **Phase 5: Volume Calculations** - cbm calculations matching legacy logic exactly
|
||||
- [x] **Phase 6: Email System** - Legacy HTML table format generation and wp_mail() integration
|
||||
- [x] **Phase 7: Captcha & Validation** - reCAPTCHA v2/v3, hCaptcha, inline validation, i18n
|
||||
- [ ] **Phase 8: Bug Fixes & Legacy Parity** - Session bug fix, additional work sections, Sonstiges free text
|
||||
- [ ] **Phase 9: Internationalization** - i18n with gettext, German/English translation files
|
||||
|
||||
## Phase Details
|
||||
|
||||
@@ -91,6 +93,28 @@ Plans:
|
||||
Plans:
|
||||
- [x] 07-01: Captcha verification and inline validation
|
||||
|
||||
### Phase 8: Bug Fixes & Legacy Parity
|
||||
**Goal**: Fix session ID bug in error handling, integrate additional work sections (Montage, Schrank, Elektriker, Dübelarbeiten, Packarbeiten, Anfahrt) into form and email, add Sonstiges free text field
|
||||
**Depends on**: Phase 7
|
||||
**Research**: Unlikely (internal fixes and integration of existing data)
|
||||
**Gap Closure**: Closes session bug, additional work sections, Sonstiges gaps from v1.0 audit
|
||||
**Plans**: 0/1
|
||||
**Status**: Not started
|
||||
|
||||
Plans:
|
||||
- [ ] 08-01: Fix session bug, render additional work sections, add Sonstiges
|
||||
|
||||
### Phase 9: Internationalization
|
||||
**Goal**: Wrap all user-facing strings in gettext functions, create .pot/.po/.mo translation files, load text domain, provide German and English translations
|
||||
**Depends on**: Phase 8
|
||||
**Research**: Unlikely (WordPress i18n is well-documented)
|
||||
**Gap Closure**: Closes REQ-7 (i18n support) from v1.0 audit
|
||||
**Plans**: 0/1
|
||||
**Status**: Not started
|
||||
|
||||
Plans:
|
||||
- [ ] 09-01: Wrap strings in gettext, generate translation files, load text domain
|
||||
|
||||
## Progress
|
||||
|
||||
| Phase | Plans Complete | Status | Completed |
|
||||
@@ -102,3 +126,5 @@ Plans:
|
||||
| 5. Volume Calculations | 1/1 | Complete | 2026-01-16 |
|
||||
| 6. Email System | 1/1 | Complete | 2026-01-16 |
|
||||
| 7. Captcha & Validation | 1/1 | Complete | 2026-01-16 |
|
||||
| 8. Bug Fixes & Legacy Parity | 0/1 | Not started | - |
|
||||
| 9. Internationalization | 0/1 | Not started | - |
|
||||
|
||||
@@ -5,16 +5,16 @@
|
||||
See: .planning/PROJECT.md (updated 2026-01-16)
|
||||
|
||||
**Core value:** Email format identical to legacy — office staff workflow depends on the exact HTML table structure.
|
||||
**Current focus:** Project complete — All 7 phases finished
|
||||
**Current focus:** Gap closure phases 8-9 (audit fixes before v1.0 completion)
|
||||
|
||||
## Current Position
|
||||
|
||||
Phase: 7 of 7 (Captcha & Validation) — COMPLETE
|
||||
Plan: 1 of 1 in current phase
|
||||
Status: All phases complete
|
||||
Last activity: 2026-01-16 — Completed 07-01-PLAN.md
|
||||
Phase: 8 of 9 (Bug Fixes & Legacy Parity)
|
||||
Plan: Not started
|
||||
Status: Ready to plan
|
||||
Last activity: 2026-02-06 — Added gap closure phases from milestone audit
|
||||
|
||||
Progress: ██████████ 100% 🎉
|
||||
Progress: ███████░░░ 78% (7/9 phases)
|
||||
|
||||
## Performance Metrics
|
||||
|
||||
@@ -34,11 +34,13 @@ Progress: ██████████ 100% 🎉
|
||||
| 5 | 1 | Real-time calculations with German decimal support |
|
||||
| 6 | 1 | Form handler, email generator, wp_mail() integration |
|
||||
| 7 | 1 | Captcha verification and inline validation |
|
||||
| 8 | — | Bug fixes & legacy parity (gap closure) |
|
||||
| 9 | — | Internationalization (gap closure) |
|
||||
|
||||
**Overall Trend:**
|
||||
- All phases completed successfully
|
||||
- Phases 1-7 completed successfully
|
||||
- Milestone audit found 4 gaps requiring phases 8-9
|
||||
- No blockers encountered
|
||||
- Consistent execution pattern across all phases
|
||||
|
||||
## Accumulated Context
|
||||
|
||||
@@ -52,36 +54,21 @@ Recent decisions affecting current work:
|
||||
| 1 | Class prefix over namespaces | Broader WordPress compatibility |
|
||||
| 1 | Capability: edit_posts | Allow editors and admins (not just admins) |
|
||||
| 1 | Menu position 25 | Below Comments, logical grouping |
|
||||
| Audit | Fix all 4 gaps for v1.0 | Full legacy parity before shipping |
|
||||
|
||||
### Deferred Issues
|
||||
|
||||
None yet.
|
||||
- Admin resend email (future feature)
|
||||
- Email queue/retry mechanism (low priority)
|
||||
- reCAPTCHA v3 non-JS fallback (low priority)
|
||||
|
||||
### Blockers/Concerns
|
||||
|
||||
None yet.
|
||||
None.
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-01-16
|
||||
Stopped at: Completed 07-01-PLAN.md (Captcha & Validation)
|
||||
Last session: 2026-02-06
|
||||
Stopped at: Created gap closure phases 8-9
|
||||
Resume file: None
|
||||
Next up: Project complete! Ready for testing and deployment.
|
||||
|
||||
## Project Completion
|
||||
|
||||
**All 7 phases successfully implemented:**
|
||||
1. ✅ Foundation - CPT and admin menu
|
||||
2. ✅ Legacy Data Extraction - Furniture items and cbm values
|
||||
3. ✅ Settings System - Email and captcha configuration
|
||||
4. ✅ Form Rendering - Complete form HTML
|
||||
5. ✅ Volume Calculations - Real-time cbm totals
|
||||
6. ✅ Email System - Legacy format generation and sending
|
||||
7. ✅ Captcha & Validation - Spam protection and user validation
|
||||
|
||||
**Next Steps:**
|
||||
- Manual testing in WordPress environment
|
||||
- Configure captcha keys in settings
|
||||
- Test all three captcha providers
|
||||
- Test form submission flow
|
||||
- Deploy to production
|
||||
Next up: Plan phase 8 (Bug Fixes & Legacy Parity)
|
||||
|
||||
166
.planning/v1.0-MILESTONE-AUDIT.md
Normal file
166
.planning/v1.0-MILESTONE-AUDIT.md
Normal file
@@ -0,0 +1,166 @@
|
||||
---
|
||||
milestone: "1.0"
|
||||
audited: 2026-02-06
|
||||
status: gaps_found
|
||||
scores:
|
||||
requirements: 8/9
|
||||
phases: 7/7
|
||||
integration: 8/10
|
||||
flows: 3/3
|
||||
gaps:
|
||||
requirements:
|
||||
- "REQ-7: i18n support — German-only implemented, no .pot/.po files, no gettext functions, no English translation"
|
||||
integration:
|
||||
- "Session ID bug: session_id() used without session_start() for error transient keys — may cause error messages to display to wrong user or not display at all"
|
||||
- "Additional work sections (Montage, Schrank, Elektriker, Dubelarbeiten, Packarbeiten, Anfahrt) extracted in Phase 2 but never integrated into form, email, or validation"
|
||||
- "Sonstiges free text section not implemented"
|
||||
flows: []
|
||||
tech_debt:
|
||||
- phase: "02-legacy-data"
|
||||
items:
|
||||
- "get_additional_work() method is orphaned — data extracted but never consumed"
|
||||
- phase: "06-email"
|
||||
items:
|
||||
- "session_id() for transient keys may not work in all hosting environments"
|
||||
- "No admin resend email feature (documented as future)"
|
||||
- "No email queue/retry mechanism"
|
||||
- phase: "07-captcha"
|
||||
items:
|
||||
- "reCAPTCHA v3 has no fallback for non-JS users"
|
||||
- "Email validation uses simple regex, may not catch all invalid formats"
|
||||
---
|
||||
|
||||
# Milestone Audit: v1.0 MVP
|
||||
|
||||
**Audited:** 2026-02-06
|
||||
**Status:** GAPS FOUND
|
||||
**Auditor:** gsd-integration-checker
|
||||
|
||||
## Requirements Coverage
|
||||
|
||||
| # | Requirement | Status | Phase | Notes |
|
||||
|---|------------|--------|-------|-------|
|
||||
| 1 | Plugin infrastructure with CPT `umzugsliste_entry` | SATISFIED | 1 | CPT registered, admin menu working |
|
||||
| 2 | Settings page (email, captcha, thank you URL) | SATISFIED | 3 | WordPress Settings API, all 4 captcha options |
|
||||
| 3 | Shortcode `[umzugsliste]` renders form matching legacy | SATISFIED | 4 | 7 rooms, 118 furniture items rendered |
|
||||
| 4 | Volume calculations matching legacy logic exactly | SATISFIED | 5 | Real-time JS with German decimal formatting |
|
||||
| 5 | Captcha integration (all three providers) | SATISFIED | 7 | reCAPTCHA v2, v3, hCaptcha all implemented |
|
||||
| 6 | Legacy HTML table email format generation | SATISFIED | 6 | HTML tables with bgcolor, legacy structure |
|
||||
| 7 | i18n support (German primary, English secondary) | **NOT SATISFIED** | — | No gettext functions, no .pot/.po files, German-only |
|
||||
| 8 | Form submission saves to CPT before email | SATISFIED | 6 | CPT save → email send order verified |
|
||||
| 9 | Inline form validation (not JS alerts) | SATISFIED | 7 | Client-side + server-side, no alerts |
|
||||
|
||||
**Score: 8/9 requirements satisfied**
|
||||
|
||||
## Phase Completion
|
||||
|
||||
| Phase | Status | SUMMARY.md | Plans |
|
||||
|-------|--------|-----------|-------|
|
||||
| 1. Foundation | Complete | Yes | 1/1 |
|
||||
| 2. Legacy Data Extraction | Complete | Yes | 1/1 |
|
||||
| 3. Settings System | Complete | Yes | 1/1 |
|
||||
| 4. Form Rendering | Complete | Yes | 1/1 |
|
||||
| 5. Volume Calculations | Complete | Yes | 1/1 |
|
||||
| 6. Email System | Complete | Yes | 1/1 |
|
||||
| 7. Captcha & Validation | Complete | Yes | 1/1 |
|
||||
|
||||
**Score: 7/7 phases complete**
|
||||
|
||||
## Cross-Phase Integration
|
||||
|
||||
### Verified Connections
|
||||
|
||||
- Phase 1 → All: Plugin bootstrap, CPT, constants properly consumed
|
||||
- Phase 2 → Phase 4: `get_rooms()` and `get_furniture_items()` used in form renderer
|
||||
- Phase 2 → Phase 5: CBM values passed via data attributes, JS reads correctly
|
||||
- Phase 2 → Phase 6: Email generator uses furniture data to build HTML tables
|
||||
- Phase 3 → Phase 6: Receiver email and thank you URL used in form handler
|
||||
- Phase 3 → Phase 7: Captcha provider and keys used for widget/verification
|
||||
- Phase 4 → Phase 5: Data attributes and DOM structure consumed by JS calculations
|
||||
- Phase 4 → Phase 6: Field names match expected POST format in form handler
|
||||
- Phase 4 → Phase 7: Error display and captcha widget integrated in form
|
||||
- Phase 6 → Phase 1: CPT entries created with proper meta data
|
||||
- Phase 7 → Phase 6: Captcha verification runs before form processing
|
||||
|
||||
### Integration Score: 8/10
|
||||
|
||||
## E2E Flow Verification
|
||||
|
||||
### Flow 1: Happy Path (Form → Email → Redirect)
|
||||
**Status: COMPLETE**
|
||||
Load form → fill data → real-time calculations → submit → nonce check → captcha check → validation → sanitize → save CPT → generate email → send via wp_mail → redirect to thank you page
|
||||
|
||||
### Flow 2: Validation Error Path
|
||||
**Status: COMPLETE (with session bug)**
|
||||
Submit invalid → client validation blocks OR server validation catches → error transient → redirect back → display errors inline
|
||||
**Bug:** `session_id()` used without `session_start()` — transient key may be empty
|
||||
|
||||
### Flow 3: Admin View Submissions
|
||||
**Status: COMPLETE**
|
||||
Navigate to Umzugsliste → Eintraege → view CPT list → click entry → see JSON data and meta
|
||||
|
||||
**Flows Score: 3/3 flows functional**
|
||||
|
||||
## Critical Gaps
|
||||
|
||||
### 1. i18n Not Implemented (Requirement 7)
|
||||
- No `__()` or `_e()` gettext function calls anywhere
|
||||
- No `.pot`, `.po`, or `.mo` translation files
|
||||
- No `languages/` directory
|
||||
- Text domain declared but never loaded (`load_plugin_textdomain()` missing)
|
||||
- All user-facing strings hardcoded in German
|
||||
- **Decision needed:** Is English support required for v1.0?
|
||||
|
||||
### 2. Session ID Bug
|
||||
- `session_id()` returns empty string when PHP session not started
|
||||
- Used in form-handler.php (lines 72, 82) and form-renderer.php (line 49)
|
||||
- Transient key degrades to `umzugsliste_errors_default`
|
||||
- In multi-user scenarios, errors could cross-contaminate between users
|
||||
- **Fix required before production**
|
||||
|
||||
### 3. Additional Work Sections Orphaned
|
||||
- Phase 2 extracted 32 fields across 6 sections (Montage, Schrank, Elektriker, Dubelarbeiten, Packarbeiten, Anfahrt)
|
||||
- `get_additional_work()` method exists but is never called
|
||||
- Not rendered in form, not included in email, not validated
|
||||
- **Decision needed:** Required for v1.0 or defer to v1.1?
|
||||
|
||||
### 4. Sonstiges Free Text Missing
|
||||
- Legacy form had a free text "Sonstiges" section
|
||||
- Not implemented in any phase
|
||||
- **Decision needed:** Required for v1.0 or defer?
|
||||
|
||||
## Tech Debt
|
||||
|
||||
| Phase | Item | Priority |
|
||||
|-------|------|----------|
|
||||
| 06 | session_id() without session_start() | Critical |
|
||||
| 02 | get_additional_work() orphaned | High |
|
||||
| 06 | No admin resend email | Low |
|
||||
| 06 | No email queue/retry | Low |
|
||||
| 07 | reCAPTCHA v3 no non-JS fallback | Low |
|
||||
| 07 | Simple email regex validation | Low |
|
||||
|
||||
## Security Verification
|
||||
|
||||
- Nonce protection: IMPLEMENTED
|
||||
- Data sanitization: IMPLEMENTED
|
||||
- SQL injection protection: SAFE (WordPress APIs)
|
||||
- XSS protection: IMPLEMENTED (esc_html, esc_attr)
|
||||
- CSRF protection: IMPLEMENTED (nonce + referer check)
|
||||
|
||||
## Recommendations
|
||||
|
||||
### Before Completing Milestone
|
||||
1. **Decide on i18n:** Accept German-only for v1.0 or implement before shipping
|
||||
2. **Fix session bug:** Replace `session_id()` with reliable alternative
|
||||
3. **Decide on additional work sections:** Ship without or implement
|
||||
|
||||
### For Next Milestone
|
||||
- i18n with full English translation (if deferred)
|
||||
- Additional work sections integration
|
||||
- Sonstiges free text field
|
||||
- Admin resend email
|
||||
- Production testing across hosting environments
|
||||
|
||||
---
|
||||
*Generated by gsd-integration-checker on 2026-02-06*
|
||||
Reference in New Issue
Block a user