Policies
Turn a policy document into controls that a Guardian can enforce. Ingestion is asynchronous. The SDK returns a typed handle immediately, then lets you refresh status, inspect nodes, finalize the policy, and create later versions.
Status: Beta Companion docs: Policies API · Guardians API · Testing and CI Source of truth: Policies API. This guide is the Python SDK projection.
Ingest and wait for ready
import time
from trinitite import Trinitite
tr = Trinitite(env="prod")
policy = tr.policies.ingest(
"""
# Refund policy
Customers may request a refund within 30 days.
Refunds over $500 require human review.
""".strip(),
title="refund-policy",
description="Rules for customer refunds.",
kind="policy",
frameworks=["soc2"],
controls=["soc2:CC6.1"],
)
while policy.ingestion_status in {"pending", "ingesting"}:
time.sleep(1)
policy = policy.status()
if policy.ingestion_status != "ready":
raise RuntimeError(f"Policy ingestion ended as {policy.ingestion_status}")
print(policy.document_id)
print(policy.node_count)
tr.policies.ingest(...) returns PolicyNodeHandle. Its document_id uses the pdoc_ prefix. Poll policy.status() until ingestion_status is ready or failed.
Inspect the decomposed nodes
nodes_response = policy.nodes()
for node in nodes_response.body.get("nodes", []):
print(node.get("node_id"), node.get("text"))
Collections such as nodes, versions, and edit history return Response. Read their JSON through .body and check .ok or .status before using it.
versions = policy.versions()
history = policy.edit_history(entity_type="node")
assert versions.ok
assert history.ok
Framework and control links are accepted for documents with kind="policy". They are applied after decomposition, so inspect nodes only after the policy reaches ready.
Finalize the policy
Finalization locks the policy version. It can also create tests and start Guardian training.
finalized = policy.finalize(
notes="Approved by the policy owner.",
auto_generate_tests=True,
auto_generate_variations=True,
auto_train=True,
guardian_id="refund-guardian",
)
assert finalized.ok
print(finalized.document_id)
To bind an existing suite, pass test_suite_id. To create one during finalization, pass create_test_suite=True and test_suite_name.
Create a new version
Reingestion preserves the document identity and creates a new version.
policy = policy.reingest(
"""
# Refund policy
Customers may request a refund within 45 days.
Refunds over $500 require human review.
""".strip(),
change_summary="Extended the refund window to 45 days.",
)
while policy.ingestion_status in {"pending", "ingesting"}:
time.sleep(1)
policy = policy.status()
Find and list policies
policy = tr.policies.get("refund-policy").status()
all_policies = tr.policies.list()
for item in all_policies.body.get("documents", []):
print(item["document_id"], item["name"], item["status"])
get(...) accepts a pdoc_ id or a policy name. Name lookup uses the first matching document returned by the policy list.
Next steps
- Guardians: understand the runtime Guardian that enforces a finalized policy.
- Testing and CI: exercise verdict branches and create scheduled gates.
- Traces and graph: walk from a policy node to controls, assets, and decisions.