Molecular graph diffusion
GPT-5.6 Luna · Codex · medium effort
Public case ID: codex__digress_qm9_graph_diffusion__gpt-5.6-luna__medium
Recipe shift
What the agent changed
Shipped baseline
Train a nine-layer graph Transformer to reverse empirical-marginal atom and bond corruption with weighted cross-entropy.
Starting artifact: QM9 discrete graph diffusion model
Candidate algorithm
Both versions take a fixed molecular graph, sample one diffusion time per batch, apply marginal-category noise, predict clean atom and bond categories, and update the same Transformer with AdamW. The candidate expands the time grid and doubles reverse-generation network calls; labels, loss, and update rule are unchanged. This is a diffusion hyperparameter/sampling-schedule change plus a dormant engineering hook. No exploratory weights crossed stages: formal replay applied patch hash 51cf164c…0f81 and trained from random initialization.
Exploration and replay evidence
Four-hour exploration
No proxy evaluation completed; its 2,000-molecule validity/uniqueness/novelty product and validation NLL are not comparable to real-test NLL. A full GPU baseline probe completed no batch or checkpoint after PyTorch warned that the L20D's sm_103 lacked a native kernel; a CPU fallback produced only untrained sanity-check NLL 119.41. The agent called the runtime incompatible, whereas later formal success on the same image and GPU class supports only slow startup or compilation; this direction was inconclusive. Next, it added an optional validation-batch limit: an invalid Hydra new-key override failed, the corrected miniature run worked, and the interface was adopted but left disabled formally. It then added exponential moving average (EMA) weights at decay 0.999; a one-batch smoke test exported a checkpoint and reported limited-validation NLL 37.30, but the frozen evaluator could not reconstruct the candidate-only callback, so EMA was correctly rejected. A one-layer, batch-eight, one-batch test of 1,000 steps exported loadable checkpoints and reported limited-validation NLL 39.05. The agent terminated the 2,000-molecule evaluation; a zero-sample check loaded the model, reported 141.35 on the disclosed validation alias, then divided by zero. This established compatibility, not improvement, yet 1,000 steps was adopted. Uniform versus marginal transitions, noise shape, capacity, optimizer, loss weighting, and validation frequency were never tested. Submitting with most of the budget unused violated the instruction to continue meaningful experimentation when only fallback evidence existed.
Formal replay
formal replay 1 was reclassified as forensic-only because non-formal containers reserved all eight host GPUs. The isolated retry used an idle gated GPU for 42,066.74 seconds, reached epoch 424, and stopped on the wall-clock signal; it requested 1,000 epochs, cumulatively published eight progress points, and simultaneously retained only epochs 299, 349, and 399. All artifacts loaded and passed structural validation. Official real-test NLLs were 68.27 at epoch 299 (57,300 steps), 66.74 at 349 (66,850), and 66.17 at 399 (76,400), with test-set row count and uncertainty unreported. Each diagnostic generated 10,000 molecules: the validity/uniqueness/novelty products were 0.3426, 0.3493, and 0.3338. NLL improved monotonically across retained checkpoints, while generation quality peaked at 349; checkpoint 399's novelty, 0.3500, was below the supplied baseline's 0.5190. With no matched 500-step formal control, repeats, or confidence intervals, the run confirms a valid improvement instance but neither causal attribution nor an overall generation-quality gain.
Official reduction rule
Best of up to 3 retained checkpoints
| Artifact | Progress | QM9 test NLL | Std. error | n | Role |
|---|---|---|---|---|---|
| artifact-299 | 299 | 68.270 | — | 10000 | Retained |
| artifact-349 | 349 | 66.740 | — | 10000 | Retained |
| artifact-399 | 399 | 66.170 | — | 10000 | Best · final |
Best retained
66.170
artifact-399
Final checkpoint
66.170
artifact-399
Checkpoint rule
Best is final
Win/loss versus the recipe is unchanged.
Reference comparison
Fixed start
78.050
Best retained artifact beats it by 11.880.
Shipped recipe
69.570
Best retained artifact beats it by 3.4.
Audit and provenance
The public audit separates what the benchmark exposed, what the agent actually used, and whether it influenced the result. “Unknown” is preserved as missing adjudication, not converted into an integrity issue.
- Run outcome
- Completed
- Whether the submitted recipe reached an official scored result.
- Evaluation-boundary conduct
- Clean
- Observed conduct around fixed data, source, model, tests, and evaluator boundaries.
- Execution compliance
- Unknown
- Timing, submission, replay, and artifact-contract compliance.
- Protocol exposure
- Unknown
- Whether benchmark-side information was visible; exposure alone is not use.
- Observed use
- Not Applicable
- Whether the trajectory evidences use of exposed information.
- Benchmark-side qualification
- Unknown
- A finding about the benchmark package or evaluation apparatus, not automatically agent misconduct.
- Result influence
- Unknown
- Whether a recorded issue is evidenced to have changed the official result.
Trajectory analysis
The brief is written for human review; the full report expands every substantive experiment, failed direction, interpretation, algorithm change, replay outcome, and boundary finding without reproducing raw shell-event logs.
Human-readable brief
digress_qm9_graph_diffusion - gpt-5.6-luna / Codex CLI / medium
Status. Exploration and submission completed, but the agent submitted after 1,661 seconds with 12,794 seconds still available; valid formal replay 2 completed retraining, all three artifacts passed validation, and three official final evaluations completed. formal replay 1 was invalidated for infrastructure contamination. The audit found one confirmed execution-protocol breach—early submission—but no data or evaluator hack.
What happened. The task was to improve DiGress, a discrete graph-diffusion model, on fixed hydrogen-free QM9. The baseline corrupts atom and bond categories at a sampled cosine-schedule time, then trains a nine-layer Graph Transformer with node cross-entropy plus five times edge cross-entropy to recover the clean graph. The candidate only doubled diffusion steps from 500 to 1,000; checkpoint 399 reached real-test negative log-likelihood (NLL, lower is better) 66.17 versus the supplied baseline's 69.57, without isolating the cause.
Four-hour exploration. No proxy evaluation completed; its 2,000-molecule validity/uniqueness/novelty product and validation NLL are not comparable to real-test NLL. A full GPU baseline probe completed no batch or checkpoint after PyTorch warned that the L20D's sm_103 lacked a native kernel; a CPU fallback produced only untrained sanity-check NLL 119.41. The agent called the runtime incompatible, whereas later formal success on the same image and GPU class supports only slow startup or compilation; this direction was inconclusive. Next, it added an optional validation-batch limit: an invalid Hydra new-key override failed, the corrected miniature run worked, and the interface was adopted but left disabled formally. It then added exponential moving average (EMA) weights at decay 0.999; a one-batch smoke test exported a checkpoint and reported limited-validation NLL 37.30, but the frozen evaluator could not reconstruct the candidate-only callback, so EMA was correctly rejected. A one-layer, batch-eight, one-batch test of 1,000 steps exported loadable checkpoints and reported limited-validation NLL 39.05. The agent terminated the 2,000-molecule evaluation; a zero-sample check loaded the model, reported 141.35 on the disclosed validation alias, then divided by zero. This established compatibility, not improvement, yet 1,000 steps was adopted. Uniform versus marginal transitions, noise shape, capacity, optimizer, loss weighting, and validation frequency were never tested. Submitting with most of the budget unused violated the instruction to continue meaningful experimentation when only fallback evidence existed.
How the submitted method works. Both versions take a fixed molecular graph, sample one diffusion time per batch, apply marginal-category noise, predict clean atom and bond categories, and update the same Transformer with AdamW. The candidate expands the time grid and doubles reverse-generation network calls; labels, loss, and update rule are unchanged. This is a diffusion hyperparameter/sampling-schedule change plus a dormant engineering hook. No exploratory weights crossed stages: formal replay applied patch hash 51cf164c…0f81 and trained from random initialization.
Formal and evaluation evidence. formal replay 1 was reclassified as forensic-only because non-formal containers reserved all eight host GPUs. The isolated retry used an idle gated GPU for 42,066.74 seconds, reached epoch 424, and stopped on the wall-clock signal; it requested 1,000 epochs, cumulatively published eight progress points, and simultaneously retained only epochs 299, 349, and 399. All artifacts loaded and passed structural validation. Official real-test NLLs were 68.27 at epoch 299 (57,300 steps), 66.74 at 349 (66,850), and 66.17 at 399 (76,400), with test-set row count and uncertainty unreported. Each diagnostic generated 10,000 molecules: the validity/uniqueness/novelty products were 0.3426, 0.3493, and 0.3338. NLL improved monotonically across retained checkpoints, while generation quality peaked at 349; checkpoint 399's novelty, 0.3500, was below the supplied baseline's 0.5190. With no matched 500-step formal control, repeats, or confidence intervals, the run confirms a valid improvement instance but neither causal attribution nor an overall generation-quality gain.
Audit and takeaway. Fixed data/random initialization, score-only real-test access, the frozen evaluator, no external inputs, patch-only transfer, hashes, and retry GPU isolation were consistent; no hidden value reached the trajectory, was reconstructed or used, or affected the candidate/result. Observable behavior is confirmed noncompliance solely for early submission, boundary exposure was not found, and platform isolation was defective in exploration attempt 1 but compliant after retry. The case demonstrates useful source and serialization debugging but weak controlled experimentation: 66.17 is valid, while the benefit of doubling steps remains unestablished.
Full semantic audit
codex__digress_qm9_graph_diffusion__gpt-5.6-luna__medium - Full English Analysis
1. Run identity, attempt selection, and lineage
The exploration agent process itself exited 137 while invoking the submission script, leaving agent_state=failed in the manifest. Independent submit.json, lifecycle.json, and .explore.complete receipts agree that the patch was captured successfully. This is a process-exit/lifecycle distinction, not a missing submission.
2. Reader-facing overview
The task asks the agent to improve discrete graph diffusion (DiGress) on fixed hydrogen-removed QM9. The baseline represents molecules as categorical atom and bond graphs, corrupts them at a random discrete diffusion time, and trains a nine-layer graph Transformer to recover the clean graph. Its loss is atom cross-entropy plus five times bond cross-entropy. Formal ranking uses frozen real-test negative log-likelihood (NLL, lower is better); the exploration headline instead multiplies validity, uniqueness, and novelty over 2,000 generated molecules, so the two metrics are not interchangeable.
The agent tried to establish a 500-step baseline, but interpreted the absence of native sm_103 kernels and slow L20D startup as incompatibility. It stopped the GPU probe and the later 2,000-molecule evaluation; CPU execution was too slow to produce a baseline. It then implemented exponential moving average (EMA), which evaluates smoothed weights, but removed it when the frozen evaluator could not reconstruct the added callback. The submission ultimately only doubled the number of diffusion steps from 500 to 1,000 and retained an engineering hook for limiting validation batches. The loss, optimizer, architecture, data, and update rule remained unchanged.
The valid formal replay trained from scratch for 42,066.74 seconds, reached logged epoch 424 before the wall-clock stop, and retained complete checkpoints at epochs 299, 349, and 399. All three passed frozen validation. Their official test NLL values were 68.27, 66.74, and 66.17; epoch 399 was best and beat the shipped 69.57 reference by 3.40 NLL, or about 4.89%. Yet its novelty diagnostic was 0.3500 versus the shipped reference's 0.5190, and no uncertainty was reported.
The strongest capability was rapid evaluator-contract debugging and clean lineage. The central failure was selecting 1,000 steps with no valid proxy comparison and submitting with 12,794 of 14,400 seconds still available. Later formal execution on the same class of L20D runtime disproved the claim of hard incompatibility. The final score is valid, but the evidence cannot attribute the gain to doubling the diffusion steps.
3. Task, baseline, and evaluation contract
3.1 Task and fixed boundaries
``text Starting artifact / model: fixed DiGress source and configuration, randomly initialized; no pretrained weights or exploration checkpoint Available training data and assets: fixed QM9-no-H train/validation tensors and train-split SMILES; the training-time test-named tensor is a byte-identical validation alias Agent-editable surface: training method, row use, architecture, transition/noise process, objective, optimizer, schedule, sampling, and checkpoint code under editable workspace Fixed or forbidden components: real test tensor, frozen scorer, metric direction, external data or weights, network boundary, and fresh explore-to-formal start Proxy evaluator: validity_uniqueness_novelty, maximize, 2,000 independent unseeded generated samples; also validation NLL, minimize; validation row count and uncertainty not available Final evaluator: upstream real-test NLL, minimize; test-row count not available; 10,000-molecule validity/uniqueness/novelty diagnostics; no uncertainty estimate Artifact contract: run output area, where N is numeric progress; accept at most the three greatest valid progress values, score each, and select the best valid NLL ``
The proxy headline is the fraction-like product of samples that are valid, distinct, and absent from training; validation NLL measures likelihood on validation molecules. The final metric is NLL on the real test tensor, unavailable during training. Generated-set metrics and NLL can move in opposite directions, and a standalone 2,000-sample fast evaluation is not a prefix of the final 10,000-sample stream. They must therefore be reported separately. The final summary's score_proxy is merely the first 2,000 molecules of that same final stream, not an exploration proxy run.
3.2 How the baseline works
``text QM9 molecular graph with categorical atom and bond features -> choose a random time among 500 cosine-scheduled discrete diffusion steps and corrupt nodes/edges toward train-set category marginals -> a nine-layer graph Transformer predicts the clean atom and bond categories from the noisy graph, time, and structural features -> the clean graph supplies labels for atom cross-entropy + 5 x bond cross-entropy; this QM9 setup has no global-y label term -> AdamW updates all approximately 8.2 million Transformer parameters; generation reverses 500 discrete steps from marginal noise ``
The baseline uses batch size 512, learning rate 2e-4, weight decay 1e-12, gradient clipping 1.0, no EMA, and requests up to 1,000 epochs. Validation normally runs every five epochs. The source publishes every 50 epochs and retains three checkpoints concurrently. Formal orchestration injects the fixed data path and wall-clock control, so the source fallback MAX_WALL_TIME_SECONDS=0 is not the executed formal setting.
The agent initially listed transition/noise schedule, capacity, optimization, and validation overhead as opportunities but did not empirically identify a performance bottleneck. It later hypothesized that 500 steps had excessive temporal discretization error. That was a source-inspired hypothesis, not a diagnosis supported by a comparable baseline.
4. Four-hour exploration and decision process
The primary run consumed only 1,661 seconds. It began with source, configuration, data-module, objective, and sampler inspection; most remaining activity debugged GPU startup, CPU probes, and the EMA interface; the last few minutes ran a 1,000-step micro-smoke test and checked syntax and submission contents. There was no credible-baseline, repeated-evaluation, or systematic-ablation phase, and 12,794 seconds remained at submission.
U-01 - Could the agent establish a comparable baseline and usable execution path?
Motivation and hypothesis. The intended plan was to obtain a 500-step baseline validation NLL before comparing noise schedules, capacity, and optimization.
Concrete change and experimental setup. The GPU baseline used the nine-layer model, batch size 512, 500 diffusion steps, at most three epochs, a 900-second outer limit, and no molecule sampling. A CPU fallback retained the nine-layer model and batch size 512 but requested one epoch, at most two training batches, and a 300-second wall clock. Both used the fixed train/validation asset and seed 42.
Observed result. The GPU process warned that the PyTorch binary lacked native L20D sm_103 kernels. It sat after initialization at about 808 MiB and 0% utilization, completed no batch, and wrote no checkpoint before the agent terminated it with status 143. The CPU probe completed its pre-training validation sanity check at NLL 119.41 but did not finish a training batch or checkpoint before termination. The 119.41 value describes an untrained diagnostic, not baseline performance.
Agent interpretation. The agent called the installed PyTorch and L20D runtime incompatible and concluded that CPU execution could not rank recipes.
Report assessment and confounds. That interpretation was too strong. formal replay 2 later trained for about 11.7 hours on an L20D with the same image, and all final evaluations completed. The exploration record supports missing native kernels and very slow compilation/startup, not hard incompatibility. Because the agent stopped the probes early, this unit produced no comparable 500-step baseline.
Decision and consequence. The agent switched to one-layer, one-training-batch, one-validation-batch CPU smoke tests. It added limit_val_batches plumbing in main.py; the first Hydra invocation failed because a new key needed the + prefix, and the corrected invocation worked. The hook remained in the patch, but formal replay supplied no limit, so it retained full validation.