0.0.1-alpha.4

This commit is contained in:
2026-09-28 00:53:47 +02:00
parent 91e596eb51
commit 50599da1b3
21 changed files with 2613 additions and 24 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: CHANGELOG.md --> <!-- file: CHANGELOG.md -->
<!-- version: 5 --> <!-- version: 6 -->
# Changelog SaseDev Knowledge # Changelog SaseDev Knowledge
@@ -18,6 +18,7 @@ Ce fichier décrit les changements utiles des releases publiées. Les détails d
- introduit les premiers contrats provider-neutral de source, Git et synchronisation sans dépendance à une forge ni à PostgreSQL ; - introduit les premiers contrats provider-neutral de source, Git et synchronisation sans dépendance à une forge ni à PostgreSQL ;
- active les audits Rust PGR de structure et de façade au moment où des API publiques réelles apparaissent ; - active les audits Rust PGR de structure et de façade au moment où des API publiques réelles apparaissent ;
- fixe le frontend Web PGR comme laboratoire de validation des templates statiques et des assets avant adaptation du markup runtime en Maud ; - fixe le frontend Web PGR comme laboratoire de validation des templates statiques et des assets avant adaptation du markup runtime en Maud ;
- matérialise ce laboratoire sous `Web/knowledge-template-lab/` avec npm, TypeScript strict, Vite, Sass, Bootstrap et manifest Vite ;
- retient l’intégration production Actix/Maud via le manifest Vite comme contrat d’asset mapping à réimplémenter proprement, sans copier mécaniquement le corpus historique ; - retient l’intégration production Actix/Maud via le manifest Vite comme contrat d’asset mapping à réimplémenter proprement, sans copier mécaniquement le corpus historique ;
- conserve comme corpus d'inspiration séparé les archives historiques `actix-auth-app` et `amahil-project`, sans importer leurs fonctionnalités inachevées comme exigences ; - conserve comme corpus d'inspiration séparé les archives historiques `actix-auth-app` et `amahil-project`, sans importer leurs fonctionnalités inachevées comme exigences ;
- prépare un workspace Rust et une baseline Web composables sans construire prématurément la plateforme complète. - prépare un workspace Rust et une baseline Web composables sans construire prématurément la plateforme complète.

6
Cargo.lock generated
View File

@@ -4,18 +4,18 @@ version = 4
[[package]] [[package]]
name = "knowledge-domain-lib" name = "knowledge-domain-lib"
version = "0.0.1-alpha.3.fix.3" version = "0.0.1-alpha.4"
[[package]] [[package]]
name = "knowledge-git-api" name = "knowledge-git-api"
version = "0.0.1-alpha.3.fix.3" version = "0.0.1-alpha.4"
dependencies = [ dependencies = [
"knowledge-domain-lib", "knowledge-domain-lib",
] ]
[[package]] [[package]]
name = "knowledge-sync-api" name = "knowledge-sync-api"
version = "0.0.1-alpha.3.fix.3" version = "0.0.1-alpha.4"
dependencies = [ dependencies = [
"knowledge-domain-lib", "knowledge-domain-lib",
] ]

View File

@@ -1,5 +1,5 @@
# file: Cargo.toml # file: Cargo.toml
# version: 5 # version: 6
[workspace] [workspace]
resolver = "3" resolver = "3"
@@ -10,7 +10,7 @@ members = [
] ]
[workspace.package] [workspace.package]
version = "0.0.1-alpha.3.fix.3" version = "0.0.1-alpha.4"
edition = "2024" edition = "2024"
publish = false publish = false
repository = "https://git.sasedev.com/Sasedev/sasedev-knowledge" repository = "https://git.sasedev.com/Sasedev/sasedev-knowledge"

View File

@@ -1,5 +1,5 @@
<!-- file: README.md --> <!-- file: README.md -->
<!-- version: 5 --> <!-- version: 6 -->
# SaseDev Knowledge # SaseDev Knowledge
@@ -35,9 +35,11 @@ Le workspace Rust matérialise désormais trois frontières passives avant toute
## Frontend de référence et rendu Maud ## Frontend de référence et rendu Maud
Knowledge adopte le profil Web PGR comme partie obligatoire de la fondation : Vite, TypeScript, Sass et Bootstrap servent à développer, prévisualiser et valider les assets et templates statiques de référence indépendamment des serveurs Actix. Knowledge adopte le profil Web PGR comme partie obligatoire de la fondation. `alpha.4` matérialise un package partagé de laboratoire sous `Web/knowledge-template-lab/` avec npm, TypeScript strict, Vite, Sass et Bootstrap.
Ces templates statiques sont un **harness de conception/validation**, pas le moteur de rendu de production. Le markup runtime des trois applications sera adapté en Maud. Les assets produits par Vite restent consommables par les pages Maud. En production, l’intégration devra résoudre les sorties hashées depuis le manifest Vite ; en développement, un dev server Vite peut fournir les entrées directement. Les URL, ports, chemins de ressources et API Rust exacts restent différés jusqu’aux tranches Web/serveur. Ce package sert à développer, prévisualiser et valider les assets et templates statiques de référence indépendamment des serveurs Actix. Il n'est pas une quatrième application produit ni une UI de production.
Les templates statiques sont un **harness de conception/validation**, pas le moteur de rendu de production. Le markup runtime des trois applications sera adapté en Maud. Le build Vite active un manifest et possède une entrée stable `src/main.ts` dont les assets hashés seront résolus plus tard par l'intégration Maud. Les URL publiques finales, routes admin/login et API Rust du loader restent différées jusqu'aux tranches serveur.
Le mécanisme observé dans `actix-auth-app` est documenté comme corpus technique à adapter, pas comme code autoritaire à copier. Le mécanisme observé dans `actix-auth-app` est documenté comme corpus technique à adapter, pas comme code autoritaire à copier.

View File

@@ -1,5 +1,5 @@
<!-- file: RULES.md --> <!-- file: RULES.md -->
<!-- version: 5 --> <!-- version: 6 -->
# Règles SaseDev Knowledge # Règles SaseDev Knowledge
@@ -159,6 +159,16 @@ Ces choix ne sont pas présentés comme des règles PGR universelles.
## Contrat frontend statique / Maud ## Contrat frontend statique / Maud
La baseline Web de `0.0.1` est matérialisée sous :
```text
Web/knowledge-template-lab/
```
Le package manager sélectionné est npm. Le fichier `package-lock.json` produit par npm est versionné dès la première restauration de dépendances. `node_modules/`, le cache Vite et les outputs de build restent générés/hors Git.
Le package utilise TypeScript strict, Vite, Sass et Bootstrap. Bootstrap est un choix local Knowledge ; il ne devient pas une règle PGR universelle.
Le skeleton Web PGR `003-WEB_FRONTEND` et sa validation associée sont obligatoires pour `0.0.1`. Le frontend contrôlé doit utiliser la chaîne réellement sélectionnée TypeScript + Vite + Sass + Bootstrap pour valider indépendamment du backend les assets, comportements client et templates statiques de référence. Le skeleton Web PGR `003-WEB_FRONTEND` et sa validation associée sont obligatoires pour `0.0.1`. Le frontend contrôlé doit utiliser la chaîne réellement sélectionnée TypeScript + Vite + Sass + Bootstrap pour valider indépendamment du backend les assets, comportements client et templates statiques de référence.
Les templates statiques servent de support de conception, prévisualisation et validation navigateur. Ils MUST NOT devenir silencieusement une seconde implémentation runtime divergente : le HTML servi en production par les applications Actix est rendu avec Maud, et toute adaptation depuis le template de référence doit préserver explicitement les contrats utiles de structure, classes, attributs et assets. Les templates statiques servent de support de conception, prévisualisation et validation navigateur. Ils MUST NOT devenir silencieusement une seconde implémentation runtime divergente : le HTML servi en production par les applications Actix est rendu avec Maud, et toute adaptation depuis le template de référence doit préserver explicitement les contrats utiles de structure, classes, attributs et assets.

View File

@@ -1 +1 @@
0.0.1-alpha.3.fix.3 0.0.1-alpha.4

View File

