@azure-id/orc 1.9.2 → 2.0.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.
Files changed (172) hide show
  1. package/CHANGELOG.md +321 -0
  2. package/README-id.md +21 -36
  3. package/README.md +25 -36
  4. package/bin/build-agents.js +117 -20
  5. package/bin/cli.js +725 -29
  6. package/bin/gotcha-import.js +1081 -0
  7. package/bin/gotcha.js +1286 -0
  8. package/bin/graph-query.js +1 -1
  9. package/bin/graph.js +717 -717
  10. package/bin/habit.js +1453 -0
  11. package/bin/mockrun-catalog.js +281 -276
  12. package/bin/run-undo.js +398 -0
  13. package/bin/trace-write.js +657 -0
  14. package/bin/verify-contracts.js +525 -79
  15. package/bin/verify-package.js +51 -4
  16. package/bin/webui/api.js +26 -0
  17. package/bin/webui/app.html +239 -232
  18. package/bin/webui/css/00-tokens.css +110 -92
  19. package/bin/webui/css/04-motion.css +87 -0
  20. package/bin/webui/css/06-responsive.css +203 -178
  21. package/bin/webui/css/panels/behaviour.css +205 -0
  22. package/bin/webui/fixtures/behaviour.js +532 -0
  23. package/bin/webui/fixtures/index.js +34 -0
  24. package/bin/webui/fixtures/knowledge.js +7 -1
  25. package/bin/webui/fixtures/stats.js +16 -0
  26. package/bin/webui/i18n/en/behaviour.json +143 -0
  27. package/bin/webui/i18n/en/nav.json +25 -24
  28. package/bin/webui/i18n/en/tour.json +37 -35
  29. package/bin/webui/i18n/id/behaviour.json +143 -0
  30. package/bin/webui/i18n/id/nav.json +25 -24
  31. package/bin/webui/i18n/id/tour.json +37 -35
  32. package/bin/webui/js/01-i18n.js +155 -154
  33. package/bin/webui/js/90-tour.js +498 -494
  34. package/bin/webui/js/91-shortcuts.js +126 -126
  35. package/bin/webui/js/99-boot.js +121 -118
  36. package/bin/webui/js/panels/behaviour.js +1022 -0
  37. package/mock-run/INDEX.md +109 -107
  38. package/mock-run/gotcha-import.md +118 -0
  39. package/mock-run/habits.md +129 -0
  40. package/mock-run/orc-quick.md +6 -1
  41. package/package.json +1 -1
  42. package/templates/agents/MODEL-MAPPING.md +7 -7
  43. package/templates/agents/orc-advisor-opus-5-xhigh.md +1 -7
  44. package/templates/agents/orc-analyze-mini-opus-5-med.md +1 -6
  45. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +1 -4
  46. package/templates/agents/orc-claude-writer-opus-4-8-high.md +48 -53
  47. package/templates/agents/orc-claude-writer-opus-5-med.md +1 -8
  48. package/templates/agents/orc-context-combiner-opus-5-high.md +1 -11
  49. package/templates/agents/orc-executor-haiku-4-5.md +14 -6
  50. package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
  51. package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
  52. package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
  53. package/templates/agents/orc-executor-opus-5-high.md +14 -6
  54. package/templates/agents/orc-executor-opus-5-low.md +14 -6
  55. package/templates/agents/orc-executor-opus-5-med.md +14 -6
  56. package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
  57. package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
  58. package/templates/agents/orc-executor-sonnet-5-high.md +14 -6
  59. package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
  60. package/templates/agents/orc-judge-opus-5-xhigh.md +5 -9
  61. package/templates/agents/orc-learn-writer-opus-5-low.md +1 -7
  62. package/templates/agents/orc-pattern-codifier-opus-5-med.md +1 -8
  63. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
  64. package/templates/agents/orc-planner-mini-opus-5-med.md +1 -4
  65. package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -2
  66. package/templates/agents/orc-planner-opus-5-med.md +1 -4
  67. package/templates/agents/orc-recon-opus-5-low.md +1 -8
  68. package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
  69. package/templates/agents/orc-retro-opus-5-med.md +6 -8
  70. package/templates/agents/orc-retro-sonnet-5-high.md +6 -7
  71. package/templates/agents/orc-reviewer-opus-5-med.md +52 -16
  72. package/templates/agents/orc-scout-opus-5-low.md +1 -6
  73. package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
  74. package/templates/agents/orc-system-analyst-opus-5-high.md +1 -6
  75. package/templates/agents/orc-test-author-opus-5-med.md +4 -5
  76. package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
  77. package/templates/agents/orc-verifier-opus-5-med.md +16 -8
  78. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +74 -79
  79. package/templates/agents/orc-wiki-scanner-opus-5-med.md +1 -8
  80. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
  81. package/templates/commands/orc-analyze.md +13 -21
  82. package/templates/commands/orc-fast.md +10 -15
  83. package/templates/commands/orc-poly.md +12 -21
  84. package/templates/commands/orc-pr-driver.md +11 -30
  85. package/templates/commands/orc-pr-setup.md +10 -31
  86. package/templates/commands/orc-route.md +11 -41
  87. package/templates/commands/orc-test.md +5 -60
  88. package/templates/hooks/README.md +34 -0
  89. package/templates/hooks/orc-session-hook.js +264 -0
  90. package/templates/hooks/orc-statusline.js +3 -1
  91. package/templates/skills/_shared/README.md +9 -0
  92. package/templates/skills/_shared/code-graph.md +47 -55
  93. package/templates/skills/_shared/config-precedence.md +3 -1
  94. package/templates/skills/_shared/extra-dispatch.md +73 -88
  95. package/templates/skills/_shared/gotchas.md +228 -177
  96. package/templates/skills/_shared/habits.md +101 -0
  97. package/templates/skills/_shared/lane-contract.md +84 -0
  98. package/templates/skills/_shared/phases/README.md +142 -83
  99. package/templates/skills/_shared/phases/analyst-gates.md +10 -21
  100. package/templates/skills/_shared/phases/execution.md +8 -14
  101. package/templates/skills/_shared/phases/house-rules.md +27 -32
  102. package/templates/skills/_shared/phases/intake.md +127 -133
  103. package/templates/skills/_shared/phases/mock-example.md +46 -56
  104. package/templates/skills/_shared/phases/plan-handoff.md +91 -97
  105. package/templates/skills/_shared/phases/planning.md +7 -17
  106. package/templates/skills/_shared/phases/preflight.md +19 -42
  107. package/templates/skills/_shared/phases/review.md +23 -27
  108. package/templates/skills/_shared/phases/rules.md +18 -42
  109. package/templates/skills/_shared/phases/scoring.md +55 -65
  110. package/templates/skills/_shared/phases/security-checklist.md +46 -50
  111. package/templates/skills/_shared/phases/security.md +45 -55
  112. package/templates/skills/_shared/phases/ship.md +6 -15
  113. package/templates/skills/_shared/phases/stop-resume.md +2 -5
  114. package/templates/skills/_shared/phases/summary.md +73 -48
  115. package/templates/skills/_shared/phases/testgen.md +41 -51
  116. package/templates/skills/_shared/phases/trace-verbs.md +433 -0
  117. package/templates/skills/_shared/phases/trace.md +136 -367
  118. package/templates/skills/_shared/phases/verify.md +62 -70
  119. package/templates/skills/_shared/phases/wave-grouping.md +128 -133
  120. package/templates/skills/_shared/phases/wiki-consult.md +10 -6
  121. package/templates/skills/_shared/read-ladder.md +2 -55
  122. package/templates/skills/_shared/return-validation.md +17 -70
  123. package/templates/skills/_shared/review-slice.md +79 -0
  124. package/templates/skills/_shared/smoke-gate.md +46 -28
  125. package/templates/skills/context-combiner/SKILL.md +15 -44
  126. package/templates/skills/orc/SKILL.md +34 -62
  127. package/templates/skills/orc/references/pattern-gate.md +89 -89
  128. package/templates/skills/orc/references/phases/intake.md +41 -47
  129. package/templates/skills/orc/references/phases/integration.md +13 -19
  130. package/templates/skills/orc/references/preflight-report.md +8 -9
  131. package/templates/skills/orc/references/ultra-mode.md +8 -6
  132. package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
  133. package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
  134. package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
  135. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +11 -52
  136. package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
  137. package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
  138. package/templates/skills/orc/subskills/orc-testgen/SKILL.md +11 -22
  139. package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
  140. package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
  141. package/templates/skills/orc-advisor/SKILL.md +56 -60
  142. package/templates/skills/orc-analyze/SKILL.md +30 -66
  143. package/templates/skills/orc-analyze/schemas/report-audit.md +2 -1
  144. package/templates/skills/orc-analyze/schemas/report-prose.md +2 -1
  145. package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
  146. package/templates/skills/orc-diy/README.md +31 -0
  147. package/templates/skills/orc-diy/SKILL.md +23 -74
  148. package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
  149. package/templates/skills/orc-fast/SKILL.md +44 -72
  150. package/templates/skills/orc-judge/SKILL.md +77 -82
  151. package/templates/skills/orc-mini/SKILL.md +61 -109
  152. package/templates/skills/orc-pattern/SKILL.md +27 -48
  153. package/templates/skills/orc-poly/SKILL.md +32 -61
  154. package/templates/skills/orc-pr-driver/SKILL.md +25 -51
  155. package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
  156. package/templates/skills/orc-pr-setup/SKILL.md +20 -45
  157. package/templates/skills/orc-quick/README.md +43 -2
  158. package/templates/skills/orc-quick/SKILL.md +76 -107
  159. package/templates/skills/orc-quick/references/dispatch-gate.md +16 -5
  160. package/templates/skills/orc-quick/references/gh-mode.md +48 -1
  161. package/templates/skills/orc-quick/references/look.md +3 -1
  162. package/templates/skills/orc-retro/SKILL.md +19 -18
  163. package/templates/skills/orc-retro/examples/retro-mock.md +1 -1
  164. package/templates/skills/orc-route/SKILL.md +25 -45
  165. package/templates/skills/orc-test/SKILL.md +16 -37
  166. package/templates/skills/orc-verify/SKILL.md +14 -32
  167. package/templates/skills/orc-wait/SKILL.md +156 -163
  168. package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -6
  169. package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
  170. package/templates/skills/orc-wiki/references/phases/phase-2.md +1 -6
  171. package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
  172. package/templates/skills/orc-wiki/references/phases/phase-3c.md +1 -6
