Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 128 additions & 0 deletions docs/dstny-document-intake/ACCEPTANCE_TESTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Tests d'acceptation - Documents Dstny

## Test 1 - Navigation

Etant donne Hermes Workspace ouvert,
quand Xavier regarde la section Knowledge,
alors il voit une entree `Documents Dstny`.

Attendu:

- l'entree ne remplace pas `Fichiers`;
- elle ouvre `/documents-dstny`;
- la page charge sans erreur.

## Test 2 - Upload PDF

Etant donne un PDF local,
quand Xavier l'upload dans `Documents Dstny`,
alors le document est stocke hors git et apparait dans la liste.

Attendu:

- record cree;
- checksum calcule;
- statut `uploaded`;
- chemin sous `$HERMES_HOME/documents/dstny-inbox`;
- pas de fichier cree dans le repo.

## Test 3 - Metadata obligatoire

Etant donne un fichier selectionne,
quand Xavier tente de l'enregistrer sans collection ou titre,
alors l'UI bloque l'action.

Champs obligatoires:

- titre;
- collection;
- canal;
- type document;
- statut;
- confiance.

## Test 4 - Ingestion RAG

Etant donne un document upload avec metadata complete,
quand Xavier clique `Indexer dans le RAG`,
alors Workspace appelle le wrapper RAG et met a jour le registre.

Attendu:

- statut passe a `ingesting`, puis `indexed`;
- `ragDocId` renseigne si le wrapper le retourne;
- tags metier transmis;
- erreur visible si le wrapper echoue.

## Test 5 - Prompt Synthese Flash

Etant donne un document indexe,
quand Xavier clique `Preparer Synthese Flash`,
alors Workspace affiche un prompt pret a copier.

Attendu:

- le prompt contient titre, collection, produit, canal;
- il demande les sources;
- il demande fait/hypothese/interpretation/recommandation;
- il utilise le format Synthese Flash Dstny.

## Test 6 - Fichier interdit

Etant donne un fichier `.exe`,
quand Xavier tente de l'uploader,
alors l'API refuse.

Attendu:

- HTTP 400;
- message clair;
- aucun fichier stocke.

## Test 7 - Auth

Etant donne une requete non authentifiee,
quand elle appelle une route `/api/dstny-documents/*`,
alors l'API retourne 401.

## Test 8 - Archive sans suppression

Etant donne un document indexe,
quand Xavier le marque `archive`,
alors il disparait des vues actives mais reste dans le registre.

Attendu:

- pas de suppression physique lot 1;
- statut visible dans filtre archive;
- source toujours traçable.

## Test 9 - RAG indisponible

Etant donne le wrapper RAG indisponible,
quand Xavier clique `Indexer`,
alors Workspace garde le document et affiche une erreur.

Attendu:

- statut `error`;
- `lastError` renseigne;
- aucune perte metadata;
- bouton reessayer disponible.

## Test 10 - Smoke production

Sur le VPS:

```bash
systemctl is-active hermes.service hermes-workspace.service
corepack pnpm test <tests cibles>
corepack pnpm build
```

Attendu:

- services actifs;
- tests OK;
- build OK;
- pas d'erreur recente liee a `dstny-documents`.
195 changes: 195 additions & 0 deletions docs/dstny-document-intake/IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
# Plan d'implementation - Documents Dstny

## Principes

- Livraison par petits lots.
- Aucun changement destructif.
- Pas de worker autonome.
- Pas d'action externe.
- Tests a chaque lot.
- Rollback simple.

## Lot 0 - Cadrage

Livrables:

- PRD;
- design technique;
- plan d'implementation;
- tests d'acceptation.

Critere de sortie:

- PR draft ouverte;
- scope valide.

## Lot 1 - Backend registre et modeles

Fichiers probables:

- `src/server/dstny-documents.ts`
- `src/server/dstny-documents.test.ts`

Taches:

1. definir les types;
2. resoudre les chemins depuis `HERMES_HOME`;
3. creer le registre JSONL append-only;
4. ajouter lecture collapse latest-wins;
5. ajouter filtres simples.

Tests:

- creation record;
- update record;
- collapse par id;
- filtres collection/product/status/q.

## Lot 2 - API list/update

Fichiers probables:

- `src/routes/api/dstny-documents/list.ts`
- `src/routes/api/dstny-documents/update.ts`

Taches:

1. route list avec auth;
2. route update avec auth;
3. validation Zod;
4. erreurs JSON propres.

Tests:

- 401 sans auth;
- list OK;
- update metadata OK;
- path immutable.

## Lot 3 - Upload fichier

Fichiers probables:

- `src/routes/api/dstny-documents/upload.ts`
- tests API upload.

Taches:

1. multipart upload;
2. allowlist extensions;
3. taille max;
4. checksum SHA-256;
5. stockage sous `$HERMES_HOME/documents/dstny-inbox/<year>/<collection>/`;
6. record `uploaded`.

Tests:

- PDF valide;
- extension interdite;
- path traversal impossible;
- collision nom fichier.

## Lot 4 - Ingestion RAG

Fichiers probables:

- `src/routes/api/dstny-documents/ingest.ts`
- helper commande RAG.

Taches:

1. appeler `/home/node/.hermes/bin/dstny-rag-ingest-file`;
2. utiliser `execFile`, jamais shell;
3. parser JSON de sortie;
4. stocker `ragDocId`;
5. gerer erreurs/timeout.

Tests:

- wrapper mock OK;
- wrapper mock erreur;
- metadata transformees en tags;
- statut `indexed` ou `error`.

## Lot 5 - UI Documents Dstny

Fichiers probables:

- `src/routes/documents-dstny.tsx`
- `src/screens/documents-dstny/documents-dstny-screen.tsx`
- composants enfants.

Taches:

1. page route;
2. table documents;
3. formulaire metadata;
4. upload;
5. action ingest;
6. action prompt.

Tests:

- rendu page;
- champs obligatoires;
- upload mock;
- filtre;
- prompt visible.

## Lot 6 - Navigation

Taches:

1. ajouter entree `Documents Dstny` dans Knowledge;
2. icone coherente;
3. libelle court;
4. aucun retrait de `Fichiers`.

Test:

- nav contient `Documents Dstny`.

## Lot 7 - Prompt analyse

Taches:

1. endpoint prompt;
2. template Synthese Flash;
3. bouton copier;
4. option ouvrir chat si API existante propre.

Lot 1 UI: copie seulement.
Lot suivant: ouverture session chat.

## Lot 8 - Hardening

Taches:

1. logs propres;
2. limites taille;
3. messages erreurs;
4. documentation utilisateur;
5. smoke test production.

## Definition of Done globale

- `pnpm test` cible OK;
- `pnpm build` OK;
- page accessible;
- upload PDF OK;
- ingestion RAG OK sur VPS;
- document retrouve dans liste;
- prompt Synthese Flash genere;
- aucun secret affiche;
- aucun fichier stocke dans git;
- rollback documente.

## Branching recommande

```text
codex/dstny-document-intake-prd
codex/dstny-document-intake-backend
codex/dstny-document-intake-ui
```

La PR de cadrage ne doit contenir que `docs/dstny-document-intake/*`.
Loading