Skip to content
wiki.fftac.org

Class Uai1 Memory Checkpoints - Source Excerpt 02

Back to Class Uai1 Memory Checkpoints

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/plugins/uai-1-wordpress/includes/class-uai1-memory-checkpoints.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-memory-checkpoints.php

if (!$validation['valid']) {
            return self::error_response($payload, 'invalid_session_restore_brief', (string) $validation['message'], 400);
        }

        $parameters = self::parameters($payload);
        $requested_ids = self::sanitize_text_list((array) $parameters['checkpoint_ids']);
        $stored = self::read_checkpoints(get_current_user_id());
        $selected = array_values(
            array_filter(
                $stored,
                static function (array $checkpoint) use ($requested_ids): bool {
                    return in_array((string) ($checkpoint['checkpoint_id'] ?? ''), $requested_ids, true);
                }
            )
        );

        $brief = [
            'storage_class' => 'runtime-execution-payload',
            'registry_authority' => 'none',
            'protocol5_registry_write_allowed' => false,
            'protocol5_registry_write_attempted' => false,
            'session_id' => sanitize_text_field((string) $parameters['session_id']),
            'checkpoint_ids' => array_map(
                static function (array $checkpoint): string {
                    return (string) ($checkpoint['checkpoint_id'] ?? '');
                },
                $selected
            ),
            'known_context' => array_values(
                array_filter(
                    array_map(
                        static function (array $checkpoint): string {
                            return (string) ($checkpoint['summary'] ?? '');
                        },
                        $selected
                    )
                )
            ),
            'stable_facts' => self::merge_checkpoint_lists($selected, 'stable_facts'),
            'open_tasks' => self::merge_checkpoint_lists($selected, 'open_tasks'),
            'unresolved_questions' => self::merge_checkpoint_lists($selected, 'unresolved_questions'),
            'persona_constraints' => self::merge_checkpoint_lists($selected, 'persona_constraints'),
            'canonical_symbol_refs' => self::filter_symbol_refs(self::merge_checkpoint_lists($selected, 'canonical_symbol_refs')),
            'unknowns' => empty($selected) ? ['No matching checkpoints were found for the requesting user.'] : [],
            'canonical_lookup_required' => true,
            'created_at' => gmdate('c'),
        ];

        return self::intent_response(
            $payload,
            [
                'status' => 'ok',
                'subject' => 'workspace.session',
                'request_message_id' => (string) ($payload['message_id'] ?? ''),
                'result' => [
                    'restore_brief' => $brief,
                    'function' => 'Builds a compact continuation brief from runtime checkpoints while leaving canonical truth in Protocol5.',
                ],
                'notices' => [
                    'runtime-payload-only',
                    'brief-is-not-protocol5-canonical-data',
                    'human-review-required-before-use',
                ],
            ]
        );
    }

    private static function validate_intent_request(array $payload, string $expected_intent, array $required_parameters): array
    {
        if (class_exists('UAI1_Validator')) {
            $validation = UAI1_Validator::validate_uaix_message($payload);
            if (empty($validation['valid'])) {
                return [
                    'valid' => false,
                    'message' => (string) ($validation['error'] ?? 'Invalid UAIX UAI-1 envelope.'),
                ];
            }
        }

        $body = (array) ($payload['body'] ?? []);
        if ((string) ($body['intent'] ?? '') !== $expected_intent) {
            return [
                'valid' => false,
                'message' => 'Unexpected memory checkpoint intent.',
            ];
        }

        $constraints = array_map('strval', (array) ($body['constraints'] ?? []));
        if (!in_array('runtime-payload-only', $constraints, true) || !in_array('no-protocol5-registry-write', $constraints, true)) {
            return [
                'valid' => false,
                'message' => 'Memory checkpoint routes require runtime-payload-only and no-protocol5-registry-write constraints.',
            ];
        }

        $parameters = (array) ($body['parameters'] ?? []);
        foreach ($required_parameters as $required_parameter) {
            if (!array_key_exists($required_parameter, $parameters)) {
                return [
                    'valid' => false,
                    'message' => 'Missing required memory checkpoint parameter: ' . $required_parameter,
                ];
            }
        }

        return [
            'valid' => true,
            'message' => '',
        ];
    }

    private static function request_payload(WP_REST_Request $request): array
    {
        $payload = $request->get_json_params();
        if (is_array($payload)) {
            return $payload;
        }

        $raw = $request->get_body();
        if (is_string($raw) && trim($raw) !== '') {
            $decoded = json_decode($raw, true);
            if (is_array($decoded)) {
                return $decoded;
            }
        }

        return [];
    }

    private static function parameters(array $payload): array
    {
        return is_array($payload['body']['parameters'] ?? null) ? (array) $payload['body']['parameters'] : [];
    }

    private static function sanitize_text_list(array $items): array
    {
        return array_values(
            array_filter(
                array_map(
                    static function ($item): string {
                        return sanitize_text_field((string) $item);
                    },
                    $items
                ),
                static function (string $item): bool {
                    return $item !== '';
                }
            )
        );
    }

    private static function sanitize_turn_window(array $turn_window): array
    {
        return [
            'start_turn_id' => sanitize_text_field((string) ($turn_window['start_turn_id'] ?? '')),
            'end_turn_id' => sanitize_text_field((string) ($turn_window['end_turn_id'] ?? '')),
            'turn_count' => max(0, (int) ($turn_window['turn_count'] ?? 0)),
        ];
    }

    private static function filter_symbol_refs(array $refs): array
    {
        return array_values(array_intersect(self::sanitize_text_list($refs), self::SYMBOL_REFS));
    }

    private static function sanitize_runtime_entropy(array $runtime_entropy): array
    {
        $plate = sanitize_key((string) ($runtime_entropy['crisis_plate'] ?? ''));
        $allowed_plates = ['the-sealed-system', 'the-signal-system', 'the-collapse-system', 'this-one'];

        return [
            'storage_class' => 'runtime-execution-payload',
            'registry_authority' => 'none',
            'protocol5_registry_write_allowed' => false,
            'protocol5_registry_write_attempted' => false,
            'crisis_plate' => in_array($plate, $allowed_plates, true) ? $plate : '',
            'confidence' => self::bounded_float($runtime_entropy['confidence'] ?? 0),
        ];
    }

    private static function sanitize_redactions(array $redactions): array
    {
        $allowed_reasons = ['credential', 'personal-data', 'authorization-boundary', 'user-request'];
        $clean = [];

        foreach ($redactions as $redaction) {
            if (!is_array($redaction)) {
                continue;
            }

            $reason = sanitize_key((string) ($redaction['reason'] ?? ''));
            $clean[] = [
                'field' => sanitize_text_field((string) ($redaction['field'] ?? '')),
                'reason' => in_array($reason, $allowed_reasons, true) ? $reason : 'authorization-boundary',
            ];
        }

        return $clean;
    }

    private static function sanitize_contradiction_checks(array $checks): array
    {
        $allowed_against = ['checkpoint', 'canonical-symbol-registry', 'user-session-brief'];
        $clean = [];

        foreach ($checks as $check) {
            if (!is_array($check)) {
                continue;
            }

            $against = sanitize_key((string) ($check['against'] ?? ''));
            $clean[] = [
                'claim' => sanitize_text_field((string) ($check['claim'] ?? '')),
                'against' => in_array($against, $allowed_against, true) ? $against : 'checkpoint',
            ];
        }

        return $clean;
    }

    private static function store_checkpoint(int $user_id, array $checkpoint): void
    {
        $checkpoints = self::read_checkpoints($user_id);
        array_unshift($checkpoints, $checkpoint);