@@ -1,232 +1,239 @@
1
- <!doctype html>
2
- <html lang="en" data-theme="dark">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <meta name="referrer" content="no-referrer">
7
- <title>orc ui</title>
8
- <!--
9
- THE ASSET MANIFEST. This list is the load order, and for CSS the load order is
10
- the cascade order — which is why the files carry numeric prefixes and why
11
- 06-responsive and 04-motion are last (both override rules from the shell AND
12
- from panels, and several of their declarations are deliberately not
13
- !important). One <link> per file, never @import: an @import request carries no
14
- session token of its own and would 401.
15
-
16
- A file that is not listed here does not run, and the test suite reads THIS
17
- list — appJs()/appCss() in test/_helpers.js concatenate exactly what the
18
- browser loads, so a forgotten entry cannot hide behind a passing suite.
19
- -->
20
- <link rel="stylesheet" href="css/00-tokens.css">
21
- <link rel="stylesheet" href="css/01-base.css">
22
- <link rel="stylesheet" href="css/02-shell.css">
23
- <link rel="stylesheet" href="css/03-components.css">
24
- <link rel="stylesheet" href="css/panels/overview.css">
25
- <link rel="stylesheet" href="css/05-tour.css">
26
- <link rel="stylesheet" href="css/panels/settings.css">
27
- <link rel="stylesheet" href="css/panels/lanes.css">
28
- <link rel="stylesheet" href="css/panels/rules.css">
29
- <link rel="stylesheet" href="css/panels/runs.css">
30
- <link rel="stylesheet" href="css/panels/knowledge.css">
31
- <link rel="stylesheet" href="css/panels/stats.css">
32
- <link rel="stylesheet" href="css/panels/flow.css">
33
- <link rel="stylesheet" href="css/panels/crosslink.css">
34
- <link rel="stylesheet" href="css/panels/learn.css">
35
- <link rel="stylesheet" href="css/panels/mockrun.css">
36
- <link rel="stylesheet" href="css/panels/experiment.css">
37
- <link rel="stylesheet" href="css/panels/maintenance.css">
38
- <link rel="stylesheet" href="css/panels/pact.css">
39
- <link rel="stylesheet" href="css/panels/boundary.css">
40
- <link rel="stylesheet" href="css/panels/wait.css">
41
- <link rel="stylesheet" href="css/panels/hookui.css">
42
- <link rel="stylesheet" href="css/panels/handoff.css">
43
- <link rel="stylesheet" href="css/panels/challenge.css">
44
- <link rel="stylesheet" href="css/panels/docs.css">
45
- <link rel="stylesheet" href="css/panels/extra.css">
46
- <link rel="stylesheet" href="css/panels/test.css">
47
- <link rel="stylesheet" href="css/06-responsive.css">
48
- <link rel="stylesheet" href="css/04-motion.css">
49
- </head>
50
- <body>
51
-
52
- <!--
53
- The shell is deliberately static and small: every panel is rendered by its own
54
- function in app.js against its own endpoint, with no shared mutable state, so
55
- rewriting one panel cannot break another. See the plan, §9.
56
- No inline <script> or style="" anywhere — the server sends a strict CSP.
57
- -->
58
-
59
- <div class="shell">
60
-
61
- <nav class="rail" aria-label="Panels">
62
- <div class="brand">
63
- <span class="brand-mark" aria-hidden="true">◆</span>
64
- <span class="brand-text">orc<span class="brand-dim">&nbsp;ui</span></span>
65
- </div>
66
-
67
- <!--
68
- data-idx is the keyboard shortcut for that panel; the rail reveals the
69
- numbers on hover so they are discoverable without a legend.
70
- data-i18n names the string table entry: the text between the tags is the
71
- English fallback that ships in the markup, so a failed i18n fetch renders
72
- a readable English rail rather than a column of empty links.
73
- -->
74
- <ul class="nav" id="nav">
75
- <li><a href="#/overview" data-panel="overview" data-idx="1" data-i18n="nav.overview">Overview</a></li>
76
- <li><a href="#/settings" data-panel="settings" data-idx="2" data-i18n="nav.settings">Settings</a></li>
77
- <!--
78
- v1.0.0 W16. Lanes sits directly under Settings because it answers the
79
- other half of the same question. Settings says what a key resolves to
80
- and which lanes read it; this says what those lanes then DO with it —
81
- which shared phases they run, in order, and which CLI calls they make.
82
- -->
83
- <li><a href="#/lanes" data-panel="lanes" data-idx="l" data-i18n="nav.lanes">Lanes</a></li>
84
- <!--
85
- v1.7.0. Rules sits directly under Lanes because it is the other half of
86
- the same answer: Lanes says which phases a lane runs, this says which
87
- rules ride in every slice it builds — and it is the one panel here where
88
- a project can change what ORC writes, so it belongs with Settings and
89
- Lanes rather than down among the reading panels.
90
- -->
91
- <li><a href="#/rules" data-panel="rules" data-idx="r" data-i18n="nav.rules">Rules</a></li>
92
- <li><a href="#/runs" data-panel="runs" data-idx="3" data-i18n="nav.runs">Runs</a></li>
93
- <li><a href="#/knowledge" data-panel="knowledge" data-idx="4" data-i18n="nav.knowledge">Knowledge</a></li>
94
- <li><a href="#/stats" data-panel="stats" data-idx="5" data-i18n="nav.stats">Stats</a></li>
95
- <!--
96
- v0.46.0. Promises and Boundary sit next to Knowledge because they ARE
97
- knowledge — derived, coverage-anchored, and stale the same way a wiki doc
98
- is. Self-serve sits last of the three: it is the only panel here aimed at
99
- somebody who does not read code, and it is the one a developer opens
100
- least often.
101
- -->
102
- <!--
103
- v0.48.0. Docs sits directly above Challenge because that is the order
104
- the two are used in: you write a document, then you grade it — and the
105
- grading has to happen in a different session, which is the one thing
106
- both panels say out loud.
107
- -->
108
- <li><a href="#/docs" data-panel="docs" data-idx="d" data-i18n="nav.docs">Docs</a></li>
109
- <li><a href="#/challenge" data-panel="challenge" data-idx="c" data-i18n="nav.challenge">Challenge</a></li>
110
- <!--
111
- v1.5.0. Test sits directly under Challenge because it is the same kind
112
- of thing one step further on: Challenge grades what you WROTE, this
113
- reports what a running system actually DID. Both stop and hand back
114
- rather than fixing what they measured.
115
- -->
116
- <li><a href="#/test" data-panel="test" data-idx="t" data-i18n="nav.test">Test</a></li>
117
- <li><a href="#/pact" data-panel="pact" data-idx="p" data-i18n="nav.pact">Promises</a></li>
118
- <li><a href="#/boundary" data-panel="boundary" data-idx="b" data-i18n="nav.boundary">Boundary</a></li>
119
- <li><a href="#/wait" data-panel="wait" data-idx="w" data-i18n="nav.wait">Wait</a></li>
120
- <li><a href="#/hookui" data-panel="hookui" data-idx="s" data-i18n="nav.hookui">CLI Hook Interface</a></li>
121
- <li><a href="#/handoff" data-panel="handoff" data-idx="h" data-i18n="nav.handoff">Self-serve</a></li>
122
- <!--
123
- v0.50.0. Extra sits directly above Flow because both answer the same
124
- question — WHERE does a task run — and this is the one that can send it
125
- off this machine. It is the last thing above the composer for that
126
- reason, never buried under the reading panels.
127
- -->
128
- <li><a href="#/extra" data-panel="extra" data-idx="e" data-i18n="nav.extra">Extra</a></li>
129
- <li><a href="#/flow" data-panel="flow" data-idx="6" data-i18n="nav.flow">Flow</a></li>
130
- <li><a href="#/crosslink" data-panel="crosslink" data-idx="7" data-i18n="nav.crosslink">Crosslink</a></li>
131
- <li><a href="#/learn" data-panel="learn" data-idx="8" data-i18n="nav.learn">Learn</a></li>
132
- <!--
133
- Next to Learn because it is the same kind of thing: reading, not doing.
134
- The walkthroughs ship with the package, so this panel works on a machine
135
- with no project at all — the same as Learn and unlike every other panel.
136
- -->
137
- <li><a href="#/mockrun" data-panel="mockrun" data-idx="m" data-i18n="nav.mockrun">Mocked Skill Use</a></li>
138
- <li><a href="#/experiment" data-panel="experiment" data-idx="9" data-i18n="nav.experiment">Experiment</a></li>
139
- <li><a href="#/maintenance" data-panel="maintenance" data-idx="0" data-i18n="nav.maintenance">Maintenance</a></li>
140
- </ul>
141
-
142
- <div class="rail-foot">
143
- <div class="rail-project" id="rail-project" title="">—</div>
144
- <div class="rail-version" id="rail-version"></div>
145
- <div class="rail-buttons">
146
- <button class="btn btn-ghost btn-sm" id="theme-toggle" type="button">Light</button>
147
- <button class="btn btn-ghost btn-sm" id="shortcut-hint" type="button" title="Keyboard shortcuts">?</button>
148
- </div>
149
- <!--
150
- Language sits BELOW the theme row on purpose: it is the same class of
151
- control (a per-browser display preference, never a project setting) and
152
- it is switched far less often, so it gets the calmer position.
153
- -->
154
- <div class="rail-buttons">
155
- <button class="btn btn-ghost btn-sm lang-btn" id="lang-toggle" type="button">
156
- <span class="lang-globe" aria-hidden="true">🌐</span><span id="lang-label">English</span>
157
- </button>
158
- </div>
159
- </div>
160
- </nav>
161
-
162
- <main class="main">
163
- <!--
164
- Global banner slot. The one thing that must be visible on EVERY panel is
165
- the global-install warning: if ORC is installed globally, the skills that
166
- actually run may be the global copy reading the global config, while this
167
- panel edits the project one that nothing reads.
168
- -->
169
- <div id="banners" class="banners"></div>
170
-
171
- <div id="panel" class="panel" aria-live="polite"></div>
172
- </main>
173
-
174
- </div>
175
-
176
- <!-- Single modal host. Every confirmation and preview renders into it. -->
177
- <div class="modal-host" id="modal-host" hidden>
178
- <div class="modal-backdrop" id="modal-backdrop"></div>
179
- <div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
180
- <h2 class="modal-title" id="modal-title"></h2>
181
- <div class="modal-body" id="modal-body"></div>
182
- <div class="modal-foot" id="modal-foot"></div>
183
- </div>
184
- </div>
185
-
186
- <!-- Transient confirmations (a committed setting, a failed write). -->
187
- <div class="toasts" id="toasts" aria-live="polite"></div>
188
-
189
- <!--
190
- Classic scripts in an explicit load order — no type="module" anywhere. An ES
191
- module `import` carries no query string, so every import would 401 against the
192
- per-launch token unless static auth were weakened, and weakening it is not on
193
- the table. Classic scripts also mean every top-level function and const lands
194
- in ONE shared global scope, so the split needed no import/export and changed
195
- no call site.
196
-
197
- 99-boot.js is last because boot() is the one call that runs at load time.
198
- -->
199
- <script src="js/00-core.js"></script>
200
- <script src="js/01-i18n.js"></script>
201
- <script src="js/02-ui.js"></script>
202
- <script src="js/03-md.js"></script>
203
- <script src="js/04-router.js"></script>
204
- <script src="js/05-banners.js"></script>
205
- <script src="js/06-edit.js"></script>
206
- <script src="js/panels/overview.js"></script>
207
- <script src="js/panels/settings.js"></script>
208
- <script src="js/panels/lanes.js"></script>
209
- <script src="js/panels/rules.js"></script>
210
- <script src="js/panels/runs.js"></script>
211
- <script src="js/panels/knowledge.js"></script>
212
- <script src="js/panels/stats.js"></script>
213
- <script src="js/panels/flow.js"></script>
214
- <script src="js/panels/crosslink.js"></script>
215
- <script src="js/panels/learn.js"></script>
216
- <script src="js/panels/mockrun.js"></script>
217
- <script src="js/panels/experiment.js"></script>
218
- <script src="js/panels/maintenance.js"></script>
219
- <script src="js/panels/pact.js"></script>
220
- <script src="js/panels/boundary.js"></script>
221
- <script src="js/panels/handoff.js"></script>
222
- <script src="js/panels/challenge.js"></script>
223
- <script src="js/panels/docs.js"></script>
224
- <script src="js/panels/extra.js"></script>
225
- <script src="js/panels/wait.js"></script>
226
- <script src="js/panels/hookui.js"></script>
227
- <script src="js/panels/test.js"></script>
228
- <script src="js/90-tour.js"></script>
229
- <script src="js/91-shortcuts.js"></script>
230
- <script src="js/99-boot.js"></script>
231
- </body>
232
- </html>
1
+ <!doctype html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="referrer" content="no-referrer">
7
+ <title>orc ui</title>
8
+ <!--
9
+ THE ASSET MANIFEST. This list is the load order, and for CSS the load order is
10
+ the cascade order — which is why the files carry numeric prefixes and why
11
+ 06-responsive and 04-motion are last (both override rules from the shell AND
12
+ from panels, and several of their declarations are deliberately not
13
+ !important). One <link> per file, never @import: an @import request carries no
14
+ session token of its own and would 401.
15
+
16
+ A file that is not listed here does not run, and the test suite reads THIS
17
+ list — appJs()/appCss() in test/_helpers.js concatenate exactly what the
18
+ browser loads, so a forgotten entry cannot hide behind a passing suite.
19
+ -->
20
+ <link rel="stylesheet" href="css/00-tokens.css">
21
+ <link rel="stylesheet" href="css/01-base.css">
22
+ <link rel="stylesheet" href="css/02-shell.css">
23
+ <link rel="stylesheet" href="css/03-components.css">
24
+ <link rel="stylesheet" href="css/panels/overview.css">
25
+ <link rel="stylesheet" href="css/05-tour.css">
26
+ <link rel="stylesheet" href="css/panels/settings.css">
27
+ <link rel="stylesheet" href="css/panels/lanes.css">
28
+ <link rel="stylesheet" href="css/panels/rules.css">
29
+ <link rel="stylesheet" href="css/panels/runs.css">
30
+ <link rel="stylesheet" href="css/panels/knowledge.css">
31
+ <link rel="stylesheet" href="css/panels/stats.css">
32
+ <link rel="stylesheet" href="css/panels/behaviour.css">
33
+ <link rel="stylesheet" href="css/panels/flow.css">
34
+ <link rel="stylesheet" href="css/panels/crosslink.css">
35
+ <link rel="stylesheet" href="css/panels/learn.css">
36
+ <link rel="stylesheet" href="css/panels/mockrun.css">
37
+ <link rel="stylesheet" href="css/panels/experiment.css">
38
+ <link rel="stylesheet" href="css/panels/maintenance.css">
39
+ <link rel="stylesheet" href="css/panels/pact.css">
40
+ <link rel="stylesheet" href="css/panels/boundary.css">
41
+ <link rel="stylesheet" href="css/panels/wait.css">
42
+ <link rel="stylesheet" href="css/panels/hookui.css">
43
+ <link rel="stylesheet" href="css/panels/handoff.css">
44
+ <link rel="stylesheet" href="css/panels/challenge.css">
45
+ <link rel="stylesheet" href="css/panels/docs.css">
46
+ <link rel="stylesheet" href="css/panels/extra.css">
47
+ <link rel="stylesheet" href="css/panels/test.css">
48
+ <link rel="stylesheet" href="css/06-responsive.css">
49
+ <link rel="stylesheet" href="css/04-motion.css">
50
+ </head>
51
+ <body>
52
+
53
+ <!--
54
+ The shell is deliberately static and small: every panel is rendered by its own
55
+ function in app.js against its own endpoint, with no shared mutable state, so
56
+ rewriting one panel cannot break another. See the plan, §9.
57
+ No inline <script> or style="" anywhere — the server sends a strict CSP.
58
+ -->
59
+
60
+ <div class="shell">
61
+
62
+ <nav class="rail" aria-label="Panels">
63
+ <div class="brand">
64
+ <span class="brand-mark" aria-hidden="true">◆</span>
65
+ <span class="brand-text">orc<span class="brand-dim">&nbsp;ui</span></span>
66
+ </div>
67
+
68
+ <!--
69
+ data-idx is the keyboard shortcut for that panel; the rail reveals the
70
+ numbers on hover so they are discoverable without a legend.
71
+ data-i18n names the string table entry: the text between the tags is the
72
+ English fallback that ships in the markup, so a failed i18n fetch renders
73
+ a readable English rail rather than a column of empty links.
74
+ -->
75
+ <ul class="nav" id="nav">
76
+ <li><a href="#/overview" data-panel="overview" data-idx="1" data-i18n="nav.overview">Overview</a></li>
77
+ <li><a href="#/settings" data-panel="settings" data-idx="2" data-i18n="nav.settings">Settings</a></li>
78
+ <!--
79
+ v1.0.0 W16. Lanes sits directly under Settings because it answers the
80
+ other half of the same question. Settings says what a key resolves to
81
+ and which lanes read it; this says what those lanes then DO with it —
82
+ which shared phases they run, in order, and which CLI calls they make.
83
+ -->
84
+ <li><a href="#/lanes" data-panel="lanes" data-idx="l" data-i18n="nav.lanes">Lanes</a></li>
85
+ <!--
86
+ v1.7.0. Rules sits directly under Lanes because it is the other half of
87
+ the same answer: Lanes says which phases a lane runs, this says which
88
+ rules ride in every slice it builds — and it is the one panel here where
89
+ a project can change what ORC writes, so it belongs with Settings and
90
+ Lanes rather than down among the reading panels.
91
+ -->
92
+ <li><a href="#/rules" data-panel="rules" data-idx="r" data-i18n="nav.rules">Rules</a></li>
93
+ <li><a href="#/runs" data-panel="runs" data-idx="3" data-i18n="nav.runs">Runs</a></li>
94
+ <li><a href="#/knowledge" data-panel="knowledge" data-idx="4" data-i18n="nav.knowledge">Knowledge</a></li>
95
+ <li><a href="#/stats" data-panel="stats" data-idx="5" data-i18n="nav.stats">Stats</a></li>
96
+ <!--
97
+ v2.0.0. Behaviour sits directly under Stats: Stats says what the runs did,
98
+ Behaviour says how YOU ran them. Both read the same traces. Key `u` ("you").
99
+ -->
100
+ <li><a href="#/behaviour" data-panel="behaviour" data-idx="u" data-i18n="nav.behaviour">Behaviour</a></li>
101
+ <!--
102
+ v0.46.0. Promises and Boundary sit next to Knowledge because they ARE
103
+ knowledge — derived, coverage-anchored, and stale the same way a wiki doc
104
+ is. Self-serve sits last of the three: it is the only panel here aimed at
105
+ somebody who does not read code, and it is the one a developer opens
106
+ least often.
107
+ -->
108
+ <!--
109
+ v0.48.0. Docs sits directly above Challenge because that is the order
110
+ the two are used in: you write a document, then you grade it — and the
111
+ grading has to happen in a different session, which is the one thing
112
+ both panels say out loud.
113
+ -->
114
+ <li><a href="#/docs" data-panel="docs" data-idx="d" data-i18n="nav.docs">Docs</a></li>
115
+ <li><a href="#/challenge" data-panel="challenge" data-idx="c" data-i18n="nav.challenge">Challenge</a></li>
116
+ <!--
117
+ v1.5.0. Test sits directly under Challenge because it is the same kind
118
+ of thing one step further on: Challenge grades what you WROTE, this
119
+ reports what a running system actually DID. Both stop and hand back
120
+ rather than fixing what they measured.
121
+ -->
122
+ <li><a href="#/test" data-panel="test" data-idx="t" data-i18n="nav.test">Test</a></li>
123
+ <li><a href="#/pact" data-panel="pact" data-idx="p" data-i18n="nav.pact">Promises</a></li>
124
+ <li><a href="#/boundary" data-panel="boundary" data-idx="b" data-i18n="nav.boundary">Boundary</a></li>
125
+ <li><a href="#/wait" data-panel="wait" data-idx="w" data-i18n="nav.wait">Wait</a></li>
126
+ <li><a href="#/hookui" data-panel="hookui" data-idx="s" data-i18n="nav.hookui">CLI Hook Interface</a></li>
127
+ <li><a href="#/handoff" data-panel="handoff" data-idx="h" data-i18n="nav.handoff">Self-serve</a></li>
128
+ <!--
129
+ v0.50.0. Extra sits directly above Flow because both answer the same
130
+ question — WHERE does a task run — and this is the one that can send it
131
+ off this machine. It is the last thing above the composer for that
132
+ reason, never buried under the reading panels.
133
+ -->
134
+ <li><a href="#/extra" data-panel="extra" data-idx="e" data-i18n="nav.extra">Extra</a></li>
135
+ <li><a href="#/flow" data-panel="flow" data-idx="6" data-i18n="nav.flow">Flow</a></li>
136
+ <li><a href="#/crosslink" data-panel="crosslink" data-idx="7" data-i18n="nav.crosslink">Crosslink</a></li>
137
+ <li><a href="#/learn" data-panel="learn" data-idx="8" data-i18n="nav.learn">Learn</a></li>
138
+ <!--
139
+ Next to Learn because it is the same kind of thing: reading, not doing.
140
+ The walkthroughs ship with the package, so this panel works on a machine
141
+ with no project at all — the same as Learn and unlike every other panel.
142
+ -->
143
+ <li><a href="#/mockrun" data-panel="mockrun" data-idx="m" data-i18n="nav.mockrun">Mocked Skill Use</a></li>
144
+ <li><a href="#/experiment" data-panel="experiment" data-idx="9" data-i18n="nav.experiment">Experiment</a></li>
145
+ <li><a href="#/maintenance" data-panel="maintenance" data-idx="0" data-i18n="nav.maintenance">Maintenance</a></li>
146
+ </ul>
147
+
148
+ <div class="rail-foot">
149
+ <div class="rail-project" id="rail-project" title="">—</div>
150
+ <div class="rail-version" id="rail-version"></div>
151
+ <div class="rail-buttons">
152
+ <button class="btn btn-ghost btn-sm" id="theme-toggle" type="button">Light</button>
153
+ <button class="btn btn-ghost btn-sm" id="shortcut-hint" type="button" title="Keyboard shortcuts">?</button>
154
+ </div>
155
+ <!--
156
+ Language sits BELOW the theme row on purpose: it is the same class of
157
+ control (a per-browser display preference, never a project setting) and
158
+ it is switched far less often, so it gets the calmer position.
159
+ -->
160
+ <div class="rail-buttons">
161
+ <button class="btn btn-ghost btn-sm lang-btn" id="lang-toggle" type="button">
162
+ <span class="lang-globe" aria-hidden="true">🌐</span><span id="lang-label">English</span>
163
+ </button>
164
+ </div>
165
+ </div>
166
+ </nav>
167
+
168
+ <main class="main">
169
+ <!--
170
+ Global banner slot. The one thing that must be visible on EVERY panel is
171
+ the global-install warning: if ORC is installed globally, the skills that
172
+ actually run may be the global copy reading the global config, while this
173
+ panel edits the project one that nothing reads.
174
+ -->
175
+ <div id="banners" class="banners"></div>
176
+
177
+ <div id="panel" class="panel" aria-live="polite"></div>
178
+ </main>
179
+
180
+ </div>
181
+
182
+ <!-- Single modal host. Every confirmation and preview renders into it. -->
183
+ <div class="modal-host" id="modal-host" hidden>
184
+ <div class="modal-backdrop" id="modal-backdrop"></div>
185
+ <div class="modal" role="dialog" aria-modal="true" aria-labelledby="modal-title">
186
+ <h2 class="modal-title" id="modal-title"></h2>
187
+ <div class="modal-body" id="modal-body"></div>
188
+ <div class="modal-foot" id="modal-foot"></div>
189
+ </div>
190
+ </div>
191
+
192
+ <!-- Transient confirmations (a committed setting, a failed write). -->
193
+ <div class="toasts" id="toasts" aria-live="polite"></div>
194
+
195
+ <!--
196
+ Classic scripts in an explicit load order — no type="module" anywhere. An ES
197
+ module `import` carries no query string, so every import would 401 against the
198
+ per-launch token unless static auth were weakened, and weakening it is not on
199
+ the table. Classic scripts also mean every top-level function and const lands
200
+ in ONE shared global scope, so the split needed no import/export and changed
201
+ no call site.
202
+
203
+ 99-boot.js is last because boot() is the one call that runs at load time.
204
+ -->
205
+ <script src="js/00-core.js"></script>
206
+ <script src="js/01-i18n.js"></script>
207
+ <script src="js/02-ui.js"></script>
208
+ <script src="js/03-md.js"></script>
209
+ <script src="js/04-router.js"></script>
210
+ <script src="js/05-banners.js"></script>
211
+ <script src="js/06-edit.js"></script>
212
+ <script src="js/panels/overview.js"></script>
213
+ <script src="js/panels/settings.js"></script>
214
+ <script src="js/panels/lanes.js"></script>
215
+ <script src="js/panels/rules.js"></script>
216
+ <script src="js/panels/runs.js"></script>
217
+ <script src="js/panels/knowledge.js"></script>
218
+ <script src="js/panels/stats.js"></script>
219
+ <script src="js/panels/behaviour.js"></script>
220
+ <script src="js/panels/flow.js"></script>
221
+ <script src="js/panels/crosslink.js"></script>
222
+ <script src="js/panels/learn.js"></script>
223
+ <script src="js/panels/mockrun.js"></script>
224
+ <script src="js/panels/experiment.js"></script>
225
+ <script src="js/panels/maintenance.js"></script>
226
+ <script src="js/panels/pact.js"></script>
227
+ <script src="js/panels/boundary.js"></script>
228
+ <script src="js/panels/handoff.js"></script>
229
+ <script src="js/panels/challenge.js"></script>
230
+ <script src="js/panels/docs.js"></script>
231
+ <script src="js/panels/extra.js"></script>
232
+ <script src="js/panels/wait.js"></script>
233
+ <script src="js/panels/hookui.js"></script>
234
+ <script src="js/panels/test.js"></script>
235
+ <script src="js/90-tour.js"></script>
236
+ <script src="js/91-shortcuts.js"></script>
237
+ <script src="js/99-boot.js"></script>
238
+ </body>
239
+ </html>