docs: add T3 evidence and learnings
Record the verification output and task notes for the service image column work. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
6061e4c4dd
commit
7de25b7423
6
.sisyphus/evidence/task-3-columns.txt
Normal file
6
.sisyphus/evidence/task-3-columns.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
Task T3 evidence
|
||||||
|
|
||||||
|
- `ddev exec php artisan test --filter=ServiceImageColumns` ✅
|
||||||
|
- Result: 4 passed, 11 assertions
|
||||||
|
- Migration: `2026_05_10_115900_add_image_fields_to_services_table.php`
|
||||||
|
- `ddev exec php artisan test` ✅ 510 passed
|
||||||
45
.sisyphus/notepads/keyvisual-background-nametag/learnings.md
Normal file
45
.sisyphus/notepads/keyvisual-background-nametag/learnings.md
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Learnings — keyvisual-background-nametag
|
||||||
|
|
||||||
|
> Append with `## [TIMESTAMP] Task: {task-id}\n{content}`. NEVER overwrite.
|
||||||
|
|
||||||
|
## [2026-05-30] Task: T1 — Parser background-layer
|
||||||
|
- Parser repo is at `/Users/thorsten/AI/propresenter` (NOT `propresenter-work/php` as plan stated).
|
||||||
|
- composer.json uses VCS remote `https://git.stadtmission-butzbach.de/public/propresenter-php.git` (NOT a path repo).
|
||||||
|
- For development: copy changed parser files into `vendor/propresenter/parser/src/` in the app. All future parser changes must also be synced: `cp /Users/thorsten/AI/propresenter/src/CHANGED.php /Users/thorsten/AI/pp-planer/vendor/propresenter/parser/src/CHANGED.php`
|
||||||
|
- `slideData['background']` contract: `['path' => string, 'format' => 'JPG'|'PNG', 'width' => int, 'height' => int, 'bundleRelative' => bool(opt)]`
|
||||||
|
- `slideData['imageOnly'] = true` → skips text element entirely.
|
||||||
|
- Background action is appended BEFORE foreground media in actions array.
|
||||||
|
- New Slide accessors: `hasBackgroundMedia()`, `getBackgroundMediaUrl()`, `getBackgroundMediaFormat()`
|
||||||
|
- Parser commit: `582ef85 feat(parser): background-layer + image-only slide support` in `/Users/thorsten/AI/propresenter` repo.
|
||||||
|
- All 372 parser tests green + 503 app tests green after vendor sync.
|
||||||
|
- Evidence: `.sisyphus/evidence/task-1-background-layer.txt`, `task-1-image-only.txt`
|
||||||
|
|
||||||
|
## Initial Setup
|
||||||
|
- Parser pkg at /Users/thorsten/AI/propresenter-work/php (PHPUnit 11, #[Test], ref/ fixtures)
|
||||||
|
- App at /Users/thorsten/AI/pp-planer (Pest v4 + PHPUnit, in-memory sqlite, ddev commands)
|
||||||
|
- FileConversionService uses Intervention v3 GD, contain(1920,1080,'000000','center')
|
||||||
|
- COVER new path: cover(1920,1080) center crop. Thumbnails 320x180 reused.
|
||||||
|
- Parser GAPS: LAYER_TYPE_BACKGROUND unused; no image-only slide; no text styling needed.
|
||||||
|
- Settings: Setting::get/set key-value; SettingsController AGENDA_KEYS constant; HandleInertiaRequests shares globals.
|
||||||
|
- ServiceAgendaItem: is_before_event bool, responsible json, sort_order, service_song_id.
|
||||||
|
- PlaylistExportService: iterates by sort_order; song items->ProExportService; slide items->addSlidesFromCollection.
|
||||||
|
|
||||||
|
## [2026-05-30] Task: T1
|
||||||
|
- Parser repo was at `/Users/thorsten/AI/propresenter` in this workspace (planned `/Users/thorsten/AI/propresenter-work/php` path was absent).
|
||||||
|
- Implemented `slideData['background'] = ['path' => string, 'format' => string, 'width' => int, 'height' => int]` to emit `ActionType::ACTION_TYPE_MEDIA` on `LayerType::LAYER_TYPE_BACKGROUND`.
|
||||||
|
- `slideData['imageOnly'] === true` skips text element generation even if `text` is present, producing background-only/image-only slides with 0 text elements.
|
||||||
|
- Slides may combine background media plus existing foreground `media`; cue action order is slide action, background media, foreground media so background precedes foreground media without breaking slide-element reads.
|
||||||
|
- `Slide` read accessors now distinguish foreground media from background media via layer type: `hasBackgroundMedia()`, `getBackgroundMediaUrl()`, `getBackgroundMediaFormat()`.
|
||||||
|
|
||||||
|
## [2026-05-30] Task: T2
|
||||||
|
- `FileConversionService::convertImageCover()` now writes JPG slides with `cover(1920, 1080)` and thumbnail generation, returning `filename`, `thumbnail`, `warnings`, `fullCover => true`.
|
||||||
|
- Existing contain `convertImage()` keeps `contain(1920, 1080, '000000', 'center')` behavior and adds additive metadata `fullCover => false` for downstream export decisions.
|
||||||
|
- COVER warnings intentionally only include the German upscale/quality warning for sources smaller than 1920×1080, avoiding contain-specific black-bar wording.
|
||||||
|
- Evidence: `.sisyphus/evidence/task-2-cover-fill.txt`, `.sisyphus/evidence/task-2-contain-regression.txt`.
|
||||||
|
|
||||||
|
## [2026-05-30] Task: T3
|
||||||
|
- Migration filename: `2026_05_10_115900_add_image_fields_to_services_table.php`
|
||||||
|
- Columns added on `services`: `key_visual_filename`, `background_filename`, `moderator_name`, `preacher_name_override`
|
||||||
|
- `Service` accessors use `Attribute::get(fn () => $this->... ? '/storage/'.$this->... : null)` for `keyVisualUrl` and `backgroundUrl`
|
||||||
|
- Added all 4 new fields to `Service::$fillable` so `fill()`/`save()` persists them
|
||||||
|
- Full suite green after fresh migrate: `ddev exec php artisan test` → 510 passed
|
||||||
Loading…
Reference in a new issue