From c70352eb4050f1e0842d8f93bb945f9788eff210 Mon Sep 17 00:00:00 2001 From: peptiderepo Date: Sun, 19 Apr 2026 16:13:21 +0700 Subject: [PATCH] fix: two fatal errors preventing plugin activation (v0.1.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. NAMESPACE is a PHP reserved keyword — renamed to REST_NAMESPACE in the REST controller. This caused a parse error on activation. 2. Autoloader can't resolve PR_Core class — the class name equals the autoloader prefix exactly, so stripping "PR_Core_" yields an empty suffix and the wrong filename. Added explicit require_once in bootstrap, same pattern as PRAutoBlogger. Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 9 +++++++++ includes/api/class-pr-core-rest-controller.php | 14 +++++++------- peptide-repo-core.php | 9 +++++++-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a219a8..4f726ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to Peptide Repo Core are documented here. Format: [Semantic Versioning](https://semver.org/). +## [0.1.1] — 2026-04-19 + +### Fixed +- **Fatal error on activation: `NAMESPACE` is a PHP reserved keyword.** Renamed + to `REST_NAMESPACE` in the REST controller. +- **Fatal error: autoloader cannot resolve `PR_Core` class.** Class name equals + the autoloader prefix exactly, producing wrong filename. Added explicit + require_once in bootstrap (same pattern as PRAutoBlogger). + ## [0.1.0] — 2026-04-17 ### Added diff --git a/includes/api/class-pr-core-rest-controller.php b/includes/api/class-pr-core-rest-controller.php index bf7e3b7..f2e8d5e 100644 --- a/includes/api/class-pr-core-rest-controller.php +++ b/includes/api/class-pr-core-rest-controller.php @@ -23,7 +23,7 @@ declare(strict_types=1); class PR_Core_Rest_Controller { /** @var string REST namespace. */ - private const NAMESPACE = 'pr-core/v1'; + private const REST_NAMESPACE = 'pr-core/v1'; /** * Register the rest_api_init hook. @@ -43,7 +43,7 @@ class PR_Core_Rest_Controller { */ public function register_routes(): void { // GET /peptides - register_rest_route( self::NAMESPACE, '/peptides', [ + register_rest_route( self::REST_NAMESPACE, '/peptides', [ 'methods' => 'GET', 'callback' => [ $this, 'list_peptides' ], 'permission_callback' => '__return_true', @@ -57,14 +57,14 @@ class PR_Core_Rest_Controller { ] ); // GET /peptides/{id} - register_rest_route( self::NAMESPACE, '/peptides/(?P\d+)', [ + register_rest_route( self::REST_NAMESPACE, '/peptides/(?P\d+)', [ 'methods' => 'GET', 'callback' => [ $this, 'get_peptide' ], 'permission_callback' => '__return_true', ] ); // GET /peptides/{id}/dosing - register_rest_route( self::NAMESPACE, '/peptides/(?P\d+)/dosing', [ + register_rest_route( self::REST_NAMESPACE, '/peptides/(?P\d+)/dosing', [ 'methods' => 'GET', 'callback' => [ $this, 'list_dosing' ], 'permission_callback' => '__return_true', @@ -75,21 +75,21 @@ class PR_Core_Rest_Controller { ] ); // POST /peptides/{id}/dosing (auth required) - register_rest_route( self::NAMESPACE, '/peptides/(?P\d+)/dosing', [ + register_rest_route( self::REST_NAMESPACE, '/peptides/(?P\d+)/dosing', [ 'methods' => 'POST', 'callback' => [ $this, 'create_dosing' ], 'permission_callback' => [ $this, 'check_write_permission' ], ] ); // GET /peptides/{id}/legal - register_rest_route( self::NAMESPACE, '/peptides/(?P\d+)/legal', [ + register_rest_route( self::REST_NAMESPACE, '/peptides/(?P\d+)/legal', [ 'methods' => 'GET', 'callback' => [ $this, 'list_legal' ], 'permission_callback' => '__return_true', ] ); // POST /peptides/{id}/legal (auth required) - register_rest_route( self::NAMESPACE, '/peptides/(?P\d+)/legal', [ + register_rest_route( self::REST_NAMESPACE, '/peptides/(?P\d+)/legal', [ 'methods' => 'POST', 'callback' => [ $this, 'create_legal' ], 'permission_callback' => [ $this, 'check_write_permission' ], diff --git a/peptide-repo-core.php b/peptide-repo-core.php index dfdabeb..6162b53 100644 --- a/peptide-repo-core.php +++ b/peptide-repo-core.php @@ -3,7 +3,7 @@ * Plugin Name: Peptide Repo Core * Plugin URI: https://peptiderepo.com * Description: Canonical peptide schema — shared data layer for the peptiderepo.com ecosystem. Provides the pr_peptide CPT, dosing rows, legal status cells, AI candidate queue, disclaimer component, and JSON-LD output. - * Version: 0.1.0 + * Version: 0.1.1 * Author: peptiderepo * Author URI: https://peptiderepo.com * License: GPL-2.0-or-later @@ -22,7 +22,7 @@ if ( ! defined( 'ABSPATH' ) ) { /* ── Constants ────────────────────────────────────────────────────────── */ -define( 'PR_CORE_VERSION', '0.1.0' ); +define( 'PR_CORE_VERSION', '0.1.1' ); define( 'PR_CORE_PLUGIN_FILE', __FILE__ ); define( 'PR_CORE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'PR_CORE_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); @@ -33,6 +33,11 @@ define( 'PR_CORE_TARGET_SCHEMA_VERSION', 3 ); require_once PR_CORE_PLUGIN_DIR . 'includes/class-pr-core-autoloader.php'; PR_Core_Autoloader::register(); +// The main orchestrator class is loaded explicitly because its name (PR_Core) +// equals the autoloader prefix exactly — stripping "PR_Core_" yields an empty +// suffix, producing "class-pr-core-.php" instead of "class-pr-core.php". +require_once PR_CORE_PLUGIN_DIR . 'includes/class-pr-core.php'; + /* ── Activation / Deactivation ────────────────────────────────────────── */ register_activation_hook( __FILE__, [ 'PR_Core_Activator', 'activate' ] );