mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
Oracle: live-mode cases and goldens (roots, inject, wrap, insert, accept, session, manual edits, daemon)
Prepared with AI assistance (Claude Code).
This commit is contained in:
@@ -55,3 +55,35 @@ Not covered on purpose: `palette` with no `--id` / `--from` / env seed (random),
|
||||
`concept-seed` against the live roll API, `generate-image` real mode,
|
||||
`serve-question --start` / blocking mode (opens a browser and binds a port),
|
||||
and unhandled-exception paths whose stack traces carry Node line numbers.
|
||||
|
||||
## Live-mode cases (`cases/live-*.mjs`, workspaces `live-*`)
|
||||
|
||||
Helpers live in `live-helpers.mjs` (staged journals, buffers, wrapped source
|
||||
files with the fake-agent variant block, a `.git` FILE pointing at a non-repo
|
||||
gitdir so roots resolution sees a git boundary while `git check-ignore` exits
|
||||
128 everywhere and the ignore block lands in the snapshotable
|
||||
`.gitfake/info/exclude`). Svelte component preview cases symlink this repo's
|
||||
`node_modules/svelte` into the staged app, exactly like the unit tests.
|
||||
|
||||
Harness additions made for live:
|
||||
|
||||
- `steps[]` entries may carry their own `setup(ws)` (run right before that
|
||||
step) and `daemon: true` with `readyFile` / `readyTimeoutMs`: the verb is
|
||||
spawned detached, the harness waits for the ready file, later steps run
|
||||
against it, and teardown SIGTERMs (then SIGKILLs) it. Its stdout/stderr land
|
||||
in the golden as `daemon: [{stdout, stderr}]`.
|
||||
- `normalize: [[regexSource, flags, replacement], ...]` on a case applies extra
|
||||
masks to that case only. Live uses it for the dynamic helper port
|
||||
(`localhost:<PORT>`, `"port": <PORT>`), lease and phase stamps (`<EPOCH>`),
|
||||
and float durations (`<N>`).
|
||||
- Global masks added: `"pid": <PID>` / `(pid <PID>)` and UUID tokens `<UUID>`.
|
||||
- `snapshotFiles` walks `node_modules/.impeccable-live` (the Svelte preview
|
||||
tree) and nothing else under `node_modules`.
|
||||
|
||||
Deliberately not covered here (rely on `tests/live-e2e`): the browser
|
||||
handshake and `/live.js` bundle, SSE, generate/accept round-trips through a
|
||||
real browser, `variant_mount_failed` republish, manual-edit chat routing and
|
||||
the codex/claude subprocess providers, Svelte revision-dir publishing, and
|
||||
`live.mjs`'s dev-server-dependent flows. Lock-file names hash the absolute
|
||||
source path, so lock cases do not snapshot `.impeccable/live/locks/`.
|
||||
`live-poll-*-connection-refused` assumes nothing listens on 127.0.0.1:65531.
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
/**
|
||||
* `live-accept` corpus: argument paths, HTML and JSX accept/discard
|
||||
* (carbonize output, param baking inputs), receipts, lock contention,
|
||||
* generated-file fallback, buffer scrub, and the Svelte component path
|
||||
* (wrap with the linked compiler, then accept/discard the stub variant).
|
||||
*/
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import {
|
||||
LIVE_FILES, linkSvelte, lockPathFor, stageWrappedHtml, stageWrappedJsx, write, writeBuffer,
|
||||
} from '../live-helpers.mjs';
|
||||
|
||||
const F = LIVE_FILES;
|
||||
const HTML = [...F, 'index.html'];
|
||||
const JSX = [...F, 'src/**'];
|
||||
const A = (id, workspace, args, extra = {}) => ({ id, verb: 'live-accept', workspace, args, files: [...F, ...(extra.snap || [])], ...extra });
|
||||
const ID = 'ab12cd34';
|
||||
|
||||
export default [
|
||||
A('live-accept-help', 'live-html', ['--help']),
|
||||
A('live-accept-missing-id', 'live-html', ['--variant', '1']),
|
||||
A('live-accept-invalid-id', 'live-html', ['--id', '../etc', '--variant', '1']),
|
||||
A('live-accept-need-mode', 'live-html', ['--id', ID]),
|
||||
A('live-accept-invalid-variant', 'live-html', ['--id', ID, '--variant', '1a']),
|
||||
A('live-accept-invalid-variant-regex', 'live-html', ['--id', ID, '--variant', '.*']),
|
||||
A('live-accept-markers-not-found', 'live-html', ['--id', 'nothere1', '--variant', '1']),
|
||||
A('live-accept-target-missing-value', 'live-html', ['--id', ID, '--variant', '1', '--target']),
|
||||
|
||||
// --- HTML source-preview accept / discard ---
|
||||
A('live-accept-html-variant-1-range', 'live-html', ['--id', ID, '--variant', '1', '--param-values', '{"lightness":0.65}'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-variant-2-steps', 'live-html', ['--id', ID, '--variant', '2', '--param-values', '{"face":"serif"}'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-variant-3-toggle', 'live-html', ['--id', ID, '--variant', '3', '--param-values', '{"italic":true}'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-no-params', 'live-html', ['--id', ID, '--variant', '2'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-malformed-params', 'live-html', ['--id', ID, '--variant', '1', '--param-values', '{bad'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-variant-missing', 'live-html', ['--id', ID, '--variant', '9'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-discard', 'live-html', ['--id', ID, '--discard'], { snap: ['index.html'], setup: stageWrappedHtml }),
|
||||
A('live-accept-html-receipt-replay', 'live-html', ['--id', ID, '--variant', '1'], { snap: ['index.html'], setup: stageWrappedHtml, steps: [{}, {}] }),
|
||||
A('live-accept-html-receipt-conflict', 'live-html', [], { snap: ['index.html'], setup: stageWrappedHtml, steps: [{ args: ['--id', ID, '--variant', '1'] }, { args: ['--id', ID, '--variant', '2'] }, { args: ['--id', ID, '--discard'] }] }),
|
||||
A('live-accept-html-discard-then-accept', 'live-html', [], { snap: ['index.html'], setup: stageWrappedHtml, steps: [{ args: ['--id', ID, '--discard'] }, { args: ['--id', ID, '--variant', '1'] }] }),
|
||||
A('live-accept-html-no-css-block', 'live-html', ['--id', ID, '--variant', '2'], {
|
||||
snap: ['index.html'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
const p = path.join(ws, 'index.html');
|
||||
fs.writeFileSync(p, fs.readFileSync(p, 'utf8').replace(/ {8}<style data-impeccable-css="ab12cd34">[\s\S]*?<\/style>\n/, ''));
|
||||
},
|
||||
}),
|
||||
A('live-accept-generated-file', 'live-html', ['--id', ID, '--variant', '1'], {
|
||||
snap: ['dist/**'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
const wrapped = fs.readFileSync(path.join(ws, 'index.html'), 'utf8');
|
||||
fs.writeFileSync(path.join(ws, 'index.html'), '<html></html>\n');
|
||||
write(ws, 'dist/generated.html', '<!-- @generated by build.js. DO NOT EDIT. -->\n' + wrapped);
|
||||
},
|
||||
}),
|
||||
A('live-accept-source-locked', 'live-html', ['--id', ID, '--variant', '1'], {
|
||||
// Lock file names hash the absolute source path, so they are not snapshotted.
|
||||
files: ['index.html', '.impeccable/live/accept-receipts/**'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
// The recording process itself owns the lock, so it is alive for the whole run.
|
||||
write(ws, lockPathFor(ws, 'index.html'), JSON.stringify({ owner: 'oracle', token: 'x', pid: process.pid, at: 1, file: path.join(ws, 'index.html') }));
|
||||
},
|
||||
}),
|
||||
A('live-accept-stale-lock-dead-pid', 'live-html', ['--id', ID, '--variant', '1'], {
|
||||
files: ['index.html', '.impeccable/live/accept-receipts/**'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
write(ws, lockPathFor(ws, 'index.html'), JSON.stringify({ owner: 'oracle', token: 'x', pid: 2147483646, at: 1, file: path.join(ws, 'index.html') }));
|
||||
},
|
||||
}),
|
||||
A('live-accept-scrubs-buffer-for-page', 'live-html', ['--id', ID, '--variant', '1', '--page-url', '/'], {
|
||||
snap: ['index.html'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
writeBuffer(ws, [
|
||||
{ id: 'e1', pageUrl: '/', element: { tagName: 'h1' }, ops: [{ ref: 'h1', tag: 'h1', originalText: 'Oracle Fixture', newText: 'Renamed' }], stagedAt: '2026-08-01T00:00:00.000Z' },
|
||||
{ id: 'e2', pageUrl: '/', element: { tagName: 'p' }, ops: [{ ref: 'p', tag: 'p', originalText: 'Unrelated copy', newText: 'Other' }], stagedAt: '2026-08-01T00:00:00.000Z' },
|
||||
{ id: 'e3', pageUrl: '/about', element: { tagName: 'h1' }, ops: [{ ref: 'h1', tag: 'h1', originalText: 'Oracle Fixture', newText: 'Renamed' }], stagedAt: '2026-08-01T00:00:00.000Z' },
|
||||
]);
|
||||
},
|
||||
}),
|
||||
A('live-accept-no-page-url-keeps-buffer', 'live-html', ['--id', ID, '--variant', '1'], {
|
||||
snap: ['index.html'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
writeBuffer(ws, [{ id: 'e1', pageUrl: '/', element: { tagName: 'h1' }, ops: [{ ref: 'h1', tag: 'h1', originalText: 'Oracle Fixture', newText: 'Renamed' }], stagedAt: '2026-08-01T00:00:00.000Z' }]);
|
||||
},
|
||||
}),
|
||||
A('live-accept-source-shadow-deprecated', 'live-html', ['--id', ID, '--variant', '1'], {
|
||||
snap: ['index.html'],
|
||||
setup: (ws) => {
|
||||
stageWrappedHtml(ws);
|
||||
const p = path.join(ws, 'index.html');
|
||||
fs.writeFileSync(p, fs.readFileSync(p, 'utf8').replace('data-impeccable-variant-count="3"', 'data-impeccable-variant-count="3" data-impeccable-preview="source-shadow"'));
|
||||
},
|
||||
}),
|
||||
|
||||
// --- JSX source-preview accept / discard ---
|
||||
A('live-accept-jsx-variant-1', 'live-vite', ['--id', ID, '--variant', '1', '--param-values', '{"lightness":0.4}'], { snap: ['src/**'], setup: stageWrappedJsx }),
|
||||
A('live-accept-jsx-variant-3-toggle-off', 'live-vite', ['--id', ID, '--variant', '3', '--param-values', '{"italic":false}'], { snap: ['src/**'], setup: stageWrappedJsx }),
|
||||
A('live-accept-jsx-discard', 'live-vite', ['--id', ID, '--discard'], { snap: ['src/**'], setup: stageWrappedJsx }),
|
||||
A('live-accept-jsx-from-subdir', 'live-vite', ['--id', ID, '--variant', '2'], { snap: ['src/**'], setup: stageWrappedJsx, cwd: 'src' }),
|
||||
|
||||
// --- Svelte component preview: wrap (linked compiler), then accept / discard ---
|
||||
{
|
||||
id: 'live-accept-svelte-component-accept', workspace: 'live-sveltekit', files: [...F, 'src/**'], setup: linkSvelte,
|
||||
steps: [
|
||||
{ verb: 'live-wrap', args: ['--id', ID, '--classes', 'hero-title', '--tag', 'h1'] },
|
||||
{ verb: 'live-accept', args: ['--id', ID, '--variant', '1'] },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'live-accept-svelte-component-styled-variant', workspace: 'live-sveltekit', files: [...F, 'src/**'], setup: linkSvelte,
|
||||
steps: [
|
||||
{ verb: 'live-wrap', args: ['--id', ID, '--classes', 'hero-title', '--tag', 'h1'] },
|
||||
{
|
||||
verb: 'live-accept', args: ['--id', ID, '--variant', '2', '--param-values', '{"lead":1.8,"density":"snug"}'],
|
||||
// The agent's variant: the stub's script/markup kept, a new style block
|
||||
// with param hooks, and params.json declaring them.
|
||||
setup: (ws) => {
|
||||
const dir = path.join(ws, 'node_modules/.impeccable-live', ID);
|
||||
const stub = fs.readFileSync(path.join(dir, 'v2.svelte'), 'utf8');
|
||||
const head = stub.slice(0, stub.indexOf('<style>'));
|
||||
fs.writeFileSync(path.join(dir, 'v2.svelte'), head + '<style>\n .hero-title {\n font-weight: 900;\n line-height: var(--p-lead, 1.2);\n letter-spacing: 0.14em;\n }\n :global([data-p-density="snug"]) .hero-title { letter-spacing: 0; }\n</style>\n');
|
||||
fs.writeFileSync(path.join(dir, 'params.json'), JSON.stringify({ 2: [
|
||||
{ id: 'lead', kind: 'range', min: 1, max: 2, step: 0.1, default: 1.2, label: 'Lead' },
|
||||
{ id: 'density', kind: 'steps', default: 'airy', label: 'Density', options: [{ value: 'airy', label: 'Airy' }, { value: 'snug', label: 'Snug' }] },
|
||||
] }, null, 2));
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'live-accept-svelte-component-discard', workspace: 'live-sveltekit', files: [...F, 'src/**'], setup: linkSvelte,
|
||||
steps: [
|
||||
{ verb: 'live-wrap', args: ['--id', ID, '--classes', 'expense-list', '--tag', 'ul'] },
|
||||
{ verb: 'live-accept', args: ['--id', ID, '--discard'] },
|
||||
{ verb: 'live-accept', args: ['--id', ID, '--discard'] },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'live-accept-svelte-component-variant-missing', workspace: 'live-sveltekit', files: [...F, 'src/**'], setup: linkSvelte,
|
||||
steps: [
|
||||
{ verb: 'live-wrap', args: ['--id', ID, '--classes', 'hero-title', '--tag', 'h1'] },
|
||||
{ verb: 'live-accept', args: ['--id', ID, '--variant', '7'] },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'live-accept-svelte-insert-empty-variant', workspace: 'live-sveltekit', files: [...F, 'src/**'],
|
||||
steps: [
|
||||
{ verb: 'live-insert', args: ['--id', ID, '--position', 'after', '--element-id', 'features'] },
|
||||
{ verb: 'live-accept', args: ['--id', ID, '--variant', '1'] },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'live-accept-svelte-fallback-source-wrapper', workspace: 'live-sveltekit', files: [...F, 'src/**'],
|
||||
// No compiler: wrap wrote a plain source wrapper into the .svelte route.
|
||||
steps: [
|
||||
{ verb: 'live-wrap', args: ['--id', ID, '--classes', 'hero-title', '--tag', 'h1'] },
|
||||
{ verb: 'live-accept', args: ['--id', ID, '--discard'] },
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,45 @@
|
||||
/**
|
||||
* One end-to-end helper-server flow driven through the daemon step support
|
||||
* in lib.mjs: start `live-server` detached, then status / poll / reply /
|
||||
* complete / stop against it. Everything run-dependent (port, token, pids,
|
||||
* lease and phase timestamps, durations) is masked per-case.
|
||||
*/
|
||||
import { LIVE_FILES, writeJournal } from '../live-helpers.mjs';
|
||||
|
||||
const ID = 'ab12cd34';
|
||||
const GEN = { type: 'generate', action: 'bolder', count: 3, pageUrl: '/', element: { tagName: 'h1', id: 'hero', classes: ['hero-title'], textContent: 'Oracle Fixture', outerHTML: '<h1 id="hero" class="hero-title">Oracle Fixture</h1>' }, clientSentAt: 1754042400000 };
|
||||
const NORM = [
|
||||
['localhost:\\d{4,5}', 'g', 'localhost:<PORT>'],
|
||||
['"(port|serverPort)":(\\s*)\\d{4,5}', 'g', '"$1":$2<PORT>'],
|
||||
['Stopped live server on port \\d+\\.', 'g', 'Stopped live server on port <PORT>.'],
|
||||
['already running on port \\d+ ', 'g', 'already running on port <PORT> '],
|
||||
['"(leaseUntil|generationReadyAt|lastPollAt|generationCompletedAt|generationCanceledAt|at|leasedAt|clientSentAt)":(\\s*)\\d{10,}', 'g', '"$1":$2<EPOCH>'],
|
||||
['"(durationMs|scaffoldDurationMs)":(\\s*)\\d+(?:\\.\\d+)?', 'g', '"$1":$2<N>'],
|
||||
// The journal embeds the float duration above, so its byte length moves too.
|
||||
['"__journalBytes":(\\s*)\\d+', 'g', '"__journalBytes":$1<N>'],
|
||||
];
|
||||
|
||||
export default [
|
||||
{
|
||||
id: 'live-daemon-server-status-poll-complete', workspace: 'live-html', files: [...LIVE_FILES, 'index.html'], normalize: NORM,
|
||||
// A durable session with a pending generate: the server restores it into
|
||||
// its queue on start, so the first poll leases it (running the deferred
|
||||
// wrap preflight against index.html) instead of timing out.
|
||||
setup: (ws) => writeJournal(ws, ID, [GEN]),
|
||||
steps: [
|
||||
{ verb: 'live-server', daemon: true, readyFile: '.impeccable/live/server.json', readyTimeoutMs: 15000 },
|
||||
{ verb: 'live-server', args: [] },
|
||||
{ verb: 'live-status', args: [] },
|
||||
{ verb: 'live-poll', args: ['--timeout=8000'] },
|
||||
{ verb: 'live-poll', args: ['--reply', ID, 'done', '--file', 'index.html'] },
|
||||
{ verb: 'live-poll', args: ['--timeout=300'] },
|
||||
{ verb: 'live-poll', args: ['--reply', 'zz99zz99', 'done'] },
|
||||
{ verb: 'live-poll', args: ['--reply', ID, 'steer_done'] },
|
||||
{ verb: 'live-resume', args: [] },
|
||||
{ verb: 'live-complete', args: ['--id', ID] },
|
||||
{ verb: 'live-status', args: [] },
|
||||
{ verb: 'live-server', args: ['stop'] },
|
||||
{ verb: 'live-status', args: [] },
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* Manual copy-edit helpers: `live-discard-manual-edits`,
|
||||
* `live-commit-manual-edits` (mock provider only: no codex/claude spawn),
|
||||
* driven from a staged pending-manual-edits.json buffer.
|
||||
*/
|
||||
import { LIVE_FILES, write, writeBuffer } from '../live-helpers.mjs';
|
||||
|
||||
const F = [...LIVE_FILES, 'index.html', 'src/**', 'public/**'];
|
||||
const entry = (id, pageUrl, ops) => ({ id, pageUrl, element: { tagName: 'h1', classes: ['hero-title'] }, ops, stagedAt: '2026-08-01T00:00:00.000Z' });
|
||||
const twoPages = (ws) => writeBuffer(ws, [
|
||||
entry('e1', '/', [{ ref: 'main>h1', tag: 'h1', classes: ['hero-title'], originalText: 'Oracle Fixture', newText: 'Oracle Fixture, renamed', sourceHint: { file: 'index.html', line: 13, column: 7 } }]),
|
||||
entry('e2', '/', [{ ref: 'main>p', tag: 'p', originalText: 'Minimal static page for oracle live-mode goldens.', newText: 'A tighter hook.' }, { ref: 'aside>p', tag: 'p', originalText: 'Nested content.', newText: 'Nested copy.' }]),
|
||||
entry('e3', '/docs/guide', [{ ref: 'article>p', tag: 'p', originalText: 'A second page covered by the config glob.', newText: 'Second page lead.' }]),
|
||||
]);
|
||||
const D = (id, args, setup, extra = {}) => ({ id, verb: 'live-discard-manual-edits', workspace: 'live-html', args, setup, files: F, ...extra });
|
||||
const C = (id, args, setup, extra = {}) => ({ id, verb: 'live-commit-manual-edits', workspace: 'live-html', args, setup, files: F, ...extra });
|
||||
const MOCK = { IMPECCABLE_LIVE_COPY_AGENT: 'mock' };
|
||||
|
||||
export default [
|
||||
D('live-discard-help', ['--help'], null),
|
||||
D('live-discard-empty', [], null),
|
||||
D('live-discard-all', [], twoPages),
|
||||
D('live-discard-page', ['--page-url=/'], twoPages),
|
||||
D('live-discard-page-no-match', ['--page-url=/nope'], twoPages),
|
||||
D('live-discard-page-bare-flag', ['--page-url'], twoPages),
|
||||
D('live-discard-twice', [], twoPages, { steps: [{}, {}] }),
|
||||
D('live-discard-invalid-buffer', [], (ws) => write(ws, '.impeccable/live/pending-manual-edits.json', '{ nope')),
|
||||
|
||||
C('live-commit-help', ['--help'], null),
|
||||
C('live-commit-no-pending', [], null, { env: MOCK }),
|
||||
C('live-commit-no-pending-page', ['--page-url=/'], null, { env: MOCK }),
|
||||
C('live-commit-invalid-buffer', [], (ws) => write(ws, '.impeccable/live/pending-manual-edits.json', '{ nope'), { env: MOCK }),
|
||||
C('live-commit-mock-default-result', ['--provider=mock'], twoPages, {
|
||||
// Mock reports every entry applied but touched no files: source
|
||||
// verification finds the new text nowhere and refuses to clear.
|
||||
env: MOCK,
|
||||
}),
|
||||
C('live-commit-mock-applied-page', ['--page-url=/', '--provider=mock'], twoPages, {
|
||||
env: {
|
||||
...MOCK,
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_WRITES: JSON.stringify({ 'index.html': '<!DOCTYPE html>\n<html lang="en">\n <body>\n <main class="page">\n <h1 id="hero" class="hero-title">Oracle Fixture, renamed</h1>\n <p class="hero-hook">A tighter hook.</p>\n <aside class="side-note"><p>Nested copy.</p></aside>\n </main>\n </body>\n</html>\n' }),
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: JSON.stringify({ status: 'done', appliedEntryIds: ['e1', 'e2'], failed: [], files: ['index.html'], notes: ['oracle mock'] }),
|
||||
},
|
||||
}),
|
||||
C('live-commit-mock-partial', ['--page-url=/', '--provider=mock'], twoPages, {
|
||||
env: {
|
||||
...MOCK,
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_WRITES: JSON.stringify({ 'index.html': '<html><body><h1 id="hero" class="hero-title">Oracle Fixture, renamed</h1><p class="hero-hook">Minimal static page for oracle live-mode goldens.</p><aside><p>Nested content.</p></aside></body></html>\n' }),
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: JSON.stringify({ status: 'partial', appliedEntryIds: ['e1'], failed: [{ entryId: 'e2', reason: 'ambiguous duplicate copy' }], files: ['index.html'] }),
|
||||
},
|
||||
}),
|
||||
C('live-commit-mock-error', ['--provider=mock'], twoPages, {
|
||||
env: { ...MOCK, IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: JSON.stringify({ status: 'error', message: 'agent gave up', appliedEntryIds: [], failed: [], files: [] }) },
|
||||
}),
|
||||
C('live-commit-mock-unreported-file-change', ['--page-url=/', '--provider=mock'], twoPages, {
|
||||
env: {
|
||||
...MOCK,
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_WRITES: JSON.stringify({ 'index.html': '<html><body><h1 id="hero" class="hero-title">Oracle Fixture, renamed</h1><p class="hero-hook">A tighter hook.</p><aside><p>Nested copy.</p></aside></body></html>\n' }),
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: JSON.stringify({ status: 'done', appliedEntryIds: ['e1', 'e2'], failed: [], files: [] }),
|
||||
},
|
||||
}),
|
||||
C('live-commit-mock-invalid-result-json', ['--provider=mock'], twoPages, {
|
||||
env: { ...MOCK, IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: '{not json' },
|
||||
}),
|
||||
C('live-commit-mock-leftover-marker-check', ['--page-url=/docs/guide', '--provider=mock'], twoPages, {
|
||||
env: {
|
||||
...MOCK,
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_WRITES: JSON.stringify({ 'public/docs/guide.html': '<html><body>\n<!-- impeccable-variants-start ab12cd34 -->\n<p class="doc-lead">Second page lead.</p>\n</body></html>\n' }),
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: JSON.stringify({ status: 'done', appliedEntryIds: ['e3'], failed: [], files: ['public/docs/guide.html'] }),
|
||||
},
|
||||
}),
|
||||
C('live-commit-mock-then-discard-remaining', ['--page-url=/docs/guide', '--provider=mock'], twoPages, {
|
||||
env: {
|
||||
...MOCK,
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_WRITES: JSON.stringify({ 'public/docs/guide.html': '<html><body><article class="doc"><h1 class="doc-title">Guide</h1><p class="doc-lead">Second page lead.</p></article></body></html>\n' }),
|
||||
IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT: JSON.stringify({ status: 'done', appliedEntryIds: ['e3'], failed: [], files: ['public/docs/guide.html'] }),
|
||||
},
|
||||
steps: [{}, { verb: 'live-discard-manual-edits', args: [] }],
|
||||
}),
|
||||
];
|
||||
@@ -0,0 +1,124 @@
|
||||
/**
|
||||
* `impeccable live` (boot) and `live-inject` corpus: root resolution
|
||||
* (roots.json + repo pointer), config checks, framework injection.
|
||||
* Boot cases stop at config_missing so no helper server is spawned; the one
|
||||
* full boot (`live-boot-full-cycle`) stops its server in a final step.
|
||||
*/
|
||||
import { LIVE_FILES, fakeGit, rm, write } from '../live-helpers.mjs';
|
||||
|
||||
const CFG = '.impeccable/live/config.json';
|
||||
const F = LIVE_FILES;
|
||||
const PORT_NORM = [
|
||||
['localhost:\\d{4,5}', 'g', 'localhost:<PORT>'],
|
||||
['"(port|serverPort)":(\\s*)\\d{4,5}', 'g', '"$1":$2<PORT>'],
|
||||
['Stopped live server on port \\d+\\.', 'g', 'Stopped live server on port <PORT>.'],
|
||||
];
|
||||
|
||||
export default [
|
||||
// --- live.mjs (boot) ---
|
||||
{ id: 'live-help', verb: 'live', workspace: 'live-html', args: ['--help'] },
|
||||
{ id: 'live-target-missing-value', verb: 'live', workspace: 'live-html', args: ['--target'] },
|
||||
{ id: 'live-boot-html-config-missing', verb: 'live', workspace: 'live-html', setup: (ws) => rm(ws, CFG), files: F },
|
||||
{ id: 'live-boot-vite-config-missing', verb: 'live', workspace: 'live-vite', setup: (ws) => rm(ws, CFG), files: F },
|
||||
{ id: 'live-boot-vite-from-subdir', verb: 'live', workspace: 'live-vite', cwd: 'src', setup: (ws) => rm(ws, CFG), files: F },
|
||||
{ id: 'live-boot-context-missing-product', verb: 'live', workspace: 'live-vite', setup: (ws) => { rm(ws, 'PRODUCT.md'); }, files: F },
|
||||
{ id: 'live-boot-context-missing-design-empty', verb: 'live', workspace: 'live-vite', setup: (ws) => { write(ws, 'DESIGN.md', ''); }, files: F },
|
||||
{ id: 'live-boot-context-missing-both', verb: 'live', workspace: 'live-vite', setup: (ws) => { rm(ws, 'PRODUCT.md'); rm(ws, 'DESIGN.md'); }, files: F },
|
||||
{ id: 'live-boot-config-invalid-json', verb: 'live', workspace: 'live-html', setup: (ws) => write(ws, CFG, '{ nope'), files: F },
|
||||
{ id: 'live-boot-config-invalid-schema', verb: 'live', workspace: 'live-html', setup: (ws) => write(ws, CFG, JSON.stringify({ files: ['index.html'], insertBefore: '</body>', commentSyntax: 'vue' })), files: F },
|
||||
{ id: 'live-boot-sveltekit-config-missing', verb: 'live', workspace: 'live-sveltekit', setup: (ws) => rm(ws, CFG), files: F },
|
||||
{ id: 'live-boot-astro-config-missing', verb: 'live', workspace: 'live-astro', setup: (ws) => rm(ws, CFG), files: F },
|
||||
{ id: 'live-boot-monorepo-from-root', verb: 'live', workspace: 'live-monorepo', setup: (ws) => { fakeGit(ws); rm(ws, 'website/' + CFG); }, files: [...F, 'website/.impeccable/**'] },
|
||||
{ id: 'live-boot-monorepo-from-child', verb: 'live', workspace: 'live-monorepo', cwd: 'website', setup: (ws) => { fakeGit(ws); rm(ws, 'website/' + CFG); }, files: [...F, 'website/.impeccable/**'] },
|
||||
{ id: 'live-boot-monorepo-target-file', verb: 'live', workspace: 'live-monorepo', args: ['--target', 'website/src/App.jsx'], setup: (ws) => { fakeGit(ws); rm(ws, 'website/' + CFG); }, files: [...F, 'website/.impeccable/**'] },
|
||||
{ id: 'live-boot-monorepo-target-eq', verb: 'live', workspace: 'live-monorepo', args: ['--target=website'], setup: (ws) => { fakeGit(ws); rm(ws, 'website/' + CFG); }, files: [...F, 'website/.impeccable/**'] },
|
||||
{ id: 'live-boot-monorepo-no-git-from-root', verb: 'live', workspace: 'live-monorepo', setup: (ws) => rm(ws, 'website/' + CFG), files: [...F, 'website/.impeccable/**'] },
|
||||
{
|
||||
id: 'live-boot-multi-app-selection', verb: 'live', workspace: 'live-monorepo', files: [...F, 'website/.impeccable/**', 'admin/.impeccable/**'],
|
||||
setup: (ws) => { fakeGit(ws); rm(ws, 'website/' + CFG); write(ws, 'admin/astro.config.mjs', 'export default {};\n'); write(ws, 'admin/package.json', '{"name":"admin"}\n'); },
|
||||
},
|
||||
{
|
||||
id: 'live-boot-multi-app-target', verb: 'live', workspace: 'live-monorepo', args: ['--target', 'admin'], files: [...F, 'website/.impeccable/**', 'admin/.impeccable/**'],
|
||||
setup: (ws) => { fakeGit(ws); write(ws, 'admin/astro.config.mjs', 'export default {};\n'); write(ws, 'admin/package.json', '{"name":"admin"}\n'); },
|
||||
},
|
||||
{ id: 'live-boot-workspaces-selection', verb: 'live', workspace: 'live-workspaces', setup: (ws) => fakeGit(ws), files: F },
|
||||
{ id: 'live-boot-workspaces-target', verb: 'live', workspace: 'live-workspaces', args: ['--target', 'apps/web'], setup: (ws) => fakeGit(ws), files: [...F, 'apps/web/.impeccable/**'] },
|
||||
{ id: 'live-boot-workspaces-from-child', verb: 'live', workspace: 'live-workspaces', cwd: 'apps/admin', setup: (ws) => fakeGit(ws), files: [...F, 'apps/admin/.impeccable/**'] },
|
||||
{
|
||||
id: 'live-boot-pointer-accumulates', verb: 'live', workspace: 'live-monorepo', files: [...F, 'website/.impeccable/**', 'admin/.impeccable/**'],
|
||||
setup: (ws) => { fakeGit(ws); rm(ws, 'website/' + CFG); write(ws, 'admin/astro.config.mjs', 'export default {};\n'); },
|
||||
steps: [{ args: ['--target', 'website'] }, { args: ['--target', 'admin'] }, { args: ['--target', 'website'] }],
|
||||
},
|
||||
{
|
||||
// Real boot: background server + inject + drift scan, then stop. Port is
|
||||
// dynamic (first free from 8400), masked per-case.
|
||||
id: 'live-boot-full-cycle', verb: 'live', workspace: 'live-html', files: [...F, 'index.html', 'public/**'], normalize: PORT_NORM,
|
||||
steps: [{ verb: 'live' }, { verb: 'live-inject', args: ['--check'] }, { verb: 'live-server', args: ['stop'] }],
|
||||
},
|
||||
|
||||
// --- live-inject.mjs ---
|
||||
{ id: 'live-inject-help', verb: 'live-inject', workspace: 'live-html', args: ['--help'] },
|
||||
{ id: 'live-inject-check-ok', verb: 'live-inject', workspace: 'live-html', args: ['--check'] },
|
||||
{ id: 'live-inject-check-missing', verb: 'live-inject', workspace: 'live-vite', args: ['--check'], setup: (ws) => rm(ws, CFG) },
|
||||
{ id: 'live-inject-check-invalid-json', verb: 'live-inject', workspace: 'live-html', args: ['--check'], setup: (ws) => write(ws, CFG, '[1') },
|
||||
{ id: 'live-inject-check-invalid-files', verb: 'live-inject', workspace: 'live-html', args: ['--check'], setup: (ws) => write(ws, CFG, JSON.stringify({ files: [], insertBefore: '</body>', commentSyntax: 'html' })) },
|
||||
{ id: 'live-inject-check-invalid-anchor', verb: 'live-inject', workspace: 'live-html', args: ['--check'], setup: (ws) => write(ws, CFG, JSON.stringify({ files: ['index.html'], commentSyntax: 'html' })) },
|
||||
{ id: 'live-inject-check-env-config', verb: 'live-inject', workspace: 'live-html', args: ['--check'], env: { IMPECCABLE_LIVE_CONFIG: 'alt.json' }, setup: (ws) => write(ws, 'alt.json', JSON.stringify({ files: ['public/docs/guide.html'], insertAfter: '<body>', commentSyntax: 'html' })) },
|
||||
{ id: 'live-inject-missing-port', verb: 'live-inject', workspace: 'live-html', args: [], files: F },
|
||||
{ id: 'live-inject-port-nan', verb: 'live-inject', workspace: 'live-html', args: ['--port', 'abc'], files: F },
|
||||
{ id: 'live-inject-no-config', verb: 'live-inject', workspace: 'live-vite', args: ['--port', '8412'], setup: (ws) => rm(ws, CFG), files: F },
|
||||
{ id: 'live-inject-target-missing-value', verb: 'live-inject', workspace: 'live-html', args: ['--check', '--target'] },
|
||||
{ id: 'live-inject-html-tag', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412', '--token', 'tok-oracle'], files: [...F, 'index.html', 'public/**'] },
|
||||
{ id: 'live-inject-html-tag-no-token', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412'], files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-token-from-server-json', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412'], setup: (ws) => write(ws, '.impeccable/live/server.json', '{"pid":1,"port":8412,"token":"from-server-json"}'), files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-token-server-json-port-mismatch', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412'], setup: (ws) => write(ws, '.impeccable/live/server.json', '{"pid":1,"port":8499,"token":"other"}'), files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-html-repeat-and-remove', verb: 'live-inject', workspace: 'live-html', files: [...F, 'index.html', 'public/**'], steps: [{ args: ['--port', '8412', '--token', 'a'] }, { args: ['--port', '8413', '--token', 'b'] }, { args: ['--remove'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-remove-clean', verb: 'live-inject', workspace: 'live-html', args: ['--remove'], files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-file-not-found', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412', '--token', 't'], setup: (ws) => write(ws, CFG, JSON.stringify({ files: ['missing.html', 'index.html'], insertBefore: '</body>', commentSyntax: 'html' })), files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-anchor-missing-all', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412', '--token', 't'], setup: (ws) => write(ws, CFG, JSON.stringify({ files: ['index.html'], insertBefore: '</nope>', commentSyntax: 'html' })), files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-insert-after', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412', '--token', 't'], setup: (ws) => write(ws, CFG, JSON.stringify({ files: ['index.html'], exclude: ['public/**'], insertAfter: '<body>', commentSyntax: 'html' })), files: [...F, 'index.html'] },
|
||||
{ id: 'live-inject-exclude-glob', verb: 'live-inject', workspace: 'live-html', args: ['--port', '8412', '--token', 't'], setup: (ws) => write(ws, CFG, JSON.stringify({ files: ['**/*.html'], exclude: ['dist/**', 'public/no-body.html'], insertBefore: '</body>', commentSyntax: 'html' })), files: [...F, 'index.html', 'public/**', 'dist/**', 'src/**'] },
|
||||
{
|
||||
id: 'live-inject-vite-csp-meta', verb: 'live-inject', workspace: 'live-vite', files: [...F, 'index.html'],
|
||||
setup: (ws) => write(ws, 'index.html', '<!DOCTYPE html>\n<html lang="en">\n <head>\n <meta charset="UTF-8" />\n <meta\n http-equiv="Content-Security-Policy"\n content="default-src \'self\'; script-src \'self\' \'unsafe-inline\'; style-src \'self\' \'unsafe-inline\'; connect-src \'self\' ws: wss:; img-src \'self\' data:;"\n />\n <title>CSP</title>\n </head>\n <body>\n <div id="root"></div>\n <script type="module" src="/src/main.jsx"></script>\n </body>\n</html>\n'),
|
||||
steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }],
|
||||
},
|
||||
{
|
||||
id: 'live-inject-csp-meta-no-connect-src', verb: 'live-inject', workspace: 'live-html', files: [...F, 'index.html'],
|
||||
setup: (ws) => write(ws, 'index.html', '<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv="Content-Security-Policy" content="default-src \'self\'; script-src \'self\'">\n</head>\n<body>\n<h1 class="hero-title">Hi</h1>\n</body>\n</html>\n'),
|
||||
args: ['--port', '8412', '--token', 't'],
|
||||
},
|
||||
{ id: 'live-inject-next-jsx', verb: 'live-inject', workspace: 'live-next', files: [...F, 'app/**'], steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-astro-inline', verb: 'live-inject', workspace: 'live-astro', files: [...F, 'src/**'], steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-sveltekit-adapter', verb: 'live-inject', workspace: 'live-sveltekit', files: [...F, 'src/**'], steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-sveltekit-existing-layout', verb: 'live-inject', workspace: 'live-sveltekit', files: [...F, 'src/**'], setup: (ws) => write(ws, 'src/routes/+layout.svelte', '<script>\n import \'../app.css\';\n let { children } = $props();\n</script>\n\n<nav>Top</nav>\n{@render children()}\n'), steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-nuxt-adapter', verb: 'live-inject', workspace: 'live-nuxt', files: [...F, 'plugins/**', 'app/**'], steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-nuxt-plugin-conflict', verb: 'live-inject', workspace: 'live-nuxt', files: [...F, 'plugins/**'], setup: (ws) => write(ws, 'plugins/impeccable-live.client.ts', 'export default {};\n'), steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-nuxt-srcdir', verb: 'live-inject', workspace: 'live-nuxt', files: [...F, 'app/**', 'plugins/**'], setup: (ws) => { write(ws, 'nuxt.config.ts', "export default defineNuxtConfig({ srcDir: 'app/' });\n"); write(ws, 'app/app.vue', '<template><body><NuxtPage /></body></template>\n'); write(ws, CFG, JSON.stringify({ files: ['app/app.vue'], insertBefore: '</body>', commentSyntax: 'html' })); }, args: ['--port', '8412', '--token', 't'] },
|
||||
{ id: 'live-inject-tanstack-adapter', verb: 'live-inject', workspace: 'live-tanstack', files: [...F, 'src/**'], steps: [{ args: ['--port', '8412', '--token', 't'] }, { args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }] },
|
||||
{ id: 'live-inject-tanstack-component-conflict', verb: 'live-inject', workspace: 'live-tanstack', files: [...F, 'src/**'], setup: (ws) => write(ws, 'src/impeccable/ImpeccableLiveRoot.tsx', 'export default function X() { return null; }\n'), args: ['--port', '8412', '--token', 't'] },
|
||||
{
|
||||
id: 'live-inject-monorepo-repo-root-ignore', verb: 'live-inject', workspace: 'live-monorepo', cwd: 'website', files: [...F, 'website/.impeccable/**', 'website/.gitignore', 'website/index.html'],
|
||||
setup: (ws) => { fakeGit(ws); write(ws, 'website/.impeccable/live/roots.json', JSON.stringify({ version: 1, appRoot: `${ws}/website`, repoRoot: ws, contextRoot: ws, sessionRoot: `${ws}/website/.impeccable/live`, productPath: `${ws}/PRODUCT.md`, designPath: `${ws}/DESIGN.md`, resolvedFrom: 'cwd' }, null, 2)); },
|
||||
args: ['--port', '8412', '--token', 't'],
|
||||
},
|
||||
{
|
||||
id: 'live-inject-from-repo-root-via-roots', verb: 'live-inject', workspace: 'live-monorepo', files: [...F, 'website/.impeccable/**', 'website/.gitignore', 'website/index.html'],
|
||||
setup: (ws) => { fakeGit(ws); write(ws, 'website/.impeccable/live/roots.json', JSON.stringify({ version: 1, appRoot: `${ws}/website`, repoRoot: ws, contextRoot: ws, sessionRoot: `${ws}/website/.impeccable/live`, productPath: `${ws}/PRODUCT.md`, designPath: `${ws}/DESIGN.md`, resolvedFrom: 'cwd' }, null, 2)); write(ws, '.impeccable/live/app-root.json', JSON.stringify({ version: 2, appRoots: [{ appRoot: `${ws}/website`, bootedAt: '2026-08-01T00:00:00.000Z' }] })); },
|
||||
steps: [{ args: ['--check'] }, { args: ['--port', '8412', '--token', 't'] }, { args: ['--remove'] }],
|
||||
},
|
||||
{
|
||||
id: 'live-inject-heals-orphan-journal', verb: 'live-inject', workspace: 'live-html', files: [...F, 'index.html', 'src/**'],
|
||||
setup: (ws) => {
|
||||
write(ws, 'src/lib/impeccable/ImpeccableLiveRoot.svelte', '<!-- impeccable-live-root -->\n<div></div>\n');
|
||||
write(ws, 'src/keep.svelte', '<div>no marker</div>\n');
|
||||
write(ws, '.impeccable/live/inject-journal.json', JSON.stringify({ version: 1, appRoot: ws, framework: 'sveltekit', port: 8400, pid: 1, recordedAt: '2026-08-01T00:00:00.000Z', artifacts: [
|
||||
{ kind: 'created', path: 'src/lib/impeccable/ImpeccableLiveRoot.svelte', marker: 'impeccable-live-root', pruneTo: 'src' },
|
||||
{ kind: 'created', path: 'src/keep.svelte', marker: 'impeccable-live-root', pruneTo: 'src' },
|
||||
{ kind: 'created', path: '../outside.svelte', marker: 'impeccable-live-root' },
|
||||
{ kind: 'patched', path: 'public/no-body.html', patch: 'live-tag', markers: ['impeccable-live-start'] },
|
||||
] }, null, 2) + '\n');
|
||||
},
|
||||
args: ['--port', '8412', '--token', 't'],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* `live-status`, `live-resume`, `live-complete`, `live-poll`, `live-server`
|
||||
* against staged durable session state (journals under
|
||||
* .impeccable/live/sessions). No helper server runs except in the daemon case.
|
||||
*/
|
||||
import { LIVE_FILES, rm, stageWrappedHtml, write, writeJournal } from '../live-helpers.mjs';
|
||||
|
||||
const F = LIVE_FILES;
|
||||
const ID = 'ab12cd34';
|
||||
const GEN = { type: 'generate', action: 'bolder', count: 3, pageUrl: '/', element: { tagName: 'h1', id: 'hero', classes: ['hero-title'], textContent: 'Oracle Fixture', outerHTML: '<h1 id="hero" class="hero-title">Oracle Fixture</h1>' }, clientSentAt: 1754042400000 };
|
||||
const S = (id, verb, args, setup, extra = {}) => ({ id, verb, workspace: 'live-html', args, setup, files: F, ...extra });
|
||||
|
||||
const generating = (ws) => writeJournal(ws, ID, [GEN, { type: 'agent_phase', phase: 'picked_up', at: 1754042401000 }]);
|
||||
const carbonizeRequired = (ws) => writeJournal(ws, ID, [GEN, { type: 'agent_done', file: 'index.html', sourceEventType: 'generate', carbonize: false, arrivedVariants: 3 }, { type: 'accept', variantId: '2', pageUrl: '/', paramValues: { face: 'serif' } }, { type: 'agent_done', file: 'index.html', sourceEventType: 'accept', carbonize: true }]);
|
||||
const acceptRequested = (ws) => writeJournal(ws, ID, [GEN, { type: 'agent_done', file: 'index.html', sourceEventType: 'generate', arrivedVariants: 3 }, { type: 'checkpoint', revision: 3, revisionDomain: 'browser', owner: 'deadbeef', phase: 'cycling', reason: 'variants_ready', pageUrl: '/', expectedVariants: 3, arrivedVariants: 3, visibleVariant: 1, paramValues: { lightness: 0.5 } }, { type: 'accept', variantId: '1', pageUrl: '/', paramValues: { lightness: 0.6 } }]);
|
||||
const manualApply = (ws) => writeJournal(ws, 'c0ffee01', [{ type: 'manual_edit_apply', pageUrl: '/', chunk: { index: 1, total: 2, opCount: 2, totalOpCount: 3 }, batch: { version: 1, pageUrl: '/', count: 1, entries: [{ id: 'e1', pageUrl: '/', ops: [{ ref: 'h1', tag: 'h1', originalText: 'A', newText: 'B', sourceHint: { file: 'index.html', line: 12 } }, { ref: 'p', tag: 'p', originalText: 'C', newText: 'D' }] }] }, evidencePath: '/tmp/x.json' }]);
|
||||
const mountFailed = (ws) => writeJournal(ws, ID, [GEN, { type: 'agent_done', file: 'index.html', arrivedVariants: 3 }, { type: 'variant_mount_failed', variant: 2, url: 'http://localhost:5173/node_modules/.impeccable-live/ab12cd34/r1/v2.svelte', error: 'SyntaxError: unexpected token' }]);
|
||||
const completed = (ws) => writeJournal(ws, ID, [GEN, { type: 'discard' }, { type: 'discarded' }]);
|
||||
const twoSessions = (ws) => { generating(ws); writeJournal(ws, 'bb22cc33', [{ type: 'steer', message: 'make the hero calmer', pageUrl: '/' }]); completed(ws); writeJournal(ws, 'dd44ee55', [GEN, { type: 'complete', file: 'index.html' }]); };
|
||||
const staleServerJson = (ws) => write(ws, '.impeccable/live/server.json', '{"pid":2147483646,"port":8497,"token":"stale"}');
|
||||
const aliveServerJson = (ws) => write(ws, '.impeccable/live/server.json', JSON.stringify({ pid: process.pid, port: 65531, token: 'oracle-token' }));
|
||||
|
||||
export default [
|
||||
// --- live-status ---
|
||||
S('live-status-empty', 'live-status', [], null),
|
||||
S('live-status-generating', 'live-status', [], generating),
|
||||
S('live-status-many-sessions', 'live-status', [], twoSessions),
|
||||
S('live-status-manual-apply', 'live-status', [], manualApply),
|
||||
S('live-status-mount-failed', 'live-status', [], mountFailed),
|
||||
S('live-status-stale-server-json', 'live-status', [], (ws) => { generating(ws); staleServerJson(ws); }),
|
||||
S('live-status-legacy-sessions-dir', 'live-status', [], (ws) => write(ws, '.impeccable-live/sessions/legacy01.jsonl', JSON.stringify({ seq: 1, id: 'legacy01', type: 'generate', ts: '2026-08-01T10:00:00.000Z', event: { id: 'legacy01', ...GEN } }) + '\n')),
|
||||
S('live-status-target-missing-value', 'live-status', ['--target'], null),
|
||||
S('live-status-from-subdir', 'live-status', [], generating, { cwd: 'src' }),
|
||||
// --- live-resume ---
|
||||
S('live-resume-help', 'live-resume', ['--help'], null),
|
||||
S('live-resume-none', 'live-resume', [], null),
|
||||
S('live-resume-generating', 'live-resume', [], generating),
|
||||
S('live-resume-by-id', 'live-resume', ['--id', 'bb22cc33'], twoSessions),
|
||||
S('live-resume-by-id-eq', 'live-resume', ['--id=dd44ee55'], twoSessions),
|
||||
S('live-resume-unknown-id', 'live-resume', ['--id', 'zz99zz99'], generating),
|
||||
S('live-resume-first-active-sorted', 'live-resume', [], twoSessions),
|
||||
S('live-resume-carbonize-required', 'live-resume', [], carbonizeRequired),
|
||||
S('live-resume-accept-requested', 'live-resume', [], acceptRequested),
|
||||
S('live-resume-manual-apply', 'live-resume', [], manualApply),
|
||||
S('live-resume-mount-failed', 'live-resume', [], mountFailed),
|
||||
S('live-resume-completed-only', 'live-resume', [], completed),
|
||||
// --- live-complete ---
|
||||
S('live-complete-help', 'live-complete', ['--help'], null),
|
||||
S('live-complete-no-id', 'live-complete', [], null),
|
||||
S('live-complete-clean', 'live-complete', ['--id', ID], carbonizeRequired),
|
||||
S('live-complete-source-dirty', 'live-complete', ['--id', ID], (ws) => { carbonizeRequired(ws); stageWrappedHtml(ws); }, { files: [...F, 'index.html'] }),
|
||||
S('live-complete-source-dirty-force', 'live-complete', ['--id', ID, '--force'], (ws) => { carbonizeRequired(ws); stageWrappedHtml(ws); }),
|
||||
S('live-complete-source-dirty-carbonize-leftovers', 'live-complete', ['--id', ID], (ws) => {
|
||||
carbonizeRequired(ws);
|
||||
write(ws, 'index.html', '<html><body>\n<!-- impeccable-carbonize-start ab12cd34 -->\n<style>h1 { color: var(--p-lightness, 0.5); }</style>\n<!-- impeccable-param-values ab12cd34: {"lightness":0.7} -->\n<!-- impeccable-carbonize-end ab12cd34 -->\n<h1 data-p-italic="on" style="--impeccable-variant-ready: 1">Hi</h1>\n</body></html>\n');
|
||||
}),
|
||||
S('live-complete-discarded', 'live-complete', ['--id', ID, '--discarded'], generating),
|
||||
S('live-complete-discard-alias', 'live-complete', ['--id=' + ID, '--discard'], generating),
|
||||
S('live-complete-error', 'live-complete', ['--id', ID, '--error', 'variant generation crashed'], generating),
|
||||
S('live-complete-error-eq', 'live-complete', ['--id', ID, '--error=boom'], generating),
|
||||
S('live-complete-error-no-message', 'live-complete', ['--id', ID, '--error'], generating),
|
||||
S('live-complete-unknown-session', 'live-complete', ['--id', 'zz99zz99'], null),
|
||||
S('live-complete-twice', 'live-complete', ['--id', ID], carbonizeRequired, { steps: [{}, {}] }),
|
||||
S('live-complete-source-in-node-modules', 'live-complete', ['--id', ID], (ws) => writeJournal(ws, ID, [GEN, { type: 'agent_done', file: 'node_modules/.impeccable-live/ab12cd34/manifest.json', sourceFile: 'src/routes/+page.svelte', previewMode: 'svelte-component' }])),
|
||||
S('live-complete-source-missing-file', 'live-complete', ['--id', ID], (ws) => writeJournal(ws, ID, [GEN, { type: 'agent_done', file: 'src/gone.html' }])),
|
||||
// --- live-poll (no server, or a server.json whose pid is the recorder) ---
|
||||
S('live-poll-help', 'live-poll', ['--help'], null),
|
||||
S('live-poll-no-server', 'live-poll', [], null),
|
||||
S('live-poll-no-server-stale-record', 'live-poll', [], staleServerJson),
|
||||
S('live-poll-reply-missing-id', 'live-poll', ['--reply'], aliveServerJson),
|
||||
S('live-poll-reply-status-as-id', 'live-poll', ['--reply', 'done'], aliveServerJson),
|
||||
S('live-poll-reply-missing-status', 'live-poll', ['--reply', ID], aliveServerJson),
|
||||
S('live-poll-reply-status-flag', 'live-poll', ['--reply', ID, '--file', 'x'], aliveServerJson),
|
||||
S('live-poll-reply-bad-data-json', 'live-poll', ['--reply', ID, 'done', '--data', '{nope'], aliveServerJson),
|
||||
// Port 65531 on loopback: connection refused (nothing listens there).
|
||||
S('live-poll-reply-connection-refused', 'live-poll', ['--reply', ID, 'done'], aliveServerJson),
|
||||
S('live-poll-connection-refused', 'live-poll', ['--timeout=200'], aliveServerJson),
|
||||
// --- live-server (no process started) ---
|
||||
S('live-server-help', 'live-server', ['--help'], null),
|
||||
S('live-server-stop-none', 'live-server', ['stop'], null, { files: [...F, 'index.html'] }),
|
||||
S('live-server-stop-none-keep-inject', 'live-server', ['stop', '--keep-inject'], null),
|
||||
S('live-server-stop-removes-tag', 'live-server', ['stop'], (ws) => write(ws, 'index.html', '<html><body>\n<!-- impeccable-live-start -->\n<script src="http://localhost:8412/live.js?token=t"></script>\n<!-- impeccable-live-end -->\n</body></html>\n'), { files: [...F, 'index.html'] }),
|
||||
{ id: 'live-server-stop-no-config', verb: 'live-server', workspace: 'live-vite', args: ['stop'], setup: (ws) => rm(ws, '.impeccable/live/config.json'), files: F },
|
||||
{ id: 'live-server-already-running', verb: 'live-server', workspace: 'live-html', args: [], setup: aliveServerJson, files: F },
|
||||
{ id: 'live-server-target-missing-value', verb: 'live-server', workspace: 'live-html', args: ['--target'] },
|
||||
];
|
||||
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* `live-wrap` and `live-insert` corpus: locator errors, replace/insert
|
||||
* wrappers across HTML / JSX / TSX / Astro / Vue / Svelte, deferred writes,
|
||||
* --text disambiguation, generated-file guards, buffer-aware originals.
|
||||
*/
|
||||
import { LIVE_FILES, linkSvelte, write, writeBuffer } from '../live-helpers.mjs';
|
||||
|
||||
const F = LIVE_FILES;
|
||||
const W = (id, workspace, args, extra = {}) => ({ id, verb: 'live-wrap', workspace, args, files: [...F, ...(extra.snap || [])], ...extra });
|
||||
const I = (id, workspace, args, extra = {}) => ({ id, verb: 'live-insert', workspace, args, files: [...F, ...(extra.snap || [])], ...extra });
|
||||
const buffered = (ws, ops, pageUrl = '/') => writeBuffer(ws, [{ id: 'e1', pageUrl, element: { tagName: 'p' }, ops, stagedAt: '2026-08-01T00:00:00.000Z' }]);
|
||||
|
||||
export default [
|
||||
// --- argument / usage paths ---
|
||||
W('live-wrap-help', 'live-html', ['--help']),
|
||||
W('live-wrap-missing-id', 'live-html', ['--classes', 'hero-title']),
|
||||
W('live-wrap-missing-locator', 'live-html', ['--id', 'ab12cd34', '--tag', 'h1']),
|
||||
W('live-wrap-target-missing-value', 'live-html', ['--id', 'ab12cd34', '--classes', 'x', '--target']),
|
||||
W('live-wrap-element-not-found', 'live-html', ['--id', 'ab12cd34', '--classes', 'no-such-class']),
|
||||
W('live-wrap-element-not-in-source', 'live-html', ['--id', 'ab12cd34', '--classes', 'built-title']),
|
||||
W('live-wrap-file-is-generated', 'live-html', ['--id', 'ab12cd34', '--classes', 'built-title', '--file', 'dist/generated.html']),
|
||||
W('live-wrap-file-element-missing', 'live-html', ['--id', 'ab12cd34', '--classes', 'hero-title', '--file', 'src/cards.html']),
|
||||
// --- HTML replace wrappers ---
|
||||
W('live-wrap-html-by-id', 'live-html', ['--id', 'ab12cd34', '--count', '3', '--element-id', 'hero'], { snap: ['index.html'] }),
|
||||
W('live-wrap-html-by-classes-tag', 'live-html', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['index.html'] }),
|
||||
W('live-wrap-html-by-query', 'live-html', ['--id', 'ab12cd34', '--count', '2', '--query', 'hero-hook'], { snap: ['index.html'] }),
|
||||
W('live-wrap-html-eq-form', 'live-html', ['--id=ab12cd34', '--count=1', '--element-id=features'], { snap: ['index.html'] }),
|
||||
W('live-wrap-html-multiline', 'live-html', ['--id', 'ab12cd34', '--classes', 'side-note', '--tag', 'aside'], { snap: ['index.html'] }),
|
||||
W('live-wrap-html-deferred', 'live-html', ['--id', 'ab12cd34', '--classes', 'side-note', '--tag', 'aside', '--defer-source-write'], { snap: ['index.html'] }),
|
||||
W('live-wrap-html-explicit-file', 'live-html', ['--id', 'ab12cd34', '--classes', 'doc-title', '--file', 'public/docs/guide.html'], { snap: ['public/**'] }),
|
||||
W('live-wrap-html-page-url-no-pending', 'live-html', ['--id', 'ab12cd34', '--element-id', 'hero', '--page-url', '/'], { snap: ['index.html'] }),
|
||||
// --- --text disambiguation (src/cards.html has three identical cards) ---
|
||||
W('live-wrap-text-picks-second', 'live-html', ['--id', 'ab12cd34', '--classes', 'card', '--tag', 'div', '--text', 'Beta card Second card body copy.', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
W('live-wrap-text-ambiguous', 'live-html', ['--id', 'ab12cd34', '--classes', 'card-body', '--tag', 'p', '--text', 'card body copy', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
W('live-wrap-text-not-in-source', 'live-html', ['--id', 'ab12cd34', '--classes', 'card', '--tag', 'div', '--text', 'Rendered from props elsewhere', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
W('live-wrap-text-short-falls-back', 'live-html', ['--id', 'ab12cd34', '--classes', 'card', '--tag', 'div', '--text', 'zzz', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
W('live-wrap-no-text-first-match', 'live-html', ['--id', 'ab12cd34', '--classes', 'card', '--tag', 'div', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
// --- JSX / TSX / Astro / Vue ---
|
||||
W('live-wrap-jsx', 'live-vite', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'] }),
|
||||
W('live-wrap-jsx-deferred', 'live-vite', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1', '--defer-source-write'], { snap: ['src/**'] }),
|
||||
W('live-wrap-jsx-mapped-item', 'live-vite', ['--id', 'ab12cd34', '--classes', 'item-row', '--tag', 'li', '--text', 'First'], { snap: ['src/**'] }),
|
||||
W('live-wrap-tsx-multiline', 'live-vite', ['--id', 'ab12cd34', '--classes', 'panel', '--tag', 'section'], { snap: ['src/**'] }),
|
||||
W('live-wrap-astro', 'live-astro', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'] }),
|
||||
W('live-wrap-astro-deferred', 'live-astro', ['--id', 'ab12cd34', '--element-id', 'features', '--defer-source-write'], { snap: ['src/**'] }),
|
||||
W('live-wrap-vue', 'live-nuxt', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['pages/**'] }),
|
||||
W('live-wrap-tanstack-tsx', 'live-tanstack', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'] }),
|
||||
W('live-wrap-monorepo-child-from-root', 'live-monorepo', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1', '--target', 'website'], { snap: ['website/src/**', 'website/.impeccable/**'] }),
|
||||
// --- Svelte: no compiler -> source-preview fallback; with compiler -> component preview ---
|
||||
W('live-wrap-svelte-no-compiler', 'live-sveltekit', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'] }),
|
||||
W('live-wrap-svelte-env-disabled', 'live-sveltekit', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'], env: { IMPECCABLE_LIVE_SVELTE_COMPONENT: '0' }, setup: linkSvelte }),
|
||||
W('live-wrap-svelte-component', 'live-sveltekit', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'], setup: linkSvelte }),
|
||||
W('live-wrap-svelte-component-each', 'live-sveltekit', ['--id', 'ab12cd34', '--classes', 'expense-list', '--tag', 'ul'], { snap: ['src/**'], setup: linkSvelte }),
|
||||
W('live-wrap-svelte-component-refused-script', 'live-sveltekit', ['--id', 'ab12cd34', '--classes', 'page', '--tag', 'main'], {
|
||||
snap: ['src/**'], setup: (ws) => { linkSvelte(ws); write(ws, 'src/routes/+page.svelte', '<main class="page">\n <script>let x = 1;</script>\n <h1>Hi</h1>\n</main>\n'); },
|
||||
}),
|
||||
W('live-wrap-svelte-component-twice', 'live-sveltekit', ['--id', 'ab12cd34', '--classes', 'hero-title', '--tag', 'h1'], { snap: ['src/**'], setup: linkSvelte, steps: [{}, {}] }),
|
||||
// --- pending manual edits ---
|
||||
W('live-wrap-pending-edits-no-page-url', 'live-html', ['--id', 'ab12cd34', '--classes', 'hero-hook', '--tag', 'p'], {
|
||||
snap: ['index.html'], setup: (ws) => buffered(ws, [{ ref: 'main>p.hero-hook', tag: 'p', originalText: 'Minimal static page for oracle live-mode goldens.', newText: 'Edited hook copy.' }]),
|
||||
}),
|
||||
W('live-wrap-pending-edits-applied', 'live-html', ['--id', 'ab12cd34', '--classes', 'hero-hook', '--tag', 'p', '--page-url', '/'], {
|
||||
snap: ['index.html'], setup: (ws) => buffered(ws, [{ ref: 'main>p.hero-hook', tag: 'p', originalText: 'Minimal static page for oracle live-mode goldens.', newText: 'Edited hook copy.' }]),
|
||||
}),
|
||||
W('live-wrap-pending-edits-other-page', 'live-html', ['--id', 'ab12cd34', '--classes', 'hero-hook', '--tag', 'p', '--page-url', '/about'], {
|
||||
snap: ['index.html'], setup: (ws) => buffered(ws, [{ ref: 'main>p.hero-hook', tag: 'p', originalText: 'Minimal static page for oracle live-mode goldens.', newText: 'Edited hook copy.' }]),
|
||||
}),
|
||||
W('live-wrap-pending-edits-ambiguous', 'live-html', ['--id', 'ab12cd34', '--classes', 'cards', '--tag', 'section', '--file', 'src/cards.html', '--page-url', '/'], {
|
||||
snap: ['src/**'], setup: (ws) => buffered(ws, [{ ref: 'section>div>p', tag: 'p', originalText: 'card body copy.', newText: 'card body text.' }]),
|
||||
}),
|
||||
W('live-wrap-pending-edits-unrelated', 'live-html', ['--id', 'ab12cd34', '--element-id', 'hero'], {
|
||||
snap: ['index.html'], setup: (ws) => buffered(ws, [{ ref: 'x', tag: 'p', originalText: 'Some other page copy', newText: 'x' }]),
|
||||
}),
|
||||
|
||||
// --- live-insert.mjs ---
|
||||
I('live-insert-help', 'live-html', ['--help']),
|
||||
I('live-insert-missing-id', 'live-html', ['--position', 'after', '--element-id', 'features']),
|
||||
I('live-insert-missing-position', 'live-html', ['--id', 'ab12cd34', '--element-id', 'features']),
|
||||
I('live-insert-invalid-position', 'live-html', ['--id', 'ab12cd34', '--position', 'below', '--element-id', 'features']),
|
||||
I('live-insert-missing-locator', 'live-html', ['--id', 'ab12cd34', '--position', 'after']),
|
||||
I('live-insert-element-not-found', 'live-html', ['--id', 'ab12cd34', '--position', 'after', '--classes', 'nope']),
|
||||
I('live-insert-element-not-in-source', 'live-html', ['--id', 'ab12cd34', '--position', 'after', '--classes', 'built-title']),
|
||||
I('live-insert-file-is-generated', 'live-html', ['--id', 'ab12cd34', '--position', 'after', '--classes', 'built-title', '--file', 'dist/generated.html']),
|
||||
I('live-insert-html-after', 'live-html', ['--id', 'ab12cd34', '--position', 'after', '--element-id', 'features'], { snap: ['index.html'] }),
|
||||
I('live-insert-html-before', 'live-html', ['--id', 'ab12cd34', '--count', '2', '--position', 'before', '--element-id', 'features'], { snap: ['index.html'] }),
|
||||
I('live-insert-html-deferred', 'live-html', ['--id', 'ab12cd34', '--position', 'after', '--classes', 'side-note', '--tag', 'aside', '--defer-source-write'], { snap: ['index.html'] }),
|
||||
I('live-insert-html-text-ambiguous', 'live-html', ['--id', 'ab12cd34', '--position', 'after', '--classes', 'card-body', '--tag', 'p', '--text', 'card body copy', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
I('live-insert-html-text-picks', 'live-html', ['--id', 'ab12cd34', '--position', 'before', '--classes', 'card', '--tag', 'div', '--text', 'Gamma card Third card body copy.', '--file', 'src/cards.html'], { snap: ['src/**'] }),
|
||||
I('live-insert-jsx-after', 'live-vite', ['--id', 'ab12cd34', '--position', 'after', '--element-id', 'features'], { snap: ['src/**'] }),
|
||||
I('live-insert-jsx-before-deferred', 'live-vite', ['--id', 'ab12cd34', '--position', 'before', '--classes', 'hero-title', '--tag', 'h1', '--defer-source-write'], { snap: ['src/**'] }),
|
||||
I('live-insert-astro-after', 'live-astro', ['--id', 'ab12cd34', '--position', 'after', '--element-id', 'features'], { snap: ['src/**'] }),
|
||||
I('live-insert-vue-after', 'live-nuxt', ['--id', 'ab12cd34', '--position', 'after', '--classes', 'hero-hook', '--tag', 'p'], { snap: ['pages/**'] }),
|
||||
I('live-insert-svelte-component', 'live-sveltekit', ['--id', 'ab12cd34', '--position', 'after', '--element-id', 'features'], { snap: ['src/**'] }),
|
||||
I('live-insert-svelte-env-disabled', 'live-sveltekit', ['--id', 'ab12cd34', '--position', 'after', '--element-id', 'features'], { snap: ['src/**'], env: { IMPECCABLE_LIVE_SVELTE_COMPONENT: 'false' } }),
|
||||
];
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"error\":\"Session markers not found for id: ab12cd34\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"dist/generated.html": "<!-- @generated by build.js. DO NOT EDIT. -->\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-variants-start ab12cd34 -->\n <div data-impeccable-variants=\"ab12cd34\" data-impeccable-variant-count=\"3\" style=\"display: contents\">\n <!-- Original -->\n <div data-impeccable-variant=\"original\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variants: insert below this line -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- Variant 1 -->\n <div data-impeccable-variant=\"1\" data-impeccable-params='[{\"id\":\"lightness\",\"kind\":\"range\",\"min\":0.3,\"max\":0.7,\"step\":0.05,\"default\":0.5,\"label\":\"Lightness\"}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variant 2 -->\n <div data-impeccable-variant=\"2\" style=\"display: none\" data-impeccable-params='[{\"id\":\"face\",\"kind\":\"steps\",\"default\":\"sans\",\"label\":\"Face\",\"options\":[{\"value\":\"sans\",\"label\":\"Sans\"},{\"value\":\"serif\",\"label\":\"Serif\"},{\"value\":\"mono\",\"label\":\"Mono\"}]}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variant 3 -->\n <div data-impeccable-variant=\"3\" style=\"display: none\" data-impeccable-params='[{\"id\":\"italic\",\"kind\":\"toggle\",\"default\":false,\"label\":\"Italic\"}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n </div>\n <!-- impeccable-variants-end ab12cd34 -->\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "Usage: node live-accept.mjs [options]\n\nDeterministic accept/discard for live variant sessions.\n\nModes:\n --discard Remove variants, restore original\n --variant N Accept variant N, discard the rest\n\nRequired:\n --id SESSION_ID Session ID of the variant wrapper\n\nOptions:\n --page-url URL Current browser page URL; scopes staged copy-edit cleanup\n --defer-source-write\n Deprecated compatibility flag. Svelte component accepts\n now write the real source immediately.\n\nOutput (JSON):\n { handled, file, carbonize }\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"mode\":\"error\",\"error\":\"accept_receipt_conflict\",\"priorOperation\":\"discard\",\"priorVariantId\":null}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"discard\",\n \"variantId\": null,\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"discard\",\n \"variantId\": null,\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"2\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"2\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"2\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"mode\":\"error\",\"error\":\"accept_receipt_conflict\",\"priorOperation\":\"accept\",\"priorVariantId\":\"1\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"mode\":\"error\",\"error\":\"accept_receipt_conflict\",\"priorOperation\":\"accept\",\"priorVariantId\":\"1\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\",\"alreadyApplied\":true}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-param-values ab12cd34: {\"lightness\":0.65} -->\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"2\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-param-values ab12cd34: {\"face\":\"serif\"} -->\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"2\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"3\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-param-values ab12cd34: {\"italic\":true} -->\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"3\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"file\":\"index.html\",\"error\":\"Variant 9 not found\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-variants-start ab12cd34 -->\n <div data-impeccable-variants=\"ab12cd34\" data-impeccable-variant-count=\"3\" style=\"display: contents\">\n <!-- Original -->\n <div data-impeccable-variant=\"original\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variants: insert below this line -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- Variant 1 -->\n <div data-impeccable-variant=\"1\" data-impeccable-params='[{\"id\":\"lightness\",\"kind\":\"range\",\"min\":0.3,\"max\":0.7,\"step\":0.05,\"default\":0.5,\"label\":\"Lightness\"}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variant 2 -->\n <div data-impeccable-variant=\"2\" style=\"display: none\" data-impeccable-params='[{\"id\":\"face\",\"kind\":\"steps\",\"default\":\"sans\",\"label\":\"Face\",\"options\":[{\"value\":\"sans\",\"label\":\"Sans\"},{\"value\":\"serif\",\"label\":\"Serif\"},{\"value\":\"mono\",\"label\":\"Mono\"}]}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variant 3 -->\n <div data-impeccable-variant=\"3\" style=\"display: none\" data-impeccable-params='[{\"id\":\"italic\",\"kind\":\"toggle\",\"default\":false,\"label\":\"Italic\"}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n </div>\n <!-- impeccable-variants-end ab12cd34 -->\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "",
|
||||
"stderr": "Invalid --id\n",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "",
|
||||
"stderr": "Invalid --variant\n",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "",
|
||||
"stderr": "Invalid --variant\n",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"src/App.jsx\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"discard\",\n \"variantId\": null,\n \"result\": {\n \"handled\": true,\n \"file\": \"src/App.jsx\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"src/App.jsx": "export default function App() {\n return (\n <main className=\"page\">\n\n <h1 className=\"hero-title\">Vite Fixture</h1>\n\n <p className=\"hero-hook\">Minimal React tree for oracle live-mode goldens.</p>\n <section id=\"features\" className=\"feature-grid\">\n <article className=\"feature-card\">One</article>\n <article className=\"feature-card\">Two</article>\n </section>\n <ul className=\"item-list\">\n {items.map((item) => (\n <li key={item.id} className=\"item-row\">{item.title}</li>\n ))}\n </ul>\n </main>\n );\n}\n\nconst items = [\n { id: 1, title: 'First' },\n { id: 2, title: 'Second' },\n];\n",
|
||||
"src/main.jsx": "import { createRoot } from 'react-dom/client';\nimport App from './App.jsx';\n\ncreateRoot(document.getElementById('root')).render(<App />);\n",
|
||||
"src/Panel.tsx": "type PanelProps = { title: string; children?: React.ReactNode };\n\nexport function Panel({ title, children }: PanelProps) {\n return (\n <section className=\"panel\">\n <header className=\"panel-header\">\n <h2 className=\"panel-title\">{title}</h2>\n </header>\n <div className=\"panel-body\">{children}</div>\n </section>\n );\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"App.jsx\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in App.jsx. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"src/.impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"2\",\n \"result\": {\n \"handled\": true,\n \"file\": \"App.jsx\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in App.jsx. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
"src/App.jsx": "export default function App() {\n return (\n <main className=\"page\">\n <div data-impeccable-carbonize=\"ab12cd34\" style={{ display: \"contents\" }}>\n {/* impeccable-carbonize-start ab12cd34 */}\n <style data-impeccable-css=\"ab12cd34\">{`\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n `}</style>\n {/* impeccable-carbonize-end ab12cd34 */}\n <div data-impeccable-variant=\"2\" style={{ display: 'contents' }}>\n <h1 className=\"hero-title\">Vite Fixture</h1>\n </div>\n </div>\n <p className=\"hero-hook\">Minimal React tree for oracle live-mode goldens.</p>\n <section id=\"features\" className=\"feature-grid\">\n <article className=\"feature-card\">One</article>\n <article className=\"feature-card\">Two</article>\n </section>\n <ul className=\"item-list\">\n {items.map((item) => (\n <li key={item.id} className=\"item-row\">{item.title}</li>\n ))}\n </ul>\n </main>\n );\n}\n\nconst items = [\n { id: 1, title: 'First' },\n { id: 2, title: 'Second' },\n];\n",
|
||||
"src/main.jsx": "import { createRoot } from 'react-dom/client';\nimport App from './App.jsx';\n\ncreateRoot(document.getElementById('root')).render(<App />);\n",
|
||||
"src/Panel.tsx": "type PanelProps = { title: string; children?: React.ReactNode };\n\nexport function Panel({ title, children }: PanelProps) {\n return (\n <section className=\"panel\">\n <header className=\"panel-header\">\n <h2 className=\"panel-title\">{title}</h2>\n </header>\n <div className=\"panel-body\">{children}</div>\n </section>\n );\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"src/App.jsx\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in src/App.jsx. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"src/App.jsx\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in src/App.jsx. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"src/App.jsx": "export default function App() {\n return (\n <main className=\"page\">\n <div data-impeccable-carbonize=\"ab12cd34\" style={{ display: \"contents\" }}>\n {/* impeccable-carbonize-start ab12cd34 */}\n <style data-impeccable-css=\"ab12cd34\">{`\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n `}</style>\n {/* impeccable-param-values ab12cd34: {\"lightness\":0.4} */}\n {/* impeccable-carbonize-end ab12cd34 */}\n <div data-impeccable-variant=\"1\" style={{ display: 'contents' }}>\n <h1 className=\"hero-title\">Vite Fixture</h1>\n </div>\n </div>\n <p className=\"hero-hook\">Minimal React tree for oracle live-mode goldens.</p>\n <section id=\"features\" className=\"feature-grid\">\n <article className=\"feature-card\">One</article>\n <article className=\"feature-card\">Two</article>\n </section>\n <ul className=\"item-list\">\n {items.map((item) => (\n <li key={item.id} className=\"item-row\">{item.title}</li>\n ))}\n </ul>\n </main>\n );\n}\n\nconst items = [\n { id: 1, title: 'First' },\n { id: 2, title: 'Second' },\n];\n",
|
||||
"src/main.jsx": "import { createRoot } from 'react-dom/client';\nimport App from './App.jsx';\n\ncreateRoot(document.getElementById('root')).render(<App />);\n",
|
||||
"src/Panel.tsx": "type PanelProps = { title: string; children?: React.ReactNode };\n\nexport function Panel({ title, children }: PanelProps) {\n return (\n <section className=\"panel\">\n <header className=\"panel-header\">\n <h2 className=\"panel-title\">{title}</h2>\n </header>\n <div className=\"panel-body\">{children}</div>\n </section>\n );\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"src/App.jsx\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in src/App.jsx. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"3\",\n \"result\": {\n \"handled\": true,\n \"file\": \"src/App.jsx\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in src/App.jsx. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"src/App.jsx": "export default function App() {\n return (\n <main className=\"page\">\n <div data-impeccable-carbonize=\"ab12cd34\" style={{ display: \"contents\" }}>\n {/* impeccable-carbonize-start ab12cd34 */}\n <style data-impeccable-css=\"ab12cd34\">{`\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n `}</style>\n {/* impeccable-param-values ab12cd34: {\"italic\":false} */}\n {/* impeccable-carbonize-end ab12cd34 */}\n <div data-impeccable-variant=\"3\" style={{ display: 'contents' }}>\n <h1 className=\"hero-title\">Vite Fixture</h1>\n </div>\n </div>\n <p className=\"hero-hook\">Minimal React tree for oracle live-mode goldens.</p>\n <section id=\"features\" className=\"feature-grid\">\n <article className=\"feature-card\">One</article>\n <article className=\"feature-card\">Two</article>\n </section>\n <ul className=\"item-list\">\n {items.map((item) => (\n <li key={item.id} className=\"item-row\">{item.title}</li>\n ))}\n </ul>\n </main>\n );\n}\n\nconst items = [\n { id: 1, title: 'First' },\n { id: 2, title: 'Second' },\n];\n",
|
||||
"src/main.jsx": "import { createRoot } from 'react-dom/client';\nimport App from './App.jsx';\n\ncreateRoot(document.getElementById('root')).render(<App />);\n",
|
||||
"src/Panel.tsx": "type PanelProps = { title: string; children?: React.ReactNode };\n\nexport function Panel({ title, children }: PanelProps) {\n return (\n <section className=\"panel\">\n <header className=\"panel-header\">\n <h2 className=\"panel-title\">{title}</h2>\n </header>\n <div className=\"panel-body\">{children}</div>\n </section>\n );\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"error\":\"Session markers not found for id: nothere1\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "",
|
||||
"stderr": "Missing --id\n",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "",
|
||||
"stderr": "Need --discard or --variant N\n",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\"\n },\n \"ops\": [\n {\n \"ref\": \"h1\",\n \"tag\": \"h1\",\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Renamed\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"p\"\n },\n \"ops\": [\n {\n \"ref\": \"p\",\n \"tag\": \"p\",\n \"originalText\": \"Unrelated copy\",\n \"newText\": \"Other\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/about\",\n \"element\": {\n \"tagName\": \"h1\"\n },\n \"ops\": [\n {\n \"ref\": \"h1\",\n \"tag\": \"h1\",\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Renamed\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"index.html\",\"carbonize\":true,\"todo\":\"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"file\": \"index.html\",\n \"carbonize\": true,\n \"todo\": \"REQUIRED before next poll: carbonize cleanup in index.html. See reference/live.md \\\"Required after accept\\\".\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-carbonize-start ab12cd34 -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- impeccable-carbonize-end ab12cd34 -->\n <div data-impeccable-variant=\"1\" style=\"display: contents\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"file\":\"node_modules/.impeccable-live/ab12cd34/manifest.json\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"propContract\":[{\"prop\":\"title\",\"expr\":\"title\",\"kind\":\"text\",\"placeholder\":\"{title}\"}],\"componentStubMarkup\":\" <h1 class=\\\"hero-title\\\">{title}</h1>\",\"sourceStartLine\":10,\"sourceEndLine\":10,\"startLine\":1,\"endLine\":1,\"insertLine\":1,\"commentSyntax\":{\"open\":\"<!--\",\"close\":\"-->\"},\"styleMode\":\"svelte-component\",\"styleTag\":null,\"cssSelectorPrefixExamples\":[],\"cssAuthoring\":{\"mode\":\"svelte-component\",\"styleTag\":null,\"strategy\":\"component-style-block\",\"rulePattern\":\".semantic-class { ... }\",\"selectorExamples\":[\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\"],\"requirements\":[\"Write each variant as a real Svelte component file (v1.svelte, v2.svelte, ...).\",\"Keep the prop names from propContract; bind dynamic text with {propName}, not literal snapshot text.\",\"Put variant CSS in the component <style> block using semantic class selectors.\",\"Author param-driven CSS against var(--p-<id>, default) and [data-p-<id>] using :global(...) so the runtime knob values reach the mounted root.\",\"Declare params in componentDir/params.json keyed by variant number (e.g. {\\\"1\\\": [...], \\\"2\\\": [...]}), NOT as a data-impeccable-params attribute.\",\"Do not use @scope or data-impeccable-variant selectors in component files.\",\"Do not edit the route source file during generation; only edit files under componentDir.\"],\"forbidden\":[\"Do not use @scope blocks in Svelte component variants.\",\"Do not copy live DOM snapshot text into markup when propContract provides bindings.\",\"Do not add data-impeccable-* attributes inside component files. Svelte parses { in attribute values as an expression, so data-impeccable-params with JSON breaks the build; use componentDir/params.json instead.\"],\"paramsFile\":\"params.json\"},\"originalLineCount\":1}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"css\":{\"replaced\":0,\"appended\":0,\"pruned\":[],\"superseded\":[]},\"verify\":{\"clean\":true,\"findings\":[]},\"file\":\"src/routes/+page.svelte\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"css\": {\n \"replaced\": 0,\n \"appended\": 0,\n \"pruned\": [],\n \"superseded\": []\n },\n \"verify\": {\n \"clean\": true,\n \"findings\": []\n },\n \"file\": \"src/routes/+page.svelte\",\n \"sourceFile\": \"src/routes/+page.svelte\",\n \"previewMode\": \"svelte-component\",\n \"componentDir\": \"node_modules/.impeccable-live/ab12cd34\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"src/app.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"node_modules/.impeccable-live/__probe.js": "export const impeccableLivePreviewProbe = true;\n",
|
||||
"node_modules/.impeccable-live/__runtime.js": "export { mount, unmount } from 'svelte';\n",
|
||||
"src/app.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>SvelteKit Fixture</title>\n %sveltekit.head%\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">%sveltekit.body%</div>\n </body>\n</html>\n",
|
||||
"src/routes/+page.svelte": "<script>\n let title = 'SvelteKit Fixture';\n let expenses = [\n { id: 1, label: 'Coffee', amount: 3 },\n { id: 2, label: 'Lunch', amount: 12 },\n ];\n</script>\n\n<main class=\"page\">\n <!-- Props: title (text) <- {title} -->\n <h1 class=\"hero-title\">{title}</h1>\n <p class=\"hero-hook\">Minimal SvelteKit route for oracle live-mode goldens.</p>\n <ul class=\"expense-list\">\n {#each expenses as expense (expense.id)}\n <li class=\"expense-row\">{expense.label}: {expense.amount}</li>\n {/each}\n </ul>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n</main>\n\n<style>\n .hero-title { font-size: 2rem; }\n .expense-list { list-style: none; padding: 0; }\n .expense-row { padding: 4px 0; }\n</style>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"file\":\"node_modules/.impeccable-live/ab12cd34/manifest.json\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"propContract\":[{\"prop\":\"expenses\",\"expr\":\"expenses\",\"kind\":\"collection\",\"placeholder\":\"{expenses}\",\"item\":{\"rootTag\":\"li\",\"rootClasses\":[\"expense-row\"],\"textSlots\":[{\"key\":\"label\",\"expr\":\"expense.label\"},{\"key\":\"amount\",\"expr\":\"expense.amount\"}],\"attrSlots\":[],\"staticTexts\":[\":\"],\"nestedUnsupported\":false,\"keyField\":\"id\"}}],\"componentStubMarkup\":\" <ul class=\\\"expense-list\\\">\\n {#each expenses as expense (expense.id)}\\n <li class=\\\"expense-row\\\">{expense.label}: {expense.amount}</li>\\n {/each}\\n </ul>\",\"sourceStartLine\":12,\"sourceEndLine\":16,\"startLine\":1,\"endLine\":1,\"insertLine\":1,\"commentSyntax\":{\"open\":\"<!--\",\"close\":\"-->\"},\"styleMode\":\"svelte-component\",\"styleTag\":null,\"cssSelectorPrefixExamples\":[],\"cssAuthoring\":{\"mode\":\"svelte-component\",\"styleTag\":null,\"strategy\":\"component-style-block\",\"rulePattern\":\".semantic-class { ... }\",\"selectorExamples\":[\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\"],\"requirements\":[\"Write each variant as a real Svelte component file (v1.svelte, v2.svelte, ...).\",\"Keep the prop names from propContract; bind dynamic text with {propName}, not literal snapshot text.\",\"Put variant CSS in the component <style> block using semantic class selectors.\",\"Author param-driven CSS against var(--p-<id>, default) and [data-p-<id>] using :global(...) so the runtime knob values reach the mounted root.\",\"Declare params in componentDir/params.json keyed by variant number (e.g. {\\\"1\\\": [...], \\\"2\\\": [...]}), NOT as a data-impeccable-params attribute.\",\"Do not use @scope or data-impeccable-variant selectors in component files.\",\"Do not edit the route source file during generation; only edit files under componentDir.\"],\"forbidden\":[\"Do not use @scope blocks in Svelte component variants.\",\"Do not copy live DOM snapshot text into markup when propContract provides bindings.\",\"Do not add data-impeccable-* attributes inside component files. Svelte parses { in attribute values as an expression, so data-impeccable-params with JSON breaks the build; use componentDir/params.json instead.\"],\"paramsFile\":\"params.json\"},\"originalLineCount\":5}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"src/routes/+page.svelte\",\"carbonize\":false,\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"src/routes/+page.svelte\",\"carbonize\":false,\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"alreadyApplied\":true}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"discard\",\n \"variantId\": null,\n \"result\": {\n \"handled\": true,\n \"file\": \"src/routes/+page.svelte\",\n \"carbonize\": false,\n \"previewMode\": \"svelte-component\",\n \"componentDir\": \"node_modules/.impeccable-live/ab12cd34\"\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"src/app.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"node_modules/.impeccable-live/__probe.js": "export const impeccableLivePreviewProbe = true;\n",
|
||||
"node_modules/.impeccable-live/__runtime.js": "export { mount, unmount } from 'svelte';\n",
|
||||
"src/app.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>SvelteKit Fixture</title>\n %sveltekit.head%\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">%sveltekit.body%</div>\n </body>\n</html>\n",
|
||||
"src/routes/+page.svelte": "<script>\n let title = 'SvelteKit Fixture';\n let expenses = [\n { id: 1, label: 'Coffee', amount: 3 },\n { id: 2, label: 'Lunch', amount: 12 },\n ];\n</script>\n\n<main class=\"page\">\n <h1 class=\"hero-title\">{title}</h1>\n <p class=\"hero-hook\">Minimal SvelteKit route for oracle live-mode goldens.</p>\n <ul class=\"expense-list\">\n {#each expenses as expense (expense.id)}\n <li class=\"expense-row\">{expense.label}: {expense.amount}</li>\n {/each}\n </ul>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n</main>\n\n<style>\n .hero-title { font-size: 2rem; }\n .expense-list { list-style: none; padding: 0; }\n .expense-row { padding: 4px 0; }\n</style>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"file\":\"node_modules/.impeccable-live/ab12cd34/manifest.json\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"propContract\":[{\"prop\":\"title\",\"expr\":\"title\",\"kind\":\"text\",\"placeholder\":\"{title}\"}],\"componentStubMarkup\":\" <h1 class=\\\"hero-title\\\">{title}</h1>\",\"sourceStartLine\":10,\"sourceEndLine\":10,\"startLine\":1,\"endLine\":1,\"insertLine\":1,\"commentSyntax\":{\"open\":\"<!--\",\"close\":\"-->\"},\"styleMode\":\"svelte-component\",\"styleTag\":null,\"cssSelectorPrefixExamples\":[],\"cssAuthoring\":{\"mode\":\"svelte-component\",\"styleTag\":null,\"strategy\":\"component-style-block\",\"rulePattern\":\".semantic-class { ... }\",\"selectorExamples\":[\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\"],\"requirements\":[\"Write each variant as a real Svelte component file (v1.svelte, v2.svelte, ...).\",\"Keep the prop names from propContract; bind dynamic text with {propName}, not literal snapshot text.\",\"Put variant CSS in the component <style> block using semantic class selectors.\",\"Author param-driven CSS against var(--p-<id>, default) and [data-p-<id>] using :global(...) so the runtime knob values reach the mounted root.\",\"Declare params in componentDir/params.json keyed by variant number (e.g. {\\\"1\\\": [...], \\\"2\\\": [...]}), NOT as a data-impeccable-params attribute.\",\"Do not use @scope or data-impeccable-variant selectors in component files.\",\"Do not edit the route source file during generation; only edit files under componentDir.\"],\"forbidden\":[\"Do not use @scope blocks in Svelte component variants.\",\"Do not copy live DOM snapshot text into markup when propContract provides bindings.\",\"Do not add data-impeccable-* attributes inside component files. Svelte parses { in attribute values as an expression, so data-impeccable-params with JSON breaks the build; use componentDir/params.json instead.\"],\"paramsFile\":\"params.json\"},\"originalLineCount\":1}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"css\":{\"replaced\":1,\"appended\":0,\"pruned\":[],\"superseded\":[]},\"verify\":{\"clean\":true,\"findings\":[]},\"file\":\"src/routes/+page.svelte\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"2\",\n \"result\": {\n \"handled\": true,\n \"css\": {\n \"replaced\": 1,\n \"appended\": 0,\n \"pruned\": [],\n \"superseded\": []\n },\n \"verify\": {\n \"clean\": true,\n \"findings\": []\n },\n \"file\": \"src/routes/+page.svelte\",\n \"sourceFile\": \"src/routes/+page.svelte\",\n \"previewMode\": \"svelte-component\",\n \"componentDir\": \"node_modules/.impeccable-live/ab12cd34\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"src/app.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"node_modules/.impeccable-live/__probe.js": "export const impeccableLivePreviewProbe = true;\n",
|
||||
"node_modules/.impeccable-live/__runtime.js": "export { mount, unmount } from 'svelte';\n",
|
||||
"src/app.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>SvelteKit Fixture</title>\n %sveltekit.head%\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">%sveltekit.body%</div>\n </body>\n</html>\n",
|
||||
"src/routes/+page.svelte": "<script>\n let title = 'SvelteKit Fixture';\n let expenses = [\n { id: 1, label: 'Coffee', amount: 3 },\n { id: 2, label: 'Lunch', amount: 12 },\n ];\n</script>\n\n<main class=\"page\">\n <!-- Props: title (text) <- {title} -->\n <h1 class=\"hero-title\">{title}</h1>\n <p class=\"hero-hook\">Minimal SvelteKit route for oracle live-mode goldens.</p>\n <ul class=\"expense-list\">\n {#each expenses as expense (expense.id)}\n <li class=\"expense-row\">{expense.label}: {expense.amount}</li>\n {/each}\n </ul>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n</main>\n\n<style>\n .hero-title {\n font-weight: 900;\n line-height: 1.8;\n letter-spacing: 0.14em;\n letter-spacing: 0;\n }\n .expense-list { list-style: none; padding: 0; }\n .expense-row { padding: 4px 0; }\n</style>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"file\":\"node_modules/.impeccable-live/ab12cd34/manifest.json\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"propContract\":[{\"prop\":\"title\",\"expr\":\"title\",\"kind\":\"text\",\"placeholder\":\"{title}\"}],\"componentStubMarkup\":\" <h1 class=\\\"hero-title\\\">{title}</h1>\",\"sourceStartLine\":10,\"sourceEndLine\":10,\"startLine\":1,\"endLine\":1,\"insertLine\":1,\"commentSyntax\":{\"open\":\"<!--\",\"close\":\"-->\"},\"styleMode\":\"svelte-component\",\"styleTag\":null,\"cssSelectorPrefixExamples\":[],\"cssAuthoring\":{\"mode\":\"svelte-component\",\"styleTag\":null,\"strategy\":\"component-style-block\",\"rulePattern\":\".semantic-class { ... }\",\"selectorExamples\":[\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\"],\"requirements\":[\"Write each variant as a real Svelte component file (v1.svelte, v2.svelte, ...).\",\"Keep the prop names from propContract; bind dynamic text with {propName}, not literal snapshot text.\",\"Put variant CSS in the component <style> block using semantic class selectors.\",\"Author param-driven CSS against var(--p-<id>, default) and [data-p-<id>] using :global(...) so the runtime knob values reach the mounted root.\",\"Declare params in componentDir/params.json keyed by variant number (e.g. {\\\"1\\\": [...], \\\"2\\\": [...]}), NOT as a data-impeccable-params attribute.\",\"Do not use @scope or data-impeccable-variant selectors in component files.\",\"Do not edit the route source file during generation; only edit files under componentDir.\"],\"forbidden\":[\"Do not use @scope blocks in Svelte component variants.\",\"Do not copy live DOM snapshot text into markup when propContract provides bindings.\",\"Do not add data-impeccable-* attributes inside component files. Svelte parses { in attribute values as an expression, so data-impeccable-params with JSON breaks the build; use componentDir/params.json instead.\"],\"paramsFile\":\"params.json\"},\"originalLineCount\":1}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":false,\"error\":\"Variant 7 not found\",\"file\":\"src/routes/+page.svelte\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"carbonize\":false,\"mode\":\"error\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"src/app.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"node_modules/.impeccable-live/__probe.js": "export const impeccableLivePreviewProbe = true;\n",
|
||||
"node_modules/.impeccable-live/__runtime.js": "export { mount, unmount } from 'svelte';\n",
|
||||
"node_modules/.impeccable-live/ab12cd34/manifest.json": "{\n \"id\": \"ab12cd34\",\n \"previewMode\": \"svelte-component\",\n \"contractVersion\": 2,\n \"sourceFile\": \"src/routes/+page.svelte\",\n \"sourceStartLine\": 10,\n \"sourceEndLine\": 10,\n \"count\": 3,\n \"propContract\": [\n {\n \"prop\": \"title\",\n \"expr\": \"title\",\n \"kind\": \"text\",\n \"placeholder\": \"{title}\"\n }\n ],\n \"originalMarkup\": \" <h1 class=\\\"hero-title\\\">{title}</h1>\",\n \"seededSelectors\": [\n \".hero-title\"\n ],\n \"componentDir\": \"node_modules/.impeccable-live/ab12cd34\",\n \"componentDirAbs\": \"<WS>/node_modules/.impeccable-live/ab12cd34\",\n \"runtimeModule\": \"/node_modules/.impeccable-live/__runtime.js\",\n \"runtimeModuleAbs\": \"<WS>/node_modules/.impeccable-live/__runtime.js\",\n \"probeModule\": \"/node_modules/.impeccable-live/__probe.js\",\n \"probeModuleAbs\": \"<WS>/node_modules/.impeccable-live/__probe.js\"\n}\n",
|
||||
"node_modules/.impeccable-live/ab12cd34/v1.svelte": "<script>\n /** @typedef {{\n title?: string;\n }} Props */\n let { title = '' } = $props();\n</script>\n\n<!-- Props: title (text) <- {title} -->\n<h1 class=\"hero-title\">{title}</h1>\n\n<style>\n /* Variant 1: seeded from the route's current rules; restyle or delete freely.\n ALL rules go inside THIS block. Svelte allows exactly one top-level style\n element per component; appending a second one is a compile error. */\n .hero-title { font-size: 2rem; }\n</style>\n",
|
||||
"node_modules/.impeccable-live/ab12cd34/v2.svelte": "<script>\n /** @typedef {{\n title?: string;\n }} Props */\n let { title = '' } = $props();\n</script>\n\n<!-- Props: title (text) <- {title} -->\n<h1 class=\"hero-title\">{title}</h1>\n\n<style>\n /* Variant 2: seeded from the route's current rules; restyle or delete freely.\n ALL rules go inside THIS block. Svelte allows exactly one top-level style\n element per component; appending a second one is a compile error. */\n .hero-title { font-size: 2rem; }\n</style>\n",
|
||||
"node_modules/.impeccable-live/ab12cd34/v3.svelte": "<script>\n /** @typedef {{\n title?: string;\n }} Props */\n let { title = '' } = $props();\n</script>\n\n<!-- Props: title (text) <- {title} -->\n<h1 class=\"hero-title\">{title}</h1>\n\n<style>\n /* Variant 3: seeded from the route's current rules; restyle or delete freely.\n ALL rules go inside THIS block. Svelte allows exactly one top-level style\n element per component; appending a second one is a compile error. */\n .hero-title { font-size: 2rem; }\n</style>\n",
|
||||
"src/app.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>SvelteKit Fixture</title>\n %sveltekit.head%\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">%sveltekit.body%</div>\n </body>\n</html>\n",
|
||||
"src/routes/+page.svelte": "<script>\n let title = 'SvelteKit Fixture';\n let expenses = [\n { id: 1, label: 'Coffee', amount: 3 },\n { id: 2, label: 'Lunch', amount: 12 },\n ];\n</script>\n\n<main class=\"page\">\n <h1 class=\"hero-title\">{title}</h1>\n <p class=\"hero-hook\">Minimal SvelteKit route for oracle live-mode goldens.</p>\n <ul class=\"expense-list\">\n {#each expenses as expense (expense.id)}\n <li class=\"expense-row\">{expense.label}: {expense.amount}</li>\n {/each}\n </ul>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n</main>\n\n<style>\n .hero-title { font-size: 2rem; }\n .expense-list { list-style: none; padding: 0; }\n .expense-row { padding: 4px 0; }\n</style>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"file\":\"src/routes/+page.svelte\",\"previewFallback\":{\"from\":\"svelte-component\",\"reason\":\"svelte 5 compiler not resolvable from the app root\"},\"startLine\":10,\"endLine\":18,\"insertLine\":16,\"commentSyntax\":{\"open\":\"<!--\",\"close\":\"-->\"},\"styleMode\":\"scoped\",\"styleTag\":\"<style data-impeccable-css=\\\"SESSION_ID\\\">\",\"cssSelectorPrefixExamples\":[],\"cssAuthoring\":{\"mode\":\"scoped\",\"styleTag\":\"<style data-impeccable-css=\\\"SESSION_ID\\\">\",\"strategy\":\"scope-rule\",\"rulePattern\":\"@scope ([data-impeccable-variant=\\\"N\\\"]) { :scope > .variant-class { ... } }\",\"selectorExamples\":[\"@scope ([data-impeccable-variant=\\\"1\\\"]) { :scope > .variant-class { ... } }\",\"@scope ([data-impeccable-variant=\\\"2\\\"]) { :scope > .variant-class { ... } }\",\"@scope ([data-impeccable-variant=\\\"3\\\"]) { :scope > .variant-class { ... } }\"],\"requirements\":[\"Use @scope blocks keyed to each [data-impeccable-variant=\\\"N\\\"] wrapper.\",\"Inside each @scope block, make :scope rules step into the replacement element with a descendant combinator.\",\"Use the styleTag exactly; do not add framework-specific style attributes unless this object says to.\"],\"forbidden\":[\"Do not use global [data-impeccable-variant=\\\"N\\\"] selector prefixes for this styleMode.\",\"Do not add is:inline to the style tag for this styleMode.\"]},\"originalLineCount\":1}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"file\":\"src/routes/+page.svelte\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"discard\",\n \"variantId\": null,\n \"result\": {\n \"handled\": true,\n \"file\": \"src/routes/+page.svelte\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"src/app.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"src/app.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>SvelteKit Fixture</title>\n %sveltekit.head%\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">%sveltekit.body%</div>\n </body>\n</html>\n",
|
||||
"src/routes/+page.svelte": "<script>\n let title = 'SvelteKit Fixture';\n let expenses = [\n { id: 1, label: 'Coffee', amount: 3 },\n { id: 2, label: 'Lunch', amount: 12 },\n ];\n</script>\n\n<main class=\"page\">\n\n <h1 class=\"hero-title\">{title}</h1>\n\n <p class=\"hero-hook\">Minimal SvelteKit route for oracle live-mode goldens.</p>\n <ul class=\"expense-list\">\n {#each expenses as expense (expense.id)}\n <li class=\"expense-row\">{expense.label}: {expense.amount}</li>\n {/each}\n </ul>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n</main>\n\n<style>\n .hero-title { font-size: 2rem; }\n .expense-list { list-style: none; padding: 0; }\n .expense-row { padding: 4px 0; }\n</style>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"mode\":\"insert\",\"position\":\"after\",\"file\":\"node_modules/.impeccable-live/ab12cd34/manifest.json\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"propContract\":[],\"insertLine\":1,\"sourceInsertLine\":21,\"anchorStartLine\":17,\"anchorEndLine\":20,\"commentSyntax\":{\"open\":\"<!--\",\"close\":\"-->\"},\"styleMode\":\"svelte-component\",\"styleTag\":null,\"cssSelectorPrefixExamples\":[],\"cssAuthoring\":{\"mode\":\"svelte-component\",\"styleTag\":null,\"strategy\":\"component-style-block\",\"rulePattern\":\".semantic-class { ... }\",\"selectorExamples\":[\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\",\".expense-row { padding: 22px; }\"],\"requirements\":[\"Write each variant as a real Svelte component file (v1.svelte, v2.svelte, ...).\",\"Keep the prop names from propContract; bind dynamic text with {propName}, not literal snapshot text.\",\"Put variant CSS in the component <style> block using semantic class selectors.\",\"Author param-driven CSS against var(--p-<id>, default) and [data-p-<id>] using :global(...) so the runtime knob values reach the mounted root.\",\"Declare params in componentDir/params.json keyed by variant number (e.g. {\\\"1\\\": [...], \\\"2\\\": [...]}), NOT as a data-impeccable-params attribute.\",\"Do not use @scope or data-impeccable-variant selectors in component files.\",\"Do not edit the route source file during generation; only edit files under componentDir.\"],\"forbidden\":[\"Do not use @scope blocks in Svelte component variants.\",\"Do not copy live DOM snapshot text into markup when propContract provides bindings.\",\"Do not add data-impeccable-* attributes inside component files. Svelte parses { in attribute values as an expression, so data-impeccable-params with JSON breaks the build; use componentDir/params.json instead.\"],\"paramsFile\":\"params.json\"}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"handled\":true,\"verify\":{\"clean\":true,\"findings\":[]},\"file\":\"src/routes/+page.svelte\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\",\"componentDir\":\"node_modules/.impeccable-live/ab12cd34\",\"carbonize\":false}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/accept-receipts/ab12cd34.json": "{\n \"id\": \"ab12cd34\",\n \"operation\": \"accept\",\n \"variantId\": \"1\",\n \"result\": {\n \"handled\": true,\n \"verify\": {\n \"clean\": true,\n \"findings\": []\n },\n \"file\": \"src/routes/+page.svelte\",\n \"sourceFile\": \"src/routes/+page.svelte\",\n \"previewMode\": \"svelte-component\",\n \"componentDir\": \"node_modules/.impeccable-live/ab12cd34\",\n \"carbonize\": false\n },\n \"completedAt\": \"<ISO>\"\n}\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"src/app.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"node_modules/.impeccable-live/__probe.js": "export const impeccableLivePreviewProbe = true;\n",
|
||||
"node_modules/.impeccable-live/__runtime.js": "export { mount, unmount } from 'svelte';\n",
|
||||
"src/app.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <title>SvelteKit Fixture</title>\n %sveltekit.head%\n </head>\n <body data-sveltekit-preload-data=\"hover\">\n <div style=\"display: contents\">%sveltekit.body%</div>\n </body>\n</html>\n",
|
||||
"src/routes/+page.svelte": "<script>\n let title = 'SvelteKit Fixture';\n let expenses = [\n { id: 1, label: 'Coffee', amount: 3 },\n { id: 2, label: 'Lunch', amount: 12 },\n ];\n</script>\n\n<main class=\"page\">\n <h1 class=\"hero-title\">{title}</h1>\n <p class=\"hero-hook\">Minimal SvelteKit route for oracle live-mode goldens.</p>\n <ul class=\"expense-list\">\n {#each expenses as expense (expense.id)}\n <li class=\"expense-row\">{expense.label}: {expense.amount}</li>\n {/each}\n </ul>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n<div class=\"impeccable-insert-preview\">Insert variant 1</div>\n</main>\n\n<style>\n .hero-title { font-size: 2rem; }\n .expense-list { list-style: none; padding: 0; }\n .expense-row { padding: 4px 0; }\n .impeccable-insert-preview { display: block; }\n</style>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "",
|
||||
"stderr": "[impeccable live] --target requires a path value (use --target <path> or --target=<path>)\n",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_invalid\",\"message\":\"Expected property name or '}' in JSON at position 2 (line 1 column 3)\",\"path\":\"<WS>/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{ nope",
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_invalid\",\"message\":\"config.commentSyntax must be 'html' or 'jsx'\",\"path\":\"<WS>/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\"files\":[\"index.html\"],\"insertBefore\":\"</body>\",\"commentSyntax\":\"vue\"}",
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"context_missing\",\n \"missing\": [\n \"PRODUCT.md\",\n \"DESIGN.md\"\n ],\n \"nextCommand\": \"init\",\n \"targetPath\": null,\n \"projectRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"productPath\": null,\n \"designPath\": null\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"context_missing\",\n \"missing\": [\n \"DESIGN.md\"\n ],\n \"nextCommand\": \"document\",\n \"targetPath\": null,\n \"projectRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"productPath\": \"PRODUCT.md\",\n \"designPath\": \"DESIGN.md\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"context_missing\",\n \"missing\": [\n \"PRODUCT.md\"\n ],\n \"nextCommand\": \"init\",\n \"targetPath\": null,\n \"projectRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"productPath\": null,\n \"designPath\": \"DESIGN.md\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"serverPort\": <PORT>,\n \"serverToken\": \"<UUID>\",\n \"pageFiles\": [\n \"index.html\",\n \"public/no-body.html\",\n \"public/docs/guide.html\"\n ],\n \"liveConfigPath\": \"<WS>/.impeccable/live/config.json\",\n \"configDrift\": {\n \"orphans\": [\n \"src/cards.html\"\n ],\n \"orphanCount\": 1,\n \"hint\": \"1 HTML file(s) exist but aren't in config.files. Consider adding them, or use a glob pattern like \\\"public/**/*.html\\\".\"\n },\n \"targetPath\": null,\n \"projectRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"roots\": {\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n },\n \"hasProduct\": true,\n \"product\": \"<!-- impeccable:product-schema 2 -->\\n# Product\\n\\n## What it is\\nA fixture app used by the oracle harness for live mode.\\n\\n## Platform\\nweb\\n\",\n \"productPath\": \"PRODUCT.md\",\n \"hasDesign\": true,\n \"design\": \"---\\nname: Oracle Live Fixture\\ndescription: A one-page fixture set in plain type on paper-white surfaces.\\ncolors:\\n ink: \\\"#142720\\\"\\n paper: \\\"#ffffff\\\"\\ntypography:\\n body:\\n fontFamily: \\\"system-ui, sans-serif\\\"\\n fontWeight: 400\\n lineHeight: 1.5\\n---\\n\",\n \"designPath\": \"DESIGN.md\",\n \"hasSurfaceBrief\": false,\n \"surfaceBrief\": null,\n \"surfaceBriefPath\": null,\n \"_instructions\": \"Open the app URL that serves a pageFiles entry (never serverPort; that is the helper). Then start the poll loop per your harness policy in live.md and re-run <IMPECCABLE> live-poll immediately after every event or reply. Every event carries _instructions: follow them; they are the authoritative next step with real ids and paths filled in. A poll that is running is a poll you are SERVICING: never announce you are waiting and idle your turn; stay on the exec session until it returns an event, and never end a turn while a poll is outstanding.\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"ok\":true,\"config\":{\"files\":[\"index.html\",\"public/**/*.html\"],\"insertBefore\":\"</body>\",\"commentSyntax\":\"html\"},\"path\":\"<WS>/.impeccable/live/config.json\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "Stopped live server on port <PORT>.\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".gitignore": "# impeccable-live-ignore-start\n.impeccable/hook.cache.json\n.impeccable/hook.pending.json\n.impeccable/config.local.json\n.impeccable/live/server.json\n.impeccable/live/roots.json\n.impeccable/live/app-root.json\n.impeccable/live/inject-journal.json\n.impeccable/live/sessions/\n.impeccable/live/previews/\n.impeccable/live/annotations/\n.impeccable/live/artifacts/\n.impeccable/live/accept-receipts/\n.impeccable/live/locks/\n.impeccable/live/cache/\n.impeccable/live/manual-edit-apply-transaction.json\n.impeccable/live/manual-edit-events.jsonl\n.impeccable/live/manual-edit-evidence/\n.impeccable/live/pending-manual-edits.json\n.impeccable/live/deferred-svelte-component-accepts.json\n.impeccable-live.json\n.impeccable-live/\napp/.impeccable-live/\nsrc/.impeccable-live/\nnode_modules/.impeccable-live/\nsrc/lib/impeccable/ImpeccableLiveRoot.svelte\nsrc/lib/impeccable/__runtime.js\nsrc/lib/impeccable/[0-9a-f]*/\nplugins/impeccable-live.client.ts\napp/plugins/impeccable-live.client.ts\nsrc/plugins/impeccable-live.client.ts\n# impeccable-live-ignore-end\n",
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"fallback\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/website/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>/website\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/website\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"website/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/website\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/website/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/website/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>/website\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/website\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"website/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/website\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/website/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"candidate:website\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"context_missing\",\n \"missing\": [\n \"PRODUCT.md\",\n \"DESIGN.md\"\n ],\n \"nextCommand\": \"init\",\n \"targetPath\": null,\n \"projectRoot\": \"<WS>/website\",\n \"repoRoot\": \"<WS>/website\",\n \"productPath\": null,\n \"designPath\": null\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/website/.impeccable/live/config.json\",\"targetPath\":\"website\",\"projectRoot\":\"<WS>/website\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/website\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"website/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/website\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/website/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"target:website\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/website/.impeccable/live/config.json\",\"targetPath\":\"website/src/App.jsx\",\"projectRoot\":\"<WS>/website\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/website\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"website/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/website\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/website/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"target:website/src/App.jsx\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"target_selection_required\",\n \"targetCandidates\": [\n {\n \"name\": \"admin\",\n \"path\": \"admin\"\n },\n {\n \"name\": \"website\",\n \"path\": \"website\"\n }\n ],\n \"hint\": \"Several apps with a dev-server config exist. Ask the user which one to use, then rerun with --target <path into that app>.\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/admin/.impeccable/live/config.json\",\"targetPath\":\"admin\",\"projectRoot\":\"<WS>/admin\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/admin\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"admin/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/admin\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/admin/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"target:admin\"\n}",
|
||||
"website/.impeccable/live/config.json": "{\n \"files\": [\"index.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/website/.impeccable/live/config.json\",\"targetPath\":\"website\",\"projectRoot\":\"<WS>/website\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/admin/.impeccable/live/config.json\",\"targetPath\":\"admin\",\"projectRoot\":\"<WS>/admin\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/website/.impeccable/live/config.json\",\"targetPath\":\"website\",\"projectRoot\":\"<WS>/website\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/website\",\"bootedAt\":\"<ISO>\"},{\"appRoot\":\"<WS>/admin\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"admin/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/admin\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/admin/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"target:admin\"\n}",
|
||||
"website/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/website\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/website/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"target:website\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"context_missing\",\n \"missing\": [\n \"PRODUCT.md\",\n \"DESIGN.md\"\n ],\n \"nextCommand\": \"init\",\n \"targetPath\": null,\n \"projectRoot\": \"<WS>/src\",\n \"repoRoot\": \"<WS>/src\",\n \"productPath\": null,\n \"designPath\": null\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/apps/admin/.impeccable/live/config.json\",\"targetPath\":null,\"projectRoot\":\"<WS>/apps/admin\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/apps/admin\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"apps/admin/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/apps/admin\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/apps/admin/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"cwd\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"target_selection_required\",\n \"targetPath\": null,\n \"projectRoot\": \"<WS>\",\n \"repoRoot\": \"<WS>\",\n \"targetCandidates\": [\n {\n \"name\": \"admin\",\n \"path\": \"apps/admin\",\n \"targetExample\": \"apps/admin\",\n \"productStatus\": \"inherited\",\n \"productPath\": \"PRODUCT.md\",\n \"designStatus\": \"inherited\",\n \"designPath\": \"DESIGN.md\"\n },\n {\n \"name\": \"web\",\n \"path\": \"apps/web\",\n \"targetExample\": \"apps/web/src/App.jsx\",\n \"productStatus\": \"inherited\",\n \"productPath\": \"PRODUCT.md\",\n \"designStatus\": \"inherited\",\n \"designPath\": \"DESIGN.md\"\n }\n ],\n \"hint\": \"Ask the user which app Impeccable should use, then rerun live from that child app cwd. Use --target <path> only as a fallback or explicit path diagnostic.\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\"ok\":false,\"error\":\"config_missing\",\"path\":\"<WS>/apps/web/.impeccable/live/config.json\",\"targetPath\":\"apps/web\",\"projectRoot\":\"<WS>/apps/web\",\"repoRoot\":\"<WS>\"}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/app-root.json": "{\"version\":2,\"appRoots\":[{\"appRoot\":\"<WS>/apps/web\",\"bootedAt\":\"<ISO>\"}]}",
|
||||
"apps/web/.impeccable/live/roots.json": "{\n \"version\": 1,\n \"appRoot\": \"<WS>/apps/web\",\n \"repoRoot\": \"<WS>\",\n \"contextRoot\": \"<WS>\",\n \"sessionRoot\": \"<WS>/apps/web/.impeccable/live\",\n \"productPath\": \"<WS>/PRODUCT.md\",\n \"designPath\": \"<WS>/DESIGN.md\",\n \"resolvedFrom\": \"target:apps/web\"\n}"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "Usage: node live-commit-manual-edits.mjs [--page-url=<url>] [--provider=auto|codex|claude|mock]\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[],\"files\":[],\"cleared\":0,\"count\":0,\"pageUrl\":null,\"reason\":\"manual_edit_buffer_invalid\",\"message\":\"manual_edit_buffer_unreadable: Expected property name or '}' in JSON at position 2 (line 1 column 3)\",\"totalCount\":0,\"perPage\":{}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{ nope",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[{\"id\":\"e1\",\"ref\":\"main>h1\",\"originalText\":\"Oracle Fixture\",\"newText\":\"Oracle Fixture, renamed\"},{\"id\":\"e2\",\"ref\":\"main>p\",\"originalText\":\"Minimal static page for oracle live-mode goldens.\",\"newText\":\"A tighter hook.\"},{\"id\":\"e2\",\"ref\":\"aside>p\",\"originalText\":\"Nested content.\",\"newText\":\"Nested copy.\"}],\"failed\":[],\"files\":[\"index.html\"],\"cleared\":3,\"count\":3,\"pageUrl\":\"/\",\"warnings\":[],\"notes\":[\"oracle mock\"],\"totalCount\":1,\"perPage\":{\"/docs/guide\":1}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture, renamed</h1>\n <p class=\"hero-hook\">A tighter hook.</p>\n <aside class=\"side-note\"><p>Nested copy.</p></aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[{\"id\":\"e1\",\"reason\":\"agent gave up\",\"candidates\":[{\"file\":\"index.html\",\"loc\":\"\",\"line\":13,\"column\":7,\"status\":\"ok\",\"relativeFile\":\"index.html\",\"excerpt\":[{\"line\":10,\"text\":\" </head>\"},{\"line\":11,\"text\":\" <body>\"},{\"line\":12,\"text\":\" <main class=\\\"page\\\">\"},{\"line\":13,\"text\":\" <h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"line\":14,\"text\":\" <p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"line\":15,\"text\":\" <section id=\\\"features\\\" class=\\\"feature-grid\\\">\"},{\"line\":16,\"text\":\" <article class=\\\"feature-card\\\">One</article>\"}]},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":13,\"needle\":\"Oracle Fixture\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"kind\":\"class\",\"file\":\"index.html\",\"line\":7,\"needle\":\"hero-title\",\"excerpt\":\".hero-title { font-size: 2rem; }\"},{\"kind\":\"class\",\"file\":\"index.html\",\"line\":13,\"needle\":\"hero-title\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":9,\"needle\":\"<h1\",\"excerpt\":\"<h1 class=\\\"doc-title\\\">Guide</h1>\"},{\"kind\":\"tag\",\"file\":\"index.html\",\"line\":13,\"needle\":\"<h1\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"}]},{\"id\":\"e2\",\"reason\":\"agent gave up\",\"candidates\":[{\"kind\":\"text\",\"file\":\"index.html\",\"line\":14,\"needle\":\"Minimal static page for oracle live-mode goldens.\",\"excerpt\":\"<p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":21,\"needle\":\"Nested content.\",\"excerpt\":\"<p>Nested content.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}]},{\"id\":\"e3\",\"reason\":\"agent gave up\",\"candidates\":[{\"kind\":\"text\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"A second page covered by the config glob.\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}]}],\"files\":[],\"cleared\":0,\"count\":4,\"pageUrl\":null,\"notes\":[],\"rolledBackFiles\":[],\"rollbackFailures\":[],\"totalCount\":4,\"perPage\":{\"/\":3,\"/docs/guide\":1}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>h1\",\n \"tag\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ],\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Oracle Fixture, renamed\",\n \"sourceHint\": {\n \"file\": \"index.html\",\n \"line\": 13,\n \"column\": 7\n }\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[{\"id\":\"e1\",\"reason\":\"Invalid IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT JSON\",\"candidates\":[{\"file\":\"index.html\",\"loc\":\"\",\"line\":13,\"column\":7,\"status\":\"ok\",\"relativeFile\":\"index.html\",\"excerpt\":[{\"line\":10,\"text\":\" </head>\"},{\"line\":11,\"text\":\" <body>\"},{\"line\":12,\"text\":\" <main class=\\\"page\\\">\"},{\"line\":13,\"text\":\" <h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"line\":14,\"text\":\" <p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"line\":15,\"text\":\" <section id=\\\"features\\\" class=\\\"feature-grid\\\">\"},{\"line\":16,\"text\":\" <article class=\\\"feature-card\\\">One</article>\"}]},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":13,\"needle\":\"Oracle Fixture\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"kind\":\"class\",\"file\":\"index.html\",\"line\":7,\"needle\":\"hero-title\",\"excerpt\":\".hero-title { font-size: 2rem; }\"},{\"kind\":\"class\",\"file\":\"index.html\",\"line\":13,\"needle\":\"hero-title\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":9,\"needle\":\"<h1\",\"excerpt\":\"<h1 class=\\\"doc-title\\\">Guide</h1>\"},{\"kind\":\"tag\",\"file\":\"index.html\",\"line\":13,\"needle\":\"<h1\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"}]},{\"id\":\"e2\",\"reason\":\"Invalid IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT JSON\",\"candidates\":[{\"kind\":\"text\",\"file\":\"index.html\",\"line\":14,\"needle\":\"Minimal static page for oracle live-mode goldens.\",\"excerpt\":\"<p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":21,\"needle\":\"Nested content.\",\"excerpt\":\"<p>Nested content.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}]},{\"id\":\"e3\",\"reason\":\"Invalid IMPECCABLE_LIVE_COPY_AGENT_MOCK_RESULT JSON\",\"candidates\":[{\"kind\":\"text\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"A second page covered by the config glob.\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}]}],\"files\":[],\"cleared\":0,\"count\":4,\"pageUrl\":null,\"rolledBackFiles\":[],\"rollbackFailures\":[],\"totalCount\":4,\"perPage\":{\"/\":3,\"/docs/guide\":1}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>h1\",\n \"tag\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ],\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Oracle Fixture, renamed\",\n \"sourceHint\": {\n \"file\": \"index.html\",\n \"line\": 13,\n \"column\": 7\n }\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[{\"id\":\"e3\",\"reason\":\"post_apply_validation_failed\",\"checks\":[{\"file\":\"public/docs/guide.html\",\"reason\":\"leftover_impeccable_marker\",\"marker\":\"<!-- impeccable-variants-start\"}],\"candidates\":[{\"kind\":\"text\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"A second page covered by the config glob.\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}]}],\"files\":[\"public/docs/guide.html\"],\"cleared\":0,\"count\":1,\"pageUrl\":\"/docs/guide\",\"warnings\":[],\"notes\":[],\"reason\":\"manual_edit_repair_needs_decision\",\"needsManualDecision\":true,\"repair\":{\"status\":\"needs_decision\",\"attempts\":3,\"maxAttempts\":3,\"transactionId\":null,\"failures\":[{\"reason\":\"leftover_impeccable_marker\",\"file\":\"public/docs/guide.html\",\"marker\":\"<!-- impeccable-variants-start\"}],\"files\":[\"public/docs/guide.html\"]},\"totalCount\":4,\"perPage\":{\"/\":3,\"/docs/guide\":1}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>h1\",\n \"tag\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ],\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Oracle Fixture, renamed\",\n \"sourceHint\": {\n \"file\": \"index.html\",\n \"line\": 13,\n \"column\": 7\n }\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<html><body>\n<!-- impeccable-variants-start ab12cd34 -->\n<p class=\"doc-lead\">Second page lead.</p>\n</body></html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[{\"id\":\"e1\",\"ref\":\"main>h1\",\"originalText\":\"Oracle Fixture\",\"newText\":\"Oracle Fixture, renamed\"}],\"failed\":[{\"id\":\"e2\",\"reason\":\"ambiguous duplicate copy\",\"candidates\":[{\"kind\":\"text\",\"file\":\"index.html\",\"line\":14,\"needle\":\"Minimal static page for oracle live-mode goldens.\",\"excerpt\":\"<p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":21,\"needle\":\"Nested content.\",\"excerpt\":\"<p>Nested content.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}]}],\"files\":[\"index.html\"],\"cleared\":1,\"count\":3,\"pageUrl\":\"/\",\"warnings\":[],\"notes\":[],\"totalCount\":3,\"perPage\":{\"/\":2,\"/docs/guide\":1}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}",
|
||||
"index.html": "<html><body><h1 id=\"hero\" class=\"hero-title\">Oracle Fixture, renamed</h1><p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p><aside><p>Nested content.</p></aside></body></html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"applied\":[{\"id\":\"e3\",\"ref\":\"article>p\",\"originalText\":\"A second page covered by the config glob.\",\"newText\":\"Second page lead.\"}],\"failed\":[],\"files\":[\"public/docs/guide.html\"],\"cleared\":1,\"count\":1,\"pageUrl\":\"/docs/guide\",\"warnings\":[],\"notes\":[],\"totalCount\":3,\"perPage\":{\"/\":3}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"discarded\":3,\"entries\":[{\"id\":\"e1\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>h1\",\"tag\":\"h1\",\"classes\":[\"hero-title\"],\"originalText\":\"Oracle Fixture\",\"newText\":\"Oracle Fixture, renamed\",\"sourceHint\":{\"file\":\"index.html\",\"line\":13,\"column\":7}}],\"stagedAt\":\"<ISO>\"},{\"id\":\"e2\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>p\",\"tag\":\"p\",\"originalText\":\"Minimal static page for oracle live-mode goldens.\",\"newText\":\"A tighter hook.\"},{\"ref\":\"aside>p\",\"tag\":\"p\",\"originalText\":\"Nested content.\",\"newText\":\"Nested copy.\"}],\"stagedAt\":\"<ISO>\"}],\"totalCount\":0}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": []\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<html><body><article class=\"doc\"><h1 class=\"doc-title\">Guide</h1><p class=\"doc-lead\">Second page lead.</p></article></body></html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[{\"id\":\"e1\",\"reason\":\"unreported_source_changes\",\"candidates\":[{\"file\":\"index.html\",\"loc\":\"\",\"line\":13,\"column\":7,\"status\":\"ok\",\"relativeFile\":\"index.html\",\"excerpt\":[{\"line\":10,\"text\":\" </head>\"},{\"line\":11,\"text\":\" <body>\"},{\"line\":12,\"text\":\" <main class=\\\"page\\\">\"},{\"line\":13,\"text\":\" <h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"line\":14,\"text\":\" <p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"line\":15,\"text\":\" <section id=\\\"features\\\" class=\\\"feature-grid\\\">\"},{\"line\":16,\"text\":\" <article class=\\\"feature-card\\\">One</article>\"}]},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":13,\"needle\":\"Oracle Fixture\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"kind\":\"class\",\"file\":\"index.html\",\"line\":7,\"needle\":\"hero-title\",\"excerpt\":\".hero-title { font-size: 2rem; }\"},{\"kind\":\"class\",\"file\":\"index.html\",\"line\":13,\"needle\":\"hero-title\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":9,\"needle\":\"<h1\",\"excerpt\":\"<h1 class=\\\"doc-title\\\">Guide</h1>\"},{\"kind\":\"tag\",\"file\":\"index.html\",\"line\":13,\"needle\":\"<h1\",\"excerpt\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"}],\"files\":[\"index.html\"]},{\"id\":\"e2\",\"reason\":\"unreported_source_changes\",\"candidates\":[{\"kind\":\"text\",\"file\":\"index.html\",\"line\":14,\"needle\":\"Minimal static page for oracle live-mode goldens.\",\"excerpt\":\"<p class=\\\"hero-hook\\\">Minimal static page for oracle live-mode goldens.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"},{\"kind\":\"text\",\"file\":\"index.html\",\"line\":21,\"needle\":\"Nested content.\",\"excerpt\":\"<p>Nested content.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":4,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">First card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":8,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Second card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"src/cards.html\",\"line\":12,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"card-body\\\">Third card body copy.</p>\"},{\"kind\":\"tag\",\"file\":\"public/docs/guide.html\",\"line\":10,\"needle\":\"<p\",\"excerpt\":\"<p class=\\\"doc-lead\\\">A second page covered by the config glob.</p>\"}],\"files\":[\"index.html\"]}],\"files\":[],\"unreportedFiles\":[\"index.html\"],\"cleared\":0,\"count\":3,\"pageUrl\":\"/\",\"notes\":[],\"rolledBackFiles\":[\"index.html\"],\"rollbackFailures\":[],\"totalCount\":4,\"perPage\":{\"/\":3,\"/docs/guide\":1}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>h1\",\n \"tag\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ],\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Oracle Fixture, renamed\",\n \"sourceHint\": {\n \"file\": \"index.html\",\n \"line\": 13,\n \"column\": 7\n }\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[],\"files\":[],\"cleared\":0,\"count\":0,\"pageUrl\":\"/\",\"reason\":\"no_pending_edits\",\"totalCount\":0,\"perPage\":{}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "{\"applied\":[],\"failed\":[],\"files\":[],\"cleared\":0,\"count\":0,\"pageUrl\":null,\"reason\":\"no_pending_edits\",\"totalCount\":0,\"perPage\":{}}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"generate\",\"carbonize\":false,\"arrivedVariants\":3}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"accept\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"accept\",\"variantId\":\"2\",\"pageUrl\":\"/\",\"paramValues\":{\"face\":\"serif\"}}}\n{\"seq\":4,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"accept\",\"carbonize\":true}}\n{\"seq\":5,\"id\":\"ab12cd34\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 1053,\n \"__nextSeq\": 6\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"discarded\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"discarded\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"phase\":\"picked_up\",\"at\": <EPOCH>}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"discarded\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"discarded\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"discarded\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 644,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"discarded\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"discarded\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"phase\":\"picked_up\",\"at\": <EPOCH>}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"discarded\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"discarded\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"discarded\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 644,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [\n {\n \"error\": \"agent_error\",\n \"message\": \"boom\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"phase\":\"picked_up\",\"at\": <EPOCH>}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"agent_error\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"agent_error\",\"id\":\"ab12cd34\",\"message\":\"boom\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [\n {\n \"error\": \"agent_error\",\n \"message\": \"boom\"\n }\n ],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 665,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [\n {\n \"error\": \"agent_error\",\n \"message\": \"unknown error\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"phase\":\"picked_up\",\"at\": <EPOCH>}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"agent_error\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"agent_error\",\"id\":\"ab12cd34\",\"message\":\"unknown error\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [\n {\n \"error\": \"agent_error\",\n \"message\": \"unknown error\"\n }\n ],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 674,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [\n {\n \"error\": \"agent_error\",\n \"message\": \"variant generation crashed\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_phase\",\"phase\":\"picked_up\",\"at\": <EPOCH>}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"agent_error\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"agent_error\",\"id\":\"ab12cd34\",\"message\":\"variant generation crashed\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"agent_error\",\n \"pageUrl\": \"/\",\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": \"picked_up\",\n \"generationCompletedAt\": null,\n \"generationTimings\": {\n \"picked_up\": {\n \"at\": <EPOCH>,\n \"durationMs\": null\n }\n },\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [\n {\n \"error\": \"agent_error\",\n \"message\": \"variant generation crashed\"\n }\n ],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 687,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "Usage: node live-complete.mjs --id SESSION_ID [--discarded|--error MESSAGE] [--force]\n\nAppend the final durable session acknowledgement. Use after accept/discard cleanup is verified.\nCompletion is refused while the session's source file still carries live-mode leftovers\n(markers, data-p-* attributes, unbaked --p-* vars); fix the file or pass --force.\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"stdout": "Usage: node live-complete.mjs --id SESSION_ID [--discarded|--error MESSAGE] [--force]\n\nAppend the final durable session acknowledgement. Use after accept/discard cleanup is verified.\nCompletion is refused while the session's source file still carries live-mode leftovers\n(markers, data-p-* attributes, unbaked --p-* vars); fix the file or pass --force.\n",
|
||||
"stderr": "",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"source_dirty\",\n \"id\": \"ab12cd34\",\n \"file\": \"index.html\",\n \"findings\": [\n {\n \"marker\": \"impeccable-carbonize-start\",\n \"line\": 2,\n \"excerpt\": \"<!-- impeccable-carbonize-start ab12cd34 -->\",\n \"why\": \"carbonize block not rewritten into permanent form\"\n },\n {\n \"marker\": \"var(--p-*)\",\n \"line\": 3,\n \"excerpt\": \"<style>h1 { color: var(--p-lightness, 0.5); }</style>\",\n \"why\": \"preview parameter variable not baked to a literal\"\n },\n {\n \"marker\": \"impeccable-param-values\",\n \"line\": 4,\n \"excerpt\": \"<!-- impeccable-param-values ab12cd34: {\\\"lightness\\\":0.7} -->\",\n \"why\": \"param-values comment not baked and removed\"\n },\n {\n \"marker\": \"impeccable-carbonize-end\",\n \"line\": 5,\n \"excerpt\": \"<!-- impeccable-carbonize-end ab12cd34 -->\",\n \"why\": \"carbonize block not rewritten into permanent form\"\n },\n {\n \"marker\": \"data-p-*\",\n \"line\": 6,\n \"excerpt\": \"<h1 data-p-italic=\\\"on\\\" style=\\\"--impeccable-variant-ready: 1\\\">Hi</h1>\",\n \"why\": \"preview parameter attribute left on markup\"\n },\n {\n \"marker\": \"--impeccable-variant-ready\",\n \"line\": 6,\n \"excerpt\": \"<h1 data-p-italic=\\\"on\\\" style=\\\"--impeccable-variant-ready: 1\\\">Hi</h1>\",\n \"why\": \"preview readiness sentinel left in CSS\"\n }\n ],\n \"hint\": \"The accepted source still carries live-mode leftovers. Finish the carbonize cleanup (bake params, remove markers and data-p-* attributes), then run live-complete again. Use --force only if a finding is a false positive.\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"generate\",\"carbonize\":false,\"arrivedVariants\":3}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"accept\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"accept\",\"variantId\":\"2\",\"pageUrl\":\"/\",\"paramValues\":{\"face\":\"serif\"}}}\n{\"seq\":4,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"accept\",\"carbonize\":true}}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"generate\",\"carbonize\":false,\"arrivedVariants\":3}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"accept\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"accept\",\"variantId\":\"2\",\"pageUrl\":\"/\",\"paramValues\":{\"face\":\"serif\"}}}\n{\"seq\":4,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"accept\",\"carbonize\":true}}\n{\"seq\":5,\"id\":\"ab12cd34\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 1053,\n \"__nextSeq\": 6\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": false,\n \"error\": \"source_dirty\",\n \"id\": \"ab12cd34\",\n \"file\": \"index.html\",\n \"findings\": [\n {\n \"marker\": \"impeccable-variants-start\",\n \"line\": 13,\n \"excerpt\": \"<!-- impeccable-variants-start ab12cd34 -->\",\n \"why\": \"variant wrapper comment left in source\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 14,\n \"excerpt\": \"<div data-impeccable-variants=\\\"ab12cd34\\\" data-impeccable-variant-count=\\\"3\\\" style=\\\"display: contents\\\">\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 16,\n \"excerpt\": \"<div data-impeccable-variant=\\\"original\\\">\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 20,\n \"excerpt\": \"<style data-impeccable-css=\\\"ab12cd34\\\">\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 21,\n \"excerpt\": \"@scope ([data-impeccable-variant=\\\"1\\\"]) {\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"var(--p-*)\",\n \"line\": 24,\n \"excerpt\": \"color: oklch(var(--p-lightness, 0.5) 0.25 25);\",\n \"why\": \"preview parameter variable not baked to a literal\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 27,\n \"excerpt\": \"@scope ([data-impeccable-variant=\\\"2\\\"]) {\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-p-*\",\n \"line\": 29,\n \"excerpt\": \":scope[data-p-face=\\\"serif\\\"] > h1 { font-family: ui-serif, serif; }\",\n \"why\": \"preview parameter attribute left on markup\"\n },\n {\n \"marker\": \"data-p-*\",\n \"line\": 30,\n \"excerpt\": \":scope[data-p-face=\\\"mono\\\"] > h1 { font-family: ui-monospace, monospace; }\",\n \"why\": \"preview parameter attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 32,\n \"excerpt\": \"@scope ([data-impeccable-variant=\\\"3\\\"]) {\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-p-*\",\n \"line\": 34,\n \"excerpt\": \":scope[data-p-italic] > h1 { font-style: italic; }\",\n \"why\": \"preview parameter attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 38,\n \"excerpt\": \"<div data-impeccable-variant=\\\"1\\\" data-impeccable-params='[{\\\"id\\\":\\\"lightness\\\",\\\"kind\\\":\\\"range\\\",\\\"min\\\":0.3,\\\"max\\\":0.7,\\\"step\\\":0.\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 42,\n \"excerpt\": \"<div data-impeccable-variant=\\\"2\\\" style=\\\"display: none\\\" data-impeccable-params='[{\\\"id\\\":\\\"face\\\",\\\"kind\\\":\\\"steps\\\",\\\"default\\\":\\\"s\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"data-impeccable-\",\n \"line\": 46,\n \"excerpt\": \"<div data-impeccable-variant=\\\"3\\\" style=\\\"display: none\\\" data-impeccable-params='[{\\\"id\\\":\\\"italic\\\",\\\"kind\\\":\\\"toggle\\\",\\\"default\\\"\",\n \"why\": \"live-mode plumbing attribute left on markup\"\n },\n {\n \"marker\": \"impeccable-variants-end\",\n \"line\": 50,\n \"excerpt\": \"<!-- impeccable-variants-end ab12cd34 -->\",\n \"why\": \"variant wrapper comment left in source\"\n }\n ],\n \"hint\": \"The accepted source still carries live-mode leftovers. Finish the carbonize cleanup (bake params, remove markers and data-p-* attributes), then run live-complete again. Use --force only if a finding is a false positive.\"\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 1,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"generate\",\"carbonize\":false,\"arrivedVariants\":3}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"accept\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"accept\",\"variantId\":\"2\",\"pageUrl\":\"/\",\"paramValues\":{\"face\":\"serif\"}}}\n{\"seq\":4,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"accept\",\"carbonize\":true}}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <!-- impeccable-variants-start ab12cd34 -->\n <div data-impeccable-variants=\"ab12cd34\" data-impeccable-variant-count=\"3\" style=\"display: contents\">\n <!-- Original -->\n <div data-impeccable-variant=\"original\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variants: insert below this line -->\n <style data-impeccable-css=\"ab12cd34\">\n @scope ([data-impeccable-variant=\"1\"]) {\n :scope > h1 {\n font-weight: 300;\n color: oklch(var(--p-lightness, 0.5) 0.25 25);\n }\n }\n @scope ([data-impeccable-variant=\"2\"]) {\n :scope > h1 { font-weight: 900; }\n :scope[data-p-face=\"serif\"] > h1 { font-family: ui-serif, serif; }\n :scope[data-p-face=\"mono\"] > h1 { font-family: ui-monospace, monospace; }\n }\n @scope ([data-impeccable-variant=\"3\"]) {\n :scope > h1 { font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; }\n :scope[data-p-italic] > h1 { font-style: italic; }\n }\n </style>\n <!-- Variant 1 -->\n <div data-impeccable-variant=\"1\" data-impeccable-params='[{\"id\":\"lightness\",\"kind\":\"range\",\"min\":0.3,\"max\":0.7,\"step\":0.05,\"default\":0.5,\"label\":\"Lightness\"}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variant 2 -->\n <div data-impeccable-variant=\"2\" style=\"display: none\" data-impeccable-params='[{\"id\":\"face\",\"kind\":\"steps\",\"default\":\"sans\",\"label\":\"Face\",\"options\":[{\"value\":\"sans\",\"label\":\"Sans\"},{\"value\":\"serif\",\"label\":\"Serif\"},{\"value\":\"mono\",\"label\":\"Mono\"}]}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n <!-- Variant 3 -->\n <div data-impeccable-variant=\"3\" style=\"display: none\" data-impeccable-params='[{\"id\":\"italic\",\"kind\":\"toggle\",\"default\":false,\"label\":\"Italic\"}]'>\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n </div>\n </div>\n <!-- impeccable-variants-end ab12cd34 -->\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"src/routes/+page.svelte\",\n \"previewFile\": null,\n \"previewMode\": \"svelte-component\",\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578460000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"node_modules/.impeccable-live/ab12cd34/manifest.json\",\"sourceFile\":\"src/routes/+page.svelte\",\"previewMode\":\"svelte-component\"}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"src/routes/+page.svelte\",\n \"previewFile\": null,\n \"previewMode\": \"svelte-component\",\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578460000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 735,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"src/gone.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578460000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"src/gone.html\"}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"src/gone.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578460000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 624,\n \"__nextSeq\": 4\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/ab12cd34.jsonl": "{\"seq\":1,\"id\":\"ab12cd34\",\"type\":\"generate\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"generate\",\"action\":\"bolder\",\"count\":3,\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"id\":\"hero\",\"classes\":[\"hero-title\"],\"textContent\":\"Oracle Fixture\",\"outerHTML\":\"<h1 id=\\\"hero\\\" class=\\\"hero-title\\\">Oracle Fixture</h1>\"},\"clientSentAt\":1754042400000}}\n{\"seq\":2,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"generate\",\"carbonize\":false,\"arrivedVariants\":3}}\n{\"seq\":3,\"id\":\"ab12cd34\",\"type\":\"accept\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"accept\",\"variantId\":\"2\",\"pageUrl\":\"/\",\"paramValues\":{\"face\":\"serif\"}}}\n{\"seq\":4,\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"ts\":\"<ISO>\",\"event\":{\"id\":\"ab12cd34\",\"type\":\"agent_done\",\"file\":\"index.html\",\"sourceEventType\":\"accept\",\"carbonize\":true}}\n{\"seq\":5,\"id\":\"ab12cd34\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"ab12cd34\"}}\n{\"seq\":6,\"id\":\"ab12cd34\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"ab12cd34\"}}\n",
|
||||
".impeccable/live/sessions/ab12cd34.snapshot.json": "{\n \"id\": \"ab12cd34\",\n \"phase\": \"completed\",\n \"pageUrl\": \"/\",\n \"sourceFile\": \"index.html\",\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 3,\n \"arrivedVariants\": 3,\n \"visibleVariant\": 2,\n \"paramValues\": {\n \"face\": \"serif\"\n },\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": 1785578580000,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": true,\n \"generationCanceledAt\": 1785578520000,\n \"cancelReason\": \"accept\",\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": \"pending\",\n \"diagnostics\": [\n {\n \"error\": \"carbonize_cleanup_required\",\n \"file\": \"index.html\",\n \"message\": \"Accepted variant still has carbonize markers that must be folded into source CSS.\"\n }\n ],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 1173,\n \"__nextSeq\": 7\n}\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"stdout": "{\n \"ok\": true,\n \"id\": \"zz99zz99\",\n \"phase\": \"completed\",\n \"snapshot\": {\n \"id\": \"zz99zz99\",\n \"phase\": \"completed\",\n \"pageUrl\": null,\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 0,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": null,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\"\n }\n}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/sessions/zz99zz99.jsonl": "{\"seq\":1,\"id\":\"zz99zz99\",\"type\":\"complete\",\"ts\":\"<ISO>\",\"event\":{\"type\":\"complete\",\"id\":\"zz99zz99\"}}\n",
|
||||
".impeccable/live/sessions/zz99zz99.snapshot.json": "{\n \"id\": \"zz99zz99\",\n \"phase\": \"completed\",\n \"pageUrl\": null,\n \"sourceFile\": null,\n \"previewFile\": null,\n \"previewMode\": null,\n \"expectedVariants\": 0,\n \"arrivedVariants\": 0,\n \"visibleVariant\": null,\n \"paramValues\": {},\n \"pendingEventSeq\": null,\n \"pendingEvent\": null,\n \"deliveryLease\": null,\n \"checkpointRevision\": 0,\n \"browserCheckpointRevision\": 0,\n \"publicationCheckpointRevision\": 0,\n \"activeOwner\": null,\n \"sourceMarkers\": {},\n \"fallbackMode\": null,\n \"generationPhase\": null,\n \"generationCompletedAt\": null,\n \"generationTimings\": {},\n \"variantPlan\": null,\n \"generationCanceled\": false,\n \"generationCanceledAt\": null,\n \"cancelReason\": null,\n \"annotationArtifacts\": [],\n \"mountedVariants\": [],\n \"mountFailures\": [],\n \"renderState\": null,\n \"diagnostics\": [],\n \"updatedAt\": \"<ISO>\",\n \"__journalBytes\": 120,\n \"__nextSeq\": 2\n}\n"
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"discarded\":4,\"entries\":[{\"id\":\"e1\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>h1\",\"tag\":\"h1\",\"classes\":[\"hero-title\"],\"originalText\":\"Oracle Fixture\",\"newText\":\"Oracle Fixture, renamed\",\"sourceHint\":{\"file\":\"index.html\",\"line\":13,\"column\":7}}],\"stagedAt\":\"<ISO>\"},{\"id\":\"e2\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>p\",\"tag\":\"p\",\"originalText\":\"Minimal static page for oracle live-mode goldens.\",\"newText\":\"A tighter hook.\"},{\"ref\":\"aside>p\",\"tag\":\"p\",\"originalText\":\"Nested content.\",\"newText\":\"Nested copy.\"}],\"stagedAt\":\"<ISO>\"},{\"id\":\"e3\",\"pageUrl\":\"/docs/guide\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"article>p\",\"tag\":\"p\",\"originalText\":\"A second page covered by the config glob.\",\"newText\":\"Second page lead.\"}],\"stagedAt\":\"<ISO>\"}],\"totalCount\":0}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": []\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"discarded\":0,\"entries\":[],\"totalCount\":0}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": []\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"stdout": "Usage: node live-discard-manual-edits.mjs [--page-url=<url>]\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"discarded\":0,\"entries\":[],\"totalCount\":0}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": []\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"discarded\":0,\"entries\":[],\"totalCount\":4}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>h1\",\n \"tag\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ],\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Oracle Fixture, renamed\",\n \"sourceHint\": {\n \"file\": \"index.html\",\n \"line\": 13,\n \"column\": 7\n }\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"discarded\":0,\"entries\":[],\"totalCount\":4}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e1\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>h1\",\n \"tag\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ],\n \"originalText\": \"Oracle Fixture\",\n \"newText\": \"Oracle Fixture, renamed\",\n \"sourceHint\": {\n \"file\": \"index.html\",\n \"line\": 13,\n \"column\": 7\n }\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e2\",\n \"pageUrl\": \"/\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"main>p\",\n \"tag\": \"p\",\n \"originalText\": \"Minimal static page for oracle live-mode goldens.\",\n \"newText\": \"A tighter hook.\"\n },\n {\n \"ref\": \"aside>p\",\n \"tag\": \"p\",\n \"originalText\": \"Nested content.\",\n \"newText\": \"Nested copy.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n },\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"stdout": "{\"discarded\":3,\"entries\":[{\"id\":\"e1\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>h1\",\"tag\":\"h1\",\"classes\":[\"hero-title\"],\"originalText\":\"Oracle Fixture\",\"newText\":\"Oracle Fixture, renamed\",\"sourceHint\":{\"file\":\"index.html\",\"line\":13,\"column\":7}}],\"stagedAt\":\"<ISO>\"},{\"id\":\"e2\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>p\",\"tag\":\"p\",\"originalText\":\"Minimal static page for oracle live-mode goldens.\",\"newText\":\"A tighter hook.\"},{\"ref\":\"aside>p\",\"tag\":\"p\",\"originalText\":\"Nested content.\",\"newText\":\"Nested copy.\"}],\"stagedAt\":\"<ISO>\"}],\"totalCount\":1}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null,
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": [\n {\n \"id\": \"e3\",\n \"pageUrl\": \"/docs/guide\",\n \"element\": {\n \"tagName\": \"h1\",\n \"classes\": [\n \"hero-title\"\n ]\n },\n \"ops\": [\n {\n \"ref\": \"article>p\",\n \"tag\": \"p\",\n \"originalText\": \"A second page covered by the config glob.\",\n \"newText\": \"Second page lead.\"\n }\n ],\n \"stagedAt\": \"<ISO>\"\n }\n ]\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"steps": [
|
||||
{
|
||||
"stdout": "{\"discarded\":4,\"entries\":[{\"id\":\"e1\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>h1\",\"tag\":\"h1\",\"classes\":[\"hero-title\"],\"originalText\":\"Oracle Fixture\",\"newText\":\"Oracle Fixture, renamed\",\"sourceHint\":{\"file\":\"index.html\",\"line\":13,\"column\":7}}],\"stagedAt\":\"<ISO>\"},{\"id\":\"e2\",\"pageUrl\":\"/\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"main>p\",\"tag\":\"p\",\"originalText\":\"Minimal static page for oracle live-mode goldens.\",\"newText\":\"A tighter hook.\"},{\"ref\":\"aside>p\",\"tag\":\"p\",\"originalText\":\"Nested content.\",\"newText\":\"Nested copy.\"}],\"stagedAt\":\"<ISO>\"},{\"id\":\"e3\",\"pageUrl\":\"/docs/guide\",\"element\":{\"tagName\":\"h1\",\"classes\":[\"hero-title\"]},\"ops\":[{\"ref\":\"article>p\",\"tag\":\"p\",\"originalText\":\"A second page covered by the config glob.\",\"newText\":\"Second page lead.\"}],\"stagedAt\":\"<ISO>\"}],\"totalCount\":0}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"stdout": "{\"discarded\":0,\"entries\":[],\"totalCount\":0}\n",
|
||||
"stderr": "",
|
||||
"exit": 0,
|
||||
"signal": null
|
||||
}
|
||||
],
|
||||
"files": {
|
||||
".impeccable/live/config.json": "{\n \"files\": [\"index.html\", \"public/**/*.html\"],\n \"insertBefore\": \"</body>\",\n \"commentSyntax\": \"html\"\n}\n",
|
||||
".impeccable/live/pending-manual-edits.json": "{\n \"version\": 1,\n \"entries\": []\n}",
|
||||
"index.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Oracle Live HTML Fixture</title>\n <style>\n .hero-title { font-size: 2rem; }\n .hero-hook { color: #555; }\n </style>\n </head>\n <body>\n <main class=\"page\">\n <h1 id=\"hero\" class=\"hero-title\">Oracle Fixture</h1>\n <p class=\"hero-hook\">Minimal static page for oracle live-mode goldens.</p>\n <section id=\"features\" class=\"feature-grid\">\n <article class=\"feature-card\">One</article>\n <article class=\"feature-card\">Two</article>\n </section>\n <aside class=\"side-note\">\n <h2 class=\"note-title\">Aside</h2>\n <p>Nested content.</p>\n </aside>\n </main>\n </body>\n</html>\n",
|
||||
"public/docs/guide.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <title>Guide</title>\n </head>\n <body>\n <article class=\"doc\">\n <h1 class=\"doc-title\">Guide</h1>\n <p class=\"doc-lead\">A second page covered by the config glob.</p>\n </article>\n </body>\n</html>\n",
|
||||
"public/no-body.html": "<!DOCTYPE html>\n<html lang=\"en\">\n <head><title>No body tag</title></head>\n <p class=\"orphan\">This file has no closing body tag.</p>\n</html>\n",
|
||||
"src/cards.html": "<section class=\"cards\">\n <div class=\"card\">\n <h3 class=\"card-title\">Alpha card</h3>\n <p class=\"card-body\">First card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Beta card</h3>\n <p class=\"card-body\">Second card body copy.</p>\n </div>\n <div class=\"card\">\n <h3 class=\"card-title\">Gamma card</h3>\n <p class=\"card-body\">Third card body copy.</p>\n </div>\n</section>\n"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user