f7f225ad09c5b1bfe1fe11d8bcea9c274e5da49d
15
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f7f225ad09 |
Implement product selection landing page (Feature 002)
Adds landing page at root URL (/) that displays all active products with links to feedback submission forms. This replaces the requirement for users to know direct product URLs. Changes: - Added Product.load_active() method to filter and sort active products alphabetically - Created landing route blueprint with error handling and structured logging - Registered landing blueprint in app factory, replacing old index route - Created landing page template with product list and empty state - Added comprehensive contract tests (6 tests) covering active products, filtering, sorting, XSS prevention - Added integration test for complete user flow from landing page to submission form All 7 tests pass. User Story 1 (P1 - MVP) complete. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
8640d803a6 |
Generate task breakdown for product selection landing page (Feature 002)
Created dependency-ordered task list organized by user story priority. ## Task Organization: **Total: 25 tasks** across 6 phases ### Phase 1: Setup - Empty (reuses existing Flask infrastructure) ### Phase 2: Foundational (1 task) - T001: Extend Product model with load_active() method - BLOCKS User Story 1 ### Phase 3: User Story 1 - Browse and Select Product (12 tasks) 🎯 MVP **Tests (7 tasks - write FIRST per TDD)**: - T002-T007: Contract tests for GET / route (6 scenarios) - T008: Integration test for complete user flow **Implementation (5 tasks)**: - T009: Create landing route blueprint - T010: Register blueprint - T011: Create landing template - T012: Add logging - T013: Verify all tests pass **Independent Test**: Visit `/`, see products, click product, verify redirect ### Phase 4: User Story 2 - Product Availability Status (0 tasks) - Already implemented in US1 (Product.load_active() filtering) - Verified by T004 contract test ### Phase 5: User Story 3 - Direct Navigation (2 tasks) - T014-T015: Manual backwards compatibility verification - Ensures `/submit/{slug}` URLs still work ### Phase 6: Polish & Cross-Cutting (10 tasks) - T016-T024: Manual verification checklist (9 checks) - T025: Final commit ## Task Dependencies: **Critical Path**: 1. T001 (extend model) → BLOCKS US1 2. T002-T008 (write tests, verify FAIL) → TDD 3. T009-T012 (implement) → tests should PASS 4. T013 (verify) → MVP complete **Parallel Opportunities**: - Tests T002-T007 can be written in parallel (same file, different functions) - Manual checks T016-T024 can run in parallel (independent validations) ## Implementation Strategy: **MVP First** (T001-T013): 1. Extend Product model (T001) 2. Write all tests, verify FAIL (T002-T008) 3. Implement feature (T009-T012) 4. Verify tests PASS (T013) 5. STOP → Deploy MVP (User Story 1 complete) **Incremental Delivery**: - Foundation (T001) → US1 (T002-T013) → US3 verification (T014-T015) → Polish (T016-T025) - Each checkpoint delivers independently testable value **TDD Compliance** (Constitution Principle II): - All contract/integration tests written BEFORE implementation - Tests MUST fail initially (proves they test something) - Implementation makes tests pass - Follows established pattern from feature 001 ## File Structure: **New Files** (6): - app/routes/landing.py - Landing route - app/templates/landing/index.html - Product list template - tests/contract/test_landing_routes.py - Contract tests - tests/integration/test_landing_flow.py - Integration test **Modified Files** (2): - app/models/product.py - Add load_active() method - app/__init__.py - Register landing blueprint ## Next Steps: Run `/speckit.implement` to execute tasks following TDD discipline 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
0f71ba969f |
Add implementation plan for product selection landing page (Feature 002)
Completed planning phases 0 and 1 for simple landing page feature. ## Plan Overview: **Approach**: Minimal addition to existing Flask app - reuse Product model, add one route, one template. No new dependencies or complexity. **Constitution Check**: ✅ All 5 principles satisfied - Specification-first development (spec.md complete) - Test-first discipline (TDD workflow defined) - Independent user stories (3 stories, all independently testable) - Simplicity (reuses existing Flask/Jinja2/Product architecture) - Documentation as code (all artifacts in specs/002-product-list/) ## Artifacts Created: ### Phase 0: Research (research.md) - Reuses infrastructure from feature 001 (Flask, Jinja2, file storage) - Single new decision: Product.load_active() method for filtering/sorting - Performance analysis: <100ms for 100 products (well under 1s target) ### Phase 1: Design & Contracts - **data-model.md**: Documents Product model extension (load_active method) - **contracts/landing-page.yaml**: OpenAPI contract for GET / route - **quickstart.md**: Developer implementation guide with: - Step-by-step implementation checklist - Code snippets for route, template, tests - TDD workflow (write tests → verify fail → implement → pass) - Manual verification checklist ### Agent Context - Updated CLAUDE.md with feature technologies (no new tech added) ## Implementation Summary: **New Files** (to be created): - app/routes/landing.py - Landing page route handler - app/templates/landing/index.html - Product list template - tests/contract/test_landing_routes.py - Contract tests (6 scenarios) - tests/integration/test_landing_flow.py - User journey test **Modified Files**: - app/models/product.py - Add load_active() class method - app/__init__.py - Register landing blueprint ## Key Technical Decisions: 1. **Filtering**: status=='active' AND submission_url_slug exists 2. **Sorting**: Alphabetical by name (case-insensitive), then product_id 3. **Empty State**: "No products are currently accepting feedback" message 4. **XSS Prevention**: Jinja2 auto-escaping (no manual escaping needed) 5. **Performance**: File I/O sufficient (<1s for 100 products, no caching) ## Next Steps: 1. Run /speckit.tasks to generate tasks.md 2. Run /speckit.implement to execute TDD workflow 3. Verify all tests pass 4. Manual verification checklist 5. Create pull request 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
fb418bac65 |
Rename feature branch from 002-at-the-moment to 002-product-list
Changed branch name and updated all references: - Git branch: 002-at-the-moment → 002-product-list - Specs directory: specs/002-at-the-moment/ → specs/002-product-list/ - spec.md: Updated feature branch reference - requirements.md: Updated feature references Reason: More descriptive name that better reflects the feature purpose (product selection landing page). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
0dc9e6a0b5 |
Add specification for product selection landing page (Feature 002)
Feature: Enable visitors to discover and select products for feedback submission ## What was specified: User Stories (prioritized and independently testable): - P1: Browse and Select Product - Core discoverability functionality - P2: See Product Availability Status - Transparency about active/archived - P3: Direct Navigation Compatibility - Backwards compatibility preserved Functional Requirements (14 total): - Landing page at root URL (/) showing active products - File-based product retrieval and filtering (status=active) - Product name display with clickable navigation - Graceful handling of missing descriptions - Alphabetical sorting and empty state handling - Server-side rendering (no JavaScript) - XSS prevention via HTML escaping - Access logging for monitoring Success Criteria (8 measurable outcomes): - ≤2 clicks to reach submission form - <1s load time for 100 products - Zero broken direct URLs (backwards compatibility) - XSS prevention validated - Works without JavaScript Edge Cases Covered: - No active products scenario - All products archived - Missing descriptions - Long/special character product names - Invalid submission_url_slug ## Artifacts created: - specs/002-at-the-moment/spec.md - Full feature specification - specs/002-at-the-moment/checklists/requirements.md - Implementation checklist ## Next steps: - Run /speckit.plan to generate implementation plan - Create tasks.md from plan template - Implement feature following TDD discipline 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
0b8341c1aa |
Mark Phase 7 tasks (T193-T210) as complete in tasks.md
All 18 Phase 7 polish tasks have been implemented and committed
(commit
|
||
|
|
d98347b6f0 |
Defer Phase 6 (User Story 4) for POC - Manual YAML management
Updated specifications to reflect that User Story 4 (Product/Service
Registration and Management) is out of scope for the proof-of-concept.
Admin UI for product/user management is deferred in favor of manual
YAML file editing.
Specification Updates:
spec.md:
- Marked User Story 4 as [DEFERRED FOR POC]
- Added rationale: Manual management sufficient for POC
- Added manual management approach documentation
- Preserved original requirements (strikethrough) for future reference
- Updated FR-045 to FR-054 to indicate DEFERRED or IMPLEMENTED status
- Clarified which features work via YAML vs need admin UI
plan.md:
- Added POC Scope Update note in Summary section
- Documented that User Stories 1-3 are IMPLEMENTED
- Explained User Story 4 deferral and manual management approach
- Preserved original plan structure for future reference
tasks.md:
- Marked Phase 6 header as [DEFERRED FOR POC]
- Added comprehensive rationale and manual management guide
- Documented what's already implemented (models, access control)
- Listed manual operations: create product, edit product, create user, etc.
- Clarified that underlying features work, only admin UI is deferred
- Preserved all T140-T192 tasks for future implementation
- Added "Future Consideration" note
Rationale:
For a proof-of-concept, the admin UI adds no validation value. The core
functionality (anonymous submission, AI analysis, dashboard access) is
fully implemented and testable. Products and users can be managed via
YAML files:
- Products: data/products/{id}/config.yaml
- Users: data/users.yaml (with bcrypt passwords)
What Works Without Admin UI:
✅ Multi-product support (Product model + access control)
✅ Product owner assignment (via users.yaml product_ids field)
✅ Unique submission URLs per product (submission_url_slug)
✅ Archived product blocking (checked in submission route)
✅ Role-based access (owners see assigned, admins see all)
Decision Benefits:
- Reduces POC scope to essential features
- Eliminates ~53 admin UI tasks (T140-T192)
- Maintains all core product/user functionality
- Enables faster POC validation
- Can be implemented later if scaling is needed
Next Steps:
Focus on Phase 7 (Polish) - production hardening, documentation,
performance verification, and deployment readiness.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
||
|
|
75d4ba9f3b |
Complete Phase 5 (User Story 3) - Product Owner Dashboard
Verification revealed Phase 5 was 100% complete (47/47 tasks). All dashboard features fully implemented and tested. Marked all tasks as complete in tasks.md. Implementation Status: - Tests (T093-T105): ✅ 13/13 complete - 12 contract tests for auth, dashboard, detail, status, downloads - 2 integration tests for complete access flows - All 17 tests passing in 10.51s - Authentication (T107-T110): ✅ 4/4 complete - Login/logout routes with Flask-Login - Login template with CSRF protection - Password verification with bcrypt - Session management - Storage Service Methods (T111-T118): ✅ 8/8 complete - Paginated feedback list (50 items/page) - Filter by category, status, language, date range - Keyword search in content/category/ID - Sort by timestamp (newest first, FR-041) - Dashboard Routes (T119-T134): ✅ 16/16 complete - GET /dashboard with @login_required - Product access control (owners see assigned, admins see all) - Apply filters and search from query params - GET /feedback/{id} detail with access control - Load and display analysis.md content - POST /feedback/{id}/status for status updates - GET /feedback/{id}/attachment/{filename} for downloads - Path traversal prevention in downloads - Correct Content-Type and Content-Disposition headers - Templates & Error Pages (T122-T123, T127-T128, T135-T136): ✅ 6/6 complete - Dashboard list template (131 lines) with filter form - Pagination links in list template - Feedback detail template (133 lines) - Display original text, translation, summary, category, attachments - Custom 403/404 error pages - Blueprint Registration (T106, T137): ✅ 2/2 complete - Dashboard blueprint registered in app/__init__.py - Auth blueprint registered (better architecture than combined) - Test Data & Access Control (T138-T139): ✅ 2/2 complete - Admin user in data/users.yaml with full access - Admin bypass logic for product access control Key Features: 1. Authentication: Login/logout with Flask-Login integration 2. Dashboard List: Paginated feedback (50/page) with filters 3. Filtering: By category, status, language, date range 4. Search: Keyword search across content/category/ID 5. Sorting: Newest first (FR-041 compliance) 6. Access Control: Product owners see only assigned products 7. Admin Access: Admins bypass product restrictions (see all) 8. Detail View: Complete feedback with analysis display 9. Status Management: Update feedback status 10. Attachment Download: Secure download with path traversal prevention 11. Manual Analysis: Trigger/re-trigger AI analysis (from Phase 4) 12. Error Handling: Custom 403/404 templates Architecture: - Dashboard routes: app/routes/dashboard.py (337 lines) - Auth routes: app/routes/auth.py (45 lines) - Separate blueprint - Templates: dashboard/list.html, dashboard/detail.html, auth/login.html - Error templates: error_403.html, error_404.html - Service methods in FeedbackStorageService (extended) Test Results: - 17 tests passed (15 contract + 2 integration) - All authentication flows verified - All dashboard operations tested - Access control enforcement verified - File downloads and security tested 🎯 CHECKPOINT: User Stories 1, 2, AND 3 work together seamlessly! - Feedback submitted anonymously (US1) - AI analysis automatic and manual (US2) - Dashboard for product owners to view/manage (US3) The core application is now fully functional with submission, analysis, and management capabilities. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
2977d12800 |
Complete Phase 4 (User Story 2) - AI-Powered Feedback Analysis
Verification revealed Phase 4 was 96% complete (27/28 tasks). Implemented missing retry logic (T081) and marked all tasks as complete in tasks.md. Implementation Status: - Tests (T065-T070): ✅ 6/6 complete - 5 unit tests for AIAnalyzer interface and extraction methods - 2 integration tests for full analysis flow - All tests passing - Core Implementation (T071-T092): ✅ 22/22 complete - AIAnalyzer abstract base class with interface - AnalysisResult dataclass for structured results - ClaudeAnalyzer with Anthropic SDK integration - Single-call prompt design (categorize + summarize + translate) - Language detection and category extraction - Summary and translation extraction with regex - 45s API timeout handling - NEW: Retry logic with exponential backoff (3 retries, 1s/2s/4s) - Retries transient errors (rate limits, server errors) - Does not retry timeouts or non-retryable errors - Analysis storage to analysis.md - Background threading for async analysis - Automatic trigger on feedback submission - Status transitions: new → analyzing → analyzed/analysis_failed - Language and category stored in metadata.yaml - ANTHROPIC_API_KEY documented in .env.example - FR-016 compliance: Original content.txt preserved - FR-021 compliance: Images stored but not OCR'd New Implementation: - Added retry logic for transient API failures (T081): - Max 3 retries with exponential backoff (1s, 2s, 4s) - Only retries rate limits and server errors - Does not retry timeouts or permanent errors - File: app/services/ai_analyzer.py lines 70-123 Test Results: - 8 tests passed (unit + integration + contract) - All analysis features verified working - Manual analysis trigger tested - Background analysis tested - Error handling and status transitions verified Integration Points: - Automatic analysis on submission (app/routes/submission.py:93-94) - Manual analysis trigger (app/routes/dashboard.py:207-285) - Analysis storage (app/services/feedback_storage.py:476-548) - Status management throughout analysis lifecycle 🎯 CHECKPOINT: User Stories 1 AND 2 work together seamlessly - feedback is submitted AND automatically analyzed with categorization, summarization, and translation. Manual re-analysis also available via dashboard. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
7ce2e6c7b3 |
Mark Phase 3 (User Story 1) as complete - MVP Checkpoint Reached
Phase 3 verification revealed that all 35 tasks (T030-T064) for User Story 1 (Anonymous Feedback Submission) are fully implemented and tested. Updated tasks.md to reflect completion status. Implementation Status: - Tests (T030-T039): ✅ 10/10 complete - 9 contract tests passing (1 intentionally skipped) - 2 integration tests passing - Models (T040-T041): ✅ 2/2 complete - Product model with YAML loading - Feedback model with validation - Storage Service (T042-T046): ✅ 5/5 complete - FeedbackStorageService with all methods - File Validation (T047): ✅ 1/1 complete - ClamAV integration with graceful degradation - Routes & Templates (T048-T062): ✅ 15/15 complete - Submission blueprint with GET/POST routes - Form, success, and error templates - Validation, virus scanning, rate limiting - Error handling for archived/non-existent products - Test Data & Compliance (T063-T064): ✅ 2/2 complete - Test product configuration - FR-055 compliance (no IP logging) Test Results: - 10 tests passed, 1 skipped (by design) - All validation, security, and error handling verified - End-to-end submission flow working correctly 🎯 MVP CHECKPOINT: User Story 1 is independently functional and fully tested. Anonymous users can submit feedback with text and/or attachments without authentication. All security requirements (file validation, virus scanning, rate limiting) are operational. This marks the completion of the MVP scope as defined in the project constitution - basic feedback submission is production-ready. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
b301def134 |
Implement MVP: Anonymous feedback submission (User Story 1)
Complete implementation of Phase 1-3 (64 tasks): - Phase 1: Project setup with Flask, pytest, configuration - Phase 2: Core infrastructure (auth, models, services, testing) - Phase 3: Anonymous feedback submission with file uploads Features: - Anonymous feedback submission (text and/or up to 3 file attachments) - Multi-language support (any language accepted) - File validation (type, size) and virus scanning (ClamAV) - Product management with active/archived status - File-based storage with YAML metadata - User authentication system (Flask-Login) - CSRF protection and rate limiting - Test coverage: 10 passing tests (contract + integration) Security: - No IP address logging (FR-055 compliance) - File type whitelist and size limits (10MB max) - Virus scanning with graceful degradation - Filename sanitization and secure storage Test Results: - 8 contract tests passed - 2 integration tests passed - End-to-end workflow verified 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
07e51d7468 |
Generate implementation tasks for anonymous feedback platform
Created comprehensive task breakdown organized by user story: Phase 1: Setup (9 tasks) - Project initialization Phase 2: Foundational (20 tasks) - Core infrastructure (BLOCKS all stories) Phase 3: User Story 1 - Anonymous Submission (35 tasks) - MVP deliverable Phase 4: User Story 2 - AI Analysis (28 tasks) - Claude integration Phase 5: User Story 3 - Dashboard (47 tasks) - Product owner interface Phase 6: User Story 4 - Admin (53 tasks) - Product management Phase 7: Polish (18 tasks) - Cross-cutting concerns Total: 210 tasks with 39 test tasks (test-first discipline enforced) Key features: - All tasks follow strict checklist format with IDs and file paths - Tests written BEFORE implementation per constitution requirement - User stories independently testable and deliverable - ~80 tasks marked [P] for parallel execution - MVP scope: T001-T064 (64 tasks) for basic feedback submission - Clear dependency graph and execution order - Multiple parallel opportunities identified Ready for /speckit.implement execution. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
c4ae7a0fa6 |
Rename API contracts to web routes for clarity
Changed terminology from "API" to "Routes" to better reflect server-rendered HTML approach: - Renamed submission_api.md → submission_routes.md - Renamed dashboard_api.md → dashboard_routes.md - Renamed admin_api.md → admin_routes.md - Updated headers to clarify "Response Type: Server-rendered HTML (no JavaScript required)" - Updated references in plan.md and quickstart.md This clarifies that the application uses traditional web routes with form submissions and HTML responses, not REST API endpoints with JSON. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
05e201f1fc |
Add implementation planning artifacts for anonymous feedback platform
Complete Phase 0 (Research) and Phase 1 (Design) of implementation planning workflow: - plan.md: Technical context, constitution check, and project structure - research.md: Technology decisions for AI integration, file storage, authentication, security - data-model.md: Domain entities with validation rules and state transitions - contracts/: API specifications for submission, dashboard, and admin endpoints - quickstart.md: Developer setup guide with test-first workflow - CLAUDE.md: Updated agent context with tech stack All constitutional requirements validated. Ready for task generation phase. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
ddba0d57c5 | initial specifications |