@azure-id/orc 1.6.0 → 1.7.0
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 +110 -0
- package/README-id.md +206 -125
- package/README.md +274 -74
- package/bin/cli.js +1595 -2
- package/bin/mockrun-catalog.js +272 -267
- package/bin/verify-contracts.js +4527 -4509
- package/bin/verify-package.js +6 -0
- package/bin/webui/api.js +26 -0
- package/bin/webui/app.html +10 -0
- package/bin/webui/css/panels/knowledge.css +30 -0
- package/bin/webui/css/panels/rules.css +145 -0
- package/bin/webui/fixtures/index.js +27 -0
- package/bin/webui/fixtures/rules.js +1002 -0
- package/bin/webui/fixtures/wiki-one.js +198 -0
- package/bin/webui/i18n/en/knowledge.json +127 -117
- package/bin/webui/i18n/en/nav.json +1 -0
- package/bin/webui/i18n/en/rules.json +55 -0
- package/bin/webui/i18n/id/knowledge.json +127 -117
- package/bin/webui/i18n/id/nav.json +1 -0
- package/bin/webui/i18n/id/rules.json +55 -0
- package/bin/webui/js/01-i18n.js +1 -0
- package/bin/webui/js/panels/knowledge.js +117 -1
- package/bin/webui/js/panels/rules.js +351 -0
- package/mock-run/INDEX.md +107 -106
- package/mock-run/orc-rules.md +254 -0
- package/package.json +1 -1
- package/templates/commands/orc-rules.md +66 -0
- package/templates/commands/orc-wiki.md +23 -1
- package/templates/skills/_shared/README.md +61 -54
- package/templates/skills/_shared/phases/README.md +1 -0
- package/templates/skills/_shared/phases/preflight.md +20 -0
- package/templates/skills/_shared/phases/rules.md +154 -0
- package/templates/skills/_shared/return-validation.md +28 -0
- package/templates/skills/_shared/rules/CREDITS.md +141 -0
- package/templates/skills/_shared/rules/INDEX.md +107 -0
- package/templates/skills/_shared/rules/code.md +229 -0
- package/templates/skills/_shared/rules/delivery.md +114 -0
- package/templates/skills/_shared/rules/ui.md +139 -0
- package/templates/skills/_shared/rules/writing.md +223 -0
- package/templates/skills/context-combiner/SKILL.md +9 -1
- package/templates/skills/orc/SKILL.md +7 -0
- package/templates/skills/orc-aftermath/SKILL.md +7 -0
- package/templates/skills/orc-analyze/SKILL.md +7 -0
- package/templates/skills/orc-analyze-mini/SKILL.md +9 -1
- package/templates/skills/orc-boundary/SKILL.md +7 -0
- package/templates/skills/orc-brainstorm/SKILL.md +7 -0
- package/templates/skills/orc-budget/SKILL.md +7 -0
- package/templates/skills/orc-challenge/SKILL.md +7 -0
- package/templates/skills/orc-claude/SKILL.md +7 -0
- package/templates/skills/orc-diy/SKILL.md +7 -0
- package/templates/skills/orc-explain/SKILL.md +7 -0
- package/templates/skills/orc-export/SKILL.md +7 -0
- package/templates/skills/orc-fast/SKILL.md +7 -0
- package/templates/skills/orc-grill/SKILL.md +7 -0
- package/templates/skills/orc-handoff/SKILL.md +9 -1
- package/templates/skills/orc-learn/SKILL.md +7 -0
- package/templates/skills/orc-mini/SKILL.md +7 -0
- package/templates/skills/orc-pact/SKILL.md +7 -0
- package/templates/skills/orc-poly/SKILL.md +7 -0
- package/templates/skills/orc-pr-driver/SKILL.md +9 -1
- package/templates/skills/orc-pr-setup/SKILL.md +9 -1
- package/templates/skills/orc-quick/SKILL.md +7 -0
- package/templates/skills/orc-retro/SKILL.md +7 -0
- package/templates/skills/orc-route/SKILL.md +7 -0
- package/templates/skills/orc-test/SKILL.md +7 -0
- package/templates/skills/orc-verify/SKILL.md +7 -0
- package/templates/skills/orc-wiki/SKILL.md +15 -0
- package/templates/skills/orc-wiki/references/partial-refresh.md +68 -0
- package/templates/skills/orc-wiki/references/phases/phase-0.md +15 -1
|
@@ -163,6 +163,13 @@ say so and use `../_shared/config-precedence.md`'s documented defaults, out
|
|
|
163
163
|
loud. Nothing this lane reads is contested, gated or a stop, so it owes no
|
|
164
164
|
preflight line and has no gate to honour.
|
|
165
165
|
|
|
166
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
167
|
+
|
|
168
|
+
`orc rules slice --lane orc-export --json` is the ONLY assembler; never build
|
|
169
|
+
the card here. It rides under the house rules and above the task —
|
|
170
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
171
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
172
|
+
never a silent choice) and `rules_overridden[]`.
|
|
166
173
|
## Calls
|
|
167
174
|
|
|
168
175
|
**ONE catalogue, and it is not you:** `orc lane calls orc-export --json` names every
|
|
@@ -192,6 +192,13 @@ documented defaults, out loud. Priorities and families:
|
|
|
192
192
|
Fast has no config key of its own — command-entry only; wave/scoring/review
|
|
193
193
|
keys never apply, and the tier edges the F0 gate reads arrive resolved.
|
|
194
194
|
|
|
195
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
196
|
+
|
|
197
|
+
`orc rules slice --lane orc-fast --json` is the ONLY assembler; never build
|
|
198
|
+
the card here. It rides under the house rules and above the task —
|
|
199
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
200
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
201
|
+
never a silent choice) and `rules_overridden[]`.
|
|
195
202
|
## Calls
|
|
196
203
|
|
|
197
204
|
**ONE catalogue, and it is not you:** `orc lane calls orc-fast --json` names every
|
|
@@ -232,6 +232,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
232
232
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
233
233
|
command you are about to run, out loud, before running it.
|
|
234
234
|
|
|
235
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
236
|
+
|
|
237
|
+
`orc rules slice --lane orc-grill --json` is the ONLY assembler; never build
|
|
238
|
+
the card here. It rides under the house rules and above the task —
|
|
239
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
240
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
241
|
+
never a silent choice) and `rules_overridden[]`.
|
|
235
242
|
## Waiting mid-run (`/orc-wait`)
|
|
236
243
|
|
|
237
244
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -220,4 +220,12 @@ exit code, and never re-derive a state word — the CLI's state words are the on
|
|
|
220
220
|
state words, and **an exit code is an ANSWER wherever that contract says so, not
|
|
221
221
|
a failure**. A call the answer does not name is a call this lane does not make.
|
|
222
222
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
223
|
-
command you are about to run, out loud, before running it.
|
|
223
|
+
command you are about to run, out loud, before running it.
|
|
224
|
+
|
|
225
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
226
|
+
|
|
227
|
+
`orc rules slice --lane orc-handoff --json` is the ONLY assembler; never build
|
|
228
|
+
the card here. It rides under the house rules and above the task —
|
|
229
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
230
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
231
|
+
never a silent choice) and `rules_overridden[]`.
|
|
@@ -175,6 +175,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
175
175
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
176
176
|
command you are about to run, out loud, before running it.
|
|
177
177
|
|
|
178
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
179
|
+
|
|
180
|
+
`orc rules slice --lane orc-learn --json` is the ONLY assembler; never build
|
|
181
|
+
the card here. It rides under the house rules and above the task —
|
|
182
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
183
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
184
|
+
never a silent choice) and `rules_overridden[]`.
|
|
178
185
|
## Waiting mid-run (`/orc-wait`)
|
|
179
186
|
|
|
180
187
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -176,6 +176,13 @@ documented defaults, out loud. Priorities and families:
|
|
|
176
176
|
Wave/scoring/scout keys never apply to mini — and they are not in the answer,
|
|
177
177
|
so there is nothing to render or ask.
|
|
178
178
|
|
|
179
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
180
|
+
|
|
181
|
+
`orc rules slice --lane orc-mini --json` is the ONLY assembler; never build
|
|
182
|
+
the card here. It rides under the house rules and above the task —
|
|
183
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
184
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
185
|
+
never a silent choice) and `rules_overridden[]`.
|
|
179
186
|
## Calls
|
|
180
187
|
|
|
181
188
|
**ONE catalogue, and it is not you:** `orc lane calls orc-mini --json` names every
|
|
@@ -249,6 +249,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
249
249
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
250
250
|
command you are about to run, out loud, before running it.
|
|
251
251
|
|
|
252
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
253
|
+
|
|
254
|
+
`orc rules slice --lane orc-pact --json` is the ONLY assembler; never build
|
|
255
|
+
the card here. It rides under the house rules and above the task —
|
|
256
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
257
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
258
|
+
never a silent choice) and `rules_overridden[]`.
|
|
252
259
|
## Waiting mid-run (`/orc-wait`)
|
|
253
260
|
|
|
254
261
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -236,6 +236,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
236
236
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
237
237
|
command you are about to run, out loud, before running it.
|
|
238
238
|
|
|
239
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
240
|
+
|
|
241
|
+
`orc rules slice --lane orc-poly --json` is the ONLY assembler; never build
|
|
242
|
+
the card here. It rides under the house rules and above the task —
|
|
243
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
244
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
245
|
+
never a silent choice) and `rules_overridden[]`.
|
|
239
246
|
## Waiting mid-run (`/orc-wait`)
|
|
240
247
|
|
|
241
248
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -193,4 +193,12 @@ exit code, and never re-derive a state word — the CLI's state words are the on
|
|
|
193
193
|
state words, and **an exit code is an ANSWER wherever that contract says so, not
|
|
194
194
|
a failure**. A call the answer does not name is a call this lane does not make.
|
|
195
195
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
196
|
-
command you are about to run, out loud, before running it.
|
|
196
|
+
command you are about to run, out loud, before running it.
|
|
197
|
+
|
|
198
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
199
|
+
|
|
200
|
+
`orc rules slice --lane orc-pr-driver --json` is the ONLY assembler; never build
|
|
201
|
+
the card here. It rides under the house rules and above the task —
|
|
202
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
203
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
204
|
+
never a silent choice) and `rules_overridden[]`.
|
|
@@ -209,4 +209,12 @@ exit code, and never re-derive a state word — the CLI's state words are the on
|
|
|
209
209
|
state words, and **an exit code is an ANSWER wherever that contract says so, not
|
|
210
210
|
a failure**. A call the answer does not name is a call this lane does not make.
|
|
211
211
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
212
|
-
command you are about to run, out loud, before running it.
|
|
212
|
+
command you are about to run, out loud, before running it.
|
|
213
|
+
|
|
214
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
215
|
+
|
|
216
|
+
`orc rules slice --lane orc-pr-setup --json` is the ONLY assembler; never build
|
|
217
|
+
the card here. It rides under the house rules and above the task —
|
|
218
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
219
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
220
|
+
never a silent choice) and `rules_overridden[]`.
|
|
@@ -328,6 +328,13 @@ orc-quick has no config key of its own and ignores every dispatch-forcing key
|
|
|
328
328
|
which is why five of them come back INERT with a reason. Say that at the gate;
|
|
329
329
|
see "Nothing can override this lane" above.
|
|
330
330
|
|
|
331
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
332
|
+
|
|
333
|
+
`orc rules slice --lane orc-quick --json` is the ONLY assembler; never build
|
|
334
|
+
the card here. It rides under the house rules and above the task —
|
|
335
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
336
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
337
|
+
never a silent choice) and `rules_overridden[]`.
|
|
331
338
|
## Calls
|
|
332
339
|
|
|
333
340
|
**ONE catalogue, and it is not you:** `orc lane calls orc-quick --json` names every
|
|
@@ -243,6 +243,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
243
243
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
244
244
|
command you are about to run, out loud, before running it.
|
|
245
245
|
|
|
246
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
247
|
+
|
|
248
|
+
`orc rules slice --lane orc-retro --json` is the ONLY assembler; never build
|
|
249
|
+
the card here. It rides under the house rules and above the task —
|
|
250
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
251
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
252
|
+
never a silent choice) and `rules_overridden[]`.
|
|
246
253
|
## Waiting mid-run (`/orc-wait`)
|
|
247
254
|
|
|
248
255
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -182,6 +182,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
182
182
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
183
183
|
command you are about to run, out loud, before running it.
|
|
184
184
|
|
|
185
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
186
|
+
|
|
187
|
+
`orc rules slice --lane orc-route --json` is the ONLY assembler; never build
|
|
188
|
+
the card here. It rides under the house rules and above the task —
|
|
189
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
190
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
191
|
+
never a silent choice) and `rules_overridden[]`.
|
|
185
192
|
## Waiting mid-run (`/orc-wait`)
|
|
186
193
|
|
|
187
194
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -227,6 +227,13 @@ Tier **Iterative** — one packet per completed cycle. Narration is DISPATCHED,
|
|
|
227
227
|
never remembered: build the PHASE PACKET and dispatch
|
|
228
228
|
`orc-trace-writer-haiku-4-5`. Canonical: `../_shared/phases/trace.md`.
|
|
229
229
|
|
|
230
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
231
|
+
|
|
232
|
+
`orc rules slice --lane orc-test --json` is the ONLY assembler; never build
|
|
233
|
+
the card here. It rides under the house rules and above the task —
|
|
234
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
235
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
236
|
+
never a silent choice) and `rules_overridden[]`.
|
|
230
237
|
## Waiting mid-run (`/orc-wait`)
|
|
231
238
|
|
|
232
239
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -99,6 +99,13 @@ a failure**. A call the answer does not name is a call this lane does not make.
|
|
|
99
99
|
Exit ≠ 0 from the catalogue itself → say the CLI is unavailable and name the
|
|
100
100
|
command you are about to run, out loud, before running it.
|
|
101
101
|
|
|
102
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
103
|
+
|
|
104
|
+
`orc rules slice --lane orc-verify --json` is the ONLY assembler; never build
|
|
105
|
+
the card here. It rides under the house rules and above the task —
|
|
106
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
107
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
108
|
+
never a silent choice) and `rules_overridden[]`.
|
|
102
109
|
## Waiting mid-run (`/orc-wait`)
|
|
103
110
|
|
|
104
111
|
Canonical: `../_shared/wait.md`. **`a lane that waits without a hand-back` has broken this contract.**
|
|
@@ -143,6 +143,14 @@ v0.41.0 has been recording and never reading. **Usage lives in its own file
|
|
|
143
143
|
100% doc-header-derived and `orc wiki sync` is its only writer. Render what the
|
|
144
144
|
CLI returns; never compute an order, a tier or an estimate here.
|
|
145
145
|
|
|
146
|
+
**One doc at a time (v1.7.0).** `/orc-wiki update <doc-or-topic>` is the targeted
|
|
147
|
+
refresh under the name people type; `/orc-wiki add "<topic>"` adds ONE new doc to
|
|
148
|
+
a wiki that already exists, without re-planning any other area. A topic is
|
|
149
|
+
resolved with `orc wiki resolve` (free) before anything is scanned — AMBIGUOUS is
|
|
150
|
+
a question, never a guess — a new row is RESERVED with `orc wiki add`, and the
|
|
151
|
+
run ends with `orc wiki refs`, the derived-reference sweep. Flow: A0–A7 in
|
|
152
|
+
references/partial-refresh.md.
|
|
153
|
+
|
|
146
154
|
## Refresh & staleness (references/staleness.md — THE canonical freshness reference)
|
|
147
155
|
|
|
148
156
|
Freshness is computed on read, never stored: measure `scan_commit` (from
|
|
@@ -163,6 +171,13 @@ the CLI is unavailable and fall back to `../_shared/config-precedence.md`'s
|
|
|
163
171
|
documented defaults, out loud. Priorities and families:
|
|
164
172
|
`../_shared/config-precedence.md`.
|
|
165
173
|
|
|
174
|
+
## Rules — the anti-slop card (`../_shared/phases/rules.md`)
|
|
175
|
+
|
|
176
|
+
`orc rules slice --lane orc-wiki --json` is the ONLY assembler; never build
|
|
177
|
+
the card here. It rides under the house rules and above the task —
|
|
178
|
+
**house rules > your project's rules > ORC's own packs** — and its `line` prints
|
|
179
|
+
VERBATIM at preflight. Returns gain `rules_applied[]`, `rules_conflicts[]` (a gap,
|
|
180
|
+
never a silent choice) and `rules_overridden[]`.
|
|
166
181
|
## Calls
|
|
167
182
|
|
|
168
183
|
**ONE catalogue, and it is not you:** `orc lane calls orc-wiki --json` names every
|
|
@@ -52,12 +52,20 @@ in this skill** — one engine, the same rule the wiki tier itself lives under
|
|
|
52
52
|
## Targeted refresh
|
|
53
53
|
|
|
54
54
|
```
|
|
55
|
+
/orc-wiki update <doc> the same thing, under the name people type
|
|
56
|
+
/orc-wiki update "<topic>" resolved to a doc first — see below
|
|
55
57
|
/orc-wiki refresh <doc>
|
|
56
58
|
/orc-wiki refresh --only api/refunds/**
|
|
57
59
|
/orc-wiki refresh --top 2
|
|
58
60
|
/orc-wiki refresh --all-touched (today's delta behaviour)
|
|
59
61
|
```
|
|
60
62
|
|
|
63
|
+
`update` is an ENTRY, not a second mechanism. A filename goes straight into
|
|
64
|
+
R0–R5 below. A topic goes through `orc wiki resolve "<topic>" --json` first
|
|
65
|
+
(free, no scan): **exit 0** names the doc · **exit 2** is AMBIGUOUS, so ask which
|
|
66
|
+
one rather than scanning a guess · **exit 1** means nothing covers it, and the
|
|
67
|
+
request is really an ADD.
|
|
68
|
+
|
|
61
69
|
It **skips Phase 0 branch detection and Phase 1 area planning entirely** — the doc
|
|
62
70
|
exists, so its coverage area is already in its own header. That skip is the whole
|
|
63
71
|
saving in wall-clock terms.
|
|
@@ -77,6 +85,66 @@ task refresh simply never reaches it.
|
|
|
77
85
|
**Crosslink rules are unchanged:** tags publish per scan-task, no refresh path
|
|
78
86
|
bulk-deletes `wiki/crosslink/`, and the dead-tag sweep still runs per point.
|
|
79
87
|
|
|
88
|
+
## Add ONE topic — `/orc-wiki add "<topic>"` (v1.7.0)
|
|
89
|
+
|
|
90
|
+
The other half of "one doc at a time". Targeted refresh answers *this doc has
|
|
91
|
+
moved*; this answers *this topic is not in the wiki at all* — and until v1.7.0 a
|
|
92
|
+
new coverage area only appeared as a by-product of the coverage-gap sweep during
|
|
93
|
+
a delta refresh, so "add the remittance feature" had no path that did not
|
|
94
|
+
re-plan every area in the repo.
|
|
95
|
+
|
|
96
|
+
Like a targeted refresh it **skips Phase 0 branch detection and Phase 1 area
|
|
97
|
+
planning**. Unlike one, it ends with the **reference sweep**: adding a doc moves
|
|
98
|
+
more derived surfaces than changing one does.
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
A0 resolve orc wiki resolve "<topic>" --json free
|
|
102
|
+
exit 0 MATCH → this is really an UPDATE. Say so, route there.
|
|
103
|
+
exit 2 AMBIGUOUS → ask which doc. NEVER scan a guess.
|
|
104
|
+
exit 1 NEW → continue.
|
|
105
|
+
exit 3 → no wiki, or unregistered. Fix that first.
|
|
106
|
+
A1 scope the resolver returns `suggested_covers` from PATH NAMES ONLY.
|
|
107
|
+
Show them as a proposal and let the user correct them. ONE turn.
|
|
108
|
+
A wrong glob is a doc that documents the wrong area forever.
|
|
109
|
+
A2 confirm slug · title · covers · the resolved TIER · the token + $ estimate.
|
|
110
|
+
ONE turn. NOTHING spawns before the user says yes.
|
|
111
|
+
A3 reserve orc wiki add <slug> --title "<t>" --covers "<glob>" free
|
|
112
|
+
Writes a STUB with `status: reserved` — a target for the scan,
|
|
113
|
+
not a document. It is reported as outstanding until a scan
|
|
114
|
+
replaces the body, so a half-finished add can never look done.
|
|
115
|
+
A4 scan ONE scan-task, at the tier the ladder resolved
|
|
116
|
+
A5 write doc body + crosslink tags (the per-scan-task rule, unchanged).
|
|
117
|
+
Replace `status: reserved` with a real `scanned_at`,
|
|
118
|
+
`scanned_commit` and `covered_files` set.
|
|
119
|
+
A6 references orc wiki refs free
|
|
120
|
+
A7 integrity the existing self-check, scoped to the new doc
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### A6 — the reference sweep, and why it is its own step
|
|
124
|
+
|
|
125
|
+
After ONE doc is written, these surfaces are derived from the doc SET and are
|
|
126
|
+
now behind it. Before v1.7.0 they were repaired from memory, one at a time, and
|
|
127
|
+
the ones nobody remembered stayed wrong — which is likeliest on a SMALL run,
|
|
128
|
+
because the run feels too small to need a sweep.
|
|
129
|
+
|
|
130
|
+
| Surface | What goes wrong | Repaired by |
|
|
131
|
+
|---|---|---|
|
|
132
|
+
| `wiki-meta.json` + `wiki/INDEX.md` | the new doc is not registered | `orc wiki refs` does it (free) |
|
|
133
|
+
| a reserved row | the reservation never got its scan | reported, with the update command |
|
|
134
|
+
| `wiki/orc-orientation.md` | its reading order predates the new doc | reported — free to regenerate |
|
|
135
|
+
| `wiki/orc-architecture-overview.md` | it names neither the file nor the area | reported — free, and OPTIONAL |
|
|
136
|
+
| the `CLAUDE.md` pointer block | its doc COUNT is now measurably wrong | reported |
|
|
137
|
+
| `wiki/crosslink/**` | a tag anchored to a file that is gone | reported, offered per tag, never bulk-deleted |
|
|
138
|
+
|
|
139
|
+
`orc wiki refs` **repairs only the registration**, because `orc wiki sync` is
|
|
140
|
+
free and already the single writer of those two files. Everything else is
|
|
141
|
+
REPORTED with its command. A sweep that silently regenerated prose would be
|
|
142
|
+
spending money nobody asked it to spend, which is the same rule the free-repair
|
|
143
|
+
ladder above is built on.
|
|
144
|
+
|
|
145
|
+
`orc wiki refs --check` reports and repairs nothing. Exit **0** clean · **1**
|
|
146
|
+
work pending or registration repaired · **2** cannot compute.
|
|
147
|
+
|
|
80
148
|
## The scan tier ladder (`wiki_scan_tier`, default `ladder`)
|
|
81
149
|
|
|
82
150
|
Every scan-task used to dispatch the most expensive scanner in the payload whether
|
|
@@ -48,6 +48,20 @@ Then detect state and branch:
|
|
|
48
48
|
- **Wiki checkpoint exists (mid-scan)** → RESUME. Re-anchor from
|
|
49
49
|
state-of-play + checkpoint; show "X of Y areas done, ~Z remaining"; light
|
|
50
50
|
cost note; continue where it stopped.
|
|
51
|
+
- **`/orc-wiki update <doc-or-topic>` (explicit)** → **TARGETED REFRESH**, the
|
|
52
|
+
same branch as `refresh <doc>` below and the same flow. It exists because
|
|
53
|
+
`update some-doc.md` is what a user actually types. A FILENAME routes straight
|
|
54
|
+
to the refresh; a TOPIC ("the remittance feature") goes through
|
|
55
|
+
`orc wiki resolve "<topic>" --json` first (free): exit 0 names the doc and you
|
|
56
|
+
refresh it, exit 2 is AMBIGUOUS and you ask which one, exit 1 means nothing
|
|
57
|
+
covers it and this is really an ADD.
|
|
58
|
+
- **`/orc-wiki add "<topic>"` (explicit)** → **ADD ONE TOPIC**
|
|
59
|
+
(references/partial-refresh.md, the A0–A7 flow). One new doc in a wiki that
|
|
60
|
+
already exists, without re-planning a single other area. It skips branch
|
|
61
|
+
detection and area planning like a targeted refresh does, and it ends with the
|
|
62
|
+
**reference sweep** (`orc wiki refs`) rather than a bare `orc wiki sync` —
|
|
63
|
+
adding a doc moves more derived surfaces than changing one does. Never start
|
|
64
|
+
it without the ONE confirmation turn at A2.
|
|
51
65
|
- **`/orc-wiki refresh <doc> | --only <glob> | --top N | --all-touched`
|
|
52
66
|
(explicit)** → **TARGETED REFRESH** (references/partial-refresh.md). Skips
|
|
53
67
|
branch detection AND area planning — the doc exists, so its coverage area is
|
|
@@ -66,6 +80,6 @@ Then detect state and branch:
|
|
|
66
80
|
re-publishes crosslink tags in the same pass (hard rule 11), preserves the
|
|
67
81
|
folder (rule 12), and ends by regenerating the orientation doc + atlas
|
|
68
82
|
(derived, cheap). A LEGACY wiki with unpublished tags is a backfill, not a
|
|
69
|
-
refresh — route to CROSSLINK-ONLY.
|
|
83
|
+
refresh — route to CROSSLINK-ONLY.
|
|
70
84
|
|
|
71
85
|
<!-- /orc:layer -->
|