Governance & Licensing (Public Contract)
This page is the public contract for how Helix treats authority, signatures, and verification. It exists to prevent “sales/support drift” and to keep trust properties stable over time.
Definitions
- Exploratory: you can simulate and explore locally, but outputs are not “decision-grade”.
- Decision-grade: Helix is asserting governance-level guarantees under an explicit license and policy.
- Signed bundle: an artifact bundle that includes license lineage plus an attestation signature.
- Verification: offline checks that a bundle’s hashes, license lineage, and signatures are valid.
The rules (non-negotiable)
- Exploratory runs are always allowed.
- Decision-grade requires a Governance license.
- Signed bundles include license lineage plus an attestation.
- Verification is always free and offline.
- Verification fails closed for decision-grade claims.
- Unsigned bundles cannot verify as decision-grade.
- Bundles with invalid manifests/attestations cannot verify.
What is (and isn’t) paywalled
- Free users may compute: simulate, explore, export exploratory artifacts.
- Licensed users may assert: decision-grade outputs and signed bundles.
Migration (distribution rename)
If you previously installed the legacy PyPI distribution helix-governance, migrate with:
python -m pip uninstall -y helix-governance
python -m pip install -U helix-governance
This is a packaging rename only:
- Module namespace stays
helix - CLI entrypoint stays
helix - Studio entrypoint stays
helix-studio
Bundle signing + verification (CLI)
Configure license (offline)
HELIX_LICENSE_PATH=/path/to/license.jsonHELIX_EDIT_PROGRAM_ID=<edit_program_id>
Build a signed bundle
helix artifacts build \
--config cfg.json \
--outdir out/bundle \
--sign \
--signing-key /path/to/signer.ed25519
The signed bundle includes:
governance/license.json(license lineage)governance/attestation.json(signature over the bundle identity)
Verify (always free + offline)
helix verify out/bundle
helix verify out/bundle.zip
Verification never reads your local license file; it only validates what is inside the bundle.
Trust chain (diagram)
Helix (issuer) ──signs──▶ License (helix-license.v1) [pinned issuer keys in the build]
│
▼
Decision-grade run summary includes provenance.license:
license_id, license_sha256, issuer_key_id, org, edit_program_id
│
▼
Signed bundle:
manifest.json (hashes) + governance/attestation.json (signature over bundle identity)
│
▼
Verifier (free, offline):
checks manifest hashes + license signature + attestation signature → VERIFIED / FAILED
Provenance header format (exports + reports)
Every human-facing export surface includes:
- A single-line provenance header (stable formatting).
- A small JSON block with the same fields (machine readable).
Surfaces:
*.export.json(provenance_header,provenance_block)*.evidence.json(provenance_header,provenance_block)- HTML report (rendered as a “Provenance” panel)
Header line is always in a fixed field order (placeholders do not reorder fields):
Helix provenance: mode=<MODE> policy=<POLICY> license=<LICENSE> issuer=<ISSUER> attestation=<ATTESTATION>
Policy label selection:
- Prefer
policy_idwhen present. - Else fall back to
policy_profilewhen present. - Else fall back to short
policy_hash(sha256:<first10>).
Missing values render as none (or unknown for policy when no policy fields exist).
CLI session contract (v2)
The user-facing Helix CLI session lifecycle is treated as a versioned external contract (bytes on disk), not an internal implementation detail.
See: Helix CLI Session Contract v2.
CI usage patterns (copy/paste)
Typical decision-grade CI flow:
python -m pip install -U helix-governance
export HELIX_LICENSE_PATH=/path/to/license.json
export HELIX_EDIT_PROGRAM_ID=<edit_program_id>
export HELIX_POLICY_PATH=/path/to/policy.json # optional
# Optional: audit pinned issuer key ids (offline).
helix license issuer-keys --json > helix_issuer_keys.json
# Offline readiness snapshot (no secrets).
helix governance self-check \
--json \
--strict \
--decision-mode decision_grade \
--signing-key /path/to/signer.ed25519 \
> helix_governance_self_check.json
# Build a signed bundle (license-gated) and verify it (always free + offline).
helix artifacts build \
--config cfg.json \
--outdir out/bundle \
--sign \
--signing-key /path/to/signer.ed25519
helix verify out/bundle --json-out helix_verify_bundle.json
If you need a single artifact for support tickets / CI logs, also capture:
helix support bundle --out helix_support_bundle.zip
Studio launch (optional)
Helix Studio uses the same env vars:
export HELIX_LICENSE_PATH=/path/to/license.json
export HELIX_EDIT_PROGRAM_ID=<edit_program_id>
helix-studio
Canonical error codes
All governance hard-stops surface one of these codes:
LICENSE_REQUIREDLICENSE_INVALIDLICENSE_EXPIREDLICENSE_NOT_YET_VALIDLICENSE_SCOPE_MISMATCHSIGNING_KEY_REQUIREDPOLICY_LOCK_VIOLATIONATTESTATION_INVALIDMANIFEST_MISMATCH