wp plugin loaded

This commit is contained in:
alorig
2025-11-21 19:18:24 +05:00
parent 4a39c349f6
commit 1eba4a4e15
35 changed files with 11730 additions and 0 deletions

View File

@@ -0,0 +1,430 @@
# IGNY8 WordPress Bridge Verification Report (Phases 1-5)
**Date:** Generated automatically
**Scope:** Verification of implementation plan phases 1-5
---
## Phase 1 Foundations ✅ **COMPLETE**
### 1.1 Harden Credential Storage
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `includes/functions.php` (lines 20-111)
- `igny8_encrypt_value()` - AES-256-CBC encryption
- `igny8_decrypt_value()` - Decryption with fallback
- `igny8_store_secure_option()` - Secure storage wrapper
- `igny8_get_secure_option()` - Secure retrieval wrapper
- `includes/class-igny8-api.php` (lines 106-150)
- `refresh_token()` method implements token refresh tracking
- Stores `igny8_token_refreshed_at` and `igny8_access_token_issued` timestamps
**Verification:**
- ✅ Option encryption using OpenSSL AES-256-CBC
- ✅ Token refresh tracking with timestamps
- ✅ Secure option storage/retrieval functions
---
### 1.2 Build Diagnostics Card
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `admin/settings.php` (lines 139-214)
**Features Implemented:**
- ✅ Access Token Age display (with human-readable time)
- ✅ Last API Health Check timestamp
- ✅ Last Site Data Sync timestamp
- ✅ Last Full Site Scan timestamp
- ✅ Last Semantic Map timestamp (with summary)
- ✅ Last Taxonomy Sync timestamp
- ✅ Last Keyword Sync timestamp
- ✅ Last Writer Sync timestamp
- ✅ Next Scheduled Site Scan display
**Note:** Health check uses `/planner/keywords/?page_size=1` as fallback (per plan note)
---
### 1.3 Add Control Model + Post-Type/Woo Toggles
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `admin/settings.php` (lines 229-330)
**Features Implemented:**
- ✅ Post Types to Sync (checkbox list with all supported types)
- ✅ IGNY8 Modules toggle (Sites, Planner, Writer, Linker, Optimizer)
- ✅ Control Mode radio buttons (Mirror/Hybrid)
- ✅ WooCommerce Data toggle (with detection)
**Supporting Functions:**
- `includes/functions.php`:
- `igny8_get_supported_post_types()` (lines 118-134)
- `igny8_get_enabled_post_types()` (lines 141-149)
- `igny8_get_control_mode()` (lines 156-159)
- `igny8_get_available_modules()` (lines 166-181)
- `igny8_get_enabled_modules()` (lines 188-196)
---
## Phase 2 Automatic Taxonomy & Keyword Sync ✅ **COMPLETE**
### 2.1 Scheduled Fetch of Sectors/Clusters
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `sync/taxonomy-sync.php`:
- `igny8_sync_igny8_sectors_to_wp()` (lines 80-134)
- `igny8_sync_igny8_clusters_to_wp()` (lines 142-237)
- `igny8_cron_sync_taxonomies()` (lines 244-253)
**Scheduling:**
- `includes/functions.php` (line 490-492): Scheduled `twicedaily`
**API Endpoints Used:**
-`/planner/sites/{id}/sectors/` (GET)
-`/planner/sites/{id}/clusters/` (GET)
**Features:**
- ✅ Populates `igny8_sectors` taxonomy
- ✅ Populates `igny8_clusters` taxonomy
- ✅ Stores `_igny8_sector_id` and `_igny8_cluster_id` term meta
- ✅ Respects module toggle (skips if Planner disabled)
---
### 2.2 Pull Planner Keywords Per Cluster
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `sync/taxonomy-sync.php`:
- `igny8_sync_keywords_from_planner()` (lines 260-351)
- `igny8_cron_sync_keywords()` (lines 358-364)
**Scheduling:**
- `includes/functions.php` (line 495-497): Scheduled `daily`
**API Endpoints Used:**
-`/planner/keywords/?cluster_id={id}&page_size=500` (GET)
**Features:**
- ✅ Fetches keywords per cluster
- ✅ Stores `_igny8_keyword_ids` in term meta (cluster level)
- ✅ Stores `_igny8_keyword_ids` in post meta (post level)
- ✅ Respects module toggle (skips if Planner disabled)
---
### 2.3 Render Read-Only Badges
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `admin/class-admin-columns.php`:
- `render_sectors_column()` (lines 121-133)
- `render_clusters_column()` (lines 140-152)
- `render_source_column()` (lines 102-114)
**Features:**
- ✅ Displays sectors as badges in post list table
- ✅ Displays clusters as badges in post list table
- ✅ Shows IGNY8/WP source badge
- ✅ Read-only display (no editing in list view)
**Note:** Editor side panels would require additional meta box implementation (not explicitly required in plan)
---
## Phase 3 Writer Module Integration ✅ **MOSTLY COMPLETE**
### 3.1 Cron/Webhook to Fetch Tasks
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `sync/igny8-to-wp.php`:
- `igny8_sync_igny8_tasks_to_wp()` (lines 265-441)
- `igny8_cron_sync_from_igny8()` (lines 756-795)
**Scheduling:**
- `includes/functions.php` (line 485-487): Scheduled `hourly`
**API Endpoints Used:**
-`/writer/tasks/?site_id={id}&status={status}` (GET)
**Features:**
- ✅ Fetches tasks with filters (status, cluster_id)
- ✅ Creates new WordPress posts from tasks
- ✅ Updates existing posts if task already linked
- ✅ Respects enabled post types
- ✅ Respects module toggle (skips if Writer disabled)
---
### 3.2 Hook save_post / transition_post_status
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `sync/post-sync.php`:
- `igny8_sync_post_status_to_igny8()` (lines 22-78)
- `igny8_sync_post_status_transition()` (lines 137-169)
**Hooks Registered:**
- `sync/hooks.php` (lines 23, 28):
-`save_post``igny8_sync_post_status_to_igny8`
-`transition_post_status``igny8_sync_post_status_transition`
**API Endpoints Used:**
-`/writer/tasks/{id}/` (PUT)
**Features:**
- ✅ Pushes WordPress post status to IGNY8
- ✅ Pushes post URL to IGNY8
- ✅ Maps WordPress status to IGNY8 status
- ✅ Only syncs IGNY8-managed posts
- ✅ Skips autosaves and revisions
---
### 3.3 Store Briefs/Outlines on Post Meta
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `sync/igny8-to-wp.php`:
- `igny8_cache_task_brief()` (lines 49-64)
**API Endpoints Used:**
-`/writer/tasks/{id}/brief/` (GET)
**Features:**
- ✅ Fetches brief from IGNY8 API
- ✅ Stores in `_igny8_task_brief` post meta
- ✅ Stores cache timestamp in `_igny8_brief_cached_at`
- ✅ Called automatically when posts are created/updated
---
### 3.4 Queue Visualization
**Status:** ⚠️ **PARTIALLY IMPLEMENTED**
**Location:**
- `admin/settings.php` (lines 365-377): Basic stats display
**Implemented:**
- ✅ Sync statistics section in settings
- ✅ Synced posts count (via AJAX)
- ✅ Last sync timestamp
**Missing:**
- ❌ Detailed queue counts (pending, processing, failed)
- ❌ Failure logs/visualization
- ❌ Queue status widget
**Recommendation:** Add detailed queue tracking table or widget showing:
- Pending syncs
- Failed syncs with error messages
- Processing status
---
## Phase 4 Sites Module & Semantic Mapping ✅ **COMPLETE**
### 4.1 Incremental + Full Site-Data Collectors
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `data/site-collection.php`:
- `igny8_collect_site_data()` (lines 277-364) - Full collection
- `igny8_sync_incremental_site_data()` (lines 411-498) - Incremental sync
- `igny8_fetch_wordpress_posts()` (lines 23-99)
- `igny8_fetch_all_taxonomy_terms()` (lines 254-270)
**Features:**
- ✅ Honors post type toggles (`igny8_is_post_type_enabled()`)
- ✅ Honors WooCommerce toggle
- ✅ Honors module toggle (skips if Sites disabled)
- ✅ Incremental mode (only changed posts since last sync)
- ✅ Full mode (all posts)
- ✅ Collects posts, taxonomies, terms
- ✅ Collects WooCommerce products (if enabled)
---
### 4.2 Schedule Automatic Submission
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `data/site-collection.php`:
- `igny8_send_site_data_to_igny8()` (lines 372-403)
- `igny8_perform_full_site_scan()` (lines 507-535)
**Scheduling:**
- `includes/functions.php`:
- Line 475-477: Daily incremental sync (`igny8_sync_site_data`)
- Line 480-482: Daily full scan check (`igny8_full_site_scan` - runs max once per week)
**API Endpoints Used:**
-`/system/sites/{id}/import/` (POST) - Full import
-`/system/sites/{id}/sync/` (POST) - Incremental sync
**Features:**
- ✅ Automatic daily incremental sync
- ✅ Automatic weekly full scan (throttled)
- ✅ Manual trigger available via settings page
---
### 4.3 Track Semantic Map Metadata
**Status:** ✅ **IMPLEMENTED**
**Location:**
- `data/semantic-mapping.php`:
- `igny8_map_site_to_semantic_strategy()` (lines 24-101)
**API Endpoints Used:**
-`/planner/sites/{id}/semantic-map/` (POST)
**Tracking:**
- `data/site-collection.php` (lines 526-531):
- ✅ Stores `igny8_last_semantic_map` timestamp
- ✅ Stores `igny8_last_semantic_map_summary` (sectors count, keywords count)
**Display:**
- `admin/settings.php` (lines 171-187): Shows semantic map summary in diagnostics
---
## Phase 5 Planner, Linker, Optimizer Hooks ❌ **NOT IMPLEMENTED**
### 5.1 Display Planner Briefs/Tasks Per Post
**Status:** ❌ **NOT IMPLEMENTED**
**Required:**
- Display Planner briefs/tasks per post in editor
- Allow "request refresh" actions
**API Endpoints (from plan):**
- `/planner/tasks/{id}/brief/` (GET)
- `/planner/tasks/{id}/refresh/` (POST)
**Current State:**
- ✅ Briefs are cached in post meta (`_igny8_task_brief`)
- ❌ No UI to display briefs in post editor
- ❌ No "request refresh" action/button
- ❌ No Planner task display per post
**Recommendation:** Implement:
1. Meta box in post editor showing cached brief
2. Button to fetch fresh brief from `/planner/tasks/{id}/brief/`
3. Button to trigger refresh via `/planner/tasks/{id}/refresh/`
---
### 5.2 Export WP Link Graph During Site Scans
**Status:** ❌ **NOT IMPLEMENTED**
**Required:**
- Export WordPress internal link graph during site scans
- Send to `/linker/link-map/` (POST)
**Current State:**
- ❌ No link graph extraction
- ❌ No link graph export to IGNY8
- ❌ Not integrated into site scan process
**Recommendation:** Implement:
1. Function to extract internal links from posts (source_url, target_url, anchor)
2. Include link graph in `igny8_collect_site_data()` output
3. Send link graph to `/linker/link-map/` during full site scans
---
### 5.3 Accept Link Recommendations Via Webhook
**Status:** ❌ **NOT IMPLEMENTED** (This is Phase 6)
**Note:** This requirement is listed in Phase 5 but implementation belongs to Phase 6 (Webhooks & Remote Control). The REST endpoint `/wp-json/igny8/v1/event` is not yet implemented.
**Required (for Phase 6):**
- REST endpoint `/wp-json/igny8/v1/event` with shared secret
- Handler for `action: "insert_link"` events
- Queue link insertions
---
### 5.4 Expose Optimizer Triggers
**Status:** ❌ **NOT IMPLEMENTED**
**Required:**
- Expose optimizer triggers (metrics requests, re-optimization)
- Endpoints: `/optimizer/jobs/` (POST), `/optimizer/jobs/{id}/` (GET)
**Current State:**
- ✅ Optimizer module is listed in available modules
- ❌ No functions to create optimizer jobs
- ❌ No functions to fetch optimizer job status
- ❌ No UI to trigger optimizer actions
**Recommendation:** Implement:
1. Function `igny8_create_optimizer_job($post_id, $job_type, $priority)`
2. Function `igny8_get_optimizer_job_status($job_id)`
3. UI in post editor or settings to trigger optimization
4. Display optimizer scores/recommendations
---
## Summary
| Phase | Status | Completion |
|-------|--------|------------|
| **Phase 1** | ✅ Complete | 100% |
| **Phase 2** | ✅ Complete | 100% |
| **Phase 3** | ⚠️ Mostly Complete | 90% (missing detailed queue visualization) |
| **Phase 4** | ✅ Complete | 100% |
| **Phase 5** | ❌ Not Implemented | 0% |
**Overall Completion (Phases 1-5):** ~78%
---
## Recommendations
### High Priority (Phase 5)
1. **Implement Planner briefs display** (5.1)
- Add meta box in post editor
- Add refresh action buttons
- Display cached briefs
2. **Implement link graph export** (5.2)
- Extract internal links from posts
- Include in site scan data
- Send to `/linker/link-map/` endpoint
3. **Implement optimizer triggers** (5.4)
- Create optimizer job functions
- Add UI to trigger optimization
- Display optimizer results
### Medium Priority
4. **Enhance queue visualization** (3.4)
- Add detailed queue status table
- Show failure logs
- Add retry mechanisms
### Low Priority
5. **Phase 6 preparation** (5.3)
- Plan webhook endpoint structure
- Design shared secret authentication
- Plan link insertion queue system
---
## Notes
- All implemented phases follow the plan specifications correctly
- API endpoints are used as specified in the plan
- Module toggles and post type filters are respected throughout
- Cron scheduling is properly configured
- Token refresh and credential security are properly implemented