skill v4.0.0-alpha.8: four visitor modes replace the brand/product bifurcation

Field report: impeccable SaaS-ified a developer docs page; the Opus
galleries showed the same on an album page. Root cause: two registers
force every surface into persuade-or-operate grammar. The register
section now names the visitor's mode first (Persuade / Operate / Read /
Experience) with mode-borrowing called out as the canonical failure,
and PRODUCT.md's register field maps as family (brand = Persuade +
Experience, product = Operate + Read) for compatibility. Read mode:
comprehension deliverable, navigable structure, chrome out of the way.
Experience mode: the artifact leads at every screen size.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Paul Bakaus
2026-07-11 17:06:14 -07:00
co-authored by Claude Fable 5
parent 2e71facb59
commit bf2dd7ec13
25 changed files with 1668 additions and 58 deletions
+114
View File
@@ -0,0 +1,114 @@
export const harnessPaths = [
{
name: 'Foreground long-poll',
harness: 'Codex desktop · observed',
pickup: 'Immediate when the turn is blocked',
tradeoff: 'Reliable, but Live occupies the main agent and inherits its model speed.',
status: 'Baseline',
statusTone: 'ready',
},
{
name: 'Background terminal + watcher',
harness: 'Codex app-server · available primitives',
pickup: 'Not yet measured end-to-end',
tradeoff: 'The app-server exposes output notifications and fs.watch, but a watcher still has to wake model work quickly.',
status: 'Benchmark next',
statusTone: 'measure',
source: 'https://learn.chatgpt.com/docs/app-server#api-overview',
},
{
name: 'Warm variant producer',
harness: 'Codex custom agent',
pickup: 'Spawn/resume cost unknown',
tradeoff: 'Can pin a faster model and lower reasoning, but fresh context and handoff can erase the gain unless the agent stays warm.',
status: 'Prototype',
statusTone: 'prototype',
source: 'https://learn.chatgpt.com/docs/agent-configuration/subagents',
},
{
name: 'Background variant producer',
harness: 'Claude Code subagent',
pickup: 'Supported; measure per version',
tradeoff: 'Model, effort, background execution, and resume are configurable. Preserve the current main-thread path as fallback.',
status: 'Cross-harness control',
statusTone: 'control',
source: 'https://code.claude.com/docs/en/sub-agents',
},
];
export const liveExperiments = [
{
rank: 1,
title: 'Dispatch first, capture second',
evidence: 'The plain path spends 828 ms before the generate POST leaves the browser.',
move: 'For unannotated picks, post the event immediately and run shader capture in parallel. Keep annotated capture on the blocking path until the protocol can attach evidence later.',
expected: 'Removes up to 90% of the measured model-free floor on the common path.',
confidence: 'Measured',
},
{
rank: 2,
title: 'Reveal variants progressively',
evidence: 'First and all variants arrive together today; the measured delivery gap is only the observer settling time.',
move: 'Give each variant its own ready event or preview file. Reveal variant 1 as soon as it validates while the remaining variants continue.',
expected: 'Large perceived win whenever generation is the dominant stage.',
confidence: 'Protocol change',
},
{
rank: 3,
title: 'Keep a harness-native producer warm',
evidence: 'Codex and Claude can assign a different model to a custom subagent; both support continuing agent state.',
move: 'Resume one narrow Live producer with a compact contract, low reasoning, and source-write tools only. Quality-gate its output before preview.',
expected: 'Reduces model latency without forcing the user to change the main conversation model.',
confidence: 'Needs spawn/resume benchmark',
},
{
rank: 4,
title: 'Move context work into the selection dwell',
evidence: 'The existing prefetch event was disabled because quick Go clicks paid an extra harness round trip.',
move: 'Debounce selection, then resolve the source file, style mode, token summary, and identity lock locally. Cancel or reuse the result on Go without queueing a model turn.',
expected: 'Shortens scaffold and prompt preparation while keeping quick clicks cheap.',
confidence: 'Low-risk prototype',
},
{
rank: 5,
title: 'Generate knobs after pixels',
evidence: 'Parameter manifests are authored in the same response as every variant even though the first job is visual comparison.',
move: 'Render validated variants first. Infer coarse CSS knobs locally or ask the producer for parameters only for the visible/selected variant.',
expected: 'Cuts output tokens and lets the first useful preview land sooner.',
confidence: 'Quality experiment',
},
{
rank: 6,
title: 'Parallelize variant ideas, centralize writes',
evidence: 'Modern harnesses can run several specialized agents concurrently, but shared-file edits create coordination risk.',
move: 'Have workers return one structured variant each; one coordinator validates and performs the only source write. Stream the first valid result.',
expected: 'Lower time to first option and stronger diversity at higher token cost.',
confidence: 'Expensive experiment',
},
{
rank: 7,
title: 'Trim and cache the producer contract',
evidence: 'The full Live reference is large and stable; only a small slice is needed for one generate event.',
move: 'Compile a provider-specific generation contract, keep the stable prefix cacheable, and attach only the action reference plus picked-element context.',
expected: 'Lower prefill latency and cost, especially for fresh subagents.',
confidence: 'Harness-specific',
},
{
rank: 8,
title: 'Wake on the journal, not terminal stdout',
evidence: 'Codex app-server exposes fs.watch and process output notifications, while this desktop probe still required an explicit terminal read.',
move: 'Benchmark a plugin/app-server bridge that watches the durable Live journal and starts or steers a dedicated turn directly.',
expected: 'Frees the main turn if watcher-to-turn startup beats foreground polling.',
confidence: 'Architectural bet',
},
];
export const currentHarnessProbe = {
testedAt: '2026-07-11',
surface: 'Codex desktop unified exec',
delayedOutputMs: 3000,
processExitMs: 4000,
surfacedAutomatically: false,
result: 'The sentinel appeared only after an explicit session read; no app terminal was attached.',
};
+378
View File
@@ -0,0 +1,378 @@
{
"schemaVersion": 1,
"generatedAt": "2026-07-11T23:46:48.581Z",
"reports": [
{
"schemaVersion": 1,
"generatedAt": "2026-07-11T23:46:32.205Z",
"benchmark": {
"fixture": "vite8-react-plain",
"agent": "fake",
"provider": "deterministic",
"model": null,
"scenario": "plain",
"variants": 3,
"delivery": "atomic"
},
"setup": {
"dependencies": 750.27,
"liveServer": 241.02,
"injection": 25.24,
"devServer": 521.01,
"pageLoad": 101.88,
"handshake": 263.84
},
"summary": {
"count": 7,
"metrics": {
"browserPreparationMs": {
"median": 828.36,
"p95": 834.77,
"min": 826.16,
"max": 836.91
},
"serverPickupMs": {
"median": 0.8,
"p95": 2.57,
"min": 0.58,
"max": 3.25
},
"goToAgentMs": {
"median": 829.06,
"p95": 837.29,
"min": 826.75,
"max": 840.16
},
"scaffoldMs": {
"median": 40.99,
"p95": 45.12,
"min": 40.21,
"max": 46.46
},
"generationMs": {
"median": 0.04,
"p95": 0.16,
"min": 0.03,
"max": 0.19
},
"writeMs": {
"median": 0.38,
"p95": 0.7,
"min": 0.33,
"max": 0.75
},
"writeToFirstVariantMs": {
"median": 46.82,
"p95": 67.96,
"min": 35.43,
"max": 74.14
},
"replyMs": {
"median": 2.24,
"p95": 3.3,
"min": 1.23,
"max": 3.69
},
"goToFirstVariantMs": {
"median": 916.31,
"p95": 950.62,
"min": 906.84,
"max": 961.99
},
"goToAllVariantsMs": {
"median": 917.33,
"p95": 954.93,
"min": 908.06,
"max": 966
},
"deliveryGapMs": {
"median": 1.28,
"p95": 4.71,
"min": 1.02,
"max": 5.01
},
"impeccableOverheadMs": {
"median": 916.28,
"p95": 950.47,
"min": 906.76,
"max": 961.8
}
}
},
"runs": [
{
"iteration": 1,
"scenario": "plain",
"eventId": "6a9e48dd",
"browserPreparationMs": 836.91,
"serverPickupMs": 3.25,
"goToAgentMs": 840.16,
"scaffoldMs": 46.46,
"generationMs": 0.19,
"writeMs": 0.75,
"writeToFirstVariantMs": 74.14,
"replyMs": 3.69,
"goToFirstVariantMs": 961.99,
"goToAllVariantsMs": 966,
"deliveryGapMs": 4.01,
"impeccableOverheadMs": 961.8
},
{
"iteration": 2,
"scenario": "plain",
"eventId": "79334eff",
"browserPreparationMs": 829.79,
"serverPickupMs": 0.8,
"goToAgentMs": 830.59,
"scaffoldMs": 40.29,
"generationMs": 0.08,
"writeMs": 0.36,
"writeToFirstVariantMs": 35.43,
"replyMs": 1.23,
"goToFirstVariantMs": 906.84,
"goToAllVariantsMs": 908.06,
"deliveryGapMs": 1.23,
"impeccableOverheadMs": 906.76
},
{
"iteration": 3,
"scenario": "plain",
"eventId": "e90cfb27",
"browserPreparationMs": 829.35,
"serverPickupMs": 0.99,
"goToAgentMs": 830.34,
"scaffoldMs": 40.21,
"generationMs": 0.03,
"writeMs": 0.58,
"writeToFirstVariantMs": 42.74,
"replyMs": 2.38,
"goToFirstVariantMs": 913.95,
"goToAllVariantsMs": 915.28,
"deliveryGapMs": 1.33,
"impeccableOverheadMs": 913.92
},
{
"iteration": 4,
"scenario": "plain",
"eventId": "3fef871d",
"browserPreparationMs": 826.16,
"serverPickupMs": 0.58,
"goToAgentMs": 826.75,
"scaffoldMs": 41.99,
"generationMs": 0.04,
"writeMs": 0.4,
"writeToFirstVariantMs": 44.86,
"replyMs": 2.05,
"goToFirstVariantMs": 914.08,
"goToAllVariantsMs": 915.21,
"deliveryGapMs": 1.13,
"impeccableOverheadMs": 914.04
},
{
"iteration": 5,
"scenario": "plain",
"eventId": "d67ced1d",
"browserPreparationMs": 828.36,
"serverPickupMs": 0.7,
"goToAgentMs": 829.06,
"scaffoldMs": 41.55,
"generationMs": 0.04,
"writeMs": 0.38,
"writeToFirstVariantMs": 53.03,
"replyMs": 2.24,
"goToFirstVariantMs": 924.09,
"goToAllVariantsMs": 929.1,
"deliveryGapMs": 5.01,
"impeccableOverheadMs": 924.05
},
{
"iteration": 6,
"scenario": "plain",
"eventId": "8ec42ed8",
"browserPreparationMs": 827.68,
"serverPickupMs": 0.86,
"goToAgentMs": 828.54,
"scaffoldMs": 40.55,
"generationMs": 0.03,
"writeMs": 0.34,
"writeToFirstVariantMs": 46.82,
"replyMs": 2.3,
"goToFirstVariantMs": 916.31,
"goToAllVariantsMs": 917.33,
"deliveryGapMs": 1.02,
"impeccableOverheadMs": 916.28
},
{
"iteration": 7,
"scenario": "plain",
"eventId": "545113b0",
"browserPreparationMs": 826.45,
"serverPickupMs": 0.62,
"goToAgentMs": 827.07,
"scaffoldMs": 40.99,
"generationMs": 0.03,
"writeMs": 0.33,
"writeToFirstVariantMs": 53.55,
"replyMs": 2.15,
"goToFirstVariantMs": 921.99,
"goToAllVariantsMs": 923.27,
"deliveryGapMs": 1.28,
"impeccableOverheadMs": 921.96
}
],
"harnessProbe": null
},
{
"schemaVersion": 1,
"generatedAt": "2026-07-11T23:46:48.580Z",
"benchmark": {
"fixture": "vite8-react-plain",
"agent": "fake",
"provider": "deterministic",
"model": null,
"scenario": "annotated",
"variants": 3,
"delivery": "atomic"
},
"setup": {
"dependencies": 766.31,
"liveServer": 241.6,
"injection": 24.86,
"devServer": 521.99,
"pageLoad": 100.94,
"handshake": 264.71
},
"summary": {
"count": 3,
"metrics": {
"browserPreparationMs": {
"median": 334.98,
"p95": 359.15,
"min": 330.18,
"max": 361.84
},
"serverPickupMs": {
"median": 0.77,
"p95": 3.12,
"min": 0.42,
"max": 3.38
},
"goToAgentMs": {
"median": 335.4,
"p95": 359.89,
"min": 333.55,
"max": 362.61
},
"scaffoldMs": {
"median": 41.47,
"p95": 41.93,
"min": 41.03,
"max": 41.98
},
"generationMs": {
"median": 0.09,
"p95": 0.16,
"min": 0.04,
"max": 0.17
},
"writeMs": {
"median": 0.42,
"p95": 0.61,
"min": 0.37,
"max": 0.63
},
"writeToFirstVariantMs": {
"median": 53.51,
"p95": 104.9,
"min": 26.56,
"max": 110.61
},
"replyMs": {
"median": 2.52,
"p95": 3.22,
"min": 2.08,
"max": 3.3
},
"goToFirstVariantMs": {
"median": 430.97,
"p95": 481.59,
"min": 430.64,
"max": 487.21
},
"goToAllVariantsMs": {
"median": 432.3,
"p95": 485.66,
"min": 431.85,
"max": 491.59
},
"deliveryGapMs": {
"median": 1.32,
"p95": 4.08,
"min": 1.21,
"max": 4.39
},
"impeccableOverheadMs": {
"median": 430.88,
"p95": 481.42,
"min": 430.6,
"max": 487.04
}
}
},
"runs": [
{
"iteration": 1,
"scenario": "annotated",
"eventId": "e767f0ce",
"browserPreparationMs": 330.18,
"serverPickupMs": 3.38,
"goToAgentMs": 333.55,
"scaffoldMs": 41.98,
"generationMs": 0.17,
"writeMs": 0.63,
"writeToFirstVariantMs": 110.61,
"replyMs": 3.3,
"goToFirstVariantMs": 487.21,
"goToAllVariantsMs": 491.59,
"deliveryGapMs": 4.39,
"impeccableOverheadMs": 487.04
},
{
"iteration": 2,
"scenario": "annotated",
"eventId": "5aca9e96",
"browserPreparationMs": 334.98,
"serverPickupMs": 0.42,
"goToAgentMs": 335.4,
"scaffoldMs": 41.47,
"generationMs": 0.09,
"writeMs": 0.42,
"writeToFirstVariantMs": 53.51,
"replyMs": 2.08,
"goToFirstVariantMs": 430.97,
"goToAllVariantsMs": 432.3,
"deliveryGapMs": 1.32,
"impeccableOverheadMs": 430.88
},
{
"iteration": 3,
"scenario": "annotated",
"eventId": "72cfa915",
"browserPreparationMs": 361.84,
"serverPickupMs": 0.77,
"goToAgentMs": 362.61,
"scaffoldMs": 41.03,
"generationMs": 0.04,
"writeMs": 0.37,
"writeToFirstVariantMs": 26.56,
"replyMs": 2.52,
"goToFirstVariantMs": 430.64,
"goToAllVariantsMs": 431.85,
"deliveryGapMs": 1.21,
"impeccableOverheadMs": 430.6
}
],
"harnessProbe": null
}
]
}
+251
View File
@@ -0,0 +1,251 @@
---
import Base from '../../layouts/Base.astro';
import benchmarkData from '../../data/live-performance.json';
import { currentHarnessProbe, harnessPaths, liveExperiments } from '../../data/live-harnesses';
import '../../styles/sub-pages.css';
import '../../styles/live-performance.css';
const reports = 'reports' in benchmarkData ? benchmarkData.reports : [benchmarkData];
const plain = reports.find(report => report.benchmark.scenario === 'plain' && report.benchmark.agent === 'fake') || reports[0];
const annotated = reports.find(report => report.benchmark.scenario === 'annotated' && report.benchmark.agent === 'fake');
const metric = (name: string) => plain.summary.metrics[name]?.median || 0;
const protocolFloor = metric('goToFirstVariantMs');
const browserPreparation = metric('browserPreparationMs');
const serverPickup = metric('serverPickupMs');
const scaffold = metric('scaffoldMs');
const writeAndRender = metric('writeMs') + metric('writeToFirstVariantMs');
const overlapFloor = Math.max(0, protocolFloor - browserPreparation);
const preparationShare = protocolFloor ? (browserPreparation / protocolFloor) * 100 : 0;
const annotatedFloor = annotated?.summary.metrics.goToFirstVariantMs?.median || 0;
const maxScenarioFloor = Math.max(protocolFloor, annotatedFloor, 1);
const generatedDate = new Date(plain.generatedAt).toLocaleDateString('en-US', {
month: 'short', day: 'numeric', year: 'numeric',
});
const displayMs = (value: number) => {
if (value >= 1000) return `${(value / 1000).toFixed(value >= 10_000 ? 1 : 2)} s`;
if (value < 1) return '<1 ms';
return `${Math.round(value)} ms`;
};
const stageData = [
{ name: 'Browser preparation', value: browserPreparation, tone: 'capture' },
{ name: 'Server pickup', value: serverPickup, tone: 'pickup' },
{ name: 'Source scaffold', value: scaffold, tone: 'scaffold' },
{ name: 'Write + browser settle', value: writeAndRender, tone: 'render' },
];
---
<Base
title="Live Latency Lab | Impeccable"
description="Measured latency for Impeccable Live, from Go to the first usable variant."
bodyClass="sub-page live-performance-page"
mainClass="live-performance-main"
noIndex
hideHeader
hideFooter
>
<header class="live-lab-header">
<a class="live-lab-brand ks-brand" href="/live" aria-label="Back to Live Mode">
<span class="ks-mark" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M5 2.5 L13.5 2.5 L5.5 21.5 L5 21.5 Q2.5 21.5 2.5 19 L2.5 5 Q2.5 2.5 5 2.5 Z"></path>
<path d="M16.5 2.5 L19 2.5 Q21.5 2.5 21.5 5 L21.5 19 Q21.5 21.5 19 21.5 L8.5 21.5 Z"></path>
</svg>
</span>
<span class="ks-wordmark">Impeccable</span>
</a>
<div>
<strong>Live Latency Lab</strong>
<span>Development benchmark</span>
</div>
</header>
<article
class="live-performance"
data-live-performance
data-protocol-floor={protocolFloor}
data-overlap-floor={overlapFloor}
>
<header class="live-performance-hero ks-section">
<p class="live-performance-kicker">Live latency lab · protocol baseline</p>
<h1>The wait starts<br /><span>before the model.</span></h1>
<p class="live-performance-lede">
With generation removed, Go still takes {displayMs(protocolFloor)} to show the first variant.
{' '}{preparationShare.toFixed(1)}% of that time passes before the generate event leaves the browser.
</p>
<div class="live-performance-meta" aria-label="Benchmark context">
<span>{plain.summary.count} warm runs</span>
<span>{plain.benchmark.fixture}</span>
<span>Local Chromium</span>
<span>{generatedDate}</span>
</div>
</header>
<section class="live-performance-section ks-section" aria-labelledby="critical-path-title">
<div class="live-performance-section-head">
<div>
<p class="live-performance-label">Click → first usable variant</p>
<h2 id="critical-path-title">The measured critical path</h2>
</div>
<p>Median values. Deterministic generation isolates Impeccables own floor.</p>
</div>
<div class="latency-tape">
<svg viewBox="0 0 1000 214" role="img" aria-labelledby="latency-title latency-desc">
<title id="latency-title">Impeccable Live model-free latency timeline</title>
<desc id="latency-desc">A 916 millisecond timeline dominated by 828 milliseconds of browser preparation before the generate request.</desc>
<line class="latency-axis" x1="24" y1="112" x2="976" y2="112"></line>
<g class="latency-ticks" aria-hidden="true">
<line x1="24" y1="102" x2="24" y2="124"></line>
<line x1="284" y1="106" x2="284" y2="120"></line>
<line x1="544" y1="106" x2="544" y2="120"></line>
<line x1="804" y1="106" x2="804" y2="120"></line>
<line x1="976" y1="102" x2="976" y2="124"></line>
</g>
<rect class="latency-segment is-capture" x="24" y="88" width="860" height="48"></rect>
<rect class="latency-segment is-pickup" x="884" y="88" width="2" height="48"></rect>
<rect class="latency-segment is-scaffold" x="886" y="88" width="43" height="48"></rect>
<rect class="latency-segment is-render" x="929" y="88" width="47" height="48"></rect>
<text class="latency-major-label" x="44" y="75">Browser prepares capture</text>
<text class="latency-major-value" x="44" y="118">{displayMs(browserPreparation)}</text>
<text class="latency-remainder-label" x="974" y="166" text-anchor="end">everything after dispatch · {displayMs(overlapFloor)}</text>
<path class="latency-bracket" d="M884 148 V158 H976 V148"></path>
<text class="latency-axis-label" x="24" y="194">Go</text>
<text class="latency-axis-label" x="976" y="194" text-anchor="end">First variant</text>
</svg>
</div>
<ol class="latency-stage-list" aria-label="Critical path stages">
{stageData.map((stage, index) => (
<li data-tone={stage.tone}>
<span>{String(index + 1).padStart(2, '0')}</span>
<strong>{stage.name}</strong>
<em>{displayMs(stage.value)}</em>
</li>
))}
</ol>
<div class="live-performance-finding" role="note">
<strong>Finding 01</strong>
<p>The browser captures the selected element for the generating shader even when no annotations need to reach the model. That capture blocks event dispatch.</p>
</div>
</section>
<section class="live-performance-section ks-section" aria-labelledby="paths-title">
<div class="live-performance-section-head">
<div>
<p class="live-performance-label">Capture paths</p>
<h2 id="paths-title">Annotation state changes the floor</h2>
</div>
<p>The difference is repeatable enough to investigate, not yet explained enough to optimize against.</p>
</div>
<div class="scenario-comparison" role="img" aria-label={`Plain path ${displayMs(protocolFloor)}; annotated path ${displayMs(annotatedFloor)}`}>
<div class="scenario-row">
<div class="scenario-label"><strong>Plain pick</strong><span>No comments or strokes</span></div>
<div class="scenario-track"><span class="is-plain" style={`--scenario-width:${(protocolFloor / maxScenarioFloor) * 100}%`}></span></div>
<output>{displayMs(protocolFloor)}</output>
</div>
<div class="scenario-row">
<div class="scenario-label"><strong>Annotated pick</strong><span>Pin + stroke + upload</span></div>
<div class="scenario-track"><span class="is-annotated" style={`--scenario-width:${(annotatedFloor / maxScenarioFloor) * 100}%`}></span></div>
<output>{displayMs(annotatedFloor)}</output>
</div>
</div>
<p class="live-performance-caption">Protocol-only measurements: {plain.summary.count} plain runs, {annotated?.summary.count || 0} annotated runs. Browser and filesystem caches were warm.</p>
</section>
<section class="live-performance-section live-simulator-section ks-section" aria-labelledby="simulator-title">
<div class="live-performance-section-head">
<div>
<p class="live-performance-label">Latency simulator</p>
<h2 id="simulator-title">Model speed does not erase fixed overhead</h2>
</div>
<p>Move the model time. The protocol floor stays put.</p>
</div>
<div class="live-simulator">
<label for="model-latency">Model generates all variants <output data-model-value>15 s</output></label>
<input id="model-latency" data-model-latency type="range" min="0" max="60000" step="500" value="15000" />
<div class="simulator-results" aria-live="polite">
<div>
<span>Current atomic path</span>
<strong data-current-total>15.9 s</strong>
<small>model + measured protocol floor</small>
</div>
<div>
<span>Capture fully overlapped</span>
<strong data-overlap-total>15.1 s</strong>
<small>best-case projection, not a measured target</small>
</div>
</div>
</div>
</section>
<section class="live-performance-section ks-section" aria-labelledby="harness-title">
<div class="live-performance-section-head">
<div>
<p class="live-performance-label">Harness delivery</p>
<h2 id="harness-title">Four ways to wake the work</h2>
</div>
<p>Measure pickup before choosing architecture. Fast models cannot help while no model is running.</p>
</div>
<div class="harness-table-wrap">
<table class="harness-table">
<thead><tr><th>Path</th><th>Pickup</th><th>Tradeoff</th><th>Status</th></tr></thead>
<tbody>
{harnessPaths.map(path => (
<tr>
<td><strong>{path.name}</strong><span>{path.harness}</span></td>
<td>{path.pickup}</td>
<td>{path.tradeoff}{path.source && <> <a href={path.source}>Docs</a></>}</td>
<td><span class="ks-tag is-neutral" data-tone={path.statusTone}>{path.status}</span></td>
</tr>
))}
</tbody>
</table>
</div>
<div class="live-performance-finding is-probe" role="note">
<strong>Harness probe</strong>
<p>{currentHarnessProbe.surface}: {currentHarnessProbe.result}</p>
</div>
</section>
<section class="live-performance-section live-experiments-section ks-section" aria-labelledby="experiments-title">
<div class="live-performance-section-head">
<div>
<p class="live-performance-label">Evidence-ranked backlog</p>
<h2 id="experiments-title">What to test next</h2>
</div>
<p>Actual latency first, perceived latency second, architectural bets last.</p>
</div>
<ol class="experiment-list">
{liveExperiments.map(experiment => (
<li>
<span class="experiment-rank">{String(experiment.rank).padStart(2, '0')}</span>
<div class="experiment-body">
<header><h3>{experiment.title}</h3><span>{experiment.confidence}</span></header>
<p>{experiment.move}</p>
<dl>
<div><dt>Evidence</dt><dd>{experiment.evidence}</dd></div>
<div><dt>Expected</dt><dd>{experiment.expected}</dd></div>
</dl>
</div>
</li>
))}
</ol>
</section>
<section class="live-performance-method ks-section" aria-labelledby="method-title">
<h2 id="method-title">Measurement contract</h2>
<p>
<code>bun run bench:live</code> boots a real framework fixture and Chromium, drives Pick → Go → Cycle,
and records browser preparation, server pickup, scaffold, generation, write, and render boundaries.
The deterministic agent makes Impeccable overhead visible; model-backed runs remain opt-in because they send fixture context to an external provider.
</p>
</section>
</article>
<script>
import { initLivePerformance } from '../../scripts/live-performance.js';
initLivePerformance();
</script>
</Base>
+3
View File
@@ -0,0 +1,3 @@
---
return Astro.redirect('/live-mode', 301);
---
+31
View File
@@ -0,0 +1,31 @@
export function initLivePerformance() {
const root = document.querySelector('[data-live-performance]');
if (!root) return;
const slider = root.querySelector('[data-model-latency]');
const modelValue = root.querySelector('[data-model-value]');
const currentValue = root.querySelector('[data-current-total]');
const overlapValue = root.querySelector('[data-overlap-total]');
if (!slider || !modelValue || !currentValue || !overlapValue) return;
const protocolFloor = Number(root.dataset.protocolFloor || 0);
const overlapFloor = Number(root.dataset.overlapFloor || 0);
const formatter = new Intl.NumberFormat('en-US', { maximumFractionDigits: 1 });
const display = (milliseconds) => {
if (milliseconds >= 1000) return `${formatter.format(milliseconds / 1000)} s`;
return `${Math.round(milliseconds)} ms`;
};
const render = () => {
const modelMs = Number(slider.value);
modelValue.textContent = display(modelMs);
currentValue.textContent = display(modelMs + protocolFloor);
overlapValue.textContent = display(modelMs + overlapFloor);
slider.setAttribute('aria-valuetext', display(modelMs));
};
slider.addEventListener('input', render);
render();
}
+648
View File
@@ -0,0 +1,648 @@
.live-performance-page {
background: var(--ks-lacquer);
color: var(--ks-text);
}
.live-performance-main {
overflow: clip;
}
.live-lab-header {
display: flex;
justify-content: space-between;
gap: var(--spacing-md);
align-items: center;
min-height: 68px;
padding: 12px max(24px, calc((100vw - 1320px) / 2));
border-bottom: 1px solid var(--ks-rule);
background: var(--ks-lacquer-deep);
}
.live-lab-brand {
color: var(--ks-kinpaku);
text-decoration: none;
}
.live-lab-brand .ks-mark {
width: 30px;
height: 30px;
}
.live-lab-brand .ks-mark svg {
width: 26px;
height: 26px;
}
.live-lab-brand .ks-wordmark {
font-size: var(--ks-type-wordmark-size);
letter-spacing: var(--ks-type-wordmark-track);
}
.live-lab-header > div {
display: grid;
gap: 2px;
text-align: right;
}
.live-lab-header strong {
color: var(--ks-champagne);
font-size: var(--ks-type-body-size);
font-weight: 500;
}
.live-lab-header > div span {
color: var(--ks-text-faint);
font-family: var(--ks-mono);
font-size: var(--ks-type-eyebrow-size);
letter-spacing: var(--ks-type-eyebrow-track);
text-transform: uppercase;
}
.live-performance {
padding-bottom: clamp(80px, 10vw, 144px);
}
.live-performance-hero {
position: relative;
padding-top: clamp(96px, 13vw, 176px);
padding-bottom: clamp(72px, 10vw, 136px);
}
.live-performance-hero::after {
position: absolute;
right: max(24px, calc((100vw - 1320px) / 2));
bottom: 0;
left: max(24px, calc((100vw - 1320px) / 2));
height: 1px;
background: var(--ks-rule);
content: '';
}
.live-performance-kicker,
.live-performance-label {
margin: 0;
color: var(--ks-patina);
font-family: var(--ks-mono);
font-size: var(--ks-type-eyebrow-size);
font-weight: 500;
letter-spacing: var(--ks-type-eyebrow-track);
text-transform: uppercase;
}
.live-performance-hero h1 {
max-width: 1050px;
margin: 24px 0 0;
color: var(--ks-champagne);
font-family: var(--ks-font-display);
font-size: var(--ks-type-display-size);
font-weight: 100;
letter-spacing: -0.01em;
line-height: 0.88;
text-wrap: balance;
}
.live-performance-hero h1 span {
color: var(--ks-kinpaku);
}
.live-performance-lede {
max-width: 64ch;
margin: 38px 0 0;
color: var(--ks-text-muted);
font-size: clamp(1.05rem, 1.6vw, 1.35rem);
line-height: 1.65;
}
.live-performance-meta {
display: flex;
flex-wrap: wrap;
gap: 10px 24px;
margin-top: 42px;
color: var(--ks-text-faint);
font-family: var(--ks-mono);
font-size: 0.75rem;
}
.live-performance-meta span:not(:last-child)::after {
margin-left: 24px;
color: var(--ks-kinpaku-deep);
content: '—';
}
.live-performance-section {
padding-top: clamp(72px, 9vw, 120px);
padding-bottom: clamp(72px, 9vw, 120px);
border-bottom: 1px solid var(--ks-rule);
}
.live-performance-section-head {
display: grid;
grid-template-columns: minmax(0, 1fr) minmax(240px, 440px);
gap: clamp(32px, 8vw, 120px);
align-items: end;
}
.live-performance-section-head h2,
.live-performance-method h2 {
max-width: 760px;
margin: 12px 0 0;
color: var(--ks-champagne);
font-family: var(--ks-font-display);
font-size: var(--ks-type-headline-size);
font-weight: var(--ks-type-headline-weight);
line-height: var(--ks-type-headline-line);
text-wrap: balance;
}
.live-performance-section-head > p {
margin: 0;
color: var(--ks-text-muted);
line-height: 1.65;
}
.latency-tape {
margin-top: clamp(48px, 7vw, 88px);
border-bottom: 1px solid var(--ks-rule);
}
.latency-tape svg {
display: block;
width: 100%;
height: auto;
overflow: visible;
}
.latency-axis,
.latency-ticks line {
stroke: var(--ks-rule);
stroke-width: 1;
}
.latency-segment.is-capture { fill: var(--ks-kinpaku); }
.latency-segment.is-pickup { fill: var(--ks-vermilion); }
.latency-segment.is-scaffold { fill: var(--ks-patina); }
.latency-segment.is-render { fill: var(--ks-graphite-2); }
.latency-major-label,
.latency-remainder-label,
.latency-axis-label {
fill: var(--ks-text-muted);
font-family: var(--ks-mono);
font-size: var(--ks-type-mono-size);
}
.latency-major-value {
fill: var(--ks-lacquer-deep);
font-family: var(--ks-font);
font-size: var(--ks-type-title-size);
font-weight: 700;
}
.latency-bracket {
fill: none;
stroke: var(--ks-patina);
stroke-width: 1;
}
.latency-stage-list {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
margin: 0;
padding: 0;
list-style: none;
}
.latency-stage-list li {
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 6px 12px;
min-width: 0;
padding: 20px 18px 22px 0;
border-right: 1px solid var(--ks-rule);
}
.latency-stage-list li:not(:first-child) { padding-left: 18px; }
.latency-stage-list li:last-child { border-right: 0; }
.latency-stage-list li > span {
grid-row: 1 / span 2;
color: var(--ks-code-cmd);
font-family: var(--ks-mono);
font-size: var(--ks-type-eyebrow-size);
}
.latency-stage-list strong {
color: var(--ks-champagne);
font-size: var(--ks-type-body-size);
font-weight: 500;
}
.latency-stage-list em {
color: var(--ks-text-muted);
font-family: var(--ks-mono);
font-size: var(--ks-type-mono-size);
font-style: normal;
}
.live-performance-finding {
display: grid;
grid-template-columns: 140px minmax(0, 1fr);
gap: 24px;
margin-top: 48px;
padding: 22px 0;
border-top: 1px solid var(--ks-kinpaku-deep);
border-bottom: 1px solid var(--ks-kinpaku-deep);
}
.live-performance-finding strong {
color: var(--ks-code-cmd);
font-family: var(--ks-mono);
font-size: var(--ks-type-mono-size);
font-weight: 500;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.live-performance-finding p {
max-width: 74ch;
margin: 0;
color: var(--ks-text);
line-height: 1.65;
}
.live-performance-finding.is-probe {
border-color: var(--ks-patina-deep);
}
.live-performance-finding.is-probe strong { color: var(--ks-patina); }
.scenario-comparison {
display: grid;
gap: 24px;
margin-top: clamp(48px, 7vw, 80px);
}
.scenario-row {
display: grid;
grid-template-columns: minmax(160px, 220px) minmax(0, 1fr) 86px;
gap: 24px;
align-items: center;
}
.scenario-label {
display: grid;
gap: 4px;
}
.scenario-label strong {
color: var(--ks-champagne);
font-size: var(--ks-type-body-size);
font-weight: 500;
}
.scenario-label span,
.live-performance-caption {
color: var(--ks-text-faint);
font-size: var(--ks-type-mono-size);
}
.scenario-track {
height: 18px;
background: var(--ks-graphite);
}
.scenario-track span {
display: block;
width: var(--scenario-width);
height: 100%;
}
.scenario-track .is-plain { background: var(--ks-kinpaku); }
.scenario-track .is-annotated { background: var(--ks-patina); }
.scenario-row output {
color: var(--ks-champagne);
font-family: var(--ks-mono);
font-size: var(--ks-type-mono-size);
text-align: right;
}
.live-performance-caption {
margin: 24px 0 0;
line-height: 1.6;
}
.live-simulator {
margin-top: clamp(48px, 7vw, 80px);
padding: clamp(24px, 4vw, 48px);
background: var(--ks-lacquer-deep);
border: 1px solid var(--ks-rule);
}
.live-simulator > label {
display: flex;
justify-content: space-between;
gap: 24px;
color: var(--ks-champagne);
font-weight: 500;
}
.live-simulator > label output {
color: var(--ks-kinpaku);
font-family: var(--ks-mono);
}
.live-simulator input[type='range'] {
width: 100%;
margin: 30px 0 0;
accent-color: var(--ks-kinpaku);
}
.simulator-results {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
margin-top: 34px;
border-top: 1px solid var(--ks-rule);
}
.simulator-results > div {
display: grid;
gap: 8px;
padding: 28px 28px 0 0;
}
.simulator-results > div + div {
padding-left: 28px;
border-left: 1px solid var(--ks-rule);
}
.simulator-results span {
color: var(--ks-text-muted);
font-size: var(--ks-type-body-size);
}
.simulator-results strong {
color: var(--ks-champagne);
font-family: var(--ks-font-display);
font-size: var(--ks-type-display-size);
font-weight: 300;
line-height: 0.9;
}
.simulator-results small {
color: var(--ks-text-faint);
font-size: var(--ks-type-mono-size);
line-height: 1.5;
}
.harness-table-wrap {
margin-top: clamp(48px, 7vw, 80px);
overflow-x: auto;
}
.harness-table {
width: 100%;
min-width: 840px;
border-collapse: collapse;
}
.harness-table th {
padding: 0 18px 14px 0;
border-bottom: 1px solid var(--ks-kinpaku-deep);
color: var(--ks-text-faint);
font-family: var(--ks-mono);
font-size: var(--ks-type-eyebrow-size);
font-weight: 500;
letter-spacing: 0.12em;
text-align: left;
text-transform: uppercase;
}
.harness-table td {
padding: 22px 18px 22px 0;
border-bottom: 1px solid var(--ks-rule);
color: var(--ks-text-muted);
font-size: var(--ks-type-body-size);
line-height: 1.55;
vertical-align: top;
}
.harness-table td:first-child {
width: 23%;
}
.harness-table td:nth-child(2) {
width: 20%;
color: var(--ks-text);
}
.harness-table td:last-child {
width: 150px;
}
.harness-table td strong,
.harness-table td span {
display: block;
}
.harness-table td strong {
color: var(--ks-champagne);
font-weight: 500;
}
.harness-table td:first-child span {
margin-top: 5px;
color: var(--ks-text-faint);
font-size: var(--ks-type-mono-size);
}
.harness-table a {
color: var(--ks-patina);
}
.harness-table .ks-tag {
display: inline-flex;
width: fit-content;
color: var(--ks-text);
}
.experiment-list {
margin: clamp(48px, 7vw, 80px) 0 0;
padding: 0;
border-top: 1px solid var(--ks-kinpaku-deep);
list-style: none;
}
.experiment-list > li {
display: grid;
grid-template-columns: 72px minmax(0, 1fr);
border-bottom: 1px solid var(--ks-rule);
}
.experiment-rank {
padding-top: 27px;
color: var(--ks-code-cmd);
font-family: var(--ks-mono);
font-size: var(--ks-type-mono-size);
}
.experiment-body {
padding: 24px 0 28px;
}
.experiment-body header {
display: flex;
justify-content: space-between;
gap: 24px;
align-items: baseline;
}
.experiment-body h3 {
margin: 0;
color: var(--ks-champagne);
font-size: var(--ks-type-title-size);
font-weight: 500;
}
.experiment-body header span {
color: var(--ks-patina);
font-family: var(--ks-mono);
font-size: var(--ks-type-eyebrow-size);
white-space: nowrap;
}
.experiment-body > p {
max-width: 80ch;
margin: 12px 0 0;
color: var(--ks-text);
line-height: 1.65;
}
.experiment-body dl {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 24px;
margin: 20px 0 0;
}
.experiment-body dl div {
display: grid;
grid-template-columns: 72px minmax(0, 1fr);
gap: 12px;
}
.experiment-body dt {
color: var(--ks-text-faint);
font-family: var(--ks-mono);
font-size: var(--ks-type-eyebrow-size);
text-transform: uppercase;
}
.experiment-body dd {
margin: 0;
color: var(--ks-text-muted);
font-size: var(--ks-type-body-size);
line-height: 1.55;
}
.live-performance-method {
display: grid;
grid-template-columns: minmax(220px, 0.7fr) minmax(0, 1.3fr);
gap: clamp(32px, 8vw, 120px);
padding-top: clamp(72px, 9vw, 120px);
}
.live-performance-method h2 {
margin-top: 0;
}
.live-performance-method p {
max-width: 72ch;
margin: 0;
color: var(--ks-text-muted);
line-height: 1.75;
}
@media (max-width: 800px) {
.live-performance-section-head,
.live-performance-method {
grid-template-columns: 1fr;
gap: 24px;
}
.latency-stage-list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.latency-stage-list li:nth-child(2) { border-right: 0; }
.latency-stage-list li:nth-child(n + 3) { border-top: 1px solid var(--ks-rule); }
.latency-stage-list li:nth-child(3) { padding-left: 0; }
.scenario-row {
grid-template-columns: minmax(130px, 180px) minmax(0, 1fr) 76px;
gap: 14px;
}
.experiment-body dl {
grid-template-columns: 1fr;
gap: 10px;
}
}
@media (max-width: 560px) {
.live-performance-hero h1 {
font-size: var(--ks-type-display-size);
}
.live-performance-meta span:not(:last-child)::after { display: none; }
.latency-tape {
margin-right: -12px;
margin-left: -12px;
}
.latency-stage-list {
grid-template-columns: 1fr;
}
.latency-stage-list li,
.latency-stage-list li:not(:first-child),
.latency-stage-list li:nth-child(3) {
padding: 16px 0;
border-top: 1px solid var(--ks-rule);
border-right: 0;
}
.scenario-row {
grid-template-columns: minmax(0, 1fr) 70px;
}
.scenario-label { grid-column: 1 / -1; }
.simulator-results {
grid-template-columns: 1fr;
}
.simulator-results > div + div {
margin-top: 24px;
padding: 24px 0 0;
border-top: 1px solid var(--ks-rule);
border-left: 0;
}
.experiment-list > li {
grid-template-columns: 46px minmax(0, 1fr);
}
.experiment-body header {
align-items: flex-start;
flex-direction: column;
gap: 8px;
}
}
@media (prefers-reduced-motion: reduce) {
.live-performance-page * {
scroll-behavior: auto !important;
}
}