Skip to content

Sync lgse/strata#1830, #1834, #1838: ODT previews, run directory fallback, icon tile - #38

Merged
wmfeht merged 23 commits into
mainfrom
claude/friendly-cray-scx3zb
Oct 28, 2026
Merged

wmfeht merged 23 commits into
mainfrom
claude/friendly-cray-scx3zb

Conversation

@wmfeht

@wmfeht wmfeht commented Oct 24, 2026 •

Copy link
Copy Markdown
Owner

Closes #37

Upstream range

bf26829b4fd74c1f25ac170aad9521a633234a30 → 2218357c2e91c0c3e6cd02638356f7a91c08bcae: 3 commits and 3 PRs, with no direct pushes and no triage. sources.yaml holds the new watermark.

GitHub GraphQL is not available from this session, so drift and qa --pr ran on scratch data/prs.jsonl rows. I built those rows through the REST API with the script's own pr_row(). data/prs.jsonl is not committed.

PR Type History row on
lgse/strata#1830 Actions run directory out of the shared temp dir (closes #1821) fix(actions) integration/custom-actions (drift, via the actions scope)
lgse/strata#1834 render ODT and OTT documents (closes #1813) feat(preview) preview/preview-panel
lgse/strata#1838 application icon on a gradient rounded tile (closes #1832) feat(desktop) app/packaging

Per node

