Skip to main content

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

Metadata

Release files for cricore-proposal-normalizer 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cricore-proposal-normalizer 0.2.0
File Size Uploaded
cricore_proposal_normalizer-0.2.0.tar.gz 9.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cricore-proposal-normalizer 0.2.0
File Interpreter ABI Platform
cricore_proposal_normalizer-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.5 kB

Release files / cricore_proposal_normalizer-0.2.0.tar.gz

Download URL cricore_proposal_normalizer-0.2.0.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
5363ac126dfc3e982e8e3afac75ee23b1009db4dfba5f32a05abc88039d32794
BLAKE2b-256 checksum
How to use checksums
c28e580c94b83795ddff98e13ea550cb706d17e9cf6d3e89619420538286d847
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / cricore_proposal_normalizer-0.2.0-py3-none-any.whl

Download URL cricore_proposal_normalizer-0.2.0-py3-none-any.whl
Size 10.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b3f64f337bd8e49ea37e8885e0ec64ef4a729d48fe9834b41dfa718278d6812c
BLAKE2b-256 checksum
How to use checksums
52aea735beb0e23712b2c65ef40e4c91a3071de43e3f973328b3650ba3860d39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page