diff --git a/.forgejo/workflows/buildAndTest.yml b/.forgejo/workflows/buildAndTest.yml
index b9e6f17b2..86694c899 100644
--- a/.forgejo/workflows/buildAndTest.yml
+++ b/.forgejo/workflows/buildAndTest.yml
@@ -31,7 +31,6 @@ jobs:
steps:
- name: Clone yavsc
run: |
- set -e
cd /src
git clone https://forgejo.pschneider.fr/notazof/yavsc.git _src
cd _src
@@ -41,23 +40,8 @@ jobs:
fi
git submodule update --init --recursive
echo "✅ Checked out at $(git rev-parse HEAD) on $(git branch --show-current 2>/dev/null || echo detached HEAD)"
- - name: Secret scan
- run: |
- echo "🔍 Scanning for secrets..."
- cd /src/_src && dotnet tool restore && dotnet picket git --verbose --redact --exit-code 1 --log-opts -n10 \
- - name: Build
- run: |
- echo "🏗️ Building the solution..."
- cd /src/_src && dotnet build --verbosity normal
- - name: Install SkiaSharp native dependencies
- run: |
- echo "📦 Installing libfontconfig/libfreetype for SkiaSharp (Avalonia.Headless)..."
- apt-get update && apt-get install -y --no-install-recommends \
- libfontconfig1 libfreetype6 libexpat1 zlib1g libbz2-1.0 libpng16-16 libbrotli1 \
- && rm -rf /var/lib/apt/lists/*
+
- name: Test
run: |
echo "🚀 Lancement des tests..."
- cd /src/_src && dotnet test \
- --verbosity normal \
- --filter="Category!=Platform-Android"
+ cd /src/_src && dotnet test --verbosity normal && echo "✅ Success !"
diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml
index 911fc831d..a72f92bd6 100644
--- a/.forgejo/workflows/release.yml
+++ b/.forgejo/workflows/release.yml
@@ -175,12 +175,6 @@ jobs:
run: |
cd /src/_src
dotnet restore
- - name: Test
- run: |
- cd /src/_src && dotnet test \
- --verbosity normal \
- --filter="Category!=Platform-Android" \
- --logger "xunit;LogFileName=test-results.xml"
- name: Build de PostIt.Android ARM64
run: |
@@ -206,7 +200,6 @@ jobs:
RELEASE_BODY: ${{ env.RELEASE_BODY }}
IS_PRERELEASE: ${{ env.IS_PRERELEASE }}
run: |
- set -e
if [[ -z "$TAG" ]]; then
echo "::error::No tag resolved for the API call."
exit 1
diff --git a/.github/workflows/docker-publish-backend.yml b/.github/workflows/docker-publish-backend.yml
index d8466bdb8..6c2431aed 100644
--- a/.github/workflows/docker-publish-backend.yml
+++ b/.github/workflows/docker-publish-backend.yml
@@ -26,7 +26,7 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Test
- run: dotnet test --no-build --verbosity normal --filter="Category!=Platform-Android"
+ run: dotnet test --no-build --verbosity normal
# 4. Build et Push de l'image de production finale
- name: Build and push production image
uses: docker/build-push-action@v7
diff --git a/.gitignore b/.gitignore
index 056cf69d2..b7813f604 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,7 +35,6 @@ appsettings-*.*.json
generated/
*.tmp
-tmp/
DataDir/
*.tests.trx
diff --git a/.gitleaksignore b/.gitleaksignore
deleted file mode 100644
index 056cf69d2..000000000
--- a/.gitleaksignore
+++ /dev/null
@@ -1,45 +0,0 @@
-# Exclure uniquement les dossiers de sortie de compilation
-bin/
-obj/
-src/*/bin/
-src/*/obj/
-test/*/bin/
-test/*/obj/
-
-# Toolchain front (Node / esbuild)
-node_modules/
-build/
-package-lock.json
-
-# Exclure les caches lourds
-.git/
-.vs/
-
-.env
-
-.*.env
-
-*.csproj.lscache
-data/
-appsettings.*.json
-appsettings-*.*.json
-
-# Exception: the Testing-environment override for Yavsc.Org is a tracked
-# configuration source, not a secrets file. TestWebApplicationFactory
-# (Yavsc.Org.Tests) flips ASPNETCORE_ENVIRONMENT to "Testing" so
-# AddConfiguration("org") in Program.Main loads this file as the
-# last in the chain (it is optional). It overrides the connection
-# string and SMTP section for the in-memory test host and contains
-# no production secrets.
-!src/Yavsc.Org/appsettings-org.Testing.json
-
-generated/
-*.tmp
-tmp/
-DataDir/
-
-*.tests.trx
-*.tests.html
-
-*.log
-
diff --git a/.vscode/launch.json b/.vscode/launch.json
index d5088f01d..dc8d3c68d 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -4,22 +4,6 @@
// Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
- {
- "name": "PostIt Desktop",
- "type": "dotnet",
- "request": "launch",
- "projectPath": "${workspaceFolder}/src/PostIt/PostIt.Desktop/PostIt.Desktop.csproj"
- },
- {
- "name": "PostIt Desktop local",
- "type": "coreclr",
- "request": "launch",
- "program": "${workspaceFolder}/src/PostIt/PostIt.Desktop/bin/Debug/net10.0/PostIt.Desktop.dll",
- "env": {
- "POSTIT_SETTINGS_JSON": "/home/paul/Workspace/yavsc/src/PostIt/PostIt/postit-settings.json"
- },
- "preLaunchTask": "dotnet: build-postit-desktop"
- },
{
"name": "Android Debug",
"type": "mono",
@@ -36,10 +20,10 @@
"port": 55555
},
{
- "name": "Yavsc API",
+ "name": "API",
"type": "dotnet",
"request": "launch",
- "projectPath": "${workspaceFolder}/src/Yavsc.Api/Yavsc.Api.csproj"
+ "projectPath": "${workspaceFolder}/src/Api/Api.csproj"
},
{
"name": "Yavsc Org",
@@ -53,7 +37,12 @@
"request": "launch",
"projectPath": "${workspaceFolder}/src/Yavsc.Blogs/Yavsc.Blogs.csproj"
},
-
+ {
+ "name": "PostIt Desktop",
+ "type": "dotnet",
+ "request": "launch",
+ "projectPath": "${workspaceFolder}/src/PostIt/PostIt.Desktop/PostIt.Desktop.csproj",
+ },
{
"name": "Test PostIt.Android launch (Xamarin.UITest)",
"type": "coreclr",
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 71384cd8c..3faedae05 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -7,13 +7,12 @@
"fileLocation": ["relative", "${workspaceFolder}"],
"source": "dotnet",
"pattern": {
- "regexp": "^\\s*(.*)\\((\\d+),(\\d+)\\):\\s+(error|warning) (.*)$",
+ "regexp": "^\\s+(.*)\\((\\d+):(\\d+)\\):\\s+(error|warning)\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
- "code": 5,
- "message": 6
+ "message": 5
}
}
],
@@ -47,10 +46,7 @@
"group": "build",
"isBuildCommand": true,
"isTestCommand": false,
- "isBackground": true,
- "options": {
- "cwd": "${workspaceFolder}"
- }
+ "isBackground": true
},
{
"label": "test blogs backend",
@@ -66,28 +62,6 @@
"isDefault": false
}
},
- {
- "label": "test api backend (npgsql)",
- "type": "process",
- "problemMatcher": "$msCompile",
- "command": "dotnet",
- "args": [
- "test",
- "Yavsc.Api.Test.csproj",
- "-v",
- "minimal"
- ],
- "options": {
- "cwd": "src/Yavsc.Api.Test",
- "env": {
- "YAVSC_API_TEST_DB_PROVIDER": "npgsql"
- }
- },
- "group": {
- "kind": "test",
- "isDefault": false
- }
- },
{
"label": "build-webapi",
"type": "process",
@@ -101,21 +75,6 @@
"kind": "build"
},
"isBackground": true
- },
- {
- "label": "dotnet: build-postit-desktop",
- "type": "process",
- "isBuildCommand": true,
- "isTestCommand": false,
- "isBackground": true,
- "command": "dotnet",
- "args": ["build", "/property:GenerateFullPaths=true"],
- "options": {
- "cwd": "src/PostIt/PostIt.Desktop"
- },
- "group": {
- "kind": "build"
- }
}
]
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 111c1491a..7210a2275 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,160 +1,21 @@
# Changelog
-## [1.0.8-rc14] - unstable
+Toutes les modifications notables de PostIt et de la plateforme Yavsc
+sont documentées dans ce fichier.
-### Added
+Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
+et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-* [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.
+À noter : la **parité du numéro de patch** porte une signification de canal :
-### Changed
+- **patch pair** (ex. `1.0.0`, `1.0.2`) → **stable**
+- **patch impair** (ex. `1.0.1`, `1.0.3`) → **preview**
+- **suffixe** (ex. `1.0.0-rc1`, `1.0.0-alpha`) → **instable**
-* [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.
+Cette convention est partagée avec le dépôt
+[`postit-debian`](https://forgejo.pschneider.fr/notazof/postit-debian)
+pour la production des paquets `.deb`.
-### 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`.
-
-## [1.0.8-rc13] - unstable
-
-### 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`).
-
-## [1.0.8-rc12] - unstable
-
-### Added
-
-* [PostIt] Nouveau helper d'image `ImageHelper` pour charger des bitmaps depuis les ressources et depuis le web.
-* [PostIt] Affichage de l'avatar XS dans la liste des performers d'activites, avec fallback visuel (initiale utilisateur).
-* [PostIt.Tests] Nouveaux tests autour des URLs avatar et de la source d'autorite.
-* [contrib] Ajout d'un `README.md` utilitaire pour les symboles/icones.
-
-### Changed
-
-* [PostIt] Les avatars ne sont plus relies en string sur `Image.Source`: ils sont telecharges et lies en `Bitmap`.
-* [Yavsc.Api.Client] `ActivityApiClient` accepte une base d'avatar dediee et construit les URLs avatar depuis l'autorite d'identification.
-* [PostIt] Les clients Activites/Billing utilisent maintenant `ApiUrl` en lecture dynamique: un changement via Parametres prend effet sans redemarrer l'application (apres sauvegarde et rafraichissement de la page).
-* [PostIt] Le header de `MainPage` n'utilise plus `ScrollViewer`; remplacement par une barre de commandes basee sur `WrapPanel`.
-* [PostIt] Alignement de la navigation blogs: renommage `PushMainPageAsync` -> `PushBlogsPageAsync` et ajustement de `HomePageViewModel`.
-
-### Fixed
-
-* [PostIt.Android] Correction d'un 404 sur la page Activites au premier lancement: la configuration embarquee pointait `ApiUrl` vers le host Blogs au lieu de l'API metier.
-* [PostIt] Correction du bouton Sauver de la page Parametres: binding vers `SaveCommand` pour persister correctement `ApiUrl`/`BlogsApiUrl`.
-
-## [1.0.8-rc11] - unstable
-
-### Added
-
-nothing
-
-### Changed
-
-* [Yavsc.Api.Test] Mise a jour de `Microsoft.EntityFrameworkCore.Sqlite` vers `10.0.11` afin de supprimer l'alerte NU1903 liee a `SQLitePCLRaw.lib.e_sqlite3` 2.1.11.
-* [Yavsc.Org] Nettoyage de la configuration NuGet pour le restore: suppression du fichier local `Directory.Packages.props` au profit du fichier racine centralise.
-* [Yavsc.Org] Suppression de references de packages redondantes dans le projet, sans impact fonctionnel attendu.
-
-### Fixed
-
-* [Yavsc.Api.Test] Le restore n'emet plus le warning de vulnerabilite `NU1903` sur `SQLitePCLRaw.lib.e_sqlite3`.
-* [Yavsc.Org] Suppression d'une vulnerabilite de severite elevee sur AutoMapper apres publication et consommation de la nouvelle version candidate de `HigginsSoft.IdentityServer8`.
-
-## [1.0.8-rc10] - unstable
-
-### Added
-
-* [PostIt] Une page d'historique des commandes billing permet maintenant d'ouvrir une commande existante.
-* [PostIt] Une vue "Demandes en cours" en lecture seule est disponible pour le performer, filtrée sur les statuts actifs (Inserted, Accepted, InProgress).
-* [Yavsc.Org] Nouvelles entités `Country` et `PerformerCodeInputValidation` pour piloter la validation du code entreprise performer par pays.
-
-### Changed
-
-* [PostIt] La page détail billing se préremplit depuis une commande existante (Rdv, Brush, MBrush) et passe en mode mise à jour.
-* [Yavsc.Org] Le formulaire `Manage/SetActivity` inclut désormais le pays d'exercice (`fr`, `en`, `pt`) et applique la regex associée au champ `SIREN`.
-* [Yavsc.Org] La vérification externe du numéro d'entreprise est conservée uniquement pour le pays `fr`.
-
-### Fixed
-
-* [PostIt] Le flux historique n'est plus limité à une simple liste: l'action d'ouverture charge la commande cible puis navigue vers la page détail.
-* [Yavsc.Org] Le champ `SIREN` n'est plus validé avec une règle unique indépendante du pays d'exercice.
-
-## [1.0.8-rc9] - unstable
-
-### Added
-
-nothing
-
-### Changed
-
-masquage non-owner côté backend de l'ACL du billet
-
-### Fixed
-
-On a maintenant le comportement attendu bout en bout:
-
-ACL chargée depuis le BlogPostDto
-noms de cercles affichés dans le dialogue ACL côté PostIt
-
-## [1.0.8-rc8] - unstable
-
-### Added
-
-nothing
-
-### Changed
-
-nothing
-
-### Fixed
-
-The PostIt publish toggle button
-
-## [1.0.8-rc7] - unstable
-
-### Added
-
-* [PostIt] The search pattern now persists
-
-### Changed
-
-* The blog spot path is now `/api/v1/blogspot` (yet in last release)
-
-### Fixed
-
-* [Yavsc.Org] (Ticket #45) La forme de l'email de l'utilisateur est maintenant validée avant l'envoi du formulaire d'enregistrement
## [1.0.8-rc6] - unstable
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8aa0567d3..b9969ea50 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -49,39 +49,6 @@ Les tests sont répartis en :
item « Tests d'intégration smoke par BC ».
- `src/PostIt.Tests/` — tests unitaires du client desktop PostIt.
-## Onboarding assiste par agents IA
-
-Pour accelerer la prise en main du depot avec Copilot/Plan/Explore :
-
-- Parcours pas-a-pas : [doc/onboarding-agents.md](./doc/onboarding-agents.md)
-- Playbook d'usage des agents : [doc/agent-playbook.md](./doc/agent-playbook.md)
-- Matrice intentions -> agent -> preuves : [doc/agent-intent-matrix.md](./doc/agent-intent-matrix.md)
-
-Regle minimale en contribution assistee par agent :
-- expliciter l'impact architecture,
-- justifier le niveau de tests execute,
-- documenter les risques residuels.
-
-## Le CHANGELOG.md
-
-Le `CHANGELOG.md` est un document de changement de version
-
-Toutes les modifications notables de PostIt et de la plateforme Yavsc
-sont documentées dans ce fichier.
-
-Le format suit [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/),
-et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-À noter : la **parité du numéro de patch** porte une signification de canal :
-
-- **patch pair** (ex. `1.0.0`, `1.0.2`) → **preview**
-- **patch impair** (ex. `1.0.1`, `1.0.3`) → **stable**
-- **suffixe** (ex. `1.0.0-rc1`, `1.0.0-alpha`) → **instable**
-
-Cette convention est partagée avec le dépôt
-[`postit-debian`](https://forgejo.pschneider.fr/notazof/postit-debian)
-pour la production des paquets `.deb`.
-
## Navigation (PostIt)
La navigation est centralisée dans
diff --git a/Directory.Packages.props b/Directory.Packages.props
index f1be93f91..7505c8512 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -1,31 +1,15 @@
true
- 8.1.0-pazofrc007
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -33,24 +17,14 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/Makefile b/Makefile
index d99fe5e5e..fa9d4ecf1 100644
--- a/Makefile
+++ b/Makefile
@@ -48,4 +48,77 @@ docker-build:
docker-run:
docker run -d -p 5000:5000 --name yavsc yavsc
-.PHONY: test install docker-image docker-build docker-run
+# Crée une branche release/ depuis main, met à jour les
+# `` des .csproj via dotnet-gitversion, et la
+# pousse sur origin.
+#
+# Usage : make release V=1.0.7-rc1
+#
+# Pré-requis : être sur main, working tree clean. La cible
+# vérifie les deux et refuse sinon — elle ne fait JAMAIS
+# de checkout automatique, c'est à l'opérateur de s'être
+# positionné sur la bonne branche au préalable (sinon le
+# bump pourrait partir sur une branche tierce par accident).
+#
+# Notes :
+# - Le nom de branche vient de l'argument V (ex: 1.0.7-rc1
+# donne release/1.0.7-rc1). C'est une étiquette d'intention,
+# pas la version assembly.
+# - La version dans les .csproj vient de GitVersion qui la
+# calcule depuis l'historique git (tag le plus proche +
+# nombre de commits). C'est la version assembly réelle.
+# - L'ordre (fetch → branche → bump → push) garantit qu'on
+# part d'un main synchro et qu'on ne pollue pas main avec
+# le bump (qui vit sur la branche release).
+# - Fail-fast si la branche existe déjà en local ou sur origin.
+release:
+ @if [ -z "$(V)" ]; then \
+ echo "Usage: make release V="; \
+ echo " V : version semver (ex. 1.0.7-rc1) — sert à nommer la branche."; \
+ exit 1; \
+ fi
+ @CURRENT=$$(git branch --show-current); \
+ if [ "$$CURRENT" != "main" ]; then \
+ echo "Refus : la cible doit être lancée depuis main."; \
+ echo " Branche courante : $$CURRENT"; \
+ echo " Fais : git checkout main && git pull --ff-only origin main"; \
+ exit 1; \
+ fi
+ @if [ -n "$$(git status --porcelain)" ]; then \
+ echo "Working tree sale, refus de créer une branche release."; \
+ git status --short; \
+ exit 1; \
+ fi
+ @BRANCH="release/$(V)"; \
+ if git show-ref --verify --quiet "refs/heads/$$BRANCH"; then \
+ echo "La branche $$BRANCH existe déjà en local."; \
+ echo " Pour la supprimer : git branch -D $$BRANCH"; \
+ exit 1; \
+ fi; \
+ if git ls-remote --exit-code --heads origin "$$BRANCH" >/dev/null 2>&1; then \
+ echo "La branche $$BRANCH existe déjà sur origin."; \
+ exit 1; \
+ fi; \
+ echo "==> Fetch + vérification synchro main"; \
+ git fetch origin main; \
+ if ! git merge-base --is-ancestor origin/main HEAD; then \
+ echo "main a avancé plus loin que HEAD. Fais :"; \
+ echo " git pull --ff-only origin main"; \
+ exit 1; \
+ fi; \
+ echo "==> Création de $$BRANCH depuis main"; \
+ git checkout -b "$$BRANCH"; \
+ echo "==> dotnet-gitversion /updateprojectfiles"; \
+ dotnet-gitversion /updateprojectfiles; \
+ echo "==> Commit du bump"; \
+ git add .; \
+ if git diff --cached --quiet; then \
+ echo "Pas de changements à committer (gitversion n'a produit aucune diff)."; \
+ else \
+ git commit -m "chore(release): bump version via gitversion for $(V)"; \
+ fi; \
+ echo "==> Push de $$BRANCH sur origin"; \
+ git push -u origin "$$BRANCH"; \
+ echo "==> Terminé. Branche $$BRANCH live sur origin."
+
+.PHONY: test release
diff --git a/README.md b/README.md
index 549348f4a..33dc4c770 100644
--- a/README.md
+++ b/README.md
@@ -16,11 +16,9 @@ https://forgejo.pschneider.fr/notazof/yavsc/actions?workflow=release.yml
# Statut actuel des actions GitHub
-* [](https://github.com/pazof/yavsc/actions/workflows/codeql.yml)
-
-* [](https://github.com/pazof/yavsc/actions/workflows/docker-publish-backend.yml)
-
+-* [](https://github.com/pazof/yavsc/actions/workflows/codeql.yml)
+* [](https://github.com/pazof/yavsc/actions/workflows/docker-publish-backend.yml)
# Documentation
L'architecture, la roadmap et les détails métier sont documentés
@@ -28,10 +26,6 @@ sous [`doc/`](./doc/). Voir l'[index de la documentation](./doc/README.md)
pour le sommaire complet. La racine de l'architecture est
[Architecture.md](./doc/Architecture.md).
-Pour une prise en main guidee avec agents IA:
-- parcours onboarding: [doc/onboarding-agents.md](./doc/onboarding-agents.md)
-- playbook d'usage: [doc/agent-playbook.md](./doc/agent-playbook.md)
-
# Construction et déploiement
diff --git a/ROADMAP.md b/ROADMAP.md
index 364b98bda..4c00e629c 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -68,7 +68,7 @@ Trois principes non négociables traversent tous les jalons :
>
> Chaque jalon a un **critère de sortie** vérifiable.
-### Jalon 0 — Fondations techniques
+### Jalon 0 — Fondations techniques *(en cours)*
> Cible : pouvoir parler du domaine sans se battre avec le runtime.
@@ -81,7 +81,7 @@ Trois principes non négociables traversent tous les jalons :
---
-### Jalon 1 — Prestation signée de bout en bout *(en cours)*
+### Jalon 1 — Prestation signée de bout en bout
> Cible : un projet client/fournisseur aboutit à un **devis signé par les deux parties**, traçable, avec notifications.
diff --git a/contrib/.env-sample b/contrib/.env-sample
deleted file mode 100644
index fb01ede43..000000000
--- a/contrib/.env-sample
+++ /dev/null
@@ -1,24 +0,0 @@
-# parametres de déploiement au Makefile
-
-POSTGRES_HOST=localhost
-POSTGRES_PORT=5432
-POSTGRES_DB=yavsc
-POSTGRES_USER=yavsc
-POSTGRES_PASSWORD=
-
-HTTP_HOST=localhost
-
-Org_PORT=83
-Blogs_PORT=85
-Api_PORT=87
-
-PostIt_CLIENT_ID=postit
-
-ASPNETCORE_Smtp__Host="mercure.pschneider.fr"
-ASPNETCORE_Smtp__Port=465
-ASPNETCORE_Smtp__SenderName="Paul Schneider"
-ASPNETCORE_Smtp__SenderEmail="paul@pschneider.fr"
-ASPNETCORE_Smtp__UserName="paul"
-ASPNETCORE_Smtp__Password=""
-
-DESTDIR=/srv/www/yavsc
diff --git a/contrib/Makefile b/contrib/Makefile
index 4e4ef4df6..151045db0 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -1,4 +1,4 @@
-APP_PROJECT_NAMES=Org Blogs Api
+APP_PROJECT_NAMES=Org Blogs
SLNDIR=..
include $(SLNDIR)/.env
@@ -9,11 +9,9 @@ generated/:
generated/yavscOrg.service:
generated/yavscBlogs.service:
-generated/yavscApi.service:
generated/yavsc%.service: generated/ template.service $(SLNDIR)/.env
@cat template.service | APP_NAME="$*" \
- DESTDIR="$(DESTDIR)" \
HTTP_HOST="$(HTTP_HOST)" \
HTTP_PORT="$*_$(HTTP_PORT)" \
BASEAPPDIR="$(BASEAPPDIR)" \
@@ -35,12 +33,11 @@ generated/yavsc%.service: generated/ template.service $(SLNDIR)/.env
@echo Created service file: $@
-copy-services: copy-service-Org copy-service-Blogs copy-service-Api
+copy-services: copy-service-Org copy-service-Blogs
copy-service-Org: /etc/systemd/system/yavscOrg.service
copy-service-Blogs: /etc/systemd/system/yavscBlogs.service
-copy-service-Api: /etc/systemd/system/yavscApi.service
-copy-binaries: build_publish_Org build_publish_Blogs build_publish_Api stop-services
+copy-binaries: build_publish_Org build_publish_Blogs stop-services
@for project in $(APP_PROJECT_NAMES); \
do LCAPI=$$(echo $${project}|tr [:upper:] [:lower:]) ; \
echo "$${project} -> $${LCAPI}" ; \
@@ -63,8 +60,6 @@ copy-binaries: build_publish_Org build_publish_Blogs build_publish_Api stop-serv
build_publish_%: clean_publish_dir_%
@ASPNETCORE_ENV=$(CONFIGURATION) dotnet publish $(SLNDIR)/src/Yavsc.$*/Yavsc.$*.csproj
-build_publish: build_publish_Org build_publish_Blogs build_publish_Api
-
clean_publish_dir_%:
@rm -rf $(SLNDIR)/src/Yavsc.$*/bin/$(CONFIGURATION)/$(DOTNET_FRAMEWORK)/publish
@@ -89,21 +84,12 @@ stop-services:
$(SLNDIR)/src/Yavsc.Org/bin/$(CONFIGURATION)/$(DOTNET_FRAMEWORK)/publish: build_publish
$(SLNDIR)/src/Yavsc.Blogs/bin/$(CONFIGURATION)/$(DOTNET_FRAMEWORK)/publish: build_publish
-$(SLNDIR)/src/Yavsc.Api/bin/$(CONFIGURATION)/$(DOTNET_FRAMEWORK)/publish: build_publish
showConfig:
@echo CONFIGURATION: $(CONFIGURATION)
@echo BASEAPPDIR: $(BASEAPPDIR)
-showApiLogs:
- @sudo journalctl -u yavscApi.service -S "2 min ago" | tee yavscApi.log
-
-showOrgLogs:
- @sudo journalctl -u yavscOrg.service -S "2 min ago" | tee yavscOrg.log
-
-showBlogsLogs:
- @sudo journalctl -u yavscBlogs.service -S "2 min ago" | tee yavscBlogs.log
-
clean:
@rm -rf generated
+.PHONY: build_publish mep showConfig copy-service-Org copy-service-Blogs reinstall clean
diff --git a/doc/README.md b/doc/README.md
index fb9bea943..912a2e562 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -18,9 +18,6 @@ La racine de l'architecture est [Architecture.md](Architecture.md).
| [architecture/postit.md](architecture/postit.md) | PostIt — topologie des projets, ViewLocator custo, navigation, DI, conventions de binding |
| [architecture/decoupage-organisation.md](architecture/decoupage-organisation.md) | Découpage des projets .NET (Abstract, Server, Org, Api, Blogs, Web, Org.Tests) |
| [testing.md](testing.md) | Stratégie de test : conventions des dossiers, EF Core in-memory, auth stubs, scaffold partagé |
-| [onboarding-agents.md](onboarding-agents.md) | Parcours pas-à-pas pour prise en main agents IA + architecture + tests |
-| [agent-playbook.md](agent-playbook.md) | Playbook d'usage de Copilot, Plan, Explore avec scénarios et anti-patterns |
-| [agent-intent-matrix.md](agent-intent-matrix.md) | Matrice intentions développeur -> agent -> preuves attendues |
## Roadmap & design exploration
diff --git a/doc/agent-intent-matrix.md b/doc/agent-intent-matrix.md
deleted file mode 100644
index 975cd7b79..000000000
--- a/doc/agent-intent-matrix.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Matrice intentions -> agent -> preuves
-
-Cette matrice aide a choisir rapidement l'agent adapte et a exiger
-une sortie verifiable.
-
-| Intention developpeur | Agent principal | Entrees minimales | Sortie minimale attendue | Verification |
-|---|---|---|---|---|
-| Comprendre un BC avant changement | Explore | BC cible, profondeur, contrainte de perimetre | Composants, points d'entree, tests relies, risques | Lire les fichiers cites + confirmer tests proposes |
-| Decomposer une tache transverse | Plan | Objectif, contraintes, definition of done | Etapes ordonnees, dependances, criteres de verif | Verifier que chaque etape a une preuve observable |
-| Implementer une modif locale | Copilot | Fichier cible, comportement attendu, conventions | Patch minimal, justification courte | Build/test du projet impacte |
-| Ajouter un test smoke | Copilot (+Explore) | Route/endpoint, projet de test cible | Test + commande cible | Execution test cible |
-| Corriger une regression | Plan + Copilot | Symptome, zone suspecte, test attendu | Fix + test NonRegression | Test rouge avant, vert apres |
-| Diagnostiquer flux PostIt/OIDC | Explore + Plan | Flux, symptome, plateforme | Carte du flux + hypotheses testables | Verification manuelle + tests existants |
-
-## Regles d'arbitrage
-
-- Si l'intention est "comprendre": commencer par Explore.
-- Si l'intention est "orchestrer": commencer par Plan.
-- Si l'intention est "produire": utiliser Copilot apres cadrage.
-- Si une sortie n'inclut pas de preuve, elle est incomplete.
diff --git a/doc/agent-playbook.md b/doc/agent-playbook.md
deleted file mode 100644
index ecc14f1d2..000000000
--- a/doc/agent-playbook.md
+++ /dev/null
@@ -1,101 +0,0 @@
-# Playbook d'usage des agents IA (Yavsc)
-
-Ce playbook normalise l'usage de Copilot, Plan et Explore dans le depot.
-Il privilegie des sorties verifiables: fichiers, commandes tests, risques.
-
-## Quand utiliser quel agent
-
-- Plan: quand la tache est ambigue, transverse ou risquee.
-- Explore: quand il faut cartographier rapidement des zones du code.
-- Copilot: quand les specifications sont claires et localisees.
-
-## Prompt type (base)
-
-Utiliser ce squelette avant toute tache non triviale:
-
-```text
-Contexte:
-Objectif:
-Contraintes:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/PostIt/PostIt/Views/Activity/ActivitiesPage.axaml.cs b/src/PostIt/PostIt/Views/Activity/ActivitiesPage.axaml.cs
deleted file mode 100644
index 955170075..000000000
--- a/src/PostIt/PostIt/Views/Activity/ActivitiesPage.axaml.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace PostIt.Views;
-
-public partial class ActivitiesPage : ContentPage
-{
- public ActivitiesPage()
- {
- InitializeComponent();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- }
-}
diff --git a/src/PostIt/PostIt/Views/Activity/BillingQueriesPage.axaml b/src/PostIt/PostIt/Views/Activity/BillingQueriesPage.axaml
deleted file mode 100644
index 52b255129..000000000
--- a/src/PostIt/PostIt/Views/Activity/BillingQueriesPage.axaml
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/PostIt/PostIt/Views/Activity/BillingQueriesPage.axaml.cs b/src/PostIt/PostIt/Views/Activity/BillingQueriesPage.axaml.cs
deleted file mode 100644
index 1ca28f04b..000000000
--- a/src/PostIt/PostIt/Views/Activity/BillingQueriesPage.axaml.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace PostIt.Views;
-
-public partial class BillingQueriesPage : ContentPage
-{
- public BillingQueriesPage()
- {
- InitializeComponent();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- }
-}
\ No newline at end of file
diff --git a/src/PostIt/PostIt/Views/Activity/BillingQueryDetailsPage.axaml b/src/PostIt/PostIt/Views/Activity/BillingQueryDetailsPage.axaml
deleted file mode 100644
index 82231ad83..000000000
--- a/src/PostIt/PostIt/Views/Activity/BillingQueryDetailsPage.axaml
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/PostIt/PostIt/Views/Activity/BillingQueryDetailsPage.axaml.cs b/src/PostIt/PostIt/Views/Activity/BillingQueryDetailsPage.axaml.cs
deleted file mode 100644
index ed5336ee0..000000000
--- a/src/PostIt/PostIt/Views/Activity/BillingQueryDetailsPage.axaml.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace PostIt.Views;
-
-public partial class BillingQueryDetailsPage : ContentPage
-{
- public BillingQueryDetailsPage()
- {
- InitializeComponent();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- }
-}
diff --git a/src/PostIt/PostIt/Views/Activity/CommandFormsPage.axaml b/src/PostIt/PostIt/Views/Activity/CommandFormsPage.axaml
deleted file mode 100644
index 2565092e5..000000000
--- a/src/PostIt/PostIt/Views/Activity/CommandFormsPage.axaml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/PostIt/PostIt/Views/Activity/CommandFormsPage.axaml.cs b/src/PostIt/PostIt/Views/Activity/CommandFormsPage.axaml.cs
deleted file mode 100644
index 1d19715b8..000000000
--- a/src/PostIt/PostIt/Views/Activity/CommandFormsPage.axaml.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace PostIt.Views;
-
-public partial class CommandFormsPage : ContentPage
-{
- public CommandFormsPage()
- {
- InitializeComponent();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- }
-}
\ No newline at end of file
diff --git a/src/PostIt/PostIt/Views/Activity/EstimateEditionPage.axaml b/src/PostIt/PostIt/Views/Activity/EstimateEditionPage.axaml
deleted file mode 100644
index 7b25ab226..000000000
--- a/src/PostIt/PostIt/Views/Activity/EstimateEditionPage.axaml
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/PostIt/PostIt/Views/Activity/EstimateEditionPage.axaml.cs b/src/PostIt/PostIt/Views/Activity/EstimateEditionPage.axaml.cs
deleted file mode 100644
index 1c58efa10..000000000
--- a/src/PostIt/PostIt/Views/Activity/EstimateEditionPage.axaml.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace PostIt.Views;
-
-public partial class EstimateEditionPage : ContentPage
-{
- public EstimateEditionPage()
- {
- InitializeComponent();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- }
-}
diff --git a/src/PostIt/PostIt/Views/Activity/ProviderOngoingRequestsPage.axaml b/src/PostIt/PostIt/Views/Activity/ProviderOngoingRequestsPage.axaml
deleted file mode 100644
index 173fe903b..000000000
--- a/src/PostIt/PostIt/Views/Activity/ProviderOngoingRequestsPage.axaml
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/PostIt/PostIt/Views/Activity/ProviderOngoingRequestsPage.axaml.cs b/src/PostIt/PostIt/Views/Activity/ProviderOngoingRequestsPage.axaml.cs
deleted file mode 100644
index ce2e9ad40..000000000
--- a/src/PostIt/PostIt/Views/Activity/ProviderOngoingRequestsPage.axaml.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Avalonia.Controls;
-using Avalonia.Markup.Xaml;
-
-namespace PostIt.Views;
-
-public partial class ProviderOngoingRequestsPage : ContentPage
-{
- public ProviderOngoingRequestsPage()
- {
- InitializeComponent();
- }
-
- private void InitializeComponent()
- {
- AvaloniaXamlLoader.Load(this);
- }
-}
diff --git a/src/PostIt/PostIt/Views/ACL/AddCircleMemberDialog.axaml b/src/PostIt/PostIt/Views/AddCircleMemberDialog.axaml
similarity index 93%
rename from src/PostIt/PostIt/Views/ACL/AddCircleMemberDialog.axaml
rename to src/PostIt/PostIt/Views/AddCircleMemberDialog.axaml
index a17f8574e..8b2329886 100644
--- a/src/PostIt/PostIt/Views/ACL/AddCircleMemberDialog.axaml
+++ b/src/PostIt/PostIt/Views/AddCircleMemberDialog.axaml
@@ -3,7 +3,6 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="PostIt.Views.AddCircleMemberDialog"
xmlns:vm="using:PostIt.ViewModels"
- xmlns:postitControls="using:PostIt.Controls"
xmlns:services="using:PostIt.Services"
x:DataType="vm:AddCircleMemberDialogViewModel"
>
@@ -48,8 +47,8 @@
-
+