@@ -0,0 +1,52 @@
<!-- file: Web/knowledge-template-lab/README.md -->
<!-- version: 1 -->
# Knowledge template lab
Ce package Web est un laboratoire de référence commun aux façades PGR, HOWTOs et snippets.
Il possède :
- les templates HTML statiques utilisés pour concevoir et valider le markup ;
- les interactions TypeScript nécessaires aux références statiques ;
- la chaîne Sass/Bootstrap ;
- le build Vite et son manifest d'assets.
Il ne constitue ni une quatrième application produit, ni le renderer de production.
Le HTML runtime sera adapté en Maud dans les applications Actix Web. Les classes, attributs, composants visuels et clés d'assets validés ici constituent la référence à préserver lors de cette adaptation.
## Toolchain
Le package utilise npm avec `package-lock.json` versionné.
Scripts :
```text
npm run typecheck
npm run dev
npm run build
npm run preview
```
`typecheck` reste indépendant du build Vite.
Le cache et les outputs Vite sont placés hors du dépôt sous `../builds/sasedev-knowledge/`.
## Manifest
Le build de production active le manifest Vite.
L'entrée stable de départ est :
```text
src/main.ts
```
Cette entrée importe également la chaîne Sass. L'intégration Maud prévue en `alpha.5` devra résoudre les fichiers hashés depuis le manifest plutôt que coder leurs noms.
## Routes et administration
Ce laboratoire ne fixe aucune route runtime.
Les chemins `/admin`, `/login`, `/adminapi` ou autres restent hors de son contrat. Ils appartiendront aux applications Actix lorsque le routage et l'autorisation seront matérialisés.

View File

@@ -0,0 +1,61 @@
<!-- file: Web/knowledge-template-lab/index.html -->
<!-- version: 1 -->
<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>SaseDev Knowledge — template lab</title>
</head>
<body>
<main class="container py-5 knowledge-template-shell">
<header class="mb-5">
<p class="text-body-secondary mb-2">SaseDev Knowledge</p>
<h1 class="display-5">Laboratoire de templates statiques</h1>
<p class="lead mb-0">
Référence commune avant adaptation du markup runtime en Maud.
</p>
</header>
<section class="row g-4" aria-label="Familles de contenu de référence">
<div class="col-12 col-md-4">
<article class="card knowledge-family-card">
<div class="card-body">
<h2 class="h4">PGR</h2>
<p class="card-text">Référence normative de gouvernance.</p>
</div>
</article>
</div>
<div class="col-12 col-md-4">
<article class="card knowledge-family-card">
<div class="card-body">
<h2 class="h4">HOWTOs</h2>
<p class="card-text">Guides procéduraux et explicatifs.</p>
</div>
</article>
</div>
<div class="col-12 col-md-4">
<article class="card knowledge-family-card">
<div class="card-body">
<h2 class="h4">Snippets</h2>
<p class="card-text">Fragments courts et contextualisés.</p>
</div>
</article>
</div>
</section>
<section class="mt-5">
<button
type="button"
class="btn btn-primary"
data-bs-toggle="tooltip"
data-bs-title="Validation du JavaScript Bootstrap dans le template lab"
>
Smoke Bootstrap
</button>
</section>
</main>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,21 @@
{
"name": "sasedev-knowledge-template-lab",
"private": true,
"type": "module",
"scripts": {
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.vite.json",
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@popperjs/core": "2.11.8",
"bootstrap": "5.3.8"
},
"devDependencies": {
"@types/bootstrap": "5.2.11",
"sass-embedded": "1.105.0",
"typescript": "7.0.2",
"vite": "8.3.1"
}
}

View File

@@ -0,0 +1,10 @@
// file: Web/knowledge-template-lab/src/main.ts
// version: 1
import { Tooltip } from "bootstrap";
import "./styles/main.scss";
for (const element of document.querySelectorAll<HTMLElement>('[data-bs-toggle="tooltip"]')) {
new Tooltip(element);
}

View File

@@ -0,0 +1,12 @@
// file: Web/knowledge-template-lab/src/styles/main.scss
// version: 1
@use "bootstrap/scss/bootstrap";
.knowledge-template-shell {
max-width: 72rem;
}
.knowledge-family-card {
height: 100%;
}

View File

@@ -0,0 +1,21 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler",
"lib": [
"ES2022",
"DOM",
"DOM.Iterable"
],
"strict": true,
"noEmit": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"verbatimModuleSyntax": true
},
"include": [
"src/**/*.ts"
]
}

