swayfx-mosaic/docs/design/STEP20C_GLES_CONTEXT_READBACK_FOLLOWUP.md

11 KiB

STEP20C — suivi contexte GLES et readback G3

2026-10-15. Rapport expérimental du ticket SWAYFX_MOSAIC_STEP20C_COREC_V2_FULLSCREEN_OOM_GLES_NATIVE_CLOSURE_BATCH_V1. Le run GPU-G3 est INCONCLUSIVE ; son objectif diagnostic natif est NOT_EXERCISED. La cause identifiée est un chemin de fixture non portable, avant toute acquisition ; aucun défaut GPU/compositeur n'en est déduit.

GPU_GLES_CAPABILITY_AND_READBACK_PREFLIGHT=ACCEPTED
GPU_GLES_ADMISSION=NOT_EXERCISED
GPU_G3_NATIVE_READBACK=NOT_EXERCISED
GPU_WHOLE_FIELD_CAUSALITY=NOT_PROVEN

La portée du preflight accepté est OFFLINE_ONLY ; elle ne qualifie pas l'admission ou le readback natifs non exercés.

Octets exécutés et préparation revue

Le kit de suivi exécuté est celui du commit source publié c55373eab3c53132bf1157acc9cfc9edd451156e, gel global V2 SHA256 2e9fe75a48466fa1a9e3081137146d5cfffb35145c1749160e2c4f350bc6e5b7, digest f21ea193aedfada620c251f0cf6a22375fb993483905129208864e22e535b140. La publication et le clone précèdent les réservations : 49/49 fichiers et modes, 66 tests, six clients compilés. Trois findings initiaux ont été corrigés avant acceptation source. Ces faits ne qualifient pas le premier dessin client sous le nouveau LAB.

Le nouveau diagnostic G3 a sa propre identité : SHA256 9da90b178f20ea79bc9fb2a105c227f9d5d66a9de7eac77ff4ec3ea102908658, Build ID afdde13d52f3a5fe07c096c1221fcf0c8ae223fc, PID 3510983. Le client réellement lancé, PID 3511049, porte le SHA256 4e791780ac62152245891459864283750681b136a246c3c39ccf36b4f33972b4 ; sa source clients-g2.c porte le SHA256 66658e99704c32d90b073f7664dd4aa9ff1cbf3530c81f7f7ac40e2fa49d9ca7. Le gel GPU séparé est 03b3cdb4b665aeca860cf3e1363d4fbe5c2cbcb0372f3b4fe582e88488ccb5d2. Une correction offline ultérieure n'est pas la source de ce run.

La première préparation Meson échoue : les arguments C sont fusionnés et EGL_EGLEXT_VERSION n'est pas obtenu. Le reçu FAIL reste archivé ; la continuation explicitement autorisée corrige les arguments de la même paire, sans changement source. Le build réparé et la revue indépendante de build portent sur cette identité, une paire et un DESTDIR de cinq fichiers. Les 417 fichiers Mosaic restent ceux du CORE source compilé inchangé ; le diagnostic SceneFX est distinct. Le stage privé comprend uniquement /usr/bin/swayfx-mosaic et les quatre notices documentées sous /usr/share/licenses/swayfx-mosaic/. Aucune installation ; licences LEGAL_NOT_APPROVED. Le contrôle final de build est distinct d'une exécution du hook.

Contrat B4 accepté et limite de sa couverture

La revue sémantique B4 accepte le vrai corps g2_read dans un périmètre offline : 29 cas FakeGL, quatre mutants rejetés, 12 commandes de corpus source, plus 66 tests d'admission/adapters. La revue n'a pas rejoué ces commandes une seconde fois : elle a vérifié leur liaison aux sources effectivement compilées.

Le diagnostic préserve la divergence EGL/GL au lieu de l'effacer par une supposition sur la version demandée à la création. Les queries de version et capacités, leur fenêtre d'erreur propre et les queries supportées doivent être qualifiées sur le contexte réel. L'ancien G2 observait EGL_CONTEXT_CLIENT_VERSION=2 face à GL_VERSION=OpenGL ES 3.2 ; cette divergence reste non résolue par G3. La préparation B4 acceptée ne constitue pas une preuve universelle de conformité EGL.

Le plan garde les bits d'uniformes et la précision mediump, le DCC modifier-aware et les modèles/résidus avant toute comparaison A/B/A. Un plan auxiliaire DCC ne reçoit pas un stride d'image inventé width*4. Les drains consomment la queue d'erreurs GL, qui n'est pas restaurable ; la restauration des bindings ne restaure pas cette queue. Le readback synchrone serait intrusif temporellement. Aucune tolérance, shader ou règle de fit n'est changée sur la base du résultat non exercé.

La revue de préparation client était trop large : compilation, parsers, armement et FakeGL n'exerçaient pas draw() avec le nouveau TMPDIR. Cette lacune est reconnue dans la revue du résultat, sans invalider les observations offline effectivement couvertes ni convertir une correction future en succès runtime rétroactif.

Arrêt avant SHM et avant armement

Le client reçoit un configure XDG et envoie son ACK, puis sort à 2 avant create_pool, create_buffer, attach et toute confirmation SHM. Dans les octets c553 exécutés, gpu/clients-g2.c:92, fonction draw, compare TMPDIR littéralement au scratch de l'ancien LAB /var/tmp/swayfx-mosaic-corec-v2-i516p6po/scratch. La session fournit le scratch du LAB neuf /var/tmp/swayfx-mosaic-step20c-native-closure-qseaqp39/scratch. Cette branche source déterministe, l'environnement construit, le wire et le code 2 attribuent l'arrêt à la fixture. Aucun errno ou message explicite client n'a été journalisé ; aucun diagnostic de ce type n'est inventé. Le runner attend une vue IPC qui ne se mappe jamais et atteint son attente bornée. La réservation GPU-G3 reste consommée, sans retry ni remplacement par GPU-CTRL.

Niveau observé Fait exact
Startup EGL EGL 1.5 ; log de création de contexte OpenGL ES 2.0
Startup GL OpenGL ES 3.2 Mesa 26.2.4-arch1.1, vendor AMD
Renderer AMD Radeon 780M, radeonsi/phoenix/ACO
Hook G3 Zéro armement, zéro epoch, zéro raw ; acquisition vide
Budget output 0/12 captures ; zéro hook et zéro mutation
eglQueryContext / major-minor du hook NON OBSERVÉS
READ_SUCCESS, uniformes, DCC, erreurs/restauration du hook NON OBSERVÉS
A/B/A, H1/H2, modèles/résidus nouveaux NOT_EXERCISED

Les logs startup ne sont pas une nouvelle mesure EGL_CONTEXT_CLIENT_VERSION=2 du hook. Zéro armement diagnostic ne signifie pas absence d'appels GL ordinaires du renderer. Les valeurs de readback ou de restauration absentes ne sont pas des zéros mesurés.

Codes, conservation et revue

Le ledger mesure 7,623459039 s, outcome 7,614715491014067 s, enveloppe commande 8,184041837 s. Runner 1 ; compositeur PID 3510983 et pointeur PID 3511036 sortis à 0 ; référence PID 3511049 sortie à 2. IPC terminal 1 avec fin de réponse/EOF, distinct du compositeur 0. Le cleanup scientifique est false / INCONCLUSIVE : le client n'a ni CLOSE_RECEIVED ni SHM_CLOSURE. Nettoyage mécanique PASS, processus récoltés, runtime privé supprimé, aucun rescue ni watchdog. Le succès mécanique ne qualifie pas la fermeture client.

Les bruts restent sous le LAB neuf : graphics-runs/GPU-G3/run/, dont outcome.json, partial-failure.json, events.jsonl, g2-reference.log, compositor.log, identité et maps ; execution/GPU-G3-command.json conserve l'enveloppe. La revue indépendante reviews/gpu-results/receipt.json porte le SHA256 78ce6fe03955d62d1b079b9a8e81161dcb5bfceef71bd2b71d13892bcf7e4d78 et accepte l'interprétation INCONCLUSIVE / objectif NOT_EXERCISED. Elle identifie le finding P2 GPU-RUNTIME-FIXTURE-TMPDIR et la limite de l'admission antérieure. Le résumé runtime et le ledger préservent les codes.

Suite limitée

La correction de portabilité et le diagnostic explicite FS-P sont un delta OFFLINE_ONLY séparé, sans reconstruction de compositeur ni qualification native. Le reçu de réparation et la validation indépendante conservent 73 tests réussis : 66 existants, trois d'identité et quatre du vrai helper C validation/template, sans dessin Wayland. Le reçu indépendant porte le SHA256 5905e2002041148d7a104e195132f56c8b4152952547be4ed0985da4eacc3852.

Le manifeste post-campagne final de 50 fichiers mode0644 porte le SHA256 1db849c1152bb29d512bf62e3db53cba18d0179c0008ca116887eb572d76a080, digest 14e24501658f1c4c29e7d8c06db71ed07a77b8e80e283453420bbc5b3e2f03c8 ; le gel GPU final porte le SHA256 a89926241a871bdc492348f922df1232962e622c4703720984ef681b5e6d98cb. Les gels intermédiaires f13da722…/230f131a… restent archivés ; seul gpu/README.md change ensuite pour donner la commande explicite SMX_LAB et les quatre tests TMPDIR. La revue initiale du delta conserve CORRECTION_REQUIRED. La revue documentaire finale du delta, SHA256 4d459c0963c6535a404bfaa68d11dff0cf738e2d21167c148c12315e954ffe86, accepte cette correction : code/tests identiques à ceux des 73 tests indépendants, non réexécutés dans cette revue documentaire.

Le client corrigé compilé SHA256 bfc7d47596d5f69b68cd7000e257c7819949081ee7c6d66635eb9accf9ad7f36 n'a jamais été exécuté en campagne native. Ces gels finaux ne remplacent ni le gel V2 ni le client c553 réellement exécutés ; ils ne requalifient aucun run consommé. La revue finale approfondie du dossier est PASS, SHA256 3b15b5093730d6c43897e0adad4a1b2987fbc1097694a03645e928023ba23814, zéro constat bloquant. Son unique remarque documentaire non bloquante NB-ENUM-1 est corrigée ici : valeur ACCEPTED, portée OFFLINE_ONLY séparée ; le reçu historique de revue reste inchangé. L'audit rejoue 69+4 tests réussis, rejette six contre-exemples bruts et vérifie 86 hashes d'artefacts et les 316 hashes protégés. Les contrôles finaux après audit sont consignés dans le reçu de validation. La publication effective est attestée séparément par LAB/final-publication.json et le rapport final après vérification distante.

La décision V4 garde PRIVATE_COREC_V2_NEEDS_TARGETED_EVIDENCE, GPU whole-field, buffer identity, atomic generation, complete damage et GPU completion NOT_PROVEN. G2 historique reste inchangé. Toute campagne future exige une instruction et un budget distincts. STEP20C NEXT ; production multi-output NOT_YET_SUPPORTED, PRODUCTION_AUTHORIZED=FALSE.