Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .lantern/lang/en/.lantern.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"text": {
"CLAUDE.md": "Tells an agent to read the primitives map before changing code",
"biome.json": "Configures Biome as a lint-only gate over the source folders, keeping the recommended rules except those switched off because existing code breaks them, with the formatter and import sorting off",
"package.json": "Names the package lantern with its description, repository, homepage and issue links, keywords, MIT licence and Mobile Reality as author, and declares desktop dependencies and development, lint, test, packaging (macOS and Windows) and release commands, including the skill-test harness, the run-cost command, the Flow layout check, the Integrations screen and account choice checks and the tray popover check, the pull request state check against a stub GitHub API, the Skills window check, shipping the lantern command and the licence folder as extra resources (adding Electron's licence files after packaging), marked private so it cannot be published to a registry and naming no entry file of its own because the packaged app's manifest does, and leaving the Electron version to the installed package, with the start command running the dev profile and open:dev launching an already built dev profile without rebuilding, and pinning patched versions of transitive development tooling through pnpm overrides",
"package.json": "Names the package lantern with its description, repository, homepage and issue links, keywords, MIT licence and Mobile Reality as author, and declares desktop dependencies and development, lint, test, packaging (macOS and Windows) and release commands, including the skill-test harness, the run-cost command, the Flow layout check, the Integrations screen and account choice checks and the tray popover check, the pull request state check against a stub GitHub API, the Skills window check, the Macro view, pull request review, text selection and semantic highlighting browser checks, shipping the lantern command and the licence folder as extra resources (adding Electron's licence files after packaging), marked private so it cannot be published to a registry and naming no entry file of its own because the packaged app's manifest does, and leaving the Electron version to the installed package, with the start command running the dev profile and open:dev launching an already built dev profile without rebuilding, and pinning patched versions of transitive development tooling through pnpm overrides",
"playwright.config.ts": "Configures serial Electron browser tests and exact visual snapshots",
"pnpm-workspace.yaml": "Includes local packages and enables deployable injected workspace dependencies",
"tsconfig.json": "Sets strict TypeScript checking for main, preload, shared and renderer sources and declares the @shared, @main and @renderer import aliases",
Expand Down
11 changes: 5 additions & 6 deletions .lantern/lang/en/test/e2e.lantern.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,20 @@
"graph-macro-areas.spec.ts": "Checks in the real app that the Macro view opens on the areas map with no layout to choose, enters one with a double-click and leaves it with Escape, Backspace or the breadcrumb, goes sideways to another area from the panel and keeps the entered area across Files, and that a pull request lights the areas it touches and the reading marker moves between areas while stepping.",
"graph-macro-systems.spec.ts": "Checks on the evaluation project at 1600 by 1000 and 1280 by 800 that the outside systems list is always there under the map with every system and its count, filters to what a clicked block talks to with Show all, lights every area and foundation entry that talks to a clicked system with counts and a side panel grouped by area and feature, is cleared by a second click or Escape, never clips text, and can be driven with the keyboard; saves screenshots.",
"graph-macroview.spec.ts": "Drives the areas map in the real app on three projects at two window sizes: every area fits above the outside systems list, no page scroll or zoom, marks at the right zoom, keys, wheel, breadcrumb, the Macro view mounting once, and screenshots.",
"graph-macro-foundation.spec.ts":"Checks in the real app, on the evaluation project, that selecting a foundation tile lists what it uses and where its platform has files and lights its partners on the areas map, and that an area shows its platforms.",
"graph-macro-foundation.spec.ts": "Checks in the real app, on the evaluation project, that selecting a foundation tile lists what it uses and where its platform has files and lights its partners on the areas map, and that an area shows its platforms.",
"graph-macro-legend.spec.ts": "Checks in the real app that the Macro legend is short, fits the side panel, and that its swatches (selected, uses, To assign) are painted exactly like the shapes on the map, and screenshots the areas map and flat keys.",
"graph-macro-platform-uses.spec.ts": "Checks in the real app that of two bots of one kind the accounts area is lit strongly for the one with files there and as uses for the one that only uses it, with the legend drawing it the same solid way, lists both in the side panel, lights nothing as uses at rest and screenshots each.",
"graph-macro.spec.ts": "Checks the macro view in the real canvas: the counts drawn at rest, readable names, selection, Escape and the way back to the file graph.",
"graph-navigation.spec.ts": "Checks graph zoom, panning, right-drag, overscroll, focus and input behaviour in Electron",
"graph-performance.spec.ts": "Measures large-graph startup, selection latency and renderer resource baselines",
"graph-pixi.spec.ts": "Checks WebGL rendering, retained tile text across zoom, interaction and failure recovery",
"graph-regression.spec.ts": "Guards graph appearance, selection, search and empty states against regressions",
"tray-popover.spec.ts": "Drives the menu bar popover in its harness with synthetic projects in every state: urgency order, a long name and path, nothing needing you, the empty state, the More panel with and without notifications, arrow keys, Enter and Escape, pointer selection, a live update, a scrolling list, the stopped spinner when motion is reduced and the header logo in the app icon's colours at 1x and 2x.",
"tray-popover.spec.ts": "Drives the menu bar popover in its harness with synthetic projects in every state: urgency order, a long name and path, nothing needing you, the empty state, the More panel with and without notifications, arrow keys, Enter and Escape, pointer selection, a live update, a scrolling list, and the stopped spinner when motion is reduced.",
"skills-extras.spec.ts": "Drives the Lantern skills tab in Electron over real files: the role selector, scope badges, search, attach with a click and with Enter, moving between scopes, detaching with Delete, the project file kept out of git, the narrow stacked layout and the main window with only the global scope, and captures screenshots when asked",
"integrations-bindings.spec.ts": "Adds three accounts of each provider to the Integrations harness and walks two projects and a brand-new one with no origin remote through choosing, re-choosing while pinned, unlinking and reopening the dialog, a Bitbucket account chosen on a GitHub project, an account the environment shadows, plus the button that jumps from the accounts to the projects and the status bar icon naming the chosen account",
"integrations.spec.ts":"Drives the Integrations dialog, opened from its button, at 1280x800 and 700x640 through the real IPC against a stub provider server: adding and refusing tokens, two accounts of one provider, the project tile grid and its detail step with twelve projects, a project's account choice, expiry warnings, removing, a provider icon in the status bar that reopens the dialog on its project, and no cut-off text or file-token wording",
"lsp-semantic.spec.ts":"Checks real semantic highlighting through production preload and IPC in code and diff previews",
"integrations.spec.ts": "Drives the Integrations dialog, opened from its button, at 1280x800 and 700x640 through the real IPC against a stub provider server: adding and refusing tokens, two accounts of one provider, the project tile grid and its detail step with twelve projects, a project's account choice, expiry warnings, removing, a provider icon in the status bar that reopens the dialog on its project, and no cut-off text or file-token wording",
"lsp-semantic.spec.ts": "Checks real semantic highlighting through production preload and IPC in code and diff previews",
"pr-host-state.spec.ts": "Loads the pull requests of a GitHub-origin project through the production host status against a stub API and checks the strip shows the open, the squash-merged and the declined one as the host reports them, saving screenshots on request",
"pr-review-demo.spec.ts":"Exercises ordered PR review across the file list, the file and diff pane and the graph",
"pr-review-demo.spec.ts": "Exercises ordered PR review across the file list, the file and diff pane and the graph",
"pr-review-layout.spec.ts": "Checks the three review panes fit a laptop window and that the dividers move by keyboard and pointer",
"text-select.spec.ts": "Checks in a real Chromium that the readable review and Flow text computes to selectable while the chrome stays unselectable, and that a drag-select on a Flow step does not pick it; skips when no Chromium can be launched",
"tsconfig.json": "Configures type checking for browser tests and their production dependencies",
Expand Down
2 changes: 1 addition & 1 deletion .lantern/map/.lantern
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ lantern 1

CLAUDE.md . skill f21d73adfc12
biome.json . config 216278473939
package.json . config 8cc76988675c
package.json . config 887c01fc0f21
> scripts/e2e-delegate/run.mjs
> scripts/esbuild.mjs
> scripts/fuses.js
Expand Down
10 changes: 3 additions & 7 deletions .lantern/map/test/e2e.lantern
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,15 @@ test/e2e/graph-macro.spec.ts . test 0f4c5055ed0f
= test/e2e/support/graph-harness.ts
= test/fixtures/lantern-macro-own-view.json

test/e2e/graph-navigation.spec.ts . test 7ed46145f408
#feature file-graph
= test/e2e/support/graph-harness.ts

test/e2e/graph-performance.spec.ts . test ae8c54d65587
test/e2e/graph-navigation.spec.ts . test ba58988b46e7
#feature file-graph
= test/e2e/support/graph-harness.ts

test/e2e/graph-pixi.spec.ts . test 0140b656f39e
#feature file-graph
= test/e2e/support/graph-harness.ts

test/e2e/graph-regression.spec.ts . test bb415efaaf2b
test/e2e/graph-regression.spec.ts . test 6581982470cc
#feature file-graph
= test/e2e/support/graph-harness.ts

Expand All @@ -68,7 +64,7 @@ test/e2e/skills-extras.spec.ts . test 55b79a7cb294
#feature skill-installer
= test/e2e/support/skills-extras-harness.ts#launchSkillsHarness

test/e2e/tray-popover.spec.ts . test f949568c0813
test/e2e/tray-popover.spec.ts . test 07d60516c636
#feature session-monitoring
= test/e2e/support/tray-popover-harness.ts#launchTrayHarness
< test/fixtures/tray-groups.ts#manyGroups
Expand Down
51 changes: 51 additions & 0 deletions .lantern/prs/32.pr
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
lantern-pr 1
# 32
#title chore: prune pointless e2e tests and wire every spec into a script
#url https://github.com/MobileReality/lantern/pull/32
#branch chore/prune-and-wire-e2e
#base main
#opened 2026-11-10
#head d296953325cb14ab5726ace142374b2b7306dad8
#describe what Removes four e2e tests that proved nothing about the app and gives every remaining Playwright spec a package.json script.
#describe before Twelve specs were run by no script.
#describe after Every test/e2e spec is named by a script, and the four new ones are listed in docs/primitives.md.
#describe verified typecheck, lint and pnpm test green; the newly wired scripts were each run once and several fail on their own, reported in the PR.
~ docs/primitives.md
~ package.json
~ test/e2e/graph-navigation.spec.ts
~ test/e2e/graph-regression.spec.ts
~ test/e2e/tray-popover.spec.ts
- test/e2e/graph-performance.md
- test/e2e/graph-performance.spec.ts
#order package.json
#order test/e2e/graph-performance.spec.ts
#order test/e2e/graph-performance.md
#order test/e2e/graph-regression.spec.ts
#order test/e2e/graph-navigation.spec.ts
#order test/e2e/tray-popover.spec.ts
#order docs/primitives.md
#reason docs/primitives.md Agents find regression checks here, so the new scripts are listed with when to run them.
#reason package.json Specs no script ran stayed unrun and rotted, so each now has a named script.
#reason test/e2e/graph-navigation.spec.ts The removed test asserted harness window state and duplicated the zoom checks in graph-pixi.
#reason test/e2e/graph-regression.spec.ts The removed test checked Playwright's own screenshot comparison, not the app.
#reason test/e2e/tray-popover.spec.ts The removed logo tests compared SVG fill strings and saved screenshots nobody compared.
#reason test/e2e/graph-performance.md It documented the removed performance baseline, which no longer exists.
#reason test/e2e/graph-performance.spec.ts It had no latency budget and could not fail on a slowdown, so it gave false assurance.
#story Every browser check has a command
#step actor A developer
#step action runs a named check script
#file package.json
#file docs/primitives.md
#step subject the macro, review, selection or highlight specs
#below interaction Can run any e2e spec from a script found in the docs
#below consequence Twelve specs were run by nothing => Every spec belongs to a script
#story Tests that proved nothing are gone
#step actor A developer
#step action runs the graph and tray checks
#file test/e2e/graph-regression.spec.ts
#file test/e2e/graph-navigation.spec.ts
#file test/e2e/tray-popover.spec.ts
#file test/e2e/graph-performance.spec.ts
#step subject the remaining specs
#below interaction Reads only checks that can fail on a real regression
#below consequence Four checks passed whatever the app did => They are removed
18 changes: 18 additions & 0 deletions docs/primitives.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,24 @@ layout, rendering or navigation in the renderer; `pnpm run test:graph:visual` ad
snapshots (update them with `test:graph:visual:update` only when the change is meant to move pixels,
and say so in the PR). Not part of `pnpm test`.

### `pnpm run test:graph:macro:e2e`
`test/e2e/graph-macro*.spec.ts` and `graph-macroview.spec.ts`, Playwright against the same harness. Use
when a change touches the macro (areas, systems, platform uses, foundation, legend) view of the graph.
Not part of `pnpm test`.

### `pnpm run test:pr-review:e2e`
`test/e2e/pr-review-*.spec.ts`, Playwright against the same harness. Use when a change touches the pull
request review screen (comments, explain, layout, regions, the demo). Not part of `pnpm test`.

### `pnpm run test:text-select:e2e`
`test/e2e/text-select.spec.ts`. Use when a change touches text selection in the renderer. Skips without a
Playwright Chromium. Not part of `pnpm test`.

### `pnpm run test:lsp:e2e`
Compiles, then runs `test/e2e/lsp-semantic.spec.ts` in Electron: semantic highlighting through the real
preload and IPC. Use when the embedded editor's highlighting or its LSP bridge changes; `test:lsp` is the
vitest side of the same area. Not part of `pnpm test`.

### `pnpm run test:lsp`
Compiles, then runs the LSP and semantic-highlight integration tests. Use when the embedded editor,
tsserver or highlighting changes.
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@
"test:tray:e2e": "playwright test test/e2e/tray-popover.spec.ts",
"test:pr-host:e2e": "playwright test test/e2e/pr-host-state.spec.ts",
"test:skills:e2e": "playwright test test/e2e/skills-extras.spec.ts",
"test:graph:perf": "playwright test test/e2e/graph-performance.spec.ts",
"test:graph:macro:e2e": "playwright test test/e2e/graph-macro.spec.ts test/e2e/graph-macro-areas.spec.ts test/e2e/graph-macro-foundation.spec.ts test/e2e/graph-macro-legend.spec.ts test/e2e/graph-macro-platform-uses.spec.ts test/e2e/graph-macro-systems.spec.ts test/e2e/graph-macroview.spec.ts",
"test:pr-review:e2e": "playwright test test/e2e/pr-review-comments.spec.ts test/e2e/pr-review-demo.spec.ts test/e2e/pr-review-explain.spec.ts test/e2e/pr-review-layout.spec.ts test/e2e/pr-review-regions.spec.ts",
"test:text-select:e2e": "playwright test test/e2e/text-select.spec.ts",
"test:lsp:e2e": "pnpm compile && playwright test test/e2e/lsp-semantic.spec.ts",
"demo:pr-review": "node scripts/pr-review-demo.mjs",
"coverage": "vitest run --coverage",
"start": "node scripts/esbuild.mjs && LANTERN_PROFILE=dev env -u ELECTRON_RUN_AS_NODE electron out",
Expand Down
20 changes: 0 additions & 20 deletions test/e2e/graph-navigation.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,6 @@ test.afterAll(async () => {
try { await closeGraphHarness(harness); } finally { expect(errors).toEqual([]); }
});

test('keeps the Electron harness hidden while screenshots and input work', async () => {
test.skip(process.env.LANTERN_GRAPH_VISIBLE === '1', 'Hidden-window assertions apply only to the default background harness');
const page = harness.page;
expect(await harness.app.evaluate(({ BrowserWindow }) => {
const window = BrowserWindow.getAllWindows()[0];
return { visible: window.isVisible(), focused: window.isFocused() };
})).toEqual({ visible: false, focused: false });
const input = page.getByRole('textbox', { name: 'Graph zoom percentage' });
await input.fill('125%');
await input.press('Enter');
await expect(input).toHaveValue('125%');
await page.getByRole('button', { name: 'Zoom out' }).click();
await expect(input).toHaveValue('115%');
expect((await page.screenshot()).byteLength).toBeGreaterThan(0);
expect(await harness.app.evaluate(({ BrowserWindow }) => {
const window = BrowserWindow.getAllWindows()[0];
return { visible: window.isVisible(), focused: window.isFocused() };
})).toEqual({ visible: false, focused: false });
});

test.describe('pixi', () => {
test.beforeEach(async () => {
await harness.app.evaluate(({ BrowserWindow }) => BrowserWindow.getAllWindows()[0].setSize(1100, 760));
Expand Down
Loading
Loading