docs(parity): audit de réanalyse appliqué — 16 P0 + 14 P1, échelle 11 niveaux, univers 159 surfaces (plan v2026-07-20.1) - #15
Conversation
…stres (19 P0, niveaux nommés, corrections sourcées) - PLAN_PARITE_REPLIT.md = LE plan canonique (structure imposée §0-§12), supersède le v5 hors-repo ; correction par remplacement, jamais par variante. - Corrections factuelles hashées : import 12 entrées dont Previous Agent export (RPL-24) ; Cloud Run multi-région reclassé GCP-11 (service health, GA 29/06/2026 per release notes ; divergence lecture owner consignée ; fallback+exit exigés quoi qu'il en soit) ; AR attachments Preview (GCP-12) ; « cinq familles » de collecte. Snapshots GCP assainis (clés web publiques AIza caviardées avant hash — secret-scan). - P0_REGISTRY 4→19 : les 15 P0 de l'audit v3 tracés individuellement ; ensemble EXACT vérifié en CI ; statut déclaré = plancher du rollup. - targetDate UNKNOWN interdit (schémas v2 + validateur) ; UNKNOWN_REGISTRY 11→19 (gates bêta, ACCEPTED_RISK justifiés). - OWNER_DECISION D1-D6 + fichiers de suivi versionnés + Gallery option B, citations verbatim. - approvalReady SUPPRIMÉ (faux positif) → 8 niveaux nommés + approved.level (contigu) ; preuves hashées (evidenceSha256) ; triage SLA bloquant ; uiGaps (preuve API ≠ preuve UI). État mesuré : approved.level=architectureContracted. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…t-scan) + auto-assainissement du collecteur - Triage un à un : jeton client public Datadog (pricing ×2) + _key interne CMS (gallery-detail) — faux positifs, aucun secret réel, pas de rotation. - Valeurs caviardées, sha256 recalculés (SOURCE_REGISTRY + manifest 16/07, entrées annotées « snapshot assaini »). - collect-baseline.mjs caviarde désormais ces motifs publics AVANT écriture/hash (évite la réintroduction par le cron quotidien) ; aucun motif de vrai secret n'est masqué. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…V ×8, BOLT_DEBT ×26, PROD_READINESS ×48, 6 surfaces déclarées, DEC/UNK billing legacy, ACTIONS_AVI ; garde CI EXPECTED_*_IDS (preuve négative exit 1) Tout est NON_FAIT/OPEN par défaut — traçage honnête, zéro statut inventé. FAIT_PROUVE exige un evidenceId sur disque (validateur). Un ID qui disparaît casse le build (même mécanisme que les 19 P0). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… certification calculable Chaque point des 29 anciens fichiers = 1 ligne du plan (ID, mots simples, NON FAIT par défaut, owner, date ISO, suivi). check-plan-completeness.mjs verrouille compte exact 336 + SHA-256 des IDs + références résolues — retirer UNE ligne casse le build (preuve négative : OUT-QA-17 → exit 1). 332 NON FAIT, 1 DÉJÀ FAIT (preuve BUG-CRON-001), 3 PÉRIMÉS (preuve deploy-main.yml). Copie livrée : PLAN_PARITE_REPLIT_LIVRAISON.md (racine). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-07-20.1 - 2 erreurs factuelles corrigées, VÉRIFIÉES sur snapshots hashés : WIF 3 chemins (GCP-13, citation exacte GKE) ; Auth Clerk (RPL-25/26 : migration custom→Clerk documentée, Replit Auth→Clerk coming soon, MFA/orgs = extension E-CODE). - §3.0 Project→Artifacts (7/1 = entitlements, publication GROUPED) + DEPLOYMENT_TYPES_CONTRACT.md (4 types). - Univers exact : 159 surfaces P001-P159 + 56 services S01-S56 importés (0/159 évalué — honnête, parityBaselineReady FAIL). - Cloud Run multi-tenant (GCP-14 doc 17/07 + GCP-15 quotas 1000) : ReputationTier, BillingAccountBinding, AbuseEventPolicy, pool précréé. - Backlog : 336 constats → LEGACY_FINDING_REGISTRY (provenance) + 99 work items canoniques (WORK_ITEM_REGISTRY) ; compteurs source unique JSON. - P0 19→35, P1 8→40 (P1-V3 individuels), ensembles EXACTS + preuve négative ; Gallery option B → OPEN/CAPTURE_INCOMPLETE ; owners = rôles. - Échelle 11 niveaux ; vertical scindé backend/userJourney (uiGaps bloquant) ; contractsPresent≠contractsValidated ; overallStatus=NOT_APPROVED + highestPassedLevel=documentCanonicalized ; unanchoredClaims=18 bloquant ; DOCUMENT_MANIFEST généré ; TRACEABILITY_MATRIX amorcée. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tatusCommit) + manifeste régénéré Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4bae759bb2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // baseline/ (snapshots volumineux) est couvert par ses propres manifests + SOURCE_REGISTRY. | ||
| if (relative(parityRoot, p) === 'baseline') { | ||
| continue; |
There was a problem hiding this comment.
Include baseline evidence in the integrity manifest
Do not skip the entire baseline/ tree here: the claimed alternative coverage is not an integrity check. validate-registries.mjs only checks that snapshot hashes have the right shape and that payloads exist, while SOURCE_REGISTRY hashes are likewise never recomputed. Consequently, modifying any archived source or snapshot without updating its declared hash still passes both manifest drift and registry validation, allowing the audit evidence to be silently corrupted.
Useful? React with 👍 / 👎.
| const universe = surfaces.surfaceUniverse ?? []; | ||
| const presentUniverseIds = new Set(universe.map((s) => s.surfaceId)); | ||
| const missingUniverseIds = EXPECTED_SURFACE_UNIVERSE_IDS.filter((id) => !presentUniverseIds.has(id)); | ||
| const serviceUniverse = surfaces.serviceUniverse ?? []; | ||
| const presentServiceIds2 = new Set(serviceUniverse.map((s) => s.serviceId)); | ||
| const missingServiceUniverseIds = EXPECTED_SERVICE_UNIVERSE_IDS.filter((id) => !presentServiceIds2.has(id)); |
There was a problem hiding this comment.
Reject extra and duplicate surface-universe IDs
Enforce equality with the expected universe rather than checking only for missing IDs. If an unexpected entry such as P160, or a duplicate of an existing ID, is appended with a recognized availability, missingUniverseIds remains empty and registryUniverseReady can still pass even though the declared exact 159-surface universe is invalid; the generated status will merely report present: 160. Detect extras and duplicates for both surface and service universes.
Useful? React with 👍 / 👎.
| "sha256": "74fe1b5a805f0cb1df1026c9a1491a64f005198b0ee1b649fd523add0b6c130a", | ||
| "bytes": 284399, |
There was a problem hiding this comment.
Update the byte count after sanitizing the pricing snapshot
Update bytes alongside this newly computed sanitized hash. At this commit, pricing.rendered.html is 284372 bytes after replacing the Datadog token, but the manifest still declares 284399, so consumers of the baseline metadata receive an internally inconsistent snapshot. The validator currently does not compare this field with the payload and therefore does not catch the mismatch.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
This PR updates the parity documentation “source of truth” and strengthens the parity tooling so the canonical plan + registries are reproducible, completeness-checked, and CI-enforced (audit de réanalyse / “LIVRAISON 2”).
Changes:
- Harden parity validation (
validate-registries) with stricter completeness/anti-drift checks (expected ID sets, backlog completeness, computed document manifest). - Expand computed approval status to an 11-level model (replacing/forbidding global booleans) and add supporting registries/contracts (coverage gaps, production readiness, deployment types, owner roles, traceability).
- Sanitize captured baseline snapshots to avoid CI secret-scan false positives and refresh the public baseline/source registry accordingly.
Reviewed changes
Copilot reviewed 33 out of 41 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/parity/validate-registries.mjs | Adds stricter CI validation: expected ID-set completeness, targetDate rules, coverage registries checks, backlog completeness check, computed DOCUMENT_MANIFEST drift-check. |
| scripts/parity/generate-document-manifest.mjs | New generator for DOCUMENT_MANIFEST.yaml hashing docs/parity companion files for drift detection. |
| scripts/parity/generate-approval-status.mjs | Extends approval status computation to 11 named levels; adds expected ID sets; hashes evidence paths; tracks uiGaps/unanchoredClaims/backlog counts. |
| scripts/parity/collect-baseline.mjs | Sanitizes snapshots before writing/hashing to prevent secret-scan false positives. |
| scripts/parity/check-plan-completeness.mjs | New deterministic completeness checker for legacy backlog registry + canonical work-item mapping and reference resolution. |
| docs/parity/UNKNOWN_REGISTRY.yaml | Updates unknowns to forbid targetDate UNKNOWN, adds ACCEPTED_RISK structure, expands/refreshes unknown items. |
| docs/parity/TRACEABILITY_MATRIX.yaml | Adds initial seeded traceability links claim → surface/service/contract/work/evidence. |
| docs/parity/SOURCE_REGISTRY.yaml | Updates/extends baseline sources and hashes, including sanitized snapshot notes and new GCP/Replit auth sources. |
| docs/parity/schemas/unknown-registry.schema.json | Bumps schema version; enforces ISO targetDate and ACCEPTED_RISK requirements. |
| docs/parity/schemas/p0-registry.schema.json | Bumps schema version; requires targetDate ISO and expands priority range. |
| docs/parity/schemas/approval-status.schema.json | Updates schema for 11-level approval model; forbids legacy keys like approvalReady/approved. |
| docs/parity/PUBLIC_BASELINE_REPLIT_2026.yaml | Adds/updates verified claims (import sources count, GCP WIF, Cloud Run multi-tenant, Clerk auth/migration). |
| docs/parity/PRODUCTION_READINESS_REGISTRY.yaml | New production readiness registry (PR-*), with strict expected-ID completeness enforced by CI. |
| docs/parity/PARITY_STATUS.md | Updates repoCommit and documents the new 11-level status model + backlog/registry certification positioning. |
| docs/parity/OWNER_ROLES.yaml | New mapping from role → person to keep registries role-based and people versioned. |
| docs/parity/DOCUMENT_MANIFEST.yaml | New generated manifest listing per-file sha256/schemaVersion/repoCommit/reviewer for docs/parity companions. |
| docs/parity/DEPLOYMENT_TYPES_CONTRACT.md | New contract defining the four deployment types and their invariants/proof requirements. |
| docs/parity/DECISION_REGISTRY.yaml | Updates owners, target dates, and adds/expands OWNER_DECISION entries and new billing decision framing. |
| docs/parity/COVERAGE_GAP_AUDIT_2026-07-17.md | New coverage gap audit document (inputs, counts, missing families, and rationale). |
| docs/parity/CHANGELOG_AUDIT.md | Appends audit changelog entries documenting the replacement-based canonicalization and new enforcement rules. |
| docs/parity/BOLT_DEBT_REGISTRY.yaml | New bolt debt registry (BD-*) with strict expected-ID completeness enforced by CI. |
| docs/parity/baseline/sources/2026-07-20-replit-clerk-auth.md | Adds hashed snapshot of Replit Clerk Auth documentation. |
| docs/parity/baseline/sources/2026-07-20-replit-clerk-auth-migration.md | Adds hashed snapshot of Replit Clerk Auth migration documentation. |
| docs/parity/baseline/sources/2026-07-17-import-from-providers.md | Adds hashed snapshot of import providers doc (12 entries, including Previous Agent export + Empty). |
| docs/parity/baseline/snapshots/2026-07-16/pricing.rendered.html | Sanitizes embedded Datadog browser public token to avoid secret-scan false positives. |
| docs/parity/baseline/snapshots/2026-07-16/pricing.html | Sanitizes embedded Datadog browser public token to avoid secret-scan false positives. |
| docs/parity/baseline/snapshots/2026-07-16/manifest.json | Updates snapshot sha256 after sanitization. |
| docs/parity/ACTIONS_AVI.md | Adds consolidated owner-only action list and traces items back to registries/decisions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| function sanitizeSnapshot(buffer) { | ||
| const text = buffer.toString('utf8'); | ||
| const sanitized = text | ||
| .replace(/AIza[0-9A-Za-z_-]{35}/g, 'AIza_REDACTED_PUBLIC_WEB_KEY_x0000000') | ||
| .replace(/dd-api-key=pub[a-f0-9]{32}/g, 'dd-api-key=REDACTED'); | ||
|
|
||
| return sanitized === text ? buffer : Buffer.from(sanitized, 'utf8'); | ||
| } |
| for (const e of backlogErrors) { | ||
| fail('PLAN_PARITE_REPLIT.md (backlog)', e); | ||
| } |
| * Le plan canonique porte une section « Backlog complet » avec UNE ligne par | ||
| * point (ID, description, statut, owner, date, suivi). Ce script : | ||
| * 1. extrait chaque ligne du backlog du plan ; | ||
| * 2. vérifie le COMPTE EXACT et le SHA-256 de la liste triée des IDs contre | ||
| * les constantes ci-dessous — retirer/renommer UN SEUL point casse le | ||
| * build (même philosophie que EXPECTED_P0_IDS) ; | ||
| * 3. vérifie le schéma de chaque ligne : statut ∈ {NON FAIT, DÉJÀ FAIT, | ||
| * PÉRIMÉ} ; DÉJÀ FAIT/PÉRIMÉ exigent « (preuve : … ) » dans la | ||
| * description — on ne déclare rien fait sans référence ; | ||
| * 4. vérifie que chaque référence « suivi par » (P0-*, P1-COV-*, BD-*, PR-*, | ||
| * UNK-*, DEC-*, SRF-*) existe réellement dans les registres — aucun | ||
| * pointeur orphelin. |
| /** Contract files whose presence defines the architectureContracted level. */ | ||
| const CONTRACT_FILES = [ | ||
| 'DOMAIN_MODEL.md', | ||
| 'AUTH_ACCESS_CONTRACT.md', | ||
| 'GALLERY_COMMUNITY_CONTRACT.md', | ||
| 'RELEASE_PUBLISH_CONTRACT.md', | ||
| 'PROJECT_FACTORY_CONTRACT.md', | ||
| 'IAM_POLICY_BASELINE.md', | ||
| 'EDGE_CONTRACT.md', | ||
| 'WORKSPACE_STORAGE_CONTRACT.md', | ||
| 'CHECKPOINT_CONTRACT.md', | ||
| 'IMPORT_REMIX_CONTRACT.md', | ||
| 'AGENT_TOOL_BROKER_CONTRACT.md', | ||
| 'DATABASE_CONTRACT.md', | ||
| 'APP_STORAGE_CONTRACT.md', | ||
| 'EVIDENCE_ARTIFACT_CONTRACT.md', | ||
| 'REGRESSION_RUN_CONTRACT.md', | ||
| 'BILLING_LEDGER_CONTRACT.md', | ||
| 'RUNTIME_NIX_CONTRACT.md', | ||
| 'OPERATIONS_DR.md', | ||
| 'SECURITY_PRIVACY_COMPLIANCE.md', | ||
| ]; |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…CHANGELOG (deux entrées gardées) + collecteur (même assainissement des deux côtés) résolus D2/D3 mergés sur main notés au changelog ; leurs UNKNOWNs de gate restent ouverts (un merge n'est pas une preuve). Manifeste régénéré. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nérée + attestation CI réelle - Manquant #1 (option a) : generate-parity-status.mjs produit PARITY_STATUS.md depuis APPROVAL_STATUS + CI_ATTESTATION ; détail chantiers = PARITY_STATUS_NOTES.md (à la main, déclaré, embarqué verbatim) ; drift-check validateur + preuve négative. - Manquant #2 : CI_ATTESTATION.yaml (run 29718207435, VERT, pull_request, commit fed58e9, 2026-07-20T05:02:13Z) embarquée dans DOCUMENT_MANIFEST à la place du renvoi ; validateur exige runId+runCommit+runDate+success ; preuve négative. - Nuances : statusGeneratorCommit ALIGNÉ (§0) ; 4 variantes maintenues avec justification écrite au changelog (univers/SURFACE_REGISTRY, FAIL>UNVERIFIED, matrice seed, provenance déclarée). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… 174, 114 work items, 49 inconnues - +15 nouveautés N1-N15 → surfaces P160-P174 (UNSUPPORTED déclaré, ensemble exact 159→174) + chantiers WI-LS-01..15 NON FAIT (garde CI dédiée). - 6 retraits prouvés (RPL-29) → HORS PÉRIMÈTRE ; P141 Import GitLab reclassé NOT_APPLICABLE ; backlog vérifié : GitLab n'était en à-faire nulle part. - Prix mesurés (RPL-27) + limites du gratuit (RPL-28 : 1 app, 30 jours, Lite) → §3.12 ; MCP Server remplace l'API publique (RPL-30). - 28 sans-trace → UNK-LS-* (méthode : vrai compte Replit connecté, D5). - Tout ancré au scan hashé (396b07e2…) ; doc d'import du scan = octet pour octet le snapshot RPL-24 → 12 entrées confirmées, pas de correction. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…9 (exigence Avi B) — v2026-07-20.4 - P0-LS-01 : 15 nouveautés DÉMONTÉES (P160-174/WI-LS supprimés) → 15 OBS-DELTA à classifier + 10 registres séparés (taxonomie ArtifactKind ×7 verrouillée validateur ; 12 import providers, GITLAB-tuile interdite). - GitLab reformulé (pas une tuile ≠ retiré ; endpoint code = PARTIEL) ; 4 faux sans-trace reclassés DOC-JOUR (vérifiés corpus hashé) ; prix = observations ( scan vs expert conservés) ; MCP DOC_CURRENT_BETA + PublicApiStatus UNKNOWN ; /@user inférence limitée ; Teams offre≠capacités. - Overlay code+bolt : 159/159 croisées (6 agents) → 79 DEJA_CONSTRUIT / 43 PARTIEL / 37 NON_FAIT avec codeRefs (composant non câblé = PARTIEL). - 18 P0-LS (EXPECTED 35→53, preuve négative rejouée) ; niveau 1 → documentReconciled ; overallStatus NOT_APPROVED. - Répare la passe précédente : §2.3/§3.12 annoncés mais jamais écrits. - Provenance honnête : fichier expert introuvable (copies = notre livraison) — corrections appliquées depuis la liste relayée par l'owner. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…+ annexe overlay — aucun écart silencieux - Sections 0-22 reprises mot pour mot (seul le bandeau candidat→canonique) ; contenu E-Code en ANNEXE (overlay 79/43/37, recalcul réel du §17.4). - P0-LS renumérotés selon l'expert (mapping au changelog) + P0-B-01/02 ; nouveaux appliqués : visiteur anonyme, chiffres scan, paquet evidence validé (69 fichiers), Spotlight/Resources DOC_CURRENT vérifiés, /bounties → Contra EXTERNAL_REDIRECT, microVM retiré, GitLab capacité confirmée, prix expert / et / ajoutés (divergences conservées). - P1_REGISTRY (40) + SERVICE_REGISTRY (56) + ROUTE_OBSERVATION (20) créés par migration ; GENERATED_ASSET x8 / COMPONENT x7 alignés §5.2. - Gates durcis : registryUniverseReady FAIL tant que OBS-DELTA non classifiés (§6.3) ; sourceBaselineReady FAIL sur 21 claims hérités (liste explicite). Statut réel : NOT_APPROVED / documentReconciled. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n 3, 26 sections) + IMPLEMENTATION_STATUS généré - Phase 0 §20 : remplacement atomique ; version corrigée archivée en history/ + diff expert ; copie racine _FINAL supprimée. - §23 : annexe manuelle supprimée → IMPLEMENTATION_STATUS.yaml (159 items : 11 PROVEN / 68 CODED / 43 PARTIAL / 37 NOT_STARTED, règles CODED=mergé main, PROVEN=evidence hashée, validées par le validateur). - +10 P0-EX (EXPECTED 65) ; PRICE_OBSERVATION (montants hors plan) ; LEGACY_SOURCE_COVERAGE (32 sources) ; IDENTITY_COLLABORATION_CONTRACT ; PROJECT_MANIFEST_SCHEMA ; DEPLOYMENT_TYPES par type. - Statut : NOT_APPROVED / documentReconciled (recalculé, jamais saisi). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… expiration 30j adoptée) + OBS-DELTA classifiées + contrat Import aligné - Option B : texte intégral retrouvé dans le commit local d232a18 (session Gallery, victime du split-brain) — DECIDED, cité verbatim, unknown résolu. - 30 jours : DEC-ECODE-FREE-APP-EXPIRY-30D avec mécanique §16.12 complète. - P0-LS-06 PROVEN (15 deltas TRIAGED + linkedRegistryIds) ; P0-EX-04 contrat §9.2 branché (code encore à aligner — dit honnêtement). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Applique l'audit de réanalyse (LIVRAISON 2) au plan canonique, par remplacement. Inclut les 2 commits non-poussés de la session couverture (
4c77c98b,19e48513— docs-only, vérifiés, adoption D1).Les 2 erreurs factuelles — corrigées, VÉRIFIÉES moi-même (snapshots hashés committés)
GCP-13) : citation exacte confirmée (« In GKE, Google Cloud manages the workload identity pool and provider… doesn't require an external identity provider ») → §4.4 = trois chemins (GKE→WIF for GKE ; hors-GCP→IAM WIF ; Cloud Run→service identity + impersonation courte), zéro clé persistante.RPL-25/RPL-26) : migration documentée = custom→Clerk ; Replit Auth→Clerk « coming soon » (citation exacte) ; « What's not supported » = SMS, MFA, SSO complet, Org tenants → §3.9 réécrit, MFA/orgs = extension E-CODE.Structure
ProjectRelease{publicationMode: GROUPED}) +DEPLOYMENT_TYPES_CONTRACT.md(Autoscale/Static/Reserved VM/Scheduled).P001–P159+ 56 servicesS01–S56importés de l'inventaire IDE (sha2560b232212…), verrouillés CI. 0/159 évalué — déclaré honnêtement,parityBaselineReadyFAIL.GCP-14doc du 17/07 +GCP-15quotas 1000) : pool de projets précréés,ReputationTier,BillingAccountBinding,AbuseEventPolicy, seuils de sharding.LEGACY_FINDING_REGISTRY(provenance ligne à ligne) + 99 work items canoniques (WORK_ITEM_REGISTRY, 6 paires de doublons de l'audit posées enduplicateOf). Compteurs = source unique JSON (boltDebt 29, readiness 50 — les « 26 »/« 48 » manuels supprimés).P0-A2-01…16), P1 8→40 (les 18 P1 v3 enfin individuels + 14 P1-A2). Ensembles EXACTS ; preuve négative rejouée (retrait d'un ID ⇒ exit 1). Gallery option B → OPEN/CAPTURE_INCOMPLETE. Owners = rôles +OWNER_ROLES.yaml.Statut — modèle corrigé
Échelle 11 niveaux ; vertical scindé (backend PASS / userJourney FAIL sur uiGaps publish+rollback) ;
contractsPresent≠contractsValidated(FAIL — aucun reviewer réel, honnête) ;approvalReadyETapproved.levelinterdits →overallStatus: NOT_APPROVED,highestPassedLevel: documentCanonicalized;unanchoredClaims: 18bloquantsourceBaselineReady;DOCUMENT_MANIFEST.yamlgénéré (drift-check) ;generatedAtréel ;mergedToMainAt: null.Vérification
Preuve négative : renommer
P0-A2-16/P1-A2-14⇒ exit 1 nommant les IDs.🤖 Generated with Claude Code