28 Commits

Author SHA1 Message Date
peptiderepo
a1c77de332 feat: PRAB article JSON-LD emitter + meta reader (v0.8.0) (#25)
prcore emits MedicalWebPage+Article JSON-LD for any post carrying _prab_* meta (ratified contract v1): citation[], about->Drug @ids, honest reviewedBy (Person only with a real human reviewer, else Organization), lastReviewed; integrates into Yoast's graph (no duplicate nodes), standalone @graph fallback; all _prab_* sanitized as untrusted. Unblocks the Phase-2b SEO stage.

QA: REJECT-P1 (DoD doc/test gaps) -> APPROVE @ dbfc50c (qa-reviews/peptide-repo-core/2026-06-23-dbfc50c.md). CEO greenlight 2026-06-22 (complete-all-tasks directive).

Agent-Session: prcore-jsonld-merge-20260623
2026-06-23 12:29:14 +07:00
peptiderepo
a7a2bb2f6d fix: resolve PR_Core_Settings_Renderer undefined constant fatal (v0.7.1) (#24)
Squash-merge of PR #24 — QA APPROVED (2026-06-17 SHA ad2b1d9a)

Agent-Session: 2026-06-17-phase1-vps-runner-deploy-500fixes
2026-06-17 13:16:33 +07:00
peptiderepo
665d7fa9e1 Adopt reusable CI standard + PHPUnit conversion (#22)
Squash-merge of PR #22: adopt shared reusable CI workflow, convert PHPUnit to stubs, update branch-protection contexts.

QA-approved at 05d8094a1d. All required CI checks green.

Agent-Session: 2026-06-17-prcore-ci-deploy
2026-06-17 01:12:00 +07:00
peptiderepo
d0b5875fd8 peptide-repo-core v0.6.2: inject Drug/FAQ via wpseo_schema_graph (fix peptide-page fatal) (#21)
v0.6.0 hooked wpseo_schema_graph_pieces with plain arrays; Yoast expects Abstract_Schema_Piece objects (get_class/is_needed) -> fatal on peptide singles. Inject Drug+FAQ as array nodes via wpseo_schema_graph (prio 12) instead. +regression test.

QA: APPROVE — qa-reviews/peptide-repo-core/2026-06-13-0bbb75fd2689f375b9d154fc0ed0b0098a1865b6.md

Agent-Session: jsonld-peptide-piece-fix v0.6.2 merge
2026-06-13 14:25:04 +07:00
peptiderepo
118f301705 peptide-repo-core v0.6.1: fix Yoast webpage-type TypeError on singular pages (#20)
Accept string|array in retype_to_medical_webpage (Yoast wpseo_schema_webpage_type passes array on singular pages); normalize @type comparison; add regression test.

QA: APPROVE — qa-reviews/peptide-repo-core/2026-06-13-077c4b0e518f682721abe6a115eac9bb2bf18186.md

Agent-Session: jsonld-webpage-typefix v0.6.1 merge
2026-06-13 13:52:46 +07:00
peptiderepo
e9d97b51e2 peptide-repo-core v0.6.0: peptide schema backfill + Yoast-integrated Drug/MedicalWebPage/FAQ (#19)
Backfill psa_*->_pr_* meta (migration 0004 + PubChem fallback); enrich Drug node with {permalink}#drug @id + molecularFormula/Weight/alternateName; rewrite emitter into Yoast schema graph (MedicalWebPage retype + FAQPage, no duplicate nodes).

QA: APPROVE (independent) — qa-reviews/peptide-repo-core/2026-06-13-817690c1b6ec2118ddcf3b8cfe8bc5ea7f3933b3.md

Agent-Session: peptide-schema-backfill v0.6.0 merge
2026-06-13 13:09:56 +07:00
peptiderepo
708204c3b6 PR Core v0.5.0: Add Repo Daily CPT, taxonomy, and metaboxes
- Register repo_daily CPT at /daily/[slug]/ for editorial publications
- Register repo_daily_category taxonomy with 4 seeded terms
- Add Repo Daily metabox for author byline and clinical review flag
- Bulk-migrate _repo_daily_author on autoblogged posts (psa_source)
- Update ARCHITECTURE.md with content-type table and scanner scope
- Update CONVENTIONS.md with repo_daily meta field extension pattern
- Bump version to 0.5.0, add CHANGELOG entry

Closes v0.5.0 scope.
2026-04-27 15:33:28 +00:00
peptiderepo
c52cf9b3d6 feat: verification scanner + admin UI (PR Core v0.4.0)
Implements recurring verification scanner, dashboard widget, per-post sidebar meta box, reader-facing last-verified display, and unified settings panel. Bumps to v0.4.0.

Co-authored-by: peptiderepo <peptiderepo@users.noreply.github.com>
2026-04-27 12:24:57 +07:00
peptiderepo
3050292fcf fix(cpt): remove rest_namespace so Gutenberg block editor can load peptide posts (v0.3.2)
Removes rest_namespace => pr-core/v1 from CPT registration. Gutenberg fetches wp/v2 hardcoded — custom namespace caused 404 and editor crash on all 89 peptide entries. WordPress defaults to wp/v2.

QA: PASS (2026-04-25-9d4ce64c.md)
CI: green
PR: #5
2026-04-25 01:57:30 +07:00
peptiderepo
9c59fe6706 hotfix: add missing PR_Core_Related_Posts_Provider interface (site down — v0.3.1) 2026-04-24 12:07:23 +07:00
peptiderepo
a10610ded7 fix: trim CPT docblock to stay under 300-line limit 2026-04-24 10:22:50 +07:00
peptiderepo
2195b449b2 fix: restore missing return + closing braces in sanitize_review_status 2026-04-24 10:21:20 +07:00
peptiderepo
ba4e11192f fix: bring CPT class under 300 lines 2026-04-24 10:15:45 +07:00
peptiderepo
0f62abd6e9 fix: instantiate PR_Core_Topic_Taxonomy in init flow 2026-04-24 10:14:31 +07:00
peptiderepo
b885673a1f feat: instantiate PR_Core_Topic_Taxonomy in init flow 2026-04-24 10:11:53 +07:00
peptiderepo
35e62e8cf1 fix: remove peptide_topic from CPT class, bring under 300 lines 2026-04-24 10:11:33 +07:00
peptiderepo
bd1b2dba48 feat: extract peptide_topic taxonomy to own class 2026-04-24 10:11:03 +07:00
peptiderepo
28e110f780 feat: integrate Related Articles section into main orchestrator 2026-04-24 10:02:50 +07:00
peptiderepo
bb34998d2c feat: integrate settings into admin initialization 2026-04-24 10:02:26 +07:00
peptiderepo
2e7efab97a feat: add PR Core settings page 2026-04-24 10:02:10 +07:00
peptiderepo
0210d73cf7 feat: add peptide_topic taxonomy registration 2026-04-24 10:01:47 +07:00
peptiderepo
a21d35ee27 feat: add PR_Core_Related_Posts_Section renderer 2026-04-24 10:00:47 +07:00
peptiderepo
a906e1b701 feat: add PR_Core_Internal_Posts_Provider implementation 2026-04-24 10:00:43 +07:00
peptiderepo
4d8e98f34b feat: add PR_Core_Related_Posts_Provider interface 2026-04-24 10:00:38 +07:00
peptiderepo
bb3967a071 fix(repo): drop stale TAX_FAMILY references (v0.2.1 P1 hotfix) (#2)
v0.2.0 removed TAX_FAMILY from PR_Core_Peptide_CPT but left two stale
references in PR_Core_Peptide_Repository:
  - find_all() family filter branch (class-pr-core-peptide-repository.php:95-102)
  - post_to_dto() families taxonomy lookup (class-pr-core-peptide-repository.php:138)

JSON-LD emission on single-peptide templates called find_by_id() ->
post_to_dto() which hit the undefined constant and killed every peptide
detail page render mid-wp_head().

Fix:
  - family filter is silently ignored until a future minor bump
    removes it from the REST schema.
  - post_to_dto() hardcodes $families = [] so the DTO still carries
    the field (REST response shape unchanged for existing clients).

Out-of-scope follow-ups:
  - Post-mortem on why the v0.2.0 QA gate missed this (unit tests
    exercised the CPT class in isolation, not the repository's
    consumption of its constants).
  - Add an integration-style test for JSON-LD emission on a single
    peptide so any future CPT-class refactor catches repository drift.

Co-authored-by: peptiderepo <peptiderepo@users.noreply.github.com>
2026-04-22 16:56:42 +07:00
peptiderepo
f086b89e2d feat(cpt): consolidate peptide CPT with PSA; drop pr_peptide (v0.2.0) (#1)
Consolidates the `peptide` CPT under PR Core ownership, dropping the `pr_peptide` slug-collision that was 404ing all 89 peptide detail pages.

- POST_TYPE: pr_peptide -> peptide
- TAX_CATEGORY: pr_peptide_category -> peptide_category
- TAX_FAMILY + pr_peptide_family taxonomy removed
- Defensive post_type_exists/taxonomy_exists guards on both registrations
- Args harmonized as superset of PSA + prior PR Core (adds thumbnail support)
- Activation hook + init:999 version-change flush handler
- Uninstall scoped to _pr_core_authored flag (PSA-authored posts survive)
- Plugin version 0.1.1 -> 0.2.0, CHANGELOG in same commit
- ARCHITECTURE.md + CONVENTIONS.md updated with CPT ownership rule

QA gate verdict: PASS (qa-reviews/peptide-repo-core/2026-04-22-874f93b.md)
Sibling release: peptiderepo/peptide-search-ai#15 (PSA v4.5.0)

Known follow-up: manage_peptide_content capability is not granted to any role as of v0.2.0. No current UI/theme reads or writes PR Core-defined meta keys, so no regression. Follow-up thread to decide role assignment.
2026-04-22 16:44:04 +07:00
peptiderepo
c70352eb40 fix: two fatal errors preventing plugin activation (v0.1.1)
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 <noreply@anthropic.com>
2026-04-19 16:13:21 +07:00
peptiderepo
808b2509d8 feat: initial peptide-repo-core plugin (v0.1.0) — canonical schema sprint
Implements ADR-0002: canonical peptide schema as shared data layer for
the peptiderepo.com ecosystem. All Tier 1 tools (Reconstitution Calculator,
Dosage Reference, Legal Status Tracker, PSA enhancements) build on this.

Includes:
- pr_peptide CPT with REST, taxonomies, 11 meta fields
- 3 custom tables: pr_dosing_rows, pr_legal_cells, pr_ai_candidate_queue
- Sequential migration runner with schema versioning
- 4 typed DTOs and 4 repository classes (full CRUD)
- REST API (pr-core/v1): 6 endpoints (read public, write auth-gated)
- Admin UI: 3 meta boxes, custom columns, AI candidate queue page
- Shared disclaimer component (shortcode + static API)
- JSON-LD Drug schema emission on single peptide pages
- Seed data fixture (3 peptides, 10 dosing rows, 5 legal cells)
- Full teardown in uninstall.php
- CI: PHP lint 8.0-8.2, PHPCS WordPress, 300-line check

All 22 PHP files under 300 lines. Highest: peptide-cpt at 265.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-17 07:36:12 +07:00