Skip to content

build: Add NuGet package release-age verification workflow #69

Description

@aoirint

Warning

This issue was created with assistance from LLMs.

Summary

  • Follow up on Strengthen skill guidance for supply-chain-safe ad hoc tool execution #68 for the NuGet-specific part of the repository supply-chain baseline.
  • The repository currently uses locked NuGet restore, package source mapping, and pinned/resolved package hashes, but it does not appear to enforce a package release-age cooldown for NuGet packages.
  • Treat NuGet release-age verification as a minimum gate for dependency updates, not as proof that a package is trustworthy after the cooldown window.

Details

  • Current restore path uses dotnet restore --locked-mode and CruiserJumpPractice/packages.lock.json.
  • CruiserJumpPractice/nuget.config limits sources through package source mapping.
  • CruiserJumpPractice/CruiserJumpPractice.csproj still includes direct package references, including floating analyzer/build helper versions such as BepInEx.Analyzers 1.* and BepInEx.PluginInfoProps 2.*, with resolved versions captured by the lock file.
  • The missing piece is release-age verification for the resolved NuGet package versions before accepting dependency updates or lock-file changes.
  • Release-age verification does not replace normal package trust judgment. Provenance, configured sources, package identity, pinning/lockfile behavior, vulnerability signals, package permissions or build behavior where relevant, and stricter current security requirements still matter.
  • This should stay practical and project-scoped: verify the package versions this repository resolves, document blockers when registry metadata is unavailable, and avoid attempting broader ecosystem trust guarantees.

Proposed Implementation Plan

  • Add a small verification script or documented command that reads CruiserJumpPractice/packages.lock.json and checks the resolved package versions.
  • For each resolved package, query the configured NuGet source metadata for the package publish/listed timestamp when available.
  • Fail or report a blocker when a resolved package version is newer than the repository cooldown period, currently 7 days.
  • Fail or report a blocker when release-age metadata cannot be retrieved from the expected source and no maintainer-approved exception is recorded.
  • Document how maintainers should run the check after changing PackageReference entries or regenerating packages.lock.json.
  • Consider adding the check to CI only after the local command is deterministic enough for the repository's configured NuGet sources.
  • Record any unavoidable NuGet API/source limitations in the security Agent Skill or package-management documentation.

Acceptance Criteria

  • NuGet dependency updates have a documented release-age verification workflow.
  • The workflow checks resolved package versions from packages.lock.json, not only direct PackageReference entries.
  • The workflow uses source-backed publish/release metadata where available.
  • The workflow presents cooldown as a minimum gate and explicitly says cooldown expiry is not sufficient trust by itself.
  • The workflow preserves broader dependency trust checks, such as configured source provenance, package identity, pinning/lockfile behavior, vulnerability signals where available, and stricter current security requirements.
  • The workflow reports a clear blocker or requires a documented exception when release age cannot be verified.
  • The workflow is referenced from the broader security Agent Skill follow-up in Strengthen skill guidance for supply-chain-safe ad hoc tool execution #68.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions