Skip to content
wiki.fftac.org

Class Uai1 Routes - Source Excerpt 07

Back to Class Uai1 Routes

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/uai-1-wordpress/includes/class-uai1-routes.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/plugins/uai-1-wordpress/includes/class-uai1-routes.php

private static function conformance_level_records(): array
    {
        return [
            ['id' => 'L1-core-envelope', 'status' => 'local-supported', 'summary' => 'Validates keyed UAI-1 envelopes, profile names, party fields, delivery, trust, provenance, integrity, and body contracts.'],
            ['id' => 'L2-exchange-participant', 'status' => 'local-supported', 'summary' => 'Publishes capability, validator, examples, mock exchange, registry, and artifact links.'],
            ['id' => 'L3-production-partner', 'status' => 'not-claimed', 'summary' => 'Requires external production trust, auth, lifecycle, and conformance review beyond this public dogfood implementation.'],
        ];
    }

    private static function error_registry_records(): array
    {
        return [
            ['code' => 'invalid_message', 'status' => 400, 'retryable' => false, 'category' => 'validation', 'severity' => 'error'],
            ['code' => 'unknown_profile', 'status' => 400, 'retryable' => false, 'category' => 'validation', 'severity' => 'error'],
            ['code' => 'auth_required', 'status' => 401, 'retryable' => true, 'category' => 'authentication', 'severity' => 'error'],
            ['code' => 'capability_not_supported', 'status' => 422, 'retryable' => false, 'category' => 'capability', 'severity' => 'warning'],
            ['code' => 'rate_limited', 'status' => 429, 'retryable' => true, 'category' => 'throttle', 'severity' => 'warning'],
        ];
    }

    private static function profile_catalog_record(string $profile): array
    {
        foreach (self::profile_catalog() as $record) {
            if ((string) ($record['profile'] ?? '') === $profile) {
                return $record;
            }
        }

        return [];
    }

    private static function profile_body_contract(string $profile): array
    {
        $contracts = [
            'uai.intent.request.v1' => [
                'required' => ['intent', 'subject', 'requested_profile', 'parameters', 'constraints', 'response_profile'],
                'allowed' => ['intent', 'subject', 'requested_profile', 'parameters', 'constraints', 'response_profile'],
            ],
            'uai.intent.response.v1' => [
                'required' => ['status', 'subject', 'request_message_id', 'result', 'notices'],
                'allowed' => ['status', 'subject', 'request_message_id', 'result', 'notices', 'task_ref'],
            ],
            'uai.capability.statement.v1' => [
                'required' => ['capability_id', 'version', 'operations', 'input_profiles', 'output_profiles', 'async_profiles', 'security_schemes', 'endpoints'],
                'allowed' => ['capability_id', 'version', 'operations', 'input_profiles', 'output_profiles', 'async_profiles', 'security_schemes', 'transport_bindings', 'conformance_levels', 'error_codes', 'endpoints', 'extension_namespaces', 'implementation_tracks'],
            ],
            'uai.error.v1' => [
                'required' => ['type', 'title', 'detail', 'status', 'code', 'retryable', 'instance'],
                'allowed' => ['type', 'title', 'detail', 'status', 'code', 'retryable', 'instance', 'documentationUrl', 'traceId', 'correlationId', 'uaixCode', 'uaixCategory', 'uaixSeverity', 'evidenceRecommended', 'suspensionRecommended', 'redactionApplied', 'errors', 'next_step'],
            ],
            'uai.conformance.result.v1' => [
                'required' => ['status', 'checked_profile', 'issues', 'summary', 'artifacts'],
                'allowed' => ['status', 'checked_profile', 'issues', 'summary', 'artifacts', 'target_message_ref'],
            ],
            'uai.task.status.v1' => [
                'required' => ['task_id', 'state', 'subject', 'progress', 'status_message'],
                'allowed' => ['task_id', 'state', 'subject', 'progress', 'status_message', 'result_profile', 'result_ref', 'blocking_reasons', 'updated_fields'],
            ],
        ];

        return $contracts[$profile] ?? ['required' => [], 'allowed' => []];
    }

    private static function profile_message_role(string $profile): string
    {
        $roles = [
            'uai.intent.request.v1' => 'request',
            'uai.intent.response.v1' => 'response',
            'uai.capability.statement.v1' => 'capability-statement',
            'uai.error.v1' => 'problem-details-error',
            'uai.conformance.result.v1' => 'validation-result',
            'uai.task.status.v1' => 'async-task-status',
        ];

        return $roles[$profile] ?? 'unknown';
    }

    private static function build_mock_response_example(): array
    {
        $request = self::build_intent_request_example();

        return self::build_uaix_envelope(
            'uai.intent.response.v1',
            self::message_id('response-example'),
            self::service_party('/mock-exchange'),
            self::target_from_payload($request),
            [
                'status' => 'ok',
                'subject' => 'spiralist.uaix.wordpress-publication',
                'request_message_id' => (string) ($request['message_id'] ?? 'msg-example-request'),
                'result' => [
                    'catalog_url' => self::local_uaix_url('/catalog'),
                    'registry_url' => self::local_uaix_url('/registry'),
                    'next_route' => self::local_uaix_url('/adoption-kit'),
                ],
                'notices' => ['example-response'],
            ]
        );
    }