Skip to content

PDF Tools v2: rebuilt from the approved designs on the pdf service v2 - #473

Merged
ymote merged 8 commits into
mainfrom
design/pdftools-v2
Oct 11, 2026
Merged

ymote merged 8 commits into
mainfrom
design/pdftools-v2

Conversation

@ymote

@ymote ymote commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

PDF Tools v2, rebuilt through OctoSense App Flow from the nine designs approved on 10 Oct 2026, on the pdf service v2 (#472, merged). Draft: do not merge.

What's here

  • apps/pdftools/design/map/NN-<name>.json: the pixel maps (App Flow step 1). Every measured text run, surface and divider of each screen is tied to one region: its role, the Splash widget that rebuilds it with the runtime source it was read in (cite), geometry in points (fixed tabs, rail and panels, a flexible canvas), light colours and dark ones from 09-dark-reading, type size from the run's ink (calibrated on the runtime's own text in card-host), and the review decision that applies. coverage.unmapped is 0 on every screen; page contents are marked as sample art.
  • apps/pdftools/bundle/main.splash v2 (0.2.0, App Flow step 2): the shared window (tabs, mode bar with search, Undo, Redo, Save, rail and panels, canvas and pill, status line), Home, Read, Find, Comment, Fill & Sign, Pages, Combine and Edit, wired to design/SERVICE.md only (step 3). bundle/icons/: 46 outline icons drawn to the designs' glyphs.
  • apps/pdftools/design/SERVICE.md: the contract as built in pdf service v2: open documents for PDF Tools v2 #472, in its own commit, as authorized.
  • apps/pdftools/dev-fixture/ and apps/pdftools/tests/ui.py: a stand-in engine and the designs' sample documents for card-host runs, outside the bundle (Quick Deck's pattern), and the end-to-end journeys.
  • crates/shell/src/pdftools_model_tests.rs: four more pure rules tested from Rust (10 in all).
  • apps/pdftools/tests/evidence/v2-20261010/: the runs' frames, side-by-sides and receipt.
  • READMEs in both languages.

Review decisions applied: one close cross on the report tab; Find has no right panel; Combine has no pill; "Alignment"; every page is the engine's render (pdf.page), with highlights, matches and fields as overlays from the engine's rectangles; no dev or replay path in the bundle.

