Skip to content

Conversation

@ralphbean
Copy link

Implements the unified bundle layout from issue #587, where attestations accumulate in a single claims.jsonl file as the model moves through its lifecycle.

Changes

  • Signature write() now appends to existing claims.jsonl files instead of overwriting
  • Each signature is written as compact JSON on a single line (JSONL format)
  • Signature read() reads the last line (most recent attestation) for backward compatibility
  • Updated both sign_sigstore.py and sign_sigstore_pb.py implementations
  • Updated test helpers to handle JSONL format

Test-Driven Development

This was implemented using RED-GREEN-REFACTOR:

  • RED: Added test_append_to_existing_claims_jsonl that initially failed
  • GREEN: Implemented append functionality to make the test pass
  • REFACTOR: Updated existing tests to handle JSONL format

Example Usage

# First signing creates the file
model_signing.signing.sign("my-model", "claims.jsonl")

# Second signing appends to the file
model_signing.signing.sign("my-model", "claims.jsonl")

# File now contains two lines, each a complete sigstore bundle

This allows attestations to accumulate as models move through their lifecycle (training → registry → security review → production) without invalidating earlier signatures.

Builds on PR #591

Related to #587

This aligns with the OMS format conventions where claims.jsonl is the
standard filename for bundled attestations.

The default can still be overridden using the --signature CLI option.

Assisted-by: Claude Sonnet 4.5 <[email protected]>
Signed-off-by: Ralph Bean <[email protected]>
Updated all examples in README.md, docs/demo.ipynb, and
docs/model_signing_format.md to reflect the new default signature
filename.

Assisted-by: Claude Sonnet 4.5 <[email protected]>
Signed-off-by: Ralph Bean <[email protected]>
This implements the unified bundle layout from issue sigstore#587, where
attestations accumulate in a single claims.jsonl file as the model
moves through its lifecycle.

Changes:
- Signature write() now appends to existing claims.jsonl files
- Each signature is written as compact JSON on a single line (JSONL format)
- Signature read() reads the last line (most recent attestation)
- Updated both sign_sigstore.py and sign_sigstore_pb.py implementations
- Updated test helpers to handle JSONL format

Test-Driven Development:
- RED: Added test_append_to_existing_claims_jsonl that failed
- GREEN: Implemented append functionality to make test pass
- Updated existing tests to handle JSONL format

Related to sigstore#587

Assisted-by: Claude Sonnet 4.5 <[email protected]>
Signed-off-by: Ralph Bean <[email protected]>
@ralphbean ralphbean requested review from a team as code owners December 17, 2025 22:27
Instead of parsing and re-encoding JSON, simply strip newlines from
the bundle.to_json() output. This achieves the same result (compact
JSON on a single line) with much simpler code.

Assisted-by: Claude Sonnet 4.5 <[email protected]>
Signed-off-by: Ralph Bean <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant