Skip to content
wiki.fftac.org

WP Content Plugins Spiralist Engine Spiralist Engine PHP 4E627daf1db4 - Source Excerpt 13

Back to WP Content Plugins Spiralist Engine Spiralist Engine PHP 4E627daf1db4

Summary

This source excerpt preserves a bounded section of Wiki.FFTAC.org/data/sources/spiralist/wp-content-plugins-spiralist-engine-spiralist-engine-php-4e627daf1db4.php so readers can inspect the evidence without opening the full source file.

**Source path:** Wiki.FFTAC.org/data/sources/spiralist/wp-content-plugins-spiralist-engine-spiralist-engine-php-4e627daf1db4.php

if (is_wp_error($post_id) || !$post_id) {
            continue;
        }

        spiralist_engine_persist_record_meta((int) $post_id, 'spiralist_symbol', $symbol);
    }

    $nodes = [
        [
            'title' => 'Circle',
            'node_id' => 'node.symbol.circle.unity',
            'symbols' => ['spiral.symbol.circle'],
            'input_state' => 'Pattern',
            'output_state' => 'Dual Circle',
            'transformation_chain' => [
                'input' => 'Pattern',
                'transformation' => 'Circle',
                'output' => 'Dual Circle',
                'steps' => [
                    [
                        'operation' => 'set_state',
                        'value' => 'Dual Circle',
                    ],
                ],
            ],
            'derives_from' => [
                'UAI-1.symbol.spiralism.form.origin',
                'UAI-1.transformation.spiralism.rule.point-close-origin',
            ],
            'presentation' => (array) ($visual_nodes['node.symbol.circle.unity'] ?? []),
        ],
        [
            'title' => 'Triangle',
            'node_id' => 'node.symbol.triangle.boundary',
            'symbols' => ['spiral.symbol.triangle'],
            'input_state' => 'Dual Circle',
            'output_state' => 'Square',
            'transformation_chain' => [
                'input' => 'Dual Circle',
                'transformation' => 'Triangle',
                'output' => 'Square',
                'steps' => [
                    [
                        'operation' => 'set_state',
                        'value' => 'Square',
                    ],
                ],
            ],
            'derives_from' => [
                'UAI-1.symbol.spiralism.form.boundary',
                'UAI-1.transformation.spiralism.rule.line-close-boundary',
            ],
            'presentation' => (array) ($visual_nodes['node.symbol.triangle.boundary'] ?? []),
        ],
        [
            'title' => 'Spiral',
            'node_id' => 'node.symbol.spiral.recursion',
            'symbols' => ['spiral.symbol.spiral'],
            'input_state' => 'Square',
            'output_state' => 'Pattern',
            'transformation_chain' => [
                'input' => 'Square',
                'transformation' => 'Spiral',
                'output' => 'Pattern',
                'steps' => [
                    [
                        'operation' => 'set_state',
                        'value' => 'Pattern',
                    ],
                ],
            ],
            'derives_from' => [
                'UAI-1.symbol.spiralism.form.recursion',
                'UAI-1.symbol.spiralism.form.spiral',
                'UAI-1.transformation.spiralism.rule.recursion-expand-spiral',
            ],
            'presentation' => (array) ($visual_nodes['node.symbol.spiral.recursion'] ?? []),
        ],
    ];

    foreach ($nodes as $node) {
        $post_id = wp_insert_post(
            [
                'post_type' => 'spiralist_node',
                'post_status' => 'publish',
                'post_title' => $node['title'],
            ]
        );

        if (is_wp_error($post_id) || !$post_id) {
            continue;
        }

        spiralist_engine_persist_record_meta((int) $post_id, 'spiralist_node', $node);
    }

    $edges = [
        [
            'title' => 'Circle to Triangle',
            'from_node' => 'node.symbol.circle.unity',
            'to_node' => 'node.symbol.triangle.boundary',
            'condition' => [
                'match_state' => 'Dual Circle',
            ],
        ],
        [
            'title' => 'Triangle to Spiral',
            'from_node' => 'node.symbol.triangle.boundary',
            'to_node' => 'node.symbol.spiral.recursion',
            'condition' => [
                'match_state' => 'Square',
            ],
        ],
        [
            'title' => 'Spiral to Circle',
            'from_node' => 'node.symbol.spiral.recursion',
            'to_node' => 'node.symbol.circle.unity',
            'condition' => [
                'match_state' => 'Pattern',
            ],
        ],
    ];

    foreach ($edges as $edge) {
        $post_id = wp_insert_post(
            [
                'post_type' => 'spiralist_edge',
                'post_status' => 'publish',
                'post_title' => $edge['title'],
            ]
        );

        if (is_wp_error($post_id) || !$post_id) {
            continue;
        }

        spiralist_engine_persist_record_meta((int) $post_id, 'spiralist_edge', $edge);
    }

    spiralist_engine_synchronize_connected_nodes();
}

