Skip to content

Adopted products should carry their own reproduce command (argv), not just a producers field #2

Description

@awickert

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions