chore(plan): mark all 58 acceptance criteria as complete
All acceptance criteria verified and marked complete: - Task 1-13: Implementation acceptance criteria (all verified) - Definition of Done: All 5 criteria met - Final Verification: All 4 phases approved - Final Checklist: All 7 items complete Total: 87/87 checkboxes complete (29 main tasks + 58 acceptance criteria)
This commit is contained in:
parent
157740c072
commit
2bf1eff12d
|
|
@ -244,9 +244,9 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- The generated Presentation.php: After regeneration, verify this file has the new methods — that's the acceptance criterion
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/proto/playlist.proto` contains `string arrangement_name = 5;` inside `PlaylistItem.Presentation` message
|
||||
- [ ] `php/generated/Rv/Data/PlaylistItem/Presentation.php` contains methods `getArrangementName()` and `setArrangementName()`
|
||||
- [ ] `cd php && php vendor/bin/phpunit` — ALL existing tests still pass (0 failures)
|
||||
- [x] `php/proto/playlist.proto` contains `string arrangement_name = 5;` inside `PlaylistItem.Presentation` message
|
||||
- [x] `php/generated/Rv/Data/PlaylistItem/Presentation.php` contains methods `getArrangementName()` and `setArrangementName()`
|
||||
- [x] `cd php && php vendor/bin/phpunit` — ALL existing tests still pass (0 failures)
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -354,10 +354,10 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `ref/ExamplePlaylists/Gottesdienst.proplaylist` — 14MB real-world file
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/Zip64FixerTest.php` exists with ≥6 test methods
|
||||
- [ ] `php/src/Zip64Fixer.php` exists with `fix(string $zipData): string` static method
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter Zip64FixerTest` — ALL tests pass
|
||||
- [ ] Fixed ZIP data opens with `new ZipArchive()` without errors for all 4 test files
|
||||
- [x] `php/tests/Zip64FixerTest.php` exists with ≥6 test methods
|
||||
- [x] `php/src/Zip64Fixer.php` exists with `fix(string $zipData): string` static method
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter Zip64FixerTest` — ALL tests pass
|
||||
- [x] Fixed ZIP data opens with `new ZipArchive()` without errors for all 4 test files
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -446,10 +446,10 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- Draft analysis: Contains ALL the raw findings from reverse-engineering. The spec document restructures this into a clean, permanent reference
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `spec/pp_playlist_spec.md` exists
|
||||
- [ ] Document covers: container format, ZIP layout, protobuf structure, all item types, URL conventions
|
||||
- [ ] Document includes concrete examples
|
||||
- [ ] Follows `spec/pp_song_spec.md` style
|
||||
- [x] `spec/pp_playlist_spec.md` exists
|
||||
- [x] Document covers: container format, ZIP layout, protobuf structure, all item types, URL conventions
|
||||
- [x] Document includes concrete examples
|
||||
- [x] Follows `spec/pp_song_spec.md` style
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -542,11 +542,11 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `SlideTest.php`: Shows how to construct proto objects in tests without file I/O
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/PlaylistEntryTest.php` exists with ≥10 test methods
|
||||
- [ ] `php/src/PlaylistEntry.php` exists in namespace `ProPresenter\Parser`
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter PlaylistEntryTest` — ALL tests pass
|
||||
- [ ] Tests cover all 4 item types (header, presentation, placeholder, cue)
|
||||
- [ ] `getArrangementName()` returns field 5 value for presentation items
|
||||
- [x] `php/tests/PlaylistEntryTest.php` exists with ≥10 test methods
|
||||
- [x] `php/src/PlaylistEntry.php` exists in namespace `ProPresenter\Parser`
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter PlaylistEntryTest` — ALL tests pass
|
||||
- [x] Tests cover all 4 item types (header, presentation, placeholder, cue)
|
||||
- [x] `getArrangementName()` returns field 5 value for presentation items
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -665,11 +665,11 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `Playlist.php` oneof ChildrenType: CRITICAL — must check `getChildrenType()` to know if node has child playlists or items. Wrong check = empty data
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/PlaylistNodeTest.php` exists with ≥8 test methods
|
||||
- [ ] `php/src/PlaylistNode.php` exists in namespace `ProPresenter\Parser`
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter PlaylistNodeTest` — ALL tests pass
|
||||
- [ ] Container node returns child PlaylistNode objects
|
||||
- [ ] Leaf node returns PlaylistEntry objects
|
||||
- [x] `php/tests/PlaylistNodeTest.php` exists with ≥8 test methods
|
||||
- [x] `php/src/PlaylistNode.php` exists in namespace `ProPresenter\Parser`
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter PlaylistNodeTest` — ALL tests pass
|
||||
- [x] Container node returns child PlaylistNode objects
|
||||
- [x] Leaf node returns PlaylistEntry objects
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -781,11 +781,11 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `ProFileReader.php:33-36`: Shows the proto->Song construction pattern. For lazy parsing, replicate this inline rather than going through file I/O
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/PlaylistArchiveTest.php` exists with ≥10 test methods
|
||||
- [ ] `php/src/PlaylistArchive.php` exists in namespace `ProPresenter\Parser`
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter PlaylistArchiveTest` — ALL tests pass
|
||||
- [ ] `getEmbeddedSong()` returns Song object via lazy parsing
|
||||
- [ ] `getEmbeddedProFiles()` and `getEmbeddedMediaFiles()` correctly partition embedded files
|
||||
- [x] `php/tests/PlaylistArchiveTest.php` exists with ≥10 test methods
|
||||
- [x] `php/src/PlaylistArchive.php` exists in namespace `ProPresenter\Parser`
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter PlaylistArchiveTest` — ALL tests pass
|
||||
- [x] `getEmbeddedSong()` returns Song object via lazy parsing
|
||||
- [x] `getEmbeddedProFiles()` and `getEmbeddedMediaFiles()` correctly partition embedded files
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -891,12 +891,12 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `ref/ExamplePlaylists/Gottesdienst 3.proplaylist` — 16MB
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/ProPlaylistReaderTest.php` exists with ≥10 test methods
|
||||
- [ ] `php/src/ProPlaylistReader.php` exists with static `read()` method
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter ProPlaylistReaderTest` — ALL tests pass
|
||||
- [ ] All 4 .proplaylist test files load successfully
|
||||
- [ ] Embedded .pro files and media files are accessible from returned PlaylistArchive
|
||||
- [ ] No temp files left behind after read (success or failure)
|
||||
- [x] `php/tests/ProPlaylistReaderTest.php` exists with ≥10 test methods
|
||||
- [x] `php/src/ProPlaylistReader.php` exists with static `read()` method
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter ProPlaylistReaderTest` — ALL tests pass
|
||||
- [x] All 4 .proplaylist test files load successfully
|
||||
- [x] Embedded .pro files and media files are accessible from returned PlaylistArchive
|
||||
- [x] No temp files left behind after read (success or failure)
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -999,11 +999,11 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `PlaylistArchive`: Source of ALL data to write — document for `data` entry, embedded files for other entries
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/ProPlaylistWriterTest.php` exists with ≥7 test methods
|
||||
- [ ] `php/src/ProPlaylistWriter.php` exists with static `write()` method
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter ProPlaylistWriterTest` — ALL tests pass
|
||||
- [ ] Written ZIP opens with standard `unzip -l` without errors
|
||||
- [ ] Written ZIP uses store compression (no deflate)
|
||||
- [x] `php/tests/ProPlaylistWriterTest.php` exists with ≥7 test methods
|
||||
- [x] `php/src/ProPlaylistWriter.php` exists with static `write()` method
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter ProPlaylistWriterTest` — ALL tests pass
|
||||
- [x] Written ZIP opens with standard `unzip -l` without errors
|
||||
- [x] Written ZIP uses store compression (no deflate)
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -1109,11 +1109,11 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- All the proto class references: These are the API surface for constructing the nested protobuf tree. Getting any setter name wrong breaks generation
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/tests/ProPlaylistGeneratorTest.php` exists with ≥8 test methods
|
||||
- [ ] `php/src/ProPlaylistGenerator.php` exists with `generate()` and `generateAndWrite()` methods
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter ProPlaylistGeneratorTest` — ALL tests pass
|
||||
- [ ] Generated playlist has correct structure: PlaylistDocument → root → child → items
|
||||
- [ ] Header, presentation, and placeholder items all generate correctly
|
||||
- [x] `php/tests/ProPlaylistGeneratorTest.php` exists with ≥8 test methods
|
||||
- [x] `php/src/ProPlaylistGenerator.php` exists with `generate()` and `generateAndWrite()` methods
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter ProPlaylistGeneratorTest` — ALL tests pass
|
||||
- [x] Generated playlist has correct structure: PlaylistDocument → root → child → items
|
||||
- [x] Header, presentation, and placeholder items all generate correctly
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -1195,11 +1195,11 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `parse-song.php`: Byte-for-byte template. The playlist CLI should be stylistically identical
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `php/bin/parse-playlist.php` exists with shebang line
|
||||
- [ ] `php php/bin/parse-playlist.php` (no args) → usage message + exit code 1
|
||||
- [ ] `php php/bin/parse-playlist.php ref/TestPlaylist.proplaylist` → structured output
|
||||
- [ ] `php php/bin/parse-playlist.php ref/ExamplePlaylists/Gottesdienst.proplaylist` → output without errors
|
||||
- [ ] Output shows entries with type indicators ([H], [P], [-], [C])
|
||||
- [x] `php/bin/parse-playlist.php` exists with shebang line
|
||||
- [x] `php php/bin/parse-playlist.php` (no args) → usage message + exit code 1
|
||||
- [x] `php php/bin/parse-playlist.php ref/TestPlaylist.proplaylist` → structured output
|
||||
- [x] `php php/bin/parse-playlist.php ref/ExamplePlaylists/Gottesdienst.proplaylist` → output without errors
|
||||
- [x] Output shows entries with type indicators ([H], [P], [-], [C])
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -1280,10 +1280,10 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- BinaryFidelityTest: If it exists, it shows the project's existing approach to verifying round-trip integrity
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] Integration test file exists with ≥8 test methods
|
||||
- [ ] `cd php && php vendor/bin/phpunit --filter Integration` (or --filter ProPlaylistWriter) — ALL pass
|
||||
- [ ] Round-trip of TestPlaylist.proplaylist preserves all fields
|
||||
- [ ] Generated → written → read back works correctly
|
||||
- [x] Integration test file exists with ≥8 test methods
|
||||
- [x] `cd php && php vendor/bin/phpunit --filter Integration` (or --filter ProPlaylistWriter) — ALL pass
|
||||
- [x] Round-trip of TestPlaylist.proplaylist preserves all fields
|
||||
- [x] Generated → written → read back works correctly
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -1354,9 +1354,9 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `ref/ExamplePlaylists/Gottesdienst 3.proplaylist`
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] Validation tests exist with ≥5 test methods
|
||||
- [ ] `cd php && php vendor/bin/phpunit` — ALL tests pass including validation
|
||||
- [ ] All 4 test files load and validate without errors
|
||||
- [x] Validation tests exist with ≥5 test methods
|
||||
- [x] `cd php && php vendor/bin/phpunit` — ALL tests pass including validation
|
||||
- [x] All 4 test files load and validate without errors
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
@ -1416,10 +1416,10 @@ Max Concurrent: 3 (Waves 1, 2, 3)
|
|||
- `AGENTS.md` — The EXISTING documentation structure. The playlist section must be added in the same style, same heading levels, same code block formatting as the existing "PHP Module Usage" section
|
||||
|
||||
**Acceptance Criteria**:
|
||||
- [ ] `AGENTS.md` contains a new section for `.proplaylist` files
|
||||
- [ ] Section includes reading, writing, generating, CLI usage
|
||||
- [ ] Section lists all new key files
|
||||
- [ ] Existing content unchanged
|
||||
- [x] `AGENTS.md` contains a new section for `.proplaylist` files
|
||||
- [x] Section includes reading, writing, generating, CLI usage
|
||||
- [x] Section lists all new key files
|
||||
- [x] Existing content unchanged
|
||||
|
||||
**QA Scenarios:**
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue