feat(prompts): versioned prompt registry, v1 seed, pinning + stamping
Pipeline v2 Phase 1, commit 2/4. Prompt_Registry (read) + Prompt_Registry_Writer (immutable create/activate/seed) over the new prompts table; canonical v1 bodies extracted verbatim into Prompt_Defaults(+Editorial) — single source for BOTH the seed migration (Migrate_Prompt_Seed_V0180, flag-gated, self-healing) and the in-code fallback, so a missing table renders byte-identical prompts and never fatals. Call sites swapped: Content_Prompts, Analysis_Prompts, Chief_Editor, LLM_Research_Provider. Includes the image-composer seam keys image.rewriter_system + image.style_template (composer PR consumes, must not add its own prompt storage). Pinning: Cost_Tracker::set_run_id() registers the process run context, ensures the runs ledger row, and pins active versions once per run; log_api_call/log_image_generation stamp prompt_version (run pins) + agent_role (stage map) on every generation_log row. Single-pass keeps stage 'draft' and stamps content.single_pass explicitly. Under-300 refactors: Content_Generator's four duplicated span/log blocks consolidated into execute_stage() (301 -> 224 lines, behavior identical); get_avg_tokens_for_stages body moved to Cost_Reporter with a delegating wrapper kept for API compatibility. Tests: byte-identical fallback renders (single_pass/outline/polish/ editor.system), token filling, key coverage incl. stage-map integrity. Agent-Session: pipeline-v2-phase1-engineer-20260612
This commit is contained in:
10
includes/models/class-generation-log.php
Executable file → Normal file
10
includes/models/class-generation-log.php
Executable file → Normal file
@@ -26,6 +26,8 @@ class PRAutoBlogger_Generation_Log {
|
||||
private ?string $request_json;
|
||||
private string $response_status;
|
||||
private ?string $error_message;
|
||||
private ?string $agent_role;
|
||||
private ?string $prompt_version;
|
||||
private string $created_at;
|
||||
|
||||
/**
|
||||
@@ -44,6 +46,8 @@ class PRAutoBlogger_Generation_Log {
|
||||
$this->request_json = $data['request_json'] ?? null;
|
||||
$this->response_status = $data['response_status'] ?? 'success';
|
||||
$this->error_message = $data['error_message'] ?? null;
|
||||
$this->agent_role = $data['agent_role'] ?? null;
|
||||
$this->prompt_version = isset( $data['prompt_version'] ) ? (string) $data['prompt_version'] : null;
|
||||
$this->created_at = $data['created_at'] ?? current_time( 'mysql' );
|
||||
}
|
||||
|
||||
@@ -71,6 +75,10 @@ class PRAutoBlogger_Generation_Log {
|
||||
return $this->response_status; }
|
||||
public function get_error_message(): ?string {
|
||||
return $this->error_message; }
|
||||
public function get_agent_role(): ?string {
|
||||
return $this->agent_role; }
|
||||
public function get_prompt_version(): ?string {
|
||||
return $this->prompt_version; }
|
||||
public function get_created_at(): string {
|
||||
return $this->created_at; }
|
||||
|
||||
@@ -90,6 +98,8 @@ class PRAutoBlogger_Generation_Log {
|
||||
'request_json' => $this->request_json,
|
||||
'response_status' => $this->response_status,
|
||||
'error_message' => $this->error_message,
|
||||
'agent_role' => $this->agent_role,
|
||||
'prompt_version' => $this->prompt_version,
|
||||
'created_at' => $this->created_at,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user