from markitect_tool.extension import builtin_extension_registry def test_builtin_extension_registry_lists_query_processors_and_backend(): registry = builtin_extension_registry() ids = [descriptor.id for descriptor in registry.list()] assert "query.selector" not in ids assert "selector" in ids assert "jsonpath" in ids assert "processor.identity" in ids assert "processor.uppercase" in ids assert "processor.include" in ids assert "backend.local-sqlite" in ids assert "workflow.markdown-dataflow" in ids assert "runtime.context" in ids assert "runtime.form-state" in ids assert "runtime.assessment" in ids assert "policy.local-label" in ids def test_builtin_processor_descriptors_capture_safety_and_provenance(): registry = builtin_extension_registry() include = registry.get("processor.include") uppercase = registry.get("processor.uppercase") assert include.kind == "processor" assert include.safety["reads_files"] is True assert include.provenance_prefix == "processor.include" assert uppercase.safety == {} assert uppercase.provenance_prefix == "processor.uppercase" def test_builtin_local_sqlite_descriptor_exposes_backend_capabilities(): registry = builtin_extension_registry() descriptor = registry.get("backend.local-sqlite") assert descriptor.kind == "backend" assert {capability.id for capability in descriptor.capabilities} >= { "snapshots", "ast", "json", "fts", "sql", "provenance", } assert descriptor.cli["commands"] == [ "mkt cache init", "mkt cache index", "mkt cache query", "mkt search", ] def test_builtin_workflow_descriptor_exposes_cli_and_safety(): registry = builtin_extension_registry() descriptor = registry.get("workflow.markdown-dataflow") assert descriptor.kind == "workflow-engine" assert descriptor.safety["writes_output_files"] is True assert descriptor.safety["assisted_generation"] == "adapter-only" assert descriptor.cli["commands"] == [ "mkt workflow inspect", "mkt workflow plan", "mkt workflow run", ] def test_builtin_runtime_descriptors_expose_boundaries(): registry = builtin_extension_registry() context = registry.get("runtime.context") form_state = registry.get("runtime.form-state") assessment = registry.get("runtime.assessment") assert context.safety["reads_files"] is True assert "mkt contract check --context" in context.cli["commands"] assert {capability.id for capability in form_state.capabilities} >= {"forms", "rules"} assert assessment.kind == "assessment-runner" assert assessment.safety["provider_calls"] == "adapter-only" def test_builtin_policy_descriptor_exposes_cli_and_adapter_boundary(): registry = builtin_extension_registry() descriptor = registry.get("policy.local-label") assert descriptor.kind == "policy-gateway" assert descriptor.safety["network"] is False assert {capability.id for capability in descriptor.capabilities} >= { "policy", "policy_filter", "identity_claims", "resource_manifest", "decision_log", } assert "mkt policy check" in descriptor.cli["commands"] assert "mkt policy subject" in descriptor.cli["commands"] assert "mkt policy resource-manifest" in descriptor.cli["commands"] assert "IdentityClaimsAdapter" in descriptor.metadata["external_adapters"] assert "RelationshipPolicyAdapter" in descriptor.metadata["external_adapters"]