@azure-id/orc 0.56.0 → 1.0.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 +228 -0
- package/README-id.md +143 -53
- package/README.md +124 -103
- package/bin/build-agents.js +18 -11
- package/bin/cli.js +4139 -315
- package/bin/onboarding-content.js +0 -3
- package/bin/test-run.js +491 -0
- package/bin/verify-contracts.js +4256 -3277
- package/bin/verify-package.js +563 -498
- package/bin/webui/api.js +1186 -1163
- package/bin/webui/app.html +9 -0
- package/bin/webui/css/06-responsive.css +120 -108
- package/bin/webui/css/panels/extra.css +29 -0
- package/bin/webui/css/panels/lanes.css +134 -0
- package/bin/webui/css/panels/settings.css +79 -3
- package/bin/webui/fixtures/extra.js +2036 -1934
- package/bin/webui/fixtures/flow.js +2 -2
- package/bin/webui/fixtures/index.js +503 -486
- package/bin/webui/fixtures/lanes.js +218 -0
- package/bin/webui/fixtures/settings.js +261 -34
- package/bin/webui/fixtures/stats.js +3 -3
- package/bin/webui/i18n/TERMS.md +135 -134
- package/bin/webui/i18n/en/extra.json +345 -313
- package/bin/webui/i18n/en/lanes.json +29 -0
- package/bin/webui/i18n/en/nav.json +1 -0
- package/bin/webui/i18n/en/overview.json +2 -0
- package/bin/webui/i18n/en/settings.json +16 -5
- package/bin/webui/i18n/id/extra.json +345 -313
- package/bin/webui/i18n/id/lanes.json +29 -0
- package/bin/webui/i18n/id/nav.json +1 -0
- package/bin/webui/i18n/id/overview.json +2 -0
- package/bin/webui/i18n/id/settings.json +15 -4
- package/bin/webui/js/01-i18n.js +1 -0
- package/bin/webui/js/panels/extra.js +3199 -3011
- package/bin/webui/js/panels/lanes.js +259 -0
- package/bin/webui/js/panels/overview.js +10 -0
- package/bin/webui/js/panels/settings.js +149 -3
- package/package.json +3 -3
- package/templates/agents/MODEL-MAPPING.md +23 -35
- package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
- package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
- package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
- package/templates/agents/orc-executor-opus-5-high.md +1 -1
- package/templates/agents/orc-executor-opus-5-low.md +1 -1
- package/templates/agents/orc-executor-opus-5-med.md +1 -1
- package/templates/agents/orc-retro-opus-5-med.md +73 -73
- package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
- package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
- package/templates/commands/orc-route.md +1 -1
- package/templates/commands/orc.md +1 -1
- package/templates/skills/_shared/README.md +7 -3
- package/templates/skills/_shared/config-precedence.md +198 -0
- package/templates/skills/_shared/drift-recovery.md +1 -1
- package/templates/skills/_shared/extra-dispatch.md +292 -6
- package/templates/skills/_shared/interview.md +1 -1
- package/templates/skills/_shared/opus5-only.md +9 -7
- package/templates/skills/_shared/phases/README.md +82 -0
- package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
- package/templates/skills/_shared/phases/execution.md +143 -0
- package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
- package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
- package/templates/skills/_shared/phases/mock-example.md +56 -0
- package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
- package/templates/skills/_shared/phases/planning.md +135 -0
- package/templates/skills/_shared/phases/preflight.md +76 -0
- package/templates/skills/_shared/phases/review.md +53 -0
- package/templates/skills/_shared/phases/scoring.md +65 -0
- package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
- package/templates/skills/_shared/phases/security.md +55 -0
- package/templates/skills/_shared/phases/ship.md +88 -0
- package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
- package/templates/skills/_shared/phases/summary.md +48 -0
- package/templates/skills/_shared/phases/testgen.md +51 -0
- package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
- package/templates/skills/_shared/phases/verify.md +70 -0
- package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
- package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
- package/templates/skills/_shared/read-ladder.md +48 -0
- package/templates/skills/context-combiner/SKILL.md +214 -187
- package/templates/skills/orc/README.md +148 -150
- package/templates/skills/orc/SKILL.md +70 -358
- package/templates/skills/orc/config.md +137 -389
- package/templates/skills/orc/examples/full-run-mock.md +1 -1
- package/templates/skills/orc/references/effort-and-mode.md +16 -18
- package/templates/skills/orc/references/phases/intake.md +47 -0
- package/templates/skills/orc/references/phases/integration.md +19 -0
- package/templates/skills/orc/references/preflight-report.md +4 -4
- package/templates/skills/orc/references/ultra-mode.md +117 -123
- package/templates/skills/orc/schemas/planning-output.md +279 -279
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
- package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
- package/templates/skills/orc-aftermath/SKILL.md +153 -136
- package/templates/skills/orc-analyze/SKILL.md +247 -220
- package/templates/skills/orc-analyze/references/branching.md +51 -51
- package/templates/skills/orc-analyze/references/thin-input.md +1 -1
- package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
- package/templates/skills/orc-boundary/SKILL.md +244 -208
- package/templates/skills/orc-brainstorm/SKILL.md +372 -339
- package/templates/skills/orc-budget/SKILL.md +243 -225
- package/templates/skills/orc-challenge/README.md +1 -1
- package/templates/skills/orc-challenge/SKILL.md +293 -255
- package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
- package/templates/skills/orc-claude/SKILL.md +216 -199
- package/templates/skills/orc-diy/README.md +2 -1
- package/templates/skills/orc-diy/SKILL.md +129 -70
- package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
- package/templates/skills/orc-diy/references/compile.md +21 -7
- package/templates/skills/orc-diy/references/flow-schema.md +2 -2
- package/templates/skills/orc-doc/SKILL.md +44 -7
- package/templates/skills/orc-explain/SKILL.md +19 -0
- package/templates/skills/orc-export/SKILL.md +26 -5
- package/templates/skills/orc-fast/SKILL.md +215 -187
- package/templates/skills/orc-grill/SKILL.md +233 -207
- package/templates/skills/orc-handoff/SKILL.md +223 -204
- package/templates/skills/orc-learn/SKILL.md +176 -156
- package/templates/skills/orc-mini/SKILL.md +41 -23
- package/templates/skills/orc-pact/SKILL.md +250 -218
- package/templates/skills/orc-pattern/SKILL.md +149 -124
- package/templates/skills/orc-poly/SKILL.md +237 -216
- package/templates/skills/orc-poly/references/gather.md +1 -1
- package/templates/skills/orc-pr-driver/SKILL.md +196 -167
- package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
- package/templates/skills/orc-pr-setup/SKILL.md +212 -184
- package/templates/skills/orc-quick/README.md +2 -2
- package/templates/skills/orc-quick/SKILL.md +346 -313
- package/templates/skills/orc-quick/references/dispatch-gate.md +12 -4
- package/templates/skills/orc-retro/SKILL.md +244 -222
- package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
- package/templates/skills/orc-route/SKILL.md +183 -165
- package/templates/skills/orc-verify/SKILL.md +100 -86
- package/templates/skills/orc-wiki/SKILL.md +55 -206
- package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
- package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
- package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
- package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
- package/templates/agents/orc-advisor-fable-5.md +0 -50
- package/templates/agents/orc-analyst-fable-5.md +0 -115
- package/templates/agents/orc-judge-fable-5.md +0 -79
- package/templates/agents/orc-planner-fable-5.md +0 -152
- package/templates/agents/orc-reviewer-fable-5.md +0 -57
- package/templates/skills/_shared/fable5-override.md +0 -56
- package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
- package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
- package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
- package/templates/skills/orc-diy/references/blocks/review.md +0 -18
- package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
- package/templates/skills/orc-diy/references/blocks/security.md +0 -25
- package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
- package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
- package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
- package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
- package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
package/bin/webui/app.html
CHANGED
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
<link rel="stylesheet" href="css/panels/overview.css">
|
|
25
25
|
<link rel="stylesheet" href="css/05-tour.css">
|
|
26
26
|
<link rel="stylesheet" href="css/panels/settings.css">
|
|
27
|
+
<link rel="stylesheet" href="css/panels/lanes.css">
|
|
27
28
|
<link rel="stylesheet" href="css/panels/runs.css">
|
|
28
29
|
<link rel="stylesheet" href="css/panels/knowledge.css">
|
|
29
30
|
<link rel="stylesheet" href="css/panels/stats.css">
|
|
@@ -69,6 +70,13 @@
|
|
|
69
70
|
<ul class="nav" id="nav">
|
|
70
71
|
<li><a href="#/overview" data-panel="overview" data-idx="1" data-i18n="nav.overview">Overview</a></li>
|
|
71
72
|
<li><a href="#/settings" data-panel="settings" data-idx="2" data-i18n="nav.settings">Settings</a></li>
|
|
73
|
+
<!--
|
|
74
|
+
v1.0.0 W16. Lanes sits directly under Settings because it answers the
|
|
75
|
+
other half of the same question. Settings says what a key resolves to
|
|
76
|
+
and which lanes read it; this says what those lanes then DO with it —
|
|
77
|
+
which shared phases they run, in order, and which CLI calls they make.
|
|
78
|
+
-->
|
|
79
|
+
<li><a href="#/lanes" data-panel="lanes" data-idx="l" data-i18n="nav.lanes">Lanes</a></li>
|
|
72
80
|
<li><a href="#/runs" data-panel="runs" data-idx="3" data-i18n="nav.runs">Runs</a></li>
|
|
73
81
|
<li><a href="#/knowledge" data-panel="knowledge" data-idx="4" data-i18n="nav.knowledge">Knowledge</a></li>
|
|
74
82
|
<li><a href="#/stats" data-panel="stats" data-idx="5" data-i18n="nav.stats">Stats</a></li>
|
|
@@ -176,6 +184,7 @@
|
|
|
176
184
|
<script src="js/06-edit.js"></script>
|
|
177
185
|
<script src="js/panels/overview.js"></script>
|
|
178
186
|
<script src="js/panels/settings.js"></script>
|
|
187
|
+
<script src="js/panels/lanes.js"></script>
|
|
179
188
|
<script src="js/panels/runs.js"></script>
|
|
180
189
|
<script src="js/panels/knowledge.js"></script>
|
|
181
190
|
<script src="js/panels/stats.js"></script>
|
|
@@ -1,108 +1,120 @@
|
|
|
1
|
-
/* 06-responsive.css — orc ui
|
|
2
|
-
The width breakpoints that cross panel boundaries (the rail becomes a strip,
|
|
3
|
-
the Learn rail becomes a scrollable row). They override rules from the shell
|
|
4
|
-
AND from four panels, so they load after every one of them — the same reason
|
|
5
|
-
04-motion.css is last. Breakpoints that only touch ONE panel stay in that
|
|
6
|
-
panel's file.
|
|
7
|
-
|
|
8
|
-
The <link> ORDER in app.html is the cascade order, and the numeric
|
|
9
|
-
prefix is that order. No @import: it would carry no session token and
|
|
10
|
-
401. */
|
|
11
|
-
|
|
12
|
-
/* --------------------------------------------------------------- RESPONSIVE */
|
|
13
|
-
|
|
14
|
-
@media (max-width: 1040px) {
|
|
15
|
-
/* The Learn rail stops being a rail and becomes a scrollable strip above the
|
|
16
|
-
reading pane — a 244px column plus prose does not fit twice over. */
|
|
17
|
-
.learn { grid-template-columns: 1fr; }
|
|
18
|
-
.learn-side { position: static; max-height: none; }
|
|
19
|
-
.learn-nav { flex-direction: row; overflow-x: auto; padding-bottom: 2px; }
|
|
20
|
-
.learn-nav-item { flex: 0 0 auto; max-width: 210px; }
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@media (max-width: 900px) {
|
|
24
|
-
.shell { grid-template-columns: 1fr; }
|
|
25
|
-
.rail {
|
|
26
|
-
position: static;
|
|
27
|
-
height: auto;
|
|
28
|
-
flex-direction: row;
|
|
29
|
-
align-items: center;
|
|
30
|
-
gap: var(--sp-4);
|
|
31
|
-
overflow-x: auto;
|
|
32
|
-
border-right: 0;
|
|
33
|
-
border-bottom: 1px solid var(--line-soft);
|
|
34
|
-
}
|
|
35
|
-
.nav { flex-direction: row; flex-wrap: nowrap; }
|
|
36
|
-
.nav a { white-space: nowrap; }
|
|
37
|
-
.rail-foot { flex-direction: row; align-items: center; }
|
|
38
|
-
.rail-project { max-width: 180px; }
|
|
39
|
-
.main { padding: var(--sp-4); }
|
|
40
|
-
.setting { grid-template-columns: 1fr; }
|
|
41
|
-
.setting-control { align-items: flex-start; }
|
|
42
|
-
/*
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
.
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
.
|
|
52
|
-
.
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.
|
|
66
|
-
.
|
|
67
|
-
.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
.ex-
|
|
74
|
-
.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.ex-
|
|
80
|
-
.ex-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
/*
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
.
|
|
100
|
-
.
|
|
101
|
-
.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
.
|
|
108
|
-
|
|
1
|
+
/* 06-responsive.css — orc ui
|
|
2
|
+
The width breakpoints that cross panel boundaries (the rail becomes a strip,
|
|
3
|
+
the Learn rail becomes a scrollable row). They override rules from the shell
|
|
4
|
+
AND from four panels, so they load after every one of them — the same reason
|
|
5
|
+
04-motion.css is last. Breakpoints that only touch ONE panel stay in that
|
|
6
|
+
panel's file.
|
|
7
|
+
|
|
8
|
+
The <link> ORDER in app.html is the cascade order, and the numeric
|
|
9
|
+
prefix is that order. No @import: it would carry no session token and
|
|
10
|
+
401. */
|
|
11
|
+
|
|
12
|
+
/* --------------------------------------------------------------- RESPONSIVE */
|
|
13
|
+
|
|
14
|
+
@media (max-width: 1040px) {
|
|
15
|
+
/* The Learn rail stops being a rail and becomes a scrollable strip above the
|
|
16
|
+
reading pane — a 244px column plus prose does not fit twice over. */
|
|
17
|
+
.learn { grid-template-columns: 1fr; }
|
|
18
|
+
.learn-side { position: static; max-height: none; }
|
|
19
|
+
.learn-nav { flex-direction: row; overflow-x: auto; padding-bottom: 2px; }
|
|
20
|
+
.learn-nav-item { flex: 0 0 auto; max-width: 210px; }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@media (max-width: 900px) {
|
|
24
|
+
.shell { grid-template-columns: 1fr; }
|
|
25
|
+
.rail {
|
|
26
|
+
position: static;
|
|
27
|
+
height: auto;
|
|
28
|
+
flex-direction: row;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: var(--sp-4);
|
|
31
|
+
overflow-x: auto;
|
|
32
|
+
border-right: 0;
|
|
33
|
+
border-bottom: 1px solid var(--line-soft);
|
|
34
|
+
}
|
|
35
|
+
.nav { flex-direction: row; flex-wrap: nowrap; }
|
|
36
|
+
.nav a { white-space: nowrap; }
|
|
37
|
+
.rail-foot { flex-direction: row; align-items: center; }
|
|
38
|
+
.rail-project { max-width: 180px; }
|
|
39
|
+
.main { padding: var(--sp-4); }
|
|
40
|
+
.setting { grid-template-columns: 1fr; }
|
|
41
|
+
.setting-control { align-items: flex-start; }
|
|
42
|
+
/* The rank ladder keeps its prio column — it is 34px and it is the thing
|
|
43
|
+
that makes the row readable as a ladder rather than a list. The state
|
|
44
|
+
chip wraps under instead, which is the only child that can spare the
|
|
45
|
+
line. Declared explicitly, like every `.run-card` variant below. */
|
|
46
|
+
.rank-row { grid-template-columns: 34px minmax(0, 1fr); }
|
|
47
|
+
.rank-row > .chip { grid-column: 2; justify-self: start; }
|
|
48
|
+
/* A phase row drops its right-hand column under the body rather than
|
|
49
|
+
squeezing it: `read`, `when` and the layer list are facts, and a fact
|
|
50
|
+
wrapped to one character per line is not readable. Declared explicitly. */
|
|
51
|
+
.phase-row { grid-template-columns: 28px minmax(0, 1fr); }
|
|
52
|
+
.phase-right { grid-column: 2; flex-direction: row; flex-wrap: wrap; align-items: center; }
|
|
53
|
+
.call-detail { padding-left: var(--sp-3); }
|
|
54
|
+
/* Every `.run-card` VARIANT collapses explicitly. A variant that inherits a
|
|
55
|
+
column count it does not have is the v0.49.2 Overview collision again, just
|
|
56
|
+
at a narrower width. */
|
|
57
|
+
.run-card { grid-template-columns: 16px 80px minmax(0, 1fr); }
|
|
58
|
+
.run-card.no-caret { grid-template-columns: 80px minmax(0, 1fr); }
|
|
59
|
+
.run-card.has-extra { grid-template-columns: 16px 80px auto minmax(0, 1fr); }
|
|
60
|
+
.run-card.no-caret.has-extra { grid-template-columns: 80px auto minmax(0, 1fr); }
|
|
61
|
+
.run-age { grid-column: 3; }
|
|
62
|
+
.run-card.no-caret .run-age { grid-column: 2; }
|
|
63
|
+
.run-card.has-extra .run-age { grid-column: 4; }
|
|
64
|
+
.run-card.no-caret.has-extra .run-age { grid-column: 3; }
|
|
65
|
+
.todo { grid-template-columns: 4px minmax(0, 1fr); }
|
|
66
|
+
.todo-cta { grid-column: 2; margin-top: var(--sp-2); }
|
|
67
|
+
/* Extra. v0.50.0 brought the rail's segment floor down here so a band was
|
|
68
|
+
never squeezed to a sliver. v0.53.0 deleted that floor entirely: the band
|
|
69
|
+
ladder puts the proportional bar INSIDE a full-width row, so there is
|
|
70
|
+
nothing left to squeeze and nothing left to tune per viewport. What the
|
|
71
|
+
ladder does need at this width is for its head to stop pretending it has
|
|
72
|
+
five columns. */
|
|
73
|
+
.ex-band-head { grid-template-columns: minmax(0, 30%) minmax(0, auto) minmax(0, 1fr) 16px; }
|
|
74
|
+
/* v0.55.0 — EVERY VARIANT COLLAPSES EXPLICITLY. A position row has no bar, so
|
|
75
|
+
its first column is the slot name rather than a track; leaving it on the
|
|
76
|
+
band template here would put the target under the caret. */
|
|
77
|
+
.ex-slot-head { grid-template-columns: minmax(0, 40%) minmax(0, 1fr) 16px; }
|
|
78
|
+
.ex-slot-when { grid-column: 1 / -1; }
|
|
79
|
+
.ex-band-chips { grid-column: 1 / -1; justify-content: flex-start; }
|
|
80
|
+
.ex-route-controls { align-items: stretch; }
|
|
81
|
+
.ex-route-controls .btn { width: 100%; }
|
|
82
|
+
/* v0.53.0 — `.ex-tool` was the one `.ex-*` block with no entry here at all.
|
|
83
|
+
At this width a tool card's actions are the reason you opened the panel, so
|
|
84
|
+
they go full width rather than being squeezed onto the end of a row. */
|
|
85
|
+
.ex-tool > .row-actions:not(:first-child) { align-items: stretch; }
|
|
86
|
+
.ex-tool > .row-actions:not(:first-child) .btn { width: 100%; }
|
|
87
|
+
/* v0.54.0 — a recovery row's identity is the longest thing in it, so at this
|
|
88
|
+
width it takes its own line rather than truncating a profile and a model
|
|
89
|
+
into nothing. The row is a FLEX COLUMN, so this is a wrap rather than a
|
|
90
|
+
second grid template. */
|
|
91
|
+
.ex-rec-head { flex-wrap: wrap; }
|
|
92
|
+
.ex-rec-who { flex: 1 1 100%; white-space: normal; }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@media (max-width: 600px) {
|
|
96
|
+
/* Below this there is no honest way to keep a chip, a slug and an age on one
|
|
97
|
+
line, so the card stacks: chip, then the slug and where it stands, then the
|
|
98
|
+
age. One column, in reading order. */
|
|
99
|
+
.run-card,
|
|
100
|
+
.run-card.no-caret,
|
|
101
|
+
.run-card.has-extra,
|
|
102
|
+
.run-card.no-caret.has-extra {
|
|
103
|
+
grid-template-columns: minmax(0, 1fr);
|
|
104
|
+
gap: var(--sp-2);
|
|
105
|
+
}
|
|
106
|
+
.run-caret { display: none; }
|
|
107
|
+
.run-card .run-age { grid-column: 1; }
|
|
108
|
+
/* Extra: the provider catalog stops being a grid — below this a two-column
|
|
109
|
+
tile cannot hold a base URL and two links without wrapping mid-word — and
|
|
110
|
+
the connect form's two columns become one. */
|
|
111
|
+
.ex-provider-grid { grid-template-columns: minmax(0, 1fr); }
|
|
112
|
+
.ex-strip { gap: var(--sp-3); }
|
|
113
|
+
.ex-route-controls > * { flex: 1 1 100%; }
|
|
114
|
+
/* The tool card's head stops being a row: a label, a binary name and a state
|
|
115
|
+
chip cannot share a line honestly below this. */
|
|
116
|
+
.ex-tool > .row-actions:first-child { flex-direction: column; align-items: flex-start; }
|
|
117
|
+
/* A per-file position line cannot hold a path, a state word and a line delta
|
|
118
|
+
on one row below this — and the path is the half that must stay readable. */
|
|
119
|
+
.ex-rec-file { flex-direction: column; align-items: flex-start; }
|
|
120
|
+
}
|
|
@@ -534,3 +534,32 @@
|
|
|
534
534
|
border-radius: var(--r-sm);
|
|
535
535
|
padding: var(--sp-2) var(--sp-3);
|
|
536
536
|
}
|
|
537
|
+
|
|
538
|
+
/* ── the run demotion (v1.0.0 W16) ────────────────────────────────────────────
|
|
539
|
+
A FLEX COLUMN, never a declared grid. Four evidence lines are optional —
|
|
540
|
+
`why`, a live stale attempt, a counter reset, a resume count — so the child
|
|
541
|
+
count changes with the state, and a card whose child count changes with its
|
|
542
|
+
state must not declare its rows. That is exactly what stretched `.ex-tool`'s
|
|
543
|
+
chip into a 250px ellipse in v0.53.0. */
|
|
544
|
+
.ex-dem-row {
|
|
545
|
+
display: flex;
|
|
546
|
+
flex-direction: column;
|
|
547
|
+
gap: 4px;
|
|
548
|
+
padding: var(--sp-2) var(--sp-3);
|
|
549
|
+
background: var(--surface-2);
|
|
550
|
+
border: 1px solid var(--line-soft);
|
|
551
|
+
border-radius: var(--radius-sm);
|
|
552
|
+
margin-top: 4px;
|
|
553
|
+
}
|
|
554
|
+
.ex-dem-row.is-demoted { border-color: var(--bad); background: var(--bad-wash, var(--surface-2)); }
|
|
555
|
+
.ex-dem-head {
|
|
556
|
+
display: flex;
|
|
557
|
+
flex-wrap: wrap;
|
|
558
|
+
align-items: center;
|
|
559
|
+
gap: var(--sp-2);
|
|
560
|
+
}
|
|
561
|
+
.ex-dem-profile { font-family: var(--mono); font-size: 13px; color: var(--text); }
|
|
562
|
+
/* The counter renders at zero too, so it is a stated fact and never a badge
|
|
563
|
+
that only appears when something is wrong. */
|
|
564
|
+
.ex-dem-count { font-family: var(--mono); font-size: 11px; color: var(--text-faint); margin-left: auto; }
|
|
565
|
+
.ex-dem-why { font-size: 12px; color: var(--text-faint); overflow-wrap: anywhere; }
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/* panels/lanes.css — the `orc lane` noun, rendered.
|
|
2
|
+
Loaded by app.html in the order its <link> names, which for CSS is the
|
|
3
|
+
cascade order. Every colour is a token from 00-tokens.css. */
|
|
4
|
+
|
|
5
|
+
/* ── the lane picker ──────────────────────────────────────────────────────── */
|
|
6
|
+
.lane-meta {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-wrap: wrap;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: 6px;
|
|
11
|
+
margin-bottom: var(--sp-3);
|
|
12
|
+
}
|
|
13
|
+
.lane-meta-label { font-size: 12px; color: var(--text-faint); }
|
|
14
|
+
|
|
15
|
+
/* ── a phase row ──────────────────────────────────────────────────────────────
|
|
16
|
+
A GRID that DECLARES its columns, and whose child count never varies with
|
|
17
|
+
state: ordinal · body · right-hand facts. `optional_when` is an optional
|
|
18
|
+
FOURTH child, so it takes a full-width line of its own rather than a column
|
|
19
|
+
it usually leaves empty — the `.ex-tool` lesson (v0.53.0), where a card
|
|
20
|
+
declaring rows its states did not all have stretched a chip into an ellipse. */
|
|
21
|
+
.phase-row {
|
|
22
|
+
display: grid;
|
|
23
|
+
grid-template-columns: 28px minmax(0, 1fr) auto;
|
|
24
|
+
align-items: start;
|
|
25
|
+
gap: var(--sp-3);
|
|
26
|
+
padding: var(--sp-2) var(--sp-3);
|
|
27
|
+
background: var(--surface-2);
|
|
28
|
+
border: 1px solid var(--line-soft);
|
|
29
|
+
border-radius: var(--radius-sm);
|
|
30
|
+
margin-bottom: 4px;
|
|
31
|
+
}
|
|
32
|
+
.phase-ord {
|
|
33
|
+
font-family: var(--mono);
|
|
34
|
+
font-size: 12px;
|
|
35
|
+
color: var(--text-faint);
|
|
36
|
+
text-align: right;
|
|
37
|
+
}
|
|
38
|
+
.phase-mid { min-width: 0; }
|
|
39
|
+
.phase-id { font-family: var(--mono); font-size: 13px; color: var(--text); }
|
|
40
|
+
.phase-file {
|
|
41
|
+
font-family: var(--mono);
|
|
42
|
+
font-size: 11px;
|
|
43
|
+
color: var(--text-faint);
|
|
44
|
+
overflow-wrap: anywhere;
|
|
45
|
+
margin-top: 2px;
|
|
46
|
+
}
|
|
47
|
+
.phase-calls {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-wrap: wrap;
|
|
50
|
+
align-items: center;
|
|
51
|
+
gap: 4px;
|
|
52
|
+
margin-top: 6px;
|
|
53
|
+
}
|
|
54
|
+
.phase-calls-label { font-size: 11px; color: var(--text-faint); }
|
|
55
|
+
.phase-right {
|
|
56
|
+
display: flex;
|
|
57
|
+
flex-direction: column;
|
|
58
|
+
align-items: flex-end;
|
|
59
|
+
gap: 4px;
|
|
60
|
+
}
|
|
61
|
+
.phase-read,
|
|
62
|
+
.phase-layers { font-family: var(--mono); font-size: 11px; color: var(--text-faint); }
|
|
63
|
+
.phase-why {
|
|
64
|
+
grid-column: 1 / -1;
|
|
65
|
+
font-size: 12px;
|
|
66
|
+
color: var(--text-faint);
|
|
67
|
+
overflow-wrap: anywhere;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* ── a call row ───────────────────────────────────────────────────────────────
|
|
71
|
+
Expands IN PLACE, one at a time (the Runs-row rule, v0.43.6). The head is a
|
|
72
|
+
FLEX row rather than a grid: its child count genuinely varies — `cost` is
|
|
73
|
+
optional — and a card whose child count changes with its state must not
|
|
74
|
+
declare its columns. */
|
|
75
|
+
.call-row {
|
|
76
|
+
border: 1px solid var(--line-soft);
|
|
77
|
+
border-radius: var(--radius-sm);
|
|
78
|
+
background: var(--surface-2);
|
|
79
|
+
margin-bottom: 4px;
|
|
80
|
+
overflow: hidden;
|
|
81
|
+
}
|
|
82
|
+
.call-head {
|
|
83
|
+
display: flex;
|
|
84
|
+
align-items: center;
|
|
85
|
+
gap: var(--sp-3);
|
|
86
|
+
width: 100%;
|
|
87
|
+
padding: var(--sp-2) var(--sp-3);
|
|
88
|
+
background: none;
|
|
89
|
+
border: 0;
|
|
90
|
+
color: inherit;
|
|
91
|
+
text-align: left;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
font: inherit;
|
|
94
|
+
}
|
|
95
|
+
.call-head:hover { background: var(--surface-3, var(--surface-2)); }
|
|
96
|
+
.call-caret {
|
|
97
|
+
color: var(--text-faint);
|
|
98
|
+
transition: transform 140ms ease;
|
|
99
|
+
flex: 0 0 auto;
|
|
100
|
+
}
|
|
101
|
+
.call-head[aria-expanded="true"] .call-caret { transform: rotate(90deg); }
|
|
102
|
+
.call-cmd {
|
|
103
|
+
font-family: var(--mono);
|
|
104
|
+
font-size: 12px;
|
|
105
|
+
color: var(--text);
|
|
106
|
+
flex: 1 1 auto;
|
|
107
|
+
min-width: 0;
|
|
108
|
+
overflow-wrap: anywhere;
|
|
109
|
+
}
|
|
110
|
+
.call-lanes-n { font-size: 11px; color: var(--text-faint); flex: 0 0 auto; }
|
|
111
|
+
.call-detail {
|
|
112
|
+
padding: 0 var(--sp-3) var(--sp-3) calc(var(--sp-3) + 20px);
|
|
113
|
+
border-top: 1px solid var(--line-soft);
|
|
114
|
+
}
|
|
115
|
+
.call-exits,
|
|
116
|
+
.call-lane-chips {
|
|
117
|
+
display: flex;
|
|
118
|
+
flex-wrap: wrap;
|
|
119
|
+
align-items: center;
|
|
120
|
+
gap: 4px;
|
|
121
|
+
margin-top: var(--sp-2);
|
|
122
|
+
}
|
|
123
|
+
.call-exits-label { font-size: 12px; color: var(--text-faint); }
|
|
124
|
+
/* An exit code is a CONTRACT a lane branches on, so it is drawn as a fixed
|
|
125
|
+
token rather than folded into the surrounding prose. */
|
|
126
|
+
.call-exit {
|
|
127
|
+
font-family: var(--mono);
|
|
128
|
+
font-size: 11px;
|
|
129
|
+
color: var(--text-dim);
|
|
130
|
+
background: var(--surface-1, var(--surface-2));
|
|
131
|
+
border: 1px solid var(--line-soft);
|
|
132
|
+
border-radius: var(--radius-sm);
|
|
133
|
+
padding: 2px 6px;
|
|
134
|
+
}
|
|
@@ -110,9 +110,9 @@
|
|
|
110
110
|
to { transform: none; opacity: 1; }
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
/* THE SHADOWING ANIMATION (plan §6.2).
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
/* THE SHADOWING ANIMATION (plan §6.2). A row a higher rank already answered
|
|
114
|
+
desaturates, a lock slides in, and the reason is right there. The animation
|
|
115
|
+
teaches the precedence rule — that is the whole point. */
|
|
116
116
|
.setting.shadowed { opacity: .42; filter: saturate(.15); }
|
|
117
117
|
.lock {
|
|
118
118
|
display: inline-flex;
|
|
@@ -225,3 +225,79 @@
|
|
|
225
225
|
.rung-bar { height: 4px; border-radius: 2px; background: var(--accent); opacity: .55; }
|
|
226
226
|
.rung-agent { color: var(--text-dim); }
|
|
227
227
|
.ladder-note { font-size: 12px; color: var(--text-faint); margin-top: var(--sp-2); }
|
|
228
|
+
|
|
229
|
+
/* ── who decides what: the contested families, resolved (v1.0.0 W16) ────────
|
|
230
|
+
A precedence LADDER, drawn the same way the score ladder above it is drawn
|
|
231
|
+
— one row per rank, in resolution order, top-down. The row that answered is
|
|
232
|
+
the only one given weight, because "read down and stop at the first one that
|
|
233
|
+
resolves" is a rule a picture can teach and a paragraph cannot. */
|
|
234
|
+
.rank-family { margin-top: var(--sp-4); }
|
|
235
|
+
.rank-family:first-of-type { margin-top: var(--sp-2); }
|
|
236
|
+
.rank-family-head {
|
|
237
|
+
display: flex;
|
|
238
|
+
flex-wrap: wrap;
|
|
239
|
+
align-items: baseline;
|
|
240
|
+
gap: var(--sp-2);
|
|
241
|
+
margin-bottom: 4px;
|
|
242
|
+
}
|
|
243
|
+
.rank-family-name { font-family: var(--mono); font-size: 12px; color: var(--text-dim); }
|
|
244
|
+
.rank-family-q { font-size: 12px; color: var(--text-faint); }
|
|
245
|
+
.rank-answer { font-size: 12px; color: var(--text-faint); margin-bottom: 6px; }
|
|
246
|
+
|
|
247
|
+
/* A GRID whose column count never changes with state. `.ex-tool`'s 250px
|
|
248
|
+
ellipse (v0.53.0) was a card DECLARING rows its states did not all have; the
|
|
249
|
+
`why` here is an optional FOURTH child, so it is given its own full-width
|
|
250
|
+
line rather than a column it sometimes leaves empty. */
|
|
251
|
+
.rank-row {
|
|
252
|
+
display: grid;
|
|
253
|
+
grid-template-columns: 34px minmax(0, 1fr) auto;
|
|
254
|
+
align-items: center;
|
|
255
|
+
gap: var(--sp-3);
|
|
256
|
+
padding: 5px var(--sp-3);
|
|
257
|
+
background: var(--surface-2);
|
|
258
|
+
border: 1px solid var(--line-soft);
|
|
259
|
+
border-radius: var(--radius-sm);
|
|
260
|
+
margin-bottom: 4px;
|
|
261
|
+
}
|
|
262
|
+
.rank-row.is-resolved { border-color: var(--ok); background: var(--ok-wash); }
|
|
263
|
+
.rank-prio { font-family: var(--mono); font-size: 12px; color: var(--text-faint); }
|
|
264
|
+
.rank-key { font-family: var(--mono); font-size: 12px; color: var(--text-dim); overflow-wrap: anywhere; }
|
|
265
|
+
/* The terminal floor is not a key and must not read as one, or somebody goes
|
|
266
|
+
looking for it in the config file. */
|
|
267
|
+
.rank-key.is-terminal { font-family: inherit; font-style: italic; color: var(--text-faint); }
|
|
268
|
+
.rank-why {
|
|
269
|
+
grid-column: 1 / -1;
|
|
270
|
+
font-size: 12px;
|
|
271
|
+
color: var(--text-faint);
|
|
272
|
+
overflow-wrap: anywhere;
|
|
273
|
+
}
|
|
274
|
+
.rank-legend {
|
|
275
|
+
display: flex;
|
|
276
|
+
flex-wrap: wrap;
|
|
277
|
+
align-items: center;
|
|
278
|
+
gap: 6px;
|
|
279
|
+
margin-top: var(--sp-3);
|
|
280
|
+
padding-top: var(--sp-3);
|
|
281
|
+
border-top: 1px solid var(--line-soft);
|
|
282
|
+
}
|
|
283
|
+
.rank-legend-label { font-size: 12px; color: var(--text-faint); }
|
|
284
|
+
|
|
285
|
+
/* which lanes read a key — chips, because the list is short and unordered */
|
|
286
|
+
.setting-lanes {
|
|
287
|
+
display: flex;
|
|
288
|
+
flex-wrap: wrap;
|
|
289
|
+
align-items: center;
|
|
290
|
+
gap: 4px;
|
|
291
|
+
margin-top: 6px;
|
|
292
|
+
}
|
|
293
|
+
.setting-lanes-label { font-size: 12px; color: var(--text-faint); }
|
|
294
|
+
.chip-lane {
|
|
295
|
+
font-family: var(--mono);
|
|
296
|
+
font-size: 11px;
|
|
297
|
+
color: var(--text-faint);
|
|
298
|
+
background: var(--surface-2);
|
|
299
|
+
border-color: var(--line-soft);
|
|
300
|
+
}
|
|
301
|
+
/* "no lane reads this" is an ANSWER, so it is styled as a stated fact rather
|
|
302
|
+
than as a missing chip. */
|
|
303
|
+
.setting-lanes-none { font-size: 11px; color: var(--text-faint); font-style: italic; }
|