narna 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- narna-0.1.0/.gitignore +62 -0
- narna-0.1.0/LICENSE +21 -0
- narna-0.1.0/PKG-INFO +115 -0
- narna-0.1.0/README.md +82 -0
- narna-0.1.0/policies/local-default.yaml +14 -0
- narna-0.1.0/policies/trading-default.yaml +24 -0
- narna-0.1.0/pyproject.toml +58 -0
- narna-0.1.0/specs/ARCHITECTURE.md +89 -0
- narna-0.1.0/specs/README.md +73 -0
- narna-0.1.0/specs/RELEASE-v0.1.md +30 -0
- narna-0.1.0/specs/VERSION +1 -0
- narna-0.1.0/specs/audit/SPEC.md +54 -0
- narna-0.1.0/specs/capability/SPEC.md +63 -0
- narna-0.1.0/specs/certification/SPEC.md +109 -0
- narna-0.1.0/specs/compatibility/SPEC.md +42 -0
- narna-0.1.0/specs/constitution/SPEC.md +328 -0
- narna-0.1.0/specs/constitution-runtime/SPEC.md +89 -0
- narna-0.1.0/specs/examples/constitution.yaml +103 -0
- narna-0.1.0/specs/examples/evidence-api-response.json +25 -0
- narna-0.1.0/specs/examples/fleet.yaml +23 -0
- narna-0.1.0/specs/examples/narna-governance-binding.yaml +32 -0
- narna-0.1.0/specs/examples/narna.yaml +30 -0
- narna-0.1.0/specs/examples/packages/anthropic-constitution.yaml +47 -0
- narna-0.1.0/specs/examples/packages/brazil-lgpd.yaml +75 -0
- narna-0.1.0/specs/examples/packages/ccpa-cpra.yaml +82 -0
- narna-0.1.0/specs/examples/packages/china-pipl.yaml +75 -0
- narna-0.1.0/specs/examples/packages/eu-ai-act.yaml +98 -0
- narna-0.1.0/specs/examples/packages/gdpr.yaml +97 -0
- narna-0.1.0/specs/examples/packages/hipaa.yaml +90 -0
- narna-0.1.0/specs/examples/packages/iso-42001.yaml +70 -0
- narna-0.1.0/specs/examples/packages/nist-ai-rmf.yaml +76 -0
- narna-0.1.0/specs/examples/packages/pci-dss.yaml +82 -0
- narna-0.1.0/specs/examples/packages/singapore-ai-gov.yaml +76 -0
- narna-0.1.0/specs/examples/packages/soc2-tsc.yaml +80 -0
- narna-0.1.0/specs/examples/packages/uk-dpa.yaml +83 -0
- narna-0.1.0/specs/examples/policy-decision-ask.json +24 -0
- narna-0.1.0/specs/examples/policy-pack-local-default.yaml +21 -0
- narna-0.1.0/specs/examples/tool-coinbase-spot.json +31 -0
- narna-0.1.0/specs/examples/trading-agent.yaml +40 -0
- narna-0.1.0/specs/examples/trust-score.json +27 -0
- narna-0.1.0/specs/examples/universal-identity.json +20 -0
- narna-0.1.0/specs/execution-graph/SPEC.md +45 -0
- narna-0.1.0/specs/execution-unit/SPEC.md +53 -0
- narna-0.1.0/specs/governance/SPEC.md +68 -0
- narna-0.1.0/specs/governance-api/SPEC.md +54 -0
- narna-0.1.0/specs/governance-api/openapi.yaml +267 -0
- narna-0.1.0/specs/governance-package/SPEC.md +97 -0
- narna-0.1.0/specs/governance-session/SPEC.md +51 -0
- narna-0.1.0/specs/governance-telemetry/SPEC.md +151 -0
- narna-0.1.0/specs/governor/SPEC.md +51 -0
- narna-0.1.0/specs/identity/SPEC.md +114 -0
- narna-0.1.0/specs/manifest/SPEC.md +138 -0
- narna-0.1.0/specs/metering/SPEC.md +49 -0
- narna-0.1.0/specs/narna-score/SPEC.md +67 -0
- narna-0.1.0/specs/passport/SPEC.md +33 -0
- narna-0.1.0/specs/permission/SPEC.md +50 -0
- narna-0.1.0/specs/policy/SPEC.md +60 -0
- narna-0.1.0/specs/registry/SPEC.md +54 -0
- narna-0.1.0/specs/schemas/README.md +20 -0
- narna-0.1.0/specs/schemas/agent-spec.schema.json +148 -0
- narna-0.1.0/specs/schemas/audit.schema.json +36 -0
- narna-0.1.0/specs/schemas/budget.schema.json +14 -0
- narna-0.1.0/specs/schemas/capability.schema.json +24 -0
- narna-0.1.0/specs/schemas/certification.schema.json +40 -0
- narna-0.1.0/specs/schemas/constitution.schema.json +217 -0
- narna-0.1.0/specs/schemas/event.schema.json +69 -0
- narna-0.1.0/specs/schemas/evidence.schema.json +100 -0
- narna-0.1.0/specs/schemas/execution-unit.schema.json +24 -0
- narna-0.1.0/specs/schemas/governance-package.schema.json +98 -0
- narna-0.1.0/specs/schemas/governance-session.schema.json +18 -0
- narna-0.1.0/specs/schemas/governance-telemetry.schema.json +113 -0
- narna-0.1.0/specs/schemas/identity.schema.json +49 -0
- narna-0.1.0/specs/schemas/manifest.schema.json +115 -0
- narna-0.1.0/specs/schemas/passport.schema.json +154 -0
- narna-0.1.0/specs/schemas/policy-decision.schema.json +48 -0
- narna-0.1.0/specs/schemas/policy-pack.schema.json +60 -0
- narna-0.1.0/specs/schemas/proof-bundle.schema.json +111 -0
- narna-0.1.0/specs/schemas/tool.schema.json +74 -0
- narna-0.1.0/specs/schemas/trust-score.schema.json +61 -0
- narna-0.1.0/specs/schemas/universal-identity.schema.json +76 -0
- narna-0.1.0/specs/uap-core/SPEC.md +353 -0
- narna-0.1.0/specs/uap-evidence/SPEC.md +232 -0
- narna-0.1.0/specs/uap-execution/SPEC.md +294 -0
- narna-0.1.0/specs/uap-export/SPEC.md +88 -0
- narna-0.1.0/specs/vap/SPEC.md +262 -0
- narna-0.1.0/src/narna/__init__.py +50 -0
- narna-0.1.0/src/narna/adapters/__init__.py +148 -0
- narna-0.1.0/src/narna/adapters/anthropic.py +41 -0
- narna-0.1.0/src/narna/adapters/base.py +181 -0
- narna-0.1.0/src/narna/adapters/crewai.py +26 -0
- narna-0.1.0/src/narna/adapters/google.py +48 -0
- narna-0.1.0/src/narna/adapters/langgraph.py +27 -0
- narna-0.1.0/src/narna/adapters/mcp.py +28 -0
- narna-0.1.0/src/narna/adapters/moltbook.py +35 -0
- narna-0.1.0/src/narna/adapters/openai_agents.py +43 -0
- narna-0.1.0/src/narna/adapters/openshell.py +27 -0
- narna-0.1.0/src/narna/adapters/otel.py +48 -0
- narna-0.1.0/src/narna/adapters/otel_export.py +60 -0
- narna-0.1.0/src/narna/cli.py +8 -0
- narna-0.1.0/src/narna/conformance.py +89 -0
- narna-0.1.0/src/narna/decorators.py +138 -0
- narna-0.1.0/src/narna/wrap.py +128 -0
- narna-0.1.0/src/uap/__init__.py +7 -0
- narna-0.1.0/src/uap/_policies/local-default.yaml +14 -0
- narna-0.1.0/src/uap/_policies/trading-default.yaml +24 -0
- narna-0.1.0/src/uap/_spec_schemas/README.md +20 -0
- narna-0.1.0/src/uap/_spec_schemas/agent-spec.schema.json +148 -0
- narna-0.1.0/src/uap/_spec_schemas/audit.schema.json +36 -0
- narna-0.1.0/src/uap/_spec_schemas/budget.schema.json +14 -0
- narna-0.1.0/src/uap/_spec_schemas/capability.schema.json +24 -0
- narna-0.1.0/src/uap/_spec_schemas/certification.schema.json +40 -0
- narna-0.1.0/src/uap/_spec_schemas/constitution.schema.json +209 -0
- narna-0.1.0/src/uap/_spec_schemas/event.schema.json +69 -0
- narna-0.1.0/src/uap/_spec_schemas/evidence.schema.json +100 -0
- narna-0.1.0/src/uap/_spec_schemas/execution-unit.schema.json +24 -0
- narna-0.1.0/src/uap/_spec_schemas/governance-package.schema.json +98 -0
- narna-0.1.0/src/uap/_spec_schemas/governance-session.schema.json +18 -0
- narna-0.1.0/src/uap/_spec_schemas/governance-telemetry.schema.json +113 -0
- narna-0.1.0/src/uap/_spec_schemas/identity.schema.json +49 -0
- narna-0.1.0/src/uap/_spec_schemas/manifest.schema.json +115 -0
- narna-0.1.0/src/uap/_spec_schemas/passport.schema.json +154 -0
- narna-0.1.0/src/uap/_spec_schemas/policy-decision.schema.json +48 -0
- narna-0.1.0/src/uap/_spec_schemas/policy-pack.schema.json +60 -0
- narna-0.1.0/src/uap/_spec_schemas/proof-bundle.schema.json +111 -0
- narna-0.1.0/src/uap/_spec_schemas/tool.schema.json +74 -0
- narna-0.1.0/src/uap/_spec_schemas/trust-score.schema.json +61 -0
- narna-0.1.0/src/uap/_spec_schemas/universal-identity.schema.json +76 -0
- narna-0.1.0/src/uap/agent.py +612 -0
- narna-0.1.0/src/uap/audit.py +72 -0
- narna-0.1.0/src/uap/benchmark.py +52 -0
- narna-0.1.0/src/uap/canon.py +18 -0
- narna-0.1.0/src/uap/certify.py +436 -0
- narna-0.1.0/src/uap/cli.py +975 -0
- narna-0.1.0/src/uap/conformance.py +62 -0
- narna-0.1.0/src/uap/constitution.py +123 -0
- narna-0.1.0/src/uap/errors.py +25 -0
- narna-0.1.0/src/uap/event_log.py +90 -0
- narna-0.1.0/src/uap/events.py +59 -0
- narna-0.1.0/src/uap/evidence.py +71 -0
- narna-0.1.0/src/uap/execution_graph.py +85 -0
- narna-0.1.0/src/uap/execution_unit.py +108 -0
- narna-0.1.0/src/uap/fleet.py +47 -0
- narna-0.1.0/src/uap/governance_benchmark.py +157 -0
- narna-0.1.0/src/uap/governance_runtime.py +362 -0
- narna-0.1.0/src/uap/governor.py +162 -0
- narna-0.1.0/src/uap/hashing.py +18 -0
- narna-0.1.0/src/uap/http.py +19 -0
- narna-0.1.0/src/uap/identity.py +220 -0
- narna-0.1.0/src/uap/ids.py +8 -0
- narna-0.1.0/src/uap/manifest.py +282 -0
- narna-0.1.0/src/uap/marketplace.py +51 -0
- narna-0.1.0/src/uap/memory.py +24 -0
- narna-0.1.0/src/uap/metering.py +65 -0
- narna-0.1.0/src/uap/model.py +114 -0
- narna-0.1.0/src/uap/narna_score.py +147 -0
- narna-0.1.0/src/uap/orchestrator.py +76 -0
- narna-0.1.0/src/uap/packages.py +129 -0
- narna-0.1.0/src/uap/passport.py +266 -0
- narna-0.1.0/src/uap/passport_sign.py +92 -0
- narna-0.1.0/src/uap/permissions.py +56 -0
- narna-0.1.0/src/uap/plugins.py +126 -0
- narna-0.1.0/src/uap/policy.py +155 -0
- narna-0.1.0/src/uap/proof.py +57 -0
- narna-0.1.0/src/uap/registry.py +160 -0
- narna-0.1.0/src/uap/runtime.py +614 -0
- narna-0.1.0/src/uap/schemas.py +43 -0
- narna-0.1.0/src/uap/session.py +83 -0
- narna-0.1.0/src/uap/spec.py +43 -0
- narna-0.1.0/src/uap/state.py +44 -0
- narna-0.1.0/src/uap/telemetry.py +353 -0
- narna-0.1.0/src/uap/tools.py +277 -0
- narna-0.1.0/src/uap/trust.py +115 -0
- narna-0.1.0/src/uap/vap/__init__.py +4 -0
- narna-0.1.0/src/uap/vap/pipeline.py +52 -0
- narna-0.1.0/src/uap/vap/price_extract.py +18 -0
- narna-0.1.0/src/uap/vap/verify_evidence.py +121 -0
- narna-0.1.0/src/uap/verify.py +71 -0
- narna-0.1.0/src/uap_cloud/__init__.py +5 -0
- narna-0.1.0/src/uap_cloud/exporter.py +309 -0
narna-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Dependencies & build
|
|
2
|
+
.venv/
|
|
3
|
+
venv/
|
|
4
|
+
__pycache__/
|
|
5
|
+
*.py[cod]
|
|
6
|
+
*.egg-info/
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
.eggs/
|
|
10
|
+
node_modules/
|
|
11
|
+
web/frontend/dist/
|
|
12
|
+
web/frontend/node_modules/
|
|
13
|
+
|
|
14
|
+
# Local UAP / agent runtime state
|
|
15
|
+
.uap/
|
|
16
|
+
agent.yaml
|
|
17
|
+
|
|
18
|
+
# Secrets & local env (never commit)
|
|
19
|
+
.env
|
|
20
|
+
.env.*
|
|
21
|
+
!.env.example
|
|
22
|
+
!**/.env.example
|
|
23
|
+
!**/.env.production.example
|
|
24
|
+
web/deploy/selfhost/.env
|
|
25
|
+
*.pem
|
|
26
|
+
*.key
|
|
27
|
+
secrets/
|
|
28
|
+
credentials.json
|
|
29
|
+
|
|
30
|
+
# Databases & local data
|
|
31
|
+
*.db
|
|
32
|
+
*.sqlite
|
|
33
|
+
*.sqlite3
|
|
34
|
+
uap_data/
|
|
35
|
+
postgres_data/
|
|
36
|
+
redis_data/
|
|
37
|
+
|
|
38
|
+
# IDE / OS
|
|
39
|
+
.idea/
|
|
40
|
+
.vscode/
|
|
41
|
+
*.swp
|
|
42
|
+
.DS_Store
|
|
43
|
+
Thumbs.db
|
|
44
|
+
|
|
45
|
+
# Test / coverage
|
|
46
|
+
.coverage
|
|
47
|
+
htmlcov/
|
|
48
|
+
.pytest_cache/
|
|
49
|
+
.mypy_cache/
|
|
50
|
+
.ruff_cache/
|
|
51
|
+
|
|
52
|
+
# Logs
|
|
53
|
+
*.log
|
|
54
|
+
|
|
55
|
+
.deploy-secrets/
|
|
56
|
+
|
|
57
|
+
narna-deploy.tar
|
|
58
|
+
dist/
|
|
59
|
+
*.egg-info/
|
|
60
|
+
|
|
61
|
+
examples/_demo_*/
|
|
62
|
+
examples/**/.uap/
|
narna-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NARNA
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
narna-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: narna
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: NARNA — Governance Infrastructure for Agentic AI (UGS reference runtime)
|
|
5
|
+
Project-URL: Homepage, https://narna.org
|
|
6
|
+
Project-URL: Documentation, https://narna.org/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/hanyangkai/narna
|
|
8
|
+
Author: NARNA Contributors
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agentic-ai,ai-agents,governance,narna,runtime,trust,uap,ugs
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Requires-Dist: cryptography>=42.0.0
|
|
20
|
+
Requires-Dist: jsonschema>=4.23.0
|
|
21
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
22
|
+
Provides-Extra: cloud
|
|
23
|
+
Requires-Dist: fastapi>=0.115.0; extra == 'cloud'
|
|
24
|
+
Requires-Dist: pydantic>=2.10.0; extra == 'cloud'
|
|
25
|
+
Requires-Dist: python-multipart>=0.0.12; extra == 'cloud'
|
|
26
|
+
Requires-Dist: pyyaml>=6.0.1; extra == 'cloud'
|
|
27
|
+
Requires-Dist: sqlalchemy>=2.0.36; extra == 'cloud'
|
|
28
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'cloud'
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: build>=1.0.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: jsonschema>=4.23.0; extra == 'dev'
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# NARNA
|
|
35
|
+
|
|
36
|
+
**Governance Infrastructure for Agentic AI**
|
|
37
|
+
|
|
38
|
+
> **Govern Once. Run Anywhere.**
|
|
39
|
+
|
|
40
|
+
[](./LICENSE)
|
|
41
|
+
[](https://narna.org)
|
|
42
|
+
[](./specs/README.md)
|
|
43
|
+
|
|
44
|
+
NARNA makes Agentic AI **governable** — portable identity, policy, evidence, and trust across LangGraph, CrewAI, OpenAI, Anthropic, MCP, and OTel.
|
|
45
|
+
|
|
46
|
+
It does **not** replace those runtimes. It does **not** train models. It sits in the infrastructure layer and **enforces / audits / proves** what fleets may do.
|
|
47
|
+
|
|
48
|
+
| Name | Role |
|
|
49
|
+
|------|------|
|
|
50
|
+
| **NARNA** | Brand + reference runtime |
|
|
51
|
+
| **UGS** | Universal Governance Specification (open standard) |
|
|
52
|
+
| **VAP** | Verify · Audit · Prove |
|
|
53
|
+
| **GU** | Governance Unit (Cloud metering) |
|
|
54
|
+
| **Governance Package** | Portable compliance rules (EU AI Act, HIPAA, GDPR…) |
|
|
55
|
+
|
|
56
|
+
> **NARNA governs AI. Others execute it.**
|
|
57
|
+
|
|
58
|
+
**Not another “agent passport” clone.** See [`docs/DIFFERENTIATION.md`](./docs/DIFFERENTIATION.md) — wedge = **UGS + Packages + GU**, not identity-only protocols.
|
|
59
|
+
|
|
60
|
+
## Install
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install -e . # or: pip install narna (when published)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
from narna import wrap
|
|
68
|
+
|
|
69
|
+
# Enforce before host side-effects (default). Use mode="observe" to migrate.
|
|
70
|
+
agent = wrap(my_langgraph_app, vap=True, mode="enforce")
|
|
71
|
+
agent.run("quarterly summary")
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## 30 seconds — package + runtime
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
from narna import Agent, ConstitutionRuntime
|
|
78
|
+
|
|
79
|
+
rt = ConstitutionRuntime()
|
|
80
|
+
rt.load(provider="eu-ai-act") # Governance Package
|
|
81
|
+
|
|
82
|
+
agent = Agent(vap=True)
|
|
83
|
+
agent.run()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Why teams integrate NARNA
|
|
87
|
+
|
|
88
|
+
1. **Compliance packages** — load once, enforce across frameworks
|
|
89
|
+
2. **Enforce-before adapters** — deny tool/LLM calls before side effects
|
|
90
|
+
3. **UGS Passport + Registry** — public verify at [narna.org](https://narna.org)
|
|
91
|
+
4. **Cloud GU** — Runtime free; Trust (Registry / Passport / Packages) is the product
|
|
92
|
+
|
|
93
|
+
## Links
|
|
94
|
+
|
|
95
|
+
| | |
|
|
96
|
+
|--|--|
|
|
97
|
+
| Site | https://narna.org |
|
|
98
|
+
| API | https://api.narna.org/v1/health |
|
|
99
|
+
| **Ship log (daily)** | [`docs/SHIP-LOG.md`](./docs/SHIP-LOG.md) |
|
|
100
|
+
| MVP status | [`docs/MVP-CHECKLIST.md`](./docs/MVP-CHECKLIST.md) |
|
|
101
|
+
| Adapter e2e | [`docs/ADAPTERS-E2E.md`](./docs/ADAPTERS-E2E.md) |
|
|
102
|
+
| UGS v0.1 | [`specs/RELEASE-v0.1.md`](./specs/RELEASE-v0.1.md) |
|
|
103
|
+
| Strategy | [`docs/STRATEGY.md`](./docs/STRATEGY.md) |
|
|
104
|
+
| Business | [`docs/BUSINESS-MODEL.md`](./docs/BUSINESS-MODEL.md) |
|
|
105
|
+
| Differentiation | [`docs/DIFFERENTIATION.md`](./docs/DIFFERENTIATION.md) |
|
|
106
|
+
| NGS RFCs | [`rfcs/ngs/`](./rfcs/ngs/) |
|
|
107
|
+
| Install | [`docs/INSTALL.md`](./docs/INSTALL.md) |
|
|
108
|
+
|
|
109
|
+
## Compatibility
|
|
110
|
+
|
|
111
|
+
OpenAI · Anthropic · Google · MCP · OpenTelemetry · LangGraph · CrewAI · Docker · Kubernetes
|
|
112
|
+
|
|
113
|
+
## License
|
|
114
|
+
|
|
115
|
+
MIT
|
narna-0.1.0/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# NARNA
|
|
2
|
+
|
|
3
|
+
**Governance Infrastructure for Agentic AI**
|
|
4
|
+
|
|
5
|
+
> **Govern Once. Run Anywhere.**
|
|
6
|
+
|
|
7
|
+
[](./LICENSE)
|
|
8
|
+
[](https://narna.org)
|
|
9
|
+
[](./specs/README.md)
|
|
10
|
+
|
|
11
|
+
NARNA makes Agentic AI **governable** — portable identity, policy, evidence, and trust across LangGraph, CrewAI, OpenAI, Anthropic, MCP, and OTel.
|
|
12
|
+
|
|
13
|
+
It does **not** replace those runtimes. It does **not** train models. It sits in the infrastructure layer and **enforces / audits / proves** what fleets may do.
|
|
14
|
+
|
|
15
|
+
| Name | Role |
|
|
16
|
+
|------|------|
|
|
17
|
+
| **NARNA** | Brand + reference runtime |
|
|
18
|
+
| **UGS** | Universal Governance Specification (open standard) |
|
|
19
|
+
| **VAP** | Verify · Audit · Prove |
|
|
20
|
+
| **GU** | Governance Unit (Cloud metering) |
|
|
21
|
+
| **Governance Package** | Portable compliance rules (EU AI Act, HIPAA, GDPR…) |
|
|
22
|
+
|
|
23
|
+
> **NARNA governs AI. Others execute it.**
|
|
24
|
+
|
|
25
|
+
**Not another “agent passport” clone.** See [`docs/DIFFERENTIATION.md`](./docs/DIFFERENTIATION.md) — wedge = **UGS + Packages + GU**, not identity-only protocols.
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install -e . # or: pip install narna (when published)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from narna import wrap
|
|
35
|
+
|
|
36
|
+
# Enforce before host side-effects (default). Use mode="observe" to migrate.
|
|
37
|
+
agent = wrap(my_langgraph_app, vap=True, mode="enforce")
|
|
38
|
+
agent.run("quarterly summary")
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 30 seconds — package + runtime
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from narna import Agent, ConstitutionRuntime
|
|
45
|
+
|
|
46
|
+
rt = ConstitutionRuntime()
|
|
47
|
+
rt.load(provider="eu-ai-act") # Governance Package
|
|
48
|
+
|
|
49
|
+
agent = Agent(vap=True)
|
|
50
|
+
agent.run()
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Why teams integrate NARNA
|
|
54
|
+
|
|
55
|
+
1. **Compliance packages** — load once, enforce across frameworks
|
|
56
|
+
2. **Enforce-before adapters** — deny tool/LLM calls before side effects
|
|
57
|
+
3. **UGS Passport + Registry** — public verify at [narna.org](https://narna.org)
|
|
58
|
+
4. **Cloud GU** — Runtime free; Trust (Registry / Passport / Packages) is the product
|
|
59
|
+
|
|
60
|
+
## Links
|
|
61
|
+
|
|
62
|
+
| | |
|
|
63
|
+
|--|--|
|
|
64
|
+
| Site | https://narna.org |
|
|
65
|
+
| API | https://api.narna.org/v1/health |
|
|
66
|
+
| **Ship log (daily)** | [`docs/SHIP-LOG.md`](./docs/SHIP-LOG.md) |
|
|
67
|
+
| MVP status | [`docs/MVP-CHECKLIST.md`](./docs/MVP-CHECKLIST.md) |
|
|
68
|
+
| Adapter e2e | [`docs/ADAPTERS-E2E.md`](./docs/ADAPTERS-E2E.md) |
|
|
69
|
+
| UGS v0.1 | [`specs/RELEASE-v0.1.md`](./specs/RELEASE-v0.1.md) |
|
|
70
|
+
| Strategy | [`docs/STRATEGY.md`](./docs/STRATEGY.md) |
|
|
71
|
+
| Business | [`docs/BUSINESS-MODEL.md`](./docs/BUSINESS-MODEL.md) |
|
|
72
|
+
| Differentiation | [`docs/DIFFERENTIATION.md`](./docs/DIFFERENTIATION.md) |
|
|
73
|
+
| NGS RFCs | [`rfcs/ngs/`](./rfcs/ngs/) |
|
|
74
|
+
| Install | [`docs/INSTALL.md`](./docs/INSTALL.md) |
|
|
75
|
+
|
|
76
|
+
## Compatibility
|
|
77
|
+
|
|
78
|
+
OpenAI · Anthropic · Google · MCP · OpenTelemetry · LangGraph · CrewAI · Docker · Kubernetes
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
MIT
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
apiVersion: uap.dev/v1alpha1
|
|
2
|
+
kind: PolicyPack
|
|
3
|
+
metadata:
|
|
4
|
+
name: local-default
|
|
5
|
+
version: 0.0.0
|
|
6
|
+
rules:
|
|
7
|
+
- permission: market.read
|
|
8
|
+
decision: allow
|
|
9
|
+
- permission: memory.read
|
|
10
|
+
decision: allow
|
|
11
|
+
- permission: memory.write
|
|
12
|
+
decision: allow
|
|
13
|
+
- permission: external.invoke
|
|
14
|
+
decision: allow
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
apiVersion: uap.dev/v1alpha1
|
|
2
|
+
kind: PolicyPack
|
|
3
|
+
metadata:
|
|
4
|
+
name: trading-default
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
rules:
|
|
7
|
+
- permission: market.read
|
|
8
|
+
decision: allow
|
|
9
|
+
- permission: browser.open
|
|
10
|
+
decision: allow
|
|
11
|
+
constraints:
|
|
12
|
+
domainsAllowlist:
|
|
13
|
+
- "*.exchange.com"
|
|
14
|
+
- "api.coinbase.com"
|
|
15
|
+
- "api.binance.com"
|
|
16
|
+
- permission: wallet.transfer
|
|
17
|
+
decision: ask
|
|
18
|
+
constraints:
|
|
19
|
+
maxAmount: "100"
|
|
20
|
+
currency: USDT
|
|
21
|
+
- permission: memory.read
|
|
22
|
+
decision: allow
|
|
23
|
+
- permission: memory.write
|
|
24
|
+
decision: allow
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "narna"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "NARNA — Governance Infrastructure for Agentic AI (UGS reference runtime)"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "NARNA Contributors" }]
|
|
13
|
+
keywords = ["ai-agents", "agentic-ai", "governance", "runtime", "trust", "uap", "ugs", "narna"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 4 - Beta",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"License :: OSI Approved :: MIT License",
|
|
18
|
+
"Programming Language :: Python :: 3.11",
|
|
19
|
+
"Programming Language :: Python :: 3.12",
|
|
20
|
+
"Topic :: Software Development :: Libraries",
|
|
21
|
+
]
|
|
22
|
+
dependencies = [
|
|
23
|
+
"PyYAML>=6.0.1",
|
|
24
|
+
"jsonschema>=4.23.0",
|
|
25
|
+
"cryptography>=42.0.0",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
[project.optional-dependencies]
|
|
29
|
+
dev = ["jsonschema>=4.23.0", "build>=1.0.0"]
|
|
30
|
+
cloud = [
|
|
31
|
+
"fastapi>=0.115.0",
|
|
32
|
+
"uvicorn[standard]>=0.32.0",
|
|
33
|
+
"sqlalchemy>=2.0.36",
|
|
34
|
+
"pydantic>=2.10.0",
|
|
35
|
+
"python-multipart>=0.0.12",
|
|
36
|
+
"PyYAML>=6.0.1",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[project.urls]
|
|
40
|
+
Homepage = "https://narna.org"
|
|
41
|
+
Documentation = "https://narna.org/docs"
|
|
42
|
+
Repository = "https://github.com/hanyangkai/narna"
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
narna = "narna.cli:main"
|
|
46
|
+
uap = "uap.cli:main"
|
|
47
|
+
|
|
48
|
+
[tool.hatch.build.targets.wheel]
|
|
49
|
+
packages = ["src/narna", "src/uap", "src/uap_cloud"]
|
|
50
|
+
|
|
51
|
+
[tool.hatch.build.targets.sdist]
|
|
52
|
+
include = [
|
|
53
|
+
"/src",
|
|
54
|
+
"/policies",
|
|
55
|
+
"/specs",
|
|
56
|
+
"/README.md",
|
|
57
|
+
"/pyproject.toml",
|
|
58
|
+
]
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Architecture (normative orientation)
|
|
2
|
+
|
|
3
|
+
**Status:** Draft — infrastructure-layer lock
|
|
4
|
+
**Strategy:** [`../docs/STRATEGY.md`](../docs/STRATEGY.md) · **Positioning:** [`../docs/POSITIONING.md`](../docs/POSITIONING.md)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Stack (locked)
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
Applications
|
|
12
|
+
────────────────────────────────────────────
|
|
13
|
+
AI Products & AI Companies
|
|
14
|
+
────────────────────────────────────────────
|
|
15
|
+
OpenAI · Claude · Gemini · Llama
|
|
16
|
+
────────────────────────────────────────────
|
|
17
|
+
OpenAI SDK · LangGraph · CrewAI · AutoGen
|
|
18
|
+
────────────────────────────────────────────
|
|
19
|
+
OpenTelemetry · MCP · OpenShell
|
|
20
|
+
────────────────────────────────────────────
|
|
21
|
+
★ NARNA Runtime ★
|
|
22
|
+
Identity · Governance · Policy
|
|
23
|
+
Permission · Evidence · Trust · Certification
|
|
24
|
+
────────────────────────────────────────────
|
|
25
|
+
Docker · Kubernetes · Linux · Cloud
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
NARNA does **not** replace frameworks or models. It is the **governance infrastructure** they attach to.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Open standard vs brand
|
|
33
|
+
|
|
34
|
+
| Name | Role |
|
|
35
|
+
|------|------|
|
|
36
|
+
| **UGS** | Universal Governance Specification — open contracts |
|
|
37
|
+
| **NARNA** | Brand + reference runtime implementing UGS |
|
|
38
|
+
| **VAP** | Trust engine (Verify → Audit → Prove) |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Control plane vs data plane
|
|
43
|
+
|
|
44
|
+
| Plane | Owns | Examples |
|
|
45
|
+
|-------|------|----------|
|
|
46
|
+
| **Governance Runtime (NARNA)** | Load / Validate / Enforce / Audit / Verify / Certify | `governance_runtime`, active binding |
|
|
47
|
+
| **Governance Packages** | Who / may / must / risk / human gates | Constitution, Compliance packs |
|
|
48
|
+
| **Execution (others)** | How tokens/tools run | LangGraph, OpenAI Agents, CrewAI, MCP |
|
|
49
|
+
| **Observability (others)** | What happened | OpenTelemetry |
|
|
50
|
+
| **Proof (VAP)** | Whether it can be believed | Evidence, ProofBundle, Trust Score |
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Artifact flow
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
Governance Package
|
|
58
|
+
↓
|
|
59
|
+
NARNA Runtime: Load → Validate → bind active package
|
|
60
|
+
↓
|
|
61
|
+
Enforce (authorize) → host side effects
|
|
62
|
+
↓
|
|
63
|
+
Evidence → Verify / Audit (VAP)
|
|
64
|
+
↓
|
|
65
|
+
Passport → Certification → Registry / Marketplace
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Portable Governance:** changing model vendor **MUST NOT** alone invalidate identity or reset trust without package change.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Package boundaries
|
|
73
|
+
|
|
74
|
+
| Package | Owns |
|
|
75
|
+
|---------|------|
|
|
76
|
+
| Specs (`specs/`) | UGS contracts — source of truth |
|
|
77
|
+
| `narna` / `uap` SDK | Reference runtime + adapters (`uap` = legacy path) |
|
|
78
|
+
| Cloud | Marketplace, Registry, Certification stamp — optional |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Conformance layers
|
|
83
|
+
|
|
84
|
+
1. **UGS-conformant** — Identity / Package / Evidence / Trust contracts
|
|
85
|
+
2. **Constitution-Runtime-conformant** — Load → Enforce → Verify → Audit → Switch
|
|
86
|
+
3. **VAP-conformant** — ProofBundle + TrustScore + offline verify
|
|
87
|
+
4. **Certified** — NARNA Certification levels
|
|
88
|
+
|
|
89
|
+
Aim reference code at (2); treat host frameworks as execution adapters.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# NARNA / UGS Specification Set
|
|
2
|
+
|
|
3
|
+
**NARNA** — *The Governance Infrastructure for Agentic AI.*
|
|
4
|
+
**UGS** — *Universal Governance Specification* (open standard)
|
|
5
|
+
**NGS** — *NARNA Governance Standards* (numbered RFCs — IETF-style)
|
|
6
|
+
**VAP** — *Verify · Audit · Prove* (trust engine)
|
|
7
|
+
|
|
8
|
+
**Primary:** Govern Once. Run Anywhere.
|
|
9
|
+
**Strategy lock:** [`../docs/STRATEGY.md`](../docs/STRATEGY.md)
|
|
10
|
+
**NGS index:** [`../rfcs/ngs/README.md`](../rfcs/ngs/README.md)
|
|
11
|
+
|
|
12
|
+
**Status:** Released v0.1.0
|
|
13
|
+
**Scope:** normative specs + JSON Schemas + OpenAPI
|
|
14
|
+
**Freeze tag:** `ugs-v0.1.0` (semver aligned with [`VERSION`](./VERSION))
|
|
15
|
+
|
|
16
|
+
> UGS v0.1 locks the core six (Identity → Trust) + Manifest, Passport, Governance Package, Registry, and Governance API. Later minors may add telemetry/metering without breaking the core contracts.
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Core six (NGS-0001…0006)
|
|
20
|
+
|
|
21
|
+
| NGS | Spec | Schema |
|
|
22
|
+
|-----|------|--------|
|
|
23
|
+
| Identity | [`identity/SPEC.md`](identity/SPEC.md) | `universal-identity.schema.json` |
|
|
24
|
+
| Capability | [`capability/SPEC.md`](capability/SPEC.md) | `capability.schema.json` |
|
|
25
|
+
| Permission | [`permission/SPEC.md`](permission/SPEC.md) | (AgentSpec / Manifest) |
|
|
26
|
+
| Policy | [`policy/SPEC.md`](policy/SPEC.md) | `policy-pack.schema.json`, `policy-decision.schema.json` |
|
|
27
|
+
| Evidence | [`uap-evidence/SPEC.md`](uap-evidence/SPEC.md) | `evidence.schema.json` |
|
|
28
|
+
| Trust | [`vap/SPEC.md`](vap/SPEC.md) §6 | `trust-score.schema.json` |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Derived standards
|
|
33
|
+
|
|
34
|
+
| NGS | Spec |
|
|
35
|
+
|-----|------|
|
|
36
|
+
| Passport | [`passport/SPEC.md`](passport/SPEC.md) |
|
|
37
|
+
| Governance Package | [`governance-package/SPEC.md`](governance-package/SPEC.md) |
|
|
38
|
+
| Certification | [`certification/SPEC.md`](certification/SPEC.md) · `certification.schema.json` |
|
|
39
|
+
| Audit Report | [`audit/SPEC.md`](audit/SPEC.md) · `audit.schema.json` |
|
|
40
|
+
| Manifest | [`manifest/SPEC.md`](manifest/SPEC.md) |
|
|
41
|
+
| Registry | [`registry/SPEC.md`](registry/SPEC.md) |
|
|
42
|
+
| Governance API | [`governance-api/SPEC.md`](governance-api/SPEC.md) · [`openapi.yaml`](governance-api/openapi.yaml) |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Runtime / metering (orthogonal)
|
|
47
|
+
|
|
48
|
+
| Spec | Path |
|
|
49
|
+
|------|------|
|
|
50
|
+
| Constitution | [`constitution/SPEC.md`](constitution/SPEC.md) |
|
|
51
|
+
| Constitution Runtime | [`constitution-runtime/SPEC.md`](constitution-runtime/SPEC.md) |
|
|
52
|
+
| Governance Session | [`governance-session/SPEC.md`](governance-session/SPEC.md) |
|
|
53
|
+
| Execution Graph / Unit | [`execution-graph/SPEC.md`](execution-graph/SPEC.md), [`execution-unit/SPEC.md`](execution-unit/SPEC.md) |
|
|
54
|
+
| Governor / Metering | [`governor/SPEC.md`](governor/SPEC.md), [`metering/SPEC.md`](metering/SPEC.md) |
|
|
55
|
+
| Governance Telemetry (privacy-preserving) | [`governance-telemetry/SPEC.md`](governance-telemetry/SPEC.md) · `governance-telemetry.schema.json` |
|
|
56
|
+
| UGS Execution / Core | [`uap-execution/SPEC.md`](uap-execution/SPEC.md), [`uap-core/SPEC.md`](uap-core/SPEC.md) |
|
|
57
|
+
| Export | [`uap-export/SPEC.md`](uap-export/SPEC.md) |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Conformance
|
|
62
|
+
|
|
63
|
+
- **NGS-0001…0006 conformant** — implements the six core contracts + schemas.
|
|
64
|
+
- **Governance-API conformant** — exposes OpenAPI paths or equivalent.
|
|
65
|
+
- **VAP-conformant** — ProofBundle + offline verify + Trust Score.
|
|
66
|
+
|
|
67
|
+
Design axiom:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
Identity · Capability · Permission · Policy · Evidence · Trust
|
|
71
|
+
↓
|
|
72
|
+
Passport · Package · Certification · Manifest · Registry · API
|
|
73
|
+
```
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# UGS v0.1 — Release notes
|
|
2
|
+
|
|
3
|
+
**Status:** Released
|
|
4
|
+
**Version:** 0.1.0
|
|
5
|
+
**Date:** 2026-07-20
|
|
6
|
+
|
|
7
|
+
## What is frozen
|
|
8
|
+
|
|
9
|
+
- Core six: Identity, Capability, Permission, Policy, Evidence, Trust (NGS-0001…0006)
|
|
10
|
+
- Manifest (`narna.yaml`), Passport, Governance Package, Certification, Audit, Registry, Governance API (NGS-0007…0013)
|
|
11
|
+
- JSON Schemas under `specs/schemas/`
|
|
12
|
+
- OpenAPI draft: `specs/governance-api/openapi.yaml`
|
|
13
|
+
|
|
14
|
+
## Compatibility
|
|
15
|
+
|
|
16
|
+
- Reference implementation: NARNA Python SDK / CLI (`narna` package)
|
|
17
|
+
- Adapter SPI: enforce-before host framework calls (`NARNA_ADAPTER_MODE=enforce`)
|
|
18
|
+
|
|
19
|
+
## Not frozen yet
|
|
20
|
+
|
|
21
|
+
- Governance Telemetry (Draft G1)
|
|
22
|
+
- Billing / marketplace take-rate commercial terms (product, not standard)
|
|
23
|
+
|
|
24
|
+
## Conformance
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
narna conformance --workspace .
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Badge: **UGS Conformant** when OpenAPI schemas + manifest + runtime probe pass.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.0
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Audit Report — UGS / NGS-0010
|
|
2
|
+
|
|
3
|
+
**Status:** Normative (v0.1)
|
|
4
|
+
**RFC:** [NGS-0010](../../rfcs/ngs/NGS-0010-audit-report.md)
|
|
5
|
+
**Schema:** [`../schemas/audit.schema.json`](../schemas/audit.schema.json)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Purpose
|
|
10
|
+
|
|
11
|
+
A portable **Audit Report** answers:
|
|
12
|
+
|
|
13
|
+
| Question | Field |
|
|
14
|
+
|----------|-------|
|
|
15
|
+
| Who | `actor` (logicalAgentId / identityId) |
|
|
16
|
+
| When | `occurredAt` |
|
|
17
|
+
| Why | `reasons` + `policyRef` |
|
|
18
|
+
| Evidence | `evidenceIds[]` |
|
|
19
|
+
| Decision | `decision` (`allow` \| `deny` \| `ask`) |
|
|
20
|
+
|
|
21
|
+
Independent of vendor log formats (CloudWatch, Datadog, etc.).
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. AuditRecord (minimum)
|
|
26
|
+
|
|
27
|
+
| Field | Required |
|
|
28
|
+
|-------|----------|
|
|
29
|
+
| `auditId` | MUST |
|
|
30
|
+
| `sessionId` | SHOULD |
|
|
31
|
+
| `runId` | MUST |
|
|
32
|
+
| `actor` | MUST |
|
|
33
|
+
| `occurredAt` | MUST |
|
|
34
|
+
| `decision` | MUST |
|
|
35
|
+
| `permission` | SHOULD |
|
|
36
|
+
| `reasons` | MUST (≥1) |
|
|
37
|
+
| `policyRef` | SHOULD |
|
|
38
|
+
| `evidenceIds` | SHOULD |
|
|
39
|
+
| `eventRange` | SHOULD |
|
|
40
|
+
| `trustScore` | MAY |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. Normative rules
|
|
45
|
+
|
|
46
|
+
1. AuditRecord MUST be derivable from Events + PolicyDecisions + Evidence (VAP Audit stage).
|
|
47
|
+
2. Implementations MUST NOT require proprietary log schemas for offline audit export.
|
|
48
|
+
3. `AuditRecorded` events SHOULD reference `auditId`.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 4. Export
|
|
53
|
+
|
|
54
|
+
`GET /v1/audit/{runId}` (Governance API) returns AuditReport JSON matching this schema.
|