Adopted results are durable; the exact command that produced them is not.
trust/provenance.py writes a JSON ledger per run under .trust/runs/, and those ledgers
carry the full argv — including the parameters that are otherwise invisible in a result:
--collinear-sigma 3 --covers L1O --bridge-mm -4.04
--bridge-source "products/bridge_wide_L1O.json (29 open marks, Elba)"
Those choices change the number. Read out of the committed products:
ANSWER_gen1_elba.json sigma_sweep
2.0 -> 60.84 mm 3.0 -> 62.74 mm 5.0 -> 62.74 mm span 1.90 mm
elba__gen1__*__datum.json constant_mm, by --covers choice
open -12.99
open+urban +22.41
cover_covariate +55.03 spread 68.03 mm
The --covers choice moves the gen1 residual-field constant by 68 mm. The adopted product
records adopted_collinear_sigma and the sweep, which is good — but not the --covers
value, nor the rest of the invocation.
The gap. ground_control/products/ANSWER_gen1_elba.json has a producers field but no
argv. So the adopted value is committed and the command that made it lives only in an
untracked ledger that will eventually be deleted.
Not the fix: tracking .trust/ wholesale. It is one file per run, exploratory and
failed ones included — 139 in the first five days — keyed to timestamp and PID, and a
collaborator's clone generates its own. That converts a debugging aid into permanent
repository history. .trust/ is now in .gitignore for this reason.
Proposed fix. When a result is adopted into a product JSON, carry its provenance with it:
write the run's argv into the product, or copy the ledger to ground_control/products/ledgers/
beside it. Either way the durable artifact then answers "what command made this number?"
without depending on local scratch surviving.
Touches ground_control/, which is maintained separately — filing rather than editing.
🤖 Generated with Claude Code
Adopted results are durable; the exact command that produced them is not.
trust/provenance.pywrites a JSON ledger per run under.trust/runs/, and those ledgerscarry the full
argv— including the parameters that are otherwise invisible in a result:Those choices change the number. Read out of the committed products:
The
--coverschoice moves the gen1 residual-field constant by 68 mm. The adopted productrecords
adopted_collinear_sigmaand the sweep, which is good — but not the--coversvalue, nor the rest of the invocation.
The gap.
ground_control/products/ANSWER_gen1_elba.jsonhas aproducersfield but noargv. So the adopted value is committed and the command that made it lives only in anuntracked ledger that will eventually be deleted.
Not the fix: tracking
.trust/wholesale. It is one file per run, exploratory andfailed ones included — 139 in the first five days — keyed to timestamp and PID, and a
collaborator's clone generates its own. That converts a debugging aid into permanent
repository history.
.trust/is now in.gitignorefor this reason.Proposed fix. When a result is adopted into a product JSON, carry its provenance with it:
write the run's
argvinto the product, or copy the ledger toground_control/products/ledgers/beside it. Either way the durable artifact then answers "what command made this number?"
without depending on local scratch surviving.
Touches
ground_control/, which is maintained separately — filing rather than editing.🤖 Generated with Claude Code