Expected fail · exit 1
dal check dist_agent_lang/examples/fixtures/trust_rules_decentralized_rejects_ai.dal
Diagnostic: disallowed namespace ai on decentralized service BadOnChainSlice.
Language contracts
For R&D, advanced contract users, and people modeling agentic, financial, payment, or gated-data boundaries. @trust types who may cross. trust:: proves a write. @secure is the envelope before the body. The compiler fails closed when those facts conflict.
1 · Blast radius
On-chain-only services (@trust("decentralized")) may use chain::. Orchestration namespaces such as ai:: and fs:: are a type-check failure, not a runtime warning. Put research on hybrid or centralized services; keep settlement narrow.
Expected fail · exit 1
dal check dist_agent_lang/examples/fixtures/trust_rules_decentralized_rejects_ai.dal
Diagnostic: disallowed namespace ai on decentralized service BadOnChainSlice.
Expected pass · exit 0
dal check dist_agent_lang/examples/verify_trust_contract_rules.dal
OnChainAnchor in that file is decentralized + chain:: only — it type-checks.
2 · Claim
Hybrid attributes type the crossing (@web, @ai, @chain, @admin). trust::authorize is the capability check before chain::deploy — the stand-in for pay, unlock, or gated state. A registered admin proceeds; a stranger is denied and the mutation is skipped.
Expected pass · exit 0
dal run dist_agent_lang/examples/verify_trust_contract_claim.dal
Watch for PermissionDenied on admin::kill without @admin, then stranger skipped vs ops_admin deployed.
3 · Rules
@secure means callable if authenticated, with a reentrancy guard before the body. @public means no auth. Both on one service is a type error. Unauthenticated credit is AccessDenied. Nested re-entry is ReentrancyDetected. A public gas read has no auth envelope.
Expected fail · exit 1
dal check dist_agent_lang/examples/fixtures/trust_rules_secure_public_conflict.dal
Mutually exclusive attributes on ConflictingCaps.
Expected fail · exit 1
dal build dist_agent_lang/examples/fixtures/trust_rules_decentralized_rejects_try_catch.dal --target mobile
Decentralized v1 rejects try/catch. Dynamic control flow stays off the settlement slice.
Expected pass · exit 0
dal run dist_agent_lang/examples/verify_trust_contract_rules.dal
Unauthenticated credit blocked; after chain::set_caller, credit proceeds; re-entry blocked; public read ok.
Truth
These commands were recorded against dal v1.1.2. If a page and the compiler disagree, the compiler wins. Implementation: src/stdlib/trust.rs. Attributes: docs/attributes.md. Envelope: docs/guides/SECURE_ATTRIBUTE_USAGE.md.