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,