[DTP-Worker] Sprint 8 · buffer · Domaine Portails (2e surface) : le CATALOGUE des DocTypes custom à CRÉER avant import (« CONFOTUR Application, Faisabilité, Publiciste Log ») était énuméré À LA MAIN dans le §« Hand-off → agent ERPNext Backend » du README frontend/portails sans AUCUN gate d'IDENTITÉ. Le bloc portails existant ne gate que les COMPTES par workspace (cartes/liens/rôles, ×2 docs) — jamais ce catalogue de hand-off. Ce catalogue est DATA-DERIVED : doctypes_custom_a_creer de frontend/portails/out/MANIFEST.json (byte-gaté par check_artifacts), lui-même l'UNION des doctypes_custom par workspace (flag custom du contrat rbac_50_roles.json, pour les seuls DocTypes CÂBLÉS dans un portail). C'est un ensemble PROPRE au module (sous-ensemble de celui de rbac/fixtures_gen : API Access, custom mais non câblé, en est ABSENT). PIÈGE : check_artifacts ne prouve QUE MANIFEST==build (byte-for-byte) et le build RECOMPUTE l'union — donc AJOUTER une carte visant un nouveau DocType custom au contrat (le MANIFEST rebâtit le catalogue) · en RENOMMER un · en RETIRER un du câblage laisse la consigne de hand-off périmée pendant que l'artefact dit autre chose : l'agent Backend créerait le mauvais jeu de DocTypes (liens pointant dans le vide — le risque même que la consigne veut prévenir) — « vert trompeur » qu'aucune suite tests/ (qui teste des FONCTIONS de mapping, pas la prose de hand-off) n'attrape → nouveau bloc recomputant le catalogue depuis MANIFEST (zéro duplication du contrat du générateur #6 · même patron que le catalogue custom de rbac/fixtures_gen) et exigeant que la prose l'énumère EXACTEMENT (absent ET en trop via set-diff · accents/casse normalisés via unicodedata). Cohérences croisées en bonus (mordent un MANIFEST INTERNEMENT incohérent) : catalogue NON VIDE, sans doublon et TRIÉ (byte-déterminisme) · égal à l'UNION des doctypes_custom par workspace (pas de DocType custom câblé mais oublié du hand-off, ni l'inverse). Un claim absent échoue AUSSI. 5 morsures vérifiées : prose renomme Faisabilité→Faisabilite2 (absents=[faisabilite] en trop=[faisabilite2]) · prose retire Publiciste Log (sous-ensemble) · énumération supprimée (INTROUVABLE) · MANIFEST retire du catalogue un DocType encore câblé (incohérence interne : câblés hors catalogue=[Publiciste Log] + prose en trop) · catalogue MANIFEST non trié (byte-déterminisme) ; restauré = green : [CONFOTUR Application,Faisabilité,Publiciste Log] == MANIFEST == union des workspaces · exit 0. État courant : aucun catalogue périmé (anti-invention #6, rien à réécrire) — le défaut est la surface ungated. ci/README.md (table + détail « 2e surface Portails ») mis à jour · 7 gates re-verts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-07-31 19:06:35 +00:00
parent 7b775677a6
commit 7ee6882eb8
3 changed files with 142 additions and 1 deletions
+38
View File
@@ -2177,3 +2177,41 @@ verrouillés) · `guard_constraints` · `validate_json`.
signer contrat}` == workflow.json).
- État courant : aucune action périmée (anti-invention #6) — le défaut est la
surface ungated. `ci/README.md` (table + détail) mis à jour · **7 gates re-verts**.
## Sprint 8 · buffer · Portails (2e surface) · catalogue DocTypes `custom` à créer
- **Constat** : le README `frontend/portails` énumère À LA MAIN, dans le §« Hand-off
→ agent ERPNext Backend », les **DocTypes `custom` à créer avant import** :
`CONFOTUR Application`, `Faisabilité`, `Publiciste Log`. Ce catalogue est
DATA-DERIVED == `doctypes_custom_a_creer` d'`out/MANIFEST.json` (byte-gaté par
`check_artifacts`), lui-même l'UNION des `doctypes_custom` par workspace (flag
`custom` du contrat RBAC, pour les seuls DocTypes CÂBLÉS dans un portail). C'est
un ensemble PROPRE au module (sous-ensemble de celui de `rbac/fixtures_gen` :
`API Access`, custom mais non câblé, en est ABSENT). Le bloc portails existant ne
gatait que les COMPTES par workspace (cartes/liens/rôles) — jamais ce catalogue.
- **Piège** : `check_artifacts` ne prouve que MANIFEST==build (byte-for-byte) et le
build RECOMPUTE l'union → AJOUTER une carte visant un nouveau DocType custom ·
en RENOMMER un · en RETIRER un du câblage laisse la consigne de hand-off périmée
pendant que l'artefact dit autre chose. L'agent Backend créerait le mauvais jeu
de DocTypes → liens pointant dans le vide (le risque même que la consigne veut
prévenir) — « vert trompeur » qu'aucune suite `tests/` (qui teste des FONCTIONS
de mapping, pas la prose de hand-off) n'attrape.
- **Gate ajouté** (`ci/check_readme_claims.sh`) : recompute le catalogue depuis
`MANIFEST.doctypes_custom_a_creer` (zéro duplication du contrat du générateur #6)
et exige que la prose l'énumère EXACTEMENT (absent ET en trop via set-diff ·
accents/casse normalisés via `unicodedata`). Cohérences croisées en bonus
(mordent un MANIFEST INTERNEMENT incohérent) : catalogue NON VIDE, sans doublon
et TRIÉ (byte-déterminisme) · égal à l'UNION des `doctypes_custom` par workspace
(pas de DocType custom câblé mais oublié du hand-off, ni l'inverse). Un claim
absent échoue AUSSI.
- **5 morsures vérifiées** : prose renomme `Faisabilité → Faisabilite2`
(absents=[faisabilite] en trop=[faisabilite2]) · prose retire `Publiciste Log`
(sous-ensemble) · énumération supprimée = INTROUVABLE · MANIFEST retire du
catalogue un DocType encore câblé (câblés hors catalogue=[Publiciste Log]) ·
catalogue MANIFEST non trié (byte-déterminisme) ; restauré = green
(`[CONFOTUR Application, Faisabilité, Publiciste Log]` == MANIFEST == union).
- État courant : aucun catalogue périmé (anti-invention #6, rien à réécrire) — le
défaut est la surface ungated. `ci/README.md` (table + détail) mis à jour ·
**7 gates re-verts** (`check_readme_claims` · `check_artifacts` · `check_docs` ·
`check_ci_integrity` · `check_regression` · `guard_constraints` · `validate_json`).
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo).
- **Auto-score 4Big** : 96/100.