Second of three focused PRs, following merged #163. This adds the publish screen; editor controls and the contextual editor entry point remain a separate follow-up.
Large checkbox filename labels and separate Edit links; explicit Check / Sync & Check actions.
One table across selection, publication and completion. Retain confirmed outcomes, row order, inline failures and unselected work.
Refresh pending work locally after publication before enabling another publish; never silently select new/unselected changes.
Keep completion-event failures when refreshed metadata is stale or unavailable.
Keep orchestration in the page; extract schema/phase/log presentation and scrolling into publish-local PublishDetails.
Show the Publish action only for actionable work; keep Details collapsed and all pending removals visible.
Global removal/schema policy and publishing backend behavior are unchanged. Includes a test-only worker CSS matcher correction: heading names must be selector tokens, not substrings in generated scope hashes. No renderer/catalog changes.
Verification
Independent code and readability reviews: findings fixed and closed by source inspection.
Isolated workspace dependencies; exact staged tree verified.
All 23 gates and 2,604 tests passed (web 1,854; worker 341; shared/native 409).
Pure/SSR regressions cover retained outcomes/selection, stale metadata, replayed logs, independent Details rendering and escaped filenames/messages.
Browser scrolling/toggles/keyboard, live EventSource/invalidation/navigation behavior, production Docker/Compose, live CDN/proxy operations and performance/authentication handshake were not verified. Archive edits and editor/theme follow-up work are excluded.
## Summary
Second of three focused PRs, following merged #163. This adds the publish screen; editor controls and the contextual editor entry point remain a separate follow-up.
- Large checkbox filename labels and separate Edit links; explicit **Check** / **Sync & Check** actions.
- One table across selection, publication and completion. Retain confirmed outcomes, row order, inline failures and unselected work.
- Refresh pending work locally after publication before enabling another publish; never silently select new/unselected changes.
- Keep completion-event failures when refreshed metadata is stale or unavailable.
- Keep orchestration in the page; extract schema/phase/log presentation and scrolling into publish-local `PublishDetails`.
- Show the Publish action only for actionable work; keep Details collapsed and all pending removals visible.
Global removal/schema policy and publishing backend behavior are unchanged. Includes a test-only worker CSS matcher correction: heading names must be selector tokens, not substrings in generated scope hashes. No renderer/catalog changes.
## Verification
- Independent code and readability reviews: findings fixed and closed by source inspection.
- Isolated workspace dependencies; exact staged tree verified.
- All **23 gates and 2,604 tests passed** (web 1,854; worker 341; shared/native 409).
- Svelte: 0 errors, 27 existing warnings. Worker line coverage 98.58%; jobs/config/helpers/theme 100%.
- Pure/SSR regressions cover retained outcomes/selection, stale metadata, replayed logs, independent Details rendering and escaped filenames/messages.
Browser scrolling/toggles/keyboard, live EventSource/invalidation/navigation behavior, production Docker/Compose, live CDN/proxy operations and performance/authentication handshake were not verified. Archive edits and editor/theme follow-up work are excluded.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Second of three focused PRs, following merged #163. This adds the publish screen; editor controls and the contextual editor entry point remain a separate follow-up.
PublishDetails.Global removal/schema policy and publishing backend behavior are unchanged. Includes a test-only worker CSS matcher correction: heading names must be selector tokens, not substrings in generated scope hashes. No renderer/catalog changes.
Verification
Browser scrolling/toggles/keyboard, live EventSource/invalidation/navigation behavior, production Docker/Compose, live CDN/proxy operations and performance/authentication handshake were not verified. Archive edits and editor/theme follow-up work are excluded.