Replies: 3 comments
|
Thanks for writing this up, and for checking the existing artifacts first. This fills a real gap. Today On your open questions:
One change worth making: write the redacted resolved config rather than only a SHA-256 of it. A hash tells you two runs differ but not how, and the config is small. Hashes still make sense for the initial program and evaluator since those are user files. If you write the config, redact I would also drop the measurement-source field and make it default on with no config flag. |
|
Thanks — this is very helpful, and I agree with the direction.
I’ll keep this in the evolution lifecycle (run_evolution) so library users receive the same artifact, write it as a separate JSON manifest rather than checkpoint metadata, and make it default-on.
I’ll use the closed stop-reason set you suggested, omit API origin entirely, and write a redacted resolved config instead of only its hash. The initial program and evaluator will remain SHA-256 references. I’ll also explicitly cover both llm.api_key and llm.models[*].api_key in the redaction tests.
I’ll drop measurement_source and come back with a small backward-compatible PR plus tests.
…---Original---
From: "Asankhaya ***@***.***>
Date: Wed, Jul 29, 2026 10:36 AM
To: ***@***.***>;
Cc: ***@***.******@***.***>;
Subject: Re: [algorithmicsuperintelligence/openevolve] Proposal: redacted run provenance manifest for reproducible evolution experiments (Discussion #475)
Thanks for writing this up, and for checking the existing artifacts first. This fills a real gap. Today metadata.json is pure evolution state, the trace metadata is just created_at plus the include flags, and the resolved config is never written to the output directory at all. Once CLI overrides are applied there is no record on disk of what actually ran.
On your open questions:
Own it in the evolution lifecycle, not the CLI. openevolve/api.py exposes run_evolution for library use, and those runs should get a manifest too.
Separate JSON file. Checkpoint metadata gets read back on resume, so I would rather not mix provenance into it.
Keep it small and closed: completed, max_iterations, interrupted, error.
Omit the API origin entirely. Model and provider names are enough.
One change worth making: write the redacted resolved config rather than only a SHA-256 of it. A hash tells you two runs differ but not how, and the config is small. Hashes still make sense for the initial program and evaluator since those are user files. If you write the config, redact llm.api_key and llm.models[*].api_key, the nested one is easy to miss.
I would also drop the measurement-source field and make it default on with no config flag.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications, keep track of coding agent tasks and review pull requests on the go with GitHub Mobile for iOS and Android. Download it today!
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
|
Thanks again for the guidance. I have opened a small draft implementation at #476. It owns the manifest in the evolution lifecycle, writes a separate atomic JSON file by default, records the redacted resolved config, uses the closed stop-reason vocabulary, omits API origins, and covers top-level plus per-model API-key redaction in tests. I kept checkpoint metadata and research-workflow features out of scope. |
Uh oh!
There was an error while loading. Please reload this page.
Motivation
OpenEvolve already records detailed candidate-level information through
EvolutionTrace, program metadata, checkpoints, and lineage extraction. What appears to be missing is a small run-level provenance record that ties those artifacts to the exact inputs and execution environment that produced them.A machine-readable manifest would help users compare runs, diagnose irreproducible results, and prepare research artifacts without duplicating trace or checkpoint data.
Proposed scope
Write one redacted JSON manifest under the run output directory, for example
run_manifest.json, with a versioned schema containing:schema_versionand a generatedrun_id;The manifest should be written atomically and updated at lifecycle boundaries so interrupted runs still retain useful provenance.
Redaction and safety requirements
The manifest should never contain:
Credential environment-variable names could be recorded only if maintainers consider that useful and safe.
Non-goals
EvolutionTrace, checkpoint metadata, orEvaluationResult.Compatibility
The feature could be additive and backward-compatible. Readers should ignore unknown fields, and older checkpoints should continue to load without a manifest. The CLI/library could enable it by default or behind a small configuration flag depending on maintainer preference.
Open questions
If this belongs in core, I can prepare a small PR with the schema, redaction tests, lifecycle tests, and backward-compatibility coverage after the maintainers confirm the preferred ownership and file location.
All reactions