diff --git a/README.md b/README.md index e34f2c6e..45b0a174 100644 --- a/README.md +++ b/README.md @@ -45,12 +45,20 @@ No new editor, no new CLI. Install into the host you already use — Codex, Clau [See the workflow diagram, checkpoints, and resume flow →](./docs/how-sopify-works.en.md) -## See It In Action +## Sopify in a Real Codex Workflow + +This archived workflow shows Sopify running inside Codex, not a scripted terminal demo. A complex request became a tracked plan; an audit concern triggered a decision checkpoint; after the user approved a minimal fix, the verification evidence was recorded and the plan was archived.

- Sopify demo — Analysis on Claude Code, then resume on Codex CLI + Sopify in a real Codex workflow: a request becomes a plan, an audit concern stops for the user's decision, and the minimal fix and verification evidence are recorded before archive

+- **Plan first** — Codex did not start coding immediately; it first captured the goal, boundaries, and verification steps in a tracked plan. +- **Stop for a decision** — the first audit found one concern; work paused for the user, then only a minimal identity check was added. +- **Close with evidence** — the second audit found no open risk; 5 protocol checks and 55 targeted tests with 48 subtests were recorded before archive. + +The real task was an optional verifier integration. The animation explains how Sopify managed it; the archived files show what happened: [plan](./.sopify/history/2026-07/20260718_evidentloop_optional_audit_integration/plan.md) · [verification receipt](./.sopify/history/2026-07/20260718_evidentloop_optional_audit_integration/receipts/verify_001.json) · [final receipt](./.sopify/history/2026-07/20260718_evidentloop_optional_audit_integration/receipts/final.json). + ## Quick Start ```bash diff --git a/README.zh-CN.md b/README.zh-CN.md index b5230018..d5439626 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -45,12 +45,20 @@ Sopify 把方案和验证收据保存在 `.sopify/` 中,作为可纳入 git [查看工作流图、checkpoint 与恢复流程 →](./docs/how-sopify-works.md) -## 实战演示 +## Sopify 在真实 Codex 任务中如何运行 + +下面展示的是 Sopify 在一次真实 Codex 任务中的运行过程,不是编排好的终端演示。复杂需求先沉淀为方案;审计发现问题时流程停车;用户裁定后再做最小修正,并把验证结果写入收据后归档。

- Sopify 演示 — 在 Claude Code 分析设计,然后在 Codex CLI 恢复开发 + Sopify 在真实 Codex 任务中的运行过程:需求形成方案,审计发现问题后等待用户裁定,最小修正和验证证据写入收据后再归档

