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:
-
Artifact Binding
Verifies each supplied artifact path exists and records its SHA256 hash.
-
Mutation Binding
Requires exactly the mutation boundary shape used by CRI-CORE:
{ "domain": str, "resource": str, "action": str, }
-
Contract Binding
Requires a caller-supplied contract reference and preserves it without computing, coercing, or inferring contract truth:
{ "id": "...", "version": "...", "hash": "...", }
-
Actor Binding
Requires explicit actor identity, type, and role:
{ "id": str, "type": str, "role": str, }
-
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cricore_proposal_normalizer-0.2.0.tar.gz.
File metadata
- Download URL: cricore_proposal_normalizer-0.2.0.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5363ac126dfc3e982e8e3afac75ee23b1009db4dfba5f32a05abc88039d32794
|
|
| MD5 |
629c47991f6e94e6f0549765973e76b6
|
|
| BLAKE2b-256 |
c28e580c94b83795ddff98e13ea550cb706d17e9cf6d3e89619420538286d847
|
File details
Details for the file cricore_proposal_normalizer-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cricore_proposal_normalizer-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3f64f337bd8e49ea37e8885e0ec64ef4a729d48fe9834b41dfa718278d6812c
|
|
| MD5 |
a7c0b4a3cccc22d08583a131fd9fe4ad
|
|
| BLAKE2b-256 |
52aea735beb0e23712b2c65ef40e4c91a3071de43e3f973328b3650ba3860d39
|