Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
3deabbc
docs(specs): create spec for multiple words
remarkablemark Feb 15, 2026
287a0dd
docs(specs): clarify select options
remarkablemark Feb 15, 2026
b45f0a8
docs(specs): default to 1 word
remarkablemark Feb 15, 2026
504b2f1
docs(specs): clarify timing
remarkablemark Feb 15, 2026
62d13f6
docs(specs): position select after slider
remarkablemark Feb 15, 2026
5555959
docs(specs): remove toggle mode
remarkablemark Feb 15, 2026
06290d3
docs(specs): clarify label name
remarkablemark Feb 15, 2026
2d40c87
docs(specs): clarify overflow behavior
remarkablemark Feb 15, 2026
3dd8f32
docs(specs): clarify saving word count to localStorage
remarkablemark Feb 15, 2026
087b1b9
docs(specs): clarify session details
remarkablemark Feb 15, 2026
c5169bc
docs(specs): clarify progress calculation
remarkablemark Feb 15, 2026
ac9c48b
docs(specs): create plan
remarkablemark Feb 15, 2026
b94d4f0
docs(specs): create contract
remarkablemark Feb 15, 2026
b51489e
docs(windsurf): update agent context
remarkablemark Feb 15, 2026
658683d
docs(specs): generate tasks
remarkablemark Feb 15, 2026
6733aba
docs(specs): remediate issues
remarkablemark Feb 15, 2026
6de32e9
docs(specs): remediate remaining issues
remarkablemark Feb 15, 2026
2d20a05
docs(specs): fix task ordering
remarkablemark Feb 15, 2026
82d6ca4
chore: complete initial phases
remarkablemark Feb 15, 2026
db7eec2
chore(utils): fix word chunking behavior to respect word count
remarkablemark Feb 15, 2026
c6a1153
refactor(utils): simplify word chunking logic
remarkablemark Feb 15, 2026
19f83fe
refactor(utils): remove unused hasPunctuation
remarkablemark Feb 15, 2026
6363ea7
refactor(utils): remove unused properties in wordChunking
remarkablemark Feb 15, 2026
d457293
chore(components): complete T016
remarkablemark Feb 15, 2026
bdaa9eb
chore(components): complete T017 and T018
remarkablemark Feb 15, 2026
f3ea487
chore(components): implement T019, T020, and T021
remarkablemark Feb 15, 2026
5370146
docs(specs): remove chunks in session details
remarkablemark Feb 15, 2026
27e32aa
feat(components): add word count
remarkablemark Feb 15, 2026
0d5921e
fix(components): fix word count select options and button styles
remarkablemark Feb 15, 2026
5ba2663
docs(specs): mark phase 4 as complete
remarkablemark Feb 15, 2026
c8e8b70
docs(specs): mark phase 1 and 2 complete
remarkablemark Feb 15, 2026
c8f03e8
docs(specs): remove phase 5
remarkablemark Feb 15, 2026
dc3b07e
docs(specs): fix spec and tasks
remarkablemark Feb 15, 2026
f9a4fdc
docs(specs): mark T034 complete
remarkablemark Feb 15, 2026
e0e57d3
test(ControlPanel): add accessibility test
remarkablemark Feb 15, 2026
8a647ff
docs(specs): remove not applicable task
remarkablemark Feb 15, 2026
af3c3db
docs(specs): don't debounce localStorage
remarkablemark Feb 15, 2026
cc4a35f
test(utils): add storage and wordChunking tests
remarkablemark Feb 15, 2026
18c67fa
docs(specs): close not applicable tasks
remarkablemark Feb 15, 2026
a99ed67
docs(specs): close more tasks
remarkablemark Feb 15, 2026
c5def33
docs(components): add TSDoc
remarkablemark Feb 15, 2026
f823d23
docs(specs): close more tasks
remarkablemark Feb 15, 2026
937cf08
test(components): increase test coverage
remarkablemark Feb 15, 2026
d28bbc8
test(components): add more tests
remarkablemark Feb 15, 2026
ce811f4
refactor(wordChunk): rename file to camelCase
remarkablemark Feb 15, 2026
53b4ccd
chore(utils): remove unused functions from wordChunking
remarkablemark Feb 15, 2026
d6604cb
chore(components): remove unused functions
remarkablemark Feb 15, 2026
1bb1aed
chore(components): remove unused DisplaySettings
remarkablemark Feb 15, 2026
d10f617
chore(DisplaySettings): remove unused types
remarkablemark Feb 15, 2026
746df4e
test(useReadingSession): add tests
remarkablemark Feb 15, 2026
bc4db23
test(components): get coverage to 100% and close tasks and spec
remarkablemark Feb 15, 2026
f52c5fe
docs(AGENTS): exclude barrel exports from test coverage
remarkablemark Feb 15, 2026
bc5dead
test(components): rename tests and remove unused types
remarkablemark Feb 15, 2026
dbd8a0e
refactor(types): move WordChunk to shared types
remarkablemark Feb 15, 2026
b3d468c
test: consolidate and dedupe tests
remarkablemark Feb 15, 2026
d9b4061
docs(AGENTS): update testing standards
remarkablemark Feb 16, 2026
ba42fb8
test: don't import global vitest functions
remarkablemark Feb 16, 2026
a53cb1c
chore: rename setupFiles and move to src
remarkablemark Feb 16, 2026
ae9d169
chore(tsconfig): remove test path alias
remarkablemark Feb 16, 2026
7ec5e02
fix(ControlPanel): improve gaps and margins
remarkablemark Feb 16, 2026
3c5aba5
fix(ControlPanel): stack buttons in mobile
remarkablemark Feb 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .windsurf/rules/specify-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Auto-generated from all feature plans. Last updated: 2026-02-14

## Active Technologies

- TypeScript 5 (React 19) + React 19, Vite 7, Vitest 4, Tailwind CSS 4 (001-multiple-words)
- localStorage for user preferences (001-multiple-words)

- TypeScript 5 (strict mode) with React 19 + React 19, Vite 7, Vitest 4, Tailwind CSS 4 (001-component-refactor)
- N/A (client-side state management) (001-component-refactor)

Expand All @@ -27,6 +30,8 @@ TypeScript 5 (strict) with React 19: Follow standard conventions

## Recent Changes

- 001-multiple-words: Added TypeScript 5 (React 19) + React 19, Vite 7, Vitest 4, Tailwind CSS 4

- 001-component-refactor: Added TypeScript 5 (strict mode) with React 19 + React 19, Vite 7, Vitest 4, Tailwind CSS 4

- 001-speed-reading-app: Added TypeScript 5 (strict) with React 19 + React 19, React DOM 19, Vite 7, Tailwind CSS 4
Expand Down
16 changes: 8 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@ You're an expert engineer for this React app.
- Prettier with Tailwind plugin
- React Compiler (babel-plugin-react-compiler)
- **File Structure:**
- `public/` – app assets
- `src/` – app code
- `test/` – test setup
- `public/` – assets
- `src/` – features, types, tests

## Commands you can use

Expand All @@ -44,7 +43,7 @@ You're an expert engineer for this React app.

### Testing

- **Coverage:** `npm run test:ci` (run tests with coverage report, requires 100% coverage)
- **Coverage:** `npm run test:ci` (run tests with coverage report)
- **Single test file:** `npm test -- path/to/test.test.tsx` (run specific test file)
- **Single test with coverage:** `npm run test:ci -- path/to/test.test.tsx`

Expand Down Expand Up @@ -109,13 +108,15 @@ import type { User } from './types';

### Testing Standards

- **100% coverage required** - all statements, branches, functions, and lines
- **100% coverage required** - all statements, branches, functions, and lines (except for barrel exports)
- **Do not test barrel exports** - index.ts files are barrel exports and should not have dedicated tests
- **Testing Library** - use @testing-library/react for component testing
- **User interactions** - use @testing-library/user-event for simulating user actions
- **Mock external dependencies** - mock API calls, browser APIs, etc.
- **Descriptive test names** - should clearly state what is being tested
- **Vitest globals** - use `vi.fn()`, `vi.mock()`, `vi.clearAllMocks()`
- **Test setup** - global test environment configured in `vite.config.mts` with `globals: true`
- **Test setup** - global test environment configured in `vite.config.mts` with `globals: true` and `src/setupTests.ts`
- **Coverage exclusions** - Use `/* v8 ignore next -- @preserve */` for lines that are not testable

### Code Quality Rules

Expand All @@ -138,8 +139,7 @@ src/components/ComponentName/

### Import Aliases

- `src/` maps to absolute imports (`src/components/App` → `src/components/App`)
- `test/` maps to test utilities (`test/mocks/api` → `test/mocks/api`)
- `src/` maps to absolute imports

## Boundaries

Expand Down
42 changes: 42 additions & 0 deletions specs/001-multiple-words/checklists/requirements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Specification Quality Checklist: Multiple Words Display

**Purpose**: Validate specification completeness and quality before proceeding to planning
**Created**: 2025-02-15
**Feature**: [Multiple Words Display](../spec.md)

## Content Quality

- [x] No implementation details (languages, frameworks, APIs)
- [x] Focused on user value and business needs
- [x] Written for non-technical stakeholders
- [x] All mandatory sections completed

## Requirement Completeness

- [x] No [NEEDS CLARIFICATION] markers remain
- [x] Requirements are testable and unambiguous
- [x] Success criteria are measurable
- [x] Success criteria are technology-agnostic (no implementation details)
- [x] All acceptance scenarios are defined
- [x] Edge cases are identified
- [x] Scope is clearly bounded
- [x] Dependencies and assumptions identified

## Feature Readiness

- [x] All functional requirements have clear acceptance criteria
- [x] User scenarios cover primary flows
- [x] Feature meets measurable outcomes defined in Success Criteria
- [x] No implementation details leak into specification

## Validation Results

**Status**: ✅ PASSED - All checklist items completed successfully

**Notes**:

- Specification is complete and ready for planning phase
- No clarification markers found
- All requirements are testable and measurable
- User stories are properly prioritized and independently testable
- Edge cases are comprehensively identified
Loading