Spaces:
Sleeping
Sleeping
| defined( 'ABSPATH' ) || exit; | |
| class SA_Orch_Migrations { | |
| public static function install() { | |
| global $wpdb; | |
| require_once ABSPATH . 'wp-admin/includes/upgrade.php'; | |
| $charset = $wpdb->get_charset_collate(); | |
| $p = $wpdb->prefix . SA_ORCH_DB_PREFIX; | |
| // wp_sa_arbitration | |
| $sql_arb = "CREATE TABLE {$p}arbitration ( | |
| id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, | |
| hash VARCHAR(64) NOT NULL, | |
| demand_surface VARCHAR(64) NOT NULL, | |
| demand_ref VARCHAR(255) NOT NULL, | |
| rationale TEXT NOT NULL, | |
| projection_type VARCHAR(64) NOT NULL, | |
| actor_user_id BIGINT UNSIGNED DEFAULT NULL, | |
| correlation_id VARCHAR(64) NOT NULL, | |
| causation_id VARCHAR(64) DEFAULT NULL, | |
| truth_class VARCHAR(32) NOT NULL DEFAULT 'canonical', | |
| asterion_path VARCHAR(255) DEFAULT NULL, | |
| created_at DATETIME NOT NULL, | |
| PRIMARY KEY (id), | |
| UNIQUE KEY uniq_hash (hash), | |
| KEY idx_demand (demand_surface, demand_ref), | |
| KEY idx_corr (correlation_id), | |
| KEY idx_created (created_at) | |
| ) $charset;"; | |
| // wp_sa_arbitration_plan_link | |
| $sql_link = "CREATE TABLE {$p}arbitration_plan_link ( | |
| id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, | |
| arbitration_id BIGINT UNSIGNED NOT NULL, | |
| plan_surface VARCHAR(64) NOT NULL, | |
| plan_ref VARCHAR(255) NOT NULL, | |
| link_kind VARCHAR(32) NOT NULL DEFAULT 'derived', | |
| created_at DATETIME NOT NULL, | |
| PRIMARY KEY (id), | |
| KEY idx_arb (arbitration_id), | |
| KEY idx_plan (plan_surface, plan_ref) | |
| ) $charset;"; | |
| // wp_sa_acceptance_event | |
| $sql_acc = "CREATE TABLE {$p}acceptance_event ( | |
| id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, | |
| hash VARCHAR(64) NOT NULL, | |
| demand_surface VARCHAR(64) NOT NULL, | |
| demand_ref VARCHAR(255) NOT NULL, | |
| event_type VARCHAR(32) NOT NULL, | |
| prior_event_id BIGINT UNSIGNED DEFAULT NULL, | |
| actor_user_id BIGINT UNSIGNED DEFAULT NULL, | |
| actor_role VARCHAR(32) NOT NULL, | |
| details TEXT DEFAULT NULL, | |
| truth_class VARCHAR(32) NOT NULL DEFAULT 'canonical', | |
| asterion_path VARCHAR(255) DEFAULT NULL, | |
| observed_at DATETIME NOT NULL, | |
| recorded_at DATETIME NOT NULL, | |
| PRIMARY KEY (id), | |
| UNIQUE KEY uniq_hash (hash), | |
| KEY idx_demand_time (demand_surface, demand_ref, observed_at), | |
| KEY idx_event_type (event_type) | |
| ) $charset;"; | |
| // wp_sa_attention_log β Board #21 (Attention Bridge REST). | |
| // | |
| // SEMANTICS: this is an ATTEMPTED-EMISSION log, NOT a successful-receipt log. | |
| // A row records that an emit was attempted; the 'status' column tells you | |
| // whether the receiver accepted it. | |
| // | |
| // status enum (Board #21 rev2): | |
| // 'success' β outbound POST returned HTTP 2xx; receiver accepted the packet | |
| // 'failed' β transport error (connection refused, DNS, timeout) OR non-2xx HTTP response | |
| // 'blocked_config' β RESERVED. Currently never written. If config validation fails, | |
| // no log row is created at all (validation precedes any I/O). The value | |
| // is reserved for future use cases (e.g. partial-config emission attempts). | |
| // | |
| // NOT a query/analytics store. Captures: | |
| // - what was attempted (full payload_json) | |
| // - whether it arrived (status + http_status + response_excerpt OR error_message) | |
| // Per stakeholder spec: "Did packet arrive? What did it contain?" | |
| $sql_attn = "CREATE TABLE {$p}attention_log ( | |
| id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, | |
| site_id VARCHAR(64) NOT NULL, | |
| surface VARCHAR(64) DEFAULT NULL, | |
| ref VARCHAR(255) DEFAULT NULL, | |
| target_url VARCHAR(512) NOT NULL, | |
| payload_json TEXT NOT NULL, | |
| status VARCHAR(16) DEFAULT NULL, | |
| http_status INT DEFAULT NULL, | |
| response_excerpt TEXT DEFAULT NULL, | |
| error_message TEXT DEFAULT NULL, | |
| recorded_at DATETIME NOT NULL, | |
| PRIMARY KEY (id), | |
| KEY idx_site_time (site_id, recorded_at), | |
| KEY idx_status (status) | |
| ) $charset;"; | |
| // wp_sa_token_log β Board #16 (Token + Usage Visibility). | |
| // Append-only audit of LLM invocations. Each call writes one row. | |
| // (comment_kind, comment_id) is filled in later by the future | |
| // invocation surface; until then, all rows have nulls there and | |
| // the Board #23 filter callback returns false for all comments. | |
| $sql_token = "CREATE TABLE {$p}token_log ( | |
| id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, | |
| user_id BIGINT UNSIGNED DEFAULT NULL, | |
| provider VARCHAR(64) NOT NULL, | |
| model VARCHAR(128) DEFAULT NULL, | |
| prompt_tokens INT UNSIGNED DEFAULT 0, | |
| completion_tokens INT UNSIGNED DEFAULT 0, | |
| total_tokens INT UNSIGNED DEFAULT 0, | |
| comment_kind VARCHAR(32) DEFAULT NULL, | |
| comment_id BIGINT UNSIGNED DEFAULT NULL, | |
| invoked_at DATETIME NOT NULL, | |
| PRIMARY KEY (id), | |
| KEY idx_user_time (user_id, invoked_at), | |
| KEY idx_comment (comment_kind, comment_id) | |
| ) $charset;"; | |
| // wp_sa_actor_handoff β Board #23 (Actor Handoff Log). | |
| // Two-axis attribution log. Records who "pressed send" for an | |
| // actor-authored comment. Strictly additive β does NOT touch | |
| // fbs_comments / fs_conversations. | |
| $sql_handoff = "CREATE TABLE {$p}actor_handoff ( | |
| id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, | |
| comment_kind VARCHAR(32) NOT NULL, | |
| comment_id BIGINT UNSIGNED NOT NULL, | |
| committed_by_user_id BIGINT UNSIGNED NOT NULL, | |
| recorded_at DATETIME NOT NULL, | |
| PRIMARY KEY (id), | |
| KEY idx_comment (comment_kind, comment_id), | |
| KEY idx_committer (committed_by_user_id, recorded_at) | |
| ) $charset;"; | |
| dbDelta( $sql_arb ); | |
| dbDelta( $sql_link ); | |
| dbDelta( $sql_acc ); | |
| dbDelta( $sql_attn ); | |
| dbDelta( $sql_handoff ); | |
| dbDelta( $sql_token ); | |
| // Asterion ledger root | |
| $root = SA_Orch_Asterion::root(); | |
| if ( ! is_dir( $root ) ) { | |
| wp_mkdir_p( $root ); | |
| } | |
| $marker = $root . '/.sa-asterion'; | |
| if ( ! file_exists( $marker ) ) { | |
| file_put_contents( | |
| $marker, | |
| "Asterion ledger root for SA-Orchestration plugin.\n" | |
| . "Canonical-at-write store. Runtime DB at {$wpdb->prefix}{$p}* is a cache.\n" | |
| . "If runtime != Asterion, runtime is the lie.\n" | |
| ); | |
| } | |
| } | |
| } | |