@adamchanadam/cer-workflow 0.3.17 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +209 -23
- package/package.json +1 -1
- package/skills/cer-workflow/VERSION +1 -1
- package/skills/cer-workflow/references/core-runtime.md +4 -2
- package/skills/cer-workflow/references/uat.md +10 -0
- package/skills/cer-workflow/scripts/validate_cer_skill.py +69 -0
- package/skills/cer-workflow-en/VERSION +1 -1
- package/skills/cer-workflow-en/references/core-runtime.md +4 -2
- package/skills/cer-workflow-en/references/uat.md +10 -0
- package/skills/cer-workflow-en/scripts/validate_cer_skill.py +69 -0
package/README.md
CHANGED
|
@@ -2,57 +2,243 @@
|
|
|
2
2
|
|
|
3
3
|
Installable npm package for the CER Workflow Codex skills.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
CER = Controller, Executor, Reviewer.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- npm support is an installability layer for future users. It does not change CER runtime behavior.
|
|
9
|
-
- Validator, package, and install checks do not by themselves prove manual UAT pass, token saving, or universal task quality.
|
|
7
|
+
CER is a workflow skill for Codex. It does not replace ordinary chat, and it does not replace Goal. Use ordinary chat for small tasks. Use Goal when Codex needs to keep working across multiple steps and the endpoint is clear. Use CER when the task is not fully settled, or when you need mid-work decisions, role boundaries, or independent review.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
In plain language: when you discover halfway through that the direction, constraints, or risk has changed, CER brings that change back to you before assigning the next batch of work. It is for tasks where the human and the AI need to make decisions together. It is not worth using for every small task.
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
- `skills/cer-workflow-en`: English installable Skill package.
|
|
15
|
-
- `bin/cer-workflow.mjs`: small local helper for package inspection and explicit-target install tests.
|
|
11
|
+
If you do not want to choose between ordinary chat, Goal, and CER up front, use `/CER-auto <task>` after installation. It first selects the minimum sufficient route: ordinary execution, Goal, CER Workflow, or blocked because authority, safety, or acceptance conditions are missing.
|
|
16
12
|
|
|
17
|
-
|
|
13
|
+
[Traditional Chinese README](https://github.com/Adamchanadam/cer-workflow/blob/v0.3.19/README.md) | [GitHub repository](https://github.com/Adamchanadam/cer-workflow)
|
|
14
|
+
|
|
15
|
+

|
|
18
16
|
|
|
19
17
|
## Install
|
|
20
18
|
|
|
19
|
+
Install the package:
|
|
20
|
+
|
|
21
21
|
```sh
|
|
22
22
|
npm install -g @adamchanadam/cer-workflow
|
|
23
23
|
cer-workflow help
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Then install the Skill files into your Codex Skill directory. The helper requires an explicit empty target and refuses to overwrite existing files.
|
|
27
|
+
|
|
28
|
+
macOS / Linux example:
|
|
27
29
|
|
|
28
30
|
```sh
|
|
29
|
-
|
|
31
|
+
cer-workflow install --skill en --target "$HOME/.codex/skills/cer-workflow-en" --yes
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
Windows PowerShell example:
|
|
33
35
|
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
npm run pack:dry-run
|
|
36
|
+
```powershell
|
|
37
|
+
cer-workflow install --skill en --target "$env:USERPROFILE\.codex\skills\cer-workflow-en" --yes
|
|
37
38
|
```
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
Traditional Chinese Skill:
|
|
40
41
|
|
|
41
42
|
```sh
|
|
42
|
-
|
|
43
|
+
cer-workflow install --skill zh --target "<your-skill-root>/cer-workflow" --yes
|
|
43
44
|
```
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
If your Codex setup uses another Skill root such as `.agents/skills`, use that root instead. If the target directory already contains files, stop and inspect it first; the helper does not overwrite, delete, migrate, or back up an existing Skill directory.
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
For one-off inspection without a global install:
|
|
48
49
|
|
|
49
50
|
```sh
|
|
50
|
-
npx cer-workflow
|
|
51
|
-
|
|
51
|
+
npx @adamchanadam/cer-workflow inspect
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## If You Are Not Sure Which Mode To Use
|
|
55
|
+
|
|
56
|
+
Use:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
/CER-auto <goal, constraints, priorities>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
A stronger task shape is: `goal + constraints/do-not-do + acceptance + authority/source/authorization boundary`. Examples do not need to use a fixed domain; Codex should adapt the wording to your background, material, and current work.
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
/CER-auto help me compare/organize/fix <my material or problem>; do not <forbidden action>; success means <verifiable output>; before a formal decision, payment, publication, or external commitment, stop and use CER Workflow.
|
|
52
66
|
```
|
|
53
67
|
|
|
54
|
-
|
|
68
|
+
Codex first replies with one route:
|
|
69
|
+
|
|
70
|
+
- `ordinary execution`: the task is small, clear, reversible, and ordinary chat is enough.
|
|
71
|
+
- `Goal`: the task is longer, and the endpoint plus verification loop are clear.
|
|
72
|
+
- `CER Workflow`: the result will be used as official data, report text, model input, handoff truth, release/readiness evidence, or a public/external claim, so full CER handles the acceptance.
|
|
73
|
+
- `blocked`: authority, safety, acceptance conditions, permissions, or external-action authorization are missing, so Codex must not pretend the task passed.
|
|
74
|
+
|
|
75
|
+
New users should start with `/CER-auto`. If it returns ordinary execution or Goal, there is no C/E1/R. If it returns CER Workflow, it enters full CER, with R only when risk requires it. If you already know you need the full CER workflow, use `/CER-start` directly; it has not been replaced and remains available for explicitly full CER work.
|
|
76
|
+
|
|
77
|
+
## What You See When CER Starts
|
|
78
|
+
|
|
79
|
+
When CER starts, the Controller first shows a startup card and a roadmap. The tasks in the left sidebar are named with C / E1 / R, so you can tell which task coordinates, which one writes, and which one reviews in read-only mode. The inline roadmap in the main chat shows the current stage, confirmed context, and the next checkpoint.
|
|
80
|
+
|
|
81
|
+

|
|
82
|
+
|
|
83
|
+
## Choose First
|
|
84
|
+
|
|
85
|
+
If you are not sure, start with `/CER-auto`; this is a simple guide for choosing manually. The Skill still decides the actual route from the task's consequences, authority, and acceptance conditions.
|
|
86
|
+
|
|
87
|
+
Use ordinary chat when:
|
|
88
|
+
|
|
89
|
+
- You need a one-off summary, translation, formatting pass, or small edit.
|
|
90
|
+
- You only need a short result, not long-running Codex work.
|
|
91
|
+
|
|
92
|
+
Use Goal when:
|
|
93
|
+
|
|
94
|
+
- The task has several steps, but the endpoint and completion criteria are clear.
|
|
95
|
+
- For example, a clearly scoped refactor, upgrade, or test repair.
|
|
96
|
+
- You know the endpoint, even if implementation details may change.
|
|
97
|
+
- You want Codex to keep moving with less management from you.
|
|
98
|
+
|
|
99
|
+
Use CER when:
|
|
100
|
+
|
|
101
|
+
- The direction is not fully settled, and the tradeoffs only become clear during the work.
|
|
102
|
+
- The work affects public content, workflow design, drift-prone areas, or long-running work that needs mid-work decisions, official acceptance, or independent review.
|
|
103
|
+
- You need mid-work decisions, clear role boundaries, or independent review on important or risky work.
|
|
104
|
+
|
|
105
|
+
Examples:
|
|
106
|
+
|
|
107
|
+
- "Turn these meeting notes into a one-page summary": use ordinary chat.
|
|
108
|
+
- "Translate one English paragraph into Traditional Chinese while keeping the meaning": use ordinary chat.
|
|
109
|
+
- "Upgrade the project to a newer framework version, preserve existing behavior, fix compatibility issues, and run tests": use Goal.
|
|
110
|
+
- "Build a CSV import feature from an existing spec, add tests, and make CI pass": use Goal.
|
|
111
|
+
- "Design an internal knowledge-base workflow for a support team; halfway through, we need to check whether the categories, permissions, and usage flow make sense": use CER.
|
|
112
|
+
- "Rework a public product page; the copy, screenshots, risk claims, and acceptance standard may need to change after the first preview": use CER.
|
|
113
|
+
|
|
114
|
+
Editing a README is not automatically a CER task. Consider CER only when public positioning, bilingual text and visuals, release impact, handoff, or independent review are part of the real work.
|
|
115
|
+
|
|
116
|
+
## When The Plan Changes During The Work
|
|
117
|
+
|
|
118
|
+
Goal and CER can both start from a short request. Both let you add information, change constraints, and check progress while the work is running. The difference is how they handle things that only become clear halfway through.
|
|
119
|
+
|
|
120
|
+
Goal keeps moving inside the same target. You can add context in the same chat, use Steer to change the current work, use Queue for the next turn, or ask for a progress recap. When Codex needs a decision or approval, it pauses and asks. This suits tasks where the target is clear and only the implementation path changes as Codex learns more.
|
|
121
|
+
|
|
122
|
+
CER puts the new discovery in front of the Controller before the next batch is assigned. The Controller separates what is confirmed, what is only a safe assumption, and what gap would change the result. It only sets the next batch that is safe to run. If a test result, tool response, user correction, or Reviewer finding changes the direction, scope, deliverable shape, or acceptance standard, the Controller updates the roadmap before sending the next batch.
|
|
123
|
+
|
|
124
|
+
The difference is the working style:
|
|
125
|
+
|
|
126
|
+
- Goal: the AI adjusts the next step inside the same target.
|
|
127
|
+
- CER: the workflow brings result-changing discoveries back for a decision before the next batch.
|
|
128
|
+
|
|
129
|
+
## Long-Task Drift Protection
|
|
130
|
+
|
|
131
|
+
In long-running work, CER is not just "send work out and read the result back." The Controller keeps the original accepted outcome in view. When a new test result, new source, or Reviewer finding would change direction, it first separates an original acceptance defect, a necessary blocker, and an adjacent improvement. Only issues that affect safe acceptance of the original outcome enter the mainline. Other improvements are listed separately instead of becoming the next batch automatically. This is meant to stop long tasks from widening, moving the finish line, or spending tokens on side paths that do not change the delivered result.
|
|
132
|
+
|
|
133
|
+
The full Skill currently has 12 related guardrails. The README only shows the 5 a user is most likely to notice:
|
|
134
|
+
|
|
135
|
+
- Outcome anchor: keep the real endpoint in view.
|
|
136
|
+
- Classify new discoveries first: separate acceptance defects, necessary blockers, and adjacent improvements.
|
|
137
|
+
- Adjacent improvements do not automatically become the mainline: keep the task from widening.
|
|
138
|
+
- Group same-cause fixes: avoid chasing review comments one sentence at a time.
|
|
139
|
+
- Progress is not the same as activity: candidates, reviews, and passing format checks do not automatically count as completion.
|
|
55
140
|
|
|
56
|
-
##
|
|
141
|
+
## Goal And CER: 10 Practical Differences
|
|
142
|
+
|
|
143
|
+
| # | Point of comparison | Goal | CER | How most users should read it |
|
|
144
|
+
|---:|---|---|---|---|
|
|
145
|
+
| 1 | First prompt | The `/goal` text becomes both the first prompt and the completion criteria. If the direction is still unclear, you can use `/plan` first. | The Controller separates confirmed facts, safe assumptions, and critical gaps. It asks before delegating when a gap would materially change the result. | Use ordinary chat for small tasks; use Goal only when the clear endpoint needs multiple steps. |
|
|
146
|
+
| 2 | Working rhythm | Codex keeps moving toward the same Goal, which suits long tasks that need less intervention. | The Controller divides the work into reviewable batches and decides the next batch after reading back the current one. | Use Goal for a clear target; use CER when batches need checkpoints. |
|
|
147
|
+
| 3 | Feedback during the work | In the same chat, Steer can change the current run and Queue can hold a message for the next run. You can also pause or edit the Goal. | You give feedback to the Controller. It identifies the affected scope, updates the roadmap, and sends a new batch to the same Executor. | Goal handles normal added context; CER is clearer when feedback changes direction. |
|
|
148
|
+
| 4 | Progress display | The desktop app shows a Goal progress row, and you can ask Codex for a progress recap. | Long or multi-stage work uses a CER roadmap showing the current stage, accepted results, blockers, and the next user checkpoint. | CER is clearer when checkpoints matter. |
|
|
149
|
+
| 5 | Previews and checkpoints | You can ask to inspect, explain, or adjust the work at any time. Preview timing usually comes from the prompt or the immediate need. | The roadmap marks points that need a preview or decision. When direction, deliverable shape, or acceptance changes, it shows what changed. | Use CER when you need to see intermediate work before deciding. |
|
|
150
|
+
| 6 | Your place in the workflow | You set the Goal and can intervene at any time, while Codex chooses the next step. It pauses when it needs a decision or approval. | You mainly stay in the Controller chat, adding requirements or changing direction after seeing intermediate work. The Controller carries those decisions into the implementation track. | Use Goal when you want less management; use CER when you want clearer decision points. |
|
|
151
|
+
| 7 | Task and agent structure | The main chat can work alone or use native, sidebar-visible subagents. Roles and handoffs depend on the task. | Each cycle has a fixed C for coordination and the same E1 for file changes. A fresh, read-only R is created only when risk warrants it. | Use CER when role boundaries and handoff clarity matter. |
|
|
152
|
+
| 8 | File ownership | The main agent or a subagent used for the task may make changes. Parallel work must avoid writing to the same source. | Only E1 writes files during a cycle. C and R stay read-only, avoiding concurrent changes from different roles. | Use CER when you want to avoid multiple roles writing at once. |
|
|
153
|
+
| 9 | Independent review | You can request a review, such as `/review`, or ask a subagent to check the work, but it is not a fixed part of every Goal. | A fresh R is used only for important, high-risk work or when independent evidence is needed. C groups the findings and returns them to the same E1. | Use CER for risky or public deliverables. |
|
|
154
|
+
| 10 | Best fit | The endpoint is stable, the completion criteria can be stated clearly, and Codex needs to keep working across multiple steps. | The task is not fully settled, or it needs mid-work decisions, role boundaries, or independent review. | Neither replaces the other; choose by task. |
|
|
155
|
+
|
|
156
|
+
The Goal details above follow OpenAI's [Long-running work](https://learn.chatgpt.com/docs/long-running-work), [Prompting](https://learn.chatgpt.com/docs/prompting), and [Subagents](https://learn.chatgpt.com/docs/agent-configuration/subagents) documentation. The CER details follow this package's [Controller Preflight](skills/cer-workflow-en/references/core-runtime.md#controller-preflight), [Execution Loop](skills/cer-workflow-en/references/core-runtime.md#execution-loop), and [inline roadmap](skills/cer-workflow-en/references/roadmap.md#two-different-surfaces).
|
|
157
|
+
|
|
158
|
+
## CER Roles
|
|
159
|
+
|
|
160
|
+

|
|
161
|
+
|
|
162
|
+
**Controller (C): coordination and decisions**
|
|
163
|
+
|
|
164
|
+
Understands the goal, constraints, and completion criteria; assigns work and judges results. The Controller does not modify project files.
|
|
165
|
+
|
|
166
|
+
**Executor (E1): implementation and file changes**
|
|
167
|
+
|
|
168
|
+
The only role that modifies files. It implements in batches, tests, and returns candidate results with evidence. The same E1 stays in use throughout one CER cycle, so file changes do not come from several roles at once.
|
|
169
|
+
|
|
170
|
+
**Reviewer (R1): independent review**
|
|
171
|
+
|
|
172
|
+
An independent Codex task that checks in read-only mode, gives conclusions, and does not write files. It is used only for important or high-risk work, or when independent verification is needed.
|
|
173
|
+
|
|
174
|
+
Sidebar labels such as `C:01`, `E1:01`, and `R1:01` mark the roles in the same CER cycle.
|
|
175
|
+
|
|
176
|
+
## Advanced: Exploration Helpers
|
|
177
|
+
|
|
178
|
+
This section applies only after CER has started, or after `/CER-auto` has selected CER Workflow. Ordinary execution and Goal do not start CER Exploration Helpers.
|
|
179
|
+
|
|
180
|
+
Exploration Helpers are not a fourth formal role. The formal roles remain Controller, Executor, and Reviewer.
|
|
181
|
+
|
|
182
|
+
Medium and large tasks sometimes need several kinds of preparation at once: finding information, comparing options, sketching interface directions, or spotting likely risks. If the Controller handles all of that one item at a time, the early analysis can slow down the workflow. When it is useful, the Controller may start a small number of Exploration Helpers to organize candidate information before the Controller checks, deduplicates, and decides.
|
|
183
|
+
|
|
184
|
+
Exploration Helpers only produce candidate material. They do not modify the project, replace the Executor or Reviewer, or declare the work complete. The Controller decides whether to start them based on task size, source clarity, and whether parallel preparation is actually useful. The complete conditions live in the [complete Exploration Helper rules](skills/cer-workflow-en/references/parallel-producers.md#activation-eligibility).
|
|
185
|
+
|
|
186
|
+

|
|
187
|
+
|
|
188
|
+
## Commands
|
|
189
|
+
|
|
190
|
+
| Command | Natural language | Use |
|
|
191
|
+
|---|---|---|
|
|
192
|
+
| `/CER-auto <task, constraints, priorities>` | `Run CER adaptively: ...` | Select the minimum sufficient route first: ordinary execution, Goal, CER Workflow, or blocked; CER Workflow enters full C/E/R, with R only when risk requires it. |
|
|
193
|
+
| `/CER-start <task, constraints, priorities>` | `Start CER: ...` | Start CER, with the Controller coordinating the work. |
|
|
194
|
+
| `/CER-stop` | `Stop CER and continue in one ordinary conversation.` | Stop using CER and stop assigning new Executor or Reviewer work; this does not mean the task is complete. |
|
|
195
|
+
| `/CER-close` | `Close CER.` | Formally end this CER cycle; summarize the result, risks, and remaining work. |
|
|
196
|
+
| `/CER-status` | `Show CER status.` | Show current progress, the next stopping point, and known issues. |
|
|
197
|
+
| `/CER-help` | `Show CER commands.` | Show the commands and `/CER-auto` task shape. |
|
|
198
|
+
|
|
199
|
+
A plain close/finish message does not close CER and is not treated as `/CER-stop`.
|
|
200
|
+
|
|
201
|
+
## How CER Works
|
|
202
|
+
|
|
203
|
+
1. You give the task to the Controller, including the goal, constraints, and priorities.
|
|
204
|
+
2. The Controller confirms the completion criteria, sources, and stopping points, then sets only the next batch that is safe to run.
|
|
205
|
+
3. The Executor changes files, tests the work, and returns candidate results with evidence to the Controller.
|
|
206
|
+
4. For important or risky work, the Controller asks the Reviewer to perform an independent read-only check.
|
|
207
|
+
5. The Controller groups issues, decides what should be fixed, and returns the result, risks, and decisions that need you.
|
|
208
|
+
|
|
209
|
+
Issues with the same cause are grouped into one batch and sent back to the same Executor. The scope widens only for a different problem, a new effect, or a new risk.
|
|
210
|
+
|
|
211
|
+
When CER starts, it first confirms that the working tasks can return messages to each other. If that cannot be confirmed, CER stops and tells you instead of pretending it has started.
|
|
212
|
+
|
|
213
|
+
## Stop Versus Close CER
|
|
214
|
+
|
|
215
|
+
`/CER-stop` stops using CER and returns to one ordinary conversation. It means the Controller will not assign new Executor or Reviewer work; it does not mean the task is complete.
|
|
216
|
+
|
|
217
|
+
`/CER-close` formally ends this CER cycle. The Controller summarizes the result, risks, and remaining work, and confirms that the Executor has stopped writing. After close, the old C/E/R tasks are history only; the next cycle uses new role tasks.
|
|
218
|
+
|
|
219
|
+
## Package Boundary
|
|
57
220
|
|
|
58
221
|
This package is a distribution wrapper for the included Skill packages. Public runtime behavior remains owned by the Skill files and their references.
|
|
222
|
+
|
|
223
|
+
Package version `0.3.19` matches the included CER Workflow Skill runtime VERSION files. npm support is an installability and onboarding layer for future users. It does not change CER runtime behavior. Validator, package, and install checks do not by themselves prove manual UAT pass, token saving, or universal task quality.
|
|
224
|
+
|
|
225
|
+
Packaged surfaces:
|
|
226
|
+
|
|
227
|
+
- `skills/cer-workflow`: Traditional Chinese installable Skill package.
|
|
228
|
+
- `skills/cer-workflow-en`: English installable Skill package.
|
|
229
|
+
- `bin/cer-workflow.mjs`: small local helper for package inspection and explicit-target install tests.
|
|
230
|
+
|
|
231
|
+
The package whitelist intentionally excludes internal maintenance material such as `dev/`, `CER_docs/`, handoff and log files, backups, temporary evidence, local workspace paths, and cross-project comparison evidence. The diagrams in this README are loaded from released GitHub assets so the npm package remains small.
|
|
232
|
+
|
|
233
|
+
## Local Checks
|
|
234
|
+
|
|
235
|
+
```sh
|
|
236
|
+
npm run package:inspect
|
|
237
|
+
npm run pack:dry-run
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
After packing and installing the generated tarball into a temporary project, run:
|
|
241
|
+
|
|
242
|
+
```sh
|
|
243
|
+
npx cer-workflow inspect --strict-package
|
|
244
|
+
```
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.19
|
|
@@ -116,8 +116,10 @@ CER v1 接受自然語言和 slash command 兩種入口。slash command 是穩
|
|
|
116
116
|
## Controller preflight
|
|
117
117
|
|
|
118
118
|
在建立本輪 E1、復用同輪既有 E1,或派任何實際 E1/R 批次前,C 先完成適應式任務契約。它不是表格儀式;簡單低風險且終點唯一的任務可只在內部完成並以短摘要直接工作。長期、多批,或新產品、流程、設計、內容、體驗型成果,C 維護一份活的任務簡報,並把必要答案濃縮進首次公開對齊的初始路線圖與自足派工。活的任務簡報不是新 workflow,也不建立固定項目文件;它只是 C 在本輪 CER 內用來承載目前已裁決任務狀態的工作面。
|
|
119
|
-
|
|
120
|
-
C
|
|
119
|
+
|
|
120
|
+
通用任務前檢/層級對焦的唯一全域 owner 不在 CER Skill;本節只作 CER-specific mapping,不重定義該八項。C 將通用 `對準`/`失焦`/`受阻` 判斷映射到本節的 `已確認`、`可安全推定`、`關鍵缺失` 與 blocked 停點。複雜 ordinary/Goal/CER 工作法任務不得只因 route label 跳過必要層級對焦;簡單、單步、低風險且終點唯一的任務仍可內部通過,不強制顯示對焦卡。可見對焦卡、preflight、活的任務簡報或路線圖更新不計作成果進度、驗收證據或產品品質證明,也不改變 `/CER-auto` 四路線、不新增 CER role、schema、enum 或 slash command。
|
|
121
|
+
|
|
122
|
+
C 只判斷五項,每項標成 `已確認`、`可安全推定` 或 `關鍵缺失`:
|
|
121
123
|
|
|
122
124
|
- 終點:可觀察終點是甚麼,哪些明確不做。
|
|
123
125
|
- 真源:完成判斷前必讀甚麼,已讀甚麼,仍有哪些關鍵未知。
|
|
@@ -297,6 +297,10 @@ numbering 規則生效前已開始且無法可靠回推原 cycle number。cycle
|
|
|
297
297
|
- 非簡單正式實作批次在派工前,C 能逐項回答真源攝取四問:誰擁有、誰實際使用、如何生效、甚麼反例能推翻;答案只作 Controller preflight 與自足派工摘要,不建立第二個規則 owner。
|
|
298
298
|
- C 答不到真源攝取四問任一項,或答案依賴未讀必要真源時,該完成條件是 `關鍵缺失`;C 不派正式實作批次,只做必要唯讀診斷、收窄驗收範圍或停問使用者。
|
|
299
299
|
- 長期、多批、高風險或非簡單正式實作批次的正式派工包含短小 `pre_dispatch_evidence`,可讀回 `outcome_anchor` 指向、目標未完成條件、成功後成果差異、真源攝取四問摘要及來源錨點、必要真源已讀/缺失處置、工作線分類,以及 drift checkpoint 結論或未觸發理由;缺失時 E1/R 只回傳零寫入 `BATCH_BLOCKED_MISSING_PRE_DISPATCH_EVIDENCE`。
|
|
300
|
+
- 複雜 ordinary/Goal/CER 工作法任務不得只因 route label 跳過任務前檢/層級對焦;若需要可見對焦卡,它只讀並在正式計劃、寫入、派工或接納前呈現,不派批次。
|
|
301
|
+
- 簡單、單步、低風險且終點唯一的任務仍可內部快速通過,不強制顯示對焦卡或建立活的任務簡報。
|
|
302
|
+
- 對焦卡、preflight、活的任務簡報或路線圖更新不算成果進度、驗收證據或產品品質證明;技術 PASS 但沒有成果差異時,不能標為 `對準`。
|
|
303
|
+
- CER 對任務前檢只作本地映射;不得新增 slash command、role、schema 或 enum,也不得改寫 `/CER-auto` 四路線。
|
|
300
304
|
|
|
301
305
|
## Controller 長任務挑戰情景
|
|
302
306
|
|
|
@@ -452,6 +456,12 @@ numbering 規則生效前已開始且無法可靠回推原 cycle number。cycle
|
|
|
452
456
|
- C 把真源攝取門檻擴成預設全文讀取、全 repo 審查、固定 Full Audit、第二份規則 owner 或固定表格流程。
|
|
453
457
|
- 長期、多批、高風險或非簡單正式實作批次的派工包缺 `pre_dispatch_evidence`,或只寫「C 已判斷」但無可讀回摘要,E1/R 仍開始寫入、審閱或補完 C 的判斷。
|
|
454
458
|
- 關鍵終點、權限或驗收缺失時,C 不停問而直接派工。
|
|
459
|
+
- 複雜 Goal 任務只因不是 full CER 而跳過任務前檢/層級對焦。
|
|
460
|
+
- ordinary 複雜任務被規則寫成永不需要對焦。
|
|
461
|
+
- 簡單低風險單步任務被強制顯示對焦卡。
|
|
462
|
+
- 對焦卡、preflight 或活的任務簡報被算作 progress、驗收或產品品質證據。
|
|
463
|
+
- 技術 PASS 但沒有成果差異時,對焦判定仍標為 `對準`。
|
|
464
|
+
- 對焦規則在 CER 內新增 slash command、role、schema 或 enum,或改寫 `/CER-auto` 四路線。
|
|
455
465
|
- 長期多批任務未固定 `outcome_anchor`,或後續 E1/R 自行改寫最終成果、完成條件、替代成果或排除範圍。
|
|
456
466
|
- 預期成果改善為零且不是必要條件的實作批次仍被派出。
|
|
457
467
|
- 診斷、候選、審閱、格式通過、檔案一致、問題記錄、設計完成、改名或換版本被自動計作主線成果進度。
|
|
@@ -463,6 +463,41 @@ LIVING_BRIEF_FORBIDDEN = {
|
|
|
463
463
|
"r_initial_prompt_only": "R 只按最初 prompt 驗收",
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
+
TASK_PREFLIGHT_MAPPING_REQUIREMENTS = {
|
|
467
|
+
"global_owner_external": "通用任務前檢/層級對焦的唯一全域 owner 不在 CER Skill",
|
|
468
|
+
"cer_mapping_only": "本節只作 CER-specific mapping",
|
|
469
|
+
"no_redefine_eight": "不重定義該八項",
|
|
470
|
+
"route_label_not_skip": "複雜 ordinary/Goal/CER 工作法任務不得只因 route label 跳過必要層級對焦",
|
|
471
|
+
"simple_no_forced_card": "不強制顯示對焦卡",
|
|
472
|
+
"card_not_progress": "對焦卡、preflight、活的任務簡報或路線圖更新不計作成果進度",
|
|
473
|
+
"auto_routes_unchanged": "不改變 `/CER-auto` 四路線",
|
|
474
|
+
"no_new_surface": "不新增 CER role、schema、enum 或 slash command",
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
TASK_PREFLIGHT_UAT_REQUIREMENTS = {
|
|
478
|
+
"complex_routes_focus": "複雜 ordinary/Goal/CER 工作法任務不得只因 route label 跳過任務前檢/層級對焦",
|
|
479
|
+
"simple_internal": "簡單、單步、低風險且終點唯一的任務仍可內部快速通過",
|
|
480
|
+
"focus_not_quality": "對焦卡、preflight、活的任務簡報或路線圖更新不算成果進度、驗收證據或產品品質證明",
|
|
481
|
+
"technical_pass_not_aligned": "技術 PASS 但沒有成果差異時,不能標為 `對準`",
|
|
482
|
+
"cer_mapping_no_surface": "CER 對任務前檢只作本地映射",
|
|
483
|
+
"failure_complex_goal_skips": "複雜 Goal 任務只因不是 full CER 而跳過任務前檢/層級對焦",
|
|
484
|
+
"failure_ordinary_never_focus": "ordinary 複雜任務被規則寫成永不需要對焦",
|
|
485
|
+
"failure_simple_forced": "簡單低風險單步任務被強制顯示對焦卡",
|
|
486
|
+
"failure_focus_progress": "對焦卡、preflight 或活的任務簡報被算作 progress、驗收或產品品質證據",
|
|
487
|
+
"failure_technical_aligned": "技術 PASS 但沒有成果差異時,對焦判定仍標為 `對準`",
|
|
488
|
+
"failure_new_surface": "對焦規則在 CER 內新增 slash command、role、schema 或 enum",
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
TASK_PREFLIGHT_FORBIDDEN = {
|
|
492
|
+
"cer_owns_general": "CER Skill 是任務前檢八項的唯一 owner",
|
|
493
|
+
"focus_progress": "對焦卡本身可增加主線成果進度",
|
|
494
|
+
"focus_enum": "任務前檢新增 `focus_status` enum",
|
|
495
|
+
"focus_command": "`/CER-focus` 是 CER slash command",
|
|
496
|
+
"auto_fifth_route": "`/CER-auto` 因對焦改成第五路線",
|
|
497
|
+
"goal_never_focus": "Goal 路線永遠不需要層級對焦",
|
|
498
|
+
"simple_always_card": "低風險單步任務必須顯示對焦卡",
|
|
499
|
+
}
|
|
500
|
+
|
|
466
501
|
OUTCOME_ANCHOR_REQUIREMENTS = (
|
|
467
502
|
"不可由後續批次自行改寫的 `outcome_anchor`",
|
|
468
503
|
"不可接受的替代成果",
|
|
@@ -1040,6 +1075,15 @@ def validate_texts(root: Path, texts: dict[str, str]) -> list[str]:
|
|
|
1040
1075
|
for label, forbidden in LIVING_BRIEF_FORBIDDEN.items():
|
|
1041
1076
|
if forbidden in core_normalized:
|
|
1042
1077
|
findings.append(f"living-brief fixed contradiction present {label}")
|
|
1078
|
+
for label, required in TASK_PREFLIGHT_MAPPING_REQUIREMENTS.items():
|
|
1079
|
+
if required not in core_normalized:
|
|
1080
|
+
findings.append(f"task-preflight CER mapping missing {label}")
|
|
1081
|
+
for label, required in TASK_PREFLIGHT_UAT_REQUIREMENTS.items():
|
|
1082
|
+
if required not in uat:
|
|
1083
|
+
findings.append(f"uat.md missing task-preflight counterexample {label}")
|
|
1084
|
+
for label, forbidden in TASK_PREFLIGHT_FORBIDDEN.items():
|
|
1085
|
+
if forbidden in normalized_markdown:
|
|
1086
|
+
findings.append(f"task-preflight fixed contradiction present {label}")
|
|
1043
1087
|
for label, forbidden in UNEXPECTED_FAILURE_FORBIDDEN.items():
|
|
1044
1088
|
if forbidden in normalized_markdown:
|
|
1045
1089
|
findings.append(f"unexpected-failure fixed contradiction present {label}")
|
|
@@ -1665,6 +1709,20 @@ def mutation_matrix(root: Path) -> tuple[int, list[str]]:
|
|
|
1665
1709
|
mutated_fragment("references/uat.md", fragment),
|
|
1666
1710
|
)
|
|
1667
1711
|
)
|
|
1712
|
+
for label, fragment in TASK_PREFLIGHT_MAPPING_REQUIREMENTS.items():
|
|
1713
|
+
cases.append(
|
|
1714
|
+
(
|
|
1715
|
+
f"task_preflight_mapping_missing_{label}",
|
|
1716
|
+
mutated_fragment("references/core-runtime.md", fragment),
|
|
1717
|
+
)
|
|
1718
|
+
)
|
|
1719
|
+
for label, fragment in TASK_PREFLIGHT_UAT_REQUIREMENTS.items():
|
|
1720
|
+
cases.append(
|
|
1721
|
+
(
|
|
1722
|
+
f"task_preflight_uat_missing_{label}",
|
|
1723
|
+
mutated_fragment("references/uat.md", fragment),
|
|
1724
|
+
)
|
|
1725
|
+
)
|
|
1668
1726
|
for label, fragment in TRUTH_SOURCE_INTAKE_UAT_REQUIREMENTS.items():
|
|
1669
1727
|
cases.append(
|
|
1670
1728
|
(
|
|
@@ -1765,6 +1823,17 @@ def mutation_matrix(root: Path) -> tuple[int, list[str]]:
|
|
|
1765
1823
|
),
|
|
1766
1824
|
)
|
|
1767
1825
|
)
|
|
1826
|
+
for label, contradiction in TASK_PREFLIGHT_FORBIDDEN.items():
|
|
1827
|
+
cases.append(
|
|
1828
|
+
(
|
|
1829
|
+
f"task_preflight_contradiction_{label}",
|
|
1830
|
+
mutated(
|
|
1831
|
+
"references/core-runtime.md",
|
|
1832
|
+
"## Controller preflight",
|
|
1833
|
+
f"## Controller preflight\n\n{contradiction}。",
|
|
1834
|
+
),
|
|
1835
|
+
)
|
|
1836
|
+
)
|
|
1768
1837
|
for label, contradiction in TRUTH_SOURCE_INTAKE_FORBIDDEN.items():
|
|
1769
1838
|
cases.append(
|
|
1770
1839
|
(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.19
|
|
@@ -115,8 +115,10 @@ Persist one short, non-authoritative route-transition checkpoint only when a tra
|
|
|
115
115
|
## Controller Preflight
|
|
116
116
|
|
|
117
117
|
Before creating this cycle's E1, reusing the existing E1 in the same cycle, or dispatching any real E1/R batch, C completes an adaptive task contract. This is not a form-filling ceremony. For simple low-risk work with one clear endpoint, C may complete it internally and proceed with a short summary. For long-running, multi-batch, or new product, flow, design, content, or experience work, C maintains a living task brief and compresses the necessary answers into a first-public-alignment roadmap and self-contained dispatch. The living task brief is not a new workflow and does not create fixed project documents; it is only C's working surface for the currently adjudicated task state inside this CER cycle.
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
|
|
119
|
+
The sole general owner for task preflight / layer focus is not the CER Skill; this section is only the CER-specific mapping and must not redefine the eight items. C maps the user-facing `aligned` / `misaligned` / `blocked` judgment to this section's `confirmed`, `safe inference`, `critical missing`, and blocked checkpoints. Complex ordinary, Goal, and CER Workflow tasks must not skip needed layer focus merely because of their route label; simple one-step low-risk work with one clear endpoint may still pass internally and must not be forced to show a focus card. A visible focus card, preflight, living task brief, or roadmap update is not outcome progress, acceptance evidence, or product-quality proof, and it must not change the four `/CER-auto` routes or add a CER role, schema, enum, or slash command.
|
|
120
|
+
|
|
121
|
+
C judges only five items, each marked `confirmed`, `safe inference`, or `critical missing`:
|
|
120
122
|
|
|
121
123
|
- Endpoint: what observable endpoint exists, and what is explicitly out of scope.
|
|
122
124
|
- Sources: what must be read before completion can be judged, what has been read, and what key unknowns remain.
|
|
@@ -355,6 +355,10 @@ cycle label or guess a number.
|
|
|
355
355
|
- Before a non-simple formal implementation batch, C can answer each truth-source intake question: who owns it, who actually uses it, how it takes effect, and what counterexample can disprove it. The answers are only a Controller preflight and self-contained-dispatch summary, not a second rule owner.
|
|
356
356
|
- If C cannot answer any truth-source intake question, or if an answer depends on an unread required source, that completion condition is `critical missing`. C does not dispatch a formal implementation batch and only performs necessary read-only diagnosis, narrows the acceptance scope, or stops for user decision.
|
|
357
357
|
- A formal packet for long-running, multi-batch, high-risk, or non-simple formal implementation work includes compact `pre_dispatch_evidence` that reads back the `outcome_anchor` pointer, target unfinished condition, expected outcome difference, truth-source intake four-question summary with source anchors, required-source read/unknown disposition, work-lane classification, and drift checkpoint conclusion or no-trigger reason; if it is missing, E1/R only returns a zero-write `BATCH_BLOCKED_MISSING_PRE_DISPATCH_EVIDENCE`.
|
|
358
|
+
- Complex ordinary, Goal, and CER Workflow tasks must not skip task preflight / layer focus merely because of their route label. When a visible focus card is needed, it is read-only and appears before formal planning, writing, dispatch, or acceptance; it does not dispatch a batch.
|
|
359
|
+
- Simple one-step low-risk work with one clear endpoint may still pass through a fast internal check and must not be forced to show a focus card or create a living task brief.
|
|
360
|
+
- A focus card, preflight, living task brief, or roadmap update is not outcome progress, acceptance evidence, or product-quality proof. When technical PASS has no outcome delta, the focus judgment cannot be `aligned`.
|
|
361
|
+
- CER only maps task preflight locally; it must not add a slash command, role, schema, or enum, and must not rewrite the four `/CER-auto` routes.
|
|
358
362
|
|
|
359
363
|
## Controller Long-Task Challenge Scenarios
|
|
360
364
|
|
|
@@ -533,6 +537,12 @@ These scenarios only test the unexpected-failure gate in
|
|
|
533
537
|
- C expands the truth-source intake gate into default full-text ingestion, whole-repo review, fixed Full Audit, a second rule owner, or a fixed form workflow.
|
|
534
538
|
- A long-running, multi-batch, high-risk, or non-simple formal implementation packet lacks `pre_dispatch_evidence`, or only says "C already judged" without readable support, and E1/R still writes, reviews, or fills in C's missing judgment.
|
|
535
539
|
- C dispatches instead of stopping when critical endpoint, permission, or acceptance information is missing.
|
|
540
|
+
- A complex Goal task skips task preflight / layer focus only because it is not full CER.
|
|
541
|
+
- A complex ordinary task is written as never needing focus.
|
|
542
|
+
- A simple low-risk one-step task is forced to show a focus card.
|
|
543
|
+
- A focus card, preflight, or living task brief is counted as progress, acceptance, or product-quality evidence.
|
|
544
|
+
- Technical PASS has no outcome delta, but the focus judgment is still marked `aligned`.
|
|
545
|
+
- A focus rule inside CER adds a slash command, role, schema, or enum, or rewrites the four `/CER-auto` routes.
|
|
536
546
|
- Long multi-batch work lacks `outcome_anchor`, or later E1/R rewrites the final outcome, completion conditions, substitute outcomes, or exclusions.
|
|
537
547
|
- An implementation batch with zero expected outcome improvement and no necessary-prerequisite role is still dispatched.
|
|
538
548
|
- Diagnostics, candidates, reviews, format pass, file consistency, logged issues, design completion, renaming, or version changes are automatically counted as mainline outcome progress.
|
|
@@ -463,6 +463,41 @@ LIVING_BRIEF_FORBIDDEN = {
|
|
|
463
463
|
"r_initial_prompt_only": "R reviews only against the initial prompt",
|
|
464
464
|
}
|
|
465
465
|
|
|
466
|
+
TASK_PREFLIGHT_MAPPING_REQUIREMENTS = {
|
|
467
|
+
"global_owner_external": "The sole general owner for task preflight / layer focus is not the CER Skill",
|
|
468
|
+
"cer_mapping_only": "this section is only the CER-specific mapping",
|
|
469
|
+
"no_redefine_eight": "must not redefine the eight items",
|
|
470
|
+
"route_label_not_skip": "Complex ordinary, Goal, and CER Workflow tasks must not skip needed layer focus merely because of their route label",
|
|
471
|
+
"simple_no_forced_card": "must not be forced to show a focus card",
|
|
472
|
+
"card_not_progress": "A visible focus card, preflight, living task brief, or roadmap update is not outcome progress",
|
|
473
|
+
"auto_routes_unchanged": "must not change the four `/CER-auto` routes",
|
|
474
|
+
"no_new_surface": "add a CER role, schema, enum, or slash command",
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
TASK_PREFLIGHT_UAT_REQUIREMENTS = {
|
|
478
|
+
"complex_routes_focus": "Complex ordinary, Goal, and CER Workflow tasks must not skip task preflight / layer focus merely because of their route label",
|
|
479
|
+
"simple_internal": "Simple one-step low-risk work with one clear endpoint may still pass through a fast internal check",
|
|
480
|
+
"focus_not_quality": "A focus card, preflight, living task brief, or roadmap update is not outcome progress, acceptance evidence, or product-quality proof",
|
|
481
|
+
"technical_pass_not_aligned": "When technical PASS has no outcome delta, the focus judgment cannot be `aligned`",
|
|
482
|
+
"cer_mapping_no_surface": "CER only maps task preflight locally",
|
|
483
|
+
"failure_complex_goal_skips": "A complex Goal task skips task preflight / layer focus only because it is not full CER",
|
|
484
|
+
"failure_ordinary_never_focus": "A complex ordinary task is written as never needing focus",
|
|
485
|
+
"failure_simple_forced": "A simple low-risk one-step task is forced to show a focus card",
|
|
486
|
+
"failure_focus_progress": "A focus card, preflight, or living task brief is counted as progress, acceptance, or product-quality evidence",
|
|
487
|
+
"failure_technical_aligned": "Technical PASS has no outcome delta, but the focus judgment is still marked `aligned`",
|
|
488
|
+
"failure_new_surface": "A focus rule inside CER adds a slash command, role, schema, or enum",
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
TASK_PREFLIGHT_FORBIDDEN = {
|
|
492
|
+
"cer_owns_general": "the CER Skill is the sole owner of the eight task-preflight items",
|
|
493
|
+
"focus_progress": "a focus card itself may increase mainline outcome progress",
|
|
494
|
+
"focus_enum": "task preflight adds a `focus_status` enum",
|
|
495
|
+
"focus_command": "`/CER-focus` is a CER slash command",
|
|
496
|
+
"auto_fifth_route": "`/CER-auto` adds a fifth route because of focus",
|
|
497
|
+
"goal_never_focus": "the Goal route never needs layer focus",
|
|
498
|
+
"simple_always_card": "low-risk one-step work must show a focus card",
|
|
499
|
+
}
|
|
500
|
+
|
|
466
501
|
OUTCOME_ANCHOR_REQUIREMENTS = (
|
|
467
502
|
"immutable `outcome_anchor`",
|
|
468
503
|
"unacceptable substitute outcomes",
|
|
@@ -1042,6 +1077,15 @@ def validate_texts(root: Path, texts: dict[str, str]) -> list[str]:
|
|
|
1042
1077
|
for label, forbidden in LIVING_BRIEF_FORBIDDEN.items():
|
|
1043
1078
|
if forbidden in core_normalized:
|
|
1044
1079
|
findings.append(f"living-brief fixed contradiction present {label}")
|
|
1080
|
+
for label, required in TASK_PREFLIGHT_MAPPING_REQUIREMENTS.items():
|
|
1081
|
+
if required not in core_normalized:
|
|
1082
|
+
findings.append(f"task-preflight CER mapping missing {label}")
|
|
1083
|
+
for label, required in TASK_PREFLIGHT_UAT_REQUIREMENTS.items():
|
|
1084
|
+
if required not in uat:
|
|
1085
|
+
findings.append(f"uat.md missing task-preflight counterexample {label}")
|
|
1086
|
+
for label, forbidden in TASK_PREFLIGHT_FORBIDDEN.items():
|
|
1087
|
+
if forbidden in normalized_markdown:
|
|
1088
|
+
findings.append(f"task-preflight fixed contradiction present {label}")
|
|
1045
1089
|
for label, forbidden in UNEXPECTED_FAILURE_FORBIDDEN.items():
|
|
1046
1090
|
if forbidden in normalized_markdown:
|
|
1047
1091
|
findings.append(f"unexpected-failure fixed contradiction present {label}")
|
|
@@ -1667,6 +1711,20 @@ def mutation_matrix(root: Path) -> tuple[int, list[str]]:
|
|
|
1667
1711
|
mutated_fragment("references/uat.md", fragment),
|
|
1668
1712
|
)
|
|
1669
1713
|
)
|
|
1714
|
+
for label, fragment in TASK_PREFLIGHT_MAPPING_REQUIREMENTS.items():
|
|
1715
|
+
cases.append(
|
|
1716
|
+
(
|
|
1717
|
+
f"task_preflight_mapping_missing_{label}",
|
|
1718
|
+
mutated_fragment("references/core-runtime.md", fragment),
|
|
1719
|
+
)
|
|
1720
|
+
)
|
|
1721
|
+
for label, fragment in TASK_PREFLIGHT_UAT_REQUIREMENTS.items():
|
|
1722
|
+
cases.append(
|
|
1723
|
+
(
|
|
1724
|
+
f"task_preflight_uat_missing_{label}",
|
|
1725
|
+
mutated_fragment("references/uat.md", fragment),
|
|
1726
|
+
)
|
|
1727
|
+
)
|
|
1670
1728
|
for label, fragment in TRUTH_SOURCE_INTAKE_UAT_REQUIREMENTS.items():
|
|
1671
1729
|
cases.append(
|
|
1672
1730
|
(
|
|
@@ -1767,6 +1825,17 @@ def mutation_matrix(root: Path) -> tuple[int, list[str]]:
|
|
|
1767
1825
|
),
|
|
1768
1826
|
)
|
|
1769
1827
|
)
|
|
1828
|
+
for label, contradiction in TASK_PREFLIGHT_FORBIDDEN.items():
|
|
1829
|
+
cases.append(
|
|
1830
|
+
(
|
|
1831
|
+
f"task_preflight_contradiction_{label}",
|
|
1832
|
+
mutated(
|
|
1833
|
+
"references/core-runtime.md",
|
|
1834
|
+
"## Controller Preflight",
|
|
1835
|
+
f"## Controller Preflight\n\n{contradiction}.",
|
|
1836
|
+
),
|
|
1837
|
+
)
|
|
1838
|
+
)
|
|
1770
1839
|
for label, contradiction in TRUTH_SOURCE_INTAKE_FORBIDDEN.items():
|
|
1771
1840
|
cases.append(
|
|
1772
1841
|
(
|