generated-scene: add scheduled monitoring runtime and helper lifecycle hardening
This commit is contained in:
@@ -2,12 +2,14 @@ mod common;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::fs;
|
||||
use std::panic::AssertUnwindSafe;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
||||
use common::MockTransport;
|
||||
use futures_util::FutureExt;
|
||||
use serde_json::json;
|
||||
use sgclaw::browser::{BrowserBackend, PipeBrowserBackend};
|
||||
use sgclaw::compat::browser_script_skill_tool::{
|
||||
@@ -201,6 +203,77 @@ async fn execute_browser_script_tool_rejects_missing_expected_domain() {
|
||||
assert!(transport.sent_messages().is_empty());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn execute_browser_script_tool_handles_multibyte_wrapped_script_preview_without_panicking() {
|
||||
let skill_dir = unique_temp_dir("sgclaw-browser-script-helper-utf8-preview");
|
||||
let scripts_dir = skill_dir.join("scripts");
|
||||
fs::create_dir_all(&scripts_dir).unwrap();
|
||||
|
||||
let args_json = json!({
|
||||
"expected_domain": "www.zhihu.com"
|
||||
});
|
||||
let prefix_len = format!("(function() {{\nconst args = {};\n", args_json)
|
||||
.len();
|
||||
let comment_prefix = "//";
|
||||
let ascii_padding = (0..3)
|
||||
.find(|pad| (500usize - (prefix_len + comment_prefix.len() + *pad)) % 3 != 0)
|
||||
.expect("should find a padding value that forces byte 500 off a char boundary");
|
||||
let script_body = format!(
|
||||
"{}{}{}\nreturn {{ ok: true }};\n",
|
||||
comment_prefix,
|
||||
"a".repeat(ascii_padding),
|
||||
"归".repeat(220)
|
||||
);
|
||||
fs::write(scripts_dir.join("utf8_preview.js"), script_body).unwrap();
|
||||
|
||||
let transport = Arc::new(MockTransport::new(vec![BrowserMessage::Response {
|
||||
seq: 1,
|
||||
success: true,
|
||||
data: json!({
|
||||
"text": {
|
||||
"ok": true
|
||||
}
|
||||
}),
|
||||
aom_snapshot: vec![],
|
||||
timing: Timing {
|
||||
queue_ms: 1,
|
||||
exec_ms: 5,
|
||||
},
|
||||
}]));
|
||||
let browser_tool = BrowserPipeTool::new(
|
||||
transport.clone(),
|
||||
test_policy(),
|
||||
vec![1, 2, 3, 4, 5, 6, 7, 8],
|
||||
)
|
||||
.with_response_timeout(Duration::from_secs(1));
|
||||
|
||||
let skill_tool = SkillTool {
|
||||
name: "utf8_preview".to_string(),
|
||||
description: "Regression for UTF-8 safe wrapped script preview logging".to_string(),
|
||||
kind: "browser_script".to_string(),
|
||||
command: "scripts/utf8_preview.js".to_string(),
|
||||
args: HashMap::new(),
|
||||
};
|
||||
|
||||
let result = AssertUnwindSafe(execute_browser_script_tool(
|
||||
&skill_tool,
|
||||
&skill_dir,
|
||||
&PipeBrowserBackend::from_inner(browser_tool),
|
||||
json!({
|
||||
"expected_domain": "www.zhihu.com"
|
||||
}),
|
||||
))
|
||||
.catch_unwind()
|
||||
.await;
|
||||
|
||||
assert!(
|
||||
result.is_ok(),
|
||||
"wrapped script preview should not panic on multibyte UTF-8 content"
|
||||
);
|
||||
let tool_result = result.unwrap().unwrap();
|
||||
assert!(tool_result.success);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn browser_script_skill_tool_executes_packaged_script_via_eval() {
|
||||
let skill_dir = unique_temp_dir("sgclaw-browser-script-skill");
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use std::net::TcpListener;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
@@ -208,6 +209,84 @@ fn parse_probe_args_defaults_timeout_when_flag_is_omitted() {
|
||||
);
|
||||
}
|
||||
|
||||
fn temp_step_file(name: &str, contents: &str) -> PathBuf {
|
||||
let mut path = std::env::temp_dir();
|
||||
let nanos = std::time::SystemTime::now()
|
||||
.duration_since(std::time::UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_nanos();
|
||||
path.push(format!("sgclaw-ws-probe-{name}-{nanos}.txt"));
|
||||
std::fs::write(&path, contents).unwrap();
|
||||
path
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_probe_args_accepts_step_file() {
|
||||
let step_file = temp_step_file(
|
||||
"single",
|
||||
"open-agent::[\"about:blank\",\"sgOpenAgent\"]\n",
|
||||
);
|
||||
let args = vec![
|
||||
"--ws-url".to_string(),
|
||||
"ws://127.0.0.1:12345".to_string(),
|
||||
"--step-file".to_string(),
|
||||
step_file.display().to_string(),
|
||||
];
|
||||
|
||||
let parsed = parse_probe_args(&args).unwrap();
|
||||
|
||||
assert_eq!(parsed.ws_url, "ws://127.0.0.1:12345");
|
||||
assert_eq!(parsed.timeout_ms, 1500);
|
||||
assert_eq!(
|
||||
parsed.steps,
|
||||
vec![ProbeStep {
|
||||
label: "open-agent".to_string(),
|
||||
payload: "[\"about:blank\",\"sgOpenAgent\"]".to_string(),
|
||||
expect_reply: true,
|
||||
}]
|
||||
);
|
||||
|
||||
let _ = std::fs::remove_file(step_file);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_probe_args_preserves_step_and_step_file_order() {
|
||||
let step_file = temp_step_file(
|
||||
"ordered",
|
||||
"open-hot::[\"about:blank\",\"sgBrowerserOpenPage\",\"https://www.zhihu.com/hot\"]\n",
|
||||
);
|
||||
let args = vec![
|
||||
"--ws-url".to_string(),
|
||||
"ws://127.0.0.1:12345".to_string(),
|
||||
"--step".to_string(),
|
||||
"open-agent::[\"about:blank\",\"sgOpenAgent\"]".to_string(),
|
||||
"--step-file".to_string(),
|
||||
step_file.display().to_string(),
|
||||
];
|
||||
|
||||
let parsed = parse_probe_args(&args).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
parsed.steps,
|
||||
vec![
|
||||
ProbeStep {
|
||||
label: "open-agent".to_string(),
|
||||
payload: "[\"about:blank\",\"sgOpenAgent\"]".to_string(),
|
||||
expect_reply: true,
|
||||
},
|
||||
ProbeStep {
|
||||
label: "open-hot".to_string(),
|
||||
payload:
|
||||
"[\"about:blank\",\"sgBrowerserOpenPage\",\"https://www.zhihu.com/hot\"]"
|
||||
.to_string(),
|
||||
expect_reply: true,
|
||||
},
|
||||
]
|
||||
);
|
||||
|
||||
let _ = std::fs::remove_file(step_file);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn probe_records_welcome_then_silence_transcript() {
|
||||
let steps = vec![
|
||||
|
||||
@@ -321,6 +321,35 @@ fn sgclaw_settings_load_service_ws_listen_addr_from_browser_config() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sgclaw_settings_load_scheduled_monitoring_platform_service_base_from_browser_config() {
|
||||
let root = std::env::temp_dir().join(format!("sgclaw-monitoring-platform-config-{}", Uuid::new_v4()));
|
||||
fs::create_dir_all(&root).unwrap();
|
||||
let config_path = root.join("sgclaw_config.json");
|
||||
|
||||
fs::write(
|
||||
&config_path,
|
||||
r#"{
|
||||
"apiKey": "sk-runtime",
|
||||
"baseUrl": "https://api.deepseek.com",
|
||||
"model": "deepseek-chat",
|
||||
"scheduledMonitoringPlatformServiceBaseUrl": "http://25.215.213.128:18080"
|
||||
}"#,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let settings = SgClawSettings::load(Some(config_path.as_path()))
|
||||
.unwrap()
|
||||
.expect("expected sgclaw settings from config file");
|
||||
|
||||
assert_eq!(
|
||||
settings
|
||||
.scheduled_monitoring_platform_service_base_url
|
||||
.as_deref(),
|
||||
Some("http://25.215.213.128:18080")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn browser_attached_config_uses_low_temperature_for_deterministic_execution() {
|
||||
let settings = SgClawSettings::from_legacy_deepseek_fields(
|
||||
|
||||
29
tests/fixtures/generated_scene/bootstrap_localhost_pollution/index.html
vendored
Normal file
29
tests/fixtures/generated_scene/bootstrap_localhost_pollution/index.html
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Bootstrap Localhost Pollution Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="http://cdn.example.com/app.js"></script>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
const requestUrl = "http://localhost:13313/browser-helper.html";
|
||||
|
||||
async function getUserList() {
|
||||
return $.ajax({
|
||||
url: "http://yxgateway.gs.sgcc.com.cn/marketing/userList",
|
||||
type: "POST",
|
||||
contentType: "application/json"
|
||||
});
|
||||
}
|
||||
|
||||
function exportExcel() {
|
||||
return $.ajax({
|
||||
url: "http://localhost:13313/SurfaceServices/personalBread/export/faultDetailsExportXLSX",
|
||||
type: "POST"
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
52
tests/fixtures/generated_scene/bootstrap_target_normalization_followup_2026-04-19.json
vendored
Normal file
52
tests/fixtures/generated_scene/bootstrap_target_normalization_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-bootstrap-target-normalization-roadmap-plan.md",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan.md",
|
||||
"parentSequence": "2026-04-19-final-2-residual-child-plan-sequence-plan.md",
|
||||
"fixedInputBucket": [
|
||||
"sweep-091-scene"
|
||||
],
|
||||
"officialBoardUpdated": false,
|
||||
"implementationSlice": {
|
||||
"type": "none",
|
||||
"summary": "The fixed scene closed under the current deterministic bootstrap target recovery path; no analyzer/generator change was required in this plan."
|
||||
},
|
||||
"summary": {
|
||||
"totalScenes": 1,
|
||||
"autoPass": 1,
|
||||
"failClosedKnown": 0,
|
||||
"sourceUnreadable": 0,
|
||||
"unknown": 0
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-091-scene",
|
||||
"sceneName": "配网异常设备监控统计",
|
||||
"previousFrameworkStatus": "framework-structured-fail-closed",
|
||||
"previousWorkflowArchetype": "page_state_eval",
|
||||
"rawStatus": "auto-pass",
|
||||
"workflowArchetype": "single_request_enrichment",
|
||||
"readinessLevel": "A",
|
||||
"bootstrap": {
|
||||
"expectedDomain": "21.77.244.194:18890",
|
||||
"targetUrl": "http://21.77.244.194:18890/mainSystem",
|
||||
"source": "deterministic"
|
||||
},
|
||||
"missingPieces": [],
|
||||
"risks": [],
|
||||
"passedGates": [
|
||||
"bootstrap_resolved",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"g1e_scope_compatible"
|
||||
],
|
||||
"skillDir": "examples/bootstrap_target_normalization_followup_2026-04-19/skills/sweep-091-scene",
|
||||
"reportPath": "examples/bootstrap_target_normalization_followup_2026-04-19/skills/sweep-091-scene/references/generation-report.json"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This follow-up uses the fixed official-board source scene for sweep-091-scene: 配网异常设备监控统计.",
|
||||
"Earlier residual reports included a scene-name drift for the same sweep id; this plan does not edit historical assets.",
|
||||
"Official board update is intentionally deferred to final-2 board reconciliation refresh."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-bootstrap-target-normalization-roadmap-plan.md",
|
||||
"policySource": "tests/fixtures/generated_scene/promotion_board_reconciliation_policy_2026-04-19.json",
|
||||
"followupSource": "tests/fixtures/generated_scene/bootstrap_target_normalization_followup_2026-04-19.json",
|
||||
"totalScenes": 1,
|
||||
"summary": {
|
||||
"framework-auto-pass-candidate": 1,
|
||||
"framework-structured-fail-closed": 0,
|
||||
"source-unreadable": 0,
|
||||
"unresolved-followup-status": 0
|
||||
},
|
||||
"officialBoardUpdated": false,
|
||||
"canAutoUpdateBoard": false,
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-091-scene",
|
||||
"sceneName": "配网异常设备监控统计",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "single_request_enrichment",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; bootstrap target normalization only publishes candidates."
|
||||
}
|
||||
]
|
||||
}
|
||||
35
tests/fixtures/generated_scene/bootstrap_target_residual_isolation_2026-04-19.json
vendored
Normal file
35
tests/fixtures/generated_scene/bootstrap_target_residual_isolation_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-bootstrap-target-residual-isolation-plan.md",
|
||||
"source": "tests/fixtures/generated_scene/full_coverage_reconciliation_candidates_2026-04-19.json",
|
||||
"scope": {
|
||||
"isolationOnly": true,
|
||||
"forbiddenImplementation": [
|
||||
"src/generated_scene/analyzer.rs",
|
||||
"src/generated_scene/generator.rs",
|
||||
"login/runtime implementation files",
|
||||
"tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
"total": 1,
|
||||
"isolatedBootstrapTargetResidual": 1,
|
||||
"loginRecoveryStarted": false,
|
||||
"runtimeNavigationImplementationStarted": false
|
||||
},
|
||||
"decisions": [
|
||||
{
|
||||
"index": 91,
|
||||
"sceneId": "sweep-091-scene",
|
||||
"sceneName": "用户停电频次分析监测",
|
||||
"workflowArchetype": "page_state_eval",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"reconciliationCandidateStatus": "framework-structured-fail-closed",
|
||||
"readinessLevel": "C",
|
||||
"decision": "isolate-bootstrap-target-residual",
|
||||
"reason": "Page-state/bootstrap-target residual requires navigation/login target normalization and must not be mixed with contract recovery work.",
|
||||
"nextAction": "future-bootstrap-target-normalization-roadmap-input"
|
||||
}
|
||||
],
|
||||
"stopStatement": "Route D is isolation-complete. Do not begin login recovery or runtime navigation implementation under this plan."
|
||||
}
|
||||
56
tests/fixtures/generated_scene/boundary_fail_closed_decision_2026-04-19.json
vendored
Normal file
56
tests/fixtures/generated_scene/boundary_fail_closed_decision_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan",
|
||||
"parentRoute": "Route 5 / boundary-family fail-closed",
|
||||
"plan": "2026-04-19-boundary-fail-closed-decision-plan.md",
|
||||
"scope": {
|
||||
"decisionOnly": true,
|
||||
"fixedInputBuckets": {
|
||||
"local_doc_pipeline": 5,
|
||||
"host_bridge_workflow": 1,
|
||||
"page_state_eval_bootstrap_target": 1
|
||||
},
|
||||
"forbiddenChanges": [
|
||||
"src/generated_scene/analyzer.rs",
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json",
|
||||
"boundary implementation"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
"totalBoundaryBuckets": 3,
|
||||
"totalBoundaryRecords": 7,
|
||||
"openImplementationSlices": 0,
|
||||
"heldOrDeferredRecords": 7,
|
||||
"unresolvedBoundaryAmbiguity": 0
|
||||
},
|
||||
"decisions": [
|
||||
{
|
||||
"bucket": "local_doc_pipeline",
|
||||
"count": 5,
|
||||
"decision": "hold-as-boundary-fail-closed",
|
||||
"reason": "G8 local document pipeline requires local document runtime and attachment handling beyond current full-coverage framework implementation routes.",
|
||||
"nextAction": "defer until a dedicated local-doc runtime roadmap is authorized"
|
||||
},
|
||||
{
|
||||
"bucket": "host_bridge_workflow",
|
||||
"count": 1,
|
||||
"decision": "hold-as-boundary-fail-closed",
|
||||
"reason": "The remaining G6-style boundary record depends on host bridge execution semantics beyond the current decision-only Route 5 scope.",
|
||||
"nextAction": "defer until a dedicated host-bridge implementation roadmap is authorized"
|
||||
},
|
||||
{
|
||||
"bucket": "page_state_eval/bootstrap_target",
|
||||
"count": 1,
|
||||
"decision": "isolate-bootstrap-target",
|
||||
"reason": "Bootstrap target resolution is a separate navigation/login target problem and must not be mixed with contract recovery work.",
|
||||
"nextAction": "keep isolated for a future bootstrap-target roadmap"
|
||||
}
|
||||
],
|
||||
"completionCriteria": {
|
||||
"everyRoute5SubgroupHasNamedDecision": true,
|
||||
"followUpBoundedPlanIsOptional": true,
|
||||
"boundaryImplementationStarted": false
|
||||
},
|
||||
"stopStatement": "Route 5 is decision-complete. Do not begin boundary implementation under this plan."
|
||||
}
|
||||
63
tests/fixtures/generated_scene/boundary_family_entry_decision_2026-04-19.json
vendored
Normal file
63
tests/fixtures/generated_scene/boundary_family_entry_decision_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "boundary-family-real-sample-entry-roadmap",
|
||||
"startingState": {
|
||||
"mainlineClosed": [
|
||||
"G1-E",
|
||||
"G2",
|
||||
"G3"
|
||||
],
|
||||
"boundaryHeld": [
|
||||
"G6",
|
||||
"G7",
|
||||
"G8"
|
||||
],
|
||||
"deferredOutOfScope": [
|
||||
"G4",
|
||||
"G5"
|
||||
]
|
||||
},
|
||||
"comparisonMatrix": [
|
||||
{
|
||||
"group": "G6",
|
||||
"representativeScene": "电能表现场检验完成率指标报表",
|
||||
"entryCondition": "A real sample requires host bridge execution semantics beyond current repo-local validation.",
|
||||
"smallestNewCapability": "host bridge real-sample execution semantics",
|
||||
"entryCost": "high",
|
||||
"decision": "hold",
|
||||
"reason": "Requires host-side execution semantics before a real-sample slice can be bounded safely."
|
||||
},
|
||||
{
|
||||
"group": "G7",
|
||||
"representativeScene": "计量资产库存统计",
|
||||
"entryCondition": "A real sample requires multi-endpoint aggregation verification beyond fixture-level coverage.",
|
||||
"smallestNewCapability": "real multi-endpoint aggregation verification",
|
||||
"entryCost": "medium",
|
||||
"decision": "selected",
|
||||
"reason": "Already has a minimal runnable runtime contract and needs the smallest new capability among boundary families."
|
||||
},
|
||||
{
|
||||
"group": "G8",
|
||||
"representativeScene": "95598供电服务月报",
|
||||
"entryCondition": "A real sample requires local document pipeline runtime and attachment handling beyond current repo-local coverage.",
|
||||
"smallestNewCapability": "local document pipeline runtime and attachment handling",
|
||||
"entryCost": "high",
|
||||
"decision": "hold",
|
||||
"reason": "Still depends on local pipeline and attachment behavior that exceeds the bounded next-step budget."
|
||||
}
|
||||
],
|
||||
"selectedCandidate": {
|
||||
"group": "G7",
|
||||
"representativeScene": "计量资产库存统计",
|
||||
"nextDesign": "docs/superpowers/specs/2026-04-19-g7-real-sample-entry-design.md",
|
||||
"nextPlan": "docs/superpowers/plans/2026-04-19-g7-real-sample-entry-plan.md"
|
||||
},
|
||||
"holdReasons": [
|
||||
"G6 remains held because host bridge execution semantics are still a stronger prerequisite than a bounded real-sample slice allows.",
|
||||
"G8 remains held because local document pipeline runtime and attachment handling are still outside the next bounded slice."
|
||||
],
|
||||
"notes": [
|
||||
"Only one boundary family is admitted as the next candidate.",
|
||||
"This decision does not execute a real sample yet; it only selects the next bounded direction."
|
||||
]
|
||||
}
|
||||
90
tests/fixtures/generated_scene/boundary_residual_hold_decision_2026-04-19.json
vendored
Normal file
90
tests/fixtures/generated_scene/boundary_residual_hold_decision_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-boundary-residual-hold-decision-plan.md",
|
||||
"source": "tests/fixtures/generated_scene/full_coverage_reconciliation_candidates_2026-04-19.json",
|
||||
"scope": {
|
||||
"decisionOnly": true,
|
||||
"forbiddenImplementation": [
|
||||
"src/generated_scene/analyzer.rs",
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
"total": 6,
|
||||
"localDocPipeline": 5,
|
||||
"hostBridgeWorkflow": 1,
|
||||
"heldOrDeferred": 6,
|
||||
"implementationStarted": false,
|
||||
"unresolvedBoundaryAmbiguity": 0
|
||||
},
|
||||
"decisions": [
|
||||
{
|
||||
"index": 33,
|
||||
"sceneId": "sweep-033-scene",
|
||||
"sceneName": "供电可靠率指标统计表",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"readinessLevel": "C",
|
||||
"decision": "hold-for-local-doc-runtime-roadmap",
|
||||
"reason": "Local document pipeline residual requires local document runtime and attachment/document handling that is outside residual Route C implementation scope.",
|
||||
"nextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
{
|
||||
"index": 34,
|
||||
"sceneId": "sweep-034-scene",
|
||||
"sceneName": "供电可靠性数据质量自查报告月报",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"readinessLevel": "C",
|
||||
"decision": "hold-for-local-doc-runtime-roadmap",
|
||||
"reason": "Local document pipeline residual requires local document runtime and attachment/document handling that is outside residual Route C implementation scope.",
|
||||
"nextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
{
|
||||
"index": 42,
|
||||
"sceneId": "sweep-042-scene",
|
||||
"sceneName": "国网金昌供电公司营商环境周例会报告",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"readinessLevel": "C",
|
||||
"decision": "hold-for-local-doc-runtime-roadmap",
|
||||
"reason": "Local document pipeline residual requires local document runtime and attachment/document handling that is outside residual Route C implementation scope.",
|
||||
"nextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
{
|
||||
"index": 51,
|
||||
"sceneId": "sweep-051-scene",
|
||||
"sceneName": "嘉峪关可靠性分析报告",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"readinessLevel": "C",
|
||||
"decision": "hold-for-local-doc-runtime-roadmap",
|
||||
"reason": "Local document pipeline residual requires local document runtime and attachment/document handling that is outside residual Route C implementation scope.",
|
||||
"nextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
{
|
||||
"index": 74,
|
||||
"sceneId": "sweep-074-scene",
|
||||
"sceneName": "同兴智能安全督查日报",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"readinessLevel": "C",
|
||||
"decision": "hold-for-local-doc-runtime-roadmap",
|
||||
"reason": "Local document pipeline residual requires local document runtime and attachment/document handling that is outside residual Route C implementation scope.",
|
||||
"nextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
{
|
||||
"index": 85,
|
||||
"sceneId": "sweep-085-scene",
|
||||
"sceneName": "业扩报装管理制度",
|
||||
"workflowArchetype": "host_bridge_workflow",
|
||||
"rawSweepStatus": "fail-closed-known",
|
||||
"readinessLevel": "C",
|
||||
"decision": "hold-for-host-bridge-runtime-roadmap",
|
||||
"reason": "Host bridge workflow residual requires host bridge execution semantics beyond this decision-only route.",
|
||||
"nextAction": "future-host-bridge-runtime-roadmap-input"
|
||||
}
|
||||
],
|
||||
"stopStatement": "Route C is decision-complete. Do not begin boundary implementation under this plan."
|
||||
}
|
||||
97
tests/fixtures/generated_scene/boundary_runtime_entry_rules_2026-04-18.json
vendored
Normal file
97
tests/fixtures/generated_scene/boundary_runtime_entry_rules_2026-04-18.json
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"assetDate": "2026-04-19",
|
||||
"scope": "post-roadmap-boundary-and-runtime-entry-rules",
|
||||
"boundaryReadiness": [
|
||||
{
|
||||
"group": "G6",
|
||||
"status": "boundary-family-established",
|
||||
"readiness": "executed-pass",
|
||||
"nextEntryCondition": "The fixed G6 real sample has now executed as host_bridge_workflow; keep further host-bridge work bounded to a new roadmap."
|
||||
},
|
||||
{
|
||||
"group": "G7",
|
||||
"status": "boundary-family-established",
|
||||
"readiness": "executed-pass",
|
||||
"nextEntryCondition": "The first fixed G7 real sample has now executed as multi_endpoint_inventory; keep further boundary-family work bounded to a new roadmap."
|
||||
},
|
||||
{
|
||||
"group": "G8",
|
||||
"status": "boundary-family-established",
|
||||
"readiness": "hold-as-boundary",
|
||||
"nextEntryCondition": "A real sample requires local document pipeline runtime and attachment handling beyond current repo-local coverage."
|
||||
}
|
||||
],
|
||||
"deferredFamilyEntryCriteria": [
|
||||
{
|
||||
"group": "G4",
|
||||
"currentStatus": "deferred",
|
||||
"entryCriteria": [
|
||||
"at least one stable candidate cluster in the 102-scene execution board",
|
||||
"a family-level contract that is distinct from existing G1/G2/G3/G6/G7/G8 contracts",
|
||||
"a prioritization reason written into the next roadmap"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "G5",
|
||||
"currentStatus": "degraded",
|
||||
"entryCriteria": [
|
||||
"a clear reason why degraded handling is insufficient",
|
||||
"a bounded implementation slice that does not reopen the completed roadmap",
|
||||
"runtime gaps needed by the family are explicitly classified first"
|
||||
]
|
||||
}
|
||||
],
|
||||
"runtimeGapMatrix": [
|
||||
{
|
||||
"gap": "login-recovery",
|
||||
"category": "runtime-platform-gap",
|
||||
"status": "planned-not-implemented",
|
||||
"blocks": [
|
||||
"real-world end-to-end execution outside repo-local fixture scope"
|
||||
]
|
||||
},
|
||||
{
|
||||
"gap": "host-runtime-integration",
|
||||
"category": "runtime-platform-gap",
|
||||
"status": "partially-covered-by-boundary-families",
|
||||
"blocks": [
|
||||
"future host-bridge rollout beyond the bounded G6 real-sample entry"
|
||||
]
|
||||
},
|
||||
{
|
||||
"gap": "transport-runtime",
|
||||
"category": "runtime-platform-gap",
|
||||
"status": "planned-not-implemented",
|
||||
"blocks": [
|
||||
"direct post-roadmap runtime rollout"
|
||||
]
|
||||
},
|
||||
{
|
||||
"gap": "local-doc-and-attachment-workflows",
|
||||
"category": "runtime-platform-gap",
|
||||
"status": "partially-covered-by-G8-fixture-only",
|
||||
"blocks": [
|
||||
"G8 real-sample execution"
|
||||
]
|
||||
},
|
||||
{
|
||||
"gap": "g3-real-sample-output-contract-verification",
|
||||
"category": "mainline-contract-gap",
|
||||
"status": "closed-in-mainline",
|
||||
"blocks": []
|
||||
},
|
||||
{
|
||||
"gap": "g2-real-sample-contract-correction",
|
||||
"category": "mainline-contract-gap",
|
||||
"status": "closed-in-mainline",
|
||||
"blocks": []
|
||||
}
|
||||
],
|
||||
"prioritization": [
|
||||
"Both G3 and G2 mainline real-sample contract gaps are now closed in the validation layer.",
|
||||
"G7 is now the first boundary family with an executed-pass real-sample record.",
|
||||
"G6 is now the second boundary family with an executed-pass real-sample record.",
|
||||
"Do not open G4 or G5 without a new bounded roadmap that identifies the next mainline pressure explicitly.",
|
||||
"Keep G8 as a boundary family until a new roadmap promotes it into real-sample execution scope."
|
||||
]
|
||||
}
|
||||
50
tests/fixtures/generated_scene/boundary_runtime_prerequisites_decision_2026-04-19.json
vendored
Normal file
50
tests/fixtures/generated_scene/boundary_runtime_prerequisites_decision_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "boundary-runtime-prerequisites-roadmap",
|
||||
"startingState": {
|
||||
"boundaryClosed": [
|
||||
"G7"
|
||||
],
|
||||
"boundaryHeld": [
|
||||
"G6",
|
||||
"G8"
|
||||
],
|
||||
"mainlineClosed": [
|
||||
"G1-E",
|
||||
"G2",
|
||||
"G3"
|
||||
],
|
||||
"deferredOutOfScope": [
|
||||
"G4",
|
||||
"G5"
|
||||
]
|
||||
},
|
||||
"comparisonMatrix": [
|
||||
{
|
||||
"direction": "G6-host-bridge-prerequisites",
|
||||
"blockedCapability": "host bridge real-sample execution semantics",
|
||||
"isolationCost": "medium",
|
||||
"decision": "selected",
|
||||
"reason": "It concentrates on one prerequisite line and is narrower than the combined local-doc plus attachment burden."
|
||||
},
|
||||
{
|
||||
"direction": "G8-local-doc-prerequisites",
|
||||
"blockedCapability": "local document runtime and attachment handling",
|
||||
"isolationCost": "high",
|
||||
"decision": "hold",
|
||||
"reason": "It still combines local pipeline runtime and attachment handling, which is broader than the next bounded slice should absorb."
|
||||
}
|
||||
],
|
||||
"selectedDirection": {
|
||||
"direction": "G6-host-bridge-prerequisites",
|
||||
"nextDesign": "docs/superpowers/specs/2026-04-19-g6-host-bridge-prerequisites-design.md",
|
||||
"nextPlan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-prerequisites-plan.md"
|
||||
},
|
||||
"holdReasons": [
|
||||
"G8 remains held because local document runtime and attachment handling still form a heavier prerequisite bundle than G6 host-bridge semantics."
|
||||
],
|
||||
"notes": [
|
||||
"The roadmap selects one prerequisite direction only.",
|
||||
"No boundary family execution is opened under this roadmap."
|
||||
]
|
||||
}
|
||||
132
tests/fixtures/generated_scene/deterministic_keyword_scoring_refinement_2026-04-20.json
vendored
Normal file
132
tests/fixtures/generated_scene/deterministic_keyword_scoring_refinement_2026-04-20.json
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"runDate": "2026-04-20",
|
||||
"plan": "2026-04-20-deterministic-keyword-scoring-refinement-plan.md",
|
||||
"summary": {
|
||||
"totalCompletePackages": 101,
|
||||
"beforeReady": 92,
|
||||
"beforeAmbiguous": 9,
|
||||
"afterReady": 101,
|
||||
"afterAmbiguous": 0,
|
||||
"afterNoMatch": 0,
|
||||
"afterOther": 0,
|
||||
"fixedGapCount": 9,
|
||||
"fixedGapResolved": 9
|
||||
},
|
||||
"decisions": [
|
||||
{
|
||||
"sceneId": "sweep-026-scene",
|
||||
"sceneName": "县区公司故障明细",
|
||||
"newKeywords": [
|
||||
"县区公司故障明细"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-034-scene",
|
||||
"sceneName": "售电收入日统计排程预测",
|
||||
"newKeywords": [
|
||||
"售电收入日统计排程预测"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-037-scene",
|
||||
"sceneName": "嘉峪关可靠性分析报告",
|
||||
"newKeywords": [
|
||||
"嘉峪关可靠性分析报告"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-038-scene",
|
||||
"sceneName": "嘉峪关周报",
|
||||
"newKeywords": [
|
||||
"嘉峪关周报"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-039-scene",
|
||||
"sceneName": "嘉峪关故障明细",
|
||||
"newKeywords": [
|
||||
"嘉峪关故障明细"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-040-scene",
|
||||
"sceneName": "嘉峪关日报",
|
||||
"newKeywords": [
|
||||
"嘉峪关日报"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-041-scene",
|
||||
"sceneName": "嘉峪关月报",
|
||||
"newKeywords": [
|
||||
"嘉峪关月报"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-044-scene",
|
||||
"sceneName": "国网金昌供电公司指挥中心生产例会报告",
|
||||
"newKeywords": [
|
||||
"国网金昌供电公司指挥中心生产例会报告"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-045-scene",
|
||||
"sceneName": "国网金昌供电公司营商环境周例会报告",
|
||||
"newKeywords": [
|
||||
"国网金昌供电公司营商环境周例会报告"
|
||||
],
|
||||
"excludeKeywords": [],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-097-scene",
|
||||
"sceneName": "重要服务事项报备统计",
|
||||
"newKeywords": [
|
||||
"重要服务事项报备统计"
|
||||
],
|
||||
"excludeKeywords": [
|
||||
"95598"
|
||||
],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-059-scene",
|
||||
"sceneName": "故障明细",
|
||||
"newKeywords": [
|
||||
"故障明细"
|
||||
],
|
||||
"excludeKeywords": [
|
||||
"县区公司",
|
||||
"嘉峪关"
|
||||
],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-033-scene",
|
||||
"sceneName": "售电收入日统计",
|
||||
"newKeywords": [
|
||||
"售电收入日统计"
|
||||
],
|
||||
"excludeKeywords": [
|
||||
"排程预测"
|
||||
],
|
||||
"decision": "full-scene-name-only-with-pair-specific-excludes"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2,10 +2,20 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>测试外部脚本提取</title>
|
||||
<title>External Script Bootstrap Fixture</title>
|
||||
<script src="http://25.215.213.128:18080/a_js/YPTAPI.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">测试页面</div>
|
||||
<div id="app">Fixture</div>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
function queryData() {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/report/query",
|
||||
type: "POST",
|
||||
contentType: "application/json"
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
80
tests/fixtures/generated_scene/family_expansion_policy.json
vendored
Normal file
80
tests/fixtures/generated_scene/family_expansion_policy.json
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"policyVersion": "2026-04-18",
|
||||
"scope": "roadmap-plan-track-e",
|
||||
"mainlineGroups": [
|
||||
{
|
||||
"group": "G1",
|
||||
"policy": "mainline",
|
||||
"executionRule": "build reusable single-request template and validate representative migrations first",
|
||||
"acceptanceFocus": [
|
||||
"request/response/normalize restored",
|
||||
"single_request_table compile path stable",
|
||||
"family-level reuse confirmed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "G2",
|
||||
"policy": "mainline",
|
||||
"executionRule": "deepen multi-mode semantic recovery before broad expansion",
|
||||
"acceptanceFocus": [
|
||||
"mode matrix restored",
|
||||
"mode-specific request/response contract restored",
|
||||
"bootstrap business context stable"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "G3",
|
||||
"policy": "mainline",
|
||||
"executionRule": "prioritize fail-closed and host-runtime separation before expansion",
|
||||
"acceptanceFocus": [
|
||||
"pagination chain restored",
|
||||
"secondary request chain restored",
|
||||
"localhost host-runtime evidence separated from business bootstrap"
|
||||
]
|
||||
}
|
||||
],
|
||||
"boundaryGroups": [
|
||||
{
|
||||
"group": "G6",
|
||||
"policy": "boundary-runtime",
|
||||
"executionRule": "treat as independent family with explicit host-bridge runtime contract; do not fold back into G1/G1-E/G3",
|
||||
"acceptanceFocus": [
|
||||
"host bridge action evidence restored",
|
||||
"callback request chain present",
|
||||
"incomplete manual scene IR stays fail-closed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "G7",
|
||||
"policy": "boundary-runtime",
|
||||
"executionRule": "treat as independent family with multi-endpoint aggregation contract; do not fold back into G1/G1-E",
|
||||
"acceptanceFocus": [
|
||||
"inventory endpoint set restored",
|
||||
"inventory aggregate step present",
|
||||
"incomplete manual scene IR stays fail-closed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "G8",
|
||||
"policy": "boundary-runtime",
|
||||
"executionRule": "treat as independent family with local pipeline contract; do not collapse into G6 host bridge workflow",
|
||||
"acceptanceFocus": [
|
||||
"localhost pipeline dependencies restored",
|
||||
"sql/doc export steps present",
|
||||
"incomplete manual scene IR stays fail-closed"
|
||||
]
|
||||
}
|
||||
],
|
||||
"deferredGroups": [
|
||||
{
|
||||
"group": "G4",
|
||||
"policy": "deferred",
|
||||
"executionRule": "keep extension entry only; do not consume current mainline capacity"
|
||||
},
|
||||
{
|
||||
"group": "G5",
|
||||
"policy": "degraded",
|
||||
"executionRule": "default fail-closed or analysis-only; do not pollute mainline archetypes"
|
||||
}
|
||||
]
|
||||
}
|
||||
79
tests/fixtures/generated_scene/final_2_official_board_reconciliation_refresh_2026-04-19.json
vendored
Normal file
79
tests/fixtures/generated_scene/final_2_official_board_reconciliation_refresh_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-final-2-official-board-reconciliation-refresh-plan.md",
|
||||
"inputCandidates": [
|
||||
"tests/fixtures/generated_scene/bootstrap_target_normalization_reconciliation_candidates_2026-04-19.json",
|
||||
"tests/fixtures/generated_scene/host_bridge_runtime_reconciliation_candidates_2026-04-19.json"
|
||||
],
|
||||
"officialBoard": "tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json",
|
||||
"officialBoardUpdated": true,
|
||||
"updatedSceneCount": 2,
|
||||
"summary": {
|
||||
"totalScenes": 102,
|
||||
"frameworkStatusCounts": {
|
||||
"framework-auto-pass": 102,
|
||||
"framework-structured-fail-closed": 0,
|
||||
"framework-valid-host-bridge": 0,
|
||||
"source-unreadable": 0,
|
||||
"missing-source": 0,
|
||||
"unsupported-family": 0,
|
||||
"misclassified-unresolved": 0,
|
||||
"unresolved-followup-status": 0
|
||||
},
|
||||
"frameworkAutoPassCount": 102,
|
||||
"frameworkStructuredFailClosedCount": 0,
|
||||
"frameworkUnresolvedCount": 0
|
||||
},
|
||||
"updatedScenes": [
|
||||
{
|
||||
"source": "tests/fixtures/generated_scene/bootstrap_target_normalization_reconciliation_candidates_2026-04-19.json",
|
||||
"sceneId": "sweep-091-scene",
|
||||
"officialBoardSceneName": "配网异常设备监控统计",
|
||||
"candidateSceneName": "配网异常设备监控统计",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "single_request_enrichment",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "single_request_enrichment",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"source": "tests/fixtures/generated_scene/host_bridge_runtime_reconciliation_candidates_2026-04-19.json",
|
||||
"sceneId": "sweep-085-scene",
|
||||
"officialBoardSceneName": "计量资产库存统计",
|
||||
"candidateSceneName": "计量资产库存统计",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkCandidateStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "host_bridge_workflow",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-host-bridge-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-host-bridge-runtime-roadmap-input"
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "multi_endpoint_inventory",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"remainingStructuredFailClosed": [],
|
||||
"notes": [
|
||||
"Both final-2 candidate assets were consumed when present.",
|
||||
"Only framework-layer fields were updated.",
|
||||
"No analyzer/generator implementation was modified by this refresh."
|
||||
]
|
||||
}
|
||||
51
tests/fixtures/generated_scene/final_2_residual_roadmap_prioritization_2026-04-19.json
vendored
Normal file
51
tests/fixtures/generated_scene/final_2_residual_roadmap_prioritization_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-final-2-residual-roadmap-prioritization-plan.md",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan.md",
|
||||
"parentSequence": "2026-04-19-final-2-residual-child-plan-sequence-plan.md",
|
||||
"inputBoard": "tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json",
|
||||
"totalResiduals": 2,
|
||||
"selectedRoadmap": "bootstrap target normalization roadmap",
|
||||
"selectedPlan": "2026-04-19-bootstrap-target-normalization-roadmap-plan.md",
|
||||
"candidates": [
|
||||
{
|
||||
"roadmap": "bootstrap target normalization roadmap",
|
||||
"plan": "2026-04-19-bootstrap-target-normalization-roadmap-plan.md",
|
||||
"sceneId": "sweep-091-scene",
|
||||
"sceneName": "配网异常设备监控统计",
|
||||
"currentFrameworkArchetype": "page_state_eval",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"nextAction": "future-bootstrap-target-normalization-roadmap-input",
|
||||
"residualCount": 1,
|
||||
"scopeClarity": 4,
|
||||
"implementationRisk": 2,
|
||||
"regressionRisk": 2,
|
||||
"autoPassProbability": 3,
|
||||
"score": 13,
|
||||
"selected": true,
|
||||
"rationale": "Single-scene bootstrap target normalization is narrower than host-bridge runtime and does not require host transport semantics."
|
||||
},
|
||||
{
|
||||
"roadmap": "host-bridge runtime roadmap",
|
||||
"plan": "2026-04-19-host-bridge-runtime-roadmap-plan.md",
|
||||
"sceneId": "sweep-085-scene",
|
||||
"sceneName": "计量资产库存统计",
|
||||
"currentFrameworkArchetype": "host_bridge_workflow",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"nextAction": "future-host-bridge-runtime-roadmap-input",
|
||||
"residualCount": 1,
|
||||
"scopeClarity": 3,
|
||||
"implementationRisk": 4,
|
||||
"regressionRisk": 4,
|
||||
"autoPassProbability": 3,
|
||||
"score": 7,
|
||||
"selected": false,
|
||||
"deferReason": "Host-bridge runtime can affect already passing host-bridge paths and should remain queued until the narrower bootstrap residual is handled."
|
||||
}
|
||||
],
|
||||
"coverageDelta": {
|
||||
"expectedNow": 0,
|
||||
"reason": "Decision-only plan"
|
||||
},
|
||||
"officialBoardUpdated": false
|
||||
}
|
||||
1562
tests/fixtures/generated_scene/final_coverage_status_rollup_2026-04-19.json
vendored
Normal file
1562
tests/fixtures/generated_scene/final_coverage_status_rollup_2026-04-19.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
tests/fixtures/generated_scene/full_coverage_followup_sweep_2026-04-19.json
vendored
Normal file
1
tests/fixtures/generated_scene/full_coverage_followup_sweep_2026-04-19.json
vendored
Normal file
File diff suppressed because one or more lines are too long
1
tests/fixtures/generated_scene/full_coverage_reconciliation_candidates_2026-04-19.json
vendored
Normal file
1
tests/fixtures/generated_scene/full_coverage_reconciliation_candidates_2026-04-19.json
vendored
Normal file
File diff suppressed because one or more lines are too long
9112
tests/fixtures/generated_scene/full_sweep_dry_run_2026-04-19.json
vendored
Normal file
9112
tests/fixtures/generated_scene/full_sweep_dry_run_2026-04-19.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1499
tests/fixtures/generated_scene/full_sweep_dry_run_triage_2026-04-19.json
vendored
Normal file
1499
tests/fixtures/generated_scene/full_sweep_dry_run_triage_2026-04-19.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1898
tests/fixtures/generated_scene/full_sweep_improvement_followup_2026-04-19.json
vendored
Normal file
1898
tests/fixtures/generated_scene/full_sweep_improvement_followup_2026-04-19.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2382
tests/fixtures/generated_scene/full_sweep_status_reconciliation_2026-04-19.json
vendored
Normal file
2382
tests/fixtures/generated_scene/full_sweep_status_reconciliation_2026-04-19.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
75
tests/fixtures/generated_scene/g1e_candidate_batch_2026-04-18.json
vendored
Normal file
75
tests/fixtures/generated_scene/g1e_candidate_batch_2026-04-18.json
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"batchId": "g1e-light-enrichment-candidates-2026-04-18",
|
||||
"family": "G1-E",
|
||||
"source": "docs/superpowers/reports/2026-04-18-g1-e-second-sample-reuse-report.md",
|
||||
"supportingSources": [
|
||||
"docs/superpowers/reports/2026-04-18-g1-e-p0-validation-report.md",
|
||||
"tests/fixtures/generated_scene/scene_ledger_status_2026-04-18.json"
|
||||
],
|
||||
"ledgerClusterLabel": "g1e-light-enrichment-candidate",
|
||||
"selectionRule": "roadmap Track B and Track D G1-E light enrichment samples promoted into reusable family baselines",
|
||||
"candidateCount": 3,
|
||||
"representativeBaseline": "tests/fixtures/generated_scene/g1e_light_enrichment",
|
||||
"promotedBatchExpansionBaselines": [
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g1e_light_enrichment_expansion",
|
||||
"sceneId": "p1-g1e-light-enrichment-expansion-report",
|
||||
"sceneName": "P1 G1-E light enrichment expansion report",
|
||||
"assertions": {
|
||||
"requiredMainRequest": "getWkorderAll",
|
||||
"requiredEnrichmentRequest": "queryMeterInfo",
|
||||
"requiredMergeJoinKey": "wkOrderNo",
|
||||
"requiredMergeAggregateRule": "group_by:countyCodeName",
|
||||
"requiredOutputColumn": "meterCapacityThisMonth"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g1e_light_enrichment_additional",
|
||||
"sceneId": "p1-g1e-light-enrichment-additional-report",
|
||||
"sceneName": "P1 G1-E light enrichment additional report",
|
||||
"assertions": {
|
||||
"requiredMainRequest": "getWkorderAll",
|
||||
"requiredEnrichmentRequest": "queryBusAcpt",
|
||||
"requiredMergeJoinKey": "wkOrderNo",
|
||||
"requiredMergeAggregateRule": "group_by:countyCodeName",
|
||||
"requiredOutputColumn": "batchCapacityThisMonth"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectedSharedContract": {
|
||||
"archetype": "single_request_enrichment",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"main_request_resolved",
|
||||
"enrichment_requests_resolved",
|
||||
"merge_plan_resolved",
|
||||
"g1e_scope_compatible"
|
||||
]
|
||||
},
|
||||
"candidates": [
|
||||
{
|
||||
"sceneKey": "high_low_voltage_new_capacity_monthly",
|
||||
"batchRole": "p0-anchor",
|
||||
"status": "promoted-baseline"
|
||||
},
|
||||
{
|
||||
"sceneKey": "light_enrichment_second_sample",
|
||||
"batchRole": "first-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
},
|
||||
{
|
||||
"sceneKey": "light_enrichment_additional_real_sample",
|
||||
"batchRole": "second-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This batch records the current G1-E representative and promoted expansion baselines.",
|
||||
"The additional sample is now promoted through the same light-enrichment family contract.",
|
||||
"This keeps G1-E within the roadmap Track B and Track D boundary without forcing a new family scope."
|
||||
]
|
||||
}
|
||||
136
tests/fixtures/generated_scene/g1e_light_enrichment/index.html
vendored
Normal file
136
tests/fixtures/generated_scene/g1e_light_enrichment/index.html
vendored
Normal file
@@ -0,0 +1,136 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="sgclaw-scene-kind" content="report_collection" />
|
||||
<meta name="sgclaw-target-url" content="http://yx.gs.sgcc.com.cn/" />
|
||||
<meta name="sgclaw-expected-domain" content="yx.gs.sgcc.com.cn" />
|
||||
<title>高低压新增报装容量月度统计表</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const workUrl =
|
||||
"http://yxgateway.gs.sgcc.com.cn/emss-cmnf-common-front/member/workOrderQuery/getWkorderAll";
|
||||
const headers = { "Content-Type": "application/json" };
|
||||
|
||||
async function report() {
|
||||
const mode = "month";
|
||||
const month = "04";
|
||||
const reportType = "capacity";
|
||||
const groupedData = {};
|
||||
const requests = [];
|
||||
requests.push(
|
||||
axios.post(
|
||||
workUrl,
|
||||
window.encrypt_old({
|
||||
wkOrderNo: "",
|
||||
pageNo: 1,
|
||||
pageSize: 1000
|
||||
}),
|
||||
{ headers }
|
||||
)
|
||||
);
|
||||
|
||||
const queryElectCustInfoApi = async (data) => {
|
||||
const url =
|
||||
"http://yxgateway.gs.sgcc.com.cn/emss-busexpengaccsf-busexpaccssrv-front/member/workorder/queryElectCustInfo";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
appNo: data.wkOrderNo
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const queryBusAcptApi = async (data) => {
|
||||
const url =
|
||||
"http://yxgateway.gs.sgcc.com.cn/emss-busexpengaccsf-busexpaccssrvacc-front/member/commonBusAcpt97/queryBusAcpt";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
appNo: data.wkOrderNo
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const getBatchPerCust97Api = async (data) => {
|
||||
const url =
|
||||
"http://yxgateway.gs.sgcc.com.cn/emss-busexpengaccsf-busexpaccssrvacc-front/member/lvbatchnewinstBusAcpt97/getBatchPerCust97";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
pageNo: 1,
|
||||
pageSize: 20,
|
||||
baseNewFlag: "01",
|
||||
appNo: data.wkOrderNo
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
for (const item of combinedData) {
|
||||
const { countyCodeName } = item;
|
||||
if (!groupedData[countyCodeName]) {
|
||||
groupedData[countyCodeName] = {
|
||||
countyCodeName,
|
||||
hightPressureTotalThisMonth: 0,
|
||||
hightPressureTotalOtherMonth: 0,
|
||||
hightVolTotalThisMonth: 0,
|
||||
hightVolTotalOtherMonth: 0,
|
||||
lowPressureTotalThisMonth: 0,
|
||||
lowPressureTotalOtherMonth: 0,
|
||||
lowVolTotalThisMonth: 0,
|
||||
lowVolTotalOtherMonth: 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
for (const item of Object.values(groupedData)) {
|
||||
const {
|
||||
countyCodeName,
|
||||
hightAppListThisMonth,
|
||||
lowAppListThisMonth,
|
||||
batchAppListThisMonth
|
||||
} = item;
|
||||
const hightThis = await this.asyncPool(20, hightAppListThisMonth, queryElectCustInfoApi);
|
||||
const lowThis = await this.asyncPool(20, lowAppListThisMonth[1], queryElectCustInfoApi);
|
||||
const volBatchThis = await this.asyncPool(20, lowAppListThisMonth[0], queryBusAcptApi);
|
||||
const preBatchThis = await this.asyncPool(20, batchAppListThisMonth, getBatchPerCust97Api);
|
||||
if (hightThis && hightThis.status === 200 && mode === "month" && reportType) {
|
||||
groupedData[countyCodeName].month = month;
|
||||
}
|
||||
await com(hightThis, countyCodeName, "hightVolTotalThisMonth", "hightPressureTotalThisMonth");
|
||||
await com(lowThis, countyCodeName, "lowVolTotalThisMonth", "lowPressureTotalThisMonth");
|
||||
await batchCom(volBatchThis, preBatchThis, countyCodeName, "lowVolTotalThisMonth", "lowPressureTotalThisMonth");
|
||||
}
|
||||
|
||||
const titleList = [
|
||||
["index", "序号", ""],
|
||||
["countyCodeName", "单位", ""],
|
||||
["hightPressureTotalOtherMonth", "月前累计新增接入", "高压户数"],
|
||||
["hightVolTotalOtherMonth", "月前累计新增接入", "高压容量"],
|
||||
["lowPressureTotalOtherMonth", "月前累计新增接入", "低压户数"],
|
||||
["lowVolTotalOtherMonth", "月前累计新增接入", "低压容量"],
|
||||
["otherMonthShare", "月前累计新增接入", "容量占比"],
|
||||
["hightPressureTotalThisMonth", "本月新增接入", "高压户数"],
|
||||
["hightVolTotalThisMonth", "本月新增接入", "高压容量"],
|
||||
["lowPressureTotalThisMonth", "本月新增接入", "低压户数"],
|
||||
["lowVolTotalThisMonth", "本月新增接入", "低压容量"],
|
||||
["thisMonthShare", "本月新增接入", "容量占比"],
|
||||
["yearHightPressureTotal", "年累计新增接入", "高压户数"],
|
||||
["yearHightVolTotal", "年累计新增接入", "高压容量"],
|
||||
["yearLowPressureTotal", "年累计新增接入", "低压户数"],
|
||||
["yearLowVolTotal", "年累计新增接入", "低压容量"],
|
||||
["yearShare", "年累计新增接入", "容量占比"]
|
||||
];
|
||||
|
||||
return { groupedData, titleList };
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
100
tests/fixtures/generated_scene/g1e_light_enrichment_additional/index.html
vendored
Normal file
100
tests/fixtures/generated_scene/g1e_light_enrichment_additional/index.html
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="sgclaw-scene-kind" content="report_collection" />
|
||||
<meta name="sgclaw-target-url" content="http://yx.gs.sgcc.com.cn/" />
|
||||
<meta name="sgclaw-expected-domain" content="yx.gs.sgcc.com.cn" />
|
||||
<title>G1-E Additional Light Enrichment Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn/report";
|
||||
const headers = { "Content-Type": "application/json" };
|
||||
const workUrl =
|
||||
"http://yx.gs.sgcc.com.cn/report/customerApply/getWkorderAll";
|
||||
|
||||
async function reportAdditional() {
|
||||
const mode = "month";
|
||||
const month = "04";
|
||||
const reportType = "capacity";
|
||||
const groupedData = {};
|
||||
|
||||
const mainResponse = await axios.post(
|
||||
workUrl,
|
||||
window.encrypt_old({
|
||||
wkOrderNo: "",
|
||||
countyCodeName: "",
|
||||
pageNo: 1,
|
||||
pageSize: 500
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
|
||||
const queryBusAcptApi = async (data) => {
|
||||
const url =
|
||||
"http://yx.gs.sgcc.com.cn/report/customerApply/queryBusAcpt";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
appNo: data.wkOrderNo,
|
||||
countyCodeName: data.countyCodeName
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const queryCapacityInfoApi = async (data) => {
|
||||
const url =
|
||||
"http://yx.gs.sgcc.com.cn/report/customerApply/queryCapacityInfo";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
appNo: data.wkOrderNo
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const rows = mainResponse.data || [];
|
||||
for (const item of rows) {
|
||||
const { countyCodeName } = item;
|
||||
if (!groupedData[countyCodeName]) {
|
||||
groupedData[countyCodeName] = {
|
||||
countyCodeName,
|
||||
batchTotalThisMonth: 0,
|
||||
batchCapacityThisMonth: 0,
|
||||
customerTotalThisMonth: 0,
|
||||
customerCapacityThisMonth: 0,
|
||||
thisMonthShare: 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
for (const item of rows) {
|
||||
const busAcpt = await queryBusAcptApi(item);
|
||||
const capacityInfo = await queryCapacityInfoApi(item);
|
||||
if (busAcpt && busAcpt.status === 200 && mode === "month" && reportType) {
|
||||
groupedData[item.countyCodeName].month = month;
|
||||
}
|
||||
await com(busAcpt, item.countyCodeName, "batchCapacityThisMonth", "batchTotalThisMonth");
|
||||
await com(capacityInfo, item.countyCodeName, "customerCapacityThisMonth", "customerTotalThisMonth");
|
||||
}
|
||||
|
||||
const titleList = [
|
||||
["index", "Index", ""],
|
||||
["countyCodeName", "Org", ""],
|
||||
["batchTotalThisMonth", "This Month", "Batch Count"],
|
||||
["batchCapacityThisMonth", "This Month", "Batch Capacity"],
|
||||
["customerTotalThisMonth", "This Month", "Customer Count"],
|
||||
["customerCapacityThisMonth", "This Month", "Customer Capacity"],
|
||||
["thisMonthShare", "This Month", "Capacity Share"]
|
||||
];
|
||||
|
||||
return { groupedData, titleList };
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
100
tests/fixtures/generated_scene/g1e_light_enrichment_expansion/index.html
vendored
Normal file
100
tests/fixtures/generated_scene/g1e_light_enrichment_expansion/index.html
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="sgclaw-scene-kind" content="report_collection" />
|
||||
<meta name="sgclaw-target-url" content="http://yx.gs.sgcc.com.cn/" />
|
||||
<meta name="sgclaw-expected-domain" content="yx.gs.sgcc.com.cn" />
|
||||
<title>Light Enrichment Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn/report";
|
||||
const headers = { "Content-Type": "application/json" };
|
||||
const workUrl =
|
||||
"http://yx.gs.sgcc.com.cn/report/customerApply/getWkorderAll";
|
||||
|
||||
async function reportExpansion() {
|
||||
const mode = "month";
|
||||
const month = "04";
|
||||
const reportType = "asset";
|
||||
const groupedData = {};
|
||||
|
||||
const mainResponse = await axios.post(
|
||||
workUrl,
|
||||
window.encrypt_old({
|
||||
wkOrderNo: "",
|
||||
countyCodeName: "",
|
||||
pageNo: 1,
|
||||
pageSize: 500
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
|
||||
const queryMeterInfoApi = async (data) => {
|
||||
const url =
|
||||
"http://yx.gscc.com.cn/report/customerApply/queryMeterInfo";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
appNo: data.wkOrderNo,
|
||||
countyCodeName: data.countyCodeName
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const queryTransformerInfoApi = async (item) => {
|
||||
const url =
|
||||
"http://yx.gscc.com.cn/report/customerApply/queryTransformerInfo";
|
||||
const response = await axios.post(
|
||||
url,
|
||||
window.encrypt_old({
|
||||
appNo: item.wkOrderNo
|
||||
}),
|
||||
{ headers }
|
||||
);
|
||||
return response.data;
|
||||
};
|
||||
|
||||
const rows = mainResponse.data || [];
|
||||
for (const item of rows) {
|
||||
const { countyCodeName } = item;
|
||||
if (!groupedData[countyCodeName]) {
|
||||
groupedData[countyCodeName] = {
|
||||
countyCodeName,
|
||||
meterTotalThisMonth: 0,
|
||||
meterCapacityThisMonth: 0,
|
||||
transformerTotalThisMonth: 0,
|
||||
transformerCapacityThisMonth: 0,
|
||||
thisMonthShare: 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
for (const item of rows) {
|
||||
const meterInfo = await queryMeterInfoApi(item);
|
||||
const transformerInfo = await queryTransformerInfoApi(item);
|
||||
if (meterInfo && meterInfo.status === 200 && mode === "month" && reportType) {
|
||||
groupedData[item.countyCodeName].month = month;
|
||||
}
|
||||
await com(meterInfo, item.countyCodeName, "meterCapacityThisMonth", "meterTotalThisMonth");
|
||||
await com(transformerInfo, item.countyCodeName, "transformerCapacityThisMonth", "transformerTotalThisMonth");
|
||||
}
|
||||
|
||||
const titleList = [
|
||||
["index", "Index", ""],
|
||||
["countyCodeName", "Org", ""],
|
||||
["meterTotalThisMonth", "This Month", "Meter Count"],
|
||||
["meterCapacityThisMonth", "This Month", "Meter Capacity"],
|
||||
["transformerTotalThisMonth", "This Month", "Transformer Count"],
|
||||
["transformerCapacityThisMonth", "This Month", "Transformer Capacity"],
|
||||
["thisMonthShare", "This Month", "Capacity Share"]
|
||||
];
|
||||
|
||||
return { groupedData, titleList };
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
53
tests/fixtures/generated_scene/g1e_remaining_fail_closed_closure_followup_2026-04-19.json
vendored
Normal file
53
tests/fixtures/generated_scene/g1e_remaining_fail_closed_closure_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan",
|
||||
"parentRoute": "Route 4 / G1-E single_request_enrichment closure",
|
||||
"plan": "2026-04-19-g1e-remaining-fail-closed-closure-plan.md",
|
||||
"scope": {
|
||||
"fixedInputBucket": "single_request_enrichment structured fail-closed",
|
||||
"baselineCount": 2,
|
||||
"allowedChange": "recover G1-E output column mappings from cols.push and wide titleList declarations",
|
||||
"forbiddenChanges": [
|
||||
"execution board update",
|
||||
"new family",
|
||||
"Route 2/3 asset changes",
|
||||
"Route 5+ work"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
"beforeFailClosed": 2,
|
||||
"resolvedToAutoPass": 2,
|
||||
"remainingFailClosed": 0,
|
||||
"coverageDelta": 2
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-013-scene",
|
||||
"sceneName": "业扩报装质量评价体系",
|
||||
"baselineStatus": "fail-closed-known",
|
||||
"baselineReadiness": "B",
|
||||
"baselineBlockers": [
|
||||
"output_columns"
|
||||
],
|
||||
"followupStatus": "auto-pass",
|
||||
"followupReadiness": "A",
|
||||
"archetype": "single_request_enrichment",
|
||||
"resolvedBy": "g1e_output_columns_from_cols_push"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-068-scene",
|
||||
"sceneName": "用电报装信息统计列表",
|
||||
"baselineStatus": "fail-closed-known",
|
||||
"baselineReadiness": "B",
|
||||
"baselineBlockers": [
|
||||
"output_columns"
|
||||
],
|
||||
"followupStatus": "auto-pass",
|
||||
"followupReadiness": "A",
|
||||
"archetype": "single_request_enrichment",
|
||||
"resolvedBy": "g1e_output_columns_from_wide_title_list"
|
||||
}
|
||||
],
|
||||
"outputRoot": "examples/g1e_remaining_fail_closed_closure_followup_2026-04-19",
|
||||
"stopStatement": "Route 4 is closed after measuring the fixed G1-E bucket delta. Do not begin Route 5 in this plan."
|
||||
}
|
||||
110
tests/fixtures/generated_scene/g2_candidate_batch_2026-04-18.json
vendored
Normal file
110
tests/fixtures/generated_scene/g2_candidate_batch_2026-04-18.json
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"batchId": "g2-lineloss-family-candidates-2026-04-18",
|
||||
"family": "G2",
|
||||
"source": "docs/superpowers/reports/2026-04-18-g2-family-expansion-third-round-report.md",
|
||||
"supportingSources": [
|
||||
"docs/superpowers/reports/2026-04-18-lineloss-family-variant-expansion-report.md",
|
||||
"tests/fixtures/generated_scene/scene_ledger_status_2026-04-18.json"
|
||||
],
|
||||
"ledgerClusterLabel": "lineloss-family-candidate",
|
||||
"selectionRule": "roadmap Track A and Track D line-loss family variants promoted into reusable multi-mode baselines",
|
||||
"candidateCount": 6,
|
||||
"representativeBaseline": "tests/fixtures/generated_scene/multi_mode",
|
||||
"promotedBatchExpansionBaselines": [
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_weekly_single_mode",
|
||||
"sceneId": "p1-g2-weekly-single-mode-report",
|
||||
"sceneName": "P1 G2 weekly single mode report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "week"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_mixed_linked_workflow",
|
||||
"sceneId": "p1-g2-mixed-linked-workflow-report",
|
||||
"sceneName": "P1 G2 mixed linked workflow report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "primary"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_comparison_crosscheck",
|
||||
"sceneId": "p1-g2-comparison-crosscheck-report",
|
||||
"sceneName": "P1 G2 comparison crosscheck report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "comparison"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_diagnosis_drilldown",
|
||||
"sceneId": "p1-g2-diagnosis-drilldown-report",
|
||||
"sceneName": "P1 G2 diagnosis drilldown report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "diagnosis"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_prediction_compute",
|
||||
"sceneId": "p1-g2-prediction-compute-report",
|
||||
"sceneName": "P1 G2 prediction compute report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "prediction"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectedSharedContract": {
|
||||
"archetype": "multi_mode_request",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible"
|
||||
],
|
||||
"requiredVariantPatterns": [
|
||||
"g2_a_dual_mode_baseline",
|
||||
"g2_b_weekly_single_mode",
|
||||
"g2_c_mixed_linked_workflow",
|
||||
"g2_d_prediction_compute",
|
||||
"g2_e_comparison_crosscheck",
|
||||
"g2_f_diagnosis_drilldown"
|
||||
]
|
||||
},
|
||||
"candidates": [
|
||||
{
|
||||
"sceneKey": "tq_lineloss_report",
|
||||
"batchRole": "p0-anchor",
|
||||
"status": "promoted-baseline"
|
||||
},
|
||||
{
|
||||
"sceneKey": "baiyin_lineloss_weekly",
|
||||
"batchRole": "first-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
},
|
||||
{
|
||||
"sceneKey": "lineloss_period_diff",
|
||||
"batchRole": "second-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
},
|
||||
{
|
||||
"sceneKey": "zero_consumer_crosscheck",
|
||||
"batchRole": "third-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
},
|
||||
{
|
||||
"sceneKey": "steal_analysis",
|
||||
"batchRole": "fourth-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
},
|
||||
{
|
||||
"sceneKey": "predicted_compute_variant",
|
||||
"batchRole": "fifth-expansion-anchor",
|
||||
"status": "promoted-expansion"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This batch records the current code-backed G2 representative and promoted expansion baselines.",
|
||||
"G2-D prediction compute is now promoted as a repo-local reusable expansion baseline within the current lineloss family contract.",
|
||||
"The next Track D round should continue from the queued downstream family candidates instead of rebuilding G2-A through G2-F state from markdown reports."
|
||||
]
|
||||
}
|
||||
34
tests/fixtures/generated_scene/g2_comparison_crosscheck/index.html
vendored
Normal file
34
tests/fixtures/generated_scene/g2_comparison_crosscheck/index.html
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G2 Comparison Crosscheck Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
const reportType = "zeroConsumerCrosscheck";
|
||||
|
||||
async function queryMainRank(orgno, fdate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getTqLinelossInfoListRank",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, fdate, page: 1, rows: 40 })
|
||||
});
|
||||
}
|
||||
|
||||
async function queryUserElectric(orgno, consno, fdate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getUserElectricList",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, consno, fdate, page: 1, rows: 20 })
|
||||
});
|
||||
}
|
||||
|
||||
function mergeRow(TG_NO, TG_NAME, consno, userNmae, thisMonth, beforeMonth1) {
|
||||
return { TG_NO, TG_NAME, consno, userNmae, thisMonth, beforeMonth1 };
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
52
tests/fixtures/generated_scene/g2_diagnosis_drilldown/index.html
vendored
Normal file
52
tests/fixtures/generated_scene/g2_diagnosis_drilldown/index.html
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G2 Diagnosis Drilldown Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
const reportType = "stealAnalysis";
|
||||
|
||||
async function queryMainRank(orgno, fdate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getTqLinelossInfoListRank",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, fdate, page: 1, rows: 100 })
|
||||
});
|
||||
}
|
||||
|
||||
async function queryDiagnose(orgno, tgNo, fdate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/tqAutoDiagnoseAnalyse/search",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, tgNo, fdate })
|
||||
});
|
||||
}
|
||||
|
||||
async function queryDetail(orgno, tgNo, fdate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/stealElecAnalyse/getFlqdyhDetailList",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, tgNo, fdate, page: 1, rows: 20 })
|
||||
});
|
||||
}
|
||||
|
||||
async function queryRemark(orgno, tgNo, fdate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/stealElecAnalyse/userVoltsAndElecflowMoniter/search",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, tgNo, fdate, page: 1, rows: 20 })
|
||||
});
|
||||
}
|
||||
|
||||
function exportRow(TG_NO, LL_TYPE_NAME, LOSS_PQ, LINELOSS_RATE, remark) {
|
||||
return { TG_NO, LL_TYPE_NAME, LOSS_PQ, LINELOSS_RATE, remark };
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
50
tests/fixtures/generated_scene/g2_mixed_linked_workflow/index.html
vendored
Normal file
50
tests/fixtures/generated_scene/g2_mixed_linked_workflow/index.html
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G2 Mixed Linked Workflow Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
|
||||
async function queryMainRank(formDate) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getTqLinelossInfoListRank",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify(formDate)
|
||||
});
|
||||
}
|
||||
|
||||
async function queryUserElectric(query) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getUserElectricList",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify(query)
|
||||
});
|
||||
}
|
||||
|
||||
async function queryPeerSystemToken(dlMesage) {
|
||||
return $.ajax({
|
||||
url: "http://10.4.39.180/xsgl/syncLineLoss/rest/syncLineLossService/workbench",
|
||||
type: "POST",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
data: JSON.stringify({
|
||||
userName: dlMesage.userName,
|
||||
loginName: dlMesage.loginName,
|
||||
urlType: "WORKBENCH",
|
||||
url: "/loginInfo/getToken"
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function bootScene() {
|
||||
return sgBrowserExcuteJsCode(
|
||||
"http://20.76.57.61:18080/gsllys/tqLinelossStatis/tqQualifyRateMonitor",
|
||||
"run"
|
||||
);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
112
tests/fixtures/generated_scene/g2_noisy_multi_mode/index.html
vendored
Normal file
112
tests/fixtures/generated_scene/g2_noisy_multi_mode/index.html
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G2 Noisy Multi Mode Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="/a_js/jquery.js"></script>
|
||||
<script>
|
||||
const loginPath = "http://20.77.115.36:31051";
|
||||
const mainPath = "http://20.77.115.36:31051";
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
const reportType = "lineloss";
|
||||
|
||||
async function queryLineloss(period_mode, orgno, weekSfdate, weekEfdate) {
|
||||
if (period_mode === "month") {
|
||||
const datas = {
|
||||
orgno,
|
||||
yn_flag: 0,
|
||||
rows: 20,
|
||||
page: 1,
|
||||
sidx: "TO_NUMBER(ORG_NO)",
|
||||
sord: "asc",
|
||||
fdate: moment().subtract(1, "months").format("YYYY-MM"),
|
||||
tjzq: "month"
|
||||
};
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/fourVerEightHor/fourVerEightHorLinelossRateList",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify(datas)
|
||||
});
|
||||
}
|
||||
if (period_mode === "week") {
|
||||
const datas = {
|
||||
orgno,
|
||||
tjzq: "week",
|
||||
rows: 20,
|
||||
page: 1,
|
||||
sord: "asc",
|
||||
weekSfdate,
|
||||
weekEfdate
|
||||
};
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getYearMonWeekLinelossAnalysisList",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify(datas)
|
||||
});
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
const cols1 = [
|
||||
["ORG_NAME", "供电单位"],
|
||||
["LINE_LOSS_RATE", "综合线损率(%)"],
|
||||
["PPQ", "供电量(Kwh)"],
|
||||
["UPQ", "售电量(Kwh)"],
|
||||
["LOSS_PQ", "损失电量(Kwh)"]
|
||||
]
|
||||
|
||||
const cols2 = [
|
||||
["ORG_NAME", "供电单位"],
|
||||
["YGDL", "累计供电量"],
|
||||
["YYDL", "累计售电量"],
|
||||
["YXSL", "线损完成率(%)"],
|
||||
["RAT_SCOPE", "线损率累计目标值"],
|
||||
["BLANK3", "目标完成率"],
|
||||
["BLANK2", "排名"]
|
||||
];
|
||||
|
||||
async function getUserInfo(custNo) {
|
||||
return $.ajax({
|
||||
url: "http://yxgateway.gs.sgcc.com.cn/emss-custmgtf-custview-front/member/cust360ViewInfo/getCustElecInfoByCustIdUnion",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ custNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask(period_mode, orgno) {
|
||||
const pageSize = 20;
|
||||
let page = 1;
|
||||
const rows = [];
|
||||
while (page < 5) {
|
||||
const response = await queryLineloss(period_mode, orgno, "2026-03-01", "2026-03-07");
|
||||
const list = response.content || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
if (item.statusName !== "回退营销" && item.loss !== null) {
|
||||
rows.push(item);
|
||||
}
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return $.ajax({
|
||||
url: "http://localhost:13313/SurfaceServices/personalBread/export/faultDetailsExportXLSX",
|
||||
type: "POST",
|
||||
data: rows
|
||||
});
|
||||
}
|
||||
|
||||
const docs1 = "https://github.com/nodeca/pako/";
|
||||
const docs2 = "https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data_in_older_browsers";
|
||||
const docs3 = "https://stackoverflow.com/q/3277182/1008999";
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
39
tests/fixtures/generated_scene/g2_prediction_compute/index.html
vendored
Normal file
39
tests/fixtures/generated_scene/g2_prediction_compute/index.html
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G2 Prediction Compute Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
const reportType = "predictionCompute";
|
||||
const period_mode = "prediction";
|
||||
|
||||
async function queryHighLossForecast(orgno, fdate) {
|
||||
const params = {
|
||||
orgno,
|
||||
fdate,
|
||||
tjzq: "month",
|
||||
mode: "prediction",
|
||||
page: 1,
|
||||
rows: 60,
|
||||
reportType: "predictionCompute"
|
||||
};
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/highLineLossForecast",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify(params)
|
||||
});
|
||||
}
|
||||
|
||||
function runPredictionMode() {
|
||||
return queryHighLossForecast("6201001", "2026-04");
|
||||
}
|
||||
|
||||
function normalizePredictionRow(lineId, lineName, lineLossType, lineLossRate, powerLoss) {
|
||||
return { lineId, lineName, lineLossType, lineLossRate, powerLoss };
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
83
tests/fixtures/generated_scene/g2_remaining_fail_closed_closure_followup_2026-04-19.json
vendored
Normal file
83
tests/fixtures/generated_scene/g2_remaining_fail_closed_closure_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan",
|
||||
"parentRoute": "Route 3 / G2 multi_mode_request closure",
|
||||
"plan": "2026-04-19-g2-remaining-fail-closed-closure-plan.md",
|
||||
"scope": {
|
||||
"fixedInputBucket": "multi_mode_request structured fail-closed",
|
||||
"baselineCount": 4,
|
||||
"allowedChange": "fill empty G2 mode requestTemplate from bounded mode-specific fallback",
|
||||
"forbiddenChanges": [
|
||||
"execution board update",
|
||||
"new family",
|
||||
"Route 2 asset changes",
|
||||
"Route 4+ work"
|
||||
]
|
||||
},
|
||||
"summary": {
|
||||
"beforeFailClosed": 4,
|
||||
"resolvedToAutoPass": 4,
|
||||
"remainingFailClosed": 0,
|
||||
"coverageDelta": 4
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-020-scene",
|
||||
"sceneName": "供电所线路电量统计",
|
||||
"baselineStatus": "fail-closed-known",
|
||||
"baselineReadiness": "C",
|
||||
"baselineBlockers": [
|
||||
"g2_request_contract",
|
||||
"request_mode_contract"
|
||||
],
|
||||
"followupStatus": "auto-pass",
|
||||
"followupReadiness": "A",
|
||||
"archetype": "multi_mode_request",
|
||||
"resolvedBy": "g2_mode_request_template_fallback"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-023-scene",
|
||||
"sceneName": "供电质量看板-武威",
|
||||
"baselineStatus": "fail-closed-known",
|
||||
"baselineReadiness": "C",
|
||||
"baselineBlockers": [
|
||||
"g2_request_contract",
|
||||
"request_mode_contract"
|
||||
],
|
||||
"followupStatus": "auto-pass",
|
||||
"followupReadiness": "A",
|
||||
"archetype": "multi_mode_request",
|
||||
"resolvedBy": "g2_mode_request_template_fallback"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-070-scene",
|
||||
"sceneName": "电量、站损自动采集上报",
|
||||
"baselineStatus": "fail-closed-known",
|
||||
"baselineReadiness": "C",
|
||||
"baselineBlockers": [
|
||||
"g2_request_contract",
|
||||
"request_mode_contract"
|
||||
],
|
||||
"followupStatus": "auto-pass",
|
||||
"followupReadiness": "A",
|
||||
"archetype": "multi_mode_request",
|
||||
"resolvedBy": "g2_mode_request_template_fallback"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-083-scene",
|
||||
"sceneName": "营销业务管控监测日报表",
|
||||
"baselineStatus": "fail-closed-known",
|
||||
"baselineReadiness": "C",
|
||||
"baselineBlockers": [
|
||||
"g2_request_contract",
|
||||
"request_mode_contract"
|
||||
],
|
||||
"followupStatus": "auto-pass",
|
||||
"followupReadiness": "A",
|
||||
"archetype": "multi_mode_request",
|
||||
"resolvedBy": "g2_mode_request_template_fallback"
|
||||
}
|
||||
],
|
||||
"outputRoot": "examples/g2_remaining_fail_closed_closure_followup_2026-04-19",
|
||||
"stopStatement": "Route 3 is closed after measuring the fixed G2 bucket delta. Do not begin Route 4 in this plan."
|
||||
}
|
||||
49
tests/fixtures/generated_scene/g2_residual_2_readiness_closure_followup_2026-04-19.json
vendored
Normal file
49
tests/fixtures/generated_scene/g2_residual_2_readiness_closure_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-g2-residual-2-readiness-closure-plan.md",
|
||||
"outputRoot": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g2_residual_2_readiness_closure_2026-04-19",
|
||||
"summary": {
|
||||
"total": 2,
|
||||
"pass": 2,
|
||||
"failClosed": 0,
|
||||
"sourceUnreadable": 0,
|
||||
"unknown": 0
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-018-scene",
|
||||
"sceneName": "白银线损周报",
|
||||
"exitCode": 0,
|
||||
"durationSeconds": 46.4,
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "",
|
||||
"routeStatus": "pass",
|
||||
"modeNames": [
|
||||
"diagnosis"
|
||||
],
|
||||
"g2ModesPresentPassed": true,
|
||||
"g2RequestContractCompletePassed": true,
|
||||
"g2ResponseContractCompletePassed": true,
|
||||
"reportPath": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g2_residual_2_readiness_closure_2026-04-19\\skills\\sweep-018-scene\\references\\generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-071-scene",
|
||||
"sceneName": "台区线损大数据-月_周累计线损率统计分析",
|
||||
"exitCode": 0,
|
||||
"durationSeconds": 31.28,
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "",
|
||||
"routeStatus": "pass",
|
||||
"modeNames": [
|
||||
"month",
|
||||
"week"
|
||||
],
|
||||
"g2ModesPresentPassed": true,
|
||||
"g2RequestContractCompletePassed": true,
|
||||
"g2ResponseContractCompletePassed": true,
|
||||
"reportPath": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g2_residual_2_readiness_closure_2026-04-19\\skills\\sweep-071-scene\\references\\generation-report.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
42
tests/fixtures/generated_scene/g2_weekly_single_mode/index.html
vendored
Normal file
42
tests/fixtures/generated_scene/g2_weekly_single_mode/index.html
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G2 Weekly Single Mode Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
|
||||
async function queryWeeklyLineloss(orgno, weekSfdate, weekEfdate) {
|
||||
const params = {
|
||||
orgno,
|
||||
tjzq: "week",
|
||||
level: "02",
|
||||
rows: 20,
|
||||
page: 1,
|
||||
weekSfdate,
|
||||
weekEfdate
|
||||
};
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getYearMonWeekLinelossAnalysisList",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify(params)
|
||||
});
|
||||
}
|
||||
|
||||
async function queryWeeklyRank(orgno) {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/tqLinelossStatis/getTqLinelossInfoListRank",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: JSON.stringify({ orgno, page: 1, rows: 20 })
|
||||
});
|
||||
}
|
||||
|
||||
function runWeeklyReport() {
|
||||
return queryWeeklyLineloss("6201001", "2026-04-01", "2026-04-07");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
203
tests/fixtures/generated_scene/g3_candidate_batch_2026-04-18.json
vendored
Normal file
203
tests/fixtures/generated_scene/g3_candidate_batch_2026-04-18.json
vendored
Normal file
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"batchId": "g3-95598-ticket-family-candidates-2026-04-18",
|
||||
"family": "G3",
|
||||
"source": "tests/fixtures/generated_scene/scene_ledger_snapshot_2026-04-18.json",
|
||||
"ledgerClusterLabel": "95598-ticket-family-candidate",
|
||||
"selectionRule": "ledger grouping result == 95598-ticket-family-candidate",
|
||||
"candidateCount": 11,
|
||||
"representativeBaseline": "tests/fixtures/generated_scene/paginated_enrichment",
|
||||
"firstExpansionBaseline": "tests/fixtures/generated_scene/paginated_enrichment_expansion",
|
||||
"promotedBatchExpansionBaselines": [
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_workorder",
|
||||
"sceneId": "p1-g3-paginated-expansion-workorder-report",
|
||||
"sceneName": "P1 G3 paginated expansion workorder report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "workOrderNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_orderno",
|
||||
"sceneId": "p1-g3-paginated-expansion-orderno-report",
|
||||
"sceneName": "P1 G3 paginated expansion orderno report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "page",
|
||||
"requiredJoinKey": "orderNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_source_distribution",
|
||||
"sceneId": "p1-g3-paginated-expansion-source-distribution-report",
|
||||
"sceneName": "P1 G3 paginated expansion source distribution report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_service_risk",
|
||||
"sceneId": "p1-g3-paginated-expansion-service-risk-report",
|
||||
"sceneName": "P1 G3 paginated expansion service risk report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_timeout_warning",
|
||||
"sceneId": "p1-g3-paginated-expansion-timeout-warning-report",
|
||||
"sceneName": "P1 G3 paginated expansion timeout warning report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_device_monitor_weekly",
|
||||
"sceneId": "p1-g3-paginated-expansion-device-monitor-weekly-report",
|
||||
"sceneName": "P1 G3 paginated expansion device monitor weekly report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_customer_satisfaction",
|
||||
"sceneId": "p1-g3-paginated-expansion-customer-satisfaction-report",
|
||||
"sceneName": "P1 G3 paginated expansion customer satisfaction report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "page",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_return",
|
||||
"sceneId": "p1-g3-paginated-expansion-repair-return-report",
|
||||
"sceneName": "P1 G3 paginated expansion repair return report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_daily_control",
|
||||
"sceneId": "p1-g3-paginated-expansion-repair-daily-control-report",
|
||||
"sceneName": "P1 G3 paginated expansion repair daily control report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_business_stats",
|
||||
"sceneId": "p1-g3-paginated-expansion-business-stats-report",
|
||||
"sceneName": "P1 G3 paginated expansion business stats report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "page",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
}
|
||||
],
|
||||
"expectedSharedContract": {
|
||||
"archetype": "paginated_enrichment",
|
||||
"requiredPaginationFields": [
|
||||
"page",
|
||||
"pageNum",
|
||||
"pageSize",
|
||||
"pageNo"
|
||||
],
|
||||
"requiredJoinKeyPatterns": [
|
||||
"ticketNo",
|
||||
"workOrderNo",
|
||||
"orderNo"
|
||||
],
|
||||
"requiredAggregateRulePatterns": [
|
||||
"aggregate:riskLevel",
|
||||
"aggregate:sourceType"
|
||||
]
|
||||
},
|
||||
"candidates": [
|
||||
{
|
||||
"sceneKey": "95598_ticket_12398_process_timeout_detail",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "first-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "95598_ticket_12398_device_monitor_weekly",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "seventh-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "95598_ticket_customer_satisfaction_daily",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "eighth-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "95598_ticket_detail",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "p0-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "95598_ticket_repair_return_analysis",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "ninth-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "95598_ticket_repair_daily_control",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "tenth-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "power_supply_service_ticket_business_stats",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "eleventh-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "process_timeout_risk_ticket_detail",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "fifth-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "ticket_timeout_warning_detail",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "sixth-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "ticket_source_distribution_analysis",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "fourth-expansion-anchor"
|
||||
},
|
||||
{
|
||||
"sceneKey": "service_risk_ticket_detail",
|
||||
"ledgerGroupingResult": "95598-ticket-family-candidate",
|
||||
"ledgerFamilyJudgement": "pending-regroup",
|
||||
"batchRole": "third-expansion-anchor"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This batch does not claim that all 11 candidates are already runnable or contract-complete.",
|
||||
"It records that the full current roadmap-selected G3 representative and promoted expansion baselines are the correct family anchor for this ledger cluster.",
|
||||
"The next execution round should continue from these promoted baselines instead of re-selecting the same candidates from the ledger snapshot."
|
||||
]
|
||||
}
|
||||
75
tests/fixtures/generated_scene/g3_enrichment_request_closure_followup_2026-04-19.json
vendored
Normal file
75
tests/fixtures/generated_scene/g3_enrichment_request_closure_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"date": "2026-04-19",
|
||||
"parentRoute": "Route 2: G3 / paginated_enrichment",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-g3-enrichment-request-closure-plan.md",
|
||||
"fixedInputBucket": "paginated_enrichment + g3_enrichment_contract + secondary_request",
|
||||
"beforeCount": 3,
|
||||
"afterResolvedCount": 2,
|
||||
"afterResidualCount": 1,
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-001-95598-12398",
|
||||
"before": {
|
||||
"generationStatus": "fail-closed",
|
||||
"readinessLevel": "C",
|
||||
"enrichmentCount": 0,
|
||||
"primaryBlockers": [
|
||||
"g3_enrichment_contract",
|
||||
"secondary_request"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"generationStatus": "pass",
|
||||
"readinessLevel": "A",
|
||||
"enrichmentCount": 2,
|
||||
"residualBlockers": []
|
||||
},
|
||||
"delta": "resolved-to-pass"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-008-95598",
|
||||
"before": {
|
||||
"generationStatus": "fail-closed",
|
||||
"readinessLevel": "C",
|
||||
"enrichmentCount": 0,
|
||||
"primaryBlockers": [
|
||||
"g3_enrichment_contract",
|
||||
"secondary_request",
|
||||
"g3_runtime_scope"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"generationStatus": "pass",
|
||||
"readinessLevel": "A",
|
||||
"enrichmentCount": 3,
|
||||
"residualBlockers": []
|
||||
},
|
||||
"delta": "resolved-to-pass"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-002-95598-12398",
|
||||
"before": {
|
||||
"generationStatus": "fail-closed",
|
||||
"readinessLevel": "C",
|
||||
"enrichmentCount": 0,
|
||||
"primaryBlockers": [
|
||||
"g3_enrichment_contract",
|
||||
"secondary_request",
|
||||
"g3_export_plan",
|
||||
"export_plan"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"generationStatus": "fail-closed",
|
||||
"readinessLevel": "C",
|
||||
"enrichmentCount": 0,
|
||||
"residualBlockers": [
|
||||
"g3_export_plan",
|
||||
"export_plan"
|
||||
]
|
||||
},
|
||||
"delta": "handed-off-to-export-plan-closure"
|
||||
}
|
||||
],
|
||||
"expectedNextChildPlan": "docs/superpowers/plans/2026-04-19-g3-export-plan-closure-plan.md"
|
||||
}
|
||||
32
tests/fixtures/generated_scene/g3_export_plan_closure_followup_2026-04-19.json
vendored
Normal file
32
tests/fixtures/generated_scene/g3_export_plan_closure_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"date": "2026-04-19",
|
||||
"parentRoute": "Route 2: G3 / paginated_enrichment",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-g3-export-plan-closure-plan.md",
|
||||
"fixedInputBucket": "paginated_enrichment + g3_export_plan + export_plan",
|
||||
"beforeCount": 1,
|
||||
"afterResolvedCount": 1,
|
||||
"afterResidualCount": 0,
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-002-95598-12398",
|
||||
"before": {
|
||||
"generationStatus": "fail-closed",
|
||||
"readinessLevel": "C",
|
||||
"exportEntry": null,
|
||||
"primaryBlockers": [
|
||||
"g3_export_plan",
|
||||
"export_plan"
|
||||
]
|
||||
},
|
||||
"after": {
|
||||
"generationStatus": "pass",
|
||||
"readinessLevel": "A",
|
||||
"exportEntry": "exportWord",
|
||||
"residualBlockers": []
|
||||
},
|
||||
"delta": "resolved-to-pass"
|
||||
}
|
||||
],
|
||||
"residualRoute2CountAfterThisPlan": 0,
|
||||
"expectedNextChildPlan": "docs/superpowers/plans/2026-04-19-g3-residual-contract-closure-plan.md"
|
||||
}
|
||||
66
tests/fixtures/generated_scene/g3_g8_mixed_boundary/index.html
vendored
Normal file
66
tests/fixtures/generated_scene/g3_g8_mixed_boundary/index.html
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>G3 G8 Mixed Boundary</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const pagesDetail = {
|
||||
loginPath: "http://south.95598.sgcc.com.cn/bs/bsp/jsp/login.jsp",
|
||||
mainPath: "http://south.95598.sgcc.com.cn/bs/bsp/jsp/main1.jsp"
|
||||
}
|
||||
|
||||
async function getDataCallBack1(targeturl, actionurl, responseText) {
|
||||
let data = { TabTi: { rows: [{ cols: [] }, { cols: [] }] }, ColumnNames: ["appNo", "custNo"] }
|
||||
data.TabTi.rows.shift()
|
||||
let this_rows = data.TabTi.rows.map((e) => e["cols"])
|
||||
return this_rows
|
||||
}
|
||||
|
||||
function getDataCallBack2(targeturl, actionurl, responseText) {
|
||||
return responseText
|
||||
}
|
||||
|
||||
async function getTicketDetail(appNo) {
|
||||
return axios.post("http://south.95598.sgcc.com.cn/bs/businessaccept/queryTicketDetail/query.so", {
|
||||
appNo: appNo
|
||||
})
|
||||
}
|
||||
|
||||
function exportExcel(config) {
|
||||
return docExport(config)
|
||||
}
|
||||
|
||||
function runScene(mac, startHandleTime, endHandleTime) {
|
||||
let path = moment(endHandleTime).diff(moment(), 'days') < -90
|
||||
? '/bs/businessaccept/queryHisS95598WkstGrid/query.so'
|
||||
: '/bs/businessaccept/newQueryS95598WkstGrid/query.so'
|
||||
|
||||
BrowserAction(
|
||||
'sgBrowerserJsAjax2',
|
||||
pagesDetail.mainPath,
|
||||
`${path}?appNo=&custNo=&org.sotower.web.taglib.util.PAGEPOLITPAGESIZE_grid=15&org.sotower.web.taglib.util.PAGEPOLITCURRENTPAGEINDEX_grid=${mac.page1}&org.sotower.web.taglib.util.RESETPAGEINDEX_grid=false`,
|
||||
"getDataCallBack1"
|
||||
)
|
||||
|
||||
axios.post("http://localhost:13313/configServices/selectData", JSON.stringify({
|
||||
tableName: "work_order_detail_for95598",
|
||||
query: "WHERE appNo >= '20260101'"
|
||||
}), {
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
})
|
||||
|
||||
let exportConfig = {
|
||||
url: "http://localhost:13313/SurfaceServices/personalBread/export/faultYoYExportXLSX"
|
||||
}
|
||||
|
||||
if (mac.page1 === mac.total1) {
|
||||
exportExcel(exportConfig)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
82
tests/fixtures/generated_scene/g3_residual_4_workflow_evidence_closure_followup_2026-04-19.json
vendored
Normal file
82
tests/fixtures/generated_scene/g3_residual_4_workflow_evidence_closure_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-g3-residual-4-workflow-evidence-closure-plan.md",
|
||||
"outputRoot": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g3_residual_4_workflow_evidence_closure_2026-04-19",
|
||||
"summary": {
|
||||
"total": 4,
|
||||
"pass": 4,
|
||||
"failClosed": 0,
|
||||
"sourceUnreadable": 0,
|
||||
"unknown": 0
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-007-scene",
|
||||
"sceneName": "95598供电服务月报",
|
||||
"exitCode": 0,
|
||||
"durationSeconds": 10.13,
|
||||
"workflowArchetype": "paginated_enrichment",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "",
|
||||
"routeStatus": "pass",
|
||||
"missingPieces": [
|
||||
|
||||
],
|
||||
"risks": [
|
||||
|
||||
],
|
||||
"reportPath": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g3_residual_4_workflow_evidence_closure_2026-04-19\\skills\\sweep-007-scene\\references\\generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-039-scene",
|
||||
"sceneName": "故障报修工单信息统计表",
|
||||
"exitCode": 0,
|
||||
"durationSeconds": 5.11,
|
||||
"workflowArchetype": "paginated_enrichment",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "",
|
||||
"routeStatus": "pass",
|
||||
"missingPieces": [
|
||||
|
||||
],
|
||||
"risks": [
|
||||
|
||||
],
|
||||
"reportPath": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g3_residual_4_workflow_evidence_closure_2026-04-19\\skills\\sweep-039-scene\\references\\generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-068-scene",
|
||||
"sceneName": "输变电设备运行分析报告",
|
||||
"exitCode": 0,
|
||||
"durationSeconds": 10.15,
|
||||
"workflowArchetype": "paginated_enrichment",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "",
|
||||
"routeStatus": "pass",
|
||||
"missingPieces": [
|
||||
|
||||
],
|
||||
"risks": [
|
||||
|
||||
],
|
||||
"reportPath": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g3_residual_4_workflow_evidence_closure_2026-04-19\\skills\\sweep-068-scene\\references\\generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-084-scene",
|
||||
"sceneName": "巡视计划完成情况自动检索",
|
||||
"exitCode": 0,
|
||||
"durationSeconds": 5.09,
|
||||
"workflowArchetype": "paginated_enrichment",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "",
|
||||
"routeStatus": "pass",
|
||||
"missingPieces": [
|
||||
|
||||
],
|
||||
"risks": [
|
||||
|
||||
],
|
||||
"reportPath": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\g3_residual_4_workflow_evidence_closure_2026-04-19\\skills\\sweep-084-scene\\references\\generation-report.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
18
tests/fixtures/generated_scene/g3_residual_contract_closure_2026-04-19.json
vendored
Normal file
18
tests/fixtures/generated_scene/g3_residual_contract_closure_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"date": "2026-04-19",
|
||||
"parentRoute": "Route 2: G3 / paginated_enrichment",
|
||||
"parentPlan": "docs/superpowers/plans/2026-04-19-g3-residual-contract-closure-plan.md",
|
||||
"inputSources": [
|
||||
"tests/fixtures/generated_scene/g3_enrichment_request_closure_followup_2026-04-19.json",
|
||||
"tests/fixtures/generated_scene/g3_export_plan_closure_followup_2026-04-19.json"
|
||||
],
|
||||
"residualBeforeThisPlan": 0,
|
||||
"implementedCorrectionSlice": false,
|
||||
"residualAfterThisPlan": 0,
|
||||
"residualGroups": [],
|
||||
"route2Status": "completed",
|
||||
"handoff": {
|
||||
"nextRoute": "Route 3: G2 / multi_mode_request",
|
||||
"nextPlan": "docs/superpowers/plans/2026-04-19-g2-remaining-fail-closed-closure-plan.md"
|
||||
}
|
||||
}
|
||||
56
tests/fixtures/generated_scene/g6_host_bridge_callback_semantics_2026-04-19.json
vendored
Normal file
56
tests/fixtures/generated_scene/g6_host_bridge_callback_semantics_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "g6-host-bridge-callback-semantics",
|
||||
"startingState": {
|
||||
"targetGroup": "G6",
|
||||
"realExecutionOutOfScope": true,
|
||||
"implementationOutOfScope": true,
|
||||
"heldGroups": [
|
||||
"G8"
|
||||
]
|
||||
},
|
||||
"completionStates": [
|
||||
{
|
||||
"state": "ok",
|
||||
"definition": "All callback_request endpoints return successful callback results and no blockedReason or fatalError is raised."
|
||||
},
|
||||
{
|
||||
"state": "partial",
|
||||
"definition": "At least one callback_request endpoint returns a non-ok callback result while the overall flow is not blocked and no fatalError is raised."
|
||||
},
|
||||
{
|
||||
"state": "blocked",
|
||||
"definition": "The flow is stopped by page-context validation or host-bridge unavailability before callback completion can be accepted."
|
||||
},
|
||||
{
|
||||
"state": "error",
|
||||
"definition": "A fatal execution error is raised outside the bounded blocked-state path."
|
||||
}
|
||||
],
|
||||
"semanticRules": [
|
||||
{
|
||||
"rule": "blocked_has_priority",
|
||||
"summary": "blocked overrides all callback result states"
|
||||
},
|
||||
{
|
||||
"rule": "fatal_error_maps_to_error",
|
||||
"summary": "fatalError maps directly to error when blocked is absent"
|
||||
},
|
||||
{
|
||||
"rule": "non_ok_callback_maps_to_partial",
|
||||
"summary": "any non-ok callback result maps to partial when blocked and fatalError are absent"
|
||||
},
|
||||
{
|
||||
"rule": "all_ok_maps_to_ok",
|
||||
"summary": "all callback results ok maps to ok when blocked and fatalError are absent"
|
||||
}
|
||||
],
|
||||
"selectedFollowup": {
|
||||
"design": "docs/superpowers/specs/2026-04-19-g6-host-bridge-callback-state-verification-design.md",
|
||||
"plan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-callback-state-verification-plan.md"
|
||||
},
|
||||
"notes": [
|
||||
"This slice publishes only the bounded completion-state semantics.",
|
||||
"No G6 real-sample execution or host-runtime implementation is opened here."
|
||||
]
|
||||
}
|
||||
44
tests/fixtures/generated_scene/g6_host_bridge_callback_state_verification_2026-04-19.json
vendored
Normal file
44
tests/fixtures/generated_scene/g6_host_bridge_callback_state_verification_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "g6-host-bridge-callback-state-verification",
|
||||
"startingState": {
|
||||
"targetGroup": "G6",
|
||||
"realExecutionOutOfScope": true,
|
||||
"implementationOutOfScope": true,
|
||||
"heldGroups": [
|
||||
"G8"
|
||||
]
|
||||
},
|
||||
"verificationTargets": [
|
||||
{
|
||||
"state": "ok",
|
||||
"evidenceRequirement": "all callback_request results are ok and neither blockedReason nor fatalError is present"
|
||||
},
|
||||
{
|
||||
"state": "partial",
|
||||
"evidenceRequirement": "at least one callback_request result is non-ok while blockedReason and fatalError are both absent"
|
||||
},
|
||||
{
|
||||
"state": "blocked",
|
||||
"evidenceRequirement": "pageValidation fails or host bridge returns a blocked result before callback success can be accepted"
|
||||
},
|
||||
{
|
||||
"state": "error",
|
||||
"evidenceRequirement": "fatalError is present while blockedReason is absent"
|
||||
}
|
||||
],
|
||||
"verificationPriority": [
|
||||
"blocked",
|
||||
"error",
|
||||
"partial",
|
||||
"ok"
|
||||
],
|
||||
"selectedFollowup": {
|
||||
"design": "docs/superpowers/specs/2026-04-19-g6-host-bridge-entry-readiness-design.md",
|
||||
"plan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-entry-readiness-plan.md"
|
||||
},
|
||||
"notes": [
|
||||
"This slice publishes only bounded verification targets for callback states.",
|
||||
"No G6 real-sample execution or host-runtime implementation is opened here."
|
||||
]
|
||||
}
|
||||
52
tests/fixtures/generated_scene/g6_host_bridge_entry_gate_2026-04-19.json
vendored
Normal file
52
tests/fixtures/generated_scene/g6_host_bridge_entry_gate_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "g6-host-bridge-entry-gate",
|
||||
"startingState": {
|
||||
"targetGroup": "G6",
|
||||
"realExecutionOutOfScope": true,
|
||||
"implementationOutOfScope": true,
|
||||
"heldGroups": [
|
||||
"G8"
|
||||
]
|
||||
},
|
||||
"hardGateConditions": [
|
||||
{
|
||||
"name": "host-bridge-action-invocation-defined",
|
||||
"status": "required",
|
||||
"failureReason": "g6_bridge_invocation_semantics_missing"
|
||||
},
|
||||
{
|
||||
"name": "callback-request-completion-defined",
|
||||
"status": "required",
|
||||
"failureReason": "g6_callback_completion_semantics_missing"
|
||||
},
|
||||
{
|
||||
"name": "callback-state-verification-targets-defined",
|
||||
"status": "required",
|
||||
"failureReason": "g6_callback_state_targets_missing"
|
||||
}
|
||||
],
|
||||
"softConditions": [
|
||||
{
|
||||
"name": "host-runtime-transport-implementation",
|
||||
"status": "optional-later"
|
||||
},
|
||||
{
|
||||
"name": "real-sample-execution-proof",
|
||||
"status": "optional-later"
|
||||
}
|
||||
],
|
||||
"failCloseReasons": [
|
||||
"g6_bridge_invocation_semantics_missing",
|
||||
"g6_callback_completion_semantics_missing",
|
||||
"g6_callback_state_targets_missing"
|
||||
],
|
||||
"selectedFollowup": {
|
||||
"design": "docs/superpowers/specs/2026-04-19-g6-host-bridge-entry-gate-verification-design.md",
|
||||
"plan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-entry-gate-verification-plan.md"
|
||||
},
|
||||
"notes": [
|
||||
"This slice publishes only bounded future entry-gate conditions.",
|
||||
"No G6 real-sample execution or host-runtime implementation is opened here."
|
||||
]
|
||||
}
|
||||
53
tests/fixtures/generated_scene/g6_host_bridge_entry_readiness_2026-04-19.json
vendored
Normal file
53
tests/fixtures/generated_scene/g6_host_bridge_entry_readiness_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "g6-host-bridge-entry-readiness",
|
||||
"startingState": {
|
||||
"targetGroup": "G6",
|
||||
"realExecutionOutOfScope": true,
|
||||
"implementationOutOfScope": true,
|
||||
"heldGroups": [
|
||||
"G8"
|
||||
]
|
||||
},
|
||||
"requiredCriteria": [
|
||||
{
|
||||
"name": "host-bridge-action-invocation-defined",
|
||||
"status": "required",
|
||||
"reason": "A future G6 entry cannot open without an explicit bridge-action invocation semantic."
|
||||
},
|
||||
{
|
||||
"name": "callback-request-completion-defined",
|
||||
"status": "required",
|
||||
"reason": "A future G6 entry cannot open without an explicit callback completion semantic."
|
||||
},
|
||||
{
|
||||
"name": "callback-state-verification-targets-defined",
|
||||
"status": "required",
|
||||
"reason": "A future G6 entry cannot open without bounded verification targets for ok/partial/blocked/error."
|
||||
}
|
||||
],
|
||||
"optionalCriteria": [
|
||||
{
|
||||
"name": "host-runtime-transport-implementation",
|
||||
"status": "optional-later",
|
||||
"reason": "Must remain outside this readiness slice."
|
||||
},
|
||||
{
|
||||
"name": "real-sample-execution-proof",
|
||||
"status": "optional-later",
|
||||
"reason": "Belongs to a later execution slice, not to readiness modeling."
|
||||
}
|
||||
],
|
||||
"minimalReadinessThreshold": {
|
||||
"level": "semantic-ready",
|
||||
"definition": "G6 may be considered ready for a later bounded entry slice only after all required semantic criteria are explicit while direct runtime implementation remains out of scope."
|
||||
},
|
||||
"selectedFollowup": {
|
||||
"design": "docs/superpowers/specs/2026-04-19-g6-host-bridge-entry-gate-design.md",
|
||||
"plan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-entry-gate-plan.md"
|
||||
},
|
||||
"notes": [
|
||||
"This slice publishes only bounded entry-readiness criteria.",
|
||||
"No G6 real-sample execution or host-runtime implementation is opened here."
|
||||
]
|
||||
}
|
||||
47
tests/fixtures/generated_scene/g6_host_bridge_execution_semantics_2026-04-19.json
vendored
Normal file
47
tests/fixtures/generated_scene/g6_host_bridge_execution_semantics_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "g6-host-bridge-execution-semantics",
|
||||
"startingState": {
|
||||
"targetGroup": "G6",
|
||||
"realExecutionOutOfScope": true,
|
||||
"implementationOutOfScope": true,
|
||||
"heldGroups": [
|
||||
"G8"
|
||||
]
|
||||
},
|
||||
"semanticModel": {
|
||||
"bridgeInvocation": {
|
||||
"name": "host-bridge-action-invocation",
|
||||
"summary": "A bounded semantic must define how a host bridge action is identified, invoked, and interpreted before any real G6 sample may be executed."
|
||||
},
|
||||
"callbackCompletion": {
|
||||
"name": "callback-request-completion",
|
||||
"summary": "A bounded semantic must define when callback_request steps count as complete, partial, blocked, or error during later real execution."
|
||||
}
|
||||
},
|
||||
"semanticBoundaries": [
|
||||
{
|
||||
"slice": "bridge_action_invocation",
|
||||
"status": "selected",
|
||||
"reason": "Directly matches the existing invokeHostBridge semantic seam in the generated G6 runtime shape."
|
||||
},
|
||||
{
|
||||
"slice": "callback_completion_semantics",
|
||||
"status": "selected",
|
||||
"reason": "Directly matches the existing callbackEndpoints and callback result accumulation seam in the generated G6 runtime shape."
|
||||
},
|
||||
{
|
||||
"slice": "host_runtime_transport_rebuild",
|
||||
"status": "out-of-scope",
|
||||
"reason": "Must remain outside this bounded semantic slice."
|
||||
}
|
||||
],
|
||||
"selectedFollowup": {
|
||||
"design": "docs/superpowers/specs/2026-04-19-g6-host-bridge-callback-semantics-design.md",
|
||||
"plan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-callback-semantics-plan.md"
|
||||
},
|
||||
"notes": [
|
||||
"This slice publishes only the minimum semantic boundary.",
|
||||
"No G6 real-sample execution or host-runtime implementation is opened here."
|
||||
]
|
||||
}
|
||||
42
tests/fixtures/generated_scene/g6_host_bridge_prerequisites_2026-04-19.json
vendored
Normal file
42
tests/fixtures/generated_scene/g6_host_bridge_prerequisites_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "g6-host-bridge-prerequisites",
|
||||
"startingState": {
|
||||
"targetGroup": "G6",
|
||||
"executionOutOfScope": true,
|
||||
"reopenedGroups": [],
|
||||
"heldGroups": [
|
||||
"G8"
|
||||
]
|
||||
},
|
||||
"blockedCapability": {
|
||||
"name": "host-bridge-real-execution-semantics",
|
||||
"summary": "The generator already models host_bridge_workflow, but the next real-sample step is blocked by the lack of a bounded semantic contract for how host bridge calls are issued, awaited, and validated during real execution.",
|
||||
"boundedInsteadOfBroadRuntime": true
|
||||
},
|
||||
"capabilityBreakdown": [
|
||||
{
|
||||
"slice": "bridge_action_invocation",
|
||||
"status": "needed",
|
||||
"reason": "A real sample needs a bounded semantic description of how sgBrowserExcuteJsCode-style actions are invoked."
|
||||
},
|
||||
{
|
||||
"slice": "callback_completion_semantics",
|
||||
"status": "needed",
|
||||
"reason": "A real sample needs a bounded semantic description of how callback_request steps are recognized as complete or failed."
|
||||
},
|
||||
{
|
||||
"slice": "host_runtime_platform_rebuild",
|
||||
"status": "out-of-scope",
|
||||
"reason": "The prerequisite slice must stay narrower than broad host-runtime implementation."
|
||||
}
|
||||
],
|
||||
"selectedFollowup": {
|
||||
"design": "docs/superpowers/specs/2026-04-19-g6-host-bridge-execution-semantics-design.md",
|
||||
"plan": "docs/superpowers/plans/2026-04-19-g6-host-bridge-execution-semantics-plan.md"
|
||||
},
|
||||
"notes": [
|
||||
"This slice isolates the minimum blocked capability instead of broadening into host-runtime implementation.",
|
||||
"No G6 real-sample execution is opened under this plan."
|
||||
]
|
||||
}
|
||||
59
tests/fixtures/generated_scene/g6_host_bridge_workflow/index.html
vendored
Normal file
59
tests/fixtures/generated_scene/g6_host_bridge_workflow/index.html
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="sgclaw-scene-kind" content="report_collection" />
|
||||
<meta name="sgclaw-target-url" content="http://yx.gs.sgcc.com.cn/" />
|
||||
<meta name="sgclaw-expected-domain" content="yx.gscc.com.cn" />
|
||||
<title>Host Bridge Workflow Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn/meter";
|
||||
|
||||
async function runInspectionRateReport() {
|
||||
const todo = await BrowserAction("sgBrowerserJsAjax2", {
|
||||
url: "http://localhost:13313/browser/action/callback",
|
||||
callback: "loadTodo"
|
||||
});
|
||||
const todoRows = await getWorkOrderToDoList(todo.batchNo);
|
||||
for (const item of todoRows.rows || []) {
|
||||
await sgBrowserExcuteJsCode("openPlanForm", item.wkOrderNo);
|
||||
const plan = await queryMeterPlanFormulateApp(item.wkOrderNo);
|
||||
const details = await queryMeterPlanDtlForAddMeter(plan.planNo);
|
||||
if (details.rows && details.rows.length > 0) {
|
||||
item.finishRate = details.rows.filter(row => row.finished).length / details.rows.length;
|
||||
}
|
||||
}
|
||||
return todoRows;
|
||||
}
|
||||
|
||||
async function getWorkOrderToDoList(batchNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/meter/getWorkOrderToDoList",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ batchNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function queryMeterPlanFormulateApp(wkOrderNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/meter/queryMeterPlanFormulateApp",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ wkOrderNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function queryMeterPlanDtlForAddMeter(planNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/meter/queryMeterPlanDtlForAddMeter",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ planNo })
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
73
tests/fixtures/generated_scene/g7_multi_endpoint_inventory/index.html
vendored
Normal file
73
tests/fixtures/generated_scene/g7_multi_endpoint_inventory/index.html
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="sgclaw-scene-kind" content="report_collection" />
|
||||
<meta name="sgclaw-target-url" content="http://yx.gscc.com.cn/" />
|
||||
<meta name="sgclaw-expected-domain" content="yx.gscc.com.cn" />
|
||||
<title>Multi Endpoint Inventory Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gscc.com.cn/asset";
|
||||
|
||||
async function runAssetInventory() {
|
||||
const meter = await assetStatsQueryMeter("04");
|
||||
const it = await assetStatsQueryIt("04");
|
||||
const terminal = await assetStatsQueryAcqTrml("04");
|
||||
const common = await assetStatsQueryMeterCommonModule("04");
|
||||
const module = await assetStatsQueryJlGnModule("04");
|
||||
return aggregateInventory([meter, it, terminal, common, module]);
|
||||
}
|
||||
|
||||
async function assetStatsQueryMeter(month) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/asset/assetStatsQueryMeter",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ month, assetType: "meter" })
|
||||
});
|
||||
}
|
||||
|
||||
async function assetStatsQueryIt(month) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/asset/assetStatsQueryIt",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ month, assetType: "it" })
|
||||
});
|
||||
}
|
||||
|
||||
async function assetStatsQueryAcqTrml(month) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/asset/assetStatsQueryAcqTrml",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ month, assetType: "terminal" })
|
||||
});
|
||||
}
|
||||
|
||||
async function assetStatsQueryMeterCommonModule(month) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/asset/assetStatsQueryMeterCommonModule",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ month, assetType: "common_module" })
|
||||
});
|
||||
}
|
||||
|
||||
async function assetStatsQueryJlGnModule(month) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gscc.com.cn/asset/assetStatsQueryJlGnModule",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ month, assetType: "function_module" })
|
||||
});
|
||||
}
|
||||
|
||||
function aggregateInventory(parts) {
|
||||
return parts.flatMap(part => part.rows || []);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
48
tests/fixtures/generated_scene/g8_local_doc_pipeline/index.html
vendored
Normal file
48
tests/fixtures/generated_scene/g8_local_doc_pipeline/index.html
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="sgclaw-scene-kind" content="report_collection" />
|
||||
<meta name="sgclaw-target-url" content="http://south.95598.sgcc.com.cn/" />
|
||||
<meta name="sgclaw-expected-domain" content="south.95598.sgcc.com.cn" />
|
||||
<title>Local Document Pipeline Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://south.95598.sgcc.com.cn/report";
|
||||
|
||||
async function runServiceMonthlyReport() {
|
||||
const sourceRows = await BrowserAction("sgBrowerserJsAjax2", {
|
||||
url: "http://localhost:13313/configServices/selectData",
|
||||
callback: "selectData"
|
||||
});
|
||||
await $.ajax({
|
||||
url: "http://localhost:13313/configServices/selectData",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ tableName: "service_monthly_raw", rows: sourceRows })
|
||||
});
|
||||
const summary = await definedSqlQuery(
|
||||
"select city, count(*) as total from service_monthly_raw group by city"
|
||||
);
|
||||
return docExport({
|
||||
template: "95598-service-monthly.docx",
|
||||
data: summary
|
||||
});
|
||||
}
|
||||
|
||||
async function definedSqlQuery(sql) {
|
||||
return $.ajax({
|
||||
url: "http://localhost:13313/configServices/definedSqlQuery",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ sql })
|
||||
});
|
||||
}
|
||||
|
||||
function docExport(payload) {
|
||||
return BrowserAction("docExport", payload);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"route": "embedded_dictionary_extraction_hardening",
|
||||
"date": "2026-04-21",
|
||||
"status": "completed",
|
||||
"bucket": {
|
||||
"focus_archetype": "multi_mode_request",
|
||||
"anchor_scene": "sweep-030-scene",
|
||||
"source_driven_dictionary_slice": true
|
||||
},
|
||||
"changes": {
|
||||
"source_side_extraction_added": true,
|
||||
"generated_org_dictionary_from_source": true,
|
||||
"runtime_resolver_changed": false,
|
||||
"materialized_skills_changed": false
|
||||
},
|
||||
"verified": {
|
||||
"real_source_dictionary_codes": [
|
||||
"62401",
|
||||
"62408"
|
||||
],
|
||||
"fixture_dictionary_remains_empty_without_source_evidence": true,
|
||||
"tests": [
|
||||
"cargo test --test scene_generator_test analyzer_extracts_embedded_org_dictionary_from_sweep_030_source -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_writes_real_sweep_030_org_dictionary_from_embedded_source -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_writes_multi_mode_package_from_deterministic_analysis -- --nocapture"
|
||||
]
|
||||
},
|
||||
"residuals": [
|
||||
"dictionary extraction currently anchors on source evidence files such as city.js/dict.js/enum.js",
|
||||
"full tree preservation is not implemented in this slice",
|
||||
"route does not rematerialize 102 skills"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"route": "alias_generation_hardening",
|
||||
"plan": "docs/superpowers/plans/2026-04-20-generated-scene-invocation-alias-generation-hardening-plan.md",
|
||||
"date": "2026-04-21",
|
||||
"status": "completed",
|
||||
"scope": {
|
||||
"slice": "first reusable deterministic include keyword expansion",
|
||||
"bucket": "high-risk multi-mode request wording divergence, anchored by sweep-030-scene",
|
||||
"not_in_scope": [
|
||||
"runtime dispatch scoring",
|
||||
"service console behavior",
|
||||
"manual edits to final materialized scene.toml",
|
||||
"full 84-scene alias closure",
|
||||
"rematerialization refresh",
|
||||
"validation refresh"
|
||||
]
|
||||
},
|
||||
"implementation": {
|
||||
"changed_files": [
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/scene_generator_test.rs"
|
||||
],
|
||||
"summary": [
|
||||
"Generated deterministic include_keywords now preserve canonical scene names and page title keywords.",
|
||||
"Generated deterministic include_keywords now add normalized punctuation-stripped aliases.",
|
||||
"Month/week combined names can produce month-specific and week-specific invocation aliases.",
|
||||
"Line-loss style names can produce compact aliases such as taiqu-lineloss and lineloss-big-data."
|
||||
]
|
||||
},
|
||||
"anchor_scene": {
|
||||
"scene_id": "sweep-030-scene",
|
||||
"expected_generated_aliases": [
|
||||
"line-loss big data monthly line-loss statistics analysis",
|
||||
"line-loss big data weekly line-loss statistics analysis",
|
||||
"taiqu line-loss"
|
||||
],
|
||||
"reason": "These aliases match the real operator wording found during the intranet sweep-030 debugging process."
|
||||
},
|
||||
"verification": {
|
||||
"passed": [
|
||||
"cargo test --test scene_generator_test generator_writes_real_sweep_030_org_dictionary_from_embedded_source -- --nocapture",
|
||||
"cargo test --test scene_generator_modes_test -- --nocapture"
|
||||
],
|
||||
"warnings": [
|
||||
"Existing dead_code warnings in callback/openxml/generated_scene code remain.",
|
||||
"Existing unreachable_code warning in scene_generator_test.rs remains."
|
||||
]
|
||||
},
|
||||
"next_route": "generated_scene_runtime_semantics_rematerialization_refresh"
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"summary": {
|
||||
"runDate": "2026-04-21",
|
||||
"plan": "docs/superpowers/plans/2026-04-21-generated-scene-local-doc-pipeline-residual-closure-plan.md",
|
||||
"scope": "bounded local_doc_pipeline residual closure",
|
||||
"totalResidualScenes": 6,
|
||||
"analyzerEvidenceRecovered": 6,
|
||||
"generatorPackageRecoveryValidated": 6,
|
||||
"rematerializationRerun": false,
|
||||
"validationRefreshRerun": false
|
||||
},
|
||||
"residualScenes": [
|
||||
{
|
||||
"sceneId": "sweep-025-scene",
|
||||
"sceneName": "local-doc residual sweep-025",
|
||||
"recoveredEvidence": [
|
||||
"reportLogQuery",
|
||||
"reportLogSet",
|
||||
"reportFileOpen",
|
||||
"docExport"
|
||||
],
|
||||
"closureBasis": "fault details XLSX export plus report log/local file evidence"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-047-scene",
|
||||
"sceneName": "local-doc residual sweep-047",
|
||||
"recoveredEvidence": [
|
||||
"reportLogQuery",
|
||||
"reportLogSet",
|
||||
"reportLogDelete",
|
||||
"docTemplateTransform",
|
||||
"docExport"
|
||||
],
|
||||
"closureBasis": "docx template transform and exportImageDocs/local report log evidence"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-050-scene",
|
||||
"sceneName": "local-doc residual sweep-050",
|
||||
"recoveredEvidence": [
|
||||
"reportLogQuery",
|
||||
"reportLogSet",
|
||||
"reportLogDelete",
|
||||
"docExport"
|
||||
],
|
||||
"closureBasis": "webpack-bundled uploadWord/setWord/aSaveFile document export evidence plus report log"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-052-scene",
|
||||
"sceneName": "local-doc residual sweep-052",
|
||||
"recoveredEvidence": [
|
||||
"reportLogQuery",
|
||||
"reportLogSet",
|
||||
"reportLogDelete",
|
||||
"docTemplateTransform",
|
||||
"docExport"
|
||||
],
|
||||
"closureBasis": "docx template path, exportWord/exportImageDocs, and report log evidence"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-062-scene",
|
||||
"sceneName": "local-doc residual sweep-062",
|
||||
"recoveredEvidence": [
|
||||
"reportLogQuery",
|
||||
"reportLogSet",
|
||||
"reportLogDelete",
|
||||
"docTemplateTransform",
|
||||
"docExport"
|
||||
],
|
||||
"closureBasis": "docx template path, exportWord/exportImageDocs, and report log evidence"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-087-scene",
|
||||
"sceneName": "local-doc residual sweep-087",
|
||||
"recoveredEvidence": [
|
||||
"reportLogQuery",
|
||||
"reportLogSet",
|
||||
"reportLogDelete",
|
||||
"docExport"
|
||||
],
|
||||
"closureBasis": "api/genword plus aSaveFile/report log document generation evidence"
|
||||
}
|
||||
],
|
||||
"implementedReusableEvidenceTokens": [
|
||||
"exportImageDocs",
|
||||
"exportWordFile",
|
||||
"uploadWord",
|
||||
"setWord",
|
||||
"aSaveFile",
|
||||
"mammoth.convertToHtml",
|
||||
"faultDetailsExportXLSX",
|
||||
"api/genword",
|
||||
"/docxs/",
|
||||
"ReportServices/Api/readeFile"
|
||||
],
|
||||
"validation": {
|
||||
"passed": [
|
||||
"cargo test --test scene_generator_test analyzer_recovers_local_doc_residual_export_workflow_evidence -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_recovers_local_doc_residual_packages_from_source_evidence -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_writes_g8_local_doc_pipeline_package -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_blocks_incomplete_g8_local_doc_pipeline_contract -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_accepts_g8_local_doc_select_data_contract -- --nocapture"
|
||||
],
|
||||
"knownWarnings": [
|
||||
"existing dead_code warnings in callback_host/openxml/generator",
|
||||
"existing unreachable_code warning in scene_generator_test"
|
||||
]
|
||||
},
|
||||
"stopStatement": "No rematerialization or validation refresh was rerun inside this bounded closure plan."
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"route": "parameter_default_semantics_hardening",
|
||||
"date": "2026-04-21",
|
||||
"status": "completed",
|
||||
"bucket": {
|
||||
"focus_archetype": "multi_mode_request",
|
||||
"anchor_scene": "sweep-030-scene",
|
||||
"source_driven_default_strategy_slice": true
|
||||
},
|
||||
"changes": {
|
||||
"source_side_default_strategy_recovered": true,
|
||||
"generated_param_resolver_config_updated": true,
|
||||
"runtime_resolver_logic_changed": false,
|
||||
"materialized_skills_changed": false
|
||||
},
|
||||
"verified": {
|
||||
"default_strategy": "lineloss_page_semantics",
|
||||
"tests": [
|
||||
"cargo test --test scene_generator_test analyzer_recovers_lineloss_period_default_strategy_from_source -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_writes_real_sweep_030_org_dictionary_from_embedded_source -- --nocapture",
|
||||
"cargo test --test scene_generator_modes_test -- --nocapture"
|
||||
]
|
||||
},
|
||||
"residuals": [
|
||||
"route only preserves first reusable default strategy slice for lineloss-style month/week pages",
|
||||
"no rematerialization or validation refresh executed in this route",
|
||||
"other period/date semantics remain for later expansion"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"route": "resolver_request_mapping_hardening",
|
||||
"date": "2026-04-20",
|
||||
"status": "completed",
|
||||
"implementedSlice": {
|
||||
"family": "multi_mode_request",
|
||||
"scope": [
|
||||
"explicit org resolver output to request-field mapping",
|
||||
"explicit period payload expansion to request-field mapping",
|
||||
"scene.toml request-mapping metadata emission",
|
||||
"generated browser-script request-body construction via mapping metadata"
|
||||
],
|
||||
"bucketReason": "highest-signal reusable parameterized request bucket"
|
||||
},
|
||||
"changedFiles": [
|
||||
"src/generated_scene/ir.rs",
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/scene_generator_test.rs",
|
||||
"tests/scene_generator_modes_test.rs"
|
||||
],
|
||||
"emittedMetadata": {
|
||||
"irField": "ModeIr.requestFieldMappings",
|
||||
"sceneTomlSection": "[[request_mappings]]",
|
||||
"mappingExamples": [
|
||||
{
|
||||
"sourceField": "org_code",
|
||||
"targetField": "orgno",
|
||||
"mode": "month"
|
||||
},
|
||||
{
|
||||
"sourceField": "period_payload.fdate",
|
||||
"targetField": "fdate",
|
||||
"mode": "month"
|
||||
},
|
||||
{
|
||||
"sourceField": "period_payload.weekSfdate",
|
||||
"targetField": "weekSfdate",
|
||||
"mode": "week"
|
||||
},
|
||||
{
|
||||
"sourceField": "period_payload.weekEfdate",
|
||||
"targetField": "weekEfdate",
|
||||
"mode": "week"
|
||||
}
|
||||
]
|
||||
},
|
||||
"scriptBehaviorDelta": {
|
||||
"before": "multi_mode_request merged all raw args into requestBody",
|
||||
"after": "multi_mode_request resolves template values, normalizes period_payload, applies explicit request mappings, and does not blindly merge resolver args"
|
||||
},
|
||||
"verification": {
|
||||
"testsPassed": [
|
||||
"cargo test --test scene_generator_test generator_derives_reusable_request_field_mappings_for_real_g2_fixture -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_writes_multi_mode_package_with_generation_report -- --nocapture",
|
||||
"cargo test --test scene_generator_modes_test -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_writes_multi_mode_package_from_deterministic_analysis -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_blocks_incomplete_multi_mode_contract -- --nocapture"
|
||||
],
|
||||
"testCount": 9
|
||||
},
|
||||
"residuals": [
|
||||
"single_request_enrichment and other non-G2 request builders still rely on pre-route request construction semantics",
|
||||
"no 102-scene rematerialization or validation refresh was run in this route",
|
||||
"runtime_url/dictionary/alias/default-semantics routes remain pending"
|
||||
],
|
||||
"nextRoute": "runtime_url_classification_hardening"
|
||||
}
|
||||
253
tests/fixtures/generated_scene/generated_scene_rule_hardening_route_clusters_2026-04-20.json
vendored
Normal file
253
tests/fixtures/generated_scene/generated_scene_rule_hardening_route_clusters_2026-04-20.json
vendored
Normal file
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"runDate": "2026-04-20",
|
||||
"sourceLedger": "tests/fixtures/generated_scene/generated_scene_source_first_runtime_semantics_ledger_2026-04-20.json",
|
||||
"routeOrder": [
|
||||
"resolver_request_mapping_hardening",
|
||||
"runtime_url_classification_hardening",
|
||||
"embedded_dictionary_extraction_hardening",
|
||||
"parameter_default_semantics_recovery_hardening",
|
||||
"alias_generation_hardening"
|
||||
],
|
||||
"routeClusters": [
|
||||
{
|
||||
"route": "resolver_request_mapping_hardening",
|
||||
"count": 102,
|
||||
"highRiskCount": 76,
|
||||
"mediumRiskCount": 26,
|
||||
"archetypeCounts": [
|
||||
{
|
||||
"archetype": "paginated_enrichment",
|
||||
"count": 51
|
||||
},
|
||||
{
|
||||
"archetype": "host_bridge_workflow",
|
||||
"count": 26
|
||||
},
|
||||
{
|
||||
"archetype": "multi_mode_request",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"archetype": "local_doc_pipeline",
|
||||
"count": 6
|
||||
},
|
||||
{
|
||||
"archetype": "single_request_enrichment",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"archetype": "multi_endpoint_inventory",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"archetype": "page_state_eval",
|
||||
"count": 2
|
||||
}
|
||||
],
|
||||
"anchorScenes": [
|
||||
"sweep-002-scene",
|
||||
"sweep-003-scene",
|
||||
"sweep-004-scene",
|
||||
"sweep-005-scene",
|
||||
"sweep-006-scene",
|
||||
"sweep-007-scene",
|
||||
"sweep-008-scene",
|
||||
"sweep-009-scene",
|
||||
"sweep-010-scene",
|
||||
"sweep-011-scene"
|
||||
]
|
||||
},
|
||||
{
|
||||
"route": "runtime_url_classification_hardening",
|
||||
"count": 102,
|
||||
"highRiskCount": 76,
|
||||
"mediumRiskCount": 26,
|
||||
"archetypeCounts": [
|
||||
{
|
||||
"archetype": "paginated_enrichment",
|
||||
"count": 51
|
||||
},
|
||||
{
|
||||
"archetype": "host_bridge_workflow",
|
||||
"count": 26
|
||||
},
|
||||
{
|
||||
"archetype": "multi_mode_request",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"archetype": "local_doc_pipeline",
|
||||
"count": 6
|
||||
},
|
||||
{
|
||||
"archetype": "single_request_enrichment",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"archetype": "multi_endpoint_inventory",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"archetype": "page_state_eval",
|
||||
"count": 2
|
||||
}
|
||||
],
|
||||
"anchorScenes": [
|
||||
"sweep-002-scene",
|
||||
"sweep-003-scene",
|
||||
"sweep-004-scene",
|
||||
"sweep-005-scene",
|
||||
"sweep-006-scene",
|
||||
"sweep-007-scene",
|
||||
"sweep-008-scene",
|
||||
"sweep-009-scene",
|
||||
"sweep-010-scene",
|
||||
"sweep-011-scene"
|
||||
]
|
||||
},
|
||||
{
|
||||
"route": "embedded_dictionary_extraction_hardening",
|
||||
"count": 102,
|
||||
"highRiskCount": 76,
|
||||
"mediumRiskCount": 26,
|
||||
"archetypeCounts": [
|
||||
{
|
||||
"archetype": "paginated_enrichment",
|
||||
"count": 51
|
||||
},
|
||||
{
|
||||
"archetype": "host_bridge_workflow",
|
||||
"count": 26
|
||||
},
|
||||
{
|
||||
"archetype": "multi_mode_request",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"archetype": "local_doc_pipeline",
|
||||
"count": 6
|
||||
},
|
||||
{
|
||||
"archetype": "single_request_enrichment",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"archetype": "multi_endpoint_inventory",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"archetype": "page_state_eval",
|
||||
"count": 2
|
||||
}
|
||||
],
|
||||
"anchorScenes": [
|
||||
"sweep-002-scene",
|
||||
"sweep-003-scene",
|
||||
"sweep-004-scene",
|
||||
"sweep-005-scene",
|
||||
"sweep-006-scene",
|
||||
"sweep-007-scene",
|
||||
"sweep-008-scene",
|
||||
"sweep-009-scene",
|
||||
"sweep-010-scene",
|
||||
"sweep-011-scene"
|
||||
]
|
||||
},
|
||||
{
|
||||
"route": "parameter_default_semantics_recovery_hardening",
|
||||
"count": 89,
|
||||
"highRiskCount": 75,
|
||||
"mediumRiskCount": 14,
|
||||
"archetypeCounts": [
|
||||
{
|
||||
"archetype": "paginated_enrichment",
|
||||
"count": 45
|
||||
},
|
||||
{
|
||||
"archetype": "host_bridge_workflow",
|
||||
"count": 22
|
||||
},
|
||||
{
|
||||
"archetype": "multi_mode_request",
|
||||
"count": 9
|
||||
},
|
||||
{
|
||||
"archetype": "local_doc_pipeline",
|
||||
"count": 6
|
||||
},
|
||||
{
|
||||
"archetype": "single_request_enrichment",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"archetype": "page_state_eval",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"archetype": "multi_endpoint_inventory",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"anchorScenes": [
|
||||
"sweep-002-scene",
|
||||
"sweep-003-scene",
|
||||
"sweep-004-scene",
|
||||
"sweep-005-scene",
|
||||
"sweep-006-scene",
|
||||
"sweep-007-scene",
|
||||
"sweep-008-scene",
|
||||
"sweep-009-scene",
|
||||
"sweep-010-scene",
|
||||
"sweep-011-scene"
|
||||
]
|
||||
},
|
||||
{
|
||||
"route": "alias_generation_hardening",
|
||||
"count": 84,
|
||||
"highRiskCount": 73,
|
||||
"mediumRiskCount": 11,
|
||||
"archetypeCounts": [
|
||||
{
|
||||
"archetype": "paginated_enrichment",
|
||||
"count": 40
|
||||
},
|
||||
{
|
||||
"archetype": "host_bridge_workflow",
|
||||
"count": 24
|
||||
},
|
||||
{
|
||||
"archetype": "multi_mode_request",
|
||||
"count": 7
|
||||
},
|
||||
{
|
||||
"archetype": "local_doc_pipeline",
|
||||
"count": 6
|
||||
},
|
||||
{
|
||||
"archetype": "single_request_enrichment",
|
||||
"count": 4
|
||||
},
|
||||
{
|
||||
"archetype": "multi_endpoint_inventory",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"archetype": "page_state_eval",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"anchorScenes": [
|
||||
"sweep-002-scene",
|
||||
"sweep-003-scene",
|
||||
"sweep-004-scene",
|
||||
"sweep-005-scene",
|
||||
"sweep-006-scene",
|
||||
"sweep-007-scene",
|
||||
"sweep-008-scene",
|
||||
"sweep-009-scene",
|
||||
"sweep-010-scene",
|
||||
"sweep-011-scene"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"runDate": "2026-04-21",
|
||||
"plan": "docs/superpowers/plans/2026-04-21-generated-scene-runtime-semantics-post-refresh-residual-closure-plan.md",
|
||||
"scope": "post-refresh-residual-closure-only",
|
||||
"changedFiles": [
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/scene_generator_test.rs"
|
||||
],
|
||||
"residuals": [
|
||||
{
|
||||
"id": "deterministic_suffix_regression",
|
||||
"before": "rematerialized scene.toml emitted scene-name deterministic suffixes",
|
||||
"after": "render_scene_toml emits suffix = U+3002 x3",
|
||||
"validation": "generator_writes_real_sweep_030_org_dictionary_from_embedded_source"
|
||||
},
|
||||
{
|
||||
"id": "sweep_078_toml_corruption",
|
||||
"before": "unescaped newline/control content could be written into TOML string scalars",
|
||||
"after": "escape_toml escapes newline, carriage return, tab, quotes, backslashes, and control characters",
|
||||
"validation": "generator_escapes_request_mapping_fields_for_valid_toml"
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"command": "cargo test --test scene_generator_test generator_writes_real_sweep_030_org_dictionary_from_embedded_source -- --nocapture",
|
||||
"status": "passed"
|
||||
},
|
||||
{
|
||||
"command": "cargo test --test scene_generator_test generator_escapes_request_mapping_fields_for_valid_toml -- --nocapture",
|
||||
"status": "passed"
|
||||
}
|
||||
],
|
||||
"notExecuted": [
|
||||
"rematerialization refresh",
|
||||
"validation refresh",
|
||||
"pseudo-production execution",
|
||||
"official board update"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"summary": {
|
||||
"runDate": "2026-04-21",
|
||||
"plan": "docs/superpowers/plans/2026-04-21-generated-scene-runtime-semantics-rematerialization-execution-plan.md",
|
||||
"rerunReason": "local-doc pipeline residual closure verification",
|
||||
"outputRoot": "D:\\data\\ideaSpace\\rust\\sgClaw\\claw-new\\examples\\scene_skill_102_runtime_semantics_rematerialization_2026-04-21",
|
||||
"totalScenes": 102,
|
||||
"attempted": 102,
|
||||
"skillDirectories": 102,
|
||||
"materialized": 102,
|
||||
"failed": 0,
|
||||
"durationSeconds": 2170.2
|
||||
},
|
||||
"failures": []
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"route": "runtime_url_classification_hardening",
|
||||
"date": "2026-04-21",
|
||||
"status": "completed",
|
||||
"fixed_input_bucket": [
|
||||
"scenes_with_strong_source_evidence_for_multiple_url_roles",
|
||||
"scenes_with_target_url_only_generated_manifest",
|
||||
"high_signal_browser_script_scenes_with_runtime_context_module_route_divergence"
|
||||
],
|
||||
"implemented_slice": {
|
||||
"generator_metadata_fields": [
|
||||
"bootstrap.appEntryUrl",
|
||||
"bootstrap.moduleRouteUrl",
|
||||
"bootstrap.targetUrlKind"
|
||||
],
|
||||
"scene_toml_fields": [
|
||||
"bootstrap.app_entry_url",
|
||||
"bootstrap.module_route_url",
|
||||
"bootstrap.target_url_kind"
|
||||
],
|
||||
"structured_evidence_fields": [
|
||||
"appEntryUrl",
|
||||
"moduleRouteUrl",
|
||||
"targetUrlKind"
|
||||
],
|
||||
"generation_report_fields": [
|
||||
"App entry URL",
|
||||
"Module route URL",
|
||||
"Target URL kind"
|
||||
]
|
||||
},
|
||||
"bucketed_examples": [
|
||||
{
|
||||
"scene": "report_collection fixture",
|
||||
"runtime_context_url": "http://20.76.57.61:18080/gsllys",
|
||||
"module_route_url": "http://20.76.57.61:18080/gsllys/tqLinelossStatis/tqQualifyRateMonitor",
|
||||
"target_url_kind": "runtime_context"
|
||||
},
|
||||
{
|
||||
"scene": "multi_mode package fixture",
|
||||
"runtime_context_url": "http://20.76.57.61:18080/gsllys",
|
||||
"module_route_url": "http://20.76.57.61:18080/gsllys/monthReport",
|
||||
"target_url_kind": "runtime_context"
|
||||
}
|
||||
],
|
||||
"tests": [
|
||||
{
|
||||
"command": "cargo test --test scene_generator_test analyzer_classifies_supported_report_collection_source -- --nocapture",
|
||||
"status": "passed"
|
||||
},
|
||||
{
|
||||
"command": "cargo test --test scene_generator_test generator_writes_multi_mode_package_with_generation_report -- --nocapture",
|
||||
"status": "passed"
|
||||
},
|
||||
{
|
||||
"command": "cargo test --test scene_generator_test generator_writes_multi_mode_package_from_deterministic_analysis -- --nocapture",
|
||||
"status": "passed"
|
||||
},
|
||||
{
|
||||
"command": "cargo test --test scene_generator_modes_test -- --nocapture",
|
||||
"status": "passed"
|
||||
}
|
||||
],
|
||||
"not_done_in_route": [
|
||||
"no_full_102_rematerialization",
|
||||
"no_validation_refresh",
|
||||
"no_runtime_or_callback_host_changes",
|
||||
"no_direct_generated_skill_edits"
|
||||
]
|
||||
}
|
||||
7598
tests/fixtures/generated_scene/generated_scene_source_evidence_cross_scan_2026-04-20.json
vendored
Normal file
7598
tests/fixtures/generated_scene/generated_scene_source_evidence_cross_scan_2026-04-20.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10621
tests/fixtures/generated_scene/generated_scene_source_first_runtime_semantics_ledger_2026-04-20.json
vendored
Normal file
10621
tests/fixtures/generated_scene/generated_scene_source_first_runtime_semantics_ledger_2026-04-20.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
52
tests/fixtures/generated_scene/host_bridge_runtime_followup_2026-04-19.json
vendored
Normal file
52
tests/fixtures/generated_scene/host_bridge_runtime_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-host-bridge-runtime-roadmap-plan.md",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan.md",
|
||||
"parentSequence": "2026-04-19-final-2-residual-child-plan-sequence-plan.md",
|
||||
"fixedInputBucket": [
|
||||
"sweep-085-scene"
|
||||
],
|
||||
"officialBoardUpdated": false,
|
||||
"implementationSlice": {
|
||||
"type": "none",
|
||||
"summary": "The fixed scene closed under the current G7 multi_endpoint_inventory path; no host-bridge runtime implementation was required in this plan."
|
||||
},
|
||||
"summary": {
|
||||
"totalScenes": 1,
|
||||
"autoPass": 1,
|
||||
"failClosedKnown": 0,
|
||||
"sourceUnreadable": 0,
|
||||
"unknown": 0
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-085-scene",
|
||||
"sceneName": "计量资产库存统计",
|
||||
"previousFrameworkStatus": "framework-structured-fail-closed",
|
||||
"previousWorkflowArchetype": "host_bridge_workflow",
|
||||
"rawStatus": "auto-pass",
|
||||
"workflowArchetype": "multi_endpoint_inventory",
|
||||
"readinessLevel": "A",
|
||||
"bootstrap": {
|
||||
"expectedDomain": "yxgateway.gs.sgcc.com.cn",
|
||||
"targetUrl": "http://yxgateway.gs.sgcc.com.cn/emss-asf-assetsubjquery-front",
|
||||
"source": "deterministic"
|
||||
},
|
||||
"missingPieces": [],
|
||||
"risks": [],
|
||||
"passedGates": [
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"g7_inventory_endpoints_detected",
|
||||
"g7_fail_closed"
|
||||
],
|
||||
"skillDir": "examples/host_bridge_runtime_followup_2026-04-19/skills/sweep-085-scene",
|
||||
"reportPath": "examples/host_bridge_runtime_followup_2026-04-19/skills/sweep-085-scene/references/generation-report.json"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"The official board already marks this scene as G7 / boundary-family / executed-pass at the real-sample layer.",
|
||||
"The framework residual was a stale host_bridge_workflow view from earlier residual follow-up assets.",
|
||||
"Official board update is deferred to final-2 board reconciliation refresh."
|
||||
]
|
||||
}
|
||||
29
tests/fixtures/generated_scene/host_bridge_runtime_reconciliation_candidates_2026-04-19.json
vendored
Normal file
29
tests/fixtures/generated_scene/host_bridge_runtime_reconciliation_candidates_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-host-bridge-runtime-roadmap-plan.md",
|
||||
"policySource": "tests/fixtures/generated_scene/promotion_board_reconciliation_policy_2026-04-19.json",
|
||||
"followupSource": "tests/fixtures/generated_scene/host_bridge_runtime_followup_2026-04-19.json",
|
||||
"totalScenes": 1,
|
||||
"summary": {
|
||||
"framework-auto-pass-candidate": 1,
|
||||
"framework-structured-fail-closed": 0,
|
||||
"source-unreadable": 0,
|
||||
"unresolved-followup-status": 0
|
||||
},
|
||||
"officialBoardUpdated": false,
|
||||
"canAutoUpdateBoard": false,
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-085-scene",
|
||||
"sceneName": "计量资产库存统计",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "multi_endpoint_inventory",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; host-bridge runtime roadmap only publishes candidates."
|
||||
}
|
||||
]
|
||||
}
|
||||
54
tests/fixtures/generated_scene/known_family_timeout_diagnostic_2026-04-19.json
vendored
Normal file
54
tests/fixtures/generated_scene/known_family_timeout_diagnostic_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"diagnosticDate": "2026-04-19",
|
||||
"scope": "known-family-timeout-diagnostic",
|
||||
"results": [
|
||||
{
|
||||
"sceneId": "sweep-030-scene",
|
||||
"sceneName": "台区线损大数据-月_周累计线损率统计分析",
|
||||
"elapsedSeconds": 21.69,
|
||||
"timedOut": false,
|
||||
"exitCode": 0,
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "generated",
|
||||
"diagnosticLabel": "known-family-rerun-pass",
|
||||
"stderrTail": ""
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-076-scene",
|
||||
"sceneName": "白银线损周报",
|
||||
"elapsedSeconds": 34.31,
|
||||
"timedOut": false,
|
||||
"exitCode": 0,
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "generated",
|
||||
"diagnosticLabel": "known-family-rerun-pass",
|
||||
"stderrTail": ""
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-078-scene",
|
||||
"sceneName": "线损同期差异报表",
|
||||
"elapsedSeconds": 23.36,
|
||||
"timedOut": false,
|
||||
"exitCode": 0,
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "generated",
|
||||
"diagnosticLabel": "known-family-rerun-pass",
|
||||
"stderrTail": ""
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-079-scene",
|
||||
"sceneName": "线损大数据-窃电分析",
|
||||
"elapsedSeconds": 29.15,
|
||||
"timedOut": false,
|
||||
"exitCode": 0,
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"readinessLevel": "A",
|
||||
"generationStatus": "generated",
|
||||
"diagnosticLabel": "known-family-rerun-pass",
|
||||
"stderrTail": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
156
tests/fixtures/generated_scene/local_doc_official_board_reconciliation_refresh_2026-04-19.json
vendored
Normal file
156
tests/fixtures/generated_scene/local_doc_official_board_reconciliation_refresh_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-local-doc-official-board-reconciliation-refresh-plan.md",
|
||||
"inputCandidates": "tests/fixtures/generated_scene/local_doc_runtime_reconciliation_candidates_2026-04-19.json",
|
||||
"officialBoard": "tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json",
|
||||
"officialBoardUpdated": true,
|
||||
"updatedSceneCount": 5,
|
||||
"summary": {
|
||||
"totalScenes": 102,
|
||||
"frameworkStatusCounts": {
|
||||
"framework-auto-pass": 100,
|
||||
"framework-structured-fail-closed": 2,
|
||||
"framework-valid-host-bridge": 0,
|
||||
"source-unreadable": 0,
|
||||
"missing-source": 0,
|
||||
"unsupported-family": 0,
|
||||
"misclassified-unresolved": 0,
|
||||
"unresolved-followup-status": 0
|
||||
},
|
||||
"frameworkAutoPassCount": 100,
|
||||
"frameworkStructuredFailClosedCount": 2,
|
||||
"frameworkUnresolvedCount": 0
|
||||
},
|
||||
"updatedScenes": [
|
||||
{
|
||||
"sceneId": "sweep-033-scene",
|
||||
"officialBoardSceneName": "售电收入日统计",
|
||||
"candidateSceneName": "供电可靠率指标统计表",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkCandidateStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-local-doc-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-034-scene",
|
||||
"officialBoardSceneName": "售电收入日统计排程预测",
|
||||
"candidateSceneName": "供电可靠性数据质量自查报告月报",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkCandidateStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-local-doc-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-042-scene",
|
||||
"officialBoardSceneName": "四类主动工单统计",
|
||||
"candidateSceneName": "国网金昌供电公司营商环境周例会报告",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkCandidateStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-local-doc-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-051-scene",
|
||||
"officialBoardSceneName": "安全管控月度工作通报",
|
||||
"candidateSceneName": "嘉峪关可靠性分析报告",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkCandidateStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-local-doc-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-074-scene",
|
||||
"officialBoardSceneName": "白银公司指挥中心供电服务业务日报",
|
||||
"candidateSceneName": "同兴智能安全督查日报",
|
||||
"before": {
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkCandidateStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-local-doc-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-local-doc-runtime-roadmap-input"
|
||||
},
|
||||
"after": {
|
||||
"currentFrameworkStatus": "framework-auto-pass",
|
||||
"currentFrameworkCandidateStatus": "framework-auto-pass-candidate",
|
||||
"currentFrameworkArchetype": "local_doc_pipeline",
|
||||
"currentFrameworkReadiness": "A",
|
||||
"currentFrameworkDecisionOverlay": null,
|
||||
"currentFrameworkNextAction": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"remainingStructuredFailClosed": [
|
||||
{
|
||||
"sceneId": "sweep-085-scene",
|
||||
"sceneName": "计量资产库存统计",
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "host_bridge_workflow",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "hold-for-host-bridge-runtime-roadmap",
|
||||
"currentFrameworkNextAction": "future-host-bridge-runtime-roadmap-input"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-091-scene",
|
||||
"sceneName": "配网异常设备监控统计",
|
||||
"currentFrameworkStatus": "framework-structured-fail-closed",
|
||||
"currentFrameworkArchetype": "page_state_eval",
|
||||
"currentFrameworkReadiness": "C",
|
||||
"currentFrameworkDecisionOverlay": "isolate-bootstrap-target-residual",
|
||||
"currentFrameworkNextAction": "future-bootstrap-target-normalization-roadmap-input"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"Only framework-layer fields were updated for the five fixed local-doc scenes.",
|
||||
"Workbook snapshot fields, official scene names, currentGroup/currentStatus, and real-sample fields were preserved.",
|
||||
"Official-board names for these sweep ids still differ from local-doc candidate source names; this refresh intentionally does not rename board scenes."
|
||||
]
|
||||
}
|
||||
77
tests/fixtures/generated_scene/local_doc_runtime_reconciliation_candidates_2026-04-19.json
vendored
Normal file
77
tests/fixtures/generated_scene/local_doc_runtime_reconciliation_candidates_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-local-doc-runtime-roadmap-plan.md",
|
||||
"policySource": "tests/fixtures/generated_scene/promotion_board_reconciliation_policy_2026-04-19.json",
|
||||
"followupSource": "tests/fixtures/generated_scene/local_doc_runtime_roadmap_followup_2026-04-19.json",
|
||||
"totalScenes": 5,
|
||||
"summary": {
|
||||
"framework-auto-pass-candidate": 5,
|
||||
"framework-structured-fail-closed": 0,
|
||||
"source-unreadable": 0,
|
||||
"unresolved-followup-status": 0
|
||||
},
|
||||
"officialBoardUpdated": false,
|
||||
"canAutoUpdateBoard": false,
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-033-scene",
|
||||
"sceneName": "供电可靠率指标统计表",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; local-doc roadmap only publishes candidates."
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-034-scene",
|
||||
"sceneName": "供电可靠性数据质量自查报告月报",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; local-doc roadmap only publishes candidates."
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-042-scene",
|
||||
"sceneName": "国网金昌供电公司营商环境周例会报告",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; local-doc roadmap only publishes candidates."
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-051-scene",
|
||||
"sceneName": "嘉峪关可靠性分析报告",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; local-doc roadmap only publishes candidates."
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-074-scene",
|
||||
"sceneName": "同兴智能安全督查日报",
|
||||
"rawStatus": "auto-pass",
|
||||
"reconciliationCandidateStatus": "framework-auto-pass-candidate",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"decisionOverlay": null,
|
||||
"nextAction": null,
|
||||
"canAutoUpdateBoard": false,
|
||||
"policyReason": "Route 6 policy requires a dedicated board reconciliation plan; local-doc roadmap only publishes candidates."
|
||||
}
|
||||
]
|
||||
}
|
||||
161
tests/fixtures/generated_scene/local_doc_runtime_roadmap_followup_2026-04-19.json
vendored
Normal file
161
tests/fixtures/generated_scene/local_doc_runtime_roadmap_followup_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,161 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"plan": "2026-04-19-local-doc-runtime-roadmap-plan.md",
|
||||
"parentDecision": "2026-04-19-residual-runtime-roadmap-prioritization-plan.md",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan.md",
|
||||
"fixedInputBucket": [
|
||||
"sweep-033-scene",
|
||||
"sweep-034-scene",
|
||||
"sweep-042-scene",
|
||||
"sweep-051-scene",
|
||||
"sweep-074-scene"
|
||||
],
|
||||
"officialBoardUpdated": false,
|
||||
"implementationSlice": {
|
||||
"type": "bounded-local-doc-contract-widening",
|
||||
"changedFiles": [
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/scene_generator_test.rs"
|
||||
],
|
||||
"summary": "Accept local_doc_pipeline selectData/configServices selectData steps as the query leg of the minimal G8 contract while still requiring doc_export and localhost runtime evidence."
|
||||
},
|
||||
"summary": {
|
||||
"totalScenes": 5,
|
||||
"autoPass": 5,
|
||||
"failClosedKnown": 0,
|
||||
"sourceUnreadable": 0,
|
||||
"unknown": 0
|
||||
},
|
||||
"scenes": [
|
||||
{
|
||||
"sceneId": "sweep-033-scene",
|
||||
"sceneName": "供电可靠率指标统计表",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"missingPieces": [],
|
||||
"riskCount": 0,
|
||||
"gates": [
|
||||
{
|
||||
"name": "workflow_contract_complete",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_local_doc_pipeline_detected",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_fail_closed",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"rawStatus": "auto-pass",
|
||||
"skillDir": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-033-scene",
|
||||
"reportPath": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-033-scene/references/generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-034-scene",
|
||||
"sceneName": "供电可靠性数据质量自查报告月报",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"missingPieces": [],
|
||||
"riskCount": 0,
|
||||
"gates": [
|
||||
{
|
||||
"name": "workflow_contract_complete",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_local_doc_pipeline_detected",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_fail_closed",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"rawStatus": "auto-pass",
|
||||
"skillDir": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-034-scene",
|
||||
"reportPath": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-034-scene/references/generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-042-scene",
|
||||
"sceneName": "国网金昌供电公司营商环境周例会报告",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"missingPieces": [],
|
||||
"riskCount": 0,
|
||||
"gates": [
|
||||
{
|
||||
"name": "workflow_contract_complete",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_local_doc_pipeline_detected",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_fail_closed",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"rawStatus": "auto-pass",
|
||||
"skillDir": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-042-scene",
|
||||
"reportPath": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-042-scene/references/generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-051-scene",
|
||||
"sceneName": "嘉峪关可靠性分析报告",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"missingPieces": [],
|
||||
"riskCount": 0,
|
||||
"gates": [
|
||||
{
|
||||
"name": "workflow_contract_complete",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_local_doc_pipeline_detected",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_fail_closed",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"rawStatus": "auto-pass",
|
||||
"skillDir": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-051-scene",
|
||||
"reportPath": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-051-scene/references/generation-report.json"
|
||||
},
|
||||
{
|
||||
"sceneId": "sweep-074-scene",
|
||||
"sceneName": "同兴智能安全督查日报",
|
||||
"workflowArchetype": "local_doc_pipeline",
|
||||
"readinessLevel": "A",
|
||||
"missingPieces": [],
|
||||
"riskCount": 0,
|
||||
"gates": [
|
||||
{
|
||||
"name": "workflow_contract_complete",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_local_doc_pipeline_detected",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "g8_fail_closed",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"rawStatus": "auto-pass",
|
||||
"skillDir": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-074-scene",
|
||||
"reportPath": "examples/local_doc_runtime_roadmap_followup_2026-04-19/skills/sweep-074-scene/references/generation-report.json"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This asset records only the fixed five local-doc roadmap scenes.",
|
||||
"The official execution board is intentionally not updated in this plan.",
|
||||
"Official-board scene names for the same sweep ids differ from the plan-target source names; this plan keeps fixed scene ids and does not correct board naming."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"route": "monitoring-action-detect-preview-generator-implementation",
|
||||
"date": "2026-04-21",
|
||||
"status": "implemented-preview-only",
|
||||
"samplePackage": "examples/monitoring_action_detect_preview_anchor_2026-04-21/skills/command-center-fee-control-monitor",
|
||||
"family": "monitoring_action_workflow",
|
||||
"mode": "detect_preview",
|
||||
"sideEffectsExecutable": false,
|
||||
"blockedSignalsPresentAsData": [
|
||||
"repetCtrlSend",
|
||||
"mac.sendMessages",
|
||||
"mac.callOutLogin",
|
||||
"mac.audioPlay",
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue"
|
||||
],
|
||||
"scriptSafetyScan": {
|
||||
"containsExecutableRepetCtrlSend": false,
|
||||
"containsExecutableSendMessages": false,
|
||||
"containsExecutableCallOutLogin": false,
|
||||
"containsExecutableAudioPlay": false,
|
||||
"containsExecutableExeTQueue": false
|
||||
},
|
||||
"tests": [
|
||||
"cargo test --test scene_generator_test generator_emits_monitoring_action_detect_preview_anchor_package -- --nocapture",
|
||||
"cargo test --test scene_generator_test generator_emits_monitoring_template -- --nocapture",
|
||||
"cargo test --test scene_generator_modes_test -- --nocapture",
|
||||
"node examples/monitoring_action_detect_preview_anchor_2026-04-21/skills/command-center-fee-control-monitor/scripts/detect_preview.test.js"
|
||||
],
|
||||
"nextRecommendedRoute": "monitoring-action-mock-validation-plan"
|
||||
}
|
||||
386
tests/fixtures/generated_scene/monitoring_action_ir_contract_2026-04-21.json
vendored
Normal file
386
tests/fixtures/generated_scene/monitoring_action_ir_contract_2026-04-21.json
vendored
Normal file
@@ -0,0 +1,386 @@
|
||||
{
|
||||
"family": "monitoring_action_workflow",
|
||||
"date": "2026-04-21",
|
||||
"status": "contract-defined",
|
||||
"workflowId": "command_center_fee_control_monitoring_action",
|
||||
"displayName": "???????????????",
|
||||
"anchorEvidence": "tests/fixtures/generated_scene/monitoring_action_source_evidence_extraction_2026-04-21.json",
|
||||
"defaultMode": "detect_preview",
|
||||
"workflowStages": [
|
||||
"detect",
|
||||
"decide",
|
||||
"preview",
|
||||
"act",
|
||||
"notify",
|
||||
"log",
|
||||
"queue_next"
|
||||
],
|
||||
"mvpAllowedStages": [
|
||||
"detect",
|
||||
"decide",
|
||||
"preview"
|
||||
],
|
||||
"blockedByDefaultStages": [
|
||||
"act",
|
||||
"notify",
|
||||
"log.write",
|
||||
"queue_next"
|
||||
],
|
||||
"runtimeContext": {
|
||||
"runtime_context_url": "http://yx.gs.sgcc.com.cn/",
|
||||
"expected_domain": "yx.gs.sgcc.com.cn",
|
||||
"gateway_domain": "yxgateway.gs.sgcc.com.cn",
|
||||
"localhost_service_base": "http://localhost:13313",
|
||||
"browserAttachedRequired": true,
|
||||
"hostBridgeRequired": true
|
||||
},
|
||||
"modes": [
|
||||
{
|
||||
"name": "detect_preview",
|
||||
"enabledInMvp": true,
|
||||
"allowedStages": [
|
||||
"detect",
|
||||
"decide",
|
||||
"preview"
|
||||
],
|
||||
"forbiddenStages": [
|
||||
"act",
|
||||
"notify",
|
||||
"log.write",
|
||||
"queue_next"
|
||||
],
|
||||
"description": "Read source data and local state, compute pending/notify candidates, and output preview without executing side effects."
|
||||
},
|
||||
{
|
||||
"name": "action_plan",
|
||||
"enabledInMvp": false,
|
||||
"requiresFutureGate": "preview_approval",
|
||||
"description": "Prepare but do not execute dispatch/notify actions."
|
||||
},
|
||||
{
|
||||
"name": "execute_dispatch_confirmed",
|
||||
"enabledInMvp": false,
|
||||
"requiresFutureGate": "explicit_confirm_dispatch",
|
||||
"description": "Future mode only. Dispatch fee-control exception orders after explicit confirmation and max item limit."
|
||||
},
|
||||
{
|
||||
"name": "execute_notify_confirmed",
|
||||
"enabledInMvp": false,
|
||||
"requiresFutureGate": "explicit_confirm_notify",
|
||||
"description": "Future mode only. Send SMS/call/audio notifications after explicit confirmation and max item limit."
|
||||
}
|
||||
],
|
||||
"localStorageReads": [
|
||||
{
|
||||
"key": "loginUserInfo",
|
||||
"usage": "current user org and login context"
|
||||
},
|
||||
{
|
||||
"key": "markToken",
|
||||
"usage": "business gateway Authorization token"
|
||||
},
|
||||
{
|
||||
"key": "yxClassList",
|
||||
"usage": "cached organization tree/list"
|
||||
},
|
||||
{
|
||||
"key": "zhzxFkycSendTime",
|
||||
"usage": "last fee-control send/monitor time"
|
||||
}
|
||||
],
|
||||
"localServiceDependencies": [
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/getMonitorLog",
|
||||
"classification": "read_state"
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setMonitorData",
|
||||
"classification": "write_monitor_state",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setMonitorLog",
|
||||
"classification": "write_monitor_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setDisposeLog",
|
||||
"classification": "write_dispose_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setAudioPlayLog",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setSendMessageLog",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/marketingServices/getOtherIphones",
|
||||
"classification": "configuration_read"
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/marketingServices/messageLogInfo",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/marketingServices/iphonesLogInfo",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
}
|
||||
],
|
||||
"businessApiDependencies": [
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-cmc-authdata-subdomain/member/mgtOrg/getAllSubMgtOrgTreeByOrgCode",
|
||||
"classification": "read_org_tree"
|
||||
},
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-chargacctgf-paysrv-front/member/acctabnor/queryAbnorList",
|
||||
"classification": "read_exception_orders"
|
||||
},
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-custmgtf-custview-front//member/electrivity/queryHistoryEnergyCharge",
|
||||
"classification": "read_charge_history"
|
||||
},
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-chargacctgf-paysrv-front/member/acctabnor/repetCtrlSend",
|
||||
"classification": "dispatch_exception_order",
|
||||
"sideEffect": true,
|
||||
"blockedByDefault": true
|
||||
}
|
||||
],
|
||||
"stateDependencies": [
|
||||
{
|
||||
"name": "previous_monitor_log",
|
||||
"source": "MonitorServices/getMonitorLog"
|
||||
},
|
||||
{
|
||||
"name": "current_user_org",
|
||||
"source": "localStorage.loginUserInfo"
|
||||
},
|
||||
{
|
||||
"name": "gateway_token",
|
||||
"source": "localStorage.markToken"
|
||||
},
|
||||
{
|
||||
"name": "cached_org_tree",
|
||||
"source": "localStorage.yxClassList"
|
||||
},
|
||||
{
|
||||
"name": "last_fee_control_send_time",
|
||||
"source": "localStorage.zhzxFkycSendTime"
|
||||
},
|
||||
{
|
||||
"name": "phone_and_holiday_configuration",
|
||||
"source": "marketingServices/getOtherIphones"
|
||||
}
|
||||
],
|
||||
"queueDependencies": [
|
||||
{
|
||||
"name": "pendingList",
|
||||
"source": "queueObj.pendingList / obj.pendingList"
|
||||
},
|
||||
{
|
||||
"name": "autoTask",
|
||||
"source": "_this.autoTask",
|
||||
"blockedByDefault": true
|
||||
},
|
||||
{
|
||||
"name": "processQueue",
|
||||
"source": "_this.processQueue",
|
||||
"blockedByDefault": true
|
||||
},
|
||||
{
|
||||
"name": "exeTQueue",
|
||||
"source": "mac.exeTQueue",
|
||||
"blockedByDefault": true
|
||||
}
|
||||
],
|
||||
"dependencyClassification": {
|
||||
"detectPreviewAllowed": [
|
||||
"read_state",
|
||||
"configuration_read",
|
||||
"read_org_tree",
|
||||
"read_exception_orders",
|
||||
"read_charge_history"
|
||||
],
|
||||
"blockedByDefault": [
|
||||
"write_monitor_state",
|
||||
"write_monitor_log",
|
||||
"write_dispose_log",
|
||||
"write_notification_log",
|
||||
"dispatch_exception_order",
|
||||
"business_dispatch",
|
||||
"host_notify",
|
||||
"queue_continue"
|
||||
]
|
||||
},
|
||||
"decisionRules": {
|
||||
"source": "anchor scripts",
|
||||
"recoveredAsOpaqueRules": true,
|
||||
"knownInputs": [
|
||||
"previous_monitor_log",
|
||||
"current exception orders",
|
||||
"charge history",
|
||||
"phone/holiday configuration",
|
||||
"last fee-control send time"
|
||||
],
|
||||
"knownOutputs": [
|
||||
"pendingList",
|
||||
"notifyCandidates",
|
||||
"noActionList",
|
||||
"summary"
|
||||
]
|
||||
},
|
||||
"previewSchema": {
|
||||
"summary": "object",
|
||||
"pendingList": "array",
|
||||
"notifyCandidates": "array",
|
||||
"actionPlan": "array",
|
||||
"blockedSideEffects": "array",
|
||||
"evidence": "object",
|
||||
"warnings": "array"
|
||||
},
|
||||
"actionPlanSchema": {
|
||||
"itemId": "string",
|
||||
"customerNo": "string?",
|
||||
"orgNo": "string?",
|
||||
"actionType": "dispatch|sms|call|audio|log|queue_next",
|
||||
"targetEndpointOrHostCall": "string",
|
||||
"requiresConfirmation": "boolean",
|
||||
"blockedByDefault": "boolean",
|
||||
"reason": "string"
|
||||
},
|
||||
"sideEffectPolicy": {
|
||||
"dryRunDefault": true,
|
||||
"requiresExplicitConfirmation": true,
|
||||
"previewBeforeAction": true,
|
||||
"maxItemsRequiredForActionModes": true,
|
||||
"auditRecordRequired": true,
|
||||
"blockedCallSignatures": [
|
||||
"repetCtrlSend",
|
||||
"mac.sendMessages",
|
||||
"mac.callOutLogin",
|
||||
"mac.audioPlay",
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue",
|
||||
"setDisposeLog",
|
||||
"setMonitorData",
|
||||
"setMonitorLog",
|
||||
"setSendMessageLog",
|
||||
"setAudioPlayLog"
|
||||
],
|
||||
"blockedActions": [
|
||||
{
|
||||
"action": "dispatch_fee_control_exception_order",
|
||||
"signals": [
|
||||
"repetCtrlSend"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_dispatch"
|
||||
},
|
||||
{
|
||||
"action": "send_sms",
|
||||
"signals": [
|
||||
"mac.sendMessages"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_notify"
|
||||
},
|
||||
{
|
||||
"action": "call_phone",
|
||||
"signals": [
|
||||
"mac.callOutLogin"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_notify"
|
||||
},
|
||||
{
|
||||
"action": "play_audio",
|
||||
"signals": [
|
||||
"mac.audioPlay or audio log path"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_notify"
|
||||
},
|
||||
{
|
||||
"action": "write_monitor_state",
|
||||
"signals": [
|
||||
"setMonitorData",
|
||||
"setMonitorLog"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "dry_run_or_explicit_monitor_write"
|
||||
},
|
||||
{
|
||||
"action": "write_dispose_log",
|
||||
"signals": [
|
||||
"setDisposeLog"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_dispatch"
|
||||
},
|
||||
{
|
||||
"action": "continue_queue",
|
||||
"signals": [
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_queue_next"
|
||||
}
|
||||
]
|
||||
},
|
||||
"gateRequirements": [
|
||||
{
|
||||
"gate": "explicit_confirm_dispatch",
|
||||
"requiredFor": [
|
||||
"repetCtrlSend",
|
||||
"setDisposeLog"
|
||||
],
|
||||
"mvpEnabled": false
|
||||
},
|
||||
{
|
||||
"gate": "explicit_confirm_notify",
|
||||
"requiredFor": [
|
||||
"mac.sendMessages",
|
||||
"mac.callOutLogin",
|
||||
"mac.audioPlay",
|
||||
"notification logs"
|
||||
],
|
||||
"mvpEnabled": false
|
||||
},
|
||||
{
|
||||
"gate": "explicit_confirm_queue_next",
|
||||
"requiredFor": [
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue"
|
||||
],
|
||||
"mvpEnabled": false
|
||||
},
|
||||
{
|
||||
"gate": "dry_run_or_explicit_monitor_write",
|
||||
"requiredFor": [
|
||||
"setMonitorData",
|
||||
"setMonitorLog"
|
||||
],
|
||||
"mvpEnabled": false
|
||||
}
|
||||
],
|
||||
"auditRequirements": {
|
||||
"recordResolvedMode": true,
|
||||
"recordInputFilters": true,
|
||||
"recordReadDependencies": true,
|
||||
"recordBlockedSideEffects": true,
|
||||
"recordPreviewBeforeAnyAction": true,
|
||||
"recordConfirmationForFutureActionModes": true
|
||||
},
|
||||
"nextRecommendedRoute": "monitoring-action-detect-preview-generator-design"
|
||||
}
|
||||
62
tests/fixtures/generated_scene/monitoring_action_mock_validation_fixtures_2026-04-22.json
vendored
Normal file
62
tests/fixtures/generated_scene/monitoring_action_mock_validation_fixtures_2026-04-22.json
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"queryAbnorList": [
|
||||
{
|
||||
"id": "MOCK-ORDER-001",
|
||||
"consNo": "MOCK-CONS-001",
|
||||
"custNo": "MOCK-CUST-001",
|
||||
"orgNo": "MOCK-ORG-001",
|
||||
"abnorType": "fee_control_exception",
|
||||
"createdAt": "2026-04-22T09:00:00+08:00"
|
||||
},
|
||||
{
|
||||
"id": "MOCK-ORDER-002",
|
||||
"consNo": "MOCK-CONS-002",
|
||||
"custNo": "MOCK-CUST-002",
|
||||
"orgNo": "MOCK-ORG-001",
|
||||
"abnorType": "fee_control_exception",
|
||||
"createdAt": "2026-04-22T09:10:00+08:00"
|
||||
}
|
||||
],
|
||||
"queryHistoryEnergyCharge": [
|
||||
{
|
||||
"consNo": "MOCK-CONS-001",
|
||||
"arrears": "120.00",
|
||||
"chargeStatus": "pending"
|
||||
},
|
||||
{
|
||||
"consNo": "MOCK-CONS-002",
|
||||
"arrears": "0.00",
|
||||
"chargeStatus": "cleared"
|
||||
}
|
||||
],
|
||||
"getMonitorLog": {
|
||||
"lastRunAt": "2026-04-22T08:00:00+08:00",
|
||||
"processedOrderIds": [
|
||||
"MOCK-ORDER-000"
|
||||
]
|
||||
},
|
||||
"getOtherIphones": {
|
||||
"phones": [
|
||||
"13800000000",
|
||||
"13900000000"
|
||||
],
|
||||
"holidayMode": false
|
||||
},
|
||||
"pendingList": [
|
||||
{
|
||||
"id": "MOCK-ORDER-001",
|
||||
"consNo": "MOCK-CONS-001",
|
||||
"custNo": "MOCK-CUST-001",
|
||||
"orgNo": "MOCK-ORG-001",
|
||||
"reason": "mock fee-control exception"
|
||||
}
|
||||
],
|
||||
"notifyCandidates": [
|
||||
{
|
||||
"id": "MOCK-ORDER-001",
|
||||
"channel": "sms",
|
||||
"phone": "13800000000",
|
||||
"reason": "mock notification candidate"
|
||||
}
|
||||
]
|
||||
}
|
||||
34
tests/fixtures/generated_scene/monitoring_action_mock_validation_results_2026-04-22.json
vendored
Normal file
34
tests/fixtures/generated_scene/monitoring_action_mock_validation_results_2026-04-22.json
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"status": "mock-validation-pass",
|
||||
"family": "monitoring_action_workflow",
|
||||
"mode": "detect_preview",
|
||||
"artifactStatus": "preview-ok",
|
||||
"pendingCount": 1,
|
||||
"notifyCount": 1,
|
||||
"actionPlanCount": 1,
|
||||
"blockedCallSignatures": [
|
||||
"repetCtrlSend",
|
||||
"mac.sendMessages",
|
||||
"mac.callOutLogin",
|
||||
"mac.audioPlay",
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue",
|
||||
"setDisposeLog",
|
||||
"setMonitorData",
|
||||
"setMonitorLog",
|
||||
"setSendMessageLog",
|
||||
"setAudioPlayLog"
|
||||
],
|
||||
"sideEffectCounters": {
|
||||
"repetCtrlSend": 0,
|
||||
"sendMessages": 0,
|
||||
"callOutLogin": 0,
|
||||
"audioPlay": 0,
|
||||
"exeTQueue": 0,
|
||||
"productionLogWrite": 0
|
||||
},
|
||||
"nonPreviewModeBlocked": true,
|
||||
"fixtures": "tests/fixtures/generated_scene/monitoring_action_mock_validation_fixtures_2026-04-22.json",
|
||||
"skillRoot": "examples/monitoring_action_detect_preview_anchor_2026-04-21/skills/command-center-fee-control-monitor"
|
||||
}
|
||||
335
tests/fixtures/generated_scene/monitoring_action_source_evidence_extraction_2026-04-21.json
vendored
Normal file
335
tests/fixtures/generated_scene/monitoring_action_source_evidence_extraction_2026-04-21.json
vendored
Normal file
@@ -0,0 +1,335 @@
|
||||
{
|
||||
"family": "monitoring_action_workflow",
|
||||
"date": "2026-04-21",
|
||||
"status": "evidence-extracted",
|
||||
"anchorSources": [
|
||||
"D:/desk/?????/??????????.txt",
|
||||
"D:/desk/?????/?????????????.txt"
|
||||
],
|
||||
"scripts": [
|
||||
{
|
||||
"role": "detection_business_script",
|
||||
"path": "D:/desk/?????/??????????.txt",
|
||||
"observedStages": [
|
||||
"detect",
|
||||
"decide",
|
||||
"preview",
|
||||
"log",
|
||||
"notify",
|
||||
"queue_next"
|
||||
],
|
||||
"description": "Collects fee-control exception orders, enriches charge history, compares monitor state, prepares pending/notification candidates, writes monitor logs, and may enqueue follow-up actions."
|
||||
},
|
||||
{
|
||||
"role": "automation_action_script",
|
||||
"path": "D:/desk/?????/?????????????.txt",
|
||||
"observedStages": [
|
||||
"act",
|
||||
"log",
|
||||
"notify",
|
||||
"queue_next"
|
||||
],
|
||||
"description": "Consumes pendingList, dispatches exception orders through repetCtrlSend, writes dispose logs, and continues an external queue."
|
||||
}
|
||||
],
|
||||
"runtimeContext": {
|
||||
"runtime_context_url": "http://yx.gs.sgcc.com.cn/",
|
||||
"expected_domain": "yx.gs.sgcc.com.cn",
|
||||
"gateway_domain": "yxgateway.gs.sgcc.com.cn",
|
||||
"localhost_service_base": "http://localhost:13313",
|
||||
"browserAttachedRequired": true,
|
||||
"hostBridgeRequired": true
|
||||
},
|
||||
"stageEvidence": [
|
||||
{
|
||||
"stage": "detect",
|
||||
"evidence": [
|
||||
"queryAbnorList",
|
||||
"queryHistoryEnergyCharge",
|
||||
"getAllSubMgtOrgTreeByOrgCode",
|
||||
"MonitorServices/getMonitorLog",
|
||||
"marketingServices/getOtherIphones"
|
||||
]
|
||||
},
|
||||
{
|
||||
"stage": "decide",
|
||||
"evidence": [
|
||||
"setData pending list computation",
|
||||
"previous monitor state comparison",
|
||||
"holiday/time/phone configuration checks"
|
||||
]
|
||||
},
|
||||
{
|
||||
"stage": "preview",
|
||||
"evidence": [
|
||||
"queueObj.pendingList",
|
||||
"computed call/message/audio candidate lists"
|
||||
],
|
||||
"mvpAllowed": true
|
||||
},
|
||||
{
|
||||
"stage": "act",
|
||||
"evidence": [
|
||||
"repetCtrlSend"
|
||||
],
|
||||
"blockedByDefault": true
|
||||
},
|
||||
{
|
||||
"stage": "notify",
|
||||
"evidence": [
|
||||
"mac.sendMessages",
|
||||
"mac.callOutLogin",
|
||||
"setSendMessageLog",
|
||||
"setAudioPlayLog"
|
||||
],
|
||||
"blockedByDefault": true
|
||||
},
|
||||
{
|
||||
"stage": "log",
|
||||
"evidence": [
|
||||
"setMonitorData",
|
||||
"setMonitorLog",
|
||||
"setDisposeLog",
|
||||
"messageLogInfo",
|
||||
"iphonesLogInfo"
|
||||
]
|
||||
},
|
||||
{
|
||||
"stage": "queue_next",
|
||||
"evidence": [
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue"
|
||||
],
|
||||
"blockedByDefault": true
|
||||
}
|
||||
],
|
||||
"localStorageReads": [
|
||||
{
|
||||
"key": "loginUserInfo",
|
||||
"usage": "current user org and login context"
|
||||
},
|
||||
{
|
||||
"key": "markToken",
|
||||
"usage": "business gateway Authorization token"
|
||||
},
|
||||
{
|
||||
"key": "yxClassList",
|
||||
"usage": "cached organization tree/list"
|
||||
},
|
||||
{
|
||||
"key": "zhzxFkycSendTime",
|
||||
"usage": "last fee-control send/monitor time"
|
||||
}
|
||||
],
|
||||
"localServiceDependencies": [
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/getMonitorLog",
|
||||
"classification": "read_state"
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setMonitorData",
|
||||
"classification": "write_monitor_state",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setMonitorLog",
|
||||
"classification": "write_monitor_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setDisposeLog",
|
||||
"classification": "write_dispose_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setAudioPlayLog",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/MonitorServices/setSendMessageLog",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/marketingServices/getOtherIphones",
|
||||
"classification": "configuration_read"
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/marketingServices/messageLogInfo",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
},
|
||||
{
|
||||
"url": "http://localhost:13313/marketingServices/iphonesLogInfo",
|
||||
"classification": "write_notification_log",
|
||||
"sideEffect": true
|
||||
}
|
||||
],
|
||||
"businessApiDependencies": [
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-cmc-authdata-subdomain/member/mgtOrg/getAllSubMgtOrgTreeByOrgCode",
|
||||
"classification": "read_org_tree"
|
||||
},
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-chargacctgf-paysrv-front/member/acctabnor/queryAbnorList",
|
||||
"classification": "read_exception_orders"
|
||||
},
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-custmgtf-custview-front//member/electrivity/queryHistoryEnergyCharge",
|
||||
"classification": "read_charge_history"
|
||||
},
|
||||
{
|
||||
"url": "http://yxgateway.gs.sgcc.com.cn/emss-chargacctgf-paysrv-front/member/acctabnor/repetCtrlSend",
|
||||
"classification": "dispatch_exception_order",
|
||||
"sideEffect": true,
|
||||
"blockedByDefault": true
|
||||
}
|
||||
],
|
||||
"sideEffectEvidence": [
|
||||
{
|
||||
"action": "dispatch_fee_control_exception_order",
|
||||
"signals": [
|
||||
"repetCtrlSend"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_dispatch"
|
||||
},
|
||||
{
|
||||
"action": "send_sms",
|
||||
"signals": [
|
||||
"mac.sendMessages"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_notify"
|
||||
},
|
||||
{
|
||||
"action": "call_phone",
|
||||
"signals": [
|
||||
"mac.callOutLogin"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_notify"
|
||||
},
|
||||
{
|
||||
"action": "play_audio",
|
||||
"signals": [
|
||||
"mac.audioPlay or audio log path"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_notify"
|
||||
},
|
||||
{
|
||||
"action": "write_monitor_state",
|
||||
"signals": [
|
||||
"setMonitorData",
|
||||
"setMonitorLog"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "dry_run_or_explicit_monitor_write"
|
||||
},
|
||||
{
|
||||
"action": "write_dispose_log",
|
||||
"signals": [
|
||||
"setDisposeLog"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_dispatch"
|
||||
},
|
||||
{
|
||||
"action": "continue_queue",
|
||||
"signals": [
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue"
|
||||
],
|
||||
"blockedByDefault": true,
|
||||
"requiredFutureGate": "explicit_confirm_queue_next"
|
||||
}
|
||||
],
|
||||
"stateDependencies": [
|
||||
{
|
||||
"name": "previous_monitor_log",
|
||||
"source": "MonitorServices/getMonitorLog"
|
||||
},
|
||||
{
|
||||
"name": "current_user_org",
|
||||
"source": "localStorage.loginUserInfo"
|
||||
},
|
||||
{
|
||||
"name": "gateway_token",
|
||||
"source": "localStorage.markToken"
|
||||
},
|
||||
{
|
||||
"name": "cached_org_tree",
|
||||
"source": "localStorage.yxClassList"
|
||||
},
|
||||
{
|
||||
"name": "last_fee_control_send_time",
|
||||
"source": "localStorage.zhzxFkycSendTime"
|
||||
},
|
||||
{
|
||||
"name": "phone_and_holiday_configuration",
|
||||
"source": "marketingServices/getOtherIphones"
|
||||
}
|
||||
],
|
||||
"queueDependencies": [
|
||||
{
|
||||
"name": "pendingList",
|
||||
"source": "queueObj.pendingList / obj.pendingList"
|
||||
},
|
||||
{
|
||||
"name": "autoTask",
|
||||
"source": "_this.autoTask",
|
||||
"blockedByDefault": true
|
||||
},
|
||||
{
|
||||
"name": "processQueue",
|
||||
"source": "_this.processQueue",
|
||||
"blockedByDefault": true
|
||||
},
|
||||
{
|
||||
"name": "exeTQueue",
|
||||
"source": "mac.exeTQueue",
|
||||
"blockedByDefault": true
|
||||
}
|
||||
],
|
||||
"detectPreviewCandidate": {
|
||||
"defaultMode": "detect_preview",
|
||||
"allowedOutputs": [
|
||||
"pendingList",
|
||||
"summary",
|
||||
"actionPlan",
|
||||
"blockedSideEffects"
|
||||
],
|
||||
"allowedReads": [
|
||||
"localStorage reads",
|
||||
"business query APIs",
|
||||
"localhost read/config APIs"
|
||||
],
|
||||
"blockedWrites": [
|
||||
"dispatch",
|
||||
"SMS",
|
||||
"phone call",
|
||||
"audio play",
|
||||
"monitor/log writes unless dry-run isolated",
|
||||
"queue continuation"
|
||||
]
|
||||
},
|
||||
"blockedByDefault": [
|
||||
"repetCtrlSend",
|
||||
"mac.sendMessages",
|
||||
"mac.callOutLogin",
|
||||
"mac.audioPlay",
|
||||
"_this.autoTask",
|
||||
"_this.processQueue",
|
||||
"mac.exeTQueue",
|
||||
"setDisposeLog",
|
||||
"setMonitorData",
|
||||
"setMonitorLog",
|
||||
"setSendMessageLog",
|
||||
"setAudioPlayLog"
|
||||
],
|
||||
"nextRecommendedRoute": "monitoring-action-ir-contract"
|
||||
}
|
||||
36
tests/fixtures/generated_scene/multi_mode/index.html
vendored
Normal file
36
tests/fixtures/generated_scene/multi_mode/index.html
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Multi Mode Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://20.76.57.61:18080/gsllys";
|
||||
|
||||
function queryReport(period_mode, orgno) {
|
||||
if (period_mode === "month") {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/monthReport",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: { orgno, rows: 1000, page: 1, tjzq: "month" }
|
||||
});
|
||||
}
|
||||
if (period_mode === "week") {
|
||||
return $.ajax({
|
||||
url: "http://20.76.57.61:18080/gsllys/weekReport",
|
||||
type: "POST",
|
||||
contentType: "application/x-www-form-urlencoded",
|
||||
data: { orgno, rows: 1000, page: 1, tjzq: "week" }
|
||||
});
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
function renderTable(response) {
|
||||
return response.content || [];
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
1879
tests/fixtures/generated_scene/official_board_reconciliation_2026-04-19.json
vendored
Normal file
1879
tests/fixtures/generated_scene/official_board_reconciliation_2026-04-19.json
vendored
Normal file
File diff suppressed because it is too large
Load Diff
18
tests/fixtures/generated_scene/p0_canonical_answers/README.md
vendored
Normal file
18
tests/fixtures/generated_scene/p0_canonical_answers/README.md
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
# P0 Canonical Answers
|
||||
|
||||
This directory stores repo-local canonical answer baselines for the
|
||||
`2026-04-17-scene-skill-60-to-90-roadmap` execution line.
|
||||
|
||||
These assets are not a claim that the full external production scenes are
|
||||
already checked into this repository. They are the in-repo equivalent
|
||||
golden baselines used to keep three P0 archetypes stable during regression:
|
||||
|
||||
- `p0-1-tq-lineloss-report.scene-ir.json`
|
||||
Repo-local `multi_mode_request` canonical aligned to the `tq` benchmark role.
|
||||
- `p0-2-single-request-table.scene-ir.json`
|
||||
Repo-local `single_request_table` canonical for generic single-request reports.
|
||||
- `p0-3-paginated-enrichment.scene-ir.json`
|
||||
Repo-local `paginated_enrichment` canonical for list-detail enrichment flows.
|
||||
|
||||
The current execution phase uses these files as golden `Scene IR` references
|
||||
until full external P0 source packages are brought into a controlled fixture set.
|
||||
71
tests/fixtures/generated_scene/p0_canonical_answers/p0-1-tq-lineloss-report.scene-ir.json
vendored
Normal file
71
tests/fixtures/generated_scene/p0_canonical_answers/p0-1-tq-lineloss-report.scene-ir.json
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"sceneId": "tq-lineloss-report",
|
||||
"sceneName": "台区线损月周累计统计分析",
|
||||
"sceneKind": "report_collection",
|
||||
"workflowArchetype": "multi_mode_request",
|
||||
"bootstrap": {
|
||||
"expectedDomain": "20.76.57.61:18080",
|
||||
"targetUrl": "http://20.76.57.61:18080/gsllys",
|
||||
"requiresTargetPage": true,
|
||||
"pageTitleKeywords": ["台区线损"],
|
||||
"source": "canonical_fixture"
|
||||
},
|
||||
"defaultMode": "month",
|
||||
"modeSwitchField": "period_mode",
|
||||
"modes": [
|
||||
{
|
||||
"name": "month",
|
||||
"label": "month",
|
||||
"condition": {
|
||||
"field": "period_mode",
|
||||
"operator": "equals",
|
||||
"value": "month"
|
||||
},
|
||||
"apiEndpoint": {
|
||||
"name": "monthReport",
|
||||
"url": "http://20.76.57.61:18080/gsllys/monthReport",
|
||||
"method": "POST",
|
||||
"contentType": "application/x-www-form-urlencoded"
|
||||
},
|
||||
"requestTemplate": {
|
||||
"orgno": "${args.org_code}",
|
||||
"tjzq": "month"
|
||||
},
|
||||
"responsePath": "content"
|
||||
},
|
||||
{
|
||||
"name": "week",
|
||||
"label": "week",
|
||||
"condition": {
|
||||
"field": "period_mode",
|
||||
"operator": "equals",
|
||||
"value": "week"
|
||||
},
|
||||
"apiEndpoint": {
|
||||
"name": "weekReport",
|
||||
"url": "http://20.76.57.61:18080/gsllys/weekReport",
|
||||
"method": "POST",
|
||||
"contentType": "application/x-www-form-urlencoded"
|
||||
},
|
||||
"requestTemplate": {
|
||||
"orgno": "${args.org_code}",
|
||||
"tjzq": "week"
|
||||
},
|
||||
"responsePath": "content"
|
||||
}
|
||||
],
|
||||
"workflowSteps": [
|
||||
{ "type": "request", "description": "select mode and query corresponding endpoint" },
|
||||
{ "type": "transform", "description": "normalize mode-specific table rows" }
|
||||
],
|
||||
"readiness": {
|
||||
"level": "A",
|
||||
"gates": [
|
||||
{ "name": "bootstrap_resolved", "passed": true },
|
||||
{ "name": "request_contract_complete", "passed": true },
|
||||
{ "name": "response_contract_complete", "passed": true },
|
||||
{ "name": "workflow_contract_complete", "passed": true },
|
||||
{ "name": "runtime_contract_compatible", "passed": true }
|
||||
]
|
||||
}
|
||||
}
|
||||
36
tests/fixtures/generated_scene/p0_canonical_answers/p0-2-single-request-table.scene-ir.json
vendored
Normal file
36
tests/fixtures/generated_scene/p0_canonical_answers/p0-2-single-request-table.scene-ir.json
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"sceneId": "single-request-report",
|
||||
"sceneName": "单请求通用报表",
|
||||
"sceneKind": "report_collection",
|
||||
"workflowArchetype": "single_request_table",
|
||||
"bootstrap": {
|
||||
"expectedDomain": "yx.gs.sgcc.com.cn",
|
||||
"targetUrl": "http://yx.gs.sgcc.com.cn/report",
|
||||
"requiresTargetPage": true,
|
||||
"pageTitleKeywords": ["通用报表"],
|
||||
"source": "canonical_fixture"
|
||||
},
|
||||
"apiEndpoints": [
|
||||
{
|
||||
"name": "reportList",
|
||||
"url": "http://yx.gs.sgcc.com.cn/report/list",
|
||||
"method": "POST",
|
||||
"contentType": "application/json"
|
||||
}
|
||||
],
|
||||
"responsePath": "rows",
|
||||
"workflowSteps": [
|
||||
{ "type": "request", "description": "single request table collection" },
|
||||
{ "type": "transform", "description": "normalize table rows" }
|
||||
],
|
||||
"readiness": {
|
||||
"level": "A",
|
||||
"gates": [
|
||||
{ "name": "bootstrap_resolved", "passed": true },
|
||||
{ "name": "request_contract_complete", "passed": true },
|
||||
{ "name": "response_contract_complete", "passed": true },
|
||||
{ "name": "workflow_contract_complete", "passed": true },
|
||||
{ "name": "runtime_contract_compatible", "passed": true }
|
||||
]
|
||||
}
|
||||
}
|
||||
100
tests/fixtures/generated_scene/p0_canonical_answers/p0-3-paginated-enrichment.scene-ir.json
vendored
Normal file
100
tests/fixtures/generated_scene/p0_canonical_answers/p0-3-paginated-enrichment.scene-ir.json
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"sceneId": "paginated-enrichment-report",
|
||||
"sceneName": "分页补数明细报表",
|
||||
"sceneKind": "report_collection",
|
||||
"workflowArchetype": "paginated_enrichment",
|
||||
"bootstrap": {
|
||||
"expectedDomain": "yx.gs.sgcc.com.cn",
|
||||
"targetUrl": "http://yx.gs.sgcc.com.cn",
|
||||
"requiresTargetPage": true,
|
||||
"pageTitleKeywords": ["分页补数"],
|
||||
"source": "canonical_fixture"
|
||||
},
|
||||
"apiEndpoints": [
|
||||
{
|
||||
"name": "userList",
|
||||
"url": "http://yx.gs.sgcc.com.cn/marketing/userList",
|
||||
"method": "POST",
|
||||
"contentType": "application/json"
|
||||
},
|
||||
{
|
||||
"name": "userCharges",
|
||||
"url": "http://yx.gs.sgcc.com.cn/marketing/userCharges",
|
||||
"method": "POST",
|
||||
"contentType": "application/json"
|
||||
}
|
||||
],
|
||||
"mainRequest": {
|
||||
"apiEndpoint": {
|
||||
"name": "userList",
|
||||
"url": "http://yx.gs.sgcc.com.cn/marketing/userList",
|
||||
"method": "POST",
|
||||
"contentType": "application/json",
|
||||
"description": "g3_main_request"
|
||||
},
|
||||
"requestTemplate": {
|
||||
"page": "${args.page}",
|
||||
"pageSize": "${args.page_size}"
|
||||
},
|
||||
"responsePath": "rows",
|
||||
"columnDefs": []
|
||||
},
|
||||
"paginationPlan": {
|
||||
"pageField": "page",
|
||||
"pageSizeField": "pageSize",
|
||||
"startPage": 1,
|
||||
"terminationRule": "stop_when_page_rows_empty"
|
||||
},
|
||||
"enrichmentRequests": [
|
||||
{
|
||||
"name": "userCharges",
|
||||
"apiEndpoint": {
|
||||
"name": "userCharges",
|
||||
"url": "http://yx.gs.sgcc.com.cn/marketing/userCharges",
|
||||
"method": "POST",
|
||||
"contentType": "application/json",
|
||||
"description": "g3_enrichment_request"
|
||||
},
|
||||
"paramBindings": {},
|
||||
"responsePath": "rows",
|
||||
"consumedFields": ["custNo"]
|
||||
}
|
||||
],
|
||||
"joinKeys": ["custNo"],
|
||||
"mergeOrDedupeRules": ["dedupe:custNo", "aggregate:charge"],
|
||||
"exportPlan": {
|
||||
"entry": "exportExcel",
|
||||
"artifactType": "report-artifact",
|
||||
"dependsOnHostBridge": false
|
||||
},
|
||||
"responsePath": "rows",
|
||||
"workflowSteps": [
|
||||
{ "type": "request", "entry": "getUserList", "endpoint": "userList" },
|
||||
{ "type": "paginate", "entry": "getUserList" },
|
||||
{ "type": "secondary_request", "entry": "getUserCharges" },
|
||||
{ "type": "filter", "expr": "row.charge !== 0" },
|
||||
{ "type": "export", "entry": "exportExcel" }
|
||||
],
|
||||
"workflowEvidence": {
|
||||
"requestEntries": ["getUserList"],
|
||||
"paginationFields": ["page", "pageSize"],
|
||||
"secondaryRequestEntries": ["getUserCharges"],
|
||||
"postProcessSteps": ["filter", "export"]
|
||||
},
|
||||
"readiness": {
|
||||
"level": "A",
|
||||
"gates": [
|
||||
{ "name": "bootstrap_resolved", "passed": true },
|
||||
{ "name": "request_contract_complete", "passed": true },
|
||||
{ "name": "response_contract_complete", "passed": true },
|
||||
{ "name": "workflow_contract_complete", "passed": true },
|
||||
{ "name": "runtime_contract_compatible", "passed": true },
|
||||
{ "name": "g3_main_request_resolved", "passed": true },
|
||||
{ "name": "g3_pagination_contract_complete", "passed": true },
|
||||
{ "name": "g3_enrichment_contract_complete", "passed": true },
|
||||
{ "name": "g3_join_key_resolved", "passed": true },
|
||||
{ "name": "g3_export_path_identified", "passed": true },
|
||||
{ "name": "g3_runtime_scope_compatible", "passed": true }
|
||||
]
|
||||
}
|
||||
}
|
||||
120
tests/fixtures/generated_scene/p0_canonical_answers/p0-canonical-manifest.json
vendored
Normal file
120
tests/fixtures/generated_scene/p0_canonical_answers/p0-canonical-manifest.json
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"targets": [
|
||||
{
|
||||
"id": "p0-1-tq-lineloss-report",
|
||||
"fixtureDir": "tests/fixtures/generated_scene/multi_mode",
|
||||
"canonicalSceneIr": "tests/fixtures/generated_scene/p0_canonical_answers/p0-1-tq-lineloss-report.scene-ir.json",
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"request_template_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"requiredWorkflowStepTypes": [
|
||||
"request",
|
||||
"transform"
|
||||
],
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible"
|
||||
],
|
||||
"acceptanceChecklist": [
|
||||
"mode_matrix_restored",
|
||||
"request_response_contract_restored",
|
||||
"bootstrap_context_resolved"
|
||||
],
|
||||
"failureTaxonomy": [
|
||||
"bootstrap_target",
|
||||
"request_mode_param",
|
||||
"response_path",
|
||||
"workflow_transform"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "p0-2-single-request-table",
|
||||
"fixtureDir": "tests/fixtures/generated_scene/single_request_table",
|
||||
"canonicalSceneIr": "tests/fixtures/generated_scene/p0_canonical_answers/p0-2-single-request-table.scene-ir.json",
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"request_template_candidate",
|
||||
"response_path_candidate"
|
||||
],
|
||||
"requiredWorkflowStepTypes": [
|
||||
"request",
|
||||
"transform"
|
||||
],
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible"
|
||||
],
|
||||
"acceptanceChecklist": [
|
||||
"single_request_template_restored",
|
||||
"response_contract_restored",
|
||||
"generic_report_runnable"
|
||||
],
|
||||
"failureTaxonomy": [
|
||||
"request_endpoint",
|
||||
"response_path",
|
||||
"workflow_steps"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "p0-3-paginated-enrichment",
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment",
|
||||
"canonicalSceneIr": "tests/fixtures/generated_scene/p0_canonical_answers/p0-3-paginated-enrichment.scene-ir.json",
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"main_request_candidate",
|
||||
"enrichment_request_candidate",
|
||||
"join_key_candidate",
|
||||
"dedupe_or_merge_rule_candidate",
|
||||
"response_path_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"requiredWorkflowStepTypes": [
|
||||
"request",
|
||||
"paginate",
|
||||
"secondary_request",
|
||||
"filter",
|
||||
"export"
|
||||
],
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"g3_main_request_resolved",
|
||||
"g3_pagination_contract_complete",
|
||||
"g3_enrichment_contract_complete",
|
||||
"g3_join_key_resolved",
|
||||
"g3_export_path_identified",
|
||||
"g3_runtime_scope_compatible"
|
||||
],
|
||||
"acceptanceChecklist": [
|
||||
"main_request_restored",
|
||||
"pagination_chain_restored",
|
||||
"secondary_request_restored",
|
||||
"join_key_restored",
|
||||
"fail_closed_ready"
|
||||
],
|
||||
"failureTaxonomy": [
|
||||
"main_request",
|
||||
"paginate_step",
|
||||
"secondary_request",
|
||||
"join_key_missing",
|
||||
"post_process",
|
||||
"response_path",
|
||||
"export_plan"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
392
tests/fixtures/generated_scene/p1_family_manifest.json
vendored
Normal file
392
tests/fixtures/generated_scene/p1_family_manifest.json
vendored
Normal file
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"families": [
|
||||
{
|
||||
"id": "g2-multi-mode-lineloss-family",
|
||||
"group": "G2",
|
||||
"familyName": "G2 multi-mode lineloss family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/multi_mode",
|
||||
"representativeSceneId": "p1-g2-multi-mode-report",
|
||||
"representativeSceneName": "P1 G2 multi-mode report",
|
||||
"expectedArchetype": "multi_mode_request",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"request_template_candidate",
|
||||
"response_path_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"batchExpansionFixtures": [
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_weekly_single_mode",
|
||||
"sceneId": "p1-g2-weekly-single-mode-report",
|
||||
"sceneName": "P1 G2 weekly single mode report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "week"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_mixed_linked_workflow",
|
||||
"sceneId": "p1-g2-mixed-linked-workflow-report",
|
||||
"sceneName": "P1 G2 mixed linked workflow report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "primary"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_comparison_crosscheck",
|
||||
"sceneId": "p1-g2-comparison-crosscheck-report",
|
||||
"sceneName": "P1 G2 comparison crosscheck report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "comparison"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_diagnosis_drilldown",
|
||||
"sceneId": "p1-g2-diagnosis-drilldown-report",
|
||||
"sceneName": "P1 G2 diagnosis drilldown report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "diagnosis"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g2_prediction_compute",
|
||||
"sceneId": "p1-g2-prediction-compute-report",
|
||||
"sceneName": "P1 G2 prediction compute report",
|
||||
"assertions": {
|
||||
"requiredDefaultMode": "prediction"
|
||||
}
|
||||
}
|
||||
],
|
||||
"batchCandidateAsset": "tests/fixtures/generated_scene/g2_candidate_batch_2026-04-18.json",
|
||||
"successRateSummary": "6/6 representative plus five expansion migrations passed",
|
||||
"failureTaxonomy": [
|
||||
"request_mode_param",
|
||||
"workflow_transform",
|
||||
"bootstrap_target"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g1-single-request-report-family",
|
||||
"group": "G1",
|
||||
"familyName": "G1 single-request report family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/single_request_table",
|
||||
"representativeSceneId": "p1-g1-single-request-report",
|
||||
"representativeSceneName": "P1 G1 single-request report",
|
||||
"expectedArchetype": "single_request_table",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"request_template_candidate",
|
||||
"response_path_candidate"
|
||||
],
|
||||
"successRateSummary": "1/1 representative migration passed",
|
||||
"failureTaxonomy": [
|
||||
"request_endpoint",
|
||||
"response_path",
|
||||
"workflow_steps"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g1e-light-enrichment-family",
|
||||
"group": "G1",
|
||||
"familyName": "G1-E light enrichment report family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/g1e_light_enrichment",
|
||||
"representativeSceneId": "p1-g1e-light-enrichment-report",
|
||||
"representativeSceneName": "P1 G1-E light enrichment report",
|
||||
"expectedArchetype": "single_request_enrichment",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"main_request_resolved",
|
||||
"enrichment_requests_resolved",
|
||||
"merge_plan_resolved",
|
||||
"g1e_scope_compatible"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"main_request_candidate",
|
||||
"enrichment_request_candidate",
|
||||
"merge_plan_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"expansionFixtureDir": "tests/fixtures/generated_scene/g1e_light_enrichment_expansion",
|
||||
"expansionSceneId": "p1-g1e-light-enrichment-expansion-report",
|
||||
"expansionSceneName": "P1 G1-E light enrichment expansion report",
|
||||
"expansionAssertions": {
|
||||
"requiredMainRequest": "getWkorderAll",
|
||||
"requiredEnrichmentRequest": "queryMeterInfo",
|
||||
"requiredMergeJoinKey": "wkOrderNo",
|
||||
"requiredMergeAggregateRule": "group_by:countyCodeName",
|
||||
"requiredOutputColumn": "meterCapacityThisMonth"
|
||||
},
|
||||
"batchExpansionFixtures": [
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/g1e_light_enrichment_additional",
|
||||
"sceneId": "p1-g1e-light-enrichment-additional-report",
|
||||
"sceneName": "P1 G1-E light enrichment additional report",
|
||||
"assertions": {
|
||||
"requiredMainRequest": "getWkorderAll",
|
||||
"requiredEnrichmentRequest": "queryBusAcpt",
|
||||
"requiredMergeJoinKey": "wkOrderNo",
|
||||
"requiredMergeAggregateRule": "group_by:countyCodeName",
|
||||
"requiredOutputColumn": "batchCapacityThisMonth"
|
||||
}
|
||||
}
|
||||
],
|
||||
"batchCandidateAsset": "tests/fixtures/generated_scene/g1e_candidate_batch_2026-04-18.json",
|
||||
"successRateSummary": "3/3 representative plus two expansion migrations passed",
|
||||
"failureTaxonomy": [
|
||||
"g1e_main_request_missing",
|
||||
"g1e_enrichment_requests_incomplete",
|
||||
"g1e_merge_plan_incomplete",
|
||||
"g1e_scope"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g3-paginated-enrichment-family",
|
||||
"group": "G3",
|
||||
"familyName": "G3 paginated enrichment family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/paginated_enrichment",
|
||||
"representativeSceneId": "p1-g3-paginated-report",
|
||||
"representativeSceneName": "P1 G3 paginated report",
|
||||
"expectedArchetype": "paginated_enrichment",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"response_path_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"expansionFixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion",
|
||||
"expansionSceneId": "p1-g3-paginated-expansion-report",
|
||||
"expansionSceneName": "P1 G3 paginated expansion report",
|
||||
"expansionAssertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
},
|
||||
"batchExpansionFixtures": [
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_workorder",
|
||||
"sceneId": "p1-g3-paginated-expansion-workorder-report",
|
||||
"sceneName": "P1 G3 paginated expansion workorder report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "workOrderNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_orderno",
|
||||
"sceneId": "p1-g3-paginated-expansion-orderno-report",
|
||||
"sceneName": "P1 G3 paginated expansion orderno report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "page",
|
||||
"requiredJoinKey": "orderNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_source_distribution",
|
||||
"sceneId": "p1-g3-paginated-expansion-source-distribution-report",
|
||||
"sceneName": "P1 G3 paginated expansion source distribution report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_service_risk",
|
||||
"sceneId": "p1-g3-paginated-expansion-service-risk-report",
|
||||
"sceneName": "P1 G3 paginated expansion service risk report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_timeout_warning",
|
||||
"sceneId": "p1-g3-paginated-expansion-timeout-warning-report",
|
||||
"sceneName": "P1 G3 paginated expansion timeout warning report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_device_monitor_weekly",
|
||||
"sceneId": "p1-g3-paginated-expansion-device-monitor-weekly-report",
|
||||
"sceneName": "P1 G3 paginated expansion device monitor weekly report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_customer_satisfaction",
|
||||
"sceneId": "p1-g3-paginated-expansion-customer-satisfaction-report",
|
||||
"sceneName": "P1 G3 paginated expansion customer satisfaction report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "page",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_return",
|
||||
"sceneId": "p1-g3-paginated-expansion-repair-return-report",
|
||||
"sceneName": "P1 G3 paginated expansion repair return report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNum",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_daily_control",
|
||||
"sceneId": "p1-g3-paginated-expansion-repair-daily-control-report",
|
||||
"sceneName": "P1 G3 paginated expansion repair daily control report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "pageNo",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:riskLevel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"fixtureDir": "tests/fixtures/generated_scene/paginated_enrichment_expansion_business_stats",
|
||||
"sceneId": "p1-g3-paginated-expansion-business-stats-report",
|
||||
"sceneName": "P1 G3 paginated expansion business stats report",
|
||||
"assertions": {
|
||||
"expectedPaginationField": "page",
|
||||
"requiredJoinKey": "ticketNo",
|
||||
"requiredAggregateRule": "aggregate:sourceType"
|
||||
}
|
||||
}
|
||||
],
|
||||
"batchCandidateAsset": "tests/fixtures/generated_scene/g3_candidate_batch_2026-04-18.json",
|
||||
"successRateSummary": "11/11 representative plus ten expansion migrations passed",
|
||||
"failureTaxonomy": [
|
||||
"paginate_step",
|
||||
"secondary_request",
|
||||
"post_process",
|
||||
"response_path",
|
||||
"join_key_missing"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g6-host-bridge-workflow-family",
|
||||
"group": "G6",
|
||||
"familyName": "G6 host bridge workflow family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/g6_host_bridge_workflow",
|
||||
"representativeSceneId": "p1-g6-host-bridge-workflow",
|
||||
"representativeSceneName": "P1 G6 host bridge workflow",
|
||||
"expectedArchetype": "host_bridge_workflow",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"g6_host_bridge_detected",
|
||||
"g6_fail_closed"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"localhost_dependency_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"successRateSummary": "1/1 representative migration passed",
|
||||
"failureTaxonomy": [
|
||||
"g6_host_bridge_actions",
|
||||
"g6_runtime_contract",
|
||||
"g6_fail_closed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g7-multi-endpoint-inventory-family",
|
||||
"group": "G7",
|
||||
"familyName": "G7 multi-endpoint inventory family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/g7_multi_endpoint_inventory",
|
||||
"representativeSceneId": "p1-g7-multi-endpoint-inventory",
|
||||
"representativeSceneName": "P1 G7 multi-endpoint inventory",
|
||||
"expectedArchetype": "multi_endpoint_inventory",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"g7_inventory_endpoints_detected",
|
||||
"g7_fail_closed"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"endpoint_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"successRateSummary": "1/1 representative migration passed",
|
||||
"failureTaxonomy": [
|
||||
"g7_inventory_endpoints",
|
||||
"g7_inventory_contract",
|
||||
"g7_fail_closed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g8-local-doc-pipeline-family",
|
||||
"group": "G8",
|
||||
"familyName": "G8 local document pipeline family",
|
||||
"representativeFixtureDir": "tests/fixtures/generated_scene/g8_local_doc_pipeline",
|
||||
"representativeSceneId": "p1-g8-local-doc-pipeline",
|
||||
"representativeSceneName": "P1 G8 local document pipeline",
|
||||
"expectedArchetype": "local_doc_pipeline",
|
||||
"requiredGateNames": [
|
||||
"bootstrap_resolved",
|
||||
"request_contract_complete",
|
||||
"response_contract_complete",
|
||||
"workflow_contract_complete",
|
||||
"runtime_contract_compatible",
|
||||
"g8_local_doc_pipeline_detected",
|
||||
"g8_fail_closed"
|
||||
],
|
||||
"requiredEvidenceTypes": [
|
||||
"bootstrap_candidate",
|
||||
"localhost_dependency_candidate",
|
||||
"workflow_candidate"
|
||||
],
|
||||
"successRateSummary": "1/1 representative migration passed",
|
||||
"failureTaxonomy": [
|
||||
"g8_local_doc_pipeline_actions",
|
||||
"g8_local_doc_pipeline_contract",
|
||||
"g8_fail_closed"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
171
tests/fixtures/generated_scene/p1_family_results.json
vendored
Normal file
171
tests/fixtures/generated_scene/p1_family_results.json
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"generatedAt": "2026-04-18",
|
||||
"scope": "repo-local representative plus first expansion migration validation",
|
||||
"families": [
|
||||
{
|
||||
"id": "g2-multi-mode-lineloss-family",
|
||||
"group": "G2",
|
||||
"familyName": "G2 multi-mode lineloss family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 5,
|
||||
"candidateBatchCount": 0,
|
||||
"passedRuns": 6,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"request_mode_param",
|
||||
"workflow_transform",
|
||||
"bootstrap_target"
|
||||
],
|
||||
"notes": [
|
||||
"month/week request template restored from deterministic source scan",
|
||||
"G2-B validates reusable week-only mode recovery",
|
||||
"G2-C validates reusable mixed linked workflow recovery",
|
||||
"G2-D validates reusable prediction compute mode recovery",
|
||||
"G2-E validates reusable comparison mode recovery",
|
||||
"G2-F validates reusable diagnosis mode recovery",
|
||||
"G2 no longer has a deferred queue item in the current line-loss batch asset"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g1-single-request-report-family",
|
||||
"group": "G1",
|
||||
"familyName": "G1 single-request report family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 0,
|
||||
"candidateBatchCount": 0,
|
||||
"passedRuns": 1,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"request_endpoint",
|
||||
"response_path",
|
||||
"workflow_steps"
|
||||
],
|
||||
"notes": [
|
||||
"single_request_table now uses dedicated compile path",
|
||||
"fallback multi-mode path no longer defines family success"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g1e-light-enrichment-family",
|
||||
"group": "G1",
|
||||
"familyName": "G1-E light enrichment report family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 2,
|
||||
"candidateBatchCount": 0,
|
||||
"passedRuns": 3,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"g1e_main_request_missing",
|
||||
"g1e_enrichment_requests_incomplete",
|
||||
"g1e_merge_plan_incomplete",
|
||||
"g1e_scope"
|
||||
],
|
||||
"notes": [
|
||||
"P0 fixture validates the main request plus lightweight enrichment merge plan",
|
||||
"first expansion fixture validates reuse of wkOrderNo/countyCodeName merge semantics",
|
||||
"second expansion fixture validates reuse of wkOrderNo/countyCodeName merge semantics through queryBusAcpt",
|
||||
"G1-E remains separate from plain single_request_table family success"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g3-paginated-enrichment-family",
|
||||
"group": "G3",
|
||||
"familyName": "G3 paginated enrichment family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 10,
|
||||
"candidateBatchCount": 11,
|
||||
"passedRuns": 11,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"paginate_step",
|
||||
"secondary_request",
|
||||
"post_process",
|
||||
"response_path",
|
||||
"join_key_missing"
|
||||
],
|
||||
"notes": [
|
||||
"localhost host-runtime dependency preserved as evidence instead of bootstrap pollution",
|
||||
"fail-closed gates remain mandatory for incomplete workflow",
|
||||
"first expansion fixture validated pageNum/ticketNo/riskLevel family reuse path",
|
||||
"second expansion fixture validates pageNo/workOrderNo/sourceType family reuse path",
|
||||
"third expansion fixture validates page/orderNo/sourceType family reuse path",
|
||||
"fourth expansion fixture validates pageNum/ticketNo/sourceType family reuse path",
|
||||
"fifth expansion fixture validates pageNo/ticketNo/riskLevel family reuse path",
|
||||
"sixth expansion fixture validates pageNum/ticketNo/riskLevel timeout-warning family reuse path",
|
||||
"seventh expansion fixture validates pageNo/ticketNo/sourceType device-monitor family reuse path",
|
||||
"eighth expansion fixture validates page/ticketNo/sourceType customer-satisfaction family reuse path",
|
||||
"ninth expansion fixture validates pageNum/ticketNo/riskLevel repair-return family reuse path",
|
||||
"tenth expansion fixture validates pageNo/ticketNo/riskLevel repair-daily-control family reuse path",
|
||||
"eleventh expansion fixture validates page/ticketNo/sourceType business-stats family reuse path",
|
||||
"95598 ticket-workorder ledger cluster is now anchored as a formal G3 batch expansion asset"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g6-host-bridge-workflow-family",
|
||||
"group": "G6",
|
||||
"familyName": "G6 host bridge workflow family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 0,
|
||||
"candidateBatchCount": 0,
|
||||
"passedRuns": 1,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"g6_host_bridge_actions",
|
||||
"g6_runtime_contract",
|
||||
"g6_fail_closed"
|
||||
],
|
||||
"notes": [
|
||||
"host bridge workflow now has a minimal runnable runtime contract",
|
||||
"localhost noise alone still does not define the archetype",
|
||||
"incomplete manual scene IR remains fail-closed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g7-multi-endpoint-inventory-family",
|
||||
"group": "G7",
|
||||
"familyName": "G7 multi-endpoint inventory family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 0,
|
||||
"candidateBatchCount": 0,
|
||||
"passedRuns": 1,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"g7_inventory_endpoints",
|
||||
"g7_inventory_contract",
|
||||
"g7_fail_closed"
|
||||
],
|
||||
"notes": [
|
||||
"multi-endpoint inventory now compiles through a dedicated runtime path",
|
||||
"inventory aggregation is family-specific and no longer falls back to page_state_eval",
|
||||
"incomplete manual scene IR remains fail-closed"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "g8-local-doc-pipeline-family",
|
||||
"group": "G8",
|
||||
"familyName": "G8 local document pipeline family",
|
||||
"representativeRuns": 1,
|
||||
"expansionRuns": 0,
|
||||
"candidateBatchCount": 0,
|
||||
"passedRuns": 1,
|
||||
"failedRuns": 0,
|
||||
"successRate": 1.0,
|
||||
"failureTaxonomy": [
|
||||
"g8_local_doc_pipeline_actions",
|
||||
"g8_local_doc_pipeline_contract",
|
||||
"g8_fail_closed"
|
||||
],
|
||||
"notes": [
|
||||
"local document pipeline now compiles through a dedicated runtime path",
|
||||
"localhost dependencies are promoted into formal runtime endpoints for G8 only",
|
||||
"incomplete manual scene IR remains fail-closed"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
55
tests/fixtures/generated_scene/paginated_enrichment/index.html
vendored
Normal file
55
tests/fixtures/generated_scene/paginated_enrichment/index.html
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getUserList(page, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/marketing/userList",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ page, pageSize })
|
||||
});
|
||||
}
|
||||
|
||||
async function getUserCharges(custNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/marketing/userCharges",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ custNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const pageSize = 100;
|
||||
let page = 1;
|
||||
const rows = [];
|
||||
while (page < 10) {
|
||||
const response = await getUserList(page, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const chargeInfo = await getUserCharges(item.custNo);
|
||||
const row = { ...item, charge: chargeInfo.charge };
|
||||
if (row.charge !== 0) {
|
||||
rows.push(row);
|
||||
}
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
exportExcel(rows);
|
||||
return rows;
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
60
tests/fixtures/generated_scene/paginated_enrichment_expansion/index.html
vendored
Normal file
60
tests/fixtures/generated_scene/paginated_enrichment_expansion/index.html
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getTicketList(pageNum, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/ticketList",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNum, pageSize, sourceTypes: ["95598", "12398"] })
|
||||
});
|
||||
}
|
||||
|
||||
async function getTicketRiskDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/ticketRiskDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const pageSize = 50;
|
||||
let pageNum = 1;
|
||||
const rows = [];
|
||||
while (pageNum < 20) {
|
||||
const response = await getTicketList(pageNum, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await getTicketRiskDetail(item.ticketNo);
|
||||
const row = { ...item, riskLevel: detail.riskLevel };
|
||||
if (row.riskLevel !== "LOW") {
|
||||
rows.push(row);
|
||||
}
|
||||
}
|
||||
pageNum += 1;
|
||||
}
|
||||
const aggregated = rows.map(row => ({
|
||||
ticketNo: row.ticketNo,
|
||||
riskLevel: row.riskLevel,
|
||||
sourceType: row.sourceType
|
||||
}));
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_business_stats/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_business_stats/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Business Stats Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getBusinessStatsPage(page, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/businessStatsPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ page, pageSize, sourceTypes: ["95598", "12398"] })
|
||||
});
|
||||
}
|
||||
|
||||
async function getBusinessStatsDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/businessStatsDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let page = 1;
|
||||
const pageSize = 25;
|
||||
while (page < 13) {
|
||||
const response = await getBusinessStatsPage(page, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
sourceType: detail.sourceType,
|
||||
businessType: detail.businessType
|
||||
});
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.sourceType !== "internal" && row.businessType !== "ignore" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getBusinessStatsDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_customer_satisfaction/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_customer_satisfaction/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Customer Satisfaction Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getCustomerSatisfactionPage(page, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/customerSatisfactionPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ page, pageSize, sourceTypes: ["95598"], cycle: "daily" })
|
||||
});
|
||||
}
|
||||
|
||||
async function getCustomerSatisfactionDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/customerSatisfactionDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let page = 1;
|
||||
const pageSize = 20;
|
||||
while (page < 16) {
|
||||
const response = await getCustomerSatisfactionPage(page, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
sourceType: detail.sourceType,
|
||||
satisfactionTag: detail.satisfactionTag
|
||||
});
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.sourceType !== "internal" && row.satisfactionTag !== "ignored" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getCustomerSatisfactionDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_device_monitor_weekly/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_device_monitor_weekly/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Device Monitor Weekly Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getDeviceMonitorWeeklyPage(pageNo, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/deviceMonitorWeeklyPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNo, pageSize, sourceTypes: ["95598", "12398"], cycle: "weekly" })
|
||||
});
|
||||
}
|
||||
|
||||
async function getDeviceMonitorWeeklyDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/deviceMonitorWeeklyDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNo = 1;
|
||||
const pageSize = 30;
|
||||
while (pageNo < 10) {
|
||||
const response = await getDeviceMonitorWeeklyPage(pageNo, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
sourceType: detail.sourceType,
|
||||
monitorState: detail.monitorState
|
||||
});
|
||||
}
|
||||
pageNo += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.sourceType !== "internal" && row.monitorState !== "closed" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getDeviceMonitorWeeklyDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_orderno/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_orderno/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment OrderNo Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getServiceOrderPage(page, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/serviceOrderPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ page, pageSize, sourceTypes: ["95598", "12398"] })
|
||||
});
|
||||
}
|
||||
|
||||
async function getServiceOrderTrend(orderNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/serviceOrderTrend",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ orderNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let page = 1;
|
||||
const pageSize = 40;
|
||||
while (page < 12) {
|
||||
const response = await getServiceOrderPage(page, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.orderNo);
|
||||
if (item.orderNo) {
|
||||
rows.push({
|
||||
orderNo: item.orderNo,
|
||||
sourceType: detail.sourceType,
|
||||
sourceChannel: item.sourceChannel
|
||||
});
|
||||
}
|
||||
}
|
||||
page += 1;
|
||||
}
|
||||
const aggregated = rows.filter(row => row.sourceType !== "internal" && row.orderNo);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(orderNo) {
|
||||
return getServiceOrderTrend(orderNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_daily_control/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_daily_control/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Repair Daily Control Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getRepairDailyControlPage(pageNo, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/repairDailyControlPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNo, pageSize, sourceTypes: ["95598"], cycle: "daily" })
|
||||
});
|
||||
}
|
||||
|
||||
async function getRepairDailyControlDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/repairDailyControlDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNo = 1;
|
||||
const pageSize = 45;
|
||||
while (pageNo < 11) {
|
||||
const response = await getRepairDailyControlPage(pageNo, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
riskLevel: detail.riskLevel,
|
||||
controlState: detail.controlState
|
||||
});
|
||||
}
|
||||
pageNo += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.riskLevel !== "LOW" && row.controlState !== "closed" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getRepairDailyControlDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_return/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_repair_return/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Repair Return Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getRepairReturnPage(pageNum, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/repairReturnPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNum, pageSize, sourceTypes: ["95598"], warningType: "return" })
|
||||
});
|
||||
}
|
||||
|
||||
async function getRepairReturnDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/repairReturnDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNum = 1;
|
||||
const pageSize = 35;
|
||||
while (pageNum < 14) {
|
||||
const response = await getRepairReturnPage(pageNum, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
riskLevel: detail.riskLevel,
|
||||
returnStatus: detail.returnStatus
|
||||
});
|
||||
}
|
||||
pageNum += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.riskLevel !== "LOW" && row.returnStatus !== "done" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getRepairReturnDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_service_risk/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_service_risk/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Service Risk Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getServiceRiskPage(pageNo, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/serviceRiskPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNo, pageSize, sourceTypes: ["95598", "12398"] })
|
||||
});
|
||||
}
|
||||
|
||||
async function getServiceRiskDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/serviceRiskDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNo = 1;
|
||||
const pageSize = 35;
|
||||
while (pageNo < 18) {
|
||||
const response = await getServiceRiskPage(pageNo, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
riskLevel: detail.riskLevel,
|
||||
processStatus: detail.processStatus
|
||||
});
|
||||
}
|
||||
pageNo += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.riskLevel !== "LOW" && row.processStatus !== "closed" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getServiceRiskDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_source_distribution/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_source_distribution/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Source Distribution Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getTicketSourcePage(pageNum, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/ticketSourcePage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNum, pageSize, sourceTypes: ["95598"] })
|
||||
});
|
||||
}
|
||||
|
||||
async function getTicketSourceSummary(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/ticketSourceSummary",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNum = 1;
|
||||
const pageSize = 25;
|
||||
while (pageNum < 15) {
|
||||
const response = await getTicketSourcePage(pageNum, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
sourceType: detail.sourceType,
|
||||
sourceChannel: detail.sourceChannel
|
||||
});
|
||||
}
|
||||
pageNum += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.sourceType !== "internal" && row.sourceChannel !== "offline" && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getTicketSourceSummary(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_timeout_warning/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_timeout_warning/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment Timeout Warning Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getTicketTimeoutWarningPage(pageNum, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/ticketTimeoutWarningPage",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNum, pageSize, sourceTypes: ["95598"], warningType: "timeout" })
|
||||
});
|
||||
}
|
||||
|
||||
async function getTicketTimeoutWarningDetail(ticketNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/ticketTimeoutWarningDetail",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ ticketNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNum = 1;
|
||||
const pageSize = 40;
|
||||
while (pageNum < 12) {
|
||||
const response = await getTicketTimeoutWarningPage(pageNum, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.ticketNo);
|
||||
rows.push({
|
||||
ticketNo: item.ticketNo,
|
||||
riskLevel: detail.riskLevel,
|
||||
timeoutHours: detail.timeoutHours
|
||||
});
|
||||
}
|
||||
pageNum += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.riskLevel !== "LOW" && row.timeoutHours > 0 && row.ticketNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(ticketNo) {
|
||||
return getTicketTimeoutWarningDetail(ticketNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_workorder/index.html
vendored
Normal file
63
tests/fixtures/generated_scene/paginated_enrichment_expansion_workorder/index.html
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Paginated Enrichment WorkOrder Expansion Fixture</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
const sourceUrl = "http://yx.gs.sgcc.com.cn";
|
||||
|
||||
async function getWorkOrderList(pageNo, pageSize) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/workOrderList",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ pageNo, pageSize, sourceType: "95598" })
|
||||
});
|
||||
}
|
||||
|
||||
async function getWorkOrderSourceSummary(workOrderNo) {
|
||||
return $.ajax({
|
||||
url: "http://yx.gs.sgcc.com.cn/workorder/workOrderSourceSummary",
|
||||
type: "POST",
|
||||
contentType: "application/json",
|
||||
data: JSON.stringify({ workOrderNo })
|
||||
});
|
||||
}
|
||||
|
||||
async function executeTask() {
|
||||
const rows = [];
|
||||
let pageNo = 1;
|
||||
const pageSize = 30;
|
||||
while (pageNo < 10) {
|
||||
const response = await getWorkOrderList(pageNo, pageSize);
|
||||
const list = response.rows || [];
|
||||
if (!list.length) break;
|
||||
for (const item of list) {
|
||||
const detail = await querySecondary(item.workOrderNo);
|
||||
rows.push({
|
||||
workOrderNo: item.workOrderNo,
|
||||
sourceType: detail.sourceType,
|
||||
processStatus: detail.processStatus
|
||||
});
|
||||
}
|
||||
pageNo += 1;
|
||||
}
|
||||
const aggregated = rows.filter(
|
||||
row => row.processStatus !== "closed" && row.sourceType !== "internal" && row.workOrderNo
|
||||
);
|
||||
exportExcel(aggregated);
|
||||
return aggregated;
|
||||
}
|
||||
|
||||
async function querySecondary(workOrderNo) {
|
||||
return getWorkOrderSourceSummary(workOrderNo);
|
||||
}
|
||||
|
||||
function exportExcel(rows) {
|
||||
return rows.length;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
61
tests/fixtures/generated_scene/post_g7_boundary_decision_2026-04-19.json
vendored
Normal file
61
tests/fixtures/generated_scene/post_g7_boundary_decision_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"decisionDate": "2026-04-19",
|
||||
"scope": "post-g7-boundary-decision-roadmap",
|
||||
"startingState": {
|
||||
"mainlineClosed": [
|
||||
"G1-E",
|
||||
"G2",
|
||||
"G3"
|
||||
],
|
||||
"boundaryClosed": [
|
||||
"G7"
|
||||
],
|
||||
"boundaryHeld": [
|
||||
"G6",
|
||||
"G8"
|
||||
],
|
||||
"deferredOutOfScope": [
|
||||
"G4",
|
||||
"G5"
|
||||
]
|
||||
},
|
||||
"comparisonMatrix": [
|
||||
{
|
||||
"direction": "G6",
|
||||
"entryCondition": "A real sample still requires host bridge execution semantics beyond current repo-local validation.",
|
||||
"smallestNewCapability": "host bridge real-sample execution semantics",
|
||||
"entryCost": "high",
|
||||
"decision": "hold",
|
||||
"reason": "Still depends on stronger host-runtime semantics than a bounded next execution slice should absorb."
|
||||
},
|
||||
{
|
||||
"direction": "G8",
|
||||
"entryCondition": "A real sample still requires local document pipeline runtime and attachment handling beyond current repo-local coverage.",
|
||||
"smallestNewCapability": "local document runtime and attachment handling",
|
||||
"entryCost": "high",
|
||||
"decision": "hold",
|
||||
"reason": "Still depends on local pipeline and attachment behavior that exceeds the bounded next-step budget."
|
||||
},
|
||||
{
|
||||
"direction": "prerequisites-only-hold",
|
||||
"entryCondition": "Both remaining boundary families still require platform-shaped prerequisites before a bounded real-sample slice can be justified.",
|
||||
"smallestNewCapability": "bounded prerequisites scoping",
|
||||
"entryCost": "medium",
|
||||
"decision": "selected",
|
||||
"reason": "After G7 closes, the safest bounded next direction is to scope prerequisites first instead of forcing either G6 or G8 into execution."
|
||||
}
|
||||
],
|
||||
"selectedDirection": {
|
||||
"direction": "prerequisites-only-hold",
|
||||
"nextDesign": "docs/superpowers/specs/2026-04-19-boundary-runtime-prerequisites-roadmap-design.md",
|
||||
"nextPlan": "docs/superpowers/plans/2026-04-19-boundary-runtime-prerequisites-roadmap-plan.md"
|
||||
},
|
||||
"holdReasons": [
|
||||
"G6 remains held because host bridge real-sample execution semantics are still a stronger prerequisite than this bounded roadmap should absorb.",
|
||||
"G8 remains held because local document runtime and attachment handling are still outside the bounded next-step budget."
|
||||
],
|
||||
"notes": [
|
||||
"G7 is now closed and is not reconsidered under this roadmap.",
|
||||
"Only one post-G7 direction is emitted."
|
||||
]
|
||||
}
|
||||
59
tests/fixtures/generated_scene/post_roadmap_handover_2026-04-18.json
vendored
Normal file
59
tests/fixtures/generated_scene/post_roadmap_handover_2026-04-18.json
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"handoverDate": "2026-04-18",
|
||||
"closedRoadmapPlan": "docs/superpowers/plans/2026-04-17-scene-skill-60-to-90-roadmap-plan.md",
|
||||
"postRoadmapPlan": "docs/superpowers/plans/2026-04-18-scene-skill-post-roadmap-execution-plan.md",
|
||||
"roadmapClosureStatus": "completed",
|
||||
"scopeStatement": "The 60-to-90 roadmap is closed; post-roadmap work starts from execution-board unification, real-sample validation, and bounded next-stage planning without reopening G1/G2/G3 compiler work.",
|
||||
"mainlineFamilyStateMatrix": [
|
||||
{
|
||||
"group": "G2",
|
||||
"status": "batch-expansion-promoted",
|
||||
"representativeBaseline": "tests/fixtures/generated_scene/multi_mode",
|
||||
"promotedExpansions": 5,
|
||||
"candidateQueueCount": 0
|
||||
},
|
||||
{
|
||||
"group": "G1-E",
|
||||
"status": "batch-expansion-promoted",
|
||||
"representativeBaseline": "tests/fixtures/generated_scene/g1e_light_enrichment",
|
||||
"promotedExpansions": 2,
|
||||
"candidateQueueCount": 0
|
||||
},
|
||||
{
|
||||
"group": "G3",
|
||||
"status": "batch-expansion-promoted",
|
||||
"representativeBaseline": "tests/fixtures/generated_scene/paginated_enrichment",
|
||||
"promotedExpansions": 10,
|
||||
"candidateQueueCount": 0
|
||||
}
|
||||
],
|
||||
"boundaryFamilyStateMatrix": [
|
||||
{
|
||||
"group": "G6",
|
||||
"status": "boundary-family-established"
|
||||
},
|
||||
{
|
||||
"group": "G7",
|
||||
"status": "boundary-family-established"
|
||||
},
|
||||
{
|
||||
"group": "G8",
|
||||
"status": "boundary-family-established"
|
||||
}
|
||||
],
|
||||
"deferredFamilyStateMatrix": [
|
||||
{
|
||||
"group": "G4",
|
||||
"status": "deferred"
|
||||
},
|
||||
{
|
||||
"group": "G5",
|
||||
"status": "degraded"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This handover snapshot freezes the boundary between the completed roadmap and post-roadmap execution work.",
|
||||
"No old roadmap implementation item remains open in G2, G1-E, or G3.",
|
||||
"Boundary and deferred families remain outside the completed mainline closure."
|
||||
]
|
||||
}
|
||||
128
tests/fixtures/generated_scene/promotion_board_reconciliation_policy_2026-04-19.json
vendored
Normal file
128
tests/fixtures/generated_scene/promotion_board_reconciliation_policy_2026-04-19.json
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
{
|
||||
"runDate": "2026-04-19",
|
||||
"parentFramework": "2026-04-19-scene-skill-102-full-coverage-framework-plan",
|
||||
"parentRoute": "Route 6 / promotion and board reconciliation",
|
||||
"plan": "2026-04-19-promotion-and-board-reconciliation-policy-plan.md",
|
||||
"scope": {
|
||||
"policyOnly": true,
|
||||
"doesNotUpdateExecutionBoard": true,
|
||||
"forbiddenChanges": [
|
||||
"src/generated_scene/analyzer.rs",
|
||||
"src/generated_scene/generator.rs",
|
||||
"tests/fixtures/generated_scene/scene_execution_board_2026-04-18.json"
|
||||
]
|
||||
},
|
||||
"statusInputs": [
|
||||
"auto-pass",
|
||||
"fail-closed-known",
|
||||
"adjudicated-valid-host-bridge",
|
||||
"timeout-as-pass-candidate",
|
||||
"timeout-as-fail-closed-candidate",
|
||||
"timeout-still-unreadable",
|
||||
"timeout-rerun-error"
|
||||
],
|
||||
"promotionThresholds": [
|
||||
{
|
||||
"inputStatus": "auto-pass",
|
||||
"boardCandidateStatus": "framework-auto-pass-candidate",
|
||||
"requiredEvidence": [
|
||||
"generation-report exists",
|
||||
"readiness level A or B",
|
||||
"missingPieces is empty",
|
||||
"no blocker gates failed",
|
||||
"route-local follow-up or full sweep provenance is recorded"
|
||||
],
|
||||
"canAutoUpdateBoard": false,
|
||||
"reason": "Auto-pass from sweep is strong framework evidence but still requires explicit board reconciliation."
|
||||
},
|
||||
{
|
||||
"inputStatus": "fail-closed-known",
|
||||
"boardCandidateStatus": "framework-structured-fail-closed",
|
||||
"requiredEvidence": [
|
||||
"generation-report exists",
|
||||
"readiness blocker reason is named",
|
||||
"missingPieces or failed gate is recorded",
|
||||
"contractSnapshot or equivalent diagnostic evidence is available"
|
||||
],
|
||||
"canAutoUpdateBoard": false,
|
||||
"reason": "Structured fail-closed is recognized coverage, not a pass."
|
||||
},
|
||||
{
|
||||
"inputStatus": "adjudicated-valid-host-bridge",
|
||||
"boardCandidateStatus": "framework-valid-host-bridge",
|
||||
"requiredEvidence": [
|
||||
"route conflict decision exists",
|
||||
"host_bridge_workflow is the only closed workflow path",
|
||||
"expected G2/G3 contract is not closed"
|
||||
],
|
||||
"canAutoUpdateBoard": false,
|
||||
"reason": "Valid host bridge adjudication is a corrected interpretation, not automatic execution pass."
|
||||
},
|
||||
{
|
||||
"inputStatus": "timeout-as-pass-candidate",
|
||||
"boardCandidateStatus": "hygiene-pass-candidate",
|
||||
"requiredEvidence": [
|
||||
"timeout hygiene rerun record exists",
|
||||
"diagnostic rerun completed with readiness A or B",
|
||||
"raw sweep timeout is preserved"
|
||||
],
|
||||
"canAutoUpdateBoard": false,
|
||||
"reason": "Timeout rerun success is diagnostic and must not be promoted as official pass without a normal-budget sweep or explicit validation."
|
||||
},
|
||||
{
|
||||
"inputStatus": "timeout-as-fail-closed-candidate",
|
||||
"boardCandidateStatus": "hygiene-fail-closed-candidate",
|
||||
"requiredEvidence": [
|
||||
"timeout hygiene rerun record exists",
|
||||
"diagnostic rerun completed as structured fail-closed",
|
||||
"raw sweep timeout is preserved"
|
||||
],
|
||||
"canAutoUpdateBoard": false,
|
||||
"reason": "Timeout rerun fail-closed corrects interpretation but does not change official board state by itself."
|
||||
}
|
||||
],
|
||||
"boardUpdateRules": [
|
||||
{
|
||||
"rule": "no-diagnostic-auto-promotion",
|
||||
"description": "Diagnostic reruns, hygiene interpretations, and route-local follow-ups cannot directly update the official execution board."
|
||||
},
|
||||
{
|
||||
"rule": "explicit-reconciliation-required",
|
||||
"description": "Board changes require a dedicated reconciliation plan that names the source assets and target statuses."
|
||||
},
|
||||
{
|
||||
"rule": "pass-requires-normalized-evidence",
|
||||
"description": "A scene may be promoted to a pass-like board status only when generation evidence is complete under the agreed sweep or validation budget."
|
||||
},
|
||||
{
|
||||
"rule": "fail-closed-is-supported-coverage",
|
||||
"description": "Structured fail-closed should be represented as framework-supported but not execution-passed."
|
||||
},
|
||||
{
|
||||
"rule": "host-bridge-adjudication-is-not-g2-g3-pass",
|
||||
"description": "Adjudicated host bridge scenes must remain host-bridge classified unless a later implementation closes their original expected contract."
|
||||
}
|
||||
],
|
||||
"timeoutHygieneRepresentation": {
|
||||
"preserveRawSourceUnreadable": true,
|
||||
"publishHygieneAwareStatusAlongsideRawStatus": true,
|
||||
"allowedHygieneStatuses": [
|
||||
"timeout-as-pass-candidate",
|
||||
"timeout-as-fail-closed-candidate",
|
||||
"timeout-still-unreadable",
|
||||
"timeout-rerun-error"
|
||||
]
|
||||
},
|
||||
"structuredFailClosedRepresentation": {
|
||||
"recognizedAsFrameworkCoverage": true,
|
||||
"recognizedAsExecutionPass": false,
|
||||
"requiresNamedBlocker": true,
|
||||
"requiresDiagnosticPayload": true
|
||||
},
|
||||
"completionCriteria": {
|
||||
"promotionThresholdsExplicit": true,
|
||||
"timeoutHygieneRepresentationExplicit": true,
|
||||
"boardUpdateRulesExplicit": true
|
||||
},
|
||||
"stopStatement": "Route 6 policy is published. Do not update the execution board under this plan."
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user