New and promoted nodes

  • Promoted: preview/preview-panel/documents.md → documents/index.md. The id is unchanged.
  • New: preview/preview-panel/documents/odt, "ODT and OTT document previews". The owner chose a separate node.
    • Origin {issue: lgse/strata#1813, pr: lgse/strata#1834}.
    • code: [src/services/odt.rs].
    • tests: [src/services/odt/tests.rs, tests/fixtures/documents/report.odt, tests/qa/scenarios/quick_preview/sandboxed-office-shared-preview.jsonl].
    • It holds every Behavior bullet odt.rs implements, plus the ODT reader Design and the ODT-only Known gaps (images and thumbnail fallback, .fodt).
    • Its History table is empty. After the split, drift still names preview/preview-panel for #1834, so the row stays there.
    • Listed in site/unguided.yaml as "New since v1.0.0…", per Sync step 4.

integration

  • integration/custom-actions: History row for #1830. The bullet "Each invocation gets a private 0700 scratch folder in STRATA_ACTION_RUN_DIR…" (#1085) moved to operations/progress/jobs, because src/adapters/local_jobs.rs implements it (Behavior placement).

operations

  • operations/progress/jobs: new ### Run directory group (#1830):

    • The moved #1085 bullet.
    • $XDG_RUNTIME_DIR/strata/actions/<pid>-<n>.
    • The ~/.cache/strata/actions/ fallback, with nothing under /tmp/strata.
    • The $XDG_CACHE_HOME fallback.
    • An empty variable counts as unset.

    A new Design bullet cites #1821 for the risk, which was never reproduced, and its suggested fixes, and #1830 for the fix it chose. No History row, per Row placement. review went from reviewed to draft.

app

  • app/packaging: History row for #1838.
    • New Behavior bullet on the icon's look.
    • Design: replaced the false "Lucide layers glyph on a backdrop" sentence. The SVG #182 merged was already the white Strata logo. Added sourced bullets on the single-SVG choice (#1832 options), the gradient and edge (#1838 second commit), the self-rounded corners (MacTahoe), and the 228/284 tile with a 51-unit radius.
  • app/infrastructure: #1834 touched only src/services/mod.rs and typos.toml. No content changed.

preview

  • preview/preview-panel: History row for #1834.
    • Remote-only bullets now include ODT/OTT, moved here from documents because ui/preview.rs and adapters/local_preview.rs implement them. The new wording: "No preview for this selection" for recognizable names, and "Copy this file locally…" only when the content type reveals the format.
    • A text file named .odt previews as text.
    • Rendered DOCX/ODT/OTT/workbook previews hide Toggle word wrap, and DOCX/ODT/OTT always wrap whatever the preference. The always-wrap rationale is in Design.
    • The heavy-preview permit list now includes ODT.
    • New Known gap: bare .h264 on systems whose MIME database types it application/octet-stream (#1861).
  • preview/preview-panel/documents:
    • tests gains tests/fixtures/documents/report.docx and tests/fixtures/documents/README.md, which describes both fixtures.
    • The ODT bullets live on the new odt child. The Summary names the child.
    • The false "DOCX paragraphs never wrap" bullet is removed. Its replacement, that DOCX, ODT and OTT always wrap, lives on preview-panel, because src/ui/preview.rs decides it.
    • The wrap-off bullets are scoped to Markdown, HTML and RTF.
    • Design: ODT is added to the table renderer.
    • Known gaps:
      • ODT removed from the "no rendered preview" gap.
      • Added: the 2 KiB mid-word break and RTF surrogate-pair emoji (#1861).
  • preview/preview-panel/layout: DOCX/ODT/OTT now center at 1280 px whatever the wrap setting. The left-edge bullets are limited to workbooks, and to Markdown/HTML/RTF with wrap off.
  • preview/preview-panel/find: ODT/OTT prose is searchable.
  • preview/preview-panel/sandbox:
    • The 20 MiB input limit message and the helper-failure message.
    • Design: the docx/odt format argument (#1834). The symlink clause is attributed to #1276.
  • preview/preview-panel/media: qualified the bare .h264 bullet, which needs a MIME database that types the stream as video (#1861).
  • Checked and unchanged: preview/preview-panel/model-views, preview/quick-preview. Their reviewed_at is not moved.

QA

PR Tier-1 primary nodes Sweeps Unmapped
#1830 operations/progress/jobs (+ operations/progress) operations none
#1834 preview/preview-panel and its children documents, documents/odt, find, layout, model-views, sandbox; preview/quick-preview; app/infrastructure preview, app none (before: src/services/odt.rs, src/services/odt/tests.rs, tests/fixtures/documents/README.md, report.odt)
#1838 app/packaging (+ aur, installer) app none

Unmapped-file assignments (ownership rule 1):

  • src/services/odt.rs → documents code: it implements ODT rendering.
  • src/services/odt/tests.rs and tests/fixtures/documents/report.odt → documents tests.
  • tests/fixtures/documents/README.md describes those fixtures. No node lists it explicitly, and it is no longer flagged. Narrowing tests/fixtures/documents to the two report files left it unlisted; it is fixture documentation, not a feature.

Sweeps touched, all with reviewed_at moved to 2218357c:

  • app:
    • Setup gains a shell with a configurable dock and an icon theme that ships no Strata icon.
    • Two app/packaging probes for icon sizes, backgrounds, and themes.
  • integration: reviewed_at only. The custom-actions probes still hold.
  • operations:
    • Setup gains a second local user and a sleeping Python Action.
    • Two operations/progress/jobs probes: the XDG_RUNTIME_DIR/XDG_CACHE_HOME combinations while an Action runs, and /tmp/strata/actions owned by another user.
  • preview:
    • Scope and Setup gain the ODT samples.
    • The layout wrap probe is rewritten. The ODT has no wrap button, so wrap is toggled from the Markdown preview or a second window.
    • New probes under preview-panel, documents, find, and sandbox for remote/text-named ODT, header rows, preformatted links, deep nesting, long paragraphs, omitted content, and oversized/broken ODT inputs.
    • No probe retired.

Needs a person

  • Row placement for #1830. Drift put the row on integration/custom-actions through the actions scope, while the code and Behavior sit on operations/progress/jobs. I followed drift.
  • Possible upstream gaps, found by code reading. No lgse/strata issue covers them, and nothing was filed:
    • After #1830, create_run_directory (src/adapters/local_jobs.rs:509-547) still checks ownership only of <root>/strata/actions, not its parents, and works by path names. This is the residue of #1821 (now closed). It matters only when XDG_RUNTIME_DIR or XDG_CACHE_HOME points at a shared directory.
    • Stale code comment at src/adapters/local_jobs.rs:508: "The temporary-directory fallback may be shared with other users".
    • ODT images and the Thumbnails/thumbnail.png fallback: the #1834 review comment recommends a follow-up issue, and none exists. The Known gap cites #1834 and #1813 for now.
  • Site drift, for the release docs run, not this sync: site/src/reference/document-previews.md still says DOCX doesn't wrap and that ODT is unsupported. The remote-files sentence omits ODT. Separately, check warns that the latest stable upstream release is v1.1.0 while the site describes v1.0.0, so a docs-update run for v1.1.0 is due.
  • (unverified) claims added or changed:
    • app/packaging: icon gradient colors and direction (from the SVG).
    • operations/progress/jobs:
      • <pid>-<n> naming under $XDG_RUNTIME_DIR.
      • The $XDG_CACHE_HOME fallback.
      • Empty variables count as unset (GLib gutils.c).
    • documents/odt:
      • Uppercase .ODT/.OTT.
      • Extensionless ODT typed by GIO.
      • Outline levels above 6, and Title/Subtitle.
      • Code blocks drop inline formatting.
      • Paragraph-style emphasis is ignored on headings and preformatted text, and kept in cells.
      • Links outside preformatted text only.
      • Only the first header row becomes the titles.
      • A row over 256 cells truncates.
      • text:line-break and text:list-header.
      • A heading in a cell.
      • "Column N" titles without a header group.
      • No omission notice.
    • find: ODT prose is searchable.
    • preview-panel:
      • A text file named .odt/.ott.
      • Local-only formats.
      • Remote "No preview for this selection" with no menu item.
      • Remote "Copy this file locally…".
      • Hidden Toggle word wrap.
      • Heavy-preview permit.
    • layout: centering at 1280 px, and workbooks start at the left edge.
    • sandbox: the 20 MiB message, and the helper-failure message.

Review loop

Three rounds, with fresh reviewers per area each round. A separate verifier checked each blocking finding before any fix.

  • Round 1:

    • operations: 3 blocking findings, all confirmed:
      • "runs in" the run directory was wrong.
      • The cache fallback was stated unconditionally.
      • The #1821 alternatives were credited to #1830.
    • preview: 6 blocking findings; 5 confirmed or partly confirmed, 1 refuted:
      • Multi-row headers.
      • Links in preformatted text.
      • Wrap-off bullets still covered DOCX.
      • A wrap-toggle claim.
      • The remote message is unreachable for recognizable names.
      • Refuted: the wrap probes can't be run. They can, from another window. I clarified them anyway.
    • app: minor findings only.
    • All fixed, along with most minors.
  • Round 2:

    • Duplicated run-directory Behavior across custom-actions and jobs: confirmed in code and moved.
    • In preview, "cells ignore paragraph emphasis" was false (odt.rs:582-598).
    • Remote bullets sat on a node that doesn't own their code.
    • All fixed, with the minors (fixture glob narrowed, .h264 contradiction with media, probe placement, sentence lengths).
  • Round 3:

    • app/operations: two over-length sentences, fixed.
    • preview: no blocking findings. Minors fixed: the cell-heading wording, and Setup naming for the ODT samples.
    • The always-wrap placement point was settled by moving the bullet to preview-panel.
  • ODT split: after the owner's decision, a fresh reviewer checked the split.

    • 2 blocking findings, both fixed:
      • The "Column N titles" bullet belongs on odt (odt.rs:782 against docx.rs:129).
      • A wrap and selection probe sat under odt, while its Behavior lives on preview-panel and documents.
    • 3 minors, all fixed: the E2E scenario added to odt tests, a Design antecedent, and a note on the shared RichTextData notice.

scripts/featuremap.py check reports 0 errors. Its 25 warnings are all site/release staleness (v1.1.0). The unit tests pass (39).

https://claude.ai/code/session_016YcVff1SP7CP7vXCsQ6hKD


Generated by Claude Code

…back, icon tile

- preview: render ODT and OTT documents; DOCX and ODT always wrap (lgse/strata#1834)
- operations/integration: Actions run directory falls back to the user cache
  directory, never /tmp/strata (lgse/strata#1830)
- app/packaging: colored logo on a gradient rounded tile (lgse/strata#1838)
- Advance the watermark to 2218357c.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016YcVff1SP7CP7vXCsQ6hKD
Promote documents.md to documents/index.md and give ODT and OTT their own
node (origin lgse/strata#1813, lgse/strata#1834) owning src/services/odt.rs.
Move the DOCX/ODT always-wrap bullet to preview-panel, which decides it in
src/ui/preview.rs, and list the new node in site/unguided.yaml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016YcVff1SP7CP7vXCsQ6hKD
…ws, privacy fixes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDGHgPPbPSoQNyPdmyFNpq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UDGHgPPbPSoQNyPdmyFNpq
…d settings saves

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015rmfTXdVg1CEGCkG21C8Au
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015rmfTXdVg1CEGCkG21C8Au
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015rmfTXdVg1CEGCkG21C8Au
…robe and wording fixes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015rmfTXdVg1CEGCkG21C8Au
…earch, preview fixes

Syncs lgse/strata#1904, #1898, #1899, #1906, #1908, and #1901
(be3343a..923b39d) and advances the watermark.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RQ23A9aNN8aT7Tpt3zouac
Sync lgse/strata#1898–#1908: Save stem selection, multi-word global search, preview fixes
Sync lgse/strata#1872–#1896: accessible names, menus past the window, shared settings saves
Sync lgse/strata#1831–#1871: tabs from drags, G-code and route previews, privacy fixes
@wmfeht
wmfeht merged commit 7e11dd2 into main Oct 28, 2026
2 checks passed
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.

Update feature map: lgse/strata#1830, #1834, #1838

2 participants