KennyDTC Smart Publisher 1.5.0 — 2026-09-11
Environment: WordPress 7.1 / PHP 8.3.6 / Yoast 28.4 / SQLite integration
126 automated regression/handler assertions passed.
Browser: real Settings API toggle off, two-file/three-article import, review save, weekly schedule and native Cron verification; 390/768/1440 px responsive controls; no page errors.


regression-150-new.txt
PASS fresh install defaults to enabled
PASS old settings migrate to enabled
PASS checkbox on persists
PASS unchecked checkbox persists off
PASS explicit off respected
PASS disabled generates no TDK, including explicit import values
PASS disabled actual import creates no TDK
PASS disabled import still creates draft
PASS off preserves existing canonical TDK during save
PASS off still saves article slug and excerpt
PASS repair respects off
PASS schedule respects off
PASS actual schedule has matching native Cron event
PASS publish now respects off
PASS re-enable alone leaves old TDK intact
PASS enabled synchronizes canonical and plugin fields
PASS enabled import retains explicit phrase
PASS legacy daily cap preserved
PASS weekly weekdays and cap roll to next Monday
PASS monthly window and cap roll to next month
PASS missing 31st skipped, no overflow into next month
PASS leap-day month window
PASS non-leap February skipped
PASS monthly cap resets across year
PASS month interval clamps target month, continues from actual date
PASS week interval
PASS hour interval obeys daily window
PASS insufficient bounded range rejects entire allocation
PASS deadline inclusive
PASS equal deadline rejected
PASS invalid deadline rejected
PASS invalid rule rejected {"period":"bad"}
PASS invalid rule rejected {"period":"week","weekdays":[]}
PASS invalid rule rejected {"period":"week","weekdays":[8]}
PASS invalid rule rejected {"period":"month","month_from":20,"month_until":10}
PASS invalid rule rejected {"interval_unit":"month","interval_value":0}
PASS invalid rule rejected {"interval_unit":"day","interval_value":"1.5"}
PASS other batch before start consumes weekly quota
PASS selected existing post excluded when rescheduling
PASS earlier same-month queued article consumes quota
PASS published imported articles count toward calendar quota
PASS future occupied slot preserves minimum spacing
PASS calendar day preserves local time across spring DST
PASS spring DST uses calendar day, not 24 elapsed hours
PASS fall DST uses 25-hour calendar day
PASS new form values parsed server side
PASS old form/API has daily defaults
TOTAL 47 checks passed


regression-150-handler.txt
PASS deadline rejection leaves draft and no cron 199
PASS deadline rejection leaves draft and no cron 202
PASS deadline rejection leaves draft and no cron 205
PASS allocation error releases lock
PASS real queue handler honors monthly rules and deadline
PASS real handler creates future status and matching cron 199
PASS real handler creates future status and matching cron 202
PASS real handler creates future status and matching cron 205
PASS successful handler releases lock
PASS real handler reschedules weekly with weekday selection
TOTAL 10 handler checks passed


regression-150-legacy.txt
PASS Import stays draft 120
PASS Import stays draft 123
PASS Import stays draft 126
PASS Allocate three dates
PASS Interval, daily cap and next day
PASS Schedule success 120
PASS Draft does not publish early 120
PASS GMT exact 120
PASS Native cron exact 120
PASS Schedule success 123
PASS Draft does not publish early 123
PASS GMT exact 123
PASS Native cron exact 123
PASS Schedule success 126
PASS Draft does not publish early 126
PASS GMT exact 126
PASS Native cron exact 126
PASS Second batch avoids occupied days and slots
PASS Out-of-window moves to next morning
PASS Reject inverted window
PASS Reject past start
PASS Reject impossible dates
PASS Reject relative date strings
PASS Reject nonexistent DST local time
PASS DST keeps elapsed interval
PASS Acquire atomic queue lock
PASS Reject simultaneous batch
PASS Release queue lock
PASS Publishing capability enforced
PASS Publish scheduled article immediately resets future date
PASS Immediate publication clears cron
PASS Native cancellation syncs review and clears cron
PASS Keyword alias keyword
PASS Keyword alias Keywords
PASS Keyword alias Focus Keyword
PASS Keyword alias 焦点关键词
PASS Keyword alias 目标关键词
PASS Keyword alias _yoast_wpseo_focuskw
PASS Auto keyphrase preserves contiguous phrase
PASS Explicit keyword preserves plus symbols
PASS Canonical Yoast keyword written
PASS Native Yoast changes mirrored
PASS Structural repair preserves custom keyword
PASS Index refresh no error
PASS Yoast indexable uses latest SEO values
PASS No duplicate Yoast indexables
PASS Chinese header colon and keyword parsed
PASS Repeated normalization does not duplicate images
PASS Custom anchor labels stable on reprocessing
PASS Disabling rules restores original words
PASS DOCX explicit keyword extracted
PASS DOCX SEO metadata removed from body
PASS Excel serial preserves local wall clock
PASS WordPress cron does not publish before due date
PASS WordPress cron publishes due article
TOTAL 55 checks passed


regression-150-extended.txt
PASS Failed cron returns error and draft
PASS Reschedule replaces old cron event
PASS Trash removes future cron
PASS Trash cannot be scheduled
PASS Stale plugin metabox does not overwrite Yoast
PASS Yoast deletion is mirrored
PASS Reject oversized ZIP entry before extraction
PASS Render admin import
PASS Render admin review
PASS Render admin queue
PASS Render admin anchor_rules
PASS Render admin settings
PASS Admin pages render without PHP warnings: 
TOTAL 13 extended checks passed


regression-150-daily.txt
PASS published articles count toward daily cap
