@azure-id/orc 0.56.1 → 1.1.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.
Files changed (162) hide show
  1. package/CHANGELOG.md +219 -0
  2. package/README-id.md +49 -107
  3. package/README.md +694 -719
  4. package/bin/build-agents.js +18 -11
  5. package/bin/cli.js +33699 -29855
  6. package/bin/onboarding-content.js +0 -3
  7. package/bin/test-run.js +491 -0
  8. package/bin/verify-contracts.js +4330 -3277
  9. package/bin/verify-package.js +76 -6
  10. package/bin/webui/api.js +1201 -1163
  11. package/bin/webui/app.html +210 -198
  12. package/bin/webui/css/06-responsive.css +120 -108
  13. package/bin/webui/css/panels/extra.css +29 -0
  14. package/bin/webui/css/panels/lanes.css +134 -0
  15. package/bin/webui/css/panels/settings.css +79 -3
  16. package/bin/webui/css/panels/wait.css +123 -0
  17. package/bin/webui/fixtures/extra.js +2036 -1934
  18. package/bin/webui/fixtures/flow.js +2 -2
  19. package/bin/webui/fixtures/index.js +510 -486
  20. package/bin/webui/fixtures/lanes.js +218 -0
  21. package/bin/webui/fixtures/settings.js +261 -34
  22. package/bin/webui/fixtures/stats.js +3 -3
  23. package/bin/webui/fixtures/wait.js +97 -0
  24. package/bin/webui/i18n/TERMS.md +135 -134
  25. package/bin/webui/i18n/en/extra.json +345 -313
  26. package/bin/webui/i18n/en/lanes.json +29 -0
  27. package/bin/webui/i18n/en/nav.json +21 -19
  28. package/bin/webui/i18n/en/overview.json +2 -0
  29. package/bin/webui/i18n/en/settings.json +16 -5
  30. package/bin/webui/i18n/en/wait.json +41 -0
  31. package/bin/webui/i18n/id/extra.json +345 -313
  32. package/bin/webui/i18n/id/lanes.json +29 -0
  33. package/bin/webui/i18n/id/nav.json +21 -19
  34. package/bin/webui/i18n/id/overview.json +2 -0
  35. package/bin/webui/i18n/id/settings.json +15 -4
  36. package/bin/webui/i18n/id/wait.json +41 -0
  37. package/bin/webui/js/01-i18n.js +151 -149
  38. package/bin/webui/js/panels/extra.js +3199 -3011
  39. package/bin/webui/js/panels/lanes.js +259 -0
  40. package/bin/webui/js/panels/overview.js +10 -0
  41. package/bin/webui/js/panels/settings.js +149 -3
  42. package/bin/webui/js/panels/wait.js +253 -0
  43. package/package.json +39 -39
  44. package/templates/agents/MODEL-MAPPING.md +23 -35
  45. package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
  46. package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
  47. package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
  48. package/templates/agents/orc-executor-opus-5-high.md +1 -1
  49. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  50. package/templates/agents/orc-executor-opus-5-med.md +1 -1
  51. package/templates/agents/orc-retro-opus-5-med.md +73 -73
  52. package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
  53. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
  54. package/templates/commands/orc-route.md +1 -1
  55. package/templates/commands/orc-wait.md +19 -0
  56. package/templates/commands/orc.md +1 -1
  57. package/templates/hooks/orc-statusline.js +39 -0
  58. package/templates/skills/_shared/README.md +7 -3
  59. package/templates/skills/_shared/config-precedence.md +198 -0
  60. package/templates/skills/_shared/drift-recovery.md +1 -1
  61. package/templates/skills/_shared/extra-dispatch.md +159 -7
  62. package/templates/skills/_shared/interview.md +1 -1
  63. package/templates/skills/_shared/opus5-only.md +9 -7
  64. package/templates/skills/_shared/phases/README.md +82 -0
  65. package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
  66. package/templates/skills/_shared/phases/execution.md +143 -0
  67. package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
  68. package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
  69. package/templates/skills/_shared/phases/mock-example.md +56 -0
  70. package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
  71. package/templates/skills/_shared/phases/planning.md +135 -0
  72. package/templates/skills/_shared/phases/preflight.md +98 -0
  73. package/templates/skills/_shared/phases/review.md +53 -0
  74. package/templates/skills/_shared/phases/scoring.md +65 -0
  75. package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
  76. package/templates/skills/_shared/phases/security.md +55 -0
  77. package/templates/skills/_shared/phases/ship.md +88 -0
  78. package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
  79. package/templates/skills/_shared/phases/summary.md +48 -0
  80. package/templates/skills/_shared/phases/testgen.md +51 -0
  81. package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
  82. package/templates/skills/_shared/phases/verify.md +70 -0
  83. package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
  84. package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
  85. package/templates/skills/_shared/read-ladder.md +48 -0
  86. package/templates/skills/_shared/wait.md +240 -0
  87. package/templates/skills/context-combiner/SKILL.md +214 -187
  88. package/templates/skills/orc/README.md +148 -150
  89. package/templates/skills/orc/SKILL.md +75 -358
  90. package/templates/skills/orc/config.md +137 -389
  91. package/templates/skills/orc/examples/full-run-mock.md +1 -1
  92. package/templates/skills/orc/references/effort-and-mode.md +16 -18
  93. package/templates/skills/orc/references/phases/intake.md +47 -0
  94. package/templates/skills/orc/references/phases/integration.md +19 -0
  95. package/templates/skills/orc/references/preflight-report.md +4 -4
  96. package/templates/skills/orc/references/ultra-mode.md +117 -123
  97. package/templates/skills/orc/schemas/planning-output.md +279 -279
  98. package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
  99. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
  100. package/templates/skills/orc-aftermath/SKILL.md +158 -136
  101. package/templates/skills/orc-analyze/SKILL.md +252 -220
  102. package/templates/skills/orc-analyze/references/branching.md +51 -51
  103. package/templates/skills/orc-analyze/references/thin-input.md +1 -1
  104. package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
  105. package/templates/skills/orc-boundary/SKILL.md +249 -208
  106. package/templates/skills/orc-brainstorm/SKILL.md +377 -339
  107. package/templates/skills/orc-budget/SKILL.md +248 -225
  108. package/templates/skills/orc-challenge/README.md +1 -1
  109. package/templates/skills/orc-challenge/SKILL.md +298 -255
  110. package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
  111. package/templates/skills/orc-claude/SKILL.md +221 -199
  112. package/templates/skills/orc-diy/README.md +2 -1
  113. package/templates/skills/orc-diy/SKILL.md +132 -68
  114. package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
  115. package/templates/skills/orc-diy/references/compile.md +21 -7
  116. package/templates/skills/orc-diy/references/flow-schema.md +2 -2
  117. package/templates/skills/orc-doc/SKILL.md +49 -7
  118. package/templates/skills/orc-explain/SKILL.md +24 -0
  119. package/templates/skills/orc-export/SKILL.md +31 -5
  120. package/templates/skills/orc-fast/SKILL.md +218 -185
  121. package/templates/skills/orc-grill/SKILL.md +238 -207
  122. package/templates/skills/orc-handoff/SKILL.md +223 -204
  123. package/templates/skills/orc-learn/SKILL.md +181 -156
  124. package/templates/skills/orc-mini/SKILL.md +47 -24
  125. package/templates/skills/orc-pact/SKILL.md +255 -218
  126. package/templates/skills/orc-pattern/SKILL.md +154 -124
  127. package/templates/skills/orc-poly/SKILL.md +242 -216
  128. package/templates/skills/orc-poly/references/gather.md +1 -1
  129. package/templates/skills/orc-pr-driver/SKILL.md +196 -167
  130. package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
  131. package/templates/skills/orc-pr-setup/SKILL.md +212 -184
  132. package/templates/skills/orc-quick/README.md +2 -2
  133. package/templates/skills/orc-quick/SKILL.md +51 -13
  134. package/templates/skills/orc-quick/references/dispatch-gate.md +2 -3
  135. package/templates/skills/orc-retro/SKILL.md +249 -222
  136. package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
  137. package/templates/skills/orc-route/SKILL.md +188 -165
  138. package/templates/skills/orc-verify/SKILL.md +103 -84
  139. package/templates/skills/orc-wait/SKILL.md +163 -0
  140. package/templates/skills/orc-wiki/SKILL.md +60 -206
  141. package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
  142. package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
  143. package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
  144. package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
  145. package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
  146. package/templates/agents/orc-advisor-fable-5.md +0 -50
  147. package/templates/agents/orc-analyst-fable-5.md +0 -115
  148. package/templates/agents/orc-judge-fable-5.md +0 -79
  149. package/templates/agents/orc-planner-fable-5.md +0 -152
  150. package/templates/agents/orc-reviewer-fable-5.md +0 -57
  151. package/templates/skills/_shared/fable5-override.md +0 -56
  152. package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
  153. package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
  154. package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
  155. package/templates/skills/orc-diy/references/blocks/review.md +0 -18
  156. package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
  157. package/templates/skills/orc-diy/references/blocks/security.md +0 -25
  158. package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
  159. package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
  160. package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
  161. package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
  162. package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ /**
3
+ * fixtures/wait.js — canned `orc usage check` / `orc wait …` responses.
4
+ *
5
+ * ONE OF EVERY STATE, including the ugly ones. You cannot design an `unknown`
6
+ * chip on a project whose statusline is happily writing a reading every second,
7
+ * and `unknown` is the state that matters most here: it is what every install
8
+ * on Claude Code before v2.1.80 sees, forever.
9
+ */
10
+
11
+ // LOW, and low on the WORST window rather than the obvious one. The 5-hour
12
+ // window is the one people watch; this fixture has it comfortable and the
13
+ // weekly one nearly gone, which is the case a panel gets wrong.
14
+ const usage = {
15
+ ok: true,
16
+ state: "low",
17
+ five_hour: {
18
+ window: "5h",
19
+ used_percentage: 62,
20
+ remaining_percentage: 38,
21
+ resets_at: new Date(Date.now() + 96 * 60000).toISOString(),
22
+ resets_in_minutes: 96,
23
+ low: false,
24
+ },
25
+ seven_day: {
26
+ window: "wk",
27
+ used_percentage: 94,
28
+ remaining_percentage: 6,
29
+ resets_at: new Date(Date.now() + 2 * 86400000).toISOString(),
30
+ resets_in_minutes: 2880,
31
+ low: true,
32
+ },
33
+ worst: "wk",
34
+ context: 81,
35
+ stop_pct: 10,
36
+ gate: "wait",
37
+ reading_age_minutes: 2,
38
+ note: "read BEFORE a wave; the wave then spends tokens, so this is a reading and not a promise.",
39
+ };
40
+
41
+ // The state a fresh install on older Claude Code sits in permanently.
42
+ const usageUnknown = {
43
+ ok: true,
44
+ state: "unknown",
45
+ reason: "no reading in the last 30 minutes",
46
+ five_hour: null,
47
+ seven_day: null,
48
+ context: null,
49
+ stop_pct: 10,
50
+ gate: "warn",
51
+ note: "unknown is not low — a run is never stopped on a missing reading. Claude Code before v2.1.80 sends no usage headers.",
52
+ };
53
+
54
+ const waitLanes = {
55
+ ok: true,
56
+ modes: ["safe", "soft", "hard"],
57
+ checkpoints: ["full", "docset", "entry", "cycle", "snapshot", "none"],
58
+ lanes: [
59
+ { lane: "/orc", checkpoint: "full", safe_point: "wave or phase edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the full checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
60
+ { lane: "/orc-doc", checkpoint: "full", safe_point: "wave edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the full checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
61
+ { lane: "/orc-quick", checkpoint: "entry", safe_point: "after an entry closes", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the entry checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
62
+ { lane: "/orc-brainstorm", checkpoint: "snapshot", safe_point: "phase edge", modes: ["safe", "soft", "hard"], modes_differ: true, detail: "soft forces the snapshot checkpoint before it stops; hard writes RESUME.md only and can lose an in-flight return." },
63
+ // A `none` row KEEPS ITS SLOT. Filtering it out would make "this lane has
64
+ // nothing to checkpoint" and "this lane does not support a wait" identical.
65
+ { lane: "/orc-explain", checkpoint: "none", safe_point: "read-only, seconds long", modes: ["safe", "soft", "hard"], modes_differ: false, detail: "nothing to checkpoint — one dispatch, or a read. safe, soft and hard behave identically here." },
66
+ { lane: "/orc-verify", checkpoint: "none", safe_point: "single dispatch", modes: ["safe", "soft", "hard"], modes_differ: false, detail: "nothing to checkpoint — one dispatch, or a read. safe, soft and hard behave identically here." },
67
+ ],
68
+ note: "A lane not in this list does not support a wait.",
69
+ };
70
+
71
+ // Blocked AND waiting at once — the busiest the card ever gets.
72
+ const waitStatus = {
73
+ ok: true,
74
+ run: "rate-limit-api",
75
+ waiting: true,
76
+ mode: "soft",
77
+ hop: 30,
78
+ hops_done: 2,
79
+ hops_planned: 4,
80
+ ends_at: new Date(Date.now() + 44 * 60000).toISOString(),
81
+ cancel_requested: false,
82
+ blocked: true,
83
+ block_reason: "window resets in 5m, task needs 10",
84
+ blocked_at: new Date(Date.now() - 12 * 60000).toISOString(),
85
+ block_age_minutes: 12,
86
+ };
87
+
88
+ // No run in flight. An empty result is an ANSWER, so it still carries an object.
89
+ const waitStatusNone = {
90
+ ok: true,
91
+ run: null,
92
+ waiting: false,
93
+ blocked: false,
94
+ note: "no run is in flight",
95
+ };
96
+
97
+ module.exports = { usage, usageUnknown, waitLanes, waitStatus, waitStatusNone };
@@ -1,134 +1,135 @@
1
- # Panel wording — the term list
2
-
3
- > One page. It exists so the next two hundred strings stay consistent, because
4
- > without it a wording pass drifts back within two releases.
5
-
6
- The panel's **instruction text** is written in Simplified Technical English
7
- (ASD-STE100 in spirit, not in certification). Instruction text is anything the
8
- user must **act on**: a button, a field label, a hint, an error, a gate, a
9
- countdown, an install or connect step.
10
-
11
- **Rationale prose keeps its voice** and only gets shorter. Sentences like *"It
12
- stops someone at your keyboard, not someone who copied the file"* draw a
13
- distinction STE has no vocabulary for; flattened, they become true and useless.
14
-
15
- ---
16
-
17
- ## The rule that is not negotiable
18
-
19
- > **NEVER simplify a CLI-computed value.**
20
-
21
- A state word, an exit reason, a doctor message, a config key, a model id, a
22
- provider id, a path, a band or a command is **not prose** and is not the panel's
23
- to rewrite. A simplified state word is a state that does not exist — the same
24
- failure as a translated config key.
25
-
26
- This applies to `bin/cli.js --json` output in every panel, in every language.
27
-
28
- ---
29
-
30
- ## How to write an instruction
31
-
32
- - One instruction per sentence.
33
- - 20 words maximum.
34
- - Active voice, present tense, "you" as the subject.
35
- - The condition comes **before** the action: *"If the test is green, save the key."*
36
- - No phrasal verb where a single verb exists.
37
-
38
- ---
39
-
40
- ## One word, one meaning
41
-
42
- Pick the left column. Never use the right column for the same idea.
43
-
44
- | use | never |
45
- |---|---|
46
- | **connect** (make a connection to a provider) | add, link, hook up, set up |
47
- | **test** (prove a connection answers) | probe, ping, check, try |
48
- | **delete** (remove permanently) | remove, forget, drop, clear, wipe |
49
- | **save** (write and keep) | store, persist, remember |
50
- | **enable** / **disable** | turn on, turn off, switch on, activate |
51
- | **configure** | set up, sort out |
52
- | **run** (execute a command) | fire, kick off, trigger, invoke |
53
- | **open** (a file, a window, a terminal) | bring up, pull up, launch |
54
- | **install** | get, grab, pull |
55
- | **refresh** (read again) | reload, re-fetch, sync |
56
- | **stop** (end before it finishes) | halt, abort, kill, cancel |
57
- | **wait** | hold, pause, hang on |
58
- | **choose** | pick, select from |
59
- | **show** | display, render, surface |
60
- | **key** (a credential value) | token, secret, api key |
61
- | **passphrase** (what opens the vault) | password, phrase, secret |
62
- | **deadline** (when a saved passphrase ends) | expiry, timeout, TTL, lifetime |
63
- | **connection** (a configured profile) | profile, endpoint, provider link |
64
- | **document** | doc, file, artefact |
65
- | **section** | part, chunk, block |
66
- | **command** | line, invocation |
67
-
68
- Two exceptions, both because they are the CLI's own words and the rule above
69
- outranks this table:
70
-
71
- - `profile` where the CLI prints `profile`;
72
- - `ping`, `probe` and `forget` where they are the **name of a command**
73
- (`orc extra ping`, `orc extra session --forget`).
74
-
75
- ---
76
-
77
- ## Where each rule applies
78
-
79
- | STE, strictly | keep the voice |
80
- |---|---|
81
- | button and control labels | the honesty sentences (the passphrase deadline, `tok=none`, "zero reroutes is not evidence") |
82
- | field labels and hints | the boundary card |
83
- | error and refusal text | the "why this design" notes |
84
- | every gate and countdown sentence | trace-format explanations |
85
- | install and connect steps | |
86
- | the passphrase modal, **end to end** — it is a procedure and it cannot be dismissed | |
87
-
88
- ---
89
-
90
- ## Keys that keep their voice
91
-
92
- The default is STE: **a new key is instruction text unless it is listed here.**
93
- Opting out is a deliberate line in a diff somebody reads, which is the same
94
- shape as the contract-lint table.
95
-
96
- These are the sentences doing the most work in this subsystem, and STE has no
97
- vocabulary for the distinctions they draw. Flattened, they become true and
98
- useless. The test parses this fenced list by name.
99
-
100
- ```prose-keys
101
- extra.boundary.leaves
102
- extra.boundary.whom
103
- extra.boundary.cannot
104
- extra.boundary.fence
105
- extra.boundary.probe
106
- extra.providers.subWhy
107
- extra.providers.noModels
108
- extra.providers.stale
109
- extra.routing.gapWhy
110
- extra.gate.hiddenWhy
111
- extra.cost.noRate
112
- extra.cost.sourcesWhy
113
- extra.live.noReport
114
- extra.tools.subWhy
115
- extra.tools.altNone
116
- extra.tools.neverElevates
117
- extra.add.vaultWarn
118
- extra.session.honesty
119
- extra.lanes.subWhy
120
- extra.guard.subWhy
121
- extra.recovery.noteWhy
122
- extra.slots.subWhy
123
- extra.slots.keepsSlotWhy
124
- ```
125
-
126
- ---
127
-
128
- ## What is NOT checked automatically
129
-
130
- There is no STE checker in this repo and there is not going to be one: a real
131
- one needs the approved dictionary, which is licensed. A test asserts the cheap
132
- half no string in the STE set is over 20 words, and no banned synonym appears
133
- and the rest is this page plus review. A checker that half-works would be
134
- worse than none, because people would trust it.
1
+ # Panel wording — the term list
2
+
3
+ > One page. It exists so the next two hundred strings stay consistent, because
4
+ > without it a wording pass drifts back within two releases.
5
+
6
+ The panel's **instruction text** is written in Simplified Technical English
7
+ (ASD-STE100 in spirit, not in certification). Instruction text is anything the
8
+ user must **act on**: a button, a field label, a hint, an error, a gate, a
9
+ countdown, an install or connect step.
10
+
11
+ **Rationale prose keeps its voice** and only gets shorter. Sentences like *"It
12
+ stops someone at your keyboard, not someone who copied the file"* draw a
13
+ distinction STE has no vocabulary for; flattened, they become true and useless.
14
+
15
+ ---
16
+
17
+ ## The rule that is not negotiable
18
+
19
+ > **NEVER simplify a CLI-computed value.**
20
+
21
+ A state word, an exit reason, a doctor message, a config key, a model id, a
22
+ provider id, a path, a band or a command is **not prose** and is not the panel's
23
+ to rewrite. A simplified state word is a state that does not exist — the same
24
+ failure as a translated config key.
25
+
26
+ This applies to `bin/cli.js --json` output in every panel, in every language.
27
+
28
+ ---
29
+
30
+ ## How to write an instruction
31
+
32
+ - One instruction per sentence.
33
+ - 20 words maximum.
34
+ - Active voice, present tense, "you" as the subject.
35
+ - The condition comes **before** the action: *"If the test is green, save the key."*
36
+ - No phrasal verb where a single verb exists.
37
+
38
+ ---
39
+
40
+ ## One word, one meaning
41
+
42
+ Pick the left column. Never use the right column for the same idea.
43
+
44
+ | use | never |
45
+ |---|---|
46
+ | **connect** (make a connection to a provider) | add, link, hook up, set up |
47
+ | **test** (prove a connection answers) | probe, ping, check, try |
48
+ | **delete** (remove permanently) | remove, forget, drop, clear, wipe |
49
+ | **save** (write and keep) | store, persist, remember |
50
+ | **enable** / **disable** | turn on, turn off, switch on, activate |
51
+ | **configure** | set up, sort out |
52
+ | **run** (execute a command) | fire, kick off, trigger, invoke |
53
+ | **open** (a file, a window, a terminal) | bring up, pull up, launch |
54
+ | **install** | get, grab, pull |
55
+ | **refresh** (read again) | reload, re-fetch, sync |
56
+ | **stop** (end before it finishes) | halt, abort, kill, cancel |
57
+ | **wait** | hold, pause, hang on |
58
+ | **choose** | pick, select from |
59
+ | **show** | display, render, surface |
60
+ | **key** (a credential value) | token, secret, api key |
61
+ | **passphrase** (what opens the vault) | password, phrase, secret |
62
+ | **deadline** (when a saved passphrase ends) | expiry, timeout, TTL, lifetime |
63
+ | **connection** (a configured profile) | profile, endpoint, provider link |
64
+ | **document** | doc, file, artefact |
65
+ | **section** | part, chunk, block |
66
+ | **command** | line, invocation |
67
+
68
+ Two exceptions, both because they are the CLI's own words and the rule above
69
+ outranks this table:
70
+
71
+ - `profile` where the CLI prints `profile`;
72
+ - `ping`, `probe` and `forget` where they are the **name of a command**
73
+ (`orc extra ping`, `orc extra session --forget`).
74
+
75
+ ---
76
+
77
+ ## Where each rule applies
78
+
79
+ | STE, strictly | keep the voice |
80
+ |---|---|
81
+ | button and control labels | the honesty sentences (the passphrase deadline, `tok=none`, "zero reroutes is not evidence") |
82
+ | field labels and hints | the boundary card |
83
+ | error and refusal text | the "why this design" notes |
84
+ | every gate and countdown sentence | trace-format explanations |
85
+ | install and connect steps | |
86
+ | the passphrase modal, **end to end** — it is a procedure and it cannot be dismissed | |
87
+
88
+ ---
89
+
90
+ ## Keys that keep their voice
91
+
92
+ The default is STE: **a new key is instruction text unless it is listed here.**
93
+ Opting out is a deliberate line in a diff somebody reads, which is the same
94
+ shape as the contract-lint table.
95
+
96
+ These are the sentences doing the most work in this subsystem, and STE has no
97
+ vocabulary for the distinctions they draw. Flattened, they become true and
98
+ useless. The test parses this fenced list by name.
99
+
100
+ ```prose-keys
101
+ extra.boundary.leaves
102
+ extra.boundary.whom
103
+ extra.boundary.cannot
104
+ extra.boundary.fence
105
+ extra.boundary.probe
106
+ extra.providers.subWhy
107
+ extra.providers.noModels
108
+ extra.providers.stale
109
+ extra.routing.gapWhy
110
+ extra.gate.hiddenWhy
111
+ extra.cost.noRate
112
+ extra.cost.sourcesWhy
113
+ extra.live.noReport
114
+ extra.tools.subWhy
115
+ extra.tools.altNone
116
+ extra.tools.neverElevates
117
+ extra.add.vaultWarn
118
+ extra.session.honesty
119
+ extra.lanes.subWhy
120
+ extra.guard.subWhy
121
+ extra.recovery.noteWhy
122
+ extra.demotion.noteWhy
123
+ extra.slots.subWhy
124
+ extra.slots.keepsSlotWhy
125
+ ```
126
+
127
+ ---
128
+
129
+ ## What is NOT checked automatically
130
+
131
+ There is no STE checker in this repo and there is not going to be one: a real
132
+ one needs the approved dictionary, which is licensed. A test asserts the cheap
133
+ half no string in the STE set is over 20 words, and no banned synonym appears
134
+ and the rest is this page plus review. A checker that half-works would be
135
+ worse than none, because people would trust it.