6.9 KiB
6.9 KiB
Changelog
All notable changes to Peptide Repo Core are documented here. Format: Semantic Versioning.
[0.2.2] — 2026-04-25
Fixed
- Remove
rest_namespacefrom peptide CPT registration. Custom namespace prevented Gutenberg block editor from loading peptide posts for editing (404 on wp/v2 REST route). All 89 peptide entries are now editable in the block editor.
[0.2.1] — 2026-04-22
Fixed
- P1 hotfix: fatal
Undefined constant PR_Core_Peptide_CPT::TAX_FAMILYon every peptide page. The v0.2.0 release removedTAX_FAMILYfromPR_Core_Peptide_CPTbut left two stale references inPR_Core_Peptide_Repository(thefamilyfilter branch infind_all()and the families lookup inpost_to_dto()). JSON-LD emission on single-peptide templates calledfind_by_id(), which calledpost_to_dto(), which hit the undefined constant and killed page rendering mid-wp_head(). QA gate on874f93bmissed this because the unit tests cover the CPT class in isolation, not the repository's consumption of its constants. Post-mortem + QA checklist update to follow.
Changed
PR_Core_Peptide_Repository::find_all()—familyfilter is now silently ignored rather than throwing. Next minor bump will remove it from the REST schema.PR_Core_Peptide_DTO::$familiesis preserved but always populated as[]. Keeps REST response shape stable for existing clients; will be dropped with a release note.
[0.2.0] — 2026-04-22
Changed (BREAKING)
- CPT renamed from
pr_peptidetopeptide. Consolidates with PSA's existingpeptideCPT which owns the 89 canonical peptide posts on production. - Taxonomy renamed from
pr_peptide_categorytopeptide_category. Same reason. - CPT args harmonized as superset of PSA + prior PR Core registration (supports now includes thumbnail + revisions + custom-fields).
- Defensive registration: guards with
post_type_exists()/taxonomy_exists()so PSA's parallel registration no-ops cleanly during the PSA v4.5.0 transition.
Added
PR_Core_Activator::maybe_flush_on_version_change()— one-shot rewrite flush on in-place version bumps (hooked atinitpriority 999). Eliminates the need for a manualwp rewrite flushafter updates that change CPT/taxonomy slugs._pr_core_authoredpost-meta flag contract — peptide posts created via PR Core UI carry this flag;uninstall.phpuses it to scope teardown to plugin-owned posts only.- Lightweight unit-test harness (
tests/bootstrap.php+tests/unit/test-peptide-cpt.php) that exercises CPT/taxonomy guards and args payload shape without a PHPUnit + wp-env dependency. Wired into the existing PHP-lint CI job.
Removed
pr_peptide_familytaxonomy — never populated, never surfaced in UI.- All
pr_peptide*CPT-slug-derived references (constants, docblock mentions, uninstall string literals). - Blanket
DELETE FROM posts WHERE post_type = 'pr_peptide'on uninstall. Replaced with a join-on-_pr_core_authoredselective delete so PSA-authored peptide posts are never destroyed by PR Core teardown. - Taxonomy-term cleanup on uninstall.
peptide_categoryis shared ownership post-v0.2.0; term data the site still needs is preserved.
Fixed
- Production peptide detail pages (all 89) were 404'ing due to a rewrite slug collision between PSA's
peptideCPT and PR Core'spr_peptideCPT both claiming/peptides/%postname%/. PR Core v0.1.1's emptypr_peptideCPT was winning the rewrite resolution. This release consolidates both to a singlepeptideCPT owned by PR Core.
Notes
- Scope of the
pr_peptide*scrub is intentionally narrow: CPT-slug-derived identifiers only. Class names (PR_Core_Peptide_CPT), file names (class-pr-core-peptide-cpt.php), plugin constants (PR_CORE_VERSION), option keys (pr_core_*), and the REST namespace (pr-core/v1) are the plugin's own namespace, not the CPT slug, and are preserved verbatim. - PR Core-defined meta keys (
display_name,aliases,evidence_strength,editorial_review_status, …) are gated bymanage_peptide_content. The activator grants this capability toadministratorandeditorroles on activation. Prod sites where the activation hook never fired (v0.1.1 was deployed manually) will receive the grant on nextwp plugin activate peptide-repo-core. Follow-up thread to decide whether a dedicatedpeptide_editorrole is more appropriate than extending coreeditor.
[0.1.1] — 2026-04-19
Fixed
- Fatal error on activation:
NAMESPACEis a PHP reserved keyword. Renamed toREST_NAMESPACEin the REST controller. - Fatal error: autoloader cannot resolve
PR_Coreclass. 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
pr_peptidecustom post type with REST API, archive, and taxonomies (pr_peptide_category,pr_peptide_family).- Post-meta fields: display_name, aliases, molecular_formula, molecular_weight, cas_number, drugbank_id, chembl_id, evidence_strength, editorial_review_status, last_editorial_review_at, medical_editor_id.
- Custom table
pr_dosing_rowswith schema migration 0001 — high-cardinality dosing data with citation tracking, evidence strength, and supersede (soft-delete) pattern. - Custom table
pr_legal_cellswith schema migration 0002 — per-country legal status with unique constraint on peptide x country (active). - Custom table
pr_ai_candidate_queuewith schema migration 0003 — AI-extracted dosing candidates awaiting human review. - Migration runner with sequential versioning (
pr_core_schema_versionoption,PR_CORE_TARGET_SCHEMA_VERSIONconstant). - Typed DTOs:
PR_Core_Peptide_DTO,PR_Core_Dosing_Row_DTO,PR_Core_Legal_Cell_DTO,PR_Core_Candidate_DTO. - Repository classes:
PR_Core_Peptide_Repository,PR_Core_Dosing_Repository,PR_Core_Legal_Repository,PR_Core_Candidate_Queue_Repository. - REST API (
pr-core/v1): list/get peptides, list/create dosing rows, list/create legal cells. - Admin UI: Scientific Identifiers meta box, Dosing Data meta box (read-only), Legal Status meta box (read-only), custom list-table columns (Evidence, Editorial, Dosing Rows).
- AI Candidate Queue admin page with approve/reject workflow (copies approved rows to dosing table).
- Shared disclaimer component:
[pr_disclaimer surface="dosing"]shortcode,PR_Core_Disclaimer::render()static method,pr_core_disclaimer_for_surfacefilter. - JSON-LD emission: schema.org
Drugtype on single peptide pages withpr_core_jsonld_peptidefilter. - Public API filters:
pr_core_get_indexable_corpus,pr_core_disclaimer_for_surface,pr_core_evidence_strength_label. - Public API actions:
pr_core_before/after_peptide_publish,pr_core_before/after_dosing_row_publish,pr_core_before/after_legal_cell_publish,pr_core_candidate_approved/rejected. manage_peptide_contentcapability granted to administrators and editors on activ