Spaces:
Running
Running
article: add howpublished to bibtex (+ asg: sync latest, favicon/links)
Browse files
app/.gitignore
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
node_modules/
|
| 2 |
+
dist/
|
| 3 |
+
.astro/
|
| 4 |
+
*.log
|
app/src/components/Hero.astro
CHANGED
|
@@ -12,6 +12,8 @@ interface Props {
|
|
| 12 |
affiliation?: string; // legacy single affiliation
|
| 13 |
published?: string;
|
| 14 |
doi?: string;
|
|
|
|
|
|
|
| 15 |
pdfProOnly?: boolean; // Gate PDF download to Pro users only
|
| 16 |
}
|
| 17 |
|
|
@@ -24,6 +26,8 @@ const {
|
|
| 24 |
affiliation,
|
| 25 |
published,
|
| 26 |
doi,
|
|
|
|
|
|
|
| 27 |
pdfProOnly = false,
|
| 28 |
} = Astro.props as Props;
|
| 29 |
|
|
@@ -177,6 +181,21 @@ const pdfFilename = `${slugify(pdfBase)}.pdf`;
|
|
| 177 |
</div>
|
| 178 |
)
|
| 179 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
<!-- {doi && (
|
| 181 |
<div class="meta-container-cell">
|
| 182 |
<h3>DOI</h3>
|
|
|
|
| 12 |
affiliation?: string; // legacy single affiliation
|
| 13 |
published?: string;
|
| 14 |
doi?: string;
|
| 15 |
+
paperUrl?: string; // e.g. OpenReview forum
|
| 16 |
+
browserUrl?: string; // interactive dashboard
|
| 17 |
pdfProOnly?: boolean; // Gate PDF download to Pro users only
|
| 18 |
}
|
| 19 |
|
|
|
|
| 26 |
affiliation,
|
| 27 |
published,
|
| 28 |
doi,
|
| 29 |
+
paperUrl,
|
| 30 |
+
browserUrl,
|
| 31 |
pdfProOnly = false,
|
| 32 |
} = Astro.props as Props;
|
| 33 |
|
|
|
|
| 181 |
</div>
|
| 182 |
)
|
| 183 |
}
|
| 184 |
+
{
|
| 185 |
+
(paperUrl || browserUrl) && (
|
| 186 |
+
<div class="meta-container-cell meta-container-cell--links">
|
| 187 |
+
<h3>Links</h3>
|
| 188 |
+
<p class="hero-links">
|
| 189 |
+
{paperUrl && (
|
| 190 |
+
<a class="button" href={paperUrl} target="_blank" rel="noopener noreferrer">Paper</a>
|
| 191 |
+
)}
|
| 192 |
+
{browserUrl && (
|
| 193 |
+
<a class="button" href={browserUrl} target="_blank" rel="noopener noreferrer">Dashboard</a>
|
| 194 |
+
)}
|
| 195 |
+
</p>
|
| 196 |
+
</div>
|
| 197 |
+
)
|
| 198 |
+
}
|
| 199 |
<!-- {doi && (
|
| 200 |
<div class="meta-container-cell">
|
| 201 |
<h3>DOI</h3>
|
app/src/content/chapters/01-opacity.mdx
CHANGED
|
@@ -28,7 +28,7 @@ Understanding this latent structure matters the moment you deploy. Safety auditi
|
|
| 28 |
Yet current agent analysis works at the level of a single trace. It offers no structural model of the behavior that links one run to the next.
|
| 29 |
|
| 30 |
<Wide>
|
| 31 |
-
<HtmlEmbed src="tape-to-fsm.html" title="A trace, read symbol by symbol, drives a finite-state machine" desc="Pick a dataset, then scrub the tape (drag or scroll) or let it play. The read-head advances through the agent's activity tape (left) and lights up the current FSM state and the transition it takes (right). A successful run threads to submit; a stuck run loops and never reaches it. These are representative traces; the full set of twelve datasets with their real extracted FSMs is in the
|
| 32 |
</Wide>
|
| 33 |
|
| 34 |
|
|
@@ -66,5 +66,5 @@ Every dataset replays held-out traces at fitness of at least 0.997.
|
|
| 66 |
The three largest source datasets are subsampled to a fixed slice: SWE-agent uses 2,000 of the 80,036 available trajectories, Mind2Web 500 of 2,350, and AgentNet 5,000 from the OpenCUA Ubuntu subset. The other nine datasets are used in full.
|
| 67 |
|
| 68 |
<Note variant="info" title="Every case is in the live dashboard">
|
| 69 |
-
Every figure in this article is a fixed snapshot; **every dataset and every case is live** in the [interactive dashboard](https://seongland.com/article/asg/browser), which renders all twelve datasets straight from the experiment outputs — the FSMs, the failure predictor, the runtime monitor, and more.
|
| 70 |
</Note>
|
|
|
|
| 28 |
Yet current agent analysis works at the level of a single trace. It offers no structural model of the behavior that links one run to the next.
|
| 29 |
|
| 30 |
<Wide>
|
| 31 |
+
<HtmlEmbed src="tape-to-fsm.html" title="A trace, read symbol by symbol, drives a finite-state machine" desc="Pick a dataset, then scrub the tape (drag or scroll) or let it play. The read-head advances through the agent's activity tape (left) and lights up the current FSM state and the transition it takes (right). A successful run threads to submit; a stuck run loops and never reaches it. These are representative traces; the full set of twelve datasets with their real extracted FSMs is in the live dashboard." />
|
| 32 |
</Wide>
|
| 33 |
|
| 34 |
|
|
|
|
| 66 |
The three largest source datasets are subsampled to a fixed slice: SWE-agent uses 2,000 of the 80,036 available trajectories, Mind2Web 500 of 2,350, and AgentNet 5,000 from the OpenCUA Ubuntu subset. The other nine datasets are used in full.
|
| 67 |
|
| 68 |
<Note variant="info" title="Every case is in the live dashboard">
|
| 69 |
+
Every figure in this article is a fixed snapshot; **every dataset and every case is live** in the [interactive dashboard](https://seongland.com/article/asg/browser), which renders all twelve datasets straight from the experiment outputs — the FSMs, the failure predictor, the runtime monitor, and more.
|
| 70 |
</Note>
|
app/src/content/embeds/system-overview.html
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
<!-- System / data-flow diagram. LEFT->RIGHT: how the machine is BUILT (construction,
|
| 2 |
-
offline): raw traces -> phi abstraction -> prefix tree -> one merge ->
|
| 3 |
RIGHT: how the machine is USED at runtime by four consumers (what each reads from it).
|
| 4 |
No result metrics — this shows data flow and execution flow, not numbers.
|
| 5 |
Self-contained SVG; themed via the article's --asg-* CSS variables (dark-mode safe). -->
|
| 6 |
<div class="asg-sys" id="asg-sys">
|
| 7 |
-
<svg viewBox="0 0 960
|
| 8 |
aria-label="Construction pipeline: agent traces are abstracted by phi into activity sequences, accumulated into a prefix tree, and merged once into a single automaton. At runtime the same machine is read by four consumers: workflow memory, next-step prediction, failure prediction, and runtime monitoring.">
|
| 9 |
|
| 10 |
<defs>
|
|
@@ -15,101 +15,101 @@
|
|
| 15 |
|
| 16 |
<!-- ===================== connectors (behind boxes) ===================== -->
|
| 17 |
<g class="sys-links" fill="none">
|
| 18 |
-
<path class="lnk" d="
|
| 19 |
-
<path class="lnk" d="
|
| 20 |
-
<path class="lnk lnk-key" d="
|
| 21 |
<!-- fan-out from FSM hub to four consumers -->
|
| 22 |
-
<path class="spoke" data-task="0" d="
|
| 23 |
-
<path class="spoke" data-task="1" d="
|
| 24 |
-
<path class="spoke" data-task="2" d="
|
| 25 |
-
<path class="spoke" data-task="3" d="
|
| 26 |
</g>
|
| 27 |
|
| 28 |
<!-- operation labels above the construction arrows (clear of the box band) -->
|
| 29 |
-
<text class="op-label" x="
|
| 30 |
-
<text class="op-label op-key" x="
|
| 31 |
|
| 32 |
<!-- ===================== construction spine ===================== -->
|
| 33 |
|
| 34 |
<!-- agent traces (input data) -->
|
| 35 |
<g class="node node-src" data-stage="src">
|
| 36 |
-
<rect x="14" y="
|
| 37 |
-
<text class="n-title" x="
|
| 38 |
-
<text class="n-sub" x="
|
| 39 |
<g class="chips">
|
| 40 |
-
<rect x="
|
| 41 |
-
<text class="chip-t" x="
|
| 42 |
-
<rect x="
|
| 43 |
-
<text class="chip-t" x="
|
| 44 |
-
<rect x="
|
| 45 |
-
<text class="chip-t" x="
|
| 46 |
-
<rect x="
|
| 47 |
-
<text class="chip-t" x="
|
| 48 |
</g>
|
| 49 |
</g>
|
| 50 |
|
| 51 |
<!-- phi: the one transform (message -> symbol) -->
|
| 52 |
<g class="node node-phi" data-stage="phi">
|
| 53 |
-
<rect x="
|
| 54 |
-
<text class="n-glyph" x="
|
| 55 |
-
<text class="n-sub" x="
|
| 56 |
-
<text class="n-foot" x="
|
| 57 |
</g>
|
| 58 |
|
| 59 |
<!-- prefix tree (intermediate data structure) -->
|
| 60 |
<g class="node node-pta" data-stage="pta">
|
| 61 |
-
<rect x="
|
| 62 |
-
<text class="n-title" x="
|
| 63 |
-
<text class="n-sub" x="
|
| 64 |
-
<text class="n-foot" x="
|
| 65 |
</g>
|
| 66 |
|
| 67 |
<!-- FSM hub (the artifact every consumer reads) -->
|
| 68 |
<g class="node node-fsm" data-stage="fsm">
|
| 69 |
-
<rect x="470" y="
|
| 70 |
-
<text class="hub-eyebrow" x="
|
| 71 |
-
<text class="hub-title" x="
|
| 72 |
<g class="hub-mini">
|
| 73 |
-
<circle cx="
|
| 74 |
-
<circle cx="
|
| 75 |
-
<circle cx="
|
| 76 |
-
<path d="
|
| 77 |
-
<path d="
|
| 78 |
-
<path d="
|
| 79 |
</g>
|
| 80 |
-
<text class="hub-foot" x="
|
| 81 |
-
<text class="hub-foot" x="
|
| 82 |
</g>
|
| 83 |
|
| 84 |
<!-- ===================== four runtime consumers ===================== -->
|
| 85 |
<g class="task" data-task="0">
|
| 86 |
-
<rect x="
|
| 87 |
-
<text class="t-title" x="
|
| 88 |
-
<text class="t-sub" x="
|
| 89 |
-
<text class="t-sub" x="
|
| 90 |
</g>
|
| 91 |
<g class="task" data-task="1">
|
| 92 |
-
<rect x="
|
| 93 |
-
<text class="t-title" x="
|
| 94 |
-
<text class="t-sub" x="
|
| 95 |
-
<text class="t-sub" x="
|
| 96 |
</g>
|
| 97 |
<g class="task" data-task="2">
|
| 98 |
-
<rect x="
|
| 99 |
-
<text class="t-title" x="
|
| 100 |
-
<text class="t-sub" x="
|
| 101 |
-
<text class="t-sub" x="
|
| 102 |
</g>
|
| 103 |
<g class="task" data-task="3">
|
| 104 |
-
<rect x="
|
| 105 |
-
<text class="t-title" x="
|
| 106 |
-
<text class="t-sub" x="
|
| 107 |
-
<text class="t-sub" x="
|
| 108 |
</g>
|
| 109 |
|
| 110 |
<!-- phase captions -->
|
| 111 |
-
<text class="phase" x="
|
| 112 |
-
<text class="phase" x="
|
| 113 |
</svg>
|
| 114 |
</div>
|
| 115 |
|
|
@@ -132,22 +132,22 @@
|
|
| 132 |
|
| 133 |
/* text */
|
| 134 |
.asg-sys text { font-family: inherit; }
|
| 135 |
-
.asg-sys .n-title { font-size:
|
| 136 |
-
.asg-sys .n-sub { font-size:
|
| 137 |
-
.asg-sys .n-foot { font-size:
|
| 138 |
-
.asg-sys .n-glyph { font-size:
|
| 139 |
|
| 140 |
.asg-sys .chip { fill: color-mix(in srgb, var(--asg-ours, #3d5a80) 12%, transparent); stroke: none; }
|
| 141 |
-
.asg-sys .chip-t { font-size:
|
| 142 |
|
| 143 |
/* operation labels on construction arrows */
|
| 144 |
-
.asg-sys .op-label { font-size:
|
| 145 |
.asg-sys .op-key { fill: var(--asg-ours, #3d5a80); font-weight: 600; }
|
| 146 |
|
| 147 |
/* FSM hub */
|
| 148 |
-
.asg-sys .hub-eyebrow { font-size:
|
| 149 |
-
.asg-sys .hub-title { font-size:
|
| 150 |
-
.asg-sys .hub-foot { font-size:
|
| 151 |
.asg-sys .hub-mini circle { fill: var(--page-bg, #fff); stroke: var(--asg-ours, #3d5a80); stroke-width: 1.4; }
|
| 152 |
.asg-sys .hub-mini-accept { fill: color-mix(in srgb, var(--asg-ours, #3d5a80) 22%, var(--page-bg, #fff)) !important; }
|
| 153 |
.asg-sys .hub-edge { stroke: var(--asg-ours, #3d5a80); stroke-width: 1.2; fill: none; opacity: .7; }
|
|
@@ -169,11 +169,11 @@
|
|
| 169 |
stroke-width: 1.2;
|
| 170 |
transition: stroke .2s, fill .2s;
|
| 171 |
}
|
| 172 |
-
.asg-sys .t-title { font-size:
|
| 173 |
-
.asg-sys .t-sub { font-size:
|
| 174 |
|
| 175 |
/* phase captions */
|
| 176 |
-
.asg-sys .phase { font-size:
|
| 177 |
|
| 178 |
/* hover: light up a spoke + its consumer card */
|
| 179 |
.asg-sys .task.is-hot rect { stroke: var(--asg-ours, #3d5a80); fill: color-mix(in srgb, var(--asg-ours, #3d5a80) 7%, var(--page-bg, #fff)); }
|
|
|
|
| 1 |
<!-- System / data-flow diagram. LEFT->RIGHT: how the machine is BUILT (construction,
|
| 2 |
+
offline): raw traces -> phi abstraction -> prefix tree -> one merge -> automaton.
|
| 3 |
RIGHT: how the machine is USED at runtime by four consumers (what each reads from it).
|
| 4 |
No result metrics — this shows data flow and execution flow, not numbers.
|
| 5 |
Self-contained SVG; themed via the article's --asg-* CSS variables (dark-mode safe). -->
|
| 6 |
<div class="asg-sys" id="asg-sys">
|
| 7 |
+
<svg viewBox="0 0 960 460" role="img"
|
| 8 |
aria-label="Construction pipeline: agent traces are abstracted by phi into activity sequences, accumulated into a prefix tree, and merged once into a single automaton. At runtime the same machine is read by four consumers: workflow memory, next-step prediction, failure prediction, and runtime monitoring.">
|
| 9 |
|
| 10 |
<defs>
|
|
|
|
| 15 |
|
| 16 |
<!-- ===================== connectors (behind boxes) ===================== -->
|
| 17 |
<g class="sys-links" fill="none">
|
| 18 |
+
<path class="lnk" d="M150 226 H172" marker-end="url(#sys-arrow)"/>
|
| 19 |
+
<path class="lnk" d="M276 226 H300" marker-end="url(#sys-arrow)"/>
|
| 20 |
+
<path class="lnk lnk-key" d="M416 226 H466" marker-end="url(#sys-arrow)"/>
|
| 21 |
<!-- fan-out from FSM hub to four consumers -->
|
| 22 |
+
<path class="spoke" data-task="0" d="M622 200 C648 200 642 54 664 54"/>
|
| 23 |
+
<path class="spoke" data-task="1" d="M622 216 C648 216 642 166 664 166"/>
|
| 24 |
+
<path class="spoke" data-task="2" d="M622 236 C648 236 642 278 664 278"/>
|
| 25 |
+
<path class="spoke" data-task="3" d="M622 252 C648 252 642 390 664 390"/>
|
| 26 |
</g>
|
| 27 |
|
| 28 |
<!-- operation labels above the construction arrows (clear of the box band) -->
|
| 29 |
+
<text class="op-label" x="288" y="181" text-anchor="middle">build trie</text>
|
| 30 |
+
<text class="op-label op-key" x="430" y="181" text-anchor="middle">merge states</text>
|
| 31 |
|
| 32 |
<!-- ===================== construction spine ===================== -->
|
| 33 |
|
| 34 |
<!-- agent traces (input data) -->
|
| 35 |
<g class="node node-src" data-stage="src">
|
| 36 |
+
<rect x="14" y="170" width="136" height="112" rx="10"/>
|
| 37 |
+
<text class="n-title" x="82" y="192" text-anchor="middle">Agent traces</text>
|
| 38 |
+
<text class="n-sub" x="82" y="208" text-anchor="middle">messages · tool calls</text>
|
| 39 |
<g class="chips">
|
| 40 |
+
<rect x="28" y="220" width="50" height="17" rx="4" class="chip"/>
|
| 41 |
+
<text class="chip-t" x="53" y="232" text-anchor="middle">coding</text>
|
| 42 |
+
<rect x="86" y="220" width="50" height="17" rx="4" class="chip"/>
|
| 43 |
+
<text class="chip-t" x="111" y="232" text-anchor="middle">web</text>
|
| 44 |
+
<rect x="28" y="241" width="50" height="17" rx="4" class="chip"/>
|
| 45 |
+
<text class="chip-t" x="53" y="253" text-anchor="middle">GUI</text>
|
| 46 |
+
<rect x="86" y="241" width="50" height="17" rx="4" class="chip"/>
|
| 47 |
+
<text class="chip-t" x="111" y="253" text-anchor="middle">telecom</text>
|
| 48 |
</g>
|
| 49 |
</g>
|
| 50 |
|
| 51 |
<!-- phi: the one transform (message -> symbol) -->
|
| 52 |
<g class="node node-phi" data-stage="phi">
|
| 53 |
+
<rect x="174" y="194" width="102" height="64" rx="10"/>
|
| 54 |
+
<text class="n-glyph" x="225" y="220" text-anchor="middle">φ</text>
|
| 55 |
+
<text class="n-sub" x="225" y="238" text-anchor="middle">message → symbol</text>
|
| 56 |
+
<text class="n-foot" x="225" y="250" text-anchor="middle">deterministic</text>
|
| 57 |
</g>
|
| 58 |
|
| 59 |
<!-- prefix tree (intermediate data structure) -->
|
| 60 |
<g class="node node-pta" data-stage="pta">
|
| 61 |
+
<rect x="302" y="194" width="114" height="64" rx="10"/>
|
| 62 |
+
<text class="n-title" x="359" y="218" text-anchor="middle">Prefix tree</text>
|
| 63 |
+
<text class="n-sub" x="359" y="234" text-anchor="middle">PTA</text>
|
| 64 |
+
<text class="n-foot" x="359" y="248" text-anchor="middle">one branch per trace</text>
|
| 65 |
</g>
|
| 66 |
|
| 67 |
<!-- FSM hub (the artifact every consumer reads) -->
|
| 68 |
<g class="node node-fsm" data-stage="fsm">
|
| 69 |
+
<rect x="470" y="158" width="152" height="136" rx="14"/>
|
| 70 |
+
<text class="hub-eyebrow" x="546" y="182" text-anchor="middle">ONE PER AGENT</text>
|
| 71 |
+
<text class="hub-title" x="546" y="206" text-anchor="middle">Automaton</text>
|
| 72 |
<g class="hub-mini">
|
| 73 |
+
<circle cx="508" cy="232" r="8"/>
|
| 74 |
+
<circle cx="546" cy="248" r="8"/>
|
| 75 |
+
<circle cx="584" cy="232" r="8" class="hub-mini-accept"/>
|
| 76 |
+
<path d="M515 234 L539 245" class="hub-edge"/>
|
| 77 |
+
<path d="M553 245 L577 234" class="hub-edge"/>
|
| 78 |
+
<path d="M516 229 C530 218 562 218 576 229" class="hub-edge"/>
|
| 79 |
</g>
|
| 80 |
+
<text class="hub-foot" x="546" y="274" text-anchor="middle">states +</text>
|
| 81 |
+
<text class="hub-foot" x="546" y="286" text-anchor="middle">transition probabilities</text>
|
| 82 |
</g>
|
| 83 |
|
| 84 |
<!-- ===================== four runtime consumers ===================== -->
|
| 85 |
<g class="task" data-task="0">
|
| 86 |
+
<rect x="664" y="8" width="284" height="92" rx="11"/>
|
| 87 |
+
<text class="t-title" x="684" y="40">Workflow memory</text>
|
| 88 |
+
<text class="t-sub" x="684" y="62">state → likely next actions,</text>
|
| 89 |
+
<text class="t-sub" x="684" y="80">injected into the agent's prompt</text>
|
| 90 |
</g>
|
| 91 |
<g class="task" data-task="1">
|
| 92 |
+
<rect x="664" y="120" width="284" height="92" rx="11"/>
|
| 93 |
+
<text class="t-title" x="684" y="152">Next-step prediction</text>
|
| 94 |
+
<text class="t-sub" x="684" y="174">reads P(next action | current</text>
|
| 95 |
+
<text class="t-sub" x="684" y="192">state) off the machine</text>
|
| 96 |
</g>
|
| 97 |
<g class="task" data-task="2">
|
| 98 |
+
<rect x="664" y="232" width="284" height="92" rx="11"/>
|
| 99 |
+
<text class="t-title" x="684" y="264">Failure prediction</text>
|
| 100 |
+
<text class="t-sub" x="684" y="286">replay a run → per-state</text>
|
| 101 |
+
<text class="t-sub" x="684" y="304">features → classifier</text>
|
| 102 |
</g>
|
| 103 |
<g class="task" data-task="3">
|
| 104 |
+
<rect x="664" y="344" width="284" height="92" rx="11"/>
|
| 105 |
+
<text class="t-title" x="684" y="376">Runtime monitor</text>
|
| 106 |
+
<text class="t-sub" x="684" y="398">online conformance check,</text>
|
| 107 |
+
<text class="t-sub" x="684" y="416">flags drift mid-run</text>
|
| 108 |
</g>
|
| 109 |
|
| 110 |
<!-- phase captions -->
|
| 111 |
+
<text class="phase" x="300" y="312" text-anchor="middle">CONSTRUCTION · built once, offline</text>
|
| 112 |
+
<text class="phase" x="806" y="452" text-anchor="middle">USED AT RUNTIME · per execution</text>
|
| 113 |
</svg>
|
| 114 |
</div>
|
| 115 |
|
|
|
|
| 132 |
|
| 133 |
/* text */
|
| 134 |
.asg-sys text { font-family: inherit; }
|
| 135 |
+
.asg-sys .n-title { font-size: 13px; font-weight: 650; fill: var(--text-color, #1a1a2e); }
|
| 136 |
+
.asg-sys .n-sub { font-size: 10px; fill: var(--muted-color, rgba(0,0,0,0.55)); }
|
| 137 |
+
.asg-sys .n-foot { font-size: 9px; fill: var(--muted-color, rgba(0,0,0,0.5)); font-family: var(--font-mono, ui-monospace, monospace); }
|
| 138 |
+
.asg-sys .n-glyph { font-size: 23px; font-style: italic; font-weight: 600; fill: var(--asg-ours, #3d5a80); }
|
| 139 |
|
| 140 |
.asg-sys .chip { fill: color-mix(in srgb, var(--asg-ours, #3d5a80) 12%, transparent); stroke: none; }
|
| 141 |
+
.asg-sys .chip-t { font-size: 9px; fill: var(--text-color, #1a1a2e); font-family: var(--font-mono, ui-monospace, monospace); }
|
| 142 |
|
| 143 |
/* operation labels on construction arrows */
|
| 144 |
+
.asg-sys .op-label { font-size: 9px; fill: var(--muted-color, rgba(0,0,0,0.6)); font-family: var(--font-mono, ui-monospace, monospace); letter-spacing: .3px; }
|
| 145 |
.asg-sys .op-key { fill: var(--asg-ours, #3d5a80); font-weight: 600; }
|
| 146 |
|
| 147 |
/* FSM hub */
|
| 148 |
+
.asg-sys .hub-eyebrow { font-size: 9px; letter-spacing: 1.6px; fill: var(--asg-ours, #3d5a80); font-weight: 600; }
|
| 149 |
+
.asg-sys .hub-title { font-size: 16px; font-weight: 700; fill: var(--text-color, #1a1a2e); }
|
| 150 |
+
.asg-sys .hub-foot { font-size: 9px; fill: var(--muted-color, rgba(0,0,0,0.6)); font-family: var(--font-mono, ui-monospace, monospace); }
|
| 151 |
.asg-sys .hub-mini circle { fill: var(--page-bg, #fff); stroke: var(--asg-ours, #3d5a80); stroke-width: 1.4; }
|
| 152 |
.asg-sys .hub-mini-accept { fill: color-mix(in srgb, var(--asg-ours, #3d5a80) 22%, var(--page-bg, #fff)) !important; }
|
| 153 |
.asg-sys .hub-edge { stroke: var(--asg-ours, #3d5a80); stroke-width: 1.2; fill: none; opacity: .7; }
|
|
|
|
| 169 |
stroke-width: 1.2;
|
| 170 |
transition: stroke .2s, fill .2s;
|
| 171 |
}
|
| 172 |
+
.asg-sys .t-title { font-size: 16px; font-weight: 640; fill: var(--text-color, #1a1a2e); }
|
| 173 |
+
.asg-sys .t-sub { font-size: 13px; fill: var(--muted-color, rgba(0,0,0,0.6)); }
|
| 174 |
|
| 175 |
/* phase captions */
|
| 176 |
+
.asg-sys .phase { font-size: 8.5px; letter-spacing: 1.2px; fill: var(--muted-color, rgba(0,0,0,0.45)); font-family: var(--font-mono, ui-monospace, monospace); }
|
| 177 |
|
| 178 |
/* hover: light up a spoke + its consumer card */
|
| 179 |
.asg-sys .task.is-hot rect { stroke: var(--asg-ours, #3d5a80); fill: color-mix(in srgb, var(--asg-ours, #3d5a80) 7%, var(--page-bg, #fff)); }
|
app/src/pages/index.astro
CHANGED
|
@@ -157,7 +157,8 @@ const bibtex = `@inproceedings{cho${year ?? 2026}automata,
|
|
| 157 |
author={${authorsBib}},
|
| 158 |
booktitle={${venue}},
|
| 159 |
year={${year ?? 2026}},
|
| 160 |
-
url={${openreviewUrl}}
|
|
|
|
| 161 |
}`;
|
| 162 |
const envCollapse = false;
|
| 163 |
const tableOfContentAutoCollapse = Boolean(
|
|
@@ -264,6 +265,8 @@ const licence =
|
|
| 264 |
affiliation={articleFM?.affiliation}
|
| 265 |
published={articleFM?.published}
|
| 266 |
doi={doi}
|
|
|
|
|
|
|
| 267 |
pdfProOnly={articleFM?.pdfProOnly}
|
| 268 |
/>
|
| 269 |
|
|
|
|
| 157 |
author={${authorsBib}},
|
| 158 |
booktitle={${venue}},
|
| 159 |
year={${year ?? 2026}},
|
| 160 |
+
url={${openreviewUrl}},
|
| 161 |
+
howpublished={\\url{https://seongland.com/article/asg}}
|
| 162 |
}`;
|
| 163 |
const envCollapse = false;
|
| 164 |
const tableOfContentAutoCollapse = Boolean(
|
|
|
|
| 265 |
affiliation={articleFM?.affiliation}
|
| 266 |
published={articleFM?.published}
|
| 267 |
doi={doi}
|
| 268 |
+
paperUrl={openreviewUrl}
|
| 269 |
+
browserUrl="https://seongland.com/article/asg/browser"
|
| 270 |
pdfProOnly={articleFM?.pdfProOnly}
|
| 271 |
/>
|
| 272 |
|