@azure-id/orc 1.9.1 → 1.9.2
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/CHANGELOG.md +69 -0
- package/README-id.md +38 -39
- package/README.md +36 -35
- package/bin/build-agents.js +109 -109
- package/bin/cli.js +35 -33
- package/bin/onboarding-content.js +4 -4
- package/bin/pricing.json +207 -200
- package/bin/verify-contracts.js +2 -2
- package/bin/verify-package.js +7 -7
- package/bin/webui/css/04-motion.css +162 -152
- package/bin/webui/css/panels/knowledge.css +563 -116
- package/bin/webui/fixtures/extra.js +2036 -2036
- package/bin/webui/fixtures/hookui.js +5 -5
- package/bin/webui/fixtures/settings.js +305 -305
- package/bin/webui/i18n/en/knowledge.json +117 -2
- package/bin/webui/i18n/id/knowledge.json +117 -2
- package/bin/webui/js/panels/knowledge.js +552 -7
- package/bin/webui/js/panels/overview.js +13 -4
- package/mock-run/context-combiner.md +100 -100
- package/mock-run/orc-budget.md +534 -534
- package/mock-run/orc-challenge-council.md +262 -262
- package/mock-run/orc-ultra.md +103 -103
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +43 -43
- package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -56
- package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -60
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -58
- package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
- package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
- package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
- package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
- package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
- package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
- package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
- package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
- package/templates/agents/orc-claude-writer-opus-5-med.md +55 -55
- package/templates/agents/orc-context-combiner-opus-5-high.md +88 -88
- package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
- package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
- package/templates/agents/orc-executor-opus-5-high.md +2 -2
- package/templates/agents/orc-executor-opus-5-low.md +2 -2
- package/templates/agents/orc-executor-opus-5-med.md +2 -2
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -1
- package/templates/agents/orc-judge-opus-5-xhigh.md +85 -85
- package/templates/agents/orc-learn-writer-opus-5-low.md +73 -73
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -65
- package/templates/agents/orc-planner-mini-opus-5-med.md +4 -4
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -1
- package/templates/agents/orc-planner-opus-5-med.md +160 -160
- package/templates/agents/orc-recon-opus-5-low.md +3 -3
- package/templates/agents/orc-retro-opus-5-med.md +3 -3
- package/templates/agents/orc-reviewer-opus-5-med.md +60 -60
- package/templates/agents/orc-scout-opus-5-low.md +40 -40
- package/templates/agents/orc-system-analyst-opus-5-high.md +120 -120
- package/templates/agents/orc-test-author-opus-5-med.md +71 -71
- package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
- package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
- package/templates/agents/orc-verifier-opus-5-med.md +69 -69
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -81
- package/templates/commands/orc-ultra.md +17 -17
- package/templates/commands/orc-verify.md +11 -11
- package/templates/hooks/README.md +2 -2
- package/templates/hooks/orc-effort-guard.js +178 -178
- package/templates/hooks/orc-statusline.js +6 -6
- package/templates/skills/_shared/code-graph.md +1 -1
- package/templates/skills/_shared/config-precedence.md +198 -198
- package/templates/skills/_shared/extra-dispatch.md +1346 -1346
- package/templates/skills/_shared/opus5-only.md +8 -8
- package/templates/skills/_shared/phases/analyst-gates.md +136 -136
- package/templates/skills/_shared/phases/review.md +1 -1
- package/templates/skills/_shared/phases/trace.md +1 -1
- package/templates/skills/_shared/return-validation.md +1 -1
- package/templates/skills/context-combiner/SKILL.md +1 -1
- package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +7 -7
- package/templates/skills/orc/config.md +9 -9
- package/templates/skills/orc/examples/full-run-mock.md +73 -73
- package/templates/skills/orc/references/effort-and-mode.md +222 -222
- package/templates/skills/orc/references/preflight-report.md +2 -2
- package/templates/skills/orc/references/ultra-mode.md +3 -3
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
- package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -76
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -45
- package/templates/skills/orc-analyze/SKILL.md +2 -2
- package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
- package/templates/skills/orc-analyze/schemas/report-audit.md +83 -83
- package/templates/skills/orc-analyze/schemas/report-prose.md +63 -63
- package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
- package/templates/skills/orc-challenge/README.md +142 -142
- package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
- package/templates/skills/orc-challenge/references/council.md +315 -315
- package/templates/skills/orc-challenge/references/intake.md +171 -171
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-diy/README.md +143 -143
- package/templates/skills/orc-diy/references/flow-schema.md +1 -1
- package/templates/skills/orc-doc/README.md +229 -229
- package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
- package/templates/skills/orc-doc/references/chunking.md +527 -527
- package/templates/skills/orc-fast/SKILL.md +1 -1
- package/templates/skills/orc-learn/SKILL.md +14 -14
- package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
- package/templates/skills/orc-mini/SKILL.md +3 -3
- package/templates/skills/orc-verify/SKILL.md +15 -15
- package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
- package/templates/skills/orc-wiki/references/extra.md +1 -1
|
@@ -1,273 +1,273 @@
|
|
|
1
|
-
# Example — the full roster, and a premise challenge that moves the goal
|
|
2
|
-
|
|
3
|
-
> The annotated maintainer's walkthrough for the council. Every council gate that
|
|
4
|
-
> fires is called out. For the whole lane end to end, read
|
|
5
|
-
> `tsd-two-iterations.md` first.
|
|
6
|
-
|
|
7
|
-
The artifact is a PRD, not a TSD, and that matters: the suggestion ORC computes
|
|
8
|
-
for a PRD includes the two lenses that never block.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## C1 — intake, and question 7
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
> /orc-challenge docs/prd-self-serve.md
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
The first six questions are unchanged (`../../_shared/phases/intake.md`). Question 7 is
|
|
19
|
-
rendered from `orc challenge roles --kind prd --json` — **the skill never
|
|
20
|
-
hand-lists the lenses**:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
7 Who is on the council for this review? (judge always runs; advisor runs on a fail)
|
|
24
|
-
|
|
25
|
-
ORC suggests, for a PRD:
|
|
26
|
-
[x] cold reader can a stranger answer this document's own questions?
|
|
27
|
-
[x] outsider what does this assume you already know?
|
|
28
|
-
[x] principles is this even the right problem? (never blocks)
|
|
29
|
-
[x] expansionist what upside is being missed? (never blocks)
|
|
30
|
-
[ ] contrarian assume it has a fatal flaw, then go find it
|
|
31
|
-
[ ] executor can this be started on Monday? where is the first step?
|
|
32
|
-
|
|
33
|
-
Reply with the ones you want (or "all", or "none").
|
|
34
|
-
Each one is one extra read-only Opus 5 dispatch per iteration.
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
The user replies: **`all`**.
|
|
38
|
-
|
|
39
|
-
> **GATE — rule 12.** Had the session tried to proceed without an answer,
|
|
40
|
-
> `orc challenge init` would have refused:
|
|
41
|
-
>
|
|
42
|
-
> ```
|
|
43
|
-
> ❌ --council is required and has no default. ORC SUGGESTS a roster (from the
|
|
44
|
-
> kind and the goal); the user PICKS it. […] Suggested for --kind prd:
|
|
45
|
-
> reader,outsider,principles,expansionist.
|
|
46
|
-
> (a lane that picks its own council has broken this contract)
|
|
47
|
-
> ```
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
orc challenge init prd-self-serve \
|
|
51
|
-
--artifact docs/prd-self-serve.md --kind prd \
|
|
52
|
-
--goal "…" --audience "…" --done-means "…" \
|
|
53
|
-
--template docs/templates/prd.md \
|
|
54
|
-
--council all \
|
|
55
|
-
--revision in-place
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
council (v1): reader contrarian outsider executor principles expansionist → 7 dispatch(es) per iteration
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
The cost is stated in **dispatches**, never in dollars — `/orc-budget`'s rule:
|
|
63
|
-
no dollar figure without a dated price table, and this ask has no plan to price.
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## C3 — the council, in parallel, ≤ 3 in flight
|
|
68
|
-
|
|
69
|
-
Six lenses, three at a time, every one dispatched **BY NAME**. The cap is
|
|
70
|
-
announced when it bites:
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
Council: 6 lenses on the roster, dispatched 3 at a time (hard cap, no config key).
|
|
74
|
-
wave 1 reader · contrarian · outsider
|
|
75
|
-
wave 2 executor · principles · expansionist
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Each writes two files:
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
orc/orc-challenge/prd-self-serve/iteration-01/council/
|
|
82
|
-
reader.md reader.json R-001 … R-003
|
|
83
|
-
contrarian.md contrarian.json C-001 … C-006
|
|
84
|
-
outsider.md outsider.json O-001 … O-003
|
|
85
|
-
executor.md executor.json E-001 … E-002
|
|
86
|
-
principles.md principles.json Q-001 ← never reaches the judge
|
|
87
|
-
expansionist.md expansionist.json X-001 … X-002 ← never reaches the judge
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
The two non-finding reports are recorded separately:
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
orc challenge note prd-self-serve --iteration 1 --from /tmp/council-note.json
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
✓ recorded 1 premise and 2 opportunities at iteration 1.
|
|
98
|
-
Neither blocks. A premise challenge is resolved by a HUMAN and by nobody else.
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
> **GATE — `class-mismatch`.** The first attempt put the opportunities in a
|
|
102
|
-
> `findings[]` key, and `note` refused by name:
|
|
103
|
-
>
|
|
104
|
-
> ```
|
|
105
|
-
> ❌ `orc challenge note` records OPPORTUNITIES and PREMISES only. The
|
|
106
|
-
> expansionist and the first-principles thinker never touch the pass gate —
|
|
107
|
-
> a findings[] key here is a class error, not a typo. Findings go through
|
|
108
|
-
> `orc challenge record`.
|
|
109
|
-
> ```
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## C4 — the judge, with a slice that grew by exactly four rows
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
goals: orc/orc-challenge/prd-self-serve/goals.md (frozen, v1)
|
|
117
|
-
artifact: docs/prd-self-serve.md
|
|
118
|
-
template: orc/orc-challenge/prd-self-serve/template.md (frozen, v1)
|
|
119
|
-
dimensions: <skill>/references/dimensions.md (selected: D1 D2 D3 D4 D5 D7)
|
|
120
|
-
lint: …/iteration-01/lint.json
|
|
121
|
-
reader: …/iteration-01/council/reader.md
|
|
122
|
-
contrarian: …/iteration-01/council/contrarian.md
|
|
123
|
-
outsider: …/iteration-01/council/outsider.md
|
|
124
|
-
executor: …/iteration-01/council/executor.md
|
|
125
|
-
carry_ids: (none — first iteration)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
Still paths and ids only. **`principles.md` and `expansionist.md` are NOT
|
|
129
|
-
there**, and that is the architecture, not an oversight.
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## C5 — record, and the gate that makes five reviewers safe
|
|
134
|
-
|
|
135
|
-
The judge's first return disposed of thirteen of the fourteen council ids.
|
|
136
|
-
|
|
137
|
-
> **GATE — `council-coverage`.**
|
|
138
|
-
>
|
|
139
|
-
> ```
|
|
140
|
-
> ❌ malformed verdict — council coverage is below 100% — every id the council
|
|
141
|
-
> raised needs exactly ONE disposition (adopted | merged | rejected |
|
|
142
|
-
> out-of-goal). Missing: O-003
|
|
143
|
-
> ```
|
|
144
|
-
>
|
|
145
|
-
> `orc challenge record` read `iteration-01/council/*.json` **itself**. The judge
|
|
146
|
-
> could not shrink the set by omitting `O-003`, because the set was never the
|
|
147
|
-
> judge's to report.
|
|
148
|
-
|
|
149
|
-
Re-recorded:
|
|
150
|
-
|
|
151
|
-
```
|
|
152
|
-
iteration 1: FAIL — 5 blocking findings, coverage 100%
|
|
153
|
-
reader RAN raised 3 · adopted 2 · merged 1 · rejected 0 · out-of-goal 0
|
|
154
|
-
contrarian RAN raised 6 · adopted 4 · merged 1 · rejected 1 · out-of-goal 0
|
|
155
|
-
outsider RAN raised 3 · adopted 1 · merged 2 · rejected 0 · out-of-goal 0
|
|
156
|
-
executor RAN raised 2 · adopted 2 · merged 0 · rejected 0 · out-of-goal 0
|
|
157
|
-
CHALLENGE iter=1 findings=P0:1/P1:4/P2:6 coverage=100% council=6/6 raised=R:3,C:6,O:3,E:2 adopted=9 verdict=FAIL
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
Three things to notice:
|
|
161
|
-
|
|
162
|
-
- **`C-002` is `C-002` in the verdict.** An adopted council finding keeps the
|
|
163
|
-
raiser's id, forever — which is what lets the panel say *"the contrarian raised
|
|
164
|
-
four of the six blockers"*.
|
|
165
|
-
- **`O-001` was adopted and is marked `also found by: reader`.** The outsider and
|
|
166
|
-
the cold reader landed on the same undefined term from opposite directions.
|
|
167
|
-
That is `corroborated_by` — **a signal, never an automatic severity bump.**
|
|
168
|
-
- **The two `O-` ids that were `merged`** name a real `merged_into`. `record`
|
|
169
|
-
refuses a merge into an id that does not resolve.
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## C8 — the stop, and the block that goes FIRST
|
|
174
|
-
|
|
175
|
-
The fix brief leads with the premise challenge, because it disputes the yardstick
|
|
176
|
-
every finding under it was measured against:
|
|
177
|
-
|
|
178
|
-
```
|
|
179
|
-
OPEN PREMISE CHALLENGE — read this before the findings
|
|
180
|
-
|
|
181
|
-
Q-001 disputes: goal
|
|
182
|
-
"…a PRD that lets the growth team ship self-serve signup…"
|
|
183
|
-
|
|
184
|
-
Reframe: the underlying job is not "describe self-serve signup"; it is
|
|
185
|
-
"decide whether signup is self-serve at all". Three sections of this
|
|
186
|
-
document answer the second question and are written as if the first
|
|
187
|
-
were settled.
|
|
188
|
-
|
|
189
|
-
Cheapest test: ask the growth lead whether the decision is made. One
|
|
190
|
-
message, no rewrite.
|
|
191
|
-
|
|
192
|
-
Neither resolution is automatic and ORC never picks:
|
|
193
|
-
adopt orc challenge goals prd-self-serve --set <path> --reason "…"
|
|
194
|
-
dismiss orc challenge premise prd-self-serve Q-001 --dismiss --reason "…"
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
Then the findings, grouped by the advisor's root causes. Then, last and clearly
|
|
198
|
-
marked **not work**:
|
|
199
|
-
|
|
200
|
-
```
|
|
201
|
-
OPPORTUNITIES — not work, nothing here blocks
|
|
202
|
-
|
|
203
|
-
X-001 the onboarding checklist generalises to every plan tier
|
|
204
|
-
first step: list the four tiers' current checklists side by side
|
|
205
|
-
route: /orc-brainstorm
|
|
206
|
-
|
|
207
|
-
X-002 §6 is the enablement doc the support team has been asking for
|
|
208
|
-
first step: send §6 to support and ask if it is enough on its own
|
|
209
|
-
route: /orc-pact (they would want it committed to)
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## Session 2 — the user adopts the premise, and the yardstick moves
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
orc challenge goals prd-self-serve --set docs/goals-v2.md \
|
|
218
|
-
--reason "Q-001 was right — the decision was never taken"
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
`goals.version` → 2, iteration 1 keeps `graded_against_goal: 1`, and the
|
|
222
|
-
iteration rail draws the version break. **That mechanism has existed since
|
|
223
|
-
v0.47.0; the council is the first thing that can legitimately move it.**
|
|
224
|
-
|
|
225
|
-
The user also narrows the roster, because the premise has been answered and the
|
|
226
|
-
document is now a technical one:
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
orc challenge council prd-self-serve --set contrarian,executor \
|
|
230
|
-
--reason "the framing question is settled; what is left is completeness"
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
```
|
|
234
|
-
✓ council v2: contrarian executor — the framing question is settled; what is left is completeness
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
> **This is safe, and here is why.** `C-002`, `O-001` and `R-003` are still open
|
|
238
|
-
> and the outsider and the reader are no longer on the roster. **The judge
|
|
239
|
-
> resolves every carried finding, whatever prefix it carries** (rule 13) — rule
|
|
240
|
-
> 11 already had it re-reading the artifact from disk rather than from an account
|
|
241
|
-
> of what changed, so it never needed the original raiser. The roster is freely
|
|
242
|
-
> variable at zero cost to conservation.
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
|
-
## Session 3 — a lens that could not run
|
|
247
|
-
|
|
248
|
-
A usage limit hit mid-batch. The orchestrator records the truth:
|
|
249
|
-
|
|
250
|
-
```json
|
|
251
|
-
{ "lens": "executor", "ran": false, "reason": "usage limit reached mid-batch" }
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
```
|
|
255
|
-
iteration 3: FAIL — 2 blocking findings, coverage 100%
|
|
256
|
-
contrarian RAN raised 2 · adopted 1 · merged 0 · rejected 1 · out-of-goal 0
|
|
257
|
-
executor NOT-RUN usage limit reached mid-batch
|
|
258
|
-
CHALLENGE iter=3 findings=P0:0/P1:2/P2:3 coverage=100% council=1/2 raised=C:2 adopted=1 verdict=FAIL
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
> **GATE — `lens-silent`.** Omitting the executor entirely instead of declaring
|
|
262
|
-
> it would have been rejected:
|
|
263
|
-
>
|
|
264
|
-
> ```
|
|
265
|
-
> ❌ malformed verdict — executor is on the roster but returned neither a report
|
|
266
|
-
> (iteration-03/council/executor.json) nor an explicit
|
|
267
|
-
> { "lens": "executor", "ran": false, "reason": "…" }. A selected role is
|
|
268
|
-
> never silently absent.
|
|
269
|
-
> ```
|
|
270
|
-
|
|
271
|
-
`council=1/2` in the trace line means the gap is visible to `orc stats` and to
|
|
272
|
-
`/orc-retro`, not only in the panel — which is how a user eventually finds out
|
|
273
|
-
whether a lens is earning its dispatch.
|
|
1
|
+
# Example — the full roster, and a premise challenge that moves the goal
|
|
2
|
+
|
|
3
|
+
> The annotated maintainer's walkthrough for the council. Every council gate that
|
|
4
|
+
> fires is called out. For the whole lane end to end, read
|
|
5
|
+
> `tsd-two-iterations.md` first.
|
|
6
|
+
|
|
7
|
+
The artifact is a PRD, not a TSD, and that matters: the suggestion ORC computes
|
|
8
|
+
for a PRD includes the two lenses that never block.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## C1 — intake, and question 7
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
> /orc-challenge docs/prd-self-serve.md
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
The first six questions are unchanged (`../../_shared/phases/intake.md`). Question 7 is
|
|
19
|
+
rendered from `orc challenge roles --kind prd --json` — **the skill never
|
|
20
|
+
hand-lists the lenses**:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
7 Who is on the council for this review? (judge always runs; advisor runs on a fail)
|
|
24
|
+
|
|
25
|
+
ORC suggests, for a PRD:
|
|
26
|
+
[x] cold reader can a stranger answer this document's own questions?
|
|
27
|
+
[x] outsider what does this assume you already know?
|
|
28
|
+
[x] principles is this even the right problem? (never blocks)
|
|
29
|
+
[x] expansionist what upside is being missed? (never blocks)
|
|
30
|
+
[ ] contrarian assume it has a fatal flaw, then go find it
|
|
31
|
+
[ ] executor can this be started on Monday? where is the first step?
|
|
32
|
+
|
|
33
|
+
Reply with the ones you want (or "all", or "none").
|
|
34
|
+
Each one is one extra read-only Opus 5.5 dispatch per iteration.
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The user replies: **`all`**.
|
|
38
|
+
|
|
39
|
+
> **GATE — rule 12.** Had the session tried to proceed without an answer,
|
|
40
|
+
> `orc challenge init` would have refused:
|
|
41
|
+
>
|
|
42
|
+
> ```
|
|
43
|
+
> ❌ --council is required and has no default. ORC SUGGESTS a roster (from the
|
|
44
|
+
> kind and the goal); the user PICKS it. […] Suggested for --kind prd:
|
|
45
|
+
> reader,outsider,principles,expansionist.
|
|
46
|
+
> (a lane that picks its own council has broken this contract)
|
|
47
|
+
> ```
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
orc challenge init prd-self-serve \
|
|
51
|
+
--artifact docs/prd-self-serve.md --kind prd \
|
|
52
|
+
--goal "…" --audience "…" --done-means "…" \
|
|
53
|
+
--template docs/templates/prd.md \
|
|
54
|
+
--council all \
|
|
55
|
+
--revision in-place
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
council (v1): reader contrarian outsider executor principles expansionist → 7 dispatch(es) per iteration
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The cost is stated in **dispatches**, never in dollars — `/orc-budget`'s rule:
|
|
63
|
+
no dollar figure without a dated price table, and this ask has no plan to price.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## C3 — the council, in parallel, ≤ 3 in flight
|
|
68
|
+
|
|
69
|
+
Six lenses, three at a time, every one dispatched **BY NAME**. The cap is
|
|
70
|
+
announced when it bites:
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
Council: 6 lenses on the roster, dispatched 3 at a time (hard cap, no config key).
|
|
74
|
+
wave 1 reader · contrarian · outsider
|
|
75
|
+
wave 2 executor · principles · expansionist
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Each writes two files:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
orc/orc-challenge/prd-self-serve/iteration-01/council/
|
|
82
|
+
reader.md reader.json R-001 … R-003
|
|
83
|
+
contrarian.md contrarian.json C-001 … C-006
|
|
84
|
+
outsider.md outsider.json O-001 … O-003
|
|
85
|
+
executor.md executor.json E-001 … E-002
|
|
86
|
+
principles.md principles.json Q-001 ← never reaches the judge
|
|
87
|
+
expansionist.md expansionist.json X-001 … X-002 ← never reaches the judge
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The two non-finding reports are recorded separately:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
orc challenge note prd-self-serve --iteration 1 --from /tmp/council-note.json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
✓ recorded 1 premise and 2 opportunities at iteration 1.
|
|
98
|
+
Neither blocks. A premise challenge is resolved by a HUMAN and by nobody else.
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
> **GATE — `class-mismatch`.** The first attempt put the opportunities in a
|
|
102
|
+
> `findings[]` key, and `note` refused by name:
|
|
103
|
+
>
|
|
104
|
+
> ```
|
|
105
|
+
> ❌ `orc challenge note` records OPPORTUNITIES and PREMISES only. The
|
|
106
|
+
> expansionist and the first-principles thinker never touch the pass gate —
|
|
107
|
+
> a findings[] key here is a class error, not a typo. Findings go through
|
|
108
|
+
> `orc challenge record`.
|
|
109
|
+
> ```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## C4 — the judge, with a slice that grew by exactly four rows
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
goals: orc/orc-challenge/prd-self-serve/goals.md (frozen, v1)
|
|
117
|
+
artifact: docs/prd-self-serve.md
|
|
118
|
+
template: orc/orc-challenge/prd-self-serve/template.md (frozen, v1)
|
|
119
|
+
dimensions: <skill>/references/dimensions.md (selected: D1 D2 D3 D4 D5 D7)
|
|
120
|
+
lint: …/iteration-01/lint.json
|
|
121
|
+
reader: …/iteration-01/council/reader.md
|
|
122
|
+
contrarian: …/iteration-01/council/contrarian.md
|
|
123
|
+
outsider: …/iteration-01/council/outsider.md
|
|
124
|
+
executor: …/iteration-01/council/executor.md
|
|
125
|
+
carry_ids: (none — first iteration)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Still paths and ids only. **`principles.md` and `expansionist.md` are NOT
|
|
129
|
+
there**, and that is the architecture, not an oversight.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## C5 — record, and the gate that makes five reviewers safe
|
|
134
|
+
|
|
135
|
+
The judge's first return disposed of thirteen of the fourteen council ids.
|
|
136
|
+
|
|
137
|
+
> **GATE — `council-coverage`.**
|
|
138
|
+
>
|
|
139
|
+
> ```
|
|
140
|
+
> ❌ malformed verdict — council coverage is below 100% — every id the council
|
|
141
|
+
> raised needs exactly ONE disposition (adopted | merged | rejected |
|
|
142
|
+
> out-of-goal). Missing: O-003
|
|
143
|
+
> ```
|
|
144
|
+
>
|
|
145
|
+
> `orc challenge record` read `iteration-01/council/*.json` **itself**. The judge
|
|
146
|
+
> could not shrink the set by omitting `O-003`, because the set was never the
|
|
147
|
+
> judge's to report.
|
|
148
|
+
|
|
149
|
+
Re-recorded:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
iteration 1: FAIL — 5 blocking findings, coverage 100%
|
|
153
|
+
reader RAN raised 3 · adopted 2 · merged 1 · rejected 0 · out-of-goal 0
|
|
154
|
+
contrarian RAN raised 6 · adopted 4 · merged 1 · rejected 1 · out-of-goal 0
|
|
155
|
+
outsider RAN raised 3 · adopted 1 · merged 2 · rejected 0 · out-of-goal 0
|
|
156
|
+
executor RAN raised 2 · adopted 2 · merged 0 · rejected 0 · out-of-goal 0
|
|
157
|
+
CHALLENGE iter=1 findings=P0:1/P1:4/P2:6 coverage=100% council=6/6 raised=R:3,C:6,O:3,E:2 adopted=9 verdict=FAIL
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Three things to notice:
|
|
161
|
+
|
|
162
|
+
- **`C-002` is `C-002` in the verdict.** An adopted council finding keeps the
|
|
163
|
+
raiser's id, forever — which is what lets the panel say *"the contrarian raised
|
|
164
|
+
four of the six blockers"*.
|
|
165
|
+
- **`O-001` was adopted and is marked `also found by: reader`.** The outsider and
|
|
166
|
+
the cold reader landed on the same undefined term from opposite directions.
|
|
167
|
+
That is `corroborated_by` — **a signal, never an automatic severity bump.**
|
|
168
|
+
- **The two `O-` ids that were `merged`** name a real `merged_into`. `record`
|
|
169
|
+
refuses a merge into an id that does not resolve.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## C8 — the stop, and the block that goes FIRST
|
|
174
|
+
|
|
175
|
+
The fix brief leads with the premise challenge, because it disputes the yardstick
|
|
176
|
+
every finding under it was measured against:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
OPEN PREMISE CHALLENGE — read this before the findings
|
|
180
|
+
|
|
181
|
+
Q-001 disputes: goal
|
|
182
|
+
"…a PRD that lets the growth team ship self-serve signup…"
|
|
183
|
+
|
|
184
|
+
Reframe: the underlying job is not "describe self-serve signup"; it is
|
|
185
|
+
"decide whether signup is self-serve at all". Three sections of this
|
|
186
|
+
document answer the second question and are written as if the first
|
|
187
|
+
were settled.
|
|
188
|
+
|
|
189
|
+
Cheapest test: ask the growth lead whether the decision is made. One
|
|
190
|
+
message, no rewrite.
|
|
191
|
+
|
|
192
|
+
Neither resolution is automatic and ORC never picks:
|
|
193
|
+
adopt orc challenge goals prd-self-serve --set <path> --reason "…"
|
|
194
|
+
dismiss orc challenge premise prd-self-serve Q-001 --dismiss --reason "…"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Then the findings, grouped by the advisor's root causes. Then, last and clearly
|
|
198
|
+
marked **not work**:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
OPPORTUNITIES — not work, nothing here blocks
|
|
202
|
+
|
|
203
|
+
X-001 the onboarding checklist generalises to every plan tier
|
|
204
|
+
first step: list the four tiers' current checklists side by side
|
|
205
|
+
route: /orc-brainstorm
|
|
206
|
+
|
|
207
|
+
X-002 §6 is the enablement doc the support team has been asking for
|
|
208
|
+
first step: send §6 to support and ask if it is enough on its own
|
|
209
|
+
route: /orc-pact (they would want it committed to)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Session 2 — the user adopts the premise, and the yardstick moves
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
orc challenge goals prd-self-serve --set docs/goals-v2.md \
|
|
218
|
+
--reason "Q-001 was right — the decision was never taken"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
`goals.version` → 2, iteration 1 keeps `graded_against_goal: 1`, and the
|
|
222
|
+
iteration rail draws the version break. **That mechanism has existed since
|
|
223
|
+
v0.47.0; the council is the first thing that can legitimately move it.**
|
|
224
|
+
|
|
225
|
+
The user also narrows the roster, because the premise has been answered and the
|
|
226
|
+
document is now a technical one:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
orc challenge council prd-self-serve --set contrarian,executor \
|
|
230
|
+
--reason "the framing question is settled; what is left is completeness"
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
✓ council v2: contrarian executor — the framing question is settled; what is left is completeness
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
> **This is safe, and here is why.** `C-002`, `O-001` and `R-003` are still open
|
|
238
|
+
> and the outsider and the reader are no longer on the roster. **The judge
|
|
239
|
+
> resolves every carried finding, whatever prefix it carries** (rule 13) — rule
|
|
240
|
+
> 11 already had it re-reading the artifact from disk rather than from an account
|
|
241
|
+
> of what changed, so it never needed the original raiser. The roster is freely
|
|
242
|
+
> variable at zero cost to conservation.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Session 3 — a lens that could not run
|
|
247
|
+
|
|
248
|
+
A usage limit hit mid-batch. The orchestrator records the truth:
|
|
249
|
+
|
|
250
|
+
```json
|
|
251
|
+
{ "lens": "executor", "ran": false, "reason": "usage limit reached mid-batch" }
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
iteration 3: FAIL — 2 blocking findings, coverage 100%
|
|
256
|
+
contrarian RAN raised 2 · adopted 1 · merged 0 · rejected 1 · out-of-goal 0
|
|
257
|
+
executor NOT-RUN usage limit reached mid-batch
|
|
258
|
+
CHALLENGE iter=3 findings=P0:0/P1:2/P2:3 coverage=100% council=1/2 raised=C:2 adopted=1 verdict=FAIL
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
> **GATE — `lens-silent`.** Omitting the executor entirely instead of declaring
|
|
262
|
+
> it would have been rejected:
|
|
263
|
+
>
|
|
264
|
+
> ```
|
|
265
|
+
> ❌ malformed verdict — executor is on the roster but returned neither a report
|
|
266
|
+
> (iteration-03/council/executor.json) nor an explicit
|
|
267
|
+
> { "lens": "executor", "ran": false, "reason": "…" }. A selected role is
|
|
268
|
+
> never silently absent.
|
|
269
|
+
> ```
|
|
270
|
+
|
|
271
|
+
`council=1/2` in the trace line means the gap is visible to `orc stats` and to
|
|
272
|
+
`/orc-retro`, not only in the panel — which is how a user eventually finds out
|
|
273
|
+
whether a lens is earning its dispatch.
|