The maps, per screen

  • 01 Home: one close cross on the report tab (decision); covers are the engine's page 1; "14.6 of 64 MB used" and its bar are the PDFs' sizes over the 64 MiB quota.
  • 02 Reading: 02 puts Open at the far right, 01 and 03-08 after the last tab: the build follows the majority. 02's Pages panel has no close cross, 07 and 09 do: kept.
  • 03 Find: the right "Document" panel is dropped (decision); the filter icon beside the count is not built (nothing in the brief filters results).
  • 04 Comment: starts with the left panel folded, as drawn; authors, text and dates come from pdf.comments.
  • 05 Pages: in Pages the pill's zoom sizes the tiles; fit width and fit page are left out.
  • 06 Combine: no pill (decision); 06 boxes Undo and Redo in a segmented control, the build keeps 02's plain icons; the range is typed in place, so its box has no chevron.
  • 07 Fill & Sign: 07's left panel is 239 wide, the build keeps 02's 204; "MC" is sample initials (the build shows the person's own, kept in storage).
  • 08 Edit: "Alignment" (decision); Alignment and Colour are not built (pdf.edit_text takes only text); the font box is read-only.
  • 09 Dark reading: the outline tree is the engine's (pdf.open).

Verification

All on macOS (Apple silicon), 10 Oct 2026; frames, side-by-sides and receipt.json (digests, commands, checks) in apps/pdftools/tests/evidence/v2-20261010/.

  • cargo test --locked -p octosense-shell --lib pdftools_model: 10 passed.
  • App Hub gate on a stamped copy (hub stamp, hub check --system-app): only the listing refusal every system app gets, and the unsigned warning.
  • Hidden desktop shell with the real engine (tests/ui.py --shell, one instance under the shell lock, Terminal.app tab, MAKEPAD_HIDE_WINDOWS=1, ended with /quit): shell (light, then dark through the shell's own style menu), restart, full, empty: passed, no error or budget lines in any log. Home with the engine's covers; "Open a PDF from this device" refused (foreground_required: a hidden window is never in front); reading and thumbnails; find ("9 matches on 4 pages", the match highlighted on its page); a highlight from pdf.lines' box and its reply; page 2 turned and Undo; Combine with a range ("One PDF of 5 pages") and the new PDF opened; initials placed on the lease; a paragraph edited in place (pdf.edit_text, the page re-rendered with it); Save (a plain save works from the hidden shell); the damaged file; after a restart the import placed in the library opens and the report returns to its page; with storage full, the notice, then a removal that asks first; the empty library, light and dark.
  • card-host (tests/ui.py --card-host): missing (no engine, no files service) and fixture (the nine designed screens at 1536 x 1024 beside their designs, light and dark, plus the damaged, protected and unsaved states): passed.
  • The shell runs and missing ran at the runtime's 64 ms script budget (load average 10 to 30); the shell runs passed again with --budget-ms 1000 while other sessions' builds held the load between 45 and 117. fixture ran with --budget-ms 1000: its stand-in engine answers in script (it parses the fixture's JSON), and at 64 ms its journey passed but one stand-in answer overran in the dark pass. Two earlier rounds at the default budget, before library.json moved off the tap path, lost the tap that opens a PDF to an overrun at load 60 to 150 (see Runtime gaps).
  • Fixes from the real-engine runs are in 913612c: the narrow layout for the shell's window, the page fitted to the canvas, Open always on the tab row, the editor's height, the text fields' bevel, small storage figures, and library.json written off the tap path; the harness now clicks only the app's own pages, at the pill's zoom.

What still differs from the designs, and why

Side-by-sides: apps/pdftools/tests/evidence/v2-20261010/fixture/ (card-host at the designs' 1536 x 1024, design left, app right, light and dark) and compare/ (the real-engine shell frames beside their designs at the shell's height).

  • Window size. The designs are 1536 x 1024; the shell gives PDF Tools 990 x 603 points. Below 1180 points the mode tabs and Save trim their padding, the right panels take 320 points, a right panel takes the left panel's place, and the page fits the canvas until the person zooms (89-100% in the shell frames). At 1536 x 1024 (card-host) the layout is the maps'.
  • Pages are the engine's renders at their own size (decision): A4 595 pt at 100% in the shell samples, the fixture's 612 pt, against the designs' 588 px sample art; the samples have no outline, cover art or forms like the designs'.
  • Tabs and names: the fixture opens the designs' five PDFs; the shell runs show the samples' own names. With five tabs at 1536 points, "Field Guide to Garden Birds.pdf" loses its last characters: a tab's title is capped at 190 points.
  • Find snippets are the service's (context with "…"), the fixture's are whole lines.
  • Comment dates read the next day in the evening west of UTC (a service bug, below).
  • Edit: the in-place editor uses the app's sans, the designs show the page's serif: no theme text style names a serif face for scripts; the editor grows to hold the wider text. Alignment and Colour are not built (contract, below).
  • Per-screen choices from the maps: Open after the last tab (6 of 9 designs); 02's 204-point left panel in 07 (07 draws 239); plain Undo and Redo (06 draws a segmented control); the range box without a chevron and the font box read-only (no script popover or drop-down callback); no filter icon in Find; the Combine switch is the runtime's Toggle in the tokens' colours.
  • Status line counts the library's PDFs, not the storage's use (no usage from the files service): with storage full it still reads "37 KB of 64 MB used", beside the full-storage notice.
  • Dark: only 09 has a dark design; the other screens' dark look comes from 09's tokens.

Runtime gaps (with sources)

  • No scroll position for script apps: a View's script methods are set_visible, is_visible, render and render_style only (makepad widgets/src/view.rs:876-910), and a scroll is clamped to its content on every draw (widgets/src/scroll_bar.rs:1264-1267). Going to a page draws the canvas empty for one frame, then a run of pages from that page.
  • No key events for script apps: a TextInput gives scripts on_change and on_return only (widgets/src/text_input.rs:675-705), and the shell's window manager takes the Cmd chords. The brief's shortcuts are buttons.
  • A Label applies its margin and padding twice (widgets/src/label.rs:321-342: the padded walk goes to its turtle and to its text); a view whose on_render starts hidden stays hidden (observed): wrappers are shown and hidden instead.
  • The 64 ms budget is wall-clock time (makepad widgets/src/widget_async.rs:505-515, splash_entry_budget, MAKEPAD_SPLASH_BUDGET_MS): at load averages of 60-150 a tap that opens a PDF and redraws the window can overrun, and the overrun drops the action. Seen twice in runs at the default budget, both on the tap that opens a PDF (once in the shell, once in card-host). The app now writes library.json from its heartbeat instead of in taps.
  • No popover or drop-down callback for scripts, so the range box and the font box have no chevron.
  • card-host never calls on_app_resize (only the shell does, crates/shell/src/module_view.rs:603-618), so card-host runs use the app's default width.
  • A TextInput keeps a bevel stroke with transparent border colours until border_size is 0 (widgets/src/text_input.rs:101-191).

Window size

  • The desktop opens every app window at 72% of the desk's width and 76% of its height, capped at 1000 x 720 points, offset per window (crates/shell/src/desktop_layout.rs:19-34, DesktopWindows::ensure). PDF Tools got 990 x 603 points in a 1400 x 898 shell window.
  • A script app cannot ask for a larger default: App Hub's AppManifest has no size field and refuses unknown keys (app-contract/src/manifest.rs:290-345 at the pin, deny_unknown_fields); system-apps.json lists ids only; and the shell ignores the size of a module's WindowRequest::Open (crates/shell/src/lib.rs:2823, size: _).
  • The person can resize or maximize it; on_app_resize follows every size and style change (module_view.rs:603-618). I did not patch the shell. If a larger default is wanted, the smallest change is a manifest hint (a preferred size) that DesktopWindows::ensure honours within the desk.

Contract changes needed

  1. pdf.comments dates are UTC, not local. The engine writes /M (D:20261011003256Z) for a mark made at 17:32:56 PDT; its listing drops the zone, and review.rs::date passes 2026-10-11T00:32 on as local time, so PDF Tools shows "11 Oct" on 10 Oct. The service should convert to local time, as SERVICE.md says, or keep the zone (…Z) so the app converts with local_time.
  2. pdf.edit_text align and color for 08's Alignment and Colour.
  3. Storage use: files.status (or a storage method) reporting the app storage's used and total bytes, for the status line and the full-storage state.
  4. Optional: a cover that outlives pdf.close. A closed document's renders go with it (doc_tests.rs, "a closed document's renders go"), so Home re-renders every cover after each start (open, info, page, close per PDF on the UI thread). For example pdf.page with an out path, or pdf.info with a small first-page render.
  5. Export needs a design first; pdf.export is already in the contract.

Not verified

  • The host's file dialog and what follows a real import: a hidden window cannot open it.
  • With the real engine: form fields (no sample PDF has a form; pdf.fields, pdf.fill and the field overlays ran only on the dev fixture), outlines (the samples have none), Redo, underline, strike-out, notes, text boxes, statuses and deletes, page delete, extract, insert and move, password-protected PDFs, the eight-PDF cap, and the unsaved-changes question. The dev fixture covers their screens.
  • Window sizes other than the shell's default 990 x 603 and card-host's 1536 x 1024 (a maximized window, a resize while a document is open).
  • Behaviour on a heavily loaded machine with this code at the default budget (above).
  • Linux, Windows, phones.

🤖 Generated with Claude Code

@ymote
ymote force-pushed the design/pdftools-v2 branch from 535e792 to 1ca87f6 Compare October 10, 2026 23:54
ymote and others added 6 commits October 10, 2026 17:10
v1 (#430) collapsed pdfcraft's desktop interface into a phone-style flow
over five of the engine's 132 commands. v2 starts over through OctoSense
App Flow: product requirements, UX design by image generation, pixel
mapping to widgets, then the logic.

- design/BRIEF.md: the product requirements (jobs, desktop layout,
  screens, states, every action mapped to its engine command, constraints).
- design/source/: the exact prompt for each of nine screens and the
  untouched gpt-image-2 outputs at 1536 x 1024, with generation.json
  provenance. The maintainer approved generation and the designs.
- design/measure_desktop.py and source/*.measured.json: App Flow's
  observe/measure assume a 406 x 776 phone artboard, so this applies the
  same measurement at the desktop screen's own size, reusing App Flow's
  ocr.swift: text runs with ink and ground colours, surfaces with fill,
  border and corner radius, and one-pixel dividers.
- design/SERVICE.md: the app-facing pdf service contract the app and the
  service build against (open documents, page renders, find, comments,
  Fill & Sign, pages, text edits, undo, redo, save).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pdf service v2 (#472) settled what the draft left open:

- the render cache holds at most 16 MiB and 64 files per app, since app
  storage allows 256 entries and imports and library saves need room;
- pdf.export images: at most 64 pages and 256 megapixels a call, each page
  at most 16 MP; export text takes pages too;
- doc is a lowercase hex string; every rectangle is [x, y, w, h] in points,
  and find's match rects can go straight into a highlight;
- pdf.open's fields and comments are counts;
- a save to a new path re-points the open document; a plain save from a
  background surface answers invalid:;
- comments: local dates without zone or seconds, one bounding box, ids of
  unnamed comments @page-index, Fill & Sign marks in the list, and the
  person's name always passed (the engine otherwise writes "PdfCraft");
- find's total saturates at 10,000; a fractional dpi is rounded and an out
  of range one is invalid:, and a render over 16 MiB is too_large:;
- invalid: also covers paths outside storage, taken output names, nothing to
  undo or redo and edits to read-only documents;
- merge ranges accept "all", "" and typed dashes; rotate accepts -180; field
  options are {value, label}, and fields gain read_only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
App Flow's next step after the approved designs: design/map/NN-<name>.json
ties every measured text run, surface and divider of each screen to one
region, with its role, the Splash widget that rebuilds it and the runtime
source it was read in, its geometry in points (fixed rail and panels, a
flexible canvas), its light colours and its dark ones from
09-dark-reading, its type size from the run's ink (calibrated on the
runtime's own text in card-host) and the review decision that applies:
one close cross on the report tab, no Document panel in Find, no pill in
Combine, "Alignment" for "Aligment", and every page the engine's render.
Nothing is left unmapped; page contents are marked as sample art.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The window the designs share (document tabs, the mode bar with search,
Undo, Redo and Save, the rail and its panels, the canvas and its pill, the
status line) and Home, Read, Find, Comment, Fill & Sign, Pages, Combine
and Edit, wired to SERVICE.md's methods and nothing else: one document
per tab, renders at screen resolution one at a time and kept,
progressive thumbnails, find and comment rectangles as overlays, fields,
page operations, paragraph edits, undo, redo and save, combine with page
ranges, and Open a PDF from this device titled with the file's name.

The states the brief lists: an empty library, a page rendering, damaged,
protected, storage full (Remove a PDF, which asks once more), eight PDFs
open, unsaved changes when closing, no engine. Light and dark from the
shared interface's appearance with the maps' colours; state on
mod.pdftools across a restyle (#440). Outline icons drawn to the designs'
glyphs. Version 0.2.0.

The runtime gives script apps no scroll position and no key events: going
to a page draws the canvas empty for a frame, which clamps its scroll to
the top, then fills it with a run from that page; the shortcuts are
buttons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tests/ui.py walks every mode with the real engine in a hidden desktop
shell (shell, restart, full, empty), the shipped bundle in card-host
without host services (missing), and the dev fixture in card-host
(fixture): every designed screen at the designs' 1536 x 1024, light and
dark, each grab beside its design, and the damaged, protected and unsaved
states. The fixture stays outside the bundle: a stand-in engine for
SERVICE.md's methods, spliced into a scratch copy, and sample documents
drawn from the designs' own sample text.

v1's shell evidence goes: it showed a different app.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Page ranges as Combine takes them, find snippets with the match in bold,
avatar initials and the service's comment dates, beside the library's
title rules in pdftools_model_tests.rs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ymote
ymote force-pushed the design/pdftools-v2 branch from 1ca87f6 to 755f166 Compare October 11, 2026 00:11
@ymote
ymote changed the base branch from feat/pdf-service-v2 to main October 11, 2026 00:11
ymote and others added 2 commits October 10, 2026 17:59
The shell opens PDF Tools at 990 x 603 points (72% x 76% of the desk, at
most 1000 x 720), not the designs' 1536 x 1024. Below 1180 points the mode
tabs and Save trim their padding, both right panels take 320 points, and
until the person zooms the page fits the canvas (up to 100%) as modes,
panels, find results and the window change. Tab titles share the row so
Open always shows; the Pages tool row drops its hint when narrow; the
in-place editor grows to hold its text; borderless text fields draw no
bevel; the status line counts kilobytes under 1 MB. library.json is
written by the heartbeat instead of in taps, so a tap never waits on the
disk within its 64 ms.

tests/ui.py: the shell journeys as the real engine answers them (the
app's own pictures only, clicks at the pill's zoom, the pill's next page,
Combine's range fields and button, a typed edit, a dark pass that works
on the light pass's state), and the fixture journey opens the designs'
five PDFs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tests/evidence/v2-20261010: the hidden desktop shell with the real pdf
engine (shell light then dark, restart, full, empty) at the runtime's
64 ms script budget, card-host without services (missing) and with the
dev fixture beside the nine designs (light and dark, plus the damaged,
protected and unsaved states), shell frames beside their designs, and a
receipt with digests, commands, checks and what was not verified.

READMEs in both languages: the desktop's window size and the narrow
layout, the journeys as they now run, the budget option for a busy
machine, and the status: what was verified, what was not, and what is
known (comment dates in UTC from the service, storage use counted from
the library).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ymote
ymote marked this pull request as ready for review October 11, 2026 01:47
@ymote

ymote commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

tools/ci-local-merge.sh 473 could not list this pull request's files: GitHub's diff endpoint (gh pr diff --name-only) refuses diffs over 20,000 lines, and this one adds about 34,000, mostly the generated designs and evidence frames. The script's own checks (evidence_problems, remote_evidence_problems, red_main, comment_body from tools/ci_local_merge.py, unchanged) were run with the file list from the paginated pulls/473/files API instead: 235 files, identical to git diff --name-only origin/main...a5878ee7. They trigger desktop.yml, phone.yml and apps.yml (not rom.yml), and found no problem; main is not red. A fix so the script lists files this way itself follows in its own pull request.

Local CI passed on a5878ee (tools/ci-local.sh --only all --linux-host --offload, 26m40s, Darwin arm64; the ubuntu jobs and the macOS jobs' portable steps (their macOS steps ran here) on the Linux build host, Linux x86_64).

GitHub would run for this PR: desktop.yml, phone.yml, apps.yml. Merged on this local pass (macOS runner queue); GitHub CI runs on the merge commit on main.

Job Step Result Time
ci-local / drift The local mapping fits the workflows PASS -
desktop.yml / desktop Prepare the pinned framework sources PASS 1s
desktop.yml / desktop Compile the desktop with the shared runtime PASS 9m18s
desktop.yml / desktop Desktop tools and scripts PASS 23s
desktop.yml / desktop (linux) Prepare the pinned framework sources PASS 0s
desktop.yml / desktop (linux) One copy of every shell source PASS -
desktop.yml / desktop (linux) One Makepad, App Hub, octos and Rinx in the locked graph PASS 2s
desktop.yml / desktop (linux) The native apps' generated places match native-apps.json PASS 0s
desktop.yml / native-host-api Prepare the pinned framework sources PASS 1s
desktop.yml / native-host-api Build the native acceptance host and pinned Hub CLI PASS 7m34s
desktop.yml / native-host-api Signed app tool calls a real OS permission API PASS 5s
phone.yml / home (linux) Prepare pinned sources and the reviewed runtime patch PASS 0s
phone.yml / home (linux) Verify the single runtime graph PASS 2s
phone.yml / home (linux) The native apps' generated places match native-apps.json PASS 0s
phone.yml / home (linux) The pinned octos revision PASS -
phone.yml / home (linux) Build octos (unless cached) PASS -
phone.yml / home (linux) Build Home, App Hub admission and runtime policy tests PASS 3m12s
phone.yml / home (linux) Test Home, App Hub admission and runtime policy PASS 40s
phone.yml / home (linux) Two-lane scenario (real kernel, scripted model) PASS 27s
phone.yml / home (linux) Build opt-in AppCard tests PASS 2m46s
phone.yml / home (linux) Test opt-in AppCard PASS 2s
phone.yml / home (linux) Build craft-engine relay and system-chat tests PASS 2m51s
phone.yml / home (linux) Test craft-engine relay and system chat PASS 4s
phone.yml / home (linux) Build linked Terminal tests PASS 2m23s
phone.yml / home (linux) Test linked Terminal PASS 1s
phone.yml / home (linux) Build Wasm and runtime policy tests PASS 1m13s
phone.yml / home (linux) Test Wasm and runtime policy PASS 11s
phone.yml / home Prepare pinned sources and the reviewed runtime patch PASS 1s
phone.yml / home Validate launcher icons and Apple asset catalogs PASS 6s
phone.yml / home Compile Home and its bundled modules PASS 9m10s
apps.yml / services (linux) python3 tools/setup.py PASS 0s
apps.yml / services (linux) Shared system app interface PASS 0s
apps.yml / services (linux) Kernel service PASS 16s
apps.yml / services (linux) App peers PASS 29s
apps.yml / services (linux) AI providers config PASS 4s
apps.yml / services (linux) Connected provider protocols and Linux host adapter PASS 47s
apps.yml / services (linux) L0 in-card chat (sys.chat, host side) PASS 9s
apps.yml / services (linux) System toolbox (workflow templates) PASS 1m30s
apps.yml / kernel-security (linux) python3 tools/setup.py PASS 0s
apps.yml / kernel-security (linux) The pinned octos revision PASS -
apps.yml / kernel-security (linux) Build octos (unless cached) PASS -
apps.yml / kernel-security (linux) Real-kernel tests PASS 36s
apps.yml / apps (linux) python3 tools/setup.py PASS 0s
apps.yml / apps (linux) Host services (Mail, AI providers, News) PASS 1m59s
apps.yml / apps (linux) Connected accounts and Rinx editor PASS 1m31s
apps.yml / apps (linux) Shell AI services (crates/ai-host) PASS 2m58s
apps.yml / apps (linux) AppCard runtime setup safeguards PASS 0s
apps.yml / apps (linux) AppCard clippy (own crates; shared runtime compiles) PASS 28s
apps.yml / apps (linux) AppCard transport and store PASS 7s
apps.yml / apps (linux) One Makepad, App Hub, octos and Rinx in the locked graph PASS 4s
rom.yml / product (linux) python3 -m unittest discover -s tests -v SKIPPED (!) -
rom.yml / product (linux) Check generated Agent Binder client SKIPPED (!) -
rom.yml / product (linux) bash -n scripts/stage-forks.sh scripts/publish-release.sh scripts/apply-to-tree.sh scripts/build-rom.sh PASS -
rom.yml / web-installer (linux) npm ci --ignore-scripts --no-audit --no-fund SKIPPED (!) -
rom.yml / web-installer (linux) npm test SKIPPED (!) -
rom.yml / web-installer (linux) npx playwright install --with-deps chromium SKIPPED (!) -
rom.yml / web-installer (linux) npm run test:browser SKIPPED (!) -
rom.yml / web-installer (linux) python3 -m unittest discover -s tests -p test_installer_manifest.py -v SKIPPED (!) -
rom.yml / web-installer (linux) bash -n scripts/release.sh SKIPPED (!) -
linux-host / sandbox (linux) python3 tools/setup.py PASS 0s
linux-host / sandbox (linux) Process sandbox on Linux (Landlock, seccomp) PASS 1m40s

Skipped (these did NOT pass; (!) marks a skip that blocks tools/ci-local-merge.sh):

  • rom.yml / product (linux): python3 -m unittest discover -s tests -v: javac -version does not work here: install a JDK (17 or newer) and put its bin/ on PATH or set JAVA_HOME
  • rom.yml / product (linux): Check generated Agent Binder client: needs build-tools/35.0.0/aidl, platforms/android-35/framework.aidl in the Android SDK (no Android SDK found): install the SDK packages 'build-tools;35.0.0' and 'platforms;android-35' (sdkmanager) and set ANDROID_HOME
  • rom.yml / web-installer (linux): npm ci --ignore-scripts --no-audit --no-fund: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): npm test: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): npx playwright install --with-deps chromium: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): npm run test:browser: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): python3 -m unittest discover -s tests -p test_installer_manifest.py -v: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH
  • rom.yml / web-installer (linux): bash -n scripts/release.sh: no node, npm, npx on PATH (the workflow uses node 24); put node on PATH

Notes:

  • GitHub runs Python 3.12; this run used Python 3.9.6
  • GitHub runs Python 3.12; the Linux host used Python 3.14.4

@ymote
ymote merged commit e90e98d into main Oct 11, 2026
2 of 6 checks passed
@ymote
ymote deleted the design/pdftools-v2 branch October 11, 2026 01:52
chrislearn pushed a commit to chrislearn/OctoSense that referenced this pull request Oct 11, 2026
`gh pr diff --name-only` refuses a diff over 20,000 lines, so the merge
script could not work out which workflows OctoSense-org#473 triggers (it adds about
34,000 lines of generated designs and evidence frames) and refused it.

List the files from GitHub's paginated pulls/<n>/files instead, with a
renamed file's old path as the pull_request path filters see it, and
refuse when GitHub lists fewer files than the PR changes (the listing
stops at 3,000).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant