[Doc] Results pipeline for the documentation, and a gallery of problems
Mantenedores costumam responder em até 1 dia
@ocots já está trabalhando nisso.
Desde 4/11/2026.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
Agents: read the guide for agents in #310 first (order, difficulty, how to claim an issue, working method). The specification is in this description and in the comments below.
Updated on 2026-11-06 after #360 (convergence is reported, not tested) and #375 (reference objectives); results now come from the convergence cron. Where an older comment contradicts this description, the description wins; what changed is listed in the update comment.
Goal
Separate the computations shown in the documentation (solving every problem, plots), which are long and may fail, from the documentation build, which must be fast and never fail because of a problem. Jobs compute results and store them; the documentation only reads what exists; each problem page shows the results if they exist and are up to date, says so otherwise. Problem pages are reached through a gallery instead of a list in the sidebar.
One source of results: the convergence cron (decision of 2026-11-06). Since #360 and #375, the weekly cron of each scope already solves every problem, in every modeling and configuration, on its default grid, and publishes the results on the results branch (*-results.tsv: solver status, objective, iterations, time, gap to the reference). The documentation results come from these runs, not from a second computation: the cron jobs also write result.json, the plots and the environment of the run (below). No separate computation workflow to keep in sync with the tests.
Part of #307. Related: #305 (crons write their reports to the same branch), #306 (features for the gallery filters), #134 (visualize), #311 (VitePress).
Storage: a results branch
- The orphan branch
results(exists since #305:cron/with the reports andstate.json; protected against deletion by the rulesetprotect-results), rewritten with a single commit on each update so that it does not grow. Not a tracked directory inmain(regenerated SVGs would bloat the history). - Written only by the publish job of the crons (
.github/workflows/cron-reusable.yml, concurrency groupcron-results). - Locally: a git-ignored directory (e.g.
docs/results/) filled by a script, so the documentation also builds offline and in previews.
results/ # branch `results`
├── manifest.json # date, commit, list of runs
├── env/<run id>/ # environment of each computation run
│ ├── Project.toml, Manifest.toml
│ ├── versioninfo.txt # output of versioninfo()
│ └── status.txt, status-manifest.txt # Pkg.status(), Pkg.status(mode=PKGMODE_MANIFEST)
├── problems/<problem>/
│ ├── result.json # per modeling and configuration: solver status, objective, iterations, time, gap to the reference; fingerprint; run id
│ ├── state.svg, control.svg, costate.svg
│ ├── visualize.svg # if the problem has a visualisation (#134)
│ └── thumbnail.svg # for the gallery
└── cron/ # reports of the crons (#305)
Robustness
-
One writer. The test jobs of the crons run in parallel (per scope and platform) and only upload workflow artifacts; the publish job collects them and makes the single commit (as today for the reports). No concurrent writes; a failing problem does not prevent the others from being published. Plots need
Plotsin the cron environments (or a step after the solves): to decide when taking the issue. -
Freshness. Each
result.jsonrecords a fingerprint: a hash of the problem files (metadata, model files of every modeling, description) and the versions of the packages used. At build time the documentation recomputes the fingerprint and shows, per problem:- up to date: the results;
- stale: the results, marked "computed for commit X";
- missing: "results not computed yet".
The build never fails on missing or stale results.
-
Triggers of the computations: those of the crons (weekly per scope,
workflow_dispatch); to add if needed: a push tomainthat changes a problem (only problems whose fingerprint changed), through the same cron workflows withproblem=…. The documentation workflow never triggers or waits for them. -
VitePress: copy the results into
docs/src/public/results/beforemakedocs(VitePress silently drops files it does not recognise outsidepublic/, see the notes on the VitePress backend in ct-conventionsrules/site.md).
Problem pages
Generated, never hand-written (docs/problems.jl today):
- description (
ext/Descriptions/<p>.md), parameters, features (#306), status per modeling (#303), references; - how to get and solve it in each modeling where it exists (short code, not executed beyond trivial calls);
- results from
result.json, with the freshness badge: solver status and gap to the reference per configuration, no ✓ or ✗ on convergence (#360, #307); plots as SVG (ruleSITE12),visualize.svgwhen it exists; - Reproducibility block, same presentation as the OptimalControl.jl documentation (
docs/src/index.md, section "Reproducibility"): a table to downloadProject.tomlandManifest.tomlof the run that produced the results, and a collapsible::: detailsblock withversioninfo,Pkg.status()and the full dependency tree, read fromenv/<run id>/(they cannot be executed at build time, since the results come from another environment).
No heavy computation at documentation build time: the only code executed by the build is short (tutorials, trivial calls).
Gallery
Replaces the list of problems in the sidebar, since the collection will grow quickly:
- one card per problem: thumbnail (
thumbnail.svg, or the visualisation), name, modelings and statuses, tags; - filters by modeling, status, tag and features (dimensions, free final time, constraints);
- a Vue component (see
docs/src/components/in CTBase.jl), with the existing interactive table (docs/browser.jl) as a second view of the same page, or replaced by it.
Done when
- The cron workflows write
result.json, the plots andenv/<run id>/for each run, through the existing publish job; branchresultsrewritten with one commit. - Fingerprint computed identically by the jobs and by the documentation build; up to date / stale / missing shown on the pages, shown on purpose for each case.
- Local script filling
docs/results/; documentation builds with no results at all. - Problem pages generated with results, plots, visualisation and Reproducibility block.
- Gallery page with filters; problems removed from the sidebar list.
- Documentation build time reported before and after.
- Linguagem predominante
- Julia
- Estrelas
- 13
- Forks
- 1
- Merge médio
- 3h 33min
- PRs com merge (30d)
- 55
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de control-toolbox/OptimalControlProblems.jl
-
[Cron/Doc] ModelingToolkit convergence cron, trajectories, and documentation (#308)Talvez já em andamento @ocots assumiu hoje. Abertadocumentation feature
control-toolbox/OptimalControlProblems.jl#439 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Tests] Corleone solve helper and ModelingToolkit test suite (smoke, equivalence, reference solution) (#308)Talvez já em andamento @ocots assumiu hoje. Abertafeature
control-toolbox/OptimalControlProblems.jl#438 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Problems] ModelingToolkitBackend, extension ModelingToolkitModels, and continuous bryson_denham (#308)Talvez já em andamento @ocots assumiu hoje. Abertafeature
control-toolbox/OptimalControlProblems.jl#437 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
cron-convergence
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 32/100
control-toolbox/OptimalControlProblems.jl#436 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
[Cron] cron-failureAbertacron-failure
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
control-toolbox/OptimalControlProblems.jl#435 · 5 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de control-toolbox/OptimalControlProblems.jl
Issues semelhantes
-
Pin the porting environmentAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
FluxML/Metalhead.jl#407 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
SciML/ModelingToolkit.jl#5371 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 73/100
Mantenedores costumam responder em até 1 dia
-
GNNLux MEGNetConv drops the state of stateful sublayersTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertalux
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
JuliaGraphs/GraphNeuralNetworks.jl#732 ·
Mantenedores costumam responder em até 2 dias
-
query handling with arrays has changed between 1.x and 2.xTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia