import fs from 'node:fs';
import path from 'node:path';
import vm from 'node:vm';
import crypto from 'node:crypto';
import { WORKSHOP_OUTPUTS } from '../src/core/workshop-outputs.js';
// Local editorial build only. Existing sealed archives and online release metadata stay intact.
const root = path.resolve('docs/workshop-final-local-20261110');
const manual = path.join(root, 'manual');
fs.mkdirSync(manual, { recursive: true });
const source = path.resolve('docs/workshop-manual-20261109');
const scope = { window: {} };
vm.runInNewContext(fs.readFileSync(path.join(source, 'content.js'), 'utf8'), scope);
const data = scope.window.WORKSHOP_MANUAL_DATA;
data.release.contentVersion = 'r11-local';
data.release.installVersion = 'r10';
data.release.deploymentStatus = 'local-only';
data.common = `使用康师傅产品创新工作坊 Skill,沿本组课题、已知约束与前序成果完成当前环节。先恢复已有信息,只追问会改变本节判断的一到三个业务条件;产品、规格、价格和评价等可查事实由你查证,不把研究方案设计交给员工填写。
先拆题并提出可检验的解释,再用已有材料核对,针对决定性缺口和反证补充研究、修订结论。具体说明依据属于谁、何种情境、哪款产品;用户需求、商品宣称、产品实测和研究设想分别使用。不以资料数量、漂亮图表或泛泛“继续调研”代替判断。
先回答本节业务问题,再展示能支持讨论的比较:改变什么、预期改善什么、保留什么、付出什么代价,哪项观察会改变选择。结论随本组目标、条件和证据而变;新条件出现时只修订受影响判断,保留原约束。没有足够依据选定方向时,给条件式建议与决定性未知,不代员工选择。
交齐下列实质成果。按 Skill 的“七类产出与成果导航”将已有内容定位到报告章节,不造空报告凑数。沿实际通道保存并核正文、版本、来源和归属;未接通则交可用本地成果与真实状态。末尾留简短接续摘要:本组问题与约束、关键判断、真实成果引用、未决项及下一节输入。本轮停在当前环节。`;
data.steps.find(s => s.id === 'proposal').checks.push('负责人能沿七类导航找到具体正文;缺项、过程材料与独立方案保存状态据实标明。');
data.steps.find(s => s.id === 'voc').task += ' 有社媒原件时另保留其场景需求和来源;仅有电商评论时明确社媒缺项,不混用平台或推定品牌归属。';
fs.writeFileSync(path.join(manual, 'content.js'), 'window.WORKSHOP_MANUAL_DATA = ' + JSON.stringify(data, null, 2) + ';\n');
for (const name of ['manual.css', 'manual.js', 'index.html']) fs.copyFileSync(path.join(source, name), path.join(manual, name));
let index = fs.readFileSync(path.join(manual, 'index.html'), 'utf8');
index = index.replace('工作坊操作手册', '操作手册 · 本地定稿')
.replace('康师傅产品创新工作坊 · 操作手册', '联合优化稿 r11-local · 当前线上安装资源 r10 · 本稿尚未发布');
fs.writeFileSync(path.join(manual, 'index.html'), index);
let js = fs.readFileSync(path.join(manual, 'manual.js'), 'utf8');
js = js.replace("const storageKey = 'ksf-workshop-manual-r1-20261109';", "const storageKey = 'ksf-workshop-manual-r11-local-20261110';");
fs.writeFileSync(path.join(manual, 'manual.js'), js);
const safeScript = value => value.replace(/<\/script/gi, '<\\/script');
const standalone = index.replace('', '')
.replace('', '')
.replace('', '')
.replace('