Migration from the original 0.3 behaviorΒΆ

This hardening introduces deliberate compatibility changes. Existing code should review its trust assumptions before enabling previously permissive settings.

  • IntentNamespace defaults to strict=True. Unsupported syntax raises IntentParseError. Use strict=False only for trusted-code auditing.

  • Callable-object rules no longer grant access to matching module/qualified-name metadata. Register the exact function, or explicitly select a string rule when broad metadata matching is intended.

  • Callable instances are opaque and cannot be used as rules or decorated roots.

  • Names cannot authorize unresolved or dynamic targets unless the explicitly unsafe allow_unknown=True option is selected.

  • Default deny rules block aliases of dynamic builtin primitives too.

  • Local recursion is detected rather than expanding until RecursionError.

  • Async wrappers preserve coroutine kind and check at execution time. Generator and async-generator roots raise IntentConfigurationError.

  • Analysis has node/depth/source budgets. Warning mode does not suppress parse errors or budget exhaustion.

  • Development tools are no longer installed as runtime dependencies. Contributors should use uv sync --all-groups.

For AI tools and privileged operations, prefer IntentDispatcher with trusted registry/grants and per-capability argument validation. It does not sandbox code; hostile plugins still require external OS isolation and an authenticated broker.