Skip to main content

Strict proposal assembly layer for canonical CRI-CORE proposal objects.

Project description


title: "Proposal Normalizer - Canonical Proposal Assembly Layer" filetype: "documentation" type: "repository-overview" domain: "governance-integration" version: "0.2.0" doi: "TBD" status: "Active" created: "2026-03-16" updated: "2026-05-03"

author: name: "Shawn C. Wright" email: "swright@waveframelabs.org" orcid: "https://orcid.org/0009-0006-6043-9295"

maintainer: name: "Waveframe Labs" url: "https://waveframelabs.org"

license: "Apache-2.0"

copyright: holder: "Waveframe Labs" year: "2026"

ai_assisted: "partial"

dependencies:

anchors:

  • "Proposal-Normalizer-v0.2.0"
  • "Canonical-Proposal-Assembly-Layer"

Proposal Normalizer

Strict proposal assembly layer for canonical CRI-CORE proposal objects.

The normalizer binds caller-supplied proposal references into one envelope. It validates boundary shape, computes artifact file hashes, and preserves governance truth supplied by upstream systems.

Installation

Install from PyPI:

pip install cricore-proposal-normalizer

Requires Python 3.10+.

Purpose

Real workflows produce:

  • artifact files
  • actor identity declarations
  • mutation requests
  • compiled contract references

CRI-CORE evaluates only a single canonical structure:

canonical proposal object

The proposal normalizer bridges this boundary.

artifacts + actor + mutation + contract
  -> proposal normalizer
  -> canonical proposal object
  -> CRI-CORE enforcement

Responsibilities

The normalizer performs strict, deterministic binding:

  1. Artifact Binding

    Verifies each supplied artifact path exists and records its SHA256 hash.

  2. Mutation Binding

    Requires exactly the mutation boundary shape used by CRI-CORE:

    {
        "domain": str,
        "resource": str,
        "action": str,
    }
    
  3. Contract Binding

    Requires a caller-supplied contract reference and preserves it without computing, coercing, or inferring contract truth:

    {
        "id": "...",
        "version": "...",
        "hash": "...",
    }
    
  4. Actor Binding

    Requires explicit actor identity, type, and role:

    {
        "id": str,
        "type": str,
        "role": str,
    }
    
  5. Proposal Assembly

    Produces a canonical proposal object with no mutation after construction.

Proposal Shape

{
    "proposal_id": str,
    "timestamp": str,
    "actor": {
        "id": str,
        "type": str,
        "role": str,
    },
    "contract": {
        "id": "...",
        "version": "...",
        "hash": "...",
    },
    "requested_mutation": {
        "domain": str,
        "resource": str,
        "action": str,
    },
    "artifacts": [
        {
            "path": str,
            "sha256": str,
        }
    ],
}

When supplied, run_context is copied into the proposal envelope.

Design Constraints

The normalizer is strict, not forgiving. Missing required contract, mutation, or actor fields raise ValueError.

It does not:

  • compute contract hashes
  • infer contract identifiers or versions
  • infer actor roles
  • inject defaults
  • accept optional mutation ambiguity
  • interpret governance policy
  • enforce lifecycle rules
  • perform approvals
  • evaluate proposal correctness

Those responsibilities belong to CRI-CORE.

Output

The normalizer produces a canonical proposal envelope suitable for evaluation by the CRI-CORE enforcement pipeline.

Copyright 2026 Waveframe Labs - Independent Open-Science Research Entity

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cricore_proposal_normalizer-0.2.0.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cricore_proposal_normalizer-0.2.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file cricore_proposal_normalizer-0.2.0.tar.gz.

File metadata

File hashes

Hashes for cricore_proposal_normalizer-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5363ac126dfc3e982e8e3afac75ee23b1009db4dfba5f32a05abc88039d32794
MD5 629c47991f6e94e6f0549765973e76b6
BLAKE2b-256 c28e580c94b83795ddff98e13ea550cb706d17e9cf6d3e89619420538286d847

See more details on using hashes here.

File details

Details for the file cricore_proposal_normalizer-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cricore_proposal_normalizer-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b3f64f337bd8e49ea37e8885e0ec64ef4a729d48fe9834b41dfa718278d6812c
MD5 a7c0b4a3cccc22d08583a131fd9fe4ad
BLAKE2b-256 52aea735beb0e23712b2c65ef40e4c91a3071de43e3f973328b3650ba3860d39

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page