合作范围确认
+范围确认单
+ 待确认 +填写左侧内容后,这里会生成你的项目确认单。
+本次包含
+尚未填写工作范围。
+修改安排
+—
+开工前请确认
+ +请回复确认
+ +diff --git a/.github/workflows/auto-company-runtime-ci.yml b/.github/workflows/auto-company-runtime-ci.yml index 8cb33ef4..4d927e6a 100644 --- a/.github/workflows/auto-company-runtime-ci.yml +++ b/.github/workflows/auto-company-runtime-ci.yml @@ -184,6 +184,10 @@ jobs: run: python3 scripts/ci/run.py shell-contracts-5 bash tests/test_auto_loop_integration.sh - name: Verify real frontend script against deterministic API fixtures run: python3 scripts/ci/run.py shell-contracts-6 node tests/test_dashboard_frontend.js + - name: Verify published example logic and syntax + run: | + python3 scripts/ci/run.py showcase-core node --test projects/scopefence/tests/scopefence-core.test.mjs projects/text-meter/tests/counts.test.js + python3 scripts/ci/run.py showcase-syntax node --check projects/scope-sheet/app.js - name: Save failure evidence if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 @@ -209,11 +213,17 @@ jobs: package-manager-cache: false - name: Install browser test dependencies run: python3 scripts/ci/run.py browser-dependencies npm ci --prefix tests/browser --ignore-scripts --no-audit --no-fund + - name: Install product screenshot dependencies + run: python3 scripts/ci/run.py media-dependencies npm ci --prefix scripts/media --ignore-scripts --no-audit --no-fund - name: Install Chromium working-directory: tests/browser run: python3 ../../scripts/ci/run.py chromium-install npx playwright install --with-deps chromium - name: Test Dashboard with a real browser and isolated server run: python3 scripts/ci/run.py dashboard-browser npm test --prefix tests/browser + - name: Verify automatic product screenshots and process cleanup + env: + AUTO_COMPANY_TEST_PRODUCT_MEDIA_BROWSER: '1' + run: python3 scripts/ci/run.py product-media python3 -m unittest discover -s tests -p test_product_media.py -v - name: Save failure evidence if: failure() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 diff --git a/.gitignore b/.gitignore index 1696ddc7..ba2f38f9 100644 --- a/.gitignore +++ b/.gitignore @@ -140,6 +140,7 @@ logs/ .auto-loop-budget-paused.* .auto-loop.env .auto-company.local +.auto-company/ .auto-company.local.* .auto-company-migrations/ .auto-loop-awake.pid @@ -160,6 +161,9 @@ projects/* # Explicitly published product examples; autonomous output stays ignored. !projects/tabledelta/ !projects/cuecheck/ +!projects/scopefence/ +!projects/text-meter/ +!projects/scope-sheet/ # Local/private outputs (do not publish) AGENTS.md @@ -212,6 +216,8 @@ docs/*/* !docs/windows-setup.md !docs/usage-governance.md !docs/runtime-observability.md +!docs/product-media.md +!docs/product-cycles.md # Ignore all memories (keep folder marker only) memories/* !memories/.gitkeep diff --git a/PROMPT.md b/PROMPT.md index d7471f63..0b9fa199 100644 --- a/PROMPT.md +++ b/PROMPT.md @@ -66,6 +66,8 @@ ## 收敛规则(强制) +下列 Cycle 1/2/3 是**新探索任务**的收敛顺序,不是每次进程启动后的业务重置。已有产品或已记录的探索任务必须接续共识中的实际进展;程序提供的产品轮次是累计工作记录,不代表业务阶段,也不规定交付必须经历多少轮。停止、重启或切换模型后,不因本次启动计数为 1 而重新选题。 + 1. **Cycle 1**:Brainstorm,每个 agent 提一个想法,结束时排出 top 3 2. **Cycle 2**:选 #1,critic-munger 做 Pre-Mortem,research-thompson 验证市场,cfo-campbell 算账。给出 GO / NO-GO 3. **Cycle 3+**:GO → 建 repo 开始写代码,禁止继续讨论。NO-GO → 试 #2,全不行就强选一个做 @@ -73,6 +75,11 @@ 5. **同一个 Next Action 连续出现 2 轮** → 卡住了,换方向或缩范围直接 ship 6. **凡是前端交付**(页面、界面、组件、dashboard、marketing site)→ 必须先使用 `frontend-design.md`,确保视觉与交互质量,不允许用通用默认风格直接输出 +## 产品页面与识别素材 + +- 前端产品优先复用已有的有效 SVG 图标;没有时提供一个简洁的 `icon.svg`,使用 `viewBox`、少量颜色和基础几何形状。产品页标识与 favicon 引用 Web 根目录的 `auto-company-icon.svg`:这是程序在交付或轮次结束时写入的已验证图标,勿手动创建或修改。不要使用脚本、外部资源、嵌入 HTML 或复杂滤镜,不调用专用生图模型。程序会校验输入图标,缺失或无效时使用默认图标;图标问题不阻断功能交付。 +- 程序会在轮次收尾与交付文档登记后截取实际页面。根目录 `index.html` 的静态 Web 产品无需另写截图命令;其他受支持入口按 `docs/product-media.md` 声明固定预览配置及必要的展示步骤。非界面产品声明不适用,不编造页面。截图失败不代表功能检查失败,也不能用概念图代替实拍。 + ## 人工治理与项目边界(强制) 1. `Human Overrides` 是人类专属区,必须逐字保留;任何改动都会触发整轮共识回滚并暂停循环。 diff --git a/README-ZH.md b/README-ZH.md index 1916c0e0..2e5b2768 100644 --- a/README-ZH.md +++ b/README-ZH.md @@ -23,9 +23,24 @@ ## 看板预览 - +[](presentation/dashboard-showcase.png) -新版看板用纵向时间轴串联各轮次,展示简洁工作记录、检查结果、交付成果、用量与日志。截图使用 Outline Desk 连续三轮的真实记录,以只读归档模式展示。标题和摘要来自模型按固定格式填写的工作记录;运行事实和已接入检查的结果由程序记录。缺失或过期的信息明确标注,已记录用量不等于完整账单。采集约定与支持范围见[运行记录说明](docs/runtime-observability.md)。 +ScopeFence 的真实四轮产品记录:04 展开,03、02、01 逐项收起且全部可见;立项前探索单独保留。看板展示工作汇报、检查、文档、实拍、用量与日志。标题和摘要仍是模型填写的记录,运行事实与支持的检查结果由程序采集;缺失、失败、过期和部分用量明确标注。支持范围见[运行记录](docs/runtime-observability.md)、[连续轮次](docs/product-cycles.md)和[自动实拍](docs/product-media.md)说明。 + +
| Text Meter · English | +范围确认单 / Scope Sheet · 中文 | +
|---|---|
![]() |
+ ![]() |
+
| 两次启动的两个产品轮次,编号从 01 延续到 02。 | +四个产品尝试;两次模型容量错误保留为失败,后续成功记录照常呈现。 | +
项目单 · 01
+给独立设计师与剪辑师
+填好左侧信息,右侧会同步生成一张可以直接发给客户的范围确认单。
+合作范围确认
+填写左侧内容后,这里会生成你的项目确认单。
+本次包含
+尚未填写工作范围。
+修改安排
+—
+开工前请确认
+ +请回复确认
+ +02 / 发送
+发送前校对:请补齐项目、服务、范围、修改、交付、日期和报价。
+ +INSIDE THE FENCE
${escapeHtml(receipt.change)}
${receipt.context ? `${escapeHtml(receipt.context)}
` : ""}THE NEW WORK CHANGES
SCOPE DECISION / 01
Turn a post-call change into one plain-English decision your client can open without an account.
${receipt.sample ? "SAMPLE — NOT A LIVE CLIENT DECISION" : "SCOPE RECEIPT / READY TO DECIDE"}
Read the change and its impact. Then make one clear choice.
THE DECISION
Your selection can be carried in an updated link and returned to the freelancer. The link is editable and is not a signed or independently verified approval record.
RETURN THE LINK COPY
Paste it into the same email or message thread. It carries your selected response, but it is editable and is not independently verified.
CONFIRM ${action.toUpperCase()}
${decision === "approved" ? `You are confirming ${formatPrice(receipt.price)} and ${formatDays(receipt.days)}.` : "The freelancer will see that this change is not approved."}
`; + document.querySelector("#confirm-decision").focus(); + document.querySelector("#confirm-decision").addEventListener("click", () => finalizeDecision(receipt, decision)); + document.querySelector("#cancel-decision").addEventListener("click", () => showReceipt(receipt)); +} + +function finalizeDecision(receipt, decision) { + const finalized = { ...receipt, decision, decidedAt: new Date().toISOString() }; + const link = linkFor(finalized); + history.replaceState({}, "", `#r=${encodeReceipt(finalized)}`); + app.innerHTML = `${wordmark()}DECISION LINK COPY CREATED
${escapeHtml(finalized.project)} · ${formattedTime(finalized.decidedAt)}
DECISION LINK COPY
The encoded link includes a selection timestamp of ${formattedTime(receipt.decidedAt)}. It is not signed or independently verified.
PORTABLE COPY
Anyone with the link can alter its encoded data. Confirm the choice in the original conversation before relying on it.
Local only. Nothing is saved.
+A small instrument for writing
+Paste a draft, shape a sentence, or check a limit. The figures update with every keystroke.
+There is nothing to count yet.
+