+- **先形成方案** — Codex 没有直接改代码,而是先把目标、边界和验证步骤写入可追踪方案。 +- **发现问题就停车** — 首次审计发现一项风险;流程等待用户裁定,随后只补最薄的身份校验。 +- **有证据再收口** — 复审确认没有开放风险;最终收据记录 5 项协议检查、55 项定向测试和 48 项子测试,随后才归档。 + +真实任务是一次可选验证器接入。动效解释 Sopify 如何管理这项工作,归档文件记录实际过程:[方案](./.sopify/history/2026-07/20260718_evidentloop_optional_audit_integration/plan.md) · [验证收据](./.sopify/history/2026-07/20260718_evidentloop_optional_audit_integration/receipts/verify_001.json) · [最终收据](./.sopify/history/2026-07/20260718_evidentloop_optional_audit_integration/receipts/final.json)。 + ## 快速开始 ```bash diff --git a/assets/demo-en.svg b/assets/demo-en.svg deleted file mode 100644 index 3373cba4..00000000 --- a/assets/demo-en.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - ✱ sopify - - - Claude Code - Sonnet 4.6 · ~/code/sopify - - - - > ~go Add Copilot trigger wiring to the installer - - - [sopify-ai] Analysis ? - - - Score: 5/10 — two behaviors unspecified - - - 1. Trigger entry: instruction-only, or workspace marker + instruction? - 2. .copilot/ directory: overwrite if exists, or merge? - - - - > instruction + marker; merge with existing .copilot/ - - - [sopify-ai] Design - - - Plan: .sopify/plan/20260530_copilot_trigger/ - Tasks: 3 items - Quality: 9/10 | Readiness: 8/10 - - - - sopify - Sonnet 4.6 - - - - - - - - ⏸ 1 day later · different machine - switching from Claude Code → Codex CLI - - - - - - - - - - - - - - sopify — codex — 119×30 - - - - >_ OpenAI Codex - model: gpt-5.5 /model to change - directory: ~/code/sopify - - - - > ~go - - - [sopify-ai] Develop (resumed · checkpoint 1 → 3) - - - Completed: 3/3 tasks - - - Review: spec | code quality - - - Changes: 4 files - - - installer/copilot/trigger.py - - installer/copilot/templates/instructions.md - - scripts/install-sopify.sh - - tests/test_copilot_trigger.py - - - Next: Please verify the feature - - - - > - - - - diff --git a/assets/readme-visuals/codex-dogfood.gif b/assets/readme-visuals/codex-dogfood.gif new file mode 100644 index 00000000..bb6b65ba Binary files /dev/null and b/assets/readme-visuals/codex-dogfood.gif differ diff --git a/assets/readme-visuals/codex-dogfood.json b/assets/readme-visuals/codex-dogfood.json new file mode 100644 index 00000000..1f6595c5 --- /dev/null +++ b/assets/readme-visuals/codex-dogfood.json @@ -0,0 +1,51 @@ +{ + "schema_version": 1, + "mode": "architecture", + "template_type": "architecture", + "style": 7, + "motion_scene": "token-stream", + "quality_profile": "showcase", + "width": 960, + "height": 700, + "title": "Sopify in Codex · 真实运行流程", + "subtitle": "plan / 方案 → decision / 用户裁定 → evidence / 证据收口", + "caption": "Animated reconstruction from archived plan and receipts. The animation explains the flow; linked artifacts are the evidence. / 基于归档方案与收据的动效重构;动效解释流程,链接文件才是证据。", + "alt": "Sopify 在真实 Codex 任务中的运行过程:需求形成方案,审计发现问题后等待用户裁定,最小修正和验证证据写入收据后再归档。", + "containers": [ + { "id": "entry", "x": 40, "y": 120, "width": 880, "height": 110, "label": "PLAN / 方案", "stroke": "#e2e8f0", "fill": "none" }, + { "id": "runtime", "x": 40, "y": 280, "width": 880, "height": 130, "label": "BUILD / 实施", "stroke": "#e2e8f0", "fill": "none" }, + { "id": "delivery", "x": 40, "y": 450, "width": 880, "height": 140, "label": "DECIDE / 裁定", "stroke": "#e2e8f0", "fill": "none" } + ], + "nodes": [ + { "id": "app", "kind": "rect", "x": 80, "y": 156, "width": 180, "height": 54, "type_label": "REQUEST", "label": "User request / 用户需求", "fill": "#ffffff", "stroke": "#dce5e3", "flat": true }, + { "id": "sdk", "kind": "double_rect", "x": 370, "y": 156, "width": 220, "height": 54, "type_label": "CODEX", "label": "Codex plan / Codex 方案", "fill": "#ffffff", "stroke": "#10a37f" }, + { "id": "prompt", "kind": "rect", "x": 80, "y": 340, "width": 180, "height": 50, "type_label": "PROJECT", "label": "plan.md", "fill": "#ffffff", "stroke": "#dce5e3", "flat": true }, + { "id": "model", "kind": "double_rect", "x": 370, "y": 340, "width": 220, "height": 50, "type_label": "DEVELOP", "label": "Implement / 实施", "fill": "#ffffff", "stroke": "#10a37f" }, + { "id": "tools", "kind": "rect", "x": 700, "y": 340, "width": 180, "height": 50, "type_label": "EVIDENCE", "label": "Tests + release / 测试发布", "fill": "#ffffff", "stroke": "#dce5e3", "flat": true }, + { "id": "formatter", "kind": "rect", "x": 80, "y": 510, "width": 180, "height": 60, "type_label": "AUDIT", "label": "Audit report / 审计报告", "fill": "#ffffff", "stroke": "#dce5e3", "flat": true }, + { "id": "observability", "kind": "rect", "x": 390, "y": 510, "width": 180, "height": 60, "type_label": "CHECKPOINT", "label": "User decision / 用户裁定", "fill": "#ffffff", "stroke": "#dce5e3", "flat": true }, + { "id": "release", "kind": "rect", "x": 700, "y": 510, "width": 180, "height": 60, "type_label": "TRACE", "label": "Receipt + archive / 收据归档", "fill": "#ffffff", "stroke": "#dce5e3", "flat": true } + ], + "arrows": [ + { "id": "connect", "source": "app", "target": "sdk", "source_port": "right", "target_port": "left", "flow": "control", "motion_role": "connect", "motion_stage": 1, "motion_order": 0, "label": "request / 需求" }, + { "id": "prepare", "source": "sdk", "target": "prompt", "source_port": "bottom", "target_port": "top", "flow": "read", "motion_role": "prepare", "motion_stage": 2, "motion_order": 0, "label": "materialize / 落盘" }, + { "id": "invoke", "source": "prompt", "target": "model", "source_port": "right", "target_port": "left", "flow": "control", "motion_role": "invoke", "motion_stage": 3, "motion_order": 0, "label": "confirm / 确认" }, + { "id": "tool-call", "source": "model", "target": "tools", "source_port": "right", "target_port": "left", "flow": "read", "motion_role": "tool-call", "motion_stage": 4, "motion_order": 0, "label": "test + release / 验证发布" }, + { "id": "stream", "source": "model", "target": "formatter", "source_port": "bottom", "target_port": "top", "flow": "control", "motion_role": "token-stream", "motion_stage": 4, "motion_order": 1, "label": "audit / 审计" }, + { "id": "measure", "source": "formatter", "target": "observability", "source_port": "right", "target_port": "left", "flow": "feedback", "motion_role": "measure", "motion_stage": 5, "motion_order": 1, "label": "review / 裁定" }, + { "id": "govern", "source": "tools", "target": "release", "source_port": "bottom", "target_port": "top", "flow": "feedback", "motion_role": "govern", "motion_stage": 5, "motion_order": 0, "label": "gate / 门禁" }, + { "id": "promote", "source": "observability", "target": "release", "source_port": "right", "target_port": "left", "flow": "feedback", "motion_role": "promote", "motion_stage": 6, "motion_order": 0, "label": "fix + record / 修正留痕" } + ], + "legend_orientation": "horizontal", + "legend_x": 48, + "legend_y": 625, + "legend_locked": true, + "legend": [ + { "flow": "control", "label": "request / confirm / audit" }, + { "flow": "read", "label": "plan / tests" }, + { "flow": "feedback", "label": "decision / closeout" } + ], + "footer": "Animated reconstruction from archived plan and receipts · 动效解释流程,链接文件才是证据。", + "footer_x": 48, + "footer_y": 680 +} diff --git a/assets/readme-visuals/codex-dogfood.svg b/assets/readme-visuals/codex-dogfood.svg new file mode 100644 index 00000000..cc783727 --- /dev/null +++ b/assets/readme-visuals/codex-dogfood.svg @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Sopify in Codex · 真实运行流程 + plan / 方案 → decision / 用户裁定 → evidence / 证据收口 + + + + PLAN / 方案 + + + + + BUILD / 实施 + + + + + DECIDE / 裁定 + + + + + + + + + + + + + REQUEST + User request / 用户需求 + + + + + CODEX + Codex plan / Codex 方案 + + + + PROJECT + plan.md + + + + + DEVELOP + Implement / 实施 + + + + EVIDENCE + Tests + release / 测试发布 + + + + AUDIT + Audit report / 审计报告 + + + + CHECKPOINT + User decision / 用户裁定 + + + + TRACE + Receipt + archive / 收据归档 + + + + request / 需求 + + + + materialize / 落盘 + + + + confirm / 确认 + + + + test + release / 验证发布 + + + + audit / 审计 + + + + review / 裁定 + + + + gate / 门禁 + + + + fix + record / 修正留痕 + + + + + request / confirm / audit + + plan / tests + + decision / closeout + + + Animated reconstruction from archived plan and receipts · 动效解释流程,链接文件才是证据。 + + \ No newline at end of file diff --git a/scripts/check-readme-links.py b/scripts/check-readme-links.py index 06f27344..d7ec4c40 100644 --- a/scripts/check-readme-links.py +++ b/scripts/check-readme-links.py @@ -30,7 +30,7 @@ # Lock public-doc structure so CN/EN drift is caught by CI instead of by readers. EXPECTED_LEVEL2_SECTIONS = { README_FILES[0]: ( - "See It In Action", + "Sopify in a Real Codex Workflow", "Quick Start", "Why Sopify?", "Product Form", @@ -44,7 +44,7 @@ "Contributing", ), README_FILES[1]: ( - "实战演示", + "Sopify 在真实 Codex 任务中如何运行", "快速开始", "为什么选择 Sopify?", "产品形态",