View File

@@ -0,0 +1,16 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"noEmit": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"verbatimModuleSyntax": true
},
"include": [
"vite.config.ts"
]
}

View File

@@ -0,0 +1,31 @@
// file: Web/knowledge-template-lab/vite.config.ts
// version: 2
import { defineConfig } from "vite";
export default defineConfig({
root: ".",
base: "/",
cacheDir: "../../../builds/sasedev-knowledge/vite-cache/template-lab",
server: {
host: "127.0.0.1",
port: 5173,
strictPort: true,
},
preview: {
host: "127.0.0.1",
port: 4173,
strictPort: true,
},
build: {
outDir: "../../../builds/sasedev-knowledge/web/template-lab",
emptyOutDir: true,
manifest: true,
rollupOptions: {
input: {
"template/index": "index.html",
"assets/main": "src/main.ts",
},
},
},
});

126
deltas/0.0.1/alpha.4.md Normal file
View File

@@ -0,0 +1,126 @@
<!-- file: deltas/0.0.1/alpha.4.md -->
<!-- version: 1 -->
# Delta 0.0.1-alpha.4 — baseline Web indépendante et template lab
## Base requise
État `0.0.1-alpha.3.fix.3` committé et poussé après application du history :
```text
history/0.0.1/alpha.3.fix.3.md = PASS
```
La version devient :
```text
0.0.1-alpha.4
```
## Objectif
Matérialiser le skeleton Web PGR `003-WEB_FRONTEND` sans démarrer encore Actix/Maud.
La tranche introduit un package unique :
```text
Web/knowledge-template-lab/
```
Ce package est un laboratoire de templates statiques partagé par les trois façades. Il n'est ni une application produit supplémentaire ni un renderer de production.
## Décisions matérialisées
```text
package manager npm
lockfile package-lock.json versionné
TypeScript strict
Vite build/dev/preview + manifest
styles Sass via sass-embedded
framework CSS Bootstrap
Bootstrap runtime @popperjs/core explicite
```
Le package commun est retenu tant qu'aucune divergence réelle ne justifie plusieurs toolchains.
## Versions sélectionnées
La tranche fixe explicitement :
```text
typescript 7.0.2
vite 8.3.1
sass-embedded 1.105.0
bootstrap 5.3.8
@popperjs/core 2.11.8
@types/bootstrap 5.2.11
```
`@types/bootstrap` est justifié par l'import TypeScript du runtime Bootstrap. Aucun `@types/node` n'est ajouté : la configuration Vite ne consomme pas d'API Node typée.
## Build externe
Le cache et l'output sont configurés hors du dépôt :
```text
../builds/sasedev-knowledge/vite-cache/template-lab/
../builds/sasedev-knowledge/web/template-lab/
```
Aucun `dist/`, cache Vite ou `node_modules/` n'est versionné.
## Manifest et future intégration Maud
Le build Vite active :
```text
build.manifest = true
```
L'entrée stable :
```text
src/main.ts
```
importe également `src/styles/main.scss`.
Le manifest doit donc permettre à la future intégration Actix/Maud de résoudre les sorties JavaScript et CSS hashées à partir d'une clé logique stable, sans coder leurs noms de fichiers.
`alpha.4` ne contient aucun loader Rust du manifest. Ce contrat appartient à `alpha.5`.
## Template statique de référence
`index.html` matérialise une référence minimale commune :
- trois familles PGR/HOWTOs/snippets ;
- layout responsive Bootstrap ;
- styles Sass ;
- un exemple d’interaction JavaScript Bootstrap via tooltip.
Aucune URL admin/login ni hostname de production n'est introduit.
## Lockfile npm
Le delta ne préfabrique pas `package-lock.json`.
L'opérateur doit le générer avec npm à partir du manifest réel, puis vérifier une restauration reproductible avec `npm ci`. Le lockfile généré devient partie du staging et du commit de tranche.
## Scope exclu
La tranche n'ajoute pas :
- Actix Web ;
- Maud ;
- les trois crates serveur ;
- PostgreSQL/migrations ;
- adapter Gitea ;
- routes `/admin`, `/login` ou équivalentes ;
- loader Rust du manifest ;
- UI d'administration fonctionnelle.
## Validation attendue
La gate combine les preuves Rust existantes et le skeleton Web réel. Elle est fournie dans `docs/validation/001-VALIDATION_MATRIX.md`.
Ne pas committe `alpha.4` avant production de son history à partir des résultats opérateur.

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/001-PROJECT_PROFILE.md --> <!-- file: docs/architecture/001-PROJECT_PROFILE.md -->
<!-- version: 5 --> <!-- version: 6 -->
# Profil du projet Knowledge # Profil du projet Knowledge
@@ -73,11 +73,11 @@ Les profils Java/Maven/Gradle, Android et autres technologies absentes ne sont p
| Actix Web | `KEEP-LOCAL` | trois launchers serveur distincts ; PGR ne possède pas de profil Actix dédié | | Actix Web | `KEEP-LOCAL` | trois launchers serveur distincts ; PGR ne possède pas de profil Actix dédié |
| Maud | `KEEP-LOCAL` | rendu SSR initial lorsque pertinent | | Maud | `KEEP-LOCAL` | rendu SSR initial lorsque pertinent |
| TypeScript | `ADOPT` | conforme au owner `530` et à l'intention locale | | TypeScript | `ADOPT` | conforme au owner `530` et à l'intention locale |
| Package manager frontend | `DEFER` | choisir dans la tranche Web avant création du manifest/lockfile | | Package manager frontend | `KEEP-LOCAL` | npm sélectionné en `alpha.4` ; `package-lock.json` versionné |
| Vite | `KEEP-LOCAL` + owner `550` adopté | build/preview des templates et assets de référence ; manifest de production consommé par l’intégration Maud | | Vite | `KEEP-LOCAL` + owner `550` adopté | build/preview des templates et assets de référence ; manifest de production consommé par l’intégration Maud |
| Sass | `KEEP-LOCAL` + owner `560` adopté | styles source de la chaîne de validation Web et des assets réellement servis par les pages Maud | | Sass | `KEEP-LOCAL` + owner `560` adopté | styles source de la chaîne de validation Web et des assets réellement servis par les pages Maud |
| Bootstrap | `KEEP-LOCAL` | framework CSS retenu pour les templates de référence et le rendu Maud ; jamais règle PGR universelle | | Bootstrap | `KEEP-LOCAL` | framework CSS retenu pour les templates de référence et le rendu Maud ; jamais règle PGR universelle |
| Racine(s) frontend | `DEFER` | décider en `alpha.4` selon le partage réel entre les trois applications et leurs templates de référence | | Racine(s) frontend | `KEEP-LOCAL` | package partagé `Web/knowledge-template-lab/` pour les références statiques et assets communs |
| Templates statiques Web | `KEEP-LOCAL` | harness de conception/validation ; le markup runtime est adapté et servi par Maud | | Templates statiques Web | `KEEP-LOCAL` | harness de conception/validation ; le markup runtime est adapté et servi par Maud |
| Intégration manifest Vite / Maud | `KEEP-LOCAL` | mapping d’assets hashés requis en production ; API Rust exacte différée jusqu’à la composition serveur | | Intégration manifest Vite / Maud | `KEEP-LOCAL` | mapping d’assets hashés requis en production ; API Rust exacte différée jusqu’à la composition serveur |
| Driver/ORM PostgreSQL | `DEFER` | reprendre à la première implémentation persistante réelle | | Driver/ORM PostgreSQL | `DEFER` | reprendre à la première implémentation persistante réelle |
@@ -92,6 +92,8 @@ Les profils Java/Maven/Gradle, Android et autres technologies absentes ne sont p
Aucun `OVERRIDE` n'est requis à ce stade. Aucun `OVERRIDE` n'est requis à ce stade.
La sélection Web `alpha.4` conserve une seule baseline partagée tant qu'aucune divergence réelle entre les trois façades ne justifie plusieurs packages. Les entrées spécifiques pourront être ajoutées dans ce package avant toute duplication de toolchain.
## Nomenclature de crates candidate ## Nomenclature de crates candidate
Les trois packages exécutables sont des boundaries produit retenus : Les trois packages exécutables sont des boundaries produit retenus :

