Skip to content
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f2577a6
docs(canvas): rewrite sharing spec for authenticated viewer
0101 Aug 17, 2026
2c540a9
[tm-canvas-safe-share-rkm] Implement viewer storage and expiry pipeline
0101 Aug 17, 2026
4dc5549
tm-canvas-safe-share-cmd Contain active HTML in viewer
0101 Aug 17, 2026
970d962
tm-canvas-safe-share-ydm Switch publisher to clean viewer URLs
0101 Aug 17, 2026
0b0e343
tm-canvas-safe-share-6eg Automate viewer deployment
0101 Aug 17, 2026
4f4ac35
[tm-canvas-safe-share-xur] Run focused code review
0101 Aug 18, 2026
5646521
tm-canvas-safe-share-tjo Reject broader viewer Blob access
0101 Aug 18, 2026
0ba4072
tm-canvas-safe-share-c58 Handle viewer dependency failures safely
0101 Aug 18, 2026
b7fb037
tm-canvas-safe-share-7ph Honor case-insensitive expiry metadata
0101 Aug 18, 2026
680c95d
tm-canvas-safe-share-069 Align publisher and viewer filenames
0101 Aug 18, 2026
0853e32
tm-canvas-safe-share-266 Deny cross-origin shell framing
0101 Aug 18, 2026
c76cd79
tm-canvas-safe-share-o88 Avoid duplicate viewer Blob downloads
0101 Aug 18, 2026
b1938e6
tm-canvas-safe-share-ve1 Require root viewer base URLs
0101 Aug 18, 2026
2e67a5d
tm-canvas-safe-share-798 Block top-level content-route execution
0101 Aug 18, 2026
06b5145
tm-canvas-safe-share-39x Make viewer deployment automation work on Wi…
0101 Aug 18, 2026
b215f84
tm-canvas-safe-share-arh Fix Easy Auth callback for tenant users
0101 Aug 18, 2026
177d23f
Guard canvas viewer deployment subscription
0101 Aug 20, 2026
7e6932e
tm-canvas-safe-share-p96 Fix F1 Azure.ps1:223 cross-subscription corr…
0101 Aug 20, 2026
ffab63b
tm-canvas-safe-share-6f6 Fix F2/F3 Azure.ps1:252,266 extraction and a…
0101 Aug 20, 2026
f103ece
tm-canvas-safe-share-d75 Reconcile moved app identity attachment inst…
0101 Aug 20, 2026
6eb85f2
tm-canvas-safe-share-feo Permit private verification workflow reports
0101 Aug 20, 2026
eec99cf
tm-canvas-safe-share-djv Reconcile the viewer after the manual portal…
0101 Aug 24, 2026
5a0a5d0
Merge origin/main into canvas-safe-share
0101 Aug 25, 2026
e709647
Minimize canvas viewer implementation
0101 Aug 26, 2026
d204812
Merge commit 'f8032ef10c3813c574cbb89de1aafb2429f54d6a' into canvas-s…
0101 Aug 26, 2026
10974f0
Improve canvas viewer consent experience
0101 Aug 26, 2026
f7c81a4
Simplify canvas viewer provisioning and streaming
0101 Aug 27, 2026
8b42856
Merge commit '897a71c00eec46c6af6534ab2964db4f3fd81112' into canvas-s…
0101 Aug 27, 2026
1c169bc
Merge commit '5ce43f24f1d65ecb709769f721ef1f86fd692a48' into canvas-s…
0101 Aug 27, 2026
38af584
Merge commit '1d7233cf8aca5b416feb600fea1410d3ab3ae34a' into canvas-s…
0101 Aug 28, 2026
5f95806
Remove global verification policy from repo guidance
0101 Aug 28, 2026
14e499b
Fix canvas viewer identity and navigation verification
0101 Aug 28, 2026
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
4 changes: 2 additions & 2 deletions docs/spec/canvas-pane.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ A `SystemView` drives its own updates, so it needs neither morph nor the author
- Selecting a tab marks that doc viewed.
- Viewed but inactive tabs render at 0.5 opacity. The active tab stays full opacity.
- The archive button moves the active doc to `.agents/canvas/archive/`. It is shown only when the active doc is an `AgentDoc` — a `SystemView` is server-regenerated, not user-owned, so it has no archive button.
- The share button publishes the active doc to an unguessable, auto-expiring URL and copies a rich titled link to the clipboard. Like archive, it is shown only when the active doc is an `AgentDoc` — a `SystemView` is server-generated, not shareable, so it has no share button. Clipboard success uses the shared, dismissible `ClipboardNotice` channel (green), independent of the send `Waiting` and delivery-`Failed` banners: a successful publish shows `Shared — link copied` (or `Shared — link ready, copy it manually: <url>` when the async clipboard write is rejected), while a *failed* publish reuses the existing red `CanvasSendState.Failed` error banner. Success and failure are mutually exclusive — each result arm clears the other channel — so a red + green stack never renders. Share cannot start while a path copy is pending, and path copy cannot start until Share has completed its publish and clipboard phases. See `docs/spec/canvas-sharing.md` for the full publish/SAS/clipboard flow.
- The share button publishes the active doc to an unguessable, auto-expiring authenticated-viewer URL and copies a rich titled link to the clipboard. Like archive, it is shown only when the active doc is an `AgentDoc` — a `SystemView` is server-generated, not shareable, so it has no share button. Clipboard success uses the dismissible `ClipboardNotice` channel (green), independent of the send `Waiting` and delivery-`Failed` banners: a successful publish shows `Shared — link copied` (or `Shared — link ready, copy it manually: <url>` when the async clipboard write is rejected), while a *failed* publish reuses the existing red `CanvasSendState.Failed` error banner. Success and failure are mutually exclusive — each result arm clears the other channel — so a red + green stack never renders. Share cannot start while a path copy is pending, and path copy cannot start until Share has completed its publish and clipboard phases. See `docs/spec/canvas-sharing.md` for the full publish/viewer/clipboard flow.

