fix(desktop): agrandir la fenêtre agent + boutons copier ; bloquer l'URL du serveur (T-113, T-114) #102
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/T-113-T-114-agent-window-server-url"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Tâche
T-xxx — (titre dans docs/STATUS.md)
Changements
Contrat modifié ?
packages/contract/supabase/migrations—docs/API.md/docs/DATA.mdmis à jour, labelcontract, approbation humaine requiseTests
scripts/check.shvertImpacts cross-domaine
Fichiers hors périmètre de l'agent (et pourquoi) :
Suivi
docs/STATUS.mdmis à jour (ligne de la tâche)docs/CHANGELOG.md: entrée ajoutée sous Unreleaseddocs/DECISIONS.md/docs/ECARTS.mdmis à jour si décision ou écartReview qa-regression — PR #102 (T-113/T-114, issues #100/#101)
Verdict : APPROVE
Vérifications effectuées (checkout local de la branche dans un worktree isolé, pas seulement lecture du diff) :
Correctness (server_url) — aucune référence orpheline :
grep -rn "server_url"sur toutapps//docs/packagesne remonte plus que le nom du testserver_url_is_not_a_config_field(config.rs:182) et une mention dans un commentaire debuild.rs(pré-existant, non touché par cette PR, cf. nit ci-dessous).src/lib/tauri.ts::AriaConfigcohérent avecconfig.rs::AriaConfig(champ retiré des deux côtés).crate::config::SERVER_URLbien utilisé aux 3 sitesapi_client.rs(dictée/agentsend()L207,/v1/prompts/baseL291,/v1/agent/streamL379), même fallback par défaut qu'avant (http://localhost:8787) — pas de régression de comportement en dev sansVITE_ARIA_SERVER_URL.Sécurité — vérifié qu'aucun
#[serde(deny_unknown_fields)]n'existe surConfigPatch/AriaConfig: un appel direct àset_configavec un JSON contenantserver_urldésérialise sans erreur (champ inconnu silencieusement ignoré par serde), aucun effet, cohérent avec l'objectif du ticket #101. Un ancienaria.config.jsonsur disque contenant encoreserver_url(config persistée avant cette PR) se désérialise aussi sans problème (même mécanisme). Le champ est bien absent structurellement d'AriaConfig/ConfigPatch, pas juste masqué en UI.CopyButton / textFromChildren — relu en détail : gère
string/number/Array/élément React ("props" in children)/null/undefinedsans crash (le casnull/undefinedest filtré par lechildren &&avant le testtypeof, retombe surreturn ""). Cas non couverts explicitement (booléens, symboles) retombent aussi surreturn ""sans throw — comportement sûr.table: lerefDOM n'est lu que dans le handleronClick, jamais pendant le rendu — pas de risque de contenu obsolète puisque le clic implique que l'élément est déjà monté ; RAS.Non-régression — revérifié moi-même, pas seulement pris la parole de l'auteur :
cargo test(workspacesrc-tauri) : 132/132 verts, y compris les 14 tests deconfig::tests(server_url_is_not_a_config_fieldinclus).cargo clippy --quiet -- -D warnings(commande exacte descripts/check.shet de.forgejo/workflows/ci.yml) : clean.pnpm tsc --noEmitetpnpm eslint .: clean.cargo clippy --all-targets -- -D warnings(donc en compilant aussi le code#[cfg(test)]), le nouveau testserver_url_is_not_a_config_field(config.rs) déclencheclippy::bool_assert_comparisonsurassert_eq!(SERVER_URL.is_empty(), false)→ à remplacer parassert!(!SERVER_URL.is_empty()). N'affecte ni CI nicheck.sh(aucun des deux n'utilise--all-targets), donc non bloquant, mais autant le corriger à l'occasion.patch_without_microphone_field_leaves_existing_choice_untouchedcorrectement adapté (hotkeyà la place deserver_urldans le patch de test) — vérifie toujours ce qu'il prétend.Docs —
docs/SPEC.md(§4.3 tableauconfig, §4.6 page Général) et ADR-014 cohérents avec le code livré : le champ est bien retiré des deux endroits documentés, l'ADR décrit fidèlement le mécanisme (option_env!/build.rs, 3 call sites, alternatives écartées).STATUS.md/CHANGELOG.mdà jour (T-113/T-114 done, nouvelle table « Tickets Forgejo »).Nits non bloquants (à traiter à l'occasion, pas dans cette PR) :
config.rsL1 : le doc-comment de module dit encore "Configuration locale (tauri-plugin-store) : URL serveur, hotkey, micro, langue." — contredit maintenant le fait que l'URL serveur n'est justement plus gérée partauri-plugin-store. Pas modifié par cette PR mais devenu trompeur suite à son changement.build.rsL4-5 : commentaire pré-existant (non touché ici) qui dit encore "server_urlpar défaut" en référence àconfig.rs— même staleness, pré-date cette PR.bool_assert_comparisonmentionné au point 4.Aucun de ces points n'est bloquant. Périmètre respecté (app-front uniquement), pas de contrat/migration touché, fenêtre agent élargie et boutons copier fonctionnellement sains d'après la relecture de code (rendu visuel réel correctement listé en vérification manuelle en attente dans STATUS.md, pas testable depuis cet environnement).