Promote: staging -> develop - #895
Merged
Merged
Conversation
…od deploys (#892) ## Summary Two handbook changes following up on #885/#889: ### Walkthrough layout (user feedback on the live page) The three images of the insider-unlock explainer rendered neither cleanly side by side nor stacked: the flex items are caption-driven wrapper divs, so two images filled the row and the third wrapped below. The block now shows the **instructions first**, then the three images in an equal-thirds grid with captions wrapping under their image; below 700px the walkthrough stacks as full-width rows (matching the page's existing narrow-viewport behaviour, verified against a neighbouring section). Desktop and mobile renders were verified in a local browser before pushing; the final CSS-cascade cleanup is render-identical (byte-equal screenshots). ### Deploys: staging → production, DEV retired Every push to `staging` now deploys directly to handbook.realunit.app (`:latest`, PRD secrets). The `deploy-dev` job, the `develop` trigger and the `:beta` tag are removed, and the `paths:` filter is dropped deliberately: every staging merge ships, which also re-stages the api-/web-sourced handbook content the filter could never observe. All prose that described the old staging→DEV/develop→PRD split (workflow comments, both READMEs, three spots inside the handbook page itself) now describes the single production lane, and the build-check comments state precisely what that check gates (screenshot-assembly, store-listing sync, legal-sync, image build + container smoke) versus what only the deploy run exercises (SSH/secrets/rollout). The retired dev-handbook instance keeps serving its last state until it is decommissioned on the infrastructure side (container + DNS) — intentionally out of scope for this repo. The four `DEPLOY_DEV_*` repo secrets become unreferenced with this PR and can be deleted afterwards. ## Erratum Commit `b571848f` references issue #893 in its message; the intended reference is **#894** (pre-existing: the build check's asset smoke accepts 401 as existence proof, which the auth gate makes meaningless — found during the review passes here, tracked separately). Amending a pushed commit is out per repo policy, hence this note.
Folge-PR zu #890. Behebt die fünf nicht-blockierenden Findings aus der Review dort (#890 (review)). **Not symptom-driven:** Kein Nutzerfall, keine Störung in Produktion. Auslöser ist die Review auf #890 — ein Approve mit fünf ausdrücklich nicht-blockierenden Findings, die dort nicht mehr liegenbleiben sollten. Jedes Finding wurde vor dem Bauen am gemergten Stand nachgeprüft; keines beruht auf einer Weitergabe der Review-Formulierung. **Scale:** Finding 1 trifft die Alt-Texte von fünf Handbuch-Bildern, die beim nächsten Deploy ausgetauscht werden — die Fläche für alle, die die Screenshots nicht sehen können. Finding 2: der befüllte Anhang-Zustand war in **0** der 35 Matrix-Zellen abgedeckt. Findings 3+4: zwei Aufrufstellen von `Image.file`, beide ohne Fehlerbehandlung. Finding 5: eine Zeile. **Smaller fix considered:** Zu 1 nur die `alt`-Attribute statt Alt und Beschreibung — verworfen, die Beschreibungen zählen die Formularfelder auf und wären danach weiter falsch. Zu 2 eine einzelne Zelle statt der vollen Matrix — verworfen, die bestehende Gruppe fährt die volle Matrix und die Kosten sind identisch. Zu 3+4 `errorBuilder`/`cacheWidth` an beiden Stellen duplizieren statt zusammenzuführen — verworfen, das ist genau das Auseinanderdriften, das den doppelten Fix erst nötig gemacht hat. Zu 5 ist die eine Zeile der Fix. ## Was drin ist - **`FilePreviewField`** (`refactor`): `SupportAttachmentField` und `FilePickerField` trugen einen fast zeilengleichen Rumpf. Beide sind jetzt dünne Hüllen um ein gemeinsames Widget und behalten ihr eigenes Label und ihre eigene Optik. `Image.file` existiert dadurch **einmal** statt zweimal und bekommt dort einen `errorBuilder` (sichtbarer Platzhalter plus Logzeile statt grauer Box) und `cacheWidth`, damit ein 48-px-Thumbnail nicht in voller Auflösung dekodiert wird. - **Matrix mit befülltem Anhang** (`test`): zweite Gruppe über dieselbe Geräte-×-Textskalen-Matrix, mit langem Dateinamen, plus Prüfung, dass das 48×48-Schliessziel tappbar bleibt. - **Getrimmten Text senden** (`fix`): `sendMessage` entschied auf `trimmed`, verschickte aber den rohen `message` — führende und nachlaufende Leerzeichen landeten beim Support. `submit()` im Ticket-Pfad zieht mit: dort prüfte `canSubmit` längst `message.trim().isNotEmpty`, gesendet wurde trotzdem der rohe Text. Genau dieses Gleichverhalten war TaprootFreaks Grund, den Chat-Befund als Lesbarkeitsnotiz statt als Defekt zu führen — es wäre kaputtgegangen, hätte nur der Chat getrimmt. - **Handbuch** (`docs`): Beschreibungen und Alt-Texte für 250/251/252/258/259 kennen jetzt das Anhang-Feld und die Büroklammer. Finding 3 hatte TaprootFreak ausdrücklich als „später" markiert; es ist auf Wunsch mit drin, weil es Finding 4 auf eine einzige Stelle reduziert. ## Verifikation `flutter analyze` ohne Befund. **596** Tests grün über `test/widgets/form`, `test/screens/support`, `test/screens/settings_user_data` und die Goldens beider Flächen, dazu **19** Golden-Tests der Support-Fläche inklusive des neuen. Gegenproben, alle nachgefahren: | Mutation | Ergebnis | |---|---| | `trimmed` → `message` im Chat zurückgedreht | **1 von 20** Cubit-Tests rot | | `.trim()` im Ticket-Pfad entfernt | **1 von 80** Support-Cubit-Tests rot | | `Expanded` um den Dateinamen entfernt (analysiert weiter sauber) | **35 von 35** Zellen der neuen Gruppe rot | | `cacheWidth` auf `4` | **1 von 4** Widget-Tests rot | | `errorBuilder` entfernt | Corrupt-Test rot | Die Aussage zum Absende-Zustand im Handbuch ist am Golden geprüft, nicht angenommen: die Anhang-Region ist pixelgleich zum Default-Zustand, geändert sind nur Tags, Nachrichtenfeld und Schaltfläche. ## Baselines Die **bestehenden** Goldens sind bewusst nicht regeneriert: der Umbau soll die Optik nicht verändern, und dass sie unverändert grün sind, ist genau der Beleg dafür. Sie deckten allerdings nur den **leeren** Zustand ab — kein Golden im Repo rendert je eine ausgewählte Datei, und genau dort ändert `cacheWidth` die Dekodier-Auflösung. Deshalb kommt ein neues Golden dazu: das Ticket-Formular mit gesetztem Anhang (`support_create_ticket_page_attached`). Der Weg dorthin ist nicht trivial: `Image.file` dekodiert auf der echten Async-Zeitachse, und der gemeinsame `precacheImages`-Helper endet in `pumpAndSettle`, das hier nicht zurückkehrt. Eine feste Warteschleife wäre die schlechteste Lösung gewesen — sie hätte auf einem langsameren Runner ein leeres Thumbnail als Baseline eingefroren, **grün**. Der Test pollt daher auf das dekodierte `RawImage` und assertiert es; mit Poll-Budget 0 wird er rot. Ein langsamer Runner scheitert damit laut, statt ein falsches Bild festzuschreiben. Die Baseline selbst erzeugt `golden-regenerate.yaml` auf dem self-hosted Runner, nicht mein Mac — sonst rendert sie unter einer anderen Toolchain als der, die sie auf PRs validiert. Bis dieser Lauf durch ist, ist `Visual Regression` erwartbar rot. Finding 3 ist damit erledigt, Finding 4 an der verbliebenen Stelle behoben.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automatic Staging PR
This PR was automatically created after changes were pushed to staging.
Commits: 1 new commit(s)
Checklist