• 1.0.8-rc22 7d10060efd

    1.0.8-rc22
    All checks were successful
    Dotnet build and test / build (push) Successful in 14m59s
    Forgejo Release / release (push) Successful in 9m31s
    Pre-release

    notazof released this 2026-10-05 14:48:55 +01:00 | 1 commits to main since this release

    Signed by notazof
    GPG key ID: AD4B9B545FBD7D12

    Fixed

    User experience login into PostIt

    Downloads
  • 1.0.8-rc21 eeae7379e6

    1.0.8-rc21
    All checks were successful
    Dotnet build and test / build (push) Successful in 12m29s
    Forgejo Release / release (push) Successful in 8m27s
    Pre-release

    notazof released this 2026-10-04 21:58:50 +01:00 | 3 commits to main since this release

    Signed by notazof
    GPG key ID: AD4B9B545FBD7D12

    Fixed

    User experience editing the blog article.

    Downloads
  • 1.0.8-rc20 84c98cb938

    1.0.8-rc20
    All checks were successful
    Dotnet build and test / build (push) Successful in 17m3s
    Forgejo Release / release (push) Successful in 8m21s
    Pre-release

    notazof released this 2026-10-04 00:43:44 +01:00 | 8 commits to main since this release

    Signed by notazof
    GPG key ID: AD4B9B545FBD7D12

    Chat SignalR fonctionnel de bout en bout (connexion, salons multiples,
    envoi/réception de messages), enregistreur audio et localisation dans
    PostIt, intégration Live.Avalonia démarrée, et reverse-proxy nginx
    apprêté pour WebSocket.

    Added

    • [PostIt] Interface de chat : page ChatPage (connexion au hub,
      saisie du nom de salon, liste des messages et des membres présents),
      entrée depuis la page d'accueil.
    • [PostIt] Envoi de messages dans un salon joint : DTO ChatMessage
      (Name/Room/Message) pour l'événement ReceiveMessage, saisie avec
      envoi sur Enter, commande inactive tant qu'aucune salle n'est en
      focus (le hub refuse l'envoi hors salon, LabNoJoinNoSend).
    • [PostIt] Modèle multi-salles côté client : JoinedRooms,
      SelectedRoom (salle en focus), messages et utilisateurs indexés par
      salle (FocusedMessages/FocusedUsers), ComboBox de choix de la
      salle active ; un Join sur une salle déjà jointe ne fait que
      changer le focus.
    • [PostIt] Enregistreur audio (AudioRecorder, interface
      IPCMProcessor) et ressources de localisation
      (Resources.{resx,en-EN,pt-PT}).
    • [PostIt][WIP] Début d'intégration Live.Avalonia (preview XAML à
      chaud ; encore KO).
    • [contrib] Bloc location /chathub dans template.vhost : upgrade
      WebSocket (Upgrade/Connection), proxy_read_timeout 3600s et
      proxy_buffering off — sans quoi la connexion SignalR tombait au
      premier silence ou l'upgrade échouait derrière nginx.

    Changed

    • [PostIt] StatusNotice déplacé de Models vers ViewModels et
      enrichi d'une commande d'action optionnelle (CheckCommand +
      CheckCommandLabel, interface IWithLabel) : le bandeau de statut
      propose désormais l'action contextuelle (Connecter / Déconnecter /
      Reconnecter / Vérifier la connexion).
    • [PostIt] ChatViewModel suit le cycle de vie complet de la
      connexion : handlers Reconnecting / Reconnected / Closed de
      WithAutomaticReconnect, pour refléter l'état réel au lieu d'un
      IsConnected optimiste.
    • [Yavsc.Api] AddSignalR().AddJsonProtocol(IncludeFields = true) :
      ChatRoomInfo n'expose que des champs publics, que System.Text.Json
      ne sérialise pas par défaut — le client recevait des objets vides
      (Name null, Users vide) et la liste des salons joints n'était
      jamais alimentée.
    • [Yavsc.Server] IConnexionManager.OnConnected prend le userName
      en paramètre (résolu depuis les claims dans ChatHub) au lieu de le
      relire depuis un dictionnaire jamais alimenté.
    • [PostIt.Android] network_security_config.xml déplacé sous
      Resources/xml/ (chemin canonique Android).

    Fixed

    • [Yavsc.Server] KeyNotFoundException dans
      HubConnectionManager.OnConnected à chaque connexion SignalR :
      ChatUserNames (et ChatCxIds) n'étaient jamais alimentés — relique
      d'un SetUserName disparu lors d'une refactorisation. L'exception
      dans OnConnectedAsync faisait fermer la connexion par le hub, et
      PostIt affichait « Déconnecté (The server closed the connection…) »
      immédiatement après la connexion.
    • [PostIt] URL du hub SignalR : retrait du préfixe /api/v1 de
      ApiUrl avant d'apposer Constants.ChatHubPath (le hub est mappé à
      la racine du service, pas sous le préfixe versionné).
    • [PostIt] La StatusBar de la page chat référençait Grid.Row="4"
      sur une grille à 3 rangées (rangée hors limites, bandeau invisible).
    Downloads
  • 1.0.8-rc19 549bae3b5f

    1.0.8-rc19
    Some checks failed
    Forgejo Release / release (push) Successful in 11m13s
    Dotnet build and test / build (push) Failing after 14m19s
    Pre-release

    notazof released this 2026-09-27 21:29:58 +01:00 | 21 commits to main since this release

    Signed by notazof
    GPG key ID: AD4B9B545FBD7D12

    [PostIt] Blogs UX

    Fixed

    La saisie du billet est maintenant plutôt possible,
    en petit écran.

    Downloads
  • 1.0.8-rc18 a94a5a0497

    1.0.8-rc18
    Some checks failed
    Forgejo Release / release (push) Successful in 6m39s
    Dotnet build and test / build (pull_request) Failing after 9m34s
    Pre-release

    notazof released this 2026-09-26 01:51:28 +01:00 | 27 commits to main since this release

    Signed by notazof
    GPG key ID: AD4B9B545FBD7D12

    Accès aux fichiers personnels PostIt rendu fonctionnel de bout en bout
    (arbre de stockage indexé par le login, pas par le sub), boutons
    d'action des listes réparés (binding $parent), revendication name
    enfin présente dans les access tokens (branchement du ProfileService),
    et négociation HTTP/3 côté client PostIt.

    Added

    • [PostIt] Négociation HTTP/3 (QUIC) pour les appels API Yavsc :
      DefaultRequestVersion = 3.0, DefaultVersionPolicy = RequestVersionOrLower sur le HttpClient partagé de YavscApiClient,
      avec repli h2/h1.1 où QUIC n'est pas disponible (WASM fetch, Android/
      desktop sans libmsquic).
    • [Tests] MyFilesPageHeadlessTests : monte MyFilesPage via
      NavigationPage + Window.Show() et vérifie que chaque bouton de
      ligne (Télécharger / Supprimer) a sa Command liée, est armé
      (CanExecute) et déclenche l'appel API au clic.
    • [Tests] Remoting.PasswordToken_carries_name_claim_equal_to_login :
      mint un vrai JWT via le token endpoint IdentityServer (password grant,
      openid profile) et asserte que l'access token porte name=login et
      que GetUserName() résout vers ce login.
    • [Tests] FileSystemApiTests.Get_fs_lists_files_stored_under_the_user_login :
      découple sub et login, téléverse sous le login, et asserte que
      GET /api/v1/fs retourne le fichier (et que le répertoire nommé d'après
      le sub n'existe pas).

    Changed

    • [Yavsc.Org] Branchement du ProfileService custom
      (AddProfileService<ProfileService>() après
      AddAspNetIdentity<ApplicationUser>()). La classe était du code mort :
      IdentityServer8 retombait sur son profile service par défaut, qui
      n'émet que les claims listés dans les UserClaims des API resources.
      name n'en faisait jamais partie, donc tout access token était sans
      name et GetUserName() résolvait à null sur les hosts ressources
      (Blogs/Api) — cause du 500 sur l'upload MyFiles et du
      User.Identity.Name injoignable. Le service émet désormais
      name=user.UserName, email et les rôles pour tout client dont
      les AllowedScopes contiennent profile, indépendamment du caller.
    • [Yavsc.Server] ServiceExtensions : NameClaimType = JwtClaimTypes.Name, MapInboundClaims = false (conserver les noms
      courts de claims tels qu'émis).
    • [Yavsc.Blogs] FileSystemHelpers.EnsureDestinationDirectory utilise
      GetUserName() (claim name) au lieu de User.Identity.Name pour
      la racine de stockage par utilisateur.
    • [Tests] WebServerFixture : AccessTokenType = 0 (Jwt dans IS8 ;
      1 = Reference, l'inverse de Duende) ; openid+profile sur le client
      de test ; réensemencement des identity resources openid/profile dans
      ReseedAuthTestData (un ResetAndMigrateDatabase vide le store
      in-memory partagé et les laissait absentes → invalid_scope).
    • [Tests] TestTokenIssuer.Issue gagne un paramètre name optionnel
      (défaut = subject) pour refléter la forme production où
      sub (GUID) ≠ name (login).
    • [Tests] BillingServiceTests : [Collection("Yavsc Server")] pour
      sérialiser avec le build d'hôte qui mute les registres statiques
      BillingService/Config (race parallèle pré-existante).

    Fixed

    • [Yavsc.Blogs] La liste GET /api/v1/fs cherchait sous
      {Blog}/{sub-GUID} (User.GetUserId()), alors que l'arbre de
      stockage perso est indexé par le login partout ailleurs
      (EnsureDestinationDirectory écrit sous {Blog}/{name-claim},
      le endpoint de téléchargement et les avatars utilisent
      user.UserName). Une fois l'upload corrigé, les fichiers
      atterrissaient sous {Blog}/{login} tandis que la liste cherchait
      sous {Blog}/{GUID} — un arbre vide — d'où la page PostIt
      « Mes fichiers » qui ne listait rien. GetDir résout désormais
      l'utilisateur en base et liste sous user.UserName.
      UploadedFile.OwnerId reste sub, donc EnrichWithFileIds
      interpole toujours par uid.
    • [PostIt] Boutons d'action des lignes de liste grisés et inactifs au
      clic (Télécharger / Supprimer / Joindre sur MyFiles ; download/detach
      sur les listes de pièces jointes de BillingQueryDetailsPage et
      EstimateEditionPage). Le binding $parent[vm:XxxViewModel].Cmd
      cherchait un ancêtre CONTRÔLE de type XxxViewModel — un viewmodel,
      pas un contrôle — donc résolvait à null et le Button restait
      désactivé (grisé) et inerte au clic. Corrigé en
      $parent[ContentPage].((vm:XxxViewModel)DataContext).Cmd (syntaxe
      déjà en vigueur dans CirclesPage / EstimateListPage).
    • [PostIt] Les messages de la barre de statut (StatusBar) n'étaient
      pas sélectionnables/copiables : le texte était un TextBlock (non
      sélectionnable dans Avalonia). Remplacé par SelectableTextBlock.
    • [Yavsc.Blogs] La suppression d'un fichier (DELETE api/v1/fs/{name})
      renvoyait un 40x alors que le fichier était bien supprimé du disque.
      DeleteUserDirOrFile (et DeleteUserFile) lisaient
      FileInfo.Length après fi.Delete() ; or FileInfo.Length
      lève FileNotFoundException une fois le fichier disparu — le catch
      du contrôleur transformait cette exception en 400, d'où le message
      perçu « le fichier n'existe pas sur le serveur » tandis que la
      suppression avait réussi. La taille est désormais capturée avant la
      suppression.
    • PostIt default settings
    Downloads
  • 1.0.8-rc17 94d8eb538c

    1.0.8-rc17
    All checks were successful
    Forgejo Release / release (push) Successful in 9m46s
    Dotnet build and test / build (pull_request) Successful in 10m42s
    Pre-release

    notazof released this 2026-09-25 18:42:40 +01:00 | 40 commits to main since this release

    Signed by notazof
    GPG key ID: AD4B9B545FBD7D12

    Fichiers utilisateur et pièces jointes sur les devis/demandes (PostIt +
    API), système de génération contrib (vhosts nginx HTTP/3 edge +
    appsettings jq + QUIC logiciel Kestrel), et correction du bug de
    production où IsPublished disparaissait du payload de liste du blog API.

    Added

    • [PostIt] Espace de stockage personnel (« MyFiles ») : page de gestion
      des fichiers de l'utilisateur, entrée depuis la page d'accueil.
    • [PostIt] Pièces jointes aux devis et aux demandes : attachement depuis
      le détail de demande et la page d'édition de devis.
    • [Yavsc.Api] Endpoints d'attachement de fichiers sur les devis
      (EstimateApiController) et les demandes front-office
      (FrontOfficeApiController).
    • [Yavsc.Api.Client] UserFilesApiClient + DTOs associés ; méthodes
      d'attachement sur EstimateApiClient et FrontOfficeApiClient.
    • [Yavsc.Server] Modèles EstimateAttachedFile, QueryAttachedFile,
      BlogAttachedFile, AttachFileRequest ; migration EF Core
      UserFileAttachments.
    • [contrib] Système de génération Makefile : vhosts nginx HTTP/3 edge
      (template.vhost, QUIC_OPTS), appsettings générés via jq
      (template.appsettings-{org,api,blogs}.json, échappement JSON-safe des
      secrets), QUIC logiciel Kestrel (Http1AndHttp2AndHttp3), et
      README.nginx.md.
    • [Tests] Projet Yavsc.Server.Tests : tests du service
      BlogSpotService.Details + ServerServicesFixture (SQLite :memory:
      par défaut, Npgsql opt-in via YAVSC_SERVER_TEST_DB_PROVIDER).
    • [Tests] IBlogPostWireShapeTests (forme du wire blog),
      EstimateAttachmentsApiTests, FrontOfficeQueryAttachmentsApiTests,
      FileSystemApiTests (pièces jointes et stockage perso).
    • [CI] Intégration Gitleaks / analyse de secrets (.pre-commit-config.yaml).

    Changed

    • [contrib] QUIC_OPTS (reuseport) désormais activé uniquement en
      production sur le vhost Org. La preprod et la prod partageant la même
      IP, reuseport — légal une seule fois par addr:port (443/udp) —
      serait sinon en conflit entre preprod-Org et prod-Org et ferait refuser
      la config par nginx.
    • [Yavsc.Api.Test] ApiWebServerFixture : la connexion admin PostgreSQL
      provient de la variable d'environnement
      YAVSC_API_TEST_NPGSQL_ADMIN_CONNECTION ; plus de mot de passe en
      source.

    Fixed

    • [Yavsc.Blogs] Bug de production : IsPublished était absent du payload
      de la liste du blog API. Le endpoint GetBlogspot retourne
      IEnumerable<IBlogPost> sérialisé par System.Text.Json d'après le type
      déclaré (l'interface), qui omet les propriétés du type concret —
      IsPublished vivait sur BlogPost / BlogPostDto mais pas sur
      IBlogPost. PostIt lisait donc IsPublished == false pour tout billet,
      y compris publiés (https://yavsc.pschneider.fr/BlogSpot/Details/13).
      Corrigé en déclarant IsPublished sur IBlogPost.
    • [Yavsc.Org] Accès au Swagger UI : les actions MVC scaffoldées de
      CommentsController (Index/Details/…) atterrissaient sur la même route
      POST api/v1/blogcomments que l'action d'API Post, provoquant une
      SwaggerGeneratorException (conflit method/path) au chargement de
      /swagger. Corrigé par [ApiExplorerSettings(IgnoreApi = true)] sur
      les actions scaffoldées.
    Downloads
  • 1.0.8-rc16 988de7c366

    1.0.8-rc16
    All checks were successful
    Forgejo Release / release (push) Successful in 14m46s
    Pre-release

    notazof released this 2026-09-22 18:39:53 +01:00 | 61 commits to main since this release

    Flux de signature et de génération de devis : un devis peut désormais être
    signé par les deux parties (fournisseur et client) puis téléchargé en PDF
    ou TeX depuis PostIt, avec les signatures dessinées en vecteur.

    Added

    • [PostIt] Pad de signature sur la page de validation d'un devis : on valide
      ou on refuse en joignant une signature (côté fournisseur ou client), capturée
      au format filaire PostIt (strokes) et envoyée sur l'acceptation.
    • [Yavsc.Api] Finalisation de POST /api/v1/front/query/accept et .../reject :
      autorisation selon le rôle (fournisseur/client/admin), signature optionnelle
      persistée sur l'estimate avec horodatage ProviderValidationDate /
      ClientValidationDate selon le côté signataire.
    • [Yavsc.Api] QueryStatus.Accepted éclaté en ProAccepted / ClientAccepted
      pour distinguer l'acceptation de chaque partie.
    • [Yavsc.Api] Endpoints de devis GET /api/v1/front/query/{id}/estimate.tex et
      estimate.pdf (clé par id de query). Le flux de génération TeX/PDF est
      rapatrié de Yavsc.Org vers Yavsc.Api (TeXHelpers, PdfGenerationViewModel,
      BillViewComponent, modèles Bill/Estimate, _ViewImports ; Program.cs
      câble AddControllersWithViews + SiteSettings).
    • [Yavsc.Api] Signatures du devis dessinées en TikZ vectoriel
      (TeXHelpers.SignatureToTikz) en bas du document, fournisseur et client
      côte à côte dans deux minipages ; plus de dépendance à un PNG de signature.
    • [Yavsc.Api.Client] DownloadAsync sur le client + GetEstimateTexAsync /
      GetEstimatePdfAsync ; boutons « Télécharger PDF » / « Télécharger TeX »
      dans PostIt sur la page de validation du devis et le détail de commande,
      avec un helper StorageProvider d'enregistrement de fichier.
    • [PostIt] La liste des devis se rafraîchit au retour de navigation (pop-back),
      de sorte qu'un devis validé quitte immédiatement la liste du signataire.
    • [PostIt] Renommage des titres de liste : « Devis en attente de signature
      fournisseur » / « Devis en attente de signature client ».
    • [Yavsc.Abstract] SignatureType déplacé dans Yavsc.Abstract.Billing.
    • [CLI] Option -c configuration-file.json au lancement.
    • [Tests] EstimatePdfGenerationTests : tests unitaires du pipeline
      signature → TikZ → PDF (devis signé des deux côtés), assertant que le PDF
      existe au chemin de sortie attendu et que seul le PDF persiste (aux/log
      nettoyés) ; skip propre si lualatex est absent.
    • [README] Dépendances système au runtime pour la génération PDF :
      texlive-binaries (lualatex), texlive-luatex (luaotfload),
      texlive-pictures (tikz), texlive-fonts-extra (bera).

    Changed

    • [Yavsc.Api] GetOngoingEstimatesAsProvider filtre désormais sur
      ProviderValidationDate : un devis signé par le fournisseur quitte sa liste
      « en attente ».
    • [Yavsc.Api] La génération PDF compile via le lualatex système, le TeX fourni
      sur l'entrée standard (/dev/stdin), le PDF écrit directement dans le
      répertoire des factures (Site.Bills), les artefacts .aux/.log nettoyés
      afin que seul le .pdf persiste.

    Fixed

    • [Yavsc.Api] Emergency stop à la génération PDF : lualatex sans argument
      fichier lit stdin en mode terminal et s'arrête après la première ligne d'un
      document multi-lignes. Corrigé en passant /dev/stdin comme nom de fichier
      d'entrée — stdin est alors traité comme un fichier régulier et le document
      multi-lignes compile. C'était la cause racine de l'échec en production, pas
      bera ni luaotfload (problèmes réels mais séparés, comblés côté paquets).
    • [Yavsc.Api] I can't write on file 'estimate-1.log' : le chemin relatif
      Site.Bills ("bills") était imbriqué quand il servait à la fois de
      -output-directory et de répertoire de travail ; résolu en chemin absolu.
    • [Yavsc.Api] NRE dans RenderViewToString (RouteData / ViewData.Model
      nuls) : reconstruit sur le ControllerContext du contrôleur ; IViewEngine
      résolu via IRazorViewEngine (.NET 10 n'enregistre pas de IViewEngine
      unique).
    • [Yavsc.Api] Layout = "null" (chaîne) dans les modèles TeX cherchait
      null.cshtml ; corrigé en Layout = null (null C#).
    • [Yavsc.Api] texi2pdf (outil Texinfo, inadapté au LaTeX) remplacé par
      lualatex.
    • [Yavsc.Api] Les diagnostics lualatex étaient perdus (écrits dans le .log
      qu'on supprimait) ; stdout/stderr sont désormais capturés dans le message
      d'erreur, et le .log est conservé en cas d'échec.
    Downloads
  • 1.0.8-rc15 4bca36906e

    1.0.8-rc15
    All checks were successful
    Forgejo Release / release (push) Successful in 5m35s
    Pre-release

    notazof released this 2026-09-19 16:38:26 +01:00 | 96 commits to main since this release

    Added

    • [PostIt] Saisie et envoi de pieces jointes sur un billet de blog: le client monte les fichiers en multipart/form-data lors du Save, ajoute un lien Markdown par piece jointe a l'article, puis re-PUT le billet. Une collection DraftAttachments porte les fichiers en cours d'edition.
    • [PostIt] Apercu Markdown dans l'editeur de blogs (integration MarkdownViewer.Core) avec bascule edition/preview sur BlogsPage.
    • [PostIt] Gestion des devis: page de liste EstimateListPage (vues client et prestataire), page d'edition EstimateEditionPage avec lignes de devis (EstimateLineItemViewModel), et flux de validation d'un devis.
    • [PostIt] Flux des requetes en cours cote prestataire (ProviderOngoingRequestsPage) avec tri persistant.
    • [Yavsc.Api] Endpoints devis GET /api/v1/estimate/asclient et GET /api/v1/estimate/asprovider pour lister les devis en cours selon le role.
    • [Yavsc.Api] Endpoint GET /api/v1/billing/provider/ongoing et POST /api/v1/billing/prosign/{billingCode}/{id} pour le flux prestataire.
    • [Yavsc.Api.Client] EstimateApiClient + DTOs (EstimateDto, EstimateLineDto) pour le pipeline devis cote client lourd.
    • [Yavsc.Api.Client] Reprise de l'upload de fichiers blog dans BlogApiClient (CreateMultipartContent, BlogUploadFile) — la meme forme filaire que PostIt utilise en production.
    • [Yavsc.Abstract] FileServerUrlHelpers pour deriver les URLs publiques des fichiers utilisateur depuis l'autorite OIDC (alignement sur UserFilesPath).
    • [Yavsc.Server] BlogSpotService.AttachFiles : ecrit les pieces jointes sous la racine des fichiers utilisateur ({UserFilesDirName}/{user}/blogs/{postId}/{fileName}).
    • [Yavsc.Blogs] BlogApiController accepte multipart/form-data (champ blog + parts file) sur POST et PUT /api/v1/blogspot, en plus du payload JSON existant.
    • [PostIt] Variable d'environnement POSTIT_SETTINGS_JSON pour surcharger les parametres au lancement (utile en CI/test).
    • [Yavsc.Server] Migration EF fileACL: CircleAuthorizationToFile gagne OwnerId + Access et un graphe proprieetaire, base du controle d'acces fichier par cercle.
    • [Yavsc.Server] Migration EF genericEstimate: Estimate.Query passe de RdvQuery a NominativeServiceCommand? pour supporter des devis non lies a un RDV.
    • [Yavsc.Server] Migrations EF NominativeServiceCommand et AddHairCutQueryLocationId (localisation de la coupe).
    • [CI] Integration du scan de secrets Gitleaks dans le pipeline Forgejo + .gitleaksignore.
    • [Tests] Non-regressions: round-trip multipart blog (BlogApiTests, CreateMultipartContentTests forme + serveur), BlogAttachmentLinkTests, FileServerUrlHelpersTests, EstimateApiControllerTests, VMs EstimateList/EstimateEdition/ProviderOngoingRequests, BillingControllerTests (filtrage par utilisateur), GetOpenIdConfiguration contre l'hote de test.

    Changed

    • [PostIt] Renommage MainPage -> BlogsPage (et PushMainPageAsync -> PushBlogsPageAsync) pour refletter le role de la page.
    • [PostIt] Refacto des SiteSettings : reorganisation des parametres, nouvelles valeurs par defaut, et indications plus claires dans les appsettings.
    • [Yavsc.Api] BillingController ne liste plus que les codes billing de l'utilisateur authentifie (filtre par UserId), au lieu de l'ensemble des requetes prestataire.
    • [Yavsc.Api] Mutualisation d'un YavscMessageSender partage dans l'hote API (au lieu d'une instance par controller).
    • [Yavsc.Org] La detection du doublon d'email a l'inscription utilise desormais le code erreur generic DbException 23505 (fournisseur-agnostique) au lieu de PostgresException, pour rester correct en test SQLite.
    • [PostIt] YavscApiClient tolere les corps vides (204 No Content sur PUT /blogspot/{id}) au lieu de lever un JsonException.
    • [CI] Le pipeline compile avant les tests, installe les dependances natives, et retire le ItemGroup.Using Include=Xunit superflu.

    Fixed

    • [PostIt] Suppression d'un faux message d'erreur affiche apres un PUT /blogspot/{id} reussi (204 traite comme succes, plus comme une reponse vide invalide).
    • [PostIt] Correction de la creation des liens de pieces jointes (TryAppendAttachmentLinks) : segment proprietaire et chemin blogs/{id}/{fileName} alignes sur ce que AttachFiles ecrit reellement.
    • [Yavsc.Blogs] Correction de l'upload / de la persistance des pieces jointes (FileSystemHelpers + BlogApiController multipart).
    • [Tests] Stabilisation des suites: seeds billing avec metadonnees d'audit, GetOpenIdConfiguration_returns_ok contre l'hote de test, retraits d'assertions abusives, tests SQLite verts.
    • [PostIt] Nettoyage de fichiers temporaires accidentels et ignore des repertoires tmp dans le depot.
    Downloads
  • 1.0.8-rc14 1ec7c7a75a

    1.0.8-rc14
    All checks were successful
    Forgejo Release / release (push) Successful in 4m39s
    Pre-release

    notazof released this 2026-09-06 20:34:34 +01:00 | 159 commits to main since this release

    Added

    • [PostIt] Ajout d'un BillingQueryDetailsPageViewModel et de sa page associee pour afficher le detail d'une commande billing depuis l'historique.
    • [PostIt] Ajout d'un mode detail avec section metier (statut, date, description, motif, infos) et section technique repliable (code, client, provision, lieu, prestations).
    • [PostIt] Ajout d'un badge de statut enrichi (couleur + pictogramme) sur le detail d'une commande pour visualiser l'etat en un coup d'oeil.
    • [PostIt] Ajout d'un bloc d'actions rapide en tete du detail (Retour, Ouvrir en edition) pour eviter le scroll jusqu'au bas de page.
    • [PostIt] Ajout d'un style monospace sur les metadonnees techniques (code billing, client, provision, lieu, prestations) pour faciliter la lecture des identifiants et valeurs brutes.

    Changed

    • [PostIt] Le bouton d'ouverture depuis la liste billing ouvre maintenant une page de detail dediee avant l'eventuelle edition.
    • [PostIt] Amelioration UX des pages billing: badges de statut colores, actions remontees en haut de page, et typographie monospace sur les metadonnees techniques.

    Fixed

    • [Yavsc.Api] Correction d'un 500 sur le refresh du catalogue d'activites lorsque Activity.Description est NULL en base (nullabilite explicite + projection null-safe + gardes sur codes vides).
    • [Yavsc.Api] Correction des erreurs 400/500 sur les routes billing (Rdv, Brush, MBrush) en imposant ClientId depuis l'utilisateur authentifie et en ignorant les champs server-owned lors de la validation modele.
    • [Yavsc.Api] Correction du PUT /api/v1/billing/Rdv/{id}: mise a jour controlee de l'entite existante (et non remplacement brut du graphe JSON), ce qui supprime les BadRequest parasites.
    • [Yavsc.Api] Correction PostgreSQL timestamptz sur RDV: normalisation UTC de EventDate sur POST/PUT /api/v1/billing/Rdv pour eviter l'erreur Cannot write DateTime with Kind=Local.
    • [Yavsc.Api] Correction du flux FrontOffice accept/reject de query: sauvegarde avec contexte utilisateur et fallback d'injection pour IBillingService afin d'eviter les erreurs serveur en environnement de test.
    • [Yavsc.Blogs] Correction des BadRequest sur POST/PUT /api/v1/blogspot avec payload JSON (PostIt): les proprietes de navigation/serveur (Author, Tags, Comments, audit) ne bloquent plus la validation.
    • [Yavsc.Org] Correction du flux MVC de creation de commentaire: SaveChangesAsync(userId) est utilise pour renseigner les champs d'audit requis (UserCreated/UserModified).
    • [Yavsc.Api.Test] Stabilisation des fixtures de seed billing: remplissage des metadonnees d'audit (UserCreated, UserModified, dates) pour eviter les echecs SQLite NOT NULL.
    Downloads
  • 1.0.8-rc13 e1d9bb38a3

    1.0.8-rc13
    All checks were successful
    Forgejo Release / release (push) Successful in 6m21s
    Pre-release

    notazof released this 2026-09-06 18:03:34 +01:00 | 163 commits to main since this release

    Added

    • [PostIt] Integration d'un selecteur de lieu RDV base sur Mapsui (carte interactive dans le formulaire Rdv).
    • [PostIt] Ajout d'un marqueur de position et d'une action de recentrage sur la carte RDV.
    • [PostIt] Ajout d'un service de reverse geocoding pour suggerer une adresse a partir des coordonnees carte.
    • [PostIt] Cache et debounce des resolutions d'adresse RDV pour limiter les appels reseau et lisser l'UX.
    • [PostIt.Tests] Nouvelles non-regressions sur le panneau d'adresse suggeree RDV et le comportement de la carte.
    • [Yavsc.Abstract] Activation de #nullable enable annotations sur les fichiers legacy avec annotations nullable.
    • [Yavsc.Server] Activation de #nullable enable annotations sur les fichiers legacy avec annotations nullable.

    Changed

    • [PostIt] Generalisation de la barre de statut d'action (severite explicite) sur pages principales, dialogues et formulaires billing.
    • [PostIt] Harmonisation des messages de statut utilisateur en francais.
    • [PostIt] Renforcement des gardes de navigation dans les flux de gestion des membres de cercle.
    • [PostIt] Le flux RDV conserve l'adresse saisie manuellement et propose l'adresse resolue comme suggestion explicite.
    • [PostIt] Le flux de geolocalisation RDV tolere les positions proches dans le cache de suggestion d'adresse.

    Fixed

    • [PostIt.Desktop] Correction d'un crash au demarrage OIDC (No authority specified) via durcissement des valeurs par defaut de configuration d'authentification.
    • [PostIt] Correction de la persistance des settings: l'etat runtime de statut n'est plus serialize dans le JSON utilisateur.
    • [PostIt.Tests] Ajout d'un verrou de non-regression sur le premier chargement des settings.
    • [PostIt] Correction du binding de la date RDV: DatePicker.SelectedDate est aligne sur un proxy DateTimeOffset? (EventDateSelection).
    Downloads