Skip to content

Server provenance: are issued_at and tool_count decided by value? #485

Open

Description

@chernistry

Follow-up to #404, as promised there. Section 3.2.2's "What counts as an integer" decides by value which numbers are integers for the safe-integer range, and _canonical_bytes applies that to provenance records. It does not say which provenance members are typed integer. spec/server-provenance-v1.md (and v2, which keeps v1's members) describes issued_at as "Unix seconds when this record was signed" and tool_catalog.tool_count as "Number of tools", with no type. provenance.py checks both by Python type and refuses issued_at written 1760000000.0, while the same value in a Trust Record's iat is accepted.

Two ways to settle it:

  1. Type both as integer in v1 (and so v2) and decide them by value, as iat is.
  2. Keep them type-based and say so in v1, so a second implementation knows to refuse the float spelling.

Either is a small change. Which do you want?

Activity

  1. github-actions commented on Oct 12, 2026

    @github-actions
    Contributor

    🟡 Contributor Check: MEDIUM

    Check Result
    Profile MEDIUM
    Credential LOW
    Overall MEDIUM

    Automated check by AgenTrust Contributor Check.

  2. imran-siddique commented on Oct 12, 2026

    @imran-siddique
    Member

    @chernistry option 1, by value. §3.2.2 already gives the reason: RFC 8785 signs the value, so a verifier deciding by spelling refuses records another verifier accepts over the same signed bytes, and the provenance record is canonicalized under that section.

    Please open the PR: both members typed integer in server-provenance-v1.md (v2 inherits them), provenance.py deciding them by value with the bool and range guards kept, and vectors in pairs, 1760000000.0 accepted beside 1760000000.5 refused. I will carry the spec sentence as a maintainer correction, and leave CHANGELOG.md out.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions