@azure-id/orc 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +202 -0
- package/README-id.md +57 -59
- package/README.md +53 -54
- package/bin/build-agents.js +109 -109
- package/bin/cli.js +262 -58
- package/bin/graph-audit.js +235 -0
- package/bin/graph-extract.js +308 -3
- package/bin/graph-gain.js +23 -3
- package/bin/graph-map.js +9 -1
- package/bin/graph-query.js +152 -10
- package/bin/graph-shard.js +6 -1
- package/bin/graph-signals.js +287 -4
- package/bin/graph.js +717 -658
- package/bin/onboarding-content.js +4 -4
- package/bin/pricing.json +207 -200
- package/bin/verify-contracts.js +117 -2
- package/bin/verify-package.js +11 -7
- package/bin/webui/css/04-motion.css +162 -152
- package/bin/webui/css/panels/knowledge.css +563 -116
- package/bin/webui/fixtures/extra.js +2036 -2036
- package/bin/webui/fixtures/hookui.js +5 -5
- package/bin/webui/fixtures/knowledge.js +21 -4
- package/bin/webui/fixtures/settings.js +305 -305
- package/bin/webui/i18n/en/knowledge.json +122 -4
- package/bin/webui/i18n/id/knowledge.json +122 -4
- package/bin/webui/js/panels/knowledge.js +573 -9
- package/bin/webui/js/panels/overview.js +13 -4
- package/mock-run/context-combiner.md +100 -100
- package/mock-run/orc-budget.md +534 -534
- package/mock-run/orc-challenge-council.md +262 -262
- package/mock-run/orc-ultra.md +103 -103
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +43 -43
- package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -56
- package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -60
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -58
- package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -75
- package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -110
- package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -114
- package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -112
- package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -132
- package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -109
- package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -109
- package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -90
- package/templates/agents/orc-claude-writer-opus-5-med.md +55 -55
- package/templates/agents/orc-context-combiner-opus-5-high.md +88 -88
- package/templates/agents/orc-doc-checker-opus-5-low.md +108 -108
- package/templates/agents/orc-doc-writer-opus-5-med.md +134 -134
- package/templates/agents/orc-executor-haiku-4-5.md +2 -1
- package/templates/agents/orc-executor-opus-4-7-high.md +2 -1
- package/templates/agents/orc-executor-opus-4-7-med.md +2 -1
- package/templates/agents/orc-executor-opus-4-8-high.md +2 -1
- package/templates/agents/orc-executor-opus-5-high.md +4 -3
- package/templates/agents/orc-executor-opus-5-low.md +4 -3
- package/templates/agents/orc-executor-opus-5-med.md +4 -3
- package/templates/agents/orc-executor-sonnet-4-6-high.md +2 -1
- package/templates/agents/orc-executor-sonnet-4-6-med.md +2 -1
- package/templates/agents/orc-executor-sonnet-5-high.md +2 -1
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -1
- package/templates/agents/orc-judge-opus-5-xhigh.md +85 -85
- package/templates/agents/orc-learn-writer-opus-5-low.md +73 -73
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -65
- package/templates/agents/orc-planner-mini-opus-5-med.md +4 -4
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +1 -1
- package/templates/agents/orc-planner-opus-5-med.md +160 -160
- package/templates/agents/orc-recon-opus-5-low.md +18 -8
- package/templates/agents/orc-recon-sonnet-4-6-med.md +15 -5
- package/templates/agents/orc-retro-opus-5-med.md +3 -3
- package/templates/agents/orc-reviewer-opus-5-med.md +60 -60
- package/templates/agents/orc-scout-opus-5-low.md +40 -40
- package/templates/agents/orc-system-analyst-opus-5-high.md +120 -120
- package/templates/agents/orc-test-author-opus-5-med.md +71 -71
- package/templates/agents/orc-test-designer-opus-5-high.md +158 -158
- package/templates/agents/orc-test-interpreter-opus-5-low.md +130 -130
- package/templates/agents/orc-verifier-opus-5-med.md +69 -69
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -81
- package/templates/commands/orc-ultra.md +17 -17
- package/templates/commands/orc-verify.md +11 -11
- package/templates/hooks/README.md +13 -3
- package/templates/hooks/orc-effort-guard.js +178 -178
- package/templates/hooks/orc-graph-hook.js +53 -7
- package/templates/hooks/orc-statusline.js +6 -6
- package/templates/skills/_shared/code-graph.md +57 -18
- package/templates/skills/_shared/config-precedence.md +198 -198
- package/templates/skills/_shared/extra-dispatch.md +1346 -1346
- package/templates/skills/_shared/opus5-only.md +8 -8
- package/templates/skills/_shared/phases/analyst-gates.md +136 -136
- package/templates/skills/_shared/phases/execution.md +4 -4
- package/templates/skills/_shared/phases/planning.md +3 -3
- package/templates/skills/_shared/phases/preflight.md +1 -1
- package/templates/skills/_shared/phases/review.md +4 -2
- package/templates/skills/_shared/phases/ship.md +1 -1
- package/templates/skills/_shared/phases/trace.md +3 -2
- package/templates/skills/_shared/read-ladder.md +14 -1
- package/templates/skills/_shared/return-validation.md +1 -1
- package/templates/skills/context-combiner/SKILL.md +1 -1
- package/templates/skills/context-combiner/schemas/combined-report.md +78 -78
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +8 -8
- package/templates/skills/orc/config.md +9 -9
- package/templates/skills/orc/examples/full-run-mock.md +73 -73
- package/templates/skills/orc/references/effort-and-mode.md +222 -222
- package/templates/skills/orc/references/preflight-report.md +2 -2
- package/templates/skills/orc/references/ultra-mode.md +3 -3
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +2 -2
- package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -121
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -76
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -45
- package/templates/skills/orc-analyze/SKILL.md +2 -2
- package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -42
- package/templates/skills/orc-analyze/schemas/report-audit.md +83 -83
- package/templates/skills/orc-analyze/schemas/report-prose.md +63 -63
- package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -78
- package/templates/skills/orc-challenge/README.md +142 -142
- package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -273
- package/templates/skills/orc-challenge/references/council.md +315 -315
- package/templates/skills/orc-challenge/references/intake.md +171 -171
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-diy/README.md +143 -143
- package/templates/skills/orc-diy/references/flow-schema.md +1 -1
- package/templates/skills/orc-doc/README.md +229 -229
- package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -325
- package/templates/skills/orc-doc/references/chunking.md +527 -527
- package/templates/skills/orc-fast/SKILL.md +4 -4
- package/templates/skills/orc-learn/SKILL.md +14 -14
- package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -61
- package/templates/skills/orc-mini/SKILL.md +16 -20
- package/templates/skills/orc-mini/references/complexity.md +25 -11
- package/templates/skills/orc-quick/SKILL.md +12 -13
- package/templates/skills/orc-quick/references/gh-mode.md +1 -1
- package/templates/skills/orc-quick/references/look.md +5 -5
- package/templates/skills/orc-verify/SKILL.md +15 -15
- package/templates/skills/orc-verify/examples/verify-mock.md +33 -33
- package/templates/skills/orc-wiki/references/extra.md +1 -1
package/bin/verify-package.js
CHANGED
|
@@ -198,6 +198,10 @@ const required = [
|
|
|
198
198
|
// every read falls back to the full model. It breaks the SPEED, silently, on
|
|
199
199
|
// the one call every lane makes — which is the worst kind of missing file.
|
|
200
200
|
"bin/graph-shard.js",
|
|
201
|
+
// v1.9.1 W4 — the audit (A2). Dropping it breaks `orc graph audit`, which is
|
|
202
|
+
// the only answer that says WHY a THIN map is thin. Without it the status
|
|
203
|
+
// line still says THIN and names a command that is not there.
|
|
204
|
+
"bin/graph-audit.js",
|
|
201
205
|
|
|
202
206
|
// The two DATED data files (v0.50.0). Both ship inside the package and both
|
|
203
207
|
// are load-bearing on absence rather than on content: without the catalog
|
|
@@ -465,7 +469,7 @@ const required = [
|
|
|
465
469
|
// v0.47.0 — the three /orc-challenge agents. All THREE must ship: a cycle that
|
|
466
470
|
// cannot dispatch the reader silently loses D4, and one that cannot dispatch
|
|
467
471
|
// the advisor turns a FAIL into a list with no order. All three are already
|
|
468
|
-
// Opus 5, so `opus5_only` needs no twin for any of them.
|
|
472
|
+
// Opus 5.5, so `opus5_only` needs no twin for any of them.
|
|
469
473
|
"templates/agents/orc-challenge-judge-opus-5-high.md",
|
|
470
474
|
"templates/agents/orc-challenge-advisor-opus-5-med.md",
|
|
471
475
|
"templates/agents/orc-challenge-reader-opus-5-low.md",
|
|
@@ -475,7 +479,7 @@ const required = [
|
|
|
475
479
|
// first-principles thinker disputes the goal itself, and the expansionist is
|
|
476
480
|
// the only lens not looking for a defect. All five must ship: a roster lens
|
|
477
481
|
// that cannot be dispatched is a NOT-RUN row a user paid to select, and rule
|
|
478
|
-
// 15 makes that loud rather than silent. All five are claude-opus-5, so
|
|
482
|
+
// 15 makes that loud rather than silent. All five are claude-opus-5-5, so
|
|
479
483
|
// `opus5_only` adds NO pair and the floor moves by exactly five.
|
|
480
484
|
"templates/agents/orc-challenge-contrarian-opus-5-high.md",
|
|
481
485
|
"templates/agents/orc-challenge-outsider-opus-5-low.md",
|
|
@@ -485,7 +489,7 @@ const required = [
|
|
|
485
489
|
// v0.48.0 — the two /orc-doc agents. BOTH must ship: a write wave that cannot
|
|
486
490
|
// dispatch the writer has nothing to assemble, and a check wave that cannot
|
|
487
491
|
// dispatch the checker silently turns the only judgment step into the free
|
|
488
|
-
// lint. Both are already Opus 5, so `opus5_only` adds no twin for either.
|
|
492
|
+
// lint. Both are already Opus 5.5, so `opus5_only` adds no twin for either.
|
|
489
493
|
"templates/agents/orc-doc-writer-opus-5-med.md",
|
|
490
494
|
"templates/agents/orc-doc-checker-opus-5-low.md",
|
|
491
495
|
// v1.5.0 - /orc-test's two agents, and they are two INSTRUMENTS rather than
|
|
@@ -494,7 +498,7 @@ const required = [
|
|
|
494
498
|
// interpreter is `low` because a harder-thinking interpreter reasons its way
|
|
495
499
|
// to why a leaked stack trace is probably fine in staging, which is exactly
|
|
496
500
|
// the gap it exists to find. Nothing may ever upgrade the interpreter. Both
|
|
497
|
-
// are claude-opus-5, so `opus5_only` adds NO pair and the floor moves by two.
|
|
501
|
+
// are claude-opus-5-5, so `opus5_only` adds NO pair and the floor moves by two.
|
|
498
502
|
"templates/agents/orc-test-designer-opus-5-high.md",
|
|
499
503
|
"templates/agents/orc-test-interpreter-opus-5-low.md",
|
|
500
504
|
// v1.2.1 — the status line explained for the person reading it, in
|
|
@@ -565,7 +569,7 @@ const agentCount = walkCount(path.join(ROOT, "templates/agents"), ".md");
|
|
|
565
569
|
// tier of the same one. The reader is `low` on purpose (a harder-thinking reader
|
|
566
570
|
// papers over exactly the gaps D4 measures), the judge is `high` because D2 is
|
|
567
571
|
// the only dimension no computer can reach, and the advisor is `medium` because
|
|
568
|
-
// grouping findings is pattern work. All three are claude-opus-5, so `opus5_only`
|
|
572
|
+
// grouping findings is pattern work. All three are claude-opus-5-5, so `opus5_only`
|
|
569
573
|
// adds NO pair and the floor moves by exactly three.
|
|
570
574
|
// v0.48.0: +1 skill (orc-doc) and +2 agents. The split follows v0.47.0's rule —
|
|
571
575
|
// an agent exists when it is a DIFFERENT INSTRUMENT, not a tier of the same one.
|
|
@@ -573,13 +577,13 @@ const agentCount = walkCount(path.join(ROOT, "templates/agents"), ".md");
|
|
|
573
577
|
// LINE RANGE and has `Read` only. The checker is `low` on purpose (a
|
|
574
578
|
// harder-thinking checker reasons its way past a gap a real reader would trip
|
|
575
579
|
// on — the challenge cold reader's reasoning), so nothing may upgrade it. Both
|
|
576
|
-
// are claude-opus-5, so `opus5_only` adds NO pair and the floor moves by two.
|
|
580
|
+
// are claude-opus-5-5, so `opus5_only` adds NO pair and the floor moves by two.
|
|
577
581
|
// v0.49.1: +0 skills and +5 agents — THE COUNCIL. Same rule as v0.47.0, applied
|
|
578
582
|
// five times: each of these is a DIFFERENT INSTRUMENT, not a tier of one. The
|
|
579
583
|
// outsider is `low` and the contrarian is `high` for the same class of reason
|
|
580
584
|
// the cold reader is `low` — effort here is a MEASUREMENT choice, not a cost
|
|
581
585
|
// one, and a key that let either be tuned would be a key that let the
|
|
582
|
-
// instrument be broken. All five are claude-opus-5, so `opus5_only` adds NO
|
|
586
|
+
// instrument be broken. All five are claude-opus-5-5, so `opus5_only` adds NO
|
|
583
587
|
// pair and the floor moves by exactly five.
|
|
584
588
|
// v1.0.0 W3: +0 skills and -5 agents — the Fable 5 role override is REMOVED.
|
|
585
589
|
// It is the first time this floor has ever gone DOWN, and the reason it may is
|
|
@@ -1,152 +1,162 @@
|
|
|
1
|
-
/* 04-motion.css — orc ui
|
|
2
|
-
The panel entrance, the staggered block entrance, and THE ONE
|
|
3
|
-
@media (prefers-reduced-motion) block.
|
|
4
|
-
|
|
5
|
-
LOADED LAST, and that is load-bearing. Several reduced-motion rules are
|
|
6
|
-
plain declarations rather than !important (.vault-pulse and .step-flow are
|
|
7
|
-
removed with `display: none`, because capping an infinite animation to one
|
|
8
|
-
iteration freezes it mid-cycle). An equal-specificity rule in a panel file
|
|
9
|
-
loading afterwards would win on order and quietly switch the animation back
|
|
10
|
-
on. A test asserts this media query appears here and in no panels/*.css.
|
|
11
|
-
|
|
12
|
-
The <link> ORDER in app.html is the cascade order, and the numeric
|
|
13
|
-
prefix is that order. No @import: it would carry no session token and
|
|
14
|
-
401. */
|
|
15
|
-
|
|
16
|
-
/* Panel swap: 180ms slide + fade, ease-out. */
|
|
17
|
-
.panel { animation: panel-in var(--dur) var(--ease); }
|
|
18
|
-
@keyframes panel-in {
|
|
19
|
-
from { opacity: 0; transform: translateY(6px); }
|
|
20
|
-
to { opacity: 1; transform: none; }
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/* Staggered entrance. The blocks of a panel arrive in reading order rather than
|
|
24
|
-
all at once, which makes a panel of six cards parse as a sequence instead of
|
|
25
|
-
a flash. Capped at 8 so a long list never becomes a slow one — every child
|
|
26
|
-
past the cap shares the last delay. */
|
|
27
|
-
.stack > * { animation: block-in var(--dur) var(--ease) backwards; }
|
|
28
|
-
.stack > *:nth-child(1) { animation-delay: 0ms; }
|
|
29
|
-
.stack > *:nth-child(2) { animation-delay: 30ms; }
|
|
30
|
-
.stack > *:nth-child(3) { animation-delay: 60ms; }
|
|
31
|
-
.stack > *:nth-child(4) { animation-delay: 90ms; }
|
|
32
|
-
.stack > *:nth-child(5) { animation-delay: 120ms; }
|
|
33
|
-
.stack > *:nth-child(6) { animation-delay: 150ms; }
|
|
34
|
-
.stack > *:nth-child(7) { animation-delay: 180ms; }
|
|
35
|
-
.stack > *:nth-child(n+8) { animation-delay: 210ms; }
|
|
36
|
-
@keyframes block-in {
|
|
37
|
-
from { opacity: 0; transform: translateY(8px); }
|
|
38
|
-
to { opacity: 1; transform: none; }
|
|
39
|
-
}
|
|
40
|
-
/* ── the CLI Hook Interface (v1.4.1) ─────────────────────────────────────── */
|
|
41
|
-
/* The board is a thing you BUILD, so it moves the way a thing you build moves:
|
|
42
|
-
a chip arrives, a chip you just staged breathes once so you can find it, and
|
|
43
|
-
a row in the part picker slides in as the list narrows under your typing.
|
|
44
|
-
Every one of them is a FINITE animation with a real end state, so the cap in
|
|
45
|
-
the reduced-motion block below leaves each one at rest rather than frozen
|
|
46
|
-
part-way. */
|
|
47
|
-
.hk-chip { animation: hk-chip-in 200ms var(--ease) backwards; }
|
|
48
|
-
@keyframes hk-chip-in {
|
|
49
|
-
from { opacity: 0; transform: translateY(6px) scale(0.97); }
|
|
50
|
-
to { opacity: 1; transform: none; }
|
|
51
|
-
}
|
|
52
|
-
/* Staged, not written — and the one thing on the board that has to be findable
|
|
53
|
-
the instant it appears. Three pulses and it stops: an infinite one would have
|
|
54
|
-
to be REMOVED below rather than capped, and this one reads correctly at rest.
|
|
55
|
-
*/
|
|
56
|
-
.hk-chip-new { animation: hk-chip-in 200ms var(--ease) backwards, hk-chip-mark 900ms var(--ease) 3; }
|
|
57
|
-
@keyframes hk-chip-mark {
|
|
58
|
-
0%, 100% { box-shadow: inset 0 0 0 0 var(--accent); }
|
|
59
|
-
50% { box-shadow: inset 0 0 0 2px var(--accent); }
|
|
60
|
-
}
|
|
61
|
-
/* Position, drop marker, and the zone's own border: transitions rather than
|
|
62
|
-
animations, so an interrupted drag never leaves a chip mid-flight. */
|
|
63
|
-
.hk-chip, .hk-zone, .hk-add, .hk-act, .hk-pick-row, .hk-theme, .hk-sample {
|
|
64
|
-
transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease),
|
|
65
|
-
box-shadow var(--dur) var(--ease), opacity var(--dur) var(--ease),
|
|
66
|
-
transform var(--dur) var(--ease);
|
|
67
|
-
}
|
|
68
|
-
.hk-chip:hover:not(.hk-chip-dragging) { transform: translateY(-2px); }
|
|
69
|
-
.hk-add:hover:not(:disabled) { transform: translateY(-2px); }
|
|
70
|
-
.hk-pick-row { animation: hk-row-in 160ms var(--ease) backwards; }
|
|
71
|
-
@keyframes hk-row-in {
|
|
72
|
-
from { opacity: 0; transform: translateX(-6px); }
|
|
73
|
-
to { opacity: 1; transform: none; }
|
|
74
|
-
}
|
|
75
|
-
button.hk-pick-row:hover { transform: translateX(3px); }
|
|
76
|
-
|
|
77
|
-
/* NOTHING ARRIVES ON A REPAINT (v1.4.2). The CLI Hook Interface rebuilds its
|
|
78
|
-
whole panel when a change is STAGED — no request, no navigation, the same
|
|
79
|
-
cards with one value different — and the entrance animations above replayed
|
|
80
|
-
every time, on a 30ms stagger. With the network tab empty it read exactly
|
|
81
|
-
like the page reloading, on every keystroke.
|
|
82
|
-
|
|
83
|
-
`hk-quiet` is added by `hkPaint` from the SECOND paint onward and by the part
|
|
84
|
-
editor before every rebuild. It removes the ENTRANCES only: the transitions
|
|
85
|
-
further up are about the pointer rather than about arriving, so hover, the
|
|
86
|
-
drop marker and the staged edge are untouched. It must load after the rules
|
|
87
|
-
it switches off, which is why it is here and not in the panel's own file. */
|
|
88
|
-
.hk-quiet > *,
|
|
89
|
-
.hk-quiet .hk-chip,
|
|
90
|
-
.hk-quiet .hk-chip-new,
|
|
91
|
-
.hk-quiet .hk-pick-row {
|
|
92
|
-
animation: none;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/* ---------------------------------------------------------- REDUCED MOTION */
|
|
96
|
-
/* Non-negotiable: every animation and transition above is off. */
|
|
97
|
-
|
|
98
|
-
@media (prefers-reduced-motion: reduce) {
|
|
99
|
-
*, *::before, *::after {
|
|
100
|
-
animation-duration: 1ms !important;
|
|
101
|
-
animation-iteration-count: 1 !important;
|
|
102
|
-
/* Load-bearing, not tidiness: the staggered entrance fills `backwards`, so
|
|
103
|
-
a delay that survives here leaves a block sitting at opacity 0 for its
|
|
104
|
-
whole delay — reduced motion would mean things simply do not appear. */
|
|
105
|
-
animation-delay: 0ms !important;
|
|
106
|
-
transition-duration: 1ms !important;
|
|
107
|
-
scroll-behavior: auto !important;
|
|
108
|
-
}
|
|
109
|
-
/* Reduced motion means no movement, not fast movement — the hover and press
|
|
110
|
-
nudges are removed outright rather than sped up. */
|
|
111
|
-
.nav a:hover, .btn:active:not(:disabled), .action:hover,
|
|
112
|
-
.todo:hover, .stat-link:hover, button.step:hover { transform: none !important; }
|
|
113
|
-
/* The board's own nudges, removed rather than shortened — a chip that lifts
|
|
114
|
-
under the pointer is an affordance, and a fast lift is still a lift. The
|
|
115
|
-
border and box-shadow changes stay: THEY are what says where a drop lands,
|
|
116
|
-
and a drop marker carried by motion alone would not exist here at all. */
|
|
117
|
-
.hk-chip:hover:not(.hk-chip-dragging), .hk-add:hover:not(:disabled),
|
|
118
|
-
button.hk-pick-row:hover { transform: none !important; }
|
|
119
|
-
/* The vault pulse is one of two INFINITE animations on the page. Capping it to
|
|
120
|
-
a single 1ms run would still leave a dash frozen mid-edge, so it is removed
|
|
121
|
-
outright and the edge reads as a plain line. */
|
|
122
|
-
.vault-pulse { display: none; }
|
|
123
|
-
/* The other one: the looping flow sweep. `animation-iteration-count: 1` above
|
|
124
|
-
would still fire it once and then leave the connector segment collapsed at
|
|
125
|
-
its final keyframe, so both halves are removed outright — the rail is drawn
|
|
126
|
-
in its resting state and the hairlines read as plain connectors. */
|
|
127
|
-
.step, .step::before { animation: none !important; }
|
|
128
|
-
.step-flow { display: none; }
|
|
129
|
-
/* The cost bar grows in two dimensions (the stack's width, each segment's
|
|
130
|
-
flex-grow). Both are removed rather than shortened, so the bar is simply
|
|
131
|
-
drawn at its final proportions. */
|
|
132
|
-
.bar-stack, .bar-seg { transition: none !important; }
|
|
133
|
-
/* The challenge timeline and its convergence bar. Both are removed rather
|
|
134
|
-
than shortened: a capped `ch-grow` leaves a segment frozen part-way, which
|
|
135
|
-
misreports the count it is drawn from — worse than no animation at all. */
|
|
136
|
-
.ch-rail-node, .ch-conv-seg { animation: none !important; }
|
|
137
|
-
/* The Docs ribbon (v0.48.0). Three animations, all REMOVED rather than
|
|
138
|
-
capped: `doc-seg-in` capped at one iteration would still leave a segment
|
|
139
|
-
mid-`scaleY`, and the two INFINITE ones (the written sheen and the
|
|
140
|
-
user-edited pulse) would freeze at whatever opacity the single run stopped
|
|
141
|
-
on — a segment drawn at 40% height misreports the line count it is drawn
|
|
142
|
-
from, which is worse than no animation at all. The wave rows and the health
|
|
143
|
-
bars go the same way: a bar frozen part-way is a wrong number. */
|
|
144
|
-
.doc-seg, .doc-seg-box, .doc-wave, .doc-bar-seg { animation: none !important; }
|
|
145
|
-
/* The Extra connect pulse (v0.50.0). A probe has no known duration, so the
|
|
146
|
-
dot loops until an answer arrives — the third INFINITE animation on the
|
|
147
|
-
page, and removed outright for the same reason as the other two: capped at
|
|
148
|
-
one iteration it would stop half way across the wire, which reads as a
|
|
149
|
-
request that hung. The wire itself still turns green or red, so the RESULT
|
|
150
|
-
of the test is never carried by motion alone. */
|
|
151
|
-
.ex-wire-dot { display: none; }
|
|
152
|
-
|
|
1
|
+
/* 04-motion.css — orc ui
|
|
2
|
+
The panel entrance, the staggered block entrance, and THE ONE
|
|
3
|
+
@media (prefers-reduced-motion) block.
|
|
4
|
+
|
|
5
|
+
LOADED LAST, and that is load-bearing. Several reduced-motion rules are
|
|
6
|
+
plain declarations rather than !important (.vault-pulse and .step-flow are
|
|
7
|
+
removed with `display: none`, because capping an infinite animation to one
|
|
8
|
+
iteration freezes it mid-cycle). An equal-specificity rule in a panel file
|
|
9
|
+
loading afterwards would win on order and quietly switch the animation back
|
|
10
|
+
on. A test asserts this media query appears here and in no panels/*.css.
|
|
11
|
+
|
|
12
|
+
The <link> ORDER in app.html is the cascade order, and the numeric
|
|
13
|
+
prefix is that order. No @import: it would carry no session token and
|
|
14
|
+
401. */
|
|
15
|
+
|
|
16
|
+
/* Panel swap: 180ms slide + fade, ease-out. */
|
|
17
|
+
.panel { animation: panel-in var(--dur) var(--ease); }
|
|
18
|
+
@keyframes panel-in {
|
|
19
|
+
from { opacity: 0; transform: translateY(6px); }
|
|
20
|
+
to { opacity: 1; transform: none; }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Staggered entrance. The blocks of a panel arrive in reading order rather than
|
|
24
|
+
all at once, which makes a panel of six cards parse as a sequence instead of
|
|
25
|
+
a flash. Capped at 8 so a long list never becomes a slow one — every child
|
|
26
|
+
past the cap shares the last delay. */
|
|
27
|
+
.stack > * { animation: block-in var(--dur) var(--ease) backwards; }
|
|
28
|
+
.stack > *:nth-child(1) { animation-delay: 0ms; }
|
|
29
|
+
.stack > *:nth-child(2) { animation-delay: 30ms; }
|
|
30
|
+
.stack > *:nth-child(3) { animation-delay: 60ms; }
|
|
31
|
+
.stack > *:nth-child(4) { animation-delay: 90ms; }
|
|
32
|
+
.stack > *:nth-child(5) { animation-delay: 120ms; }
|
|
33
|
+
.stack > *:nth-child(6) { animation-delay: 150ms; }
|
|
34
|
+
.stack > *:nth-child(7) { animation-delay: 180ms; }
|
|
35
|
+
.stack > *:nth-child(n+8) { animation-delay: 210ms; }
|
|
36
|
+
@keyframes block-in {
|
|
37
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
38
|
+
to { opacity: 1; transform: none; }
|
|
39
|
+
}
|
|
40
|
+
/* ── the CLI Hook Interface (v1.4.1) ─────────────────────────────────────── */
|
|
41
|
+
/* The board is a thing you BUILD, so it moves the way a thing you build moves:
|
|
42
|
+
a chip arrives, a chip you just staged breathes once so you can find it, and
|
|
43
|
+
a row in the part picker slides in as the list narrows under your typing.
|
|
44
|
+
Every one of them is a FINITE animation with a real end state, so the cap in
|
|
45
|
+
the reduced-motion block below leaves each one at rest rather than frozen
|
|
46
|
+
part-way. */
|
|
47
|
+
.hk-chip { animation: hk-chip-in 200ms var(--ease) backwards; }
|
|
48
|
+
@keyframes hk-chip-in {
|
|
49
|
+
from { opacity: 0; transform: translateY(6px) scale(0.97); }
|
|
50
|
+
to { opacity: 1; transform: none; }
|
|
51
|
+
}
|
|
52
|
+
/* Staged, not written — and the one thing on the board that has to be findable
|
|
53
|
+
the instant it appears. Three pulses and it stops: an infinite one would have
|
|
54
|
+
to be REMOVED below rather than capped, and this one reads correctly at rest.
|
|
55
|
+
*/
|
|
56
|
+
.hk-chip-new { animation: hk-chip-in 200ms var(--ease) backwards, hk-chip-mark 900ms var(--ease) 3; }
|
|
57
|
+
@keyframes hk-chip-mark {
|
|
58
|
+
0%, 100% { box-shadow: inset 0 0 0 0 var(--accent); }
|
|
59
|
+
50% { box-shadow: inset 0 0 0 2px var(--accent); }
|
|
60
|
+
}
|
|
61
|
+
/* Position, drop marker, and the zone's own border: transitions rather than
|
|
62
|
+
animations, so an interrupted drag never leaves a chip mid-flight. */
|
|
63
|
+
.hk-chip, .hk-zone, .hk-add, .hk-act, .hk-pick-row, .hk-theme, .hk-sample {
|
|
64
|
+
transition: border-color var(--dur) var(--ease), background var(--dur) var(--ease),
|
|
65
|
+
box-shadow var(--dur) var(--ease), opacity var(--dur) var(--ease),
|
|
66
|
+
transform var(--dur) var(--ease);
|
|
67
|
+
}
|
|
68
|
+
.hk-chip:hover:not(.hk-chip-dragging) { transform: translateY(-2px); }
|
|
69
|
+
.hk-add:hover:not(:disabled) { transform: translateY(-2px); }
|
|
70
|
+
.hk-pick-row { animation: hk-row-in 160ms var(--ease) backwards; }
|
|
71
|
+
@keyframes hk-row-in {
|
|
72
|
+
from { opacity: 0; transform: translateX(-6px); }
|
|
73
|
+
to { opacity: 1; transform: none; }
|
|
74
|
+
}
|
|
75
|
+
button.hk-pick-row:hover { transform: translateX(3px); }
|
|
76
|
+
|
|
77
|
+
/* NOTHING ARRIVES ON A REPAINT (v1.4.2). The CLI Hook Interface rebuilds its
|
|
78
|
+
whole panel when a change is STAGED — no request, no navigation, the same
|
|
79
|
+
cards with one value different — and the entrance animations above replayed
|
|
80
|
+
every time, on a 30ms stagger. With the network tab empty it read exactly
|
|
81
|
+
like the page reloading, on every keystroke.
|
|
82
|
+
|
|
83
|
+
`hk-quiet` is added by `hkPaint` from the SECOND paint onward and by the part
|
|
84
|
+
editor before every rebuild. It removes the ENTRANCES only: the transitions
|
|
85
|
+
further up are about the pointer rather than about arriving, so hover, the
|
|
86
|
+
drop marker and the staged edge are untouched. It must load after the rules
|
|
87
|
+
it switches off, which is why it is here and not in the panel's own file. */
|
|
88
|
+
.hk-quiet > *,
|
|
89
|
+
.hk-quiet .hk-chip,
|
|
90
|
+
.hk-quiet .hk-chip-new,
|
|
91
|
+
.hk-quiet .hk-pick-row {
|
|
92
|
+
animation: none;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* ---------------------------------------------------------- REDUCED MOTION */
|
|
96
|
+
/* Non-negotiable: every animation and transition above is off. */
|
|
97
|
+
|
|
98
|
+
@media (prefers-reduced-motion: reduce) {
|
|
99
|
+
*, *::before, *::after {
|
|
100
|
+
animation-duration: 1ms !important;
|
|
101
|
+
animation-iteration-count: 1 !important;
|
|
102
|
+
/* Load-bearing, not tidiness: the staggered entrance fills `backwards`, so
|
|
103
|
+
a delay that survives here leaves a block sitting at opacity 0 for its
|
|
104
|
+
whole delay — reduced motion would mean things simply do not appear. */
|
|
105
|
+
animation-delay: 0ms !important;
|
|
106
|
+
transition-duration: 1ms !important;
|
|
107
|
+
scroll-behavior: auto !important;
|
|
108
|
+
}
|
|
109
|
+
/* Reduced motion means no movement, not fast movement — the hover and press
|
|
110
|
+
nudges are removed outright rather than sped up. */
|
|
111
|
+
.nav a:hover, .btn:active:not(:disabled), .action:hover,
|
|
112
|
+
.todo:hover, .stat-link:hover, button.step:hover { transform: none !important; }
|
|
113
|
+
/* The board's own nudges, removed rather than shortened — a chip that lifts
|
|
114
|
+
under the pointer is an affordance, and a fast lift is still a lift. The
|
|
115
|
+
border and box-shadow changes stay: THEY are what says where a drop lands,
|
|
116
|
+
and a drop marker carried by motion alone would not exist here at all. */
|
|
117
|
+
.hk-chip:hover:not(.hk-chip-dragging), .hk-add:hover:not(:disabled),
|
|
118
|
+
button.hk-pick-row:hover { transform: none !important; }
|
|
119
|
+
/* The vault pulse is one of two INFINITE animations on the page. Capping it to
|
|
120
|
+
a single 1ms run would still leave a dash frozen mid-edge, so it is removed
|
|
121
|
+
outright and the edge reads as a plain line. */
|
|
122
|
+
.vault-pulse { display: none; }
|
|
123
|
+
/* The other one: the looping flow sweep. `animation-iteration-count: 1` above
|
|
124
|
+
would still fire it once and then leave the connector segment collapsed at
|
|
125
|
+
its final keyframe, so both halves are removed outright — the rail is drawn
|
|
126
|
+
in its resting state and the hairlines read as plain connectors. */
|
|
127
|
+
.step, .step::before { animation: none !important; }
|
|
128
|
+
.step-flow { display: none; }
|
|
129
|
+
/* The cost bar grows in two dimensions (the stack's width, each segment's
|
|
130
|
+
flex-grow). Both are removed rather than shortened, so the bar is simply
|
|
131
|
+
drawn at its final proportions. */
|
|
132
|
+
.bar-stack, .bar-seg { transition: none !important; }
|
|
133
|
+
/* The challenge timeline and its convergence bar. Both are removed rather
|
|
134
|
+
than shortened: a capped `ch-grow` leaves a segment frozen part-way, which
|
|
135
|
+
misreports the count it is drawn from — worse than no animation at all. */
|
|
136
|
+
.ch-rail-node, .ch-conv-seg { animation: none !important; }
|
|
137
|
+
/* The Docs ribbon (v0.48.0). Three animations, all REMOVED rather than
|
|
138
|
+
capped: `doc-seg-in` capped at one iteration would still leave a segment
|
|
139
|
+
mid-`scaleY`, and the two INFINITE ones (the written sheen and the
|
|
140
|
+
user-edited pulse) would freeze at whatever opacity the single run stopped
|
|
141
|
+
on — a segment drawn at 40% height misreports the line count it is drawn
|
|
142
|
+
from, which is worse than no animation at all. The wave rows and the health
|
|
143
|
+
bars go the same way: a bar frozen part-way is a wrong number. */
|
|
144
|
+
.doc-seg, .doc-seg-box, .doc-wave, .doc-bar-seg { animation: none !important; }
|
|
145
|
+
/* The Extra connect pulse (v0.50.0). A probe has no known duration, so the
|
|
146
|
+
dot loops until an answer arrives — the third INFINITE animation on the
|
|
147
|
+
page, and removed outright for the same reason as the other two: capped at
|
|
148
|
+
one iteration it would stop half way across the wire, which reads as a
|
|
149
|
+
request that hung. The wire itself still turns green or red, so the RESULT
|
|
150
|
+
of the test is never carried by motion alone. */
|
|
151
|
+
.ex-wire-dot { display: none; }
|
|
152
|
+
/* The Knowledge ▸ Code graph tab (v1.9.2). Three INFINITE animations — the
|
|
153
|
+
state beacon, the pipeline dots and the call-edge pulses — are REMOVED, not
|
|
154
|
+
capped: a capped one stops half way along its path, which reads as a dot
|
|
155
|
+
that belongs there. Every finite one is removed too, so each bar is drawn
|
|
156
|
+
at its final width at once: a bar frozen part-way is a wrong number. The
|
|
157
|
+
tiles already skip their count-up here (cgStill() in the panel). */
|
|
158
|
+
.cg-beacon, .cg-link-dot, .cg-pulse { display: none; }
|
|
159
|
+
.cg-step, .cg-step-line, .cg-station, .cg-file, .cg-sym, .cg-edge-line,
|
|
160
|
+
.cg-seg, .cg-tile, .cg-bchip, .cg-lang, .cg-read, .cg-gloss-group { animation: none !important; }
|
|
161
|
+
.cg-station:hover { transform: none !important; }
|
|
162
|
+
}
|