View File

@@ -1,5 +1,5 @@
<!-- file: docs/architecture/002-KNOWLEDGE_ARCHITECTURE.md --> <!-- file: docs/architecture/002-KNOWLEDGE_ARCHITECTURE.md -->
<!-- version: 5 --> <!-- version: 6 -->
# Architecture de fondation Knowledge # Architecture de fondation Knowledge
@@ -236,7 +236,7 @@ Pour HOWTOs/snippets :
Actix Web et Maud sont des choix de composition/rendu locaux. Vite gère les assets/interactions frontend lorsqu'il est matérialisé. Actix Web et Maud sont des choix de composition/rendu locaux. Vite gère les assets/interactions frontend lorsqu'il est matérialisé.
La stratégie exacte de partage des assets/frontend entre les trois applications reste `DEFER` jusqu'à la tranche Web : un package commun n'est créé que si du code/assets sont réellement communs. La baseline `alpha.4` retient un package de laboratoire partagé `Web/knowledge-template-lab/` pour les assets et templates statiques de référence communs. Cette décision évite trois toolchains identiques ; une divergence réelle pourra introduire ultérieurement des entrées ou packages supplémentaires.
### Pipeline Web de référence et rendu runtime ### Pipeline Web de référence et rendu runtime
@@ -264,7 +264,7 @@ En particulier, Knowledge ne doit pas hériter mécaniquement :
- d’une arborescence d’assets spécifique au corpus ; - d’une arborescence d’assets spécifique au corpus ;
- de dépendances TypeScript `@types/*` non justifiées par les packages réellement consommés. - de dépendances TypeScript `@types/*` non justifiées par les packages réellement consommés.
`alpha.4` possède le frontend indépendant et la production du manifest. `alpha.5` possède l’intégration Actix/Maud et doit décider si le loader d’assets devient une crate/lib partagée entre les trois serveurs. `alpha.4` possède le frontend indépendant et la production du manifest. La clé stable `src/main.ts` constitue l'entrée d'asset commune de départ ; son entrée de manifest doit référencer les sorties JavaScript et CSS générées. `alpha.5` possède l’intégration Actix/Maud et doit décider si le loader d’assets devient une crate/lib partagée entre les trois serveurs.
## 10. Administration ## 10. Administration

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/001-V0_0_1_FOUNDATION_PLAN.md --> <!-- file: docs/plans/001-V0_0_1_FOUNDATION_PLAN.md -->
<!-- version: 7 --> <!-- version: 8 -->
# Plan 0.0.1 — fondation SaseDev Knowledge # Plan 0.0.1 — fondation SaseDev Knowledge
@@ -134,7 +134,7 @@ La gate valide la structure et les audits puis échoue dans `knowledge-domain-li
`alpha.3.fix.2` corrige exclusivement cette dette de documentation publique et rejoue la gate Rust complète sans modifier les contrats domaine/Git/synchronisation ni le cadrage Web/Maud. Sa gate opérateur reste toutefois **FAIL** malgré le passage de `cargo check`, Clippy strict et des trois suites ciblées : `git diff --check` détecte une ligne vide supplémentaire en fin de `docs/validation/001-VALIDATION_MATRIX.md`. `alpha.3.fix.2` corrige exclusivement cette dette de documentation publique et rejoue la gate Rust complète sans modifier les contrats domaine/Git/synchronisation ni le cadrage Web/Maud. Sa gate opérateur reste toutefois **FAIL** malgré le passage de `cargo check`, Clippy strict et des trois suites ciblées : `git diff --check` détecte une ligne vide supplémentaire en fin de `docs/validation/001-VALIDATION_MATRIX.md`.
`alpha.3.fix.3` corrige exclusivement cette anomalie documentaire de fin de fichier, conserve les corrections Rust déjà validées et rejoue la gate complète avant clôture d'`alpha.3`. `alpha.3.fix.3` corrige exclusivement cette anomalie documentaire de fin de fichier, conserve les corrections Rust déjà validées et rejoue la gate complète avant clôture d'`alpha.3`. Sa gate opérateur est **PASS**.
Le scope fonctionnel de `alpha.3` reste : introduire uniquement les premiers contrats/types nécessaires aux frontières `GitRepository`, source/famille de contenu et synchronisation, avec tests ciblés. Le modèle doit supporter au moins les trois sources initiales sans coder une limite à trois. Le scope fonctionnel de `alpha.3` reste : introduire uniquement les premiers contrats/types nécessaires aux frontières `GitRepository`, source/famille de contenu et synchronisation, avec tests ciblés. Le modèle doit supporter au moins les trois sources initiales sans coder une limite à trois.
@@ -146,13 +146,25 @@ Ne pas ajouter d'API Gitea ni de persistance PostgreSQL par anticipation.
### alpha.4 — baseline Web indépendante et templates de référence ### alpha.4 — baseline Web indépendante et templates de référence
Instancier obligatoirement le skeleton `003-WEB_FRONTEND` : choisir package manager et lockfile, TypeScript strict, Vite, Sass et Bootstrap, avec typecheck/build indépendants du backend. Instancier obligatoirement le skeleton `003-WEB_FRONTEND` avec les décisions désormais résolues :
Le frontend sert d’abord de laboratoire de templates statiques : développer et valider indépendamment le markup de référence, les comportements TypeScript, le responsive Bootstrap et les styles Sass avant adaptation du markup runtime en Maud. Les pages statiques ne deviennent pas une seconde UI de production. ```text
package Web/knowledge-template-lab/
package manager npm
lockfile package-lock.json versionné
TypeScript strict
Vite build + dev server + manifest
styles Sass
framework CSS Bootstrap
```
Activer le manifest de build Vite et définir des clés d’entrée stables pour les assets réellement destinés aux pages Maud. Les outputs restent générés/hors Git conformément à PGR. Le package reste partagé entre les trois façades tant qu'aucune divergence réelle ne justifie une séparation. Il sert d’abord de laboratoire de templates statiques : développer et valider indépendamment le markup de référence, les comportements TypeScript, le responsive Bootstrap et les styles Sass avant adaptation du markup runtime en Maud. Les pages statiques ne deviennent pas une seconde UI de production.
Décider à cette tranche si les trois applications partagent un package d'assets/frontend ou possèdent des entrées séparées. Ne pas dupliquer par défaut, ne pas imposer non plus un frontend unique sans preuve de réutilisation. Définir également une preuve minimale contre la dérive entre templates statiques de référence et future adaptation Maud. Le build Vite active le manifest et matérialise une entrée stable `src/main.ts`. Cette entrée importe la chaîne Sass afin que le manifest relie l'entrée logique aux sorties JavaScript/CSS hashées consommables plus tard par Maud.
Les outputs et caches restent sous `../builds/sasedev-knowledge/` et hors Git. La gate doit prouver une restauration reproductible depuis `package-lock.json`, un typecheck séparé, le build Vite, un manifest parsable et la présence des assets attendus.
La preuve contre la dérive statique/Maud reste volontairement limitée à cette tranche : le package de référence documente les invariants de classes/attributs/assets, tandis que la comparaison runtime réelle n'existe qu'après matérialisation Maud en `alpha.5`.
### alpha.5 — composition Actix/Maud et manifest Vite ### alpha.5 — composition Actix/Maud et manifest Vite

View File

@@ -1,5 +1,5 @@
<!-- file: docs/validation/001-VALIDATION_MATRIX.md --> <!-- file: docs/validation/001-VALIDATION_MATRIX.md -->
<!-- version: 7 --> <!-- version: 8 -->
# Matrice de validation Knowledge # Matrice de validation Knowledge
@@ -231,3 +231,27 @@ Le troisième fix doit prouver :
- aucune modification fonctionnelle des contrats domaine/Git/synchronisation ; - aucune modification fonctionnelle des contrats domaine/Git/synchronisation ;
- aucun frontend, serveur Actix, schéma PostgreSQL ou adapter de forge ajouté ; - aucun frontend, serveur Actix, schéma PostgreSQL ou adapter de forge ajouté ;
- staging Git propre à la tranche. - staging Git propre à la tranche.
## Gate de `0.0.1-alpha.4`
La tranche Web doit prouver :
- `VERSION = 0.0.1-alpha.4` et version workspace Cargo identique ;
- history `alpha.3.fix.3` `PASS` committé avant application d'`alpha.4` ;
- package unique `Web/knowledge-template-lab/` et absence des trois launchers Actix encore différés ;
- npm sélectionné comme package manager ;
- `package-lock.json` généré par npm, versionné et non ignoré ;
- dépendances réelles et versions explicites pour TypeScript, Vite, Sass, Bootstrap, Popper et types nécessaires ;
- `npm ci` `PASS` depuis le lockfile ;
- `npm run typecheck` indépendant `PASS` ;
- `npm run build` `PASS` ;
- cache Vite et `build.outDir` hors dépôt sous `../builds/sasedev-knowledge/` ;
- manifest Vite de production parsable ;
- entrée stable `src/main.ts` présente dans le manifest et associée à un asset JavaScript ;
- au moins un asset CSS associé à l'entrée ou à son graphe de build ;
- page statique de référence incluse dans le build Vite sans route Actix/Maud ;
- aucun chemin `/admin`, `/login` ou hostname de production figé dans le package de laboratoire ;
- aucune crate serveur, dépendance Actix/Maud, migration PostgreSQL ou adapter de forge ajouté ;
- gates Rust existantes toujours propres après le bump de version ;
- `git diff --cached --check` propre et outputs générés absents du staging.

94
history/0.0.1/alpha.4.md Normal file
View File

@@ -0,0 +1,94 @@
<!-- file: history/0.0.1/alpha.4.md -->
<!-- version: 1 -->
# History 0.0.1-alpha.4 — baseline Web indépendante et template lab
## Statut
FAIL
La gate opérateur de `0.0.1-alpha.4` exécutée le `2026-09-28` valide la majorité de la tranche Web, mais deux défauts du delta empêchent sa clôture : le typecheck TypeScript ne connaît pas l'import Sass et `git diff --check` détecte une ligne vide supplémentaire en fin de matrice de validation.
## Baseline opérateur
`alpha.3.fix.3` `PASS` a été historisé, committé et poussé avant application d'`alpha.4` :
```text
history/0.0.1/alpha.3.fix.3.md = PASS
commit 91e596e
message 0.0.1-alpha.3.fix.3
branch master
push origin/master PASS
status clean après push
```
Le push observé a avancé `origin/master` de `3802476` à `91e596e`.
## Structure et Rust
La gate structurelle passe :
```text
Knowledge 0.0.1-alpha.4 structural audit: clean
```
Les six audits Rust PGR, `cargo check`, Clippy strict et les trois suites ciblées passent.
Résultats tests :
```text
knowledge-domain-lib : 3 passed; 0 failed
knowledge-git-api : 1 passed; 0 failed
knowledge-sync-api : 1 passed; 0 failed
```
## Environnement Web observé
```text
node v24.21.0
npm 11.19.0
```
`npm install` puis `npm ci` passent et npm annonce `0 vulnerabilities`.
npm signale toutefois `@parcel/watcher@2.6.0` comme package avec script d'installation non encore couvert par `allowScripts`. Cette observation n'est pas la cause du `FAIL`.
## Défaut TypeScript
`npm run typecheck` échoue avec :
```text
TS2882: Cannot find module or type declarations for side-effect import of './styles/main.scss'.
```
Le package n'a pas encore déclaré les types client Vite qui fournissent les shims d'assets.
## Build Vite
`npm run build` passe avec Vite `8.3.1`.
Le build produit le manifest, `index.html`, un CSS hashé et les bundles JavaScript.
L'audit manifest passe :
```text
Knowledge 0.0.1-alpha.4 Vite manifest audit: clean
```
avec une entrée `src/main.ts`, un asset JavaScript et un asset CSS.
Les warnings Sass proviennent des sources Bootstrap et n'empêchent pas le build.
## Défaut d'hygiène Git
`git diff --check` signale avant et après staging :
```text
docs/validation/001-VALIDATION_MATRIX.md:257: new blank line at EOF.
```
## Décision
`0.0.1-alpha.4` est `FAIL`.
La transition autorisée est `0.0.1-alpha.4.fix.1`, limitée aux types client Vite et à l'hygiène EOF de la matrice.