Repository navigation
enhance(ai): add selectable caption writing styles - #36
Merged
Merged
Conversation
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
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.
The caption assistant now offers Default and DF writing styles independently of the model. Both use concise natural-writing guidance in the original request; DF adds an optional instance-owned guide. The selection applies to generation, regeneration and existing rewrites, with explicit Insert/Replace acceptance.
DF is configured through
AI_DF_STYLE_PATH. The server accepts only a bounded UTF-8 local guide and returns a field error for unavailable styles before contacting a provider. Default remains available without the file. No new dependency or schema change.Screenshots
Caption model and writing style
Default and DF within the existing caption assistant.
Screenshots record visual state at capture time; they do not by themselves establish that an interaction works.
Interaction checks
Warnings
English
label: Style choices
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Style choices in the local caption assistant.
label: Style choices
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Style choices in the local caption assistant.
label: Default on entry
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Default on entry in the local caption assistant.
label: Default on entry
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Default on entry in the local caption assistant.
label: Model options with DF selected
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Model options with DF selected in the local caption assistant.
label: Model options with DF selected
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Model options with DF selected in the local caption assistant.
label: Request in progress
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Request in progress in the local caption assistant.
label: Request in progress
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Request in progress in the local caption assistant.
label: Generated suggestion
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Generated suggestion in the local caption assistant.
label: Generated suggestion
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Generated suggestion in the local caption assistant.
label: Failure preserves the draft
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Failure preserves the draft in the local caption assistant.
label: Failure preserves the draft
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Failure preserves the draft in the local caption assistant.
label: Accepted draft after reload
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 1280x900
screenshot note: Accepted draft after reload in the local caption assistant.
label: Accepted draft after reload
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: en
viewport: 390x844
screenshot note: Accepted draft after reload in the local caption assistant.
German
label: Style choices
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Style choices in the local caption assistant.
label: Style choices
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Style choices in the local caption assistant.
label: Default on entry
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Default on entry in the local caption assistant.
label: Default on entry
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Default on entry in the local caption assistant.
label: Model options with DF selected
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Model options with DF selected in the local caption assistant.
label: Model options with DF selected
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Model options with DF selected in the local caption assistant.
label: Request in progress
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Request in progress in the local caption assistant.
label: Request in progress
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Request in progress in the local caption assistant.
label: Generated suggestion
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Generated suggestion in the local caption assistant.
label: Generated suggestion
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Generated suggestion in the local caption assistant.
label: Failure preserves the draft
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Failure preserves the draft in the local caption assistant.
label: Failure preserves the draft
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Failure preserves the draft in the local caption assistant.
label: Accepted draft after reload
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 1280x900
screenshot note: Accepted draft after reload in the local caption assistant.
label: Accepted draft after reload
Current screenshot; source revision: 7fdb003
captured: 2026-10-25
locale: de
viewport: 390x844
screenshot note: Accepted draft after reload in the local caption assistant.
Screenshots document the recorded visual states.
Validation: 112 affected backend tests passed (529 assertions); the unreadable-file case is skipped locally when run as root. Five native browser cases passed (72 assertions), covering English/German desktop/compact flows, independent model/style changes, busy and error behavior, insert/replace, save/reload and fresh-composer Default. Pint, Prettier, ESLint, Vue type checking and production asset build passed.
Opengrep found no issue in the changed PHP files but partially parsed the agent's PHP syntax; focused source review covers that limitation. The commit hygiene hook used its documented override for an unchanged commented placeholder in
.env.example; the staged-diff secret scan passed.Backend and browser CI and code quality CI passed the current head. Focused source review and the integrated Opus 5.5 review passed with no findings. Merged into the fork release branch and included in v2.0.0-uzh.4. The companion instance configuration is tracked in its deployment repository; operational verification is recorded privately.