function spiralist_engine_activate(): void
{
    spiralist_engine_register_post_types();
    spiralist_engine_seed_default_graph();
    spiralist_engine_synchronize_connected_nodes();
    spiralist_engine_maybe_upgrade_canonical_metadata();
    flush_rewrite_rules(false);
}

function spiralist_engine_deactivate(): void
{
    flush_rewrite_rules(false);
}

if (!function_exists('get_node')) {
    function get_node($node_id)
    {
        return spiralist_engine_find_node_record((string) $node_id);
    }
}

if (!function_exists('apply_transformation')) {
    function apply_transformation($transformation_chain, $current_state)
    {
        return spiralist_engine_apply_transformation($transformation_chain, (string) $current_state);
    }
}

if (!function_exists('get_valid_edges')) {
    function get_valid_edges($node_id, $new_state)
    {
        $nodes = spiralist_engine_get_valid_edges_for_state((string) $node_id, (string) $new_state);
        return array_values(array_map('spiralist_engine_public_node_payload', $nodes));
    }
}

if (!function_exists('update_instance')) {
    function update_instance($user_id, $node_id, $new_state)
    {
        return spiralist_engine_update_runtime_instance((int) $user_id, (string) $node_id, '', (string) $new_state);
    }
}

if (!function_exists('validate_graph')) {
    function validate_graph()
    {
        return spiralist_engine_validate_graph_snapshot(spiralist_engine_build_graph_snapshot());
    }
}

if (!function_exists('execute_node')) {
    function execute_node($node_id, $current_state, $user_id)
    {
        $graph = spiralist_engine_build_graph_snapshot();
        $validation = spiralist_engine_validate_graph_snapshot($graph);
        if (empty($validation['valid'])) {
            return new WP_Error(
                'spiralist_invalid_graph',
                'The published Spiralist graph is invalid.',
                [
                    'status' => 500,
                    'errors' => (array) ($validation['errors'] ?? []),
                ]
            );
        }

        $node = get_node((string) $node_id);

        if (empty($node)) {
            return new WP_Error(
                'spiralist_node_not_found',
                'Node not found.',
                ['status' => 404]
            );
        }

        $canonical_validation = spiralist_engine_validate_runtime_node_record((array) $node, $graph);
        if (empty($canonical_validation['valid'])) {
            return new WP_Error(
                'spiralist_canonical_mismatch',
                'Protocol5 validation failed for this node.',
                [
                    'status' => 409,
                    'errors' => (array) ($canonical_validation['errors'] ?? []),
                    'canonical_validation' => (array) ($canonical_validation['payload'] ?? []),
                ]
            );
        }

        if ((string) ($node['input_state'] ?? '') !== (string) $current_state) {
            return new WP_Error(
                'spiralist_invalid_state',
                'Invalid state.',
                ['status' => 400]
            );
        }

        $new_state = apply_transformation((array) ($node['transformation_chain'] ?? []), (string) $current_state);

        if (is_wp_error($new_state)) {
            return $new_state;
        }

        $next_nodes = get_valid_edges((string) $node_id, (string) $new_state);

        if (empty($next_nodes)) {
            return new WP_Error(
                'spiralist_dead_end',
                'Execution would end at a dead end, so the graph is invalid.',
                ['status' => 500]
            );
        }

        $instance = spiralist_engine_update_runtime_instance(
            (int) $user_id,
            (string) $node_id,
            (string) $current_state,
            (string) $new_state
        );

        return [
            'node_id' => (string) $node_id,
            'nodeId' => (string) $node_id,
            'new_state' => (string) $new_state,
            'newState' => (string) $new_state,