fix: image style suffix empty-string bypass and image cost run_id mismatch (v0.12.2)
Bug 1: Image style suffix empty-string bypass - get_option() for prautoblogger_image_style_suffix returns empty string from DB instead of default - Root cause of post #675 rendering photorealistically instead of newspaper comic - Fixed by extracting private helper get_style_suffix() that treats both absent AND empty as default - Applied to all three call sites in class-image-prompt-builder.php (lines 85, 107, 272) Bug 2: Image cost logged under wrong run_id - class-image-pipeline.php created fresh cost tracker when invoked without argument - Image costs logged under different run_id than article's other stages - Cost breakdowns aggregating by run_id silently excluded image line items - Fixed by threading article worker's cost tracker through Publisher to image pipeline - Modified publisher.php and post-assembler.php to accept and pass cost_tracker - Updated article-worker.php to pass cost_tracker to publisher methods - Image costs now share same run_id as analysis, draft, review, and llm_research stages Version: 0.12.1 -> 0.12.2 CHANGELOG: Added comprehensive entry describing both fixes
This commit is contained in:
@@ -232,11 +232,12 @@ class PRAutoBlogger_Post_Assembler {
|
||||
* Generate and attach images to a published post.
|
||||
* Non-blocking — logs errors but doesn't re-throw since the post is already created.
|
||||
*
|
||||
* @param int $post_id Post ID.
|
||||
* @param PRAutoBlogger_Article_Idea $idea Article idea (contains source IDs).
|
||||
* @param array $post_data Post data array (for article content).
|
||||
* @param int $post_id Post ID.
|
||||
* @param PRAutoBlogger_Article_Idea $idea Article idea (contains source IDs).
|
||||
* @param array $post_data Post data array (for article content).
|
||||
* @param ?PRAutoBlogger_Cost_Tracker $cost_tracker Optional cost tracker for image generation cost logging.
|
||||
*/
|
||||
public static function attach_generated_images( int $post_id, PRAutoBlogger_Article_Idea $idea, array $post_data ): void {
|
||||
public static function attach_generated_images( int $post_id, PRAutoBlogger_Article_Idea $idea, array $post_data, ?PRAutoBlogger_Cost_Tracker $cost_tracker = null ): void {
|
||||
// Fetch the original Reddit source data for Image B's source-driven prompt.
|
||||
// The idea's source_ids point to rows in the source_data table collected
|
||||
// during the pipeline's collection step.
|
||||
@@ -247,7 +248,7 @@ class PRAutoBlogger_Post_Assembler {
|
||||
// internally, immediately after each image generates. This
|
||||
// ensures attachment persists even if the process times out
|
||||
// before this method returns.
|
||||
$result = ( new PRAutoBlogger_Image_Pipeline() )->generate_and_attach_images( $post_id, $post_data, $source_data );
|
||||
$result = ( new PRAutoBlogger_Image_Pipeline( null, $cost_tracker ) )->generate_and_attach_images( $post_id, $post_data, $source_data );
|
||||
|
||||
if ( ! empty( $result['errors'] ) ) {
|
||||
foreach ( $result['errors'] as $error ) {
|
||||
|
||||
Reference in New Issue
Block a user