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
Replaces the per-repo staging/smoke/production jobs with one call to
peptiderepo/peptide-e2e/.github/workflows/deploy-app.yml (target_path=wp-content/plugins/peptide-repo-core).
Validated end-to-end on the calculator pilot.
Agent-Session: cto rollout-reusable-deploy
* ci(audit): retry PR-association check to stop false positives on squash-merges
listPullRequestsAssociatedWithCommit is eventually-consistent after a squash
merge; the single immediate call intermittently flagged legit merges as
'direct push to main'. Now polls up to 5x/10s before opening an issue.
Agent-Session: cto audit-race-fix
* chore: bump plugin header to 0.5.0 to match PR_CORE_VERSION constant
The smoke job is a reusable-workflow 'uses:' call; Actions does not support
continue-on-error there, producing a 0-job workflow failure that has failed
every deploy (so v0.5.0 never reached production). Matches the prautoblogger
fix in #147. Smoke is not in deploy-production needs, so it stays non-blocking.
Agent-Session: cto restore-prcore-deploy
Co-authored-by: peptiderepo <peptiderepo@users.noreply.github.com>
- Remove invalid continue-on-error from reusable workflow call
(GitHub Actions doesn't support this property on 'uses:' jobs;
it caused 0-job workflow failures)
- Remove 'smoke' from deploy-production needs — smoke failures (e.g.
Playwright infra issues) must not block valid production deploys.
This matches the pattern already used by the theme repo.
- Smoke still runs and uploads artifacts; it's just not a gate.
- smoke job now has continue-on-error: true so a Playwright infra failure
never silently blocks a valid production deploy
- smoke.yml root cause was fixed in peptide-e2e (da79ee2) — explicit
checkout of peptide-e2e in workflow_call context
- This commit retriggers the CI/deploy pipeline for PR Core v0.5.0
- 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.
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>
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.
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>
The deploy workflow references ci.yml as a reusable workflow
via `uses: ./.github/workflows/ci.yml`. Without workflow_call
in the trigger list, GitHub Actions rejects the reference.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rsync over SSH on push to main. Runs CI first, then syncs
production files to wp-content/plugins/peptide-repo-core/
on Hostinger. Includes LiteSpeed cache purge and health check.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>