QF Solver 0.2.5a0 implementation status¶
Ce document suit l'implementation incrementale a partir du pack de planification 0.2.5. Il ne ferme aucune gate par la seule presence de code. Une gate est fermee uniquement par une preuve reproductible liee a un SHA final.
Etat courant controle (sprint correctif G00/G11)¶
Le candidat source controle est 8047fb63c420609b510beaa1e30aa3ab31d9ad87.
La revision de preuve documentaire courante est celle enregistree dans
docs/generated/docs_manifest.json; elle ne modifie pas le comportement numerique.
Le replay final sur ce SHA a produit 1719 passed, 183 skipped, une couverture
de 88.37 %, 64 checks PASS pour la V&V externe J2, une reconstruction
documentaire 700 artifacts, campaign=PASS, un controle de provenance
source_sha concordant avec dirty=false, ainsi qu'une wheel, une sdist, un
controle Twine et un smoke install passants. Le refactoring du builder G02 et
la correction shift-invert buckling sont donc fermes par preuves. 025-G11
est PASS selon sa semantique officielle de full regression. L'Owner a ensuite
accepte la baseline 0.2.4 avec limitation historique (G00 PASS_WITH_HISTORICAL_LIMITATION)
et approuve une revision explicite du scope : G04 et G06 sont
NOT_IN_RELEASE_SCOPE dans la matrice finale, sans devenir PASS ; leurs
qualifications restent experimentale/non qualifiee et differee. 025-G10 et
025-G12 sont fermes uniquement pour ce scope qualifie borne.
Etat par work package¶
| WP | Etat | Ce qui est effectivement disponible | Gate | Limite actuelle |
|---|---|---|---|---|
| WP0 | CLOSED_WITH_LIMITATION | Cartographie de l'architecture, contrats, tests cibles et replay historique isole identifies | 025-G00 PASS_WITH_HISTORICAL_LIMITATION | Un echec de readiness historique porte sur deux revisions RQ-G08 ; aucun defaut numerique demontre |
| WP1 | CLOSED_BOUNDED | J2 multi-elements connectes TET4/TET10/HEX8/HEX20, dissipation plastique, rollback, tangent FD, sensibilite coarse/reference/refined, raffinement regulier 1/2/4, chargement cyclique global, bilan energetique Wext = Ue + Dp et retry adversarial |
025-G01 PASS | Qualification J2 bornee; les claims externes globaux restent sous G10 |
| WP2 | CLOSED_BOUNDED | Driver Full Newton commun pour la geometrie et TL StVK elastique TET4/HEX8, avec objectivite, tangent sparse, grande rotation, energie, raffinement pre-limit et correlation Code_Aster bornee; le chemin experimental kinematics=total_lagrangian_j2 TET4/TET10/HEX8/HEX20 reste separe |
025-G02 PASS | Scope Owner: elastic Total-Lagrangian TET4/HEX8 dans le domaine pre-limit teste. J2 finite-kinematic, haut ordre, post-limit et contact restent recherche/ouverts |
| WP3 | CLOSED_BOUNDED | Analyse publique linear_buckling avec contribution géométrique initial-stress sparse, route généralisée eigsh(K, M=-Kg), raffinement shift-invert après bracket et fallback diagnostiqué; Euler TET4-TL sur quatre niveaux structurés; sonde externe Code_Aster TET4 avec facteur et mode corrélés; preuves internes TET10/HEX8/HEX20 conservées pour la recherche |
025-G03 PASS | Scope fermé pour la première instabilité tangentielle sparse, TET4 externe et tendance Euler bornée; TET10/HEX8/HEX20 externes, post-buckling, imperfections et prédiction de ruine restent hors qualification |
| WP4 | EXCLUDED_FROM_QUALIFIED_RELEASE | Correction arc-length augmentee sparse; cible signee et fenetre bornee arc_length_stop_mode=max_steps opt-in; chemin FEM TET4 total-Lagrangian sparse VV-060 sur 24 pas; campagne interne monotone, restart depuis checkpoint intermédiaire, benchmark reduit shallow-arch traversant le point limite analytique avec erreur d'equilibre < 1e-8, chemin total_lagrangian_j2 adaptatif borne sur TET4/TET10/HEX8/HEX20 VV-064 vers le facteur 0,5 et télémétrie structurée des retries/cutbacks arc-length VV-072 |
025-G04 NOT_IN_RELEASE_SCOPE | Les observations restent expérimentales : référence FEM indépendante et fermeture complète de branche non retenues dans le claim 0.2.5a0 |
| WP5 | CLOSED_BOUNDED | Contact frictionless sur le résidu/tangent commun; mode opt-in contact_finite_sliding=true avec projection bornée, normales actualisées, transitions de facettes, recontact, rollback et sensibilités penalty; corrélation Docker Code_Aster bornée sur historiques compatibles, contrôlée sur 768 et 9 984 TET4 |
025-G05 PASS | Pas de surface-to-surface généralisé, mortar, friction, impact, self-contact ou large sliding non borné; CalculiX reste un support SHOULD |
| WP6 | EXCLUDED_FROM_QUALIFIED_RELEASE | Contrat CompositeNonlinearAssembly sparse et campagne interne rejouée sur un maillage TET4 connecté à deux éléments couvrant J2 + géométrie, géométrie + contact et J2 + géométrie + contact, complétée par les observations quatre familles TET4/TET10/HEX8/HEX20 et une étude de maillage J2 + géométrie niveaux 1/2/4, toutes via les chemins incrémentaux communs |
025-G06 NOT_IN_RELEASE_SCOPE | results/vnv_0_2_5/g06_latest/ reste PASS_INTERNAL_RESEARCH; finite-kinematic J2 et corrélations externes couplées restent non qualifiés et différés |
| WP7 | OPEN | Aucun changement de friction qualifiant | 025-G07 NOT_IN_RELEASE_SCOPE | Promotion Owner requise |
| WP8 | CLOSED_BOUNDED | Script reproductible scripts/benchmark_nonlinear_025.py avec chemins explicites load-control, geometric_static, arc-length, finite-sliding borné, couplé et finite-kinematic arc-length; temps, DOF, iterations, allocations Python, RSS optionnelle, timers du driver Newton et décomposition élémentaire/sparse/contact; résumés multi-répétitions avec moyenne, médiane, min/max et écart-type; plan d'assemblage nonlinear reutilisant noyaux, matériaux immuables et mappings DDL avec compteurs hit/miss; cache de géométrie de référence Total-Lagrangian avec compteurs hit/miss; accumulation de tangente CSR par chunks avec compteurs de pic et estimation des buffers de staging; vectorisation exploratoire du tangent TL TET4/HEX8 conservée sans écart numérique observé |
025-G08 PASS | Caracterisation de performance bornee, sans claim HPC ou gain universel |
| WP9 | CLOSED_BOUNDED | Raisons structurees pour stagnation, contact, pénétration excessive, buckling, solveur lineaire, éléments invalides et etats non finis; NumericalConvergenceError.to_dict(), historique de residu Full Newton, compteur de line-search et campagne adversariale couvrant limites Newton, cutback minimum, élément invalide, mise à jour matériau, contact, pénétration, arc-length et bracket buckling; retry contact injecté, échec au deuxième incrément adaptatif, retry arc-length avec journal de rayon et cas réel VV-068 de garde de pénétration avec rollback/cutback vérifiés |
025-G09 PASS | Contrat de diagnostic/rollback interne seulement; les gates fonctionnelles restent independantes |
| WP10 | CLOSED_BOUNDED | Archives externes 0.2.4 reutilisables et harnais Code_Aster multi-elements 0.2.5 execute sur maillage régulier partagé | 025-G10 PASS | G10 est évaluée uniquement sur les cellules MUST du scope final ; les cellules G04/G06 sont explicitement exclues et CalculiX reste SHOULD/non bloquant |
| WP11 | CLOSED_BOUNDED | Replay final sur 8047fb63c420609b510beaa1e30aa3ab31d9ad87: 1719 passed, 183 skipped; couverture 88.37 %; docs, V&V, build, Twine et smoke passants |
025-G11 PASS | Full regression technique fermée; les gates fonctionnelles G04/G06 et la readiness agrégée G12 restent indépendantes |
| WP12 | CLOSED_BOUNDED | Pack de planification, décision Owner de scope et readiness finale disponibles | 025-G12 PASS | Clôture agrégée limitée au scope approuvé ; tag, push et PyPI restent séparés |
Journal historique¶
Les entrées ci-dessous conservent la chronologie des lots précédents. Elles ne constituent pas l'état courant et ne doivent pas être utilisées pour interpréter G11 ou G12 ; la section de contrôle ci-dessus et la release-readiness contrôlée font foi pour le candidat actuel.
Tests ciblés observes¶
Actualisation externe du WP3¶
Le harnais calculix_buckling_025.py produit désormais une preuve par famille
et conserve les erreurs d'exécution dans le résumé au lieu d'interrompre la
campagne sans artefact. Le générateur borne maintenant le sous-espace de
Lanczos à la taille du système libre, ce qui supprime l'erreur ARPACK des
petits cas TET4/HEX8. Le replay
results/vnv_0_2_5/calculix_buckling_solid_families_mode1_recorded/summary.json
reste bloqué : TET4, TET10 et HEX8 restent hors de la bande de corrélation
de 10 % (écarts respectifs d'environ 24,6 %, 45,1 % et 13,4 %) et C3D20
s'arrête nativement dans CalculiX. Le même ordre de nœuds C3D20 passe la
corrélation statique existante ; aucune qualification buckling externe n'est
donc revendiquée et 025-G03/025-G10 restent ouverts.
Un probe séparé C3D20 à deux cellules (results/vnv_0_2_5/calculix_buckling_hex20_cells2_probe/)
se termine également par BLOCKED_EXTERNAL_TOOL avec double free or corruption
(!prev) dans l'exécutable CalculiX épinglé ; il est conservé comme diagnostic
externe et ne constitue pas un PASS.
Les tests suivants ont ete executes pendant cette implementation incrementale :
- contrats nonlinear/geometriques et TL : verts ;
- tests J2 multiaxiaux, tangent FD et transactions : verts ;
- benchmark J2 multi-elements connectes sur quatre familles : vert ;
- chemin public
linear_bucklingTET4 aveceigsh: vert ; - campagne interne buckling TET4/TET10/HEX8/HEX20 :
PASS_INTERNAL_RESEARCH, facteurs critiques63.8164,43.2031,47.4844et1.88342, brackets relatifs sous1e-4; les lignes TET10/HEX20 sont internes/recherche, cette observation ne ferme pas G03 et le petit TET4 peut utiliser le fallback dense interne ; - référence analytique Euler TET4-TL dans
results/vnv_0_2_5/robustness_high_order_latest/euler_buckling/summary.json:PASS_INTERNAL_RESEARCHsur24x6x6 -> 32x8x8, erreur Euler finale9.489 %, variation de raffinement et bracket sous les limites internes. Cette preuve reste limitée au TET4 et ne ferme pas G03 sans corrélation externe et couverture des familles haut ordre ; - smoke test CLI
linear_bucklingdepuis l'exemple SI : vert (PASS, maturiteresearch, donc verdict globalWARNING) ; - validation schema des controles
linear_buckling: verte ; - smoke profiling TET4/HEX8 avec
benchmark_nonlinear_025.py: vert ; - tests adversariaux d'etat non fini et d'arc-length : verts ;
- erreurs numeriques CLI : raison et diagnostics JSON structures : verts ;
- diagnostics Full Newton : historique de residu, backend, tolerance et reductions de line-search exportes : verts ;
VV-026remonte egalement les historiques de residu, les ratios de reduction et les ordres observes lorsque calculables pour Full Newton et Modified Newton ; ces indicateurs restent descriptifs et ne ferment aucune gate par eux-memes ;VV-004couvre maintenant huit etats constitutifs independants ou historiques (elastique, proche du seuil, traction, compression, cisaillement, rechargement, cycle de cisaillement et chemin non proportionnel), avec un balayage explicite du pas FD ; erreur maximale observee2.12e-10, sans revendication de qualification externe ;- campagne adversariale Full Newton :
MAX_ITERATIONS,SINGULAR_TANGENT,NAN_DETECTED,LINE_SEARCH_FAILUREetMIN_INCREMENT_REACHEDclasses avecconverged=false:PASS_INTERNAL_FAILURE_CONTRACT; - la campagne de failure contract classe aussi l'épuisement de continuation en
ARC_LENGTH_FAILUREet l'absence de bracket sparse enBUCKLING_FAILURE, avecconverged=falseet diagnostics propres aux solveurs ; ces observations sont reliées àVV-050et ne ferment pas G09 ; - failure campaign: contact assembly failure injected once during an adaptive
load step, then cutback
1.0 -> 0.5, retry at factors[0.5, 1.0]and committed states preserved;retry_cases[0].passed = true. This is an internal adversarial contract, not external contact qualification; - failure campaign: a controlled failure after the first accepted adaptive
increment preserves the committed prefix
[0.5], retries with0.25and converges at factors[0.5, 0.75, 1.0]; this isVV-051internal evidence and does not close G01/G09; - les exceptions d'assemblage du driver commun sont maintenant converties en
INVALID_ELEMENT,MATERIAL_UPDATE_FAILUREouCONTACT_UPDATE_FAILUREavec diagnostics d'increment ; la matrice de failure modes reste toutefois incomplete pour les cas contact/path-dependent multi-etapes ; - le contrat de transaction vérifie désormais le digest du committed avant
commit()ourollback()pour les états matériau et les états génériques; une mutation en place pendant un trial est classéeSTATE_CORRUPTIONavec les digests avant/après.VV-069est couvert par deux tests unitaires et la campagne adversariale complète est maintenant rejouée avec le statutPASS_INTERNAL_FAILURE_CONTRACT; la gate G09 reste ouverte jusqu'à ce que cette preuve soit régénérée et reliée à un SHA propre ; VV-071est maintenant rejouable dans la campagne interne : deux positions situées hors des triangles sélectionnent respectivement les faces0puis1, conservent un gap-0.1, signalentprojection_clamped=trueet le modebounded_closest_point_node_to_triangle, puis assemblent une tangente sparse non vide. Le test ciblétests/unit/test_contact_finite_sliding.pyproduit6 passedaprès cette extension, dont un smoke test du résultat Newton commun avec les diagnostics de projection. Le mode est sérialisé par incrément pour éviter toute ambiguïté entre projection exacte et projection bornée. Cette observation reste bornée au chemin penalty frictionless opt-in et ne ferme pasG05.- l'epuisement de
max_arc_stepsest maintenant expose commeARC_LENGTH_FAILUREavec le facteur courant, le facteur cible et le rayon final ; le benchmark reduit shallow-arch traverse maintenant le point limite, mais ne remplace pas un benchmark FEM snap-through ni la preuve externe ; - campagne arc-length interne :
PASS_INTERNAL_RESEARCH, cinq étapes monotones, facteur final1.000054, résidu relatif maximum8.73e-11; cela ne constitue pas une preuve snap-through, post-buckling ou corrélation externe ; - le chemin global arc-length conserve le comportement par défaut
target_loadet accepte désormais, de manière opt-in, une cible signée ou une fenêtremax_stepsavecarc_length_allow_load_factor_turninget une enveloppe de facteur explicite ; les tests dédiés passent, sans fermeture de G04 ; - benchmark reduit shallow-arch :
PASS_INTERNAL_RESEARCH, 80 étapes, point limite analytique observé à l'étape 14, une inversion de pente de la branche, erreur d'équilibre maximale3.251e-13; cette observation reste une vérification algorithmique et ne ferme pas G04 ; - restart arc-length depuis
arc.step00000001.npz:10 passeddans la suite checkpoint, déplacement final concordant avec le run continu; le contrat de reprise est interne et ne ferme pas la preuve de branche/limite-point G04 ; - campagne
VV-064avec rayon adaptatif borné :results/vnv_0_2_5/robustness_high_order_latest/summary.json, statutPASS_INTERNAL_RESEARCH; TET4, TET10, HEX8 et HEX20 atteignent le facteur signé0,5avec un résidu relatif maximal de9,62e-08ou moins. Les nombres d'étapes observés sont respectivement2,98,122et200. Les plages de facteur et de rayon sont exportées par famille et la figurefinite_kinematic_arc_length.pngtrace les trajectoires et l'adaptation du rayon. Cette preuve établit un contrat commun de continuation monotone, mais ne revendique ni snap-through FEM, ni snap-back, ni post-buckling, ni corrélation externe et ne ferme pas025-G04. - assemblage composite sparse et branchement sur le Full Newton commun : verts ;
- benchmark de cout : timers load-control
assembly_seconds,linear_solve_secondsetline_search_secondsobserves sur TET4/HEX8 ; - plan d'assemblage nonlinear : tests de contrat verts, quatre familles
convergentes dans
nonlinear_load_control_cache_latest.json, compteurselement_cache_hitsnon nuls etelement_cache_misses=0; la comparaison setup-time reste une observation mono-run sur worktree sale et ne ferme pas G08 ; - benchmark paths
load_control,arc_length,arc_length_finite_kinematic,contactetcoupled: les chemins TET4 dédiés convergent avec diagnostics et allocations enregistrés; le chemin finite-kinematic est opt-in et accepte les quatre familles. Cette caractérisation ne constitue pas une mesure de scaling ni une optimisation validée ; - benchmark finite-kinematic arc-length quatre familles :
results/benchmark_0_2_5/arc_length_finite_kinematic_latest.json, quatre lignesPASSvers le facteur signé0.5. Les temps mur observés sont2.943 s(TET4),83.906 s(TET10),6.546 s(HEX8) et235.151 s(HEX20); les itérations Newton totales sont respectivement76,670,120et1479, avec un résidu relatif maximal de9.90e-08ou moins. Le budget de continuation a été porté à512pas pour éviter un arrêt artificiel du cas HEX20 à0.499995; le run reste une observation unique sur worktree sale et ne ferme pas025-G08; - sensibilite au pas de charge sur TET4 connecte : verte, sans seuil invente ;
- sensibilite coarse/reference/refined sur les quatre familles :
PASS_INTERNAL_SENSITIVITY; ecarts reference-versus-refined conserves dans la sortie de campagne, sans promotion automatique ; - raffinement maillage niveaux
1/2/4et cycle global avec inversion de charge sur les quatre familles :PASS_INTERNAL_MESH_REFINEMENTetPASS_INTERNAL_CYCLIC, sans seuil de release invente ; - bilan énergétique sur le maillage J2 connecté à dix increments pour les quatre
familles :
PASS_INTERNAL_ENERGY. Les termes reconstruits sontWext,UeetDp; les dissipations aux points de Gauss restent non négatives et les erreurs relatives observées sont comprises entre8.91e-10et8.64e-09. Cette preuve est interne et son acceptance band reste une décision Owner ; - rollback adversarial sur TET4 connecté : un trial est volontairement muté
puis rejeté, le cutback
1.0 -> 0.5est journalisé, le retry repart de l'état committé intact et la solution finale reste cohérente avec la référence à pas fixes. Verdict :PASS_INTERNAL_ROLLBACK; cette preuve n'est pas une revendication d'instabilité matériau ; - campagne
RobustnessQualificationCampaignexecutee en temporaire :PASS_INTERNAL, tangent FD maximal7.12e-11, multi-elements TET4/TET10/ HEX8/HEX20PASS, raffinement/cycles internesPASS, correlation archiveePASS_EXTERNAL_CORRELATION_BOUNDED; - replay Docker du cas Code_Aster RQ-G08 0.2.4 :
PASS_EXTERNAL_CORRELATION, 80/80 checks, erreur relative maximale2.62e-15; cette preuve reste un patch affine mono-element et ne ferme pas la correlation multi-elements G10 ; - campagne Code_Aster multi-elements 0.2.5 rejouee dans Docker sur un maillage
régulier partagé :
PASS_EXTERNAL_CORRELATIONavec 64 checks. TET4/TET10/ HEX8/HEX20 concordent sur déplacements, réactions,stress_xxet PEEQ dans la limite de 0,5 %. Pour TET10, le chemin de corrélation active explicitementtet10_nonlinear_quadrature=code_aster_5, ce qui aligne les cinq points QF avec les cinq valeursELGACode_Aster. La règle historique Hammer à quatre points reste la valeur par défaut et les gates G01/G10 restent ouvertes pour leurs critères de qualification plus larges ; aucune tolérance n'a été élargie ; - builder documentaire engineering :
706 artifacts, campagne documentairePASS; - les rapports
targeted_after_*antérieurs restent archivés pour la traçabilité des étapes précédentes ; ils contiennent notamment les anciens runs à70 passedet ne doivent pas être lus comme l'état courant ; - readiness targeted courant après le cache de géométrie de référence :
tests
PASS(186 passed, 2 skippeden94.06 s), documentationPASS(706 artifacts), verdict globalNOT_READYattendu car025-G00,G01,G02,G03,G04,G05,G06,G08,G09,G10,G11etG12restent ouverts ; aucune gate n'a été modifiée par cette exécution ; - campagne de robustesse rejouée après intégration du kernel haut ordre dans le
runner :
results/vnv_0_2_5/robustness_high_order_latest/summary.json, statut globalPASS_INTERNAL; les quatre lignes finite-kinematic sontPASS, avec erreurs tangent FD4.81e-10(TET4),5.49e-10(TET10),9.65e-10(HEX8) et4.99e-10(HEX20). Cette preuve reste interne/recherche et ne constitue ni une qualification grandes rotations ni une corrélation externe ; - campagne de robustesse rejouée avec les lignes buckling haut ordre :
results/vnv_0_2_5/robustness_high_order_buckling_latest/summary.json, statut globalPASS_INTERNAL; TET4/TET10/HEX8/HEX20 ont tous un facteur critique fini, un bracket relatif sous1e-4, une tangente sparse non vide et un résidu de précharge fini. Cette observation interne ne ferme pas G03 : elle ne remplace ni Euler, ni la convergence maillage, ni la corrélation externe ; - campagne de géométrie haut ordre connectée :
results/vnv_0_2_5/robustness_high_order_geometric_latest/summary.json,PASS_INTERNAL_RESEARCH; TET10 (5 éléments, 78 DDL) et HEX20 (1 élément, 60 DDL) convergent en 12 itérations, avec résidus maximum respectifs6.70e-13et8.52e-13,detFminimum positif et énergie positive. Cette preuve est un smoke élastique Saint-Venant-Kirchhoff et ne ferme pas G02. - smoke de grande déformation
VV-057:PASS_INTERNAL_RESEARCHsur TET4 et HEX8 sous charge transverse, avec angles de ligne d'extrémité respectifs d'environ34et42degrés,det(F)positif et résidus sous1e-7. Cette preuve élastique bornée ne vaut pas qualification de grande rotation plastique, de post-flambement ou de corrélation externe. - sensibilité maillage grande-déformation
VV-066:PASS_INTERNAL_RESEARCHsur les niveaux 1/2 TET4 et HEX8 à l'échelle de charge1.0, avec déplacement, angle de ligne, énergie,det(F), résidu et coût Newton enregistrés. Les variations coarse/refined restent descriptives et ne ferment pas G02 sans bande d'acceptation et corrélation externe. Le smoke distinct à l'échelle1.5converge sur le maillage grossier mais échoue en line-search sur HEX8 raffiné ; cette limite est conservée explicitement. - sensibilité maillage grande-déformation haut ordre
VV-067:PASS_INTERNAL_RESEARCHsur TET10 et HEX20, niveaux 1/2 à l'échelle de charge0.25, avecdet(F)positif et résidus finis. Cette preuve est volontairement une étude basse charge et ne revendique ni grande rotation plastique, ni convergence maillage qualifiée, ni corrélation externe. - sensibilité maillage buckling
VV-058:PASS_INTERNAL_RESEARCHsur les niveaux assemblés1/2pour TET4, TET10, HEX8 et HEX20, avec facteur critique, bracket, DDL, NNZ, résidu du mode critique et résidu de précharge archivés. La variation coarse/medium est une tendance interne bornée, pas une fermeture de convergence maillage, et ne ferme pas G03. - contact frictionnel/frictionless et API cible : verts ;
- branche expérimentale
total_lagrangian_j2: TET4, TET10, HEX8 et HEX20 convergent via le mêmeNonlinearStaticSolver, avec récupération objective Green-Lagrange / seconde Piola et états aux points d'intégration ; seul Full Newton est accepté sur ce chemin,modified_newtonreste rejeté etarc_lengthest ouvert en opt-in pour le périmètre homogène borné deVV-064; cette observation restePASS_INTERNAL_RESEARCHet ne ferme pas G02/G06 ; - campagne
run_finite_kinematic_j2_benchmark: TET4/TET10/HEX8/HEX20, résidu Newton, rotation rigide, PEEQ finite-kinematic et tangent FD enregistrés enPASS_INTERNAL_RESEARCH; les erreurs de tangent élémentaire par différences finies sont de l'ordre de5e-10pour TET10 et HEX20. Le chemin HEX20 reste un smoke test mono-élément et aucune corrélation externe ni promotion de modèle n'en découle ; - le kernel
total_lagrangian_j2accepte désormais aussi TET10 et HEX20 dans le même driver Full Newton, avec quadrature et récupération des états aux points d'intégration propres à chaque famille. Les tests unitaires dédiés passent (tests/unit/test_total_lagrangian_j2.py); cette extension restePASS_INTERNAL_RESEARCHet ne participe pas a la fermeture bornee de025-G02; l'objectivité, le tangent FD, la convergence de maillage et la corrélation externe des familles haut ordre restent a produire avant toute promotion. - contribution contact
contact_mode=penalty: activation unilatérale sparse et convergence de cas TET4 small-strain et TET4 finite-kinematic J2 via le même driver Newton ; recherche initiale, frictionless uniquement, sans fermeture de G05/G06 ; - campagne contact commune :
PASS_INTERNAL_RESEARCH, état ouvert sans tangent actif puis état pénétrant avec contact0actif et tangent sparsennz=4, résidu global maximum4.91e-09; les modesinitialetupdatedconvergent dans le driver commun, la portée reste penalty frictionless ; - corrélation externe contact
VNV-CONTACT-CODEASTER-LIAISON-UNIL-001rejouée dans Docker :PASS_EXTERNAL_CORRELATION, cinq contrôles passés sur les branches compression/fermeture et séparation/ouverture, avec accord exact QF/Code_Aster sur le déplacement normal, le gap et l'activation. Cette preuve est archivée dansresults/vnv_0_2_5/contact_code_aster_liaison_unil/; elle ne couvre pas le contact surface-à-surface, le finite sliding, les normales mises à jour, le recontact ni le rollback contact ; - corrélation externe
VNV-TET4-TL-CALCULIX-STRUCTURAL-008rejouée avec CalculiX 2.20 :PASS_EXTERNAL_CORRELATION; quatre niveaux TET4/C3D4, erreur QF/CalculiX de charge critique3.52e-4au niveau fin, erreur CalculiX/Euler5.91 %, et erreur de patch Cauchy1.17e-7. Cette preuve reste bornée à la route TET4 Total-Lagrangian et ne ferme pas G03 ; - campagne de recontact commune
VV-047:PASS_INTERNAL_RESEARCHsur le chemin[0.25, 1.0, 0.0, 1.0], avec activation[false, true, false, true]et résidus relatifs sous1e-7. Les diagnostics par pas exposent désormais les contacts actifs, les gaps et le mode de recherche; la preuve reste limitée à un triangle plan TET4 et ne ferme pas G05 ; - campagne de sensibilité penalty :
PASS_INTERNAL_RESEARCHsur les pénalités1e2à1e6, avec convergence Newton pour chaque valeur, pénétration non croissante etcontact_tangent_nnzexporté par incrément. Cette preuve caractérise une tendance locale ; elle ne définit pas une pénalité de production, ne remplace pas une étude de conditionnement et ne ferme pas G05 ; - recherche multi-face
VV-055:PASS_INTERNAL_RESEARCHavec deux facettes coplanaires et positions compatibles sélectionnant[0, 1]en modecontact_search_mode=updated. Cette observation couvre la sélection locale de facette, pas le finite sliding généralisé ni le contact surface-à-surface ; - traversée mise à jour
VV-056:PASS_INTERNAL_RESEARCHsur deux TET4 connectés avec charge tangentielle et normale; la séquence de facettes observée est[[0], [0], [1], [1]], avec un changement de facette et un résidu global sous1e-7dans le même driver Newton. Cette preuve reste bornée à une surface plane à deux facettes et ne ferme pas G05/G06 ; - couplage J2/geometrie quatre familles
VV-059:PASS_INTERNAL_RESEARCHsur deux éléments connectés TET4, TET10, HEX8 et HEX20, avec le même chemintotal_lagrangian_j2, résidus maximum sous1e-6et PEEQ finale observée. Cette preuve exclut le contact et ne ferme pas G02/G06 ; - chemin FEM arc-length
VV-060:PASS_INTERNAL_RESEARCHsur un cantilever TET4 total-Lagrangian imparfait, 24 pas sparse, résidu maximum2.54e-10etdet(F)minimum0.999862. La charge reste monotone dans la fenêtre observée ; ce résultat ne ferme pas G04 et expose la dette de fusion avec le driver commun ; - campagne de failure contact : une limite explicite
contact_max_penetrationproduitCONTACT_PENETRATION_EXCESSIVE,converged=falseet les valeurs de pénétration/limite dans les diagnostics. Ce contrat est fail-closed et reste une preuve interne ; il ne ferme pas G05/G09 ; VV-068ajoute un cas réel de garde de pénétration sur un bloc TET4 multi-éléments : deux essais Newton dépassent transitoirement la limite, sont classésCONTACT_PENETRATION_EXCESSIVE, puis le cutback converge aux facteurs[0.5, 0.75, 1.0]. Le déplacement final, la norme de réaction et le gap final concordent avec une référence en huit petits pas. Cette preuve interne renforce le contrat G09 sans fermer G05/G09 ;- campagne de couplage interne :
PASS_INTERNAL_RESEARCHsur un maillage TET4 connecté à deux éléments et trois chemins (J2 + géométrie,géométrie + contact, puisJ2 + géométrie + contactavec recherche mise à jour). Les trois cas passent par le même résidu/tangent et le même Full Newton; cette observation ne ferme pas G06, qui exige encore des cas maillés et des corrélations externes ; - snapshots de regression et CLI geometric nonlinear : verts.
- génération documentaire engineering :
706 artifacts,campaign=PASS; les contrats de génération ciblés ont produit27 passed, 2 skipped. - audit public contrôlé :
2 passedaprès synchronisation du nombre de sources publiques (389) et du scan de fichiers candidats (1879) avec le pack 0.2.5.
Une premiere batterie ciblee de cette tranche a produit 116 passed in 25.67s; les sous-batteries executees apres les derniers contrats ont egalement ete vertes, dont 110 passed in 23.54s pour le lot V&V/documentation cible. Ruff est vert sur les fichiers modifies. Le dernier lot cible noyau + integration a produit 131 passed, 4 skipped in 70.51s. Aucun test de couverture n'a ete lance et aucune suite complete 0.2.4/0.2.5 n'est declaree par ce document.
Depuis cette synthese, la batterie implementation ciblee a produit 36 passed in 22.75s, la batterie documentation complete 42 passed, 6 skipped in 12.60s, et Ruff est vert sur les fichiers modifies. Le benchmark régulier TET4/HEX8 a également été exécuté avec les timers d'assemblage et de résolution.
Le lot ciblé non linéaire (contrats d'état, Newton sparse, assemblage composite, TL HEX8, dissipation, buckling, sensibilité, cycles, benchmark et campagne adversariale) a ensuite produit 32 passed in 22.47s. Les tests ciblés de corrélation et de génération documentaire ont produit 26 passed, 2 skipped in 2.20s, puis 23 passed, 2 skipped in 1.96s après la mise à jour de la note de comparabilité TET10. Ruff reste vert sur les fichiers concernés.
La couverture, la suite complete et les campagnes externes ne sont pas declarees executees par ce document.
Le benchmark finite-kinematic TET4 a ensuite été rejoué après vectorisation du tangent : 1.34 s au total, dont 1.10 s d'assemblage, contre 43.21 s et 41.44 s avant modification sur le même cas. Les déplacements, PEEQ, résidu et nombre d'itérations restent concordants dans cette observation unique. Le point HEX8 correspondant est 1.55 s, dont 1.27 s d'assemblage et 17 itérations. Ces résultats restent une caractérisation locale et ne ferment pas 025-G08.
La campagne Code_Aster multi-elements a ensuite ete rejouee avec une
convention TET10 explicite. Elle produit 64 checks et
PASS_EXTERNAL_CORRELATION : les quatre familles sont comparables sur le
maillage regulier partage, avec 50 points QF et 50 valeurs ELGA pour TET10.
Cette preuve ferme le finding de comparabilite TET10, mais ne ferme pas a elle
seule 025-G01/025-G10, qui exigent encore leurs autres preuves et une liaison au
SHA candidat final.
Apres ce correctif, le lot cible non lineaire, correlation et documentation a produit 54 passed, 2 skipped in 17.17s et Ruff est vert sur les fichiers concernes. Cette execution reste ciblee et ne remplace ni la couverture ni la non-regression complete.
Le bilan énergétique ciblé a ensuite produit 4 passed in 20.67s. Le replay
des quatre familles donne PASS_INTERNAL_ENERGY; les résidus relatifs de bilan
observés sont 1.84e-12 (TET4), 5.49e-09 (TET10), 8.64e-09 (HEX8) et
8.91e-10 (HEX20). Aucune gate n'est fermée par cette seule observation.
La campagne de rollback adversarial ciblée a ensuite produit 5 passed in
20.98s dans le lot multi-element. Le retry est reparti avec un déplacement
nul et un digest d'état identique avant/après rejet ; le résultat final diffère
de la référence à pas fixes de 1.25e-07 en déplacement relatif et
3.35e-09 en PEEQ absolue. Ces valeurs sont archivées comme observation
interne, sans seuil de release ajouté.
La campagne RobustnessQualificationCampaign complète a ensuite été rejouée
dans tmp/vnv_0_2_5_robustness_latest : PASS_INTERNAL, avec
PASS_INTERNAL_ENERGY pour les quatre familles et PASS_INTERNAL_ROLLBACK.
Cette sortie temporaire n'est pas une preuve liée à un SHA de release.
Depuis cette exécution, la campagne complète temporaire reste PASS_INTERNAL
et inclut PASS_INTERNAL_RESEARCH pour le couplage borné TET4. Le lot ciblé
checkpoint/contact/couplage/défaillances/documentation a produit 66 passed,
2 skipped in 24.75s; Ruff est vert sur les fichiers modifiés. La campagne
adversariale typée couvre désormais neuf cas de défaillance directe, plus les
retries contact et backend sparse. La génération engineering a été rejouée avec succès:
706 artifacts, campaign=PASS. Ces résultats restent des preuves de travail
et ne ferment aucune gate sans exécution sur un SHA final propre.
Le contrat de panne du backend sparse distingue désormais une factorisation
échouée (LINEAR_SOLVER_FAILURE) d'un tangent singulier (SINGULAR_TANGENT),
avec le message backend conservé dans les diagnostics. Le cas est couvert par
un test unitaire ciblé; il ne remplace pas une panne réelle d'un solveur
externe et ne ferme pas 025-G09 à lui seul.
Le benchmark de performance expose maintenant les chemins nommés
load_control, arc_length, arc_length_finite_kinematic, contact et
coupled; leurs profils historiques TET4 passent dans 7 tests dédiés. Les
timers d'assemblage et de résolution sont aussi renseignés pour l'arc-length.
Un profil HEX20 isolé a ensuite confirmé un
hotspot de validation géométrique répétée : sur le même cas 96-DOF, le temps
total est passé de 114,288 s à 17,321 s et l'assemblage de 96,639 s
à 11,573 s, avec 22 itérations dans les deux runs. Cette comparaison reste
une caractérisation locale sur worktree sale; elle ne ferme pas 025-G08 et doit
être rejouée sur SHA propre avec comparaison numérique complète.
Une caractérisation load-control à deux répétitions par famille a ensuite été
archivée dans
results/benchmark_0_2_5/nonlinear_load_control_all_families_repeats2_latest.json.
Les huit runs TET4/TET10/HEX8/HEX20 convergent; les temps moyens sont
respectivement 0.607 s, 2.318 s, 1.028 s et 16.453 s, avec assemblage
moyen 0.392 s, 1.648 s, 0.747 s et 11.160 s. Les CV temporels sont
respectivement 2.46 %, 0.19 %, 2.31 % et 0.16 %; RSS avant/apres est
également enregistrée quand disponible. Le rapport est attaché à
e368c0ce00874c16ff1e8fa9158ea0a8cd2dd745 sur un worktree sale : c'est une
mesure de caractérisation, pas une fermeture de 025-G08.
Apres l'ajout du pipeline de readiness et du typage des erreurs d'assemblage, le dernier lot cible a produit 59 passed, 2 skipped in 17.21s. La generation documentaire engineering reste a 706 artifacts, campaign=PASS. Le lot TET10 quadrature/correlation a ensuite produit 30 passed in 21.31s, puis la replay Docker Code_Aster a produit 64 checks, PASS_EXTERNAL_CORRELATION. Aucun test de couverture ni aucune suite complete n'a ete lancee.
Le pipeline de readiness ciblé a ensuite été exécuté après les contrats HEX20,
contact et backend sparse : les étapes tests et documentation passent (65
passed, 2 skipped; 706 artifacts, campaign=PASS), puis l'exécution s'arrête volontairement sur le
contrôle des gates. Les gates 025-G00, G01, G02, G03, G04, G05,
G06, G08, G09, G10, G11 et G12 restent OPEN; le rapport est
results/readiness_0_2_5/targeted_after_hex20.json. Ce résultat ne lance ni
couverture ni suite complète et ne constitue pas une readiness de release.
Le readiness targeted final après les lots buckling haut ordre, failure contract
et profiling a produit 70 passed, 2 skipped in 34.73s et
706 artifacts, campaign=PASS. Il s'est arrêté au contrôle des gates avec
025-G00, G01, G02, G03, G04, G05, G06, G08, G09, G10,
G11 et G12 toujours OPEN. Le rapport est
results/readiness_0_2_5/targeted_after_failure_and_performance.json; aucune
couverture, suite complète, tag, commit ou publication n'a été exécuté.
Le readiness targeted a ensuite été rejoué après l'intégration du benchmark
géométrique haut ordre : 70 passed, 2 skipped in 34.21s, documentation
PASS avec 706 artifacts, puis arrêt au gate check. Le rapport intermédiaire
est results/readiness_0_2_5/targeted_after_high_order_geometry.json.
Après l'intégration de la preuve Euler bornée : 70 passed, 2 skipped in
34.24s, documentation PASS avec 706 artifacts, puis arrêt au gate check.
Le rapport le plus récent est
results/readiness_0_2_5/targeted_after_euler_buckling.json.
Après l'ajout du rollback adversarial multi-étapes, le readiness ciblé a de
nouveau produit 70 passed, 2 skipped, documentation PASS avec
706 artifacts, puis s'est arrêté au gate check. Le rapport final est
results/readiness_0_2_5/targeted_after_euler_and_multistep_failure.json;
les gates obligatoires restent OPEN et aucune couverture ni suite complète
n'a été relancée.
Depuis ce rapport, la campagne de robustesse a été régénérée avec trois preuves
supplémentaires : VV-058 sensibilité maillage buckling coarse/medium sur les
quatre familles, VV-059 couplage J2/geometrie connecté sur TET4/TET10/HEX8/
HEX20 et VV-060 chemin FEM arc-length TET4 total-Lagrangian. La campagne reste
PASS_INTERNAL; les tests ciblés noyau/buckling/contact/arc-length ont produit
40 passed in 58.37s, les contrôles documentaires ciblés 11 passed, Ruff
est vert et le générateur engineering reste à 706 artifacts, campaign=PASS.
La corrélation Code_Aster multi-elements a également été rejouée dans Docker
avec 64 checks, PASS_EXTERNAL_CORRELATION; elle reste une preuve candidate
du worktree courant tant qu'elle n'est pas rejouée et attachée à un SHA propre.
La couverture, la suite complète et la fermeture des gates n'ont pas été
déclarées par cette tranche.
Le profil composant VV-061 a ensuite été rejoué sur les quatre familles en
load-control, une répétition par famille. Les quatre calculs convergent. Le
noyau élémentaire représente 0.205 s (TET4), 0.918 s (TET10), 0.626 s
(HEX8) et 10.677 s (HEX20), tandis que le solveur sparse représente
respectivement 0.058 s, 0.066 s, 0.045 s et 0.065 s. La mesure confirme
que le coût HEX20 est actuellement dominé par l'intégration/noyau élémentaire;
elle n'est ni un benchmark de scaling ni une fermeture de 025-G08, car le
worktree est dirty et la répétabilité multi-run sur SHA propre reste requise.
La preuve VV-062 a ensuite exécuté le chemin total_lagrangian_j2 avec
recherche contact mise à jour sur TET4, TET10, HEX8 et HEX20. Chaque cas active
la plasticité J2, traverse un état ouvert puis actif avec la même composition
résidu/tangente et conserve un résidu relatif inférieur à 1e-7; la pénétration
observée reste inférieure à 1e-4 dans ce montage de référence. Il s'agit d'une
preuve interne de composition multi-familles, sans revendication de contact
surface-à-surface, finite sliding, friction ou corrélation externe, et elle ne
ferme pas G05 ou G06.
La preuve VV-063 compare ensuite, sur les quatre familles, le déplacement du
chemin small-strain avec celui de total_lagrangian_j2 à une charge 1e-4.
Les écarts relatifs observés sont de l'ordre de 1e-15, avec une déformation
plastique nulle dans les deux chemins. Cette cohérence de régime est une preuve
interne utile pour G02, mais ne remplace ni une corrélation externe ni une
qualification de grandes déformations plastiques.
La campagne adversariale structurée est désormais agrégée au paquet principal:
les cas MAX_ITERATIONS, tangente singulière, non-finis, élément/matériau
invalides, contact, minimum d'incrément, rollback contact, échec backend,
rollback multi-étapes, arc-length et buckling sont archivés sous
summary.json. Le statut courant est PASS_INTERNAL_FAILURE_CONTRACT : il
reste un contrat interne de défaillance, ne transforme aucun échec en
convergence et ne ferme pas G09 avant l'attachement à un SHA propre et la
revue de gate.
Le chemin VV-064 exerce maintenant le même driver sur une continuation
total_lagrangian_j2 TET4/TET10/HEX8/HEX20 jusqu'à un facteur de charge signé
de 0,5, avec adaptation du rayon explicitement activée et bornée à 0,1.
Le résidu relatif maximal observé est inférieur à 1e-7; la cible actuelle
reste élastique (PEEQ = 0), ce qui ne constitue donc pas une qualification de
la plasticité sous arc-length. Cette ouverture est strictement bornée : aucune
revendication de snap-through FEM, snap-back, post-buckling ou corrélation
externe n'est associée à ce résultat.
La preuve VV-065 ferme un manque de routage identifié pendant l'audit : le
chemin public geometric_nonlinear_static compose désormais son assemblage
Total-Lagrangian élastique avec la contribution penalty sparse existante. Sur le
cas TET4 borné, le contact est actif, la pénétration reste sous 1e-3, le
résidu relatif maximal reste sous 1e-7 et det(F) demeure positif. Cette
preuve ne transforme pas le contact en capacité surface-à-surface générale et
ne ferme pas G05 ou G06.
Decision de maturite¶
Les nouvelles capacites sont experimental/research. Elles ne doivent pas modifier les revendications stables de 0.2.4 et ne ferment pas les gates 0.2.5. Le prochain lot prioritaire est désormais la rejouabilité sur SHA propre des profils et corrélations, puis la fermeture progressive des gates avant toute claim de solide non linéaire unifié.
Depuis cette synthèse, le pipeline de readiness ciblé a été aligné avec les
tests des work packages constitutifs, géométriques, buckling, contact,
assemblage sparse, failure et performance. Le dernier run ciblé complet
archivé a produit 204 passed, 2 skipped et un seul échec sur la synchronisation
de l'audit public (1879 contre 1882 fichiers). La correction a été régénérée
par scripts/audit_public_documents.py, puis le test contrôlé ciblé a produit
2 passed; le run ciblé complet n'a pas été relancé. La génération documentaire
engineering rejouée ensuite a produit 706 artifacts, campaign=PASS et l'audit
final reste à 1883 files, 0 findings. Aucun test de couverture ni aucune suite
complète n'a été exécuté.
Le lot VV-068 ajoute une preuve adversariale non injectée de contact : le
garde de pénétration rejette deux incréments (CONTACT_PENETRATION_EXCESSIVE),
effectue le rollback puis les cutbacks 1.0 -> 0.5 et 0.5 -> 0.25, et
converge sur les facteurs committés 0.5, 0.75, 1.0. Comparée à une
référence aux facteurs 0.125 à 1.0, la différence relative de déplacement
est 1.19e-16, la différence de réaction est nulle et le gap final est
identique. Cette preuve renforce le contrat G09 mais reste interne, bornée à
un contact frictionless TET4 et ne ferme pas 025-G05 ou 025-G09.
Le readiness ciblé historique après la campagne arc-length adaptative avait
produit 200 passed, 2 skipped en 169.46 s, documentation PASS avec 706
artifacts, puis arrêt au gate check. Il ne doit pas être lu comme un run
complet du HEAD après la correction d'audit. Dans cet état historique, les
gates 025-G00, G01, G02, G03, G04, G05, G06, G08, G09, G10,
G11 et G12 étaient OPEN; la matrice contrôlée courante fait foi.
Aucune couverture ni suite complète n'a été exécutée dans ce run historique.
Le rapport results/vnv_0_2_5/release_readiness_targeted_latest.json reste le
rapport du run arrêté sur l'ancien échec d'audit; il ne doit pas être présenté
comme une readiness courante. Après le correctif, seuls l'audit contrôlé ciblé
et la génération documentaire ont été rejoués. Le SHA observé reste le HEAD
e368c0ce dans un worktree encore dirty; il ne constitue donc pas un SHA final
de release.
Après remplacement de l'accumulation globale des triplets par des chunks CSR,
le benchmark ciblé results/benchmark_0_2_5/nonlinear_load_control_sparse_chunks_latest.json
reste PASS sur TET4/TET10/HEX8/HEX20. Les compteurs de chunks et de pic
d'entrées sont exportés par étape et vérifiés par test_nonlinear_benchmark.
Cette optimisation est encore une observation de worktree sale et ne ferme pas
025-G08.
Dernière vérification de packaging¶
Le build isolé wheel/sdist a produit des artefacts valides dans
.tmp_release_readiness_025/. twine check passe pour les deux fichiers et
un smoke install depuis le wheel passe dans .tmp_smoke_install_025/ avec
solveur.__version__ == 0.2.5a0. Ces résultats décrivent une préparation
locale de candidat : ils ne constituent ni un tag, ni une publication PyPI,
ni une fermeture de gate tant que la campagne sur SHA propre n'est pas
terminée.
Les replays ciblés de caractérisation ont aussi été archivés sans modifier les
seuils : geometric_static_all_families_latest.json passe sur TET4, TET10,
HEX8 et HEX20 avec 18 itérations Newton; contact_tet4_latest.json et
coupled_tet4_latest.json passent respectivement en 18 et 24 itérations. Ces
trois rapports sont rattachés au SHA e368c0ce avec worktree_dirty=true et
restent des observations internes; ils ne ferment pas G02, G05, G06 ou G08.
Vérification ciblée la plus récente¶
Après la sérialisation explicite du mode de projection finite-sliding et le
contrôle pré-assemblage de contact_max_penetration, le run ciblé final a
produit 182 passed en 157,02 s, sans couverture. Ruff est vert sur les
fichiers modifiés, git diff --check ne signale aucune erreur de contenu, et
le benchmark finite-sliding exporte le mode
bounded_closest_point_node_to_triangle. La documentation ciblée a produit
44 passed, 6 skipped; l'audit public reste à 1883 fichiers, 0 finding.
Ces résultats restent liés à un worktree dirty et ne ferment aucune gate de
release.
Les contrôles rapides rejoués ensuite ont produit 4 passed pour le contrat
du pipeline de readiness et 34 passed pour les tests ciblés contact,
finite-sliding et benchmark. Le profil targeted du pipeline répond
PLANNED, ce qui vérifie sa construction sans lancer la couverture ni la
campagne complète. Les avertissements Git observés concernent uniquement la
normalisation LF/CRLF de fichiers déjà modifiés; git diff --check ne signale
aucune erreur de contenu.
Depuis cette vérification, la campagne tests/unit/test_nonlinear_multielement.py
a produit 27 passed en 135,67 s après l'ajout du raffinement généralisé
sparse. tests/unit/test_linear_buckling.py produit 10 passed et
tests/unit/test_nonlinear_load_path.py tests/unit/test_nonlinear_checkpoint.py
produisent 32 passed. Le buckling interne sélectionne generalized_eigsh
sur TET4 et generalized_eigs_shift_invert sur les tangentes indéfinies
TET10/HEX8/HEX20, avec un résidu de mode inférieur à 1e-14 sur le replay
quatre familles; le fallback bracketé reste diagnostiqué si ARPACK refuse la
paire. Le test documentaire courant produit 42 passed, 6 skipped et
l'audit public reste à 1883 fichiers, 0 finding. Aucun test de couverture
ni aucune suite complète n'a été exécuté; les gates 025-G03, 025-G04 et
025-G09 restent donc ouvertes.
Le benchmark VV-061 conserve désormais, pour chaque famille et chaque phase
instrumentée, les médianes en plus des moyennes, ainsi que les bornes min/max et
l'écart-type des temps mur répétés. Cette information rend les comparaisons
avant/après moins sensibles à un échantillon isolé; elle reste descriptive,
doit être rejouée sur un SHA propre et ne constitue pas un seuil de performance.
La preuve locale VV-018 a également été renforcée par
run_contact_tangent_fd_benchmark: le contact penalty frictionless à actif
figé reste à gap -0.1, sa tangente sparse contient 16 coefficients non nuls,
et l'erreur relative maximale observée sur les pas FD 1e-4, 1e-6, 1e-8
est 6.00e-09. Ce résultat couvre le voisinage lisse d'un état actif; il ne
couvre ni le kink ouverture/fermeture, ni le finite sliding généralisé, ni une
corrélation externe, et ne ferme pas 025-G05.
La campagne canonique VNV-ROBUSTNESS-NONLINEAR-SOLIDS-025 a ensuite été
rejouée après correction du scénario adversarial de buckling : statut
PASS_INTERNAL, avec contact_tangent_fd_benchmark =
PASS_INTERNAL_RESEARCH et failure_campaign =
PASS_INTERNAL_FAILURE_CONTRACT. Le passage ciblé associé couvre 76 tests
passés; il ne lance ni couverture ni suite complète. Les gates restent
volontairement OPEN, car ces preuves proviennent encore d'un worktree dirty
et doivent être régénérées sur le SHA candidat avant toute clôture.
Etat courant apres release hardening — 2026-08-26¶
Les observations historiques ci-dessus sont supersedees par la qualification
de release hardening suivante. Le candidat source est la révision indiquée par
source_sha dans le manifeste généré; le calcul de propreté source est PASS
et aucune modification source ne subsiste. Les sorties générées après
checkout sont des preuves dérivées et sont exclues de ce calcul conformément
au contrat source_sha.
qf_solver.py verify-all --profile engineeringtermine enPASSsur le candidat : 1 636 tests sélectionnés (1 622 passed,14 skipped), 187 désélections prévues, sans échec.- La campagne de couverture finale disponible mesure 88,36 % avec la
politique
--cov-fail-under=80. Elle a signalé uniquement un décalage du compteur de l'audit public; l'audit a été régénéré à 1 901 fichiers, 0 finding et les tests affectés ont ensuite produit 2 passed. Les derniers changements de code sont danssolveur.verification, explicitement omis du périmètre coverage, et ne modifient donc pas ce résultat mesuré. - La documentation engineering a été générée depuis ce SHA exact : 706
artefacts, campagne
PASS;docs/generated/docs_manifest.jsonporte unsource_shaégal au HEAD au moment de la génération. - Le build isolé a produit
qf_solver-0.2.5a0-py3-none-any.whletqf_solver-0.2.5a0.tar.gz;twine check, l'installation fraîche de la wheel, les imports publics et l'aide CLI sont passants. - Ruff, le contrôle mypy progressif CI et
compileallsont passants. Le contrôle mypy exhaustif de toutsrc/solveurreste une dette historique hors commande CI et ne constitue pas une nouvelle régression de ce candidat. - Les preuves Code_Aster J2 bornées et les campagnes internes restent disponibles. Les corrélations CalculiX partielles, les profils répétés et les capacités avancées non entièrement qualifiées restent documentés comme limites; elles ne sont pas promues par ce hardening.
Depuis cette synthèse, 025-G03 a été clôturée en périmètre borné après
correction de la rigidité géométrique initial-stress et rattachement de la
preuve Euler quatre niveaux et de la sonde Code_Aster TET4 au SHA propre
85c75d06955976251dd54ad782f57f1eb5a7f8f4. Les limites TET10/HEX8/HEX20
externes, post-buckling et imperfections restent explicitement hors scope.
Les autres gates conservent les statuts indiqués dans la matrice contrôlée;
025-G07 reste NOT_IN_RELEASE_SCOPE. Aucun tag, push GitHub ou upload PyPI
n'a été exécuté.
G05 controlled closure update¶
The historical WP5 implementation observations above describe the pre-closure
state and remain intentionally conservative. The current controlled replay is
recorded in results/vnv_0_2_5/g05_latest/ with source SHA
a3ab8de707ffc88fc5e39e4f999eb872c9223b73 and dirty=false. It reports
82 passed / 2 skipped in the contact-focused unit selection, a bounded
penalty sweep from 1e2 to 1e6, and PASS internal observations for updated
normals, three-facet traversal, recontact and facet-transition rollback.
Code_Aster additional-contact histories pass for the 768- and 9,984-element
TET4 confirmations. Accordingly 025-G05 and WP5 are now
CLOSED_BOUNDED / PASS only for the explicit node/patch-to-triangulated-
surface frictionless contract. This update does not qualify general
surface-to-surface contact or close G06, G10, G11 or G12.