Skip to content

Bind sales-readiness manifests to the sealed source revision #1771

Description

@seonghobae

scripts/sales_readiness.py currently emits status, acquisition/profile flags, repo_root, acceptance, checks, and failures, but no source_commit. scripts/build_acquisition_release.py::_verify_generated_stage() therefore carries an explicit "sales_readiness" not in name exemption from mandatory source identity. This leaves the sales-readiness stage itself unable to provide independently replayable source provenance even though the acquisition orchestrator holds an exact sealed commit.

Fresh buyer-packet review in #1717 added RED 961dfadb05cc95541023f61c5ec06a7e319d2dcf and repair 1bba24be881b6758364b3b44446fc96867465d58 so an explicit contradictory sales-readiness source_commit is rejected. That repair intentionally does not treat an absent identity as current.

Acceptance criteria:

  • add source-level RED proving a sales-readiness manifest is bound to the exact source revision represented by the acceptance/acquisition run;
  • make the canonical sales-readiness artifact emit a validated 40/64-character lowercase hexadecimal source_commit without requiring mutable sibling state;
  • in the acquisition builder, remove the sales-readiness exemption so _verify_generated_stage() requires the same sealed commit for in-memory and persisted manifests;
  • make buyer-packet collection fail closed when the sales-readiness source identity is absent or mismatched after the schema migration, with positive fixtures carrying exact matching identity;
  • preserve standalone/non-Git verification semantics explicitly: if source identity is inherited from sealed acceptance rather than looked up from Git, document that contract and prove the canonical acquisition orchestrator independently guards repository immutability across the stage;
  • no weakening of status checks, artifact-root/digest checks, current Rust/backend evidence, or existing source-identity guards;
  • update the governed changelog/TRACEABILITY and run exact-head CI before landing.

Owner boundary: this is fast-mlsirm acquisition/evidence schema work. Do not duplicate it in build_commercial_release.py while #1600 owns that compatibility lane; #1600 should consume the canonical contract after it lands.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions