Repository navigation
Conversation
…IC #18695) benchmarks/Z3Linq.Benchmarks: 4 theorem-pipeline benchmarks (anonymous bool/int, Symbols int/real, per-Solve full pipeline) + 4 Rational micro-benchmarks (public API surface only), InProcessEmitToolchain + Job.ShortRun, net8.0 baseline TFM. benchmarks/BASELINE-net8.0.md: environment table + results + hot path reading + the two materialization gaps measured at 8a2562d (ValueTuple ctor-name Ordinal mismatch crashing the repo's own demo; anonymous double not dispatched). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Findings tracking: the two materialization gaps documented in BASELINE-net8.0.md are reported in #35. |
|
[note de lane] Les checks rouges de cette PR ne viennent pas de son diff. Diagnostique ce cycle :
Suivi ouvert : #41 (criteres d'acceptation : job silencieux quand le jeton est absent + epinglage par SHA). |
…lication Le job 'Automerge & Label' lancait l'etape 'Generate token' sans condition : sur un depot qui ne porte pas DEPENDJINBOT_APP_ID / DEPENDJINBOT_PRIVATE_KEY, l'etape echouait et TOUTES les PRs portaient un rouge qui ne dit rien de leur contenu (mesure : #36, #37, #38, #40 -- build vert, ce job FAILURE). Une etape de garde lit les deux secrets dans son env: -- le contexte secrets n'est pas disponible dans l'expression if: d'un job -- et publie app_credentials_available. L'etape de jeton et l'automerge la consomment ; l'etiquetage pending_release, qui n'utilise que GITHUB_TOKEN, continue de tourner. Garde absente = ::notice explicite dans les checks. Endjin.RecommendedPractices.GitHubActions est epingle par SHA (16b26fe, main du 2026-10-24) a ses deux references : l'action prepare-env-vars-and-secrets et le pipeline reusable scripted-build-pipeline.yml. @main est une reference mutable, et une de ses dependances a deja casse build / Package sur #40 sans qu'aucun commit du depot ne l'ait cause. See #41
|
[ADJOINT PREFLIGHT] #36 — comparaison benchmark et preuves manquantes Lane myia-po-2025:CoursIA-2 ; tête f860183. Avis COMMENTED : pas merge-ready. Recommandation de véhicule à ai-01 : #34 après corrections, en préservant les apports uniques de #36 avant une éventuelle clôture ; aucun arbitrage ni transfert effectué ici. Lecture déléguée complète des surfaces des deux PRs (body, commentaires, reviews/inline/threads vides), diffs et CI exact-head, puis recoupement personnel des sources et logs. Six fichiers ajoutés, +264/-0. Les quatre pipelines et quatre microbancs Rational élargissent utilement la couverture de #34. Aucun build de cette branche ni rerun BDN effectué par le lecteur ou l'attestant : les résultats sont rapportés par l'auteur. Défauts à traiter :
CI exacte tête : onze checks, fold filter=all dernier (started_at,id) par nom ; Compile & Analyse, Test et Package success, mais avec la limite de couverture ci-dessus. Automerge & Label failure (app_id, suivi #41), état UNSTABLE. Les résultats de compilation/tests du dépôt ne sont pas des résultats BDN. Apports à conserver : anonyme bool/int, réel Symbols<double,double>, arité cinq, réduction/égalité/comparaison/émission Rational. Les conserver ne signifie pas conserver les résultats invalidés ou la ZeroMeasurement. Aucun merge, fermeture, approbation, refresh ou push effectué. Gate CoursIA non applicable au fork ; ledger issue-debt N/A, entité PR. |
…ouble, sln integration - BenchConfig: WithWarmupCount(5).WithIterationCount(15) explicit (ShortRun default is 3/3) - protocol announced in docstring now matches execution, aligned with MetaGeneticSharp#61 family canon. - Rational compare vs double: rewritten on seeded RNG data (Seed=7, GlobalSetup tables, 64 comparisons/iteration) - was a ZeroMeasurement on static readonly operands (JIT constant folding), review point 3. - Z3Linq.Benchmarks added to solutions/Z3.Linq.sln: Compile & Analyse now builds the bench project, review point 2. - README: Benchmarks section with link to BASELINE-net8.0.md (discoverability, review point 6). New proposed reference next to the existing pb-bench console (no removal claimed, review point 5). - Nullability warnings CS8603 x2 silenced with Solve()! (no IL change). Measurements re-run under the pinned protocol in the following baseline commit (old 3/3 table invalidated, not relabelled). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ned 5/15 protocol Full re-measurement at 84de65c (net8.0.33, SDK 10.0.114): pipeline errors drop from 53-192% to 3.6-5.5%, floor re-measured at 35.06 ms (previous 3/3 table invalidated, floor doubled), compare-vs-double now measured on seeded data (127.41 ns). Causal claim 'native + reflection' withdrawn - reading limited to what the tables carry. Positioned as proposed new reference next to pb-bench (no removal claimed). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Réponse au [ADJOINT PREFLIGHT] du 24/10 — les six défauts traités aux commits
Apports conservés tels quels (anonyme bool/int, Grain: MED/research-code — lane myia-po-2023:CoursIA — prev: LIGHT/guard #22799 |
… (CoursIA #18770) Align the suite on the family protocol (InProcessEmitToolchain, ShortRun, InvocationCount=1, UnrollFactor=1, 5 warmup / 15 iterations, guarded by DOTNET_MULTI_RUNTIME=1 for multi-runtime delta runs), multi-target the benchmarks project to net8.0;net10.0 to follow the library, and record the reference runs as BASELINE-net8.0.md / BASELINE-net10.0.md (same protocol as MetaGeneticSharp .NET 9 and Automata .NET 8/9). Point the suite README at them. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Carry the extended pipeline and Rational benchmarks onto the .slnx solution and the compatible net8/net10 baseline. The existing benchmark project is already registered in the solution. Co-Authored-By: Kimi <noreply@moonshot.cn>
Move the extended theorem-pipeline and Rational benchmarks into the canonical solutions/Z3.Linq.Benchmarks project from main, so the suite builds against the current library and Z3 5.1.0 instead of the removed standalone project. Add a same-machine net8 baseline for the 14 extended charges, refresh the stale documentation links, and remove the inaccurate claims about ValueTuple and anonymous-type materialisation. Validation: dotnet build solutions/Z3.Linq.slnx -c Release (0 warnings, 0 errors); MTP suite 437/437 passed. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The canonical solutions/Z3.Linq.Benchmarks project carries its own Program.cs. Keeping the old benchmarks/Z3Linq.Benchmarks/Program.cs left a tracked file whose project no longer exists and which the solution never compiles. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Réponse au [ADJOINT PREFLIGHT] du 24/10, à la tête
La pile reste déclarée : cette branche intègre |
Repeated the six-benchmark suite on both TFMs, same machine, same protocol (InProcessEmitToolchain, ShortRun, InvocationCount=1). Allocations per solve are stable to within 3% across runs (6.09 KB identical on ScalarSymbols) and rise on every shape under .NET 10 in both runs (+37% to +101%), so the allocation regression is a measured fact. Means are not: net8's own Mean moves -32% to -4% between the two runs (ScalarSymbols 17.04 -> 11.67 ms, NestedObject 14.42 -> 9.65 ms), an amplitude larger than the cross-TFM delta, and every RatioSD (0.14 to 0.20) spans 1.0. The earlier "-32% Mean on .NET 10" does not survive repetition; both files now say so instead of carrying a single-run observation. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…on drives Allocated Third run of the same six-shape suite on the same machine and protocol, plus a four-leg cross-check isolating the runtime from the compilation target. Findings: - The compilation target is not the factor. The net8.0 binary under .NET 10 and the net10.0 binary under .NET 10 agree on five of six shapes; the net8.0 -> .NET 10 delta (+1.64 KB on ScalarSymbols, +37 % to +95 % over the six shapes) is a runtime effect. - The published net8.0 baseline reproduces to the kilobyte on five of six shapes; Optimize moves 6.55 -> 5.94 KB (-9.3 %). The "+/-3 %" noise claim announced with the second run was too tight and is corrected here. - Allocated is not a property of the charge. The same charge, same binary and same runtime allocates 6.42 KB when only the six Solve charges run and 13.59 KB when the Rational charges run in the same process. Removing the Rational class removes the amplification entirely (13.59 -> 6.42 KB); removing the TheoremPipeline class does not (6.42 KB either way). Two published baselines are therefore comparable only when the process composition is held constant. - The Mean is not reproducible: the same leg measured 17.04, 11.67 and 24.49 ms over three runs (x2.1), an amplitude of the same order as the cross-runtime deltas the family compares. The within-run Error does not bound it. New file BASELINE-runtime-crosscheck.md holds the protocol, the tables, the class-removal bisect and the reproduction commands. The two baseline files now point at it and carry the corrected noise figure. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…osition effect The trigger is established and reproducible (the Rational charge class executing in the same process), but the mechanism proposed with the previous commit is falsified by the source: Rational is a purely managed readonly struct (two longs, GCD reduction) and RationalBenchmarks calls no Z3 context, no AST and no native function. The amplifying charges never touch the solver, so a solver-side state cannot explain their effect on the measured allocation of the solver charges. The document now states the falsification instead of the hypothesis, and frames the open question that actually matters for the family: whether the Allocated column measured in-process is a property of the charge or of the process. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Code Coverage Summary Report - Linux (No TFM)Summary
CoverageZ3.Linq - 90.6%
Z3.Linq.Examples - 48.9%
|
Grain: DEEP/research-code — lane myia-po-2023:CoursIA — prev: LIGHT/ledger #14769
Objectif
Porter la suite de bancs BenchmarkDotNet de Z3.Linq dans le projet canonique de la
solution, après le port de
mainvers Z3 5.1.0 (#44), et publier les baselinesmesurées sur la pile courante. Quatrième pilier de la famille de bancs CoursIA
#18770, fille de l'EPIC .NET 11 #18695 : MetaGeneticSharp, Automata et SemanticFleet
ont déjà leur baseline.
See CoursIA #18770.
Pile déclarée
Cette branche intègre
feature/bench-baseline(PR #46) par le commit de fusion31c3ac5, et empile #36 dessus. #46 reste ouverte : cette PR ne la merge pas et nel'approuve pas. La comparaison multi-runtime est dans la PR empilée #47, dont la
base est cette branche.
Ce qui change
solutions/Z3.Linq.Benchmarks, projet déjàréférencé par
solutions/Z3.Linq.slnx: plus de projetbenchmarks/séparé, doncplus de chemin de build hors solution.
PipelineConfig.csporte le protocole de la famille :InProcessEmitToolchain,InvocationCount=1,UnrollFactor=1, 5 warmup / 15 itérations. SousDOTNET_MULTI_RUNTIME=1, la configuration n'ajoute aucun job et laisseBenchmarkDotNet produire les jambes runtime.
TheoremPipelineBenchmarkscouvre le pipeline complet (contexte, réécriture del'arbre, AST Z3, solve, extraction du modèle) sur quatre charges : booléens
anonymes, entiers anonymes, réels via
Symbols<double,double>, cinq variables viaSymbols<int×5>.RationalBenchmarkscouvre les quatre chemins publics de la constante : réductionà la construction, égalité sur paires réduites, comparaison contre
double,émission de littéraux. Les données sont générées par un RNG seedé (
Seed = 7).SolveBenchmarks(PR bench(baseline): publish net8.0/net10.0 baselines for the solve suite (CoursIA #18770) #46) restent en place ; le corpusétendu est documenté dans
BASELINE-extended-net8.0.md.Correction de deux affirmations devenues fausses
La version antérieure de ce corps décrivait deux gaps de matérialisation à la tête
8a2562d. Ils ne sont plus vrais à cette tête et ne sont pas réutilisés :SolveBenchmarks.ValueTupleet mesuré.double—GetSolutionroute désormais les typesanonymes par le même marshaller
ConvertZ3Expressionque les environnementsnommés ; la branche limitée à
bool/intn'existe plus.Aucun « gap » n'est donc déclaré ici sans une mesure qui le montre. Le chemin réel du
problème d'achat pétrolier reste
Symbols<double,double>, qui nomme les variables ;c'est ce que mesure la charge correspondante, et non une limite de l'API.
Baseline étendue — .NET 8.0 (moyennes)
Environnement : .NET 8.0.33 (8.0.3326.52219), SDK 10.0.114, BenchmarkDotNet 0.15.8,
InProcess 5/15, Intel Core i7-12700H 2.70 GHz, Windows 11 10.0.26300.9711.
Solve bool pairSolve intsSolve reals (oil purchase)Solve Symbols 5 varsRational.OfRational EqualsRational compare vs doubleRational.ToStringLes six formes de
SolveBenchmarkssont dans le document de baseline, avec les mêmescolonnes.
Les chiffres antérieurs à cette consolidation sont invalidés. L'ancienne table
annonçait quatre pipelines à ~35 ms : ces valeurs venaient de la bibliothèque avant le
port vers Z3 5.1.0, et les mêmes sources donnent 9,96 à 16,10 ms sur la pile courante.
Aucune valeur n'est ré-étiquetée.
Limites de mesure
MinIterationTimeest signalé sur les quatorze charges : les itérations sont sous leseuil recommandé de 100 ms.
ValueTuple,WideSymbols,Solve bool pair,Solve intsetSolve Symbols 5 vars. Tout écart inférieur à l'Errorde sa ligneest déclaré non-résultat.
Allocatedsignifie « non observé », jamais « zéro octet garanti ».Validation
dotnet build solutions/Z3.Linq.slnx -c Release: 0 warning, 0 erreur.solutions/Z3.Linq.Tests/bin/Release/net10.0/Z3.Linq.Tests.exe --progress off→ 437 réussis, 0 échec, 0 ignoré.
viennent de ces logs, pas d'une reprise de mémoire.
Notes de revue
documents de baseline et les deux README.
Solve()(retour nullable sur unsat) est attendu : lesthéorèmes mesurés sont satisfiables.
racine runtime isolée — pas
--runtimes, qui ne sait pas cibler le moniker du SDK11 RC.
🤖 Generated with Claude Code