### Canvas Overview

Expand Down Expand Up @@ -335,7 +335,7 @@ changed rows already use).

- `docs/spec/worktree-monitor.md` — parent dashboard architecture spec
- `docs/spec/beadspace-canvas.md` — beads dashboard integration in the canvas pane
- `docs/spec/canvas-sharing.md` — one-click Share of a focused `AgentDoc` to an unguessable, auto-expiring URL (the tab-bar Share button, its publish/SAS backend, and the clipboard rich link)
- `docs/spec/canvas-sharing.md` — one-click Share of a focused `AgentDoc` to an unguessable, auto-expiring authenticated-viewer URL (the tab-bar Share button, private-Blob publisher, and clipboard rich link)
- `docs/spec/canvas-interaction-routing.md` — ownership, generated-view affinity, queueing, and session routing
- `docs/spec/worktree-diff-viewer.md` — generated worktree diff SystemView
- `docs/spec/future/canvas-roadmap.md` — remaining canvas work (authoring DX, templates)
729 changes: 343 additions & 386 deletions docs/spec/canvas-sharing.md

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion docs/spec/future/code-improvements.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ its own worktree. This file is the entry point; detailed designs live in their o
| 3 | **Canvas roadmap items** — follow-on canvas-pane enhancements | `docs/spec/future/canvas-roadmap.md` | Idea |
| 4 | **Process: guard against spec drift** — a lightweight check (or review rule) that flags `Key Files` references to moved/renamed modules so docs can't silently rot after refactors | — | Idea |
| 5 | **Survey other large modules** — *investigated.* `RefreshScheduler.fs` and `WorktreeApi.fs` both mix concerns; the concrete split is broken out as #8 below (and #7, the `GlobalConfig` extract, now *Done*). `WorktreeDiff.fs` is tracked separately as #13. (Strict-FP smells are already clean: no stray `let mutable`/loops/`null` in production; `Dictionary` only at cache/registry boundaries.) | — | Done (survey) |
| 6 | **Remoting CSRF / Origin hardening** — pipeline-level Origin/Referer check so a cross-origin browser page can't drive the unauthenticated loopback Fable.Remoting API (covers the dangerous pre-existing process-launching endpoints, not just watched-roots) | `docs/spec/remoting-csrf-hardening.md` | **Done** — shipped on `quicklaunch` (`HttpSecurity.csrfGuard`) |
| 8 | **Split `RefreshScheduler.fs`** — the `DashboardState`/`StateMsg`/`processMessage` state slice now lives in `SchedulerState.fs`; the embedded `CanvasWatchers` filesystem-watcher module (~110 L) still sits inside the scheduling loop and can follow the same seam. | — | Partly done (state slice extracted) |
| 10 | **Share the `WorktreeDiffTests` git fixture** — the suite creates a real repository per test in `[<SetUp>]` (`initRepoOnMain`), making it the single largest contributor to Fast-suite runtime. Build the repository once in `[<OneTimeSetUp>]` and give each test its own branch or clone. | — | Idea |
| 11 | **Fast-suite runtime exceeds its documented budget** — AGENTS.md advertises `<60s` for `Category=Fast`; the suite has been several times that for a while, dominated by browser-driven fixtures (`DashboardTests`, `CreateWorktreeServerTests`, `ArchiveTests`) plus #10. Either bring the suite back under budget or correct the figure, because a stale number stops it acting as a gate. | — | Idea |
Expand Down
2 changes: 1 addition & 1 deletion docs/spec/process-execution.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,5 +169,5 @@ not a settled one.
## Related Specs

- `docs/spec/worktree-diff-viewer.md` — request-scoped deadline and byte-oriented Git consumers.
- `docs/spec/remoting-csrf-hardening.md` — the other pipeline-level hardening of the same
- `docs/spec/worktree-monitor.md` — the loopback request boundary protecting the same
process-launching surface.
139 changes: 0 additions & 139 deletions docs/spec/remoting-csrf-hardening.md

This file was deleted.

2 changes: 1 addition & 1 deletion docs/spec/session-status-push.md
Original file line number Diff line number Diff line change
Expand Up @@ -258,5 +258,5 @@ projection but persists the complete count-only aggregate independently; see
- `docs/spec/overview-activity-history.md` - durable canonical Overview snapshots.
- `docs/spec/overview-drilldown.md` - per-group session details.
- `docs/spec/resume-last-session.md` - resume command behavior.
- `docs/spec/remoting-csrf-hardening.md` - endpoint origin protection.
- `docs/spec/worktree-monitor.md` - endpoint origin protection.
- `docs/spec/native-session-management.md` - terminal/window liveness, distinct from push openness.
Loading
Loading