generated-scene: add scheduled monitoring runtime and helper lifecycle hardening

This commit is contained in:
木炎
2026-05-06 09:47:12 +08:00
parent 6cdd71b682
commit 8162118e6d
183 changed files with 103674 additions and 130 deletions

View File

@@ -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");

View File

@@ -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![

View File

@@ -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(

View 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>

View 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."
]
}

View File

@@ -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."
}
]
}

View 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."
}

View 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."
}

View 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."
]
}

View 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."
}

View 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."
]
}

View 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."
]
}

View 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"
}
]
}

View File

@@ -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>

View 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"
}
]
}

View 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."
]
}

View 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
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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."
]
}

View 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>

View 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>

View 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>

View 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."
}

View 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."
]
}

View 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>

View 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>

View 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>

View 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>

View 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>

View 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."
}

View 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"
}
]
}

View 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>

View 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."
]
}

View 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"
}

View 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"
}

View 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>

View 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"
}
]
}

View 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"
}
}

View 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."
]
}

View 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."
]
}

View 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."
]
}

View 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."
]
}

View 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."
]
}

View 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."
]
}

View 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>

View 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>

View 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>

View File

@@ -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"
]
}

View File

@@ -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"
}

View File

@@ -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."
}

View File

@@ -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"
]
}

View File

@@ -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"
}

View 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"
]
}
]
}

View File

@@ -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"
]
}

View File

@@ -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": []
}

View File

@@ -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"
]
}

File diff suppressed because it is too large Load Diff

View 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."
]
}

View 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."
}
]
}

View 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": ""
}
]
}

View 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."
]
}

View 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."
}
]
}

View 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."
]
}

View File

@@ -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"
}

View 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"
}

View 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"
}
]
}

View 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"
}

View 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"
}

View 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>

File diff suppressed because it is too large Load Diff

View 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.

View 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 }
]
}
}

View 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 }
]
}
}

View 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 }
]
}
}

View 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"
]
}
]
}

View 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"
]
}
]
}

View 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"
]
}
]
}

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View 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."
]
}

View 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."
]
}

View 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