Commit Graph
3241 Commits
Author SHA1 Message Date
DottaandPaperclip 343f1e5712 Validate recovery owners with remote workspace storage master
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '45c6a9b8352b12262027dab3aca7d9cfcd919d60':
  feat(workspaces): keep remote files off the webserver disk (#18403)
2026-10-31 15:21:10 -05:00
DottaandPaperclip 45c6a9b835 Validate GitHub owner with current remote workspace storage master
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '5e4cc0107324f1af9432d3f1f40e9ecf2e742bd9':
  feat(workspaces): keep remote files off the webserver disk (#18403)
2026-10-31 15:20:59 -05:00
DottaandPaperclip 5e4cc01073 feat(workspaces): keep remote files off the webserver disk (#18403)
Keep native sandbox workspace files independent of the webserver disk. Use encrypted saved versions and Postgres ownership so a replacement server can recover files and continue work. Enable the path by default for new eligible workspaces when durable storage is configured.

Preserve explicit opt-outs and existing host workspaces. Include safe snapshot repair, Files access, import, migration and retention. Bound saved-Files resources, preserve imported Git recovery, reject unfinished Git operations, publish immutable concurrent captures, and verify permanent object-version deletion.

Validated 471 targeted local controls, build/typechecks, all 40 CI partitions, fresh Greptile 5/5 and security review. The PR records original failed attempts and scoped retries.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 14:54:01 -05:00
DottaandPaperclip 25d3bd6f38 Carry qualified live GitHub enrollment repair into recovery integration
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'f77620b9a4b76cc05508612ee894a20b751651bb':
  Refresh GitHub event connector after live enrollment
2026-10-31 14:52:09 -05:00
DottaandPaperclip f77620b9a4 Refresh GitHub event connector after live enrollment
Resolve the current identity only on admitted work, retain unchanged connector negotiation, and replace removed or rotated identity configuration. Prove real signed enrollment and encrypted event delivery without recreating the registered worker or adding idle polling.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 14:50:21 -05:00
DottaandPaperclip 75fa37f30f fix(server): expire native backups from retention deadlines (#18380)
Reviewed and verified at 5b137b5cda.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 14:31:31 -05:00
DottaandPaperclip 453f5fbb78 perf(external-objects): schedule scoped refresh obligations (#18384)
Reviewed and verified at 3e58e12f87.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 14:09:24 -05:00
DottaandPaperclip 376dc050a8 Merge qualified workspace storage and external owner integration into PR 18419
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '6d54fb819d1ac35ea2eec96b99564a27ea2f54b7':
  fix(server): schedule only outstanding merge confirmations (#18382)
  fix(workspaces): inspect storage only when needed (#18410)
2026-10-31 13:50:25 -05:00
DottaandPaperclip 6d54fb819d Merge qualified workspace storage and external owner integration into PR 18395
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '56f78fa75e5bc7aa6c54a76badd5644bd3f73fdb':
  fix(server): schedule only outstanding merge confirmations (#18382)
  fix(workspaces): inspect storage only when needed (#18410)
2026-10-31 13:50:24 -05:00
DottaandPaperclip 56f78fa75e Merge qualified workspace storage and external owner integration into PR 18380
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '3e58e12f877d70e5acab272d817ac65b273767c0':
  fix(server): schedule only outstanding merge confirmations (#18382)
  fix(workspaces): inspect storage only when needed (#18410)
2026-10-31 13:50:23 -05:00
DottaandPaperclip 3e58e12f87 Merge landed confirmations and workspace storage inspection into external refresh work
Keep provider activation signals and external refresh intent in the same owning transaction. Preserve all other qualified owner and incoming master blobs.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 13:49:22 -05:00
DottaandPaperclip c32ecf6657 fix(server): schedule only outstanding merge confirmations (#18382)
Reviewed and verified at bc22051c56.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 13:44:46 -05:00
Nicky Leach 6484f96c28 fix(workspaces): inspect storage only when needed (#18410) 2026-10-31 11:43:18 -07:00
DottaandPaperclip 45db3d73b0 Merge landed routines master carry into PR 18419
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '191f515c539e5007b63b933c56406303b1a50ea2':
  fix(server): settle routine history without idle scans (#18399)
  Qualify explicit native written references in the basic question journey (#18459)
  perf(tasks): defer completed transcripts on compact opens (#18461)
2026-10-31 13:21:57 -05:00
DottaandPaperclip 191f515c53 Merge landed routines master carry into PR 18395
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'cf209b9fa6f5f0143b402bb3818da59fd3d53027':
  fix(server): settle routine history without idle scans (#18399)
  Qualify explicit native written references in the basic question journey (#18459)
  perf(tasks): defer completed transcripts on compact opens (#18461)
2026-10-31 13:21:55 -05:00
DottaandPaperclip cf209b9fa6 Merge landed routines master carry into PR 18380
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'b8e166206bd61f746a7ba571d08cfa7ca80b44e2':
  fix(server): settle routine history without idle scans (#18399)
  Qualify explicit native written references in the basic question journey (#18459)
  perf(tasks): defer completed transcripts on compact opens (#18461)
2026-10-31 13:21:54 -05:00
DottaandPaperclip b8e166206b Merge landed routines master carry into PR 18384
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'bc22051c56b9bef7d492e88ad8f6b5dcd773f6f5':
  fix(server): settle routine history without idle scans (#18399)
  Qualify explicit native written references in the basic question journey (#18459)
  perf(tasks): defer completed transcripts on compact opens (#18461)
2026-10-31 13:21:53 -05:00
DottaandPaperclip bc22051c56 Merge landed routines and current master into merge confirmation work
Preserve all 15 qualified confirmation files and exactly the 23 incoming master UI, documentation, and test paths.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 13:20:57 -05:00
DottaandPaperclip 9a3f395737 fix(server): settle routine history without idle scans (#18399)
Reviewed and verified at 0b65f490d9.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 13:19:31 -05:00
DottaandPaperclip a0c2b6659a Merge qualified routine query-accounting repair into PR 18419
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '0bc88a9a71ccf4839de8e7914cfd663492f8085a':
  test: distinguish status-card candidate and revision reads
  perf(server): stop recurring attention retention scans (#18388)
2026-10-31 13:00:56 -05:00
DottaandPaperclip 0bc88a9a71 Merge qualified routine query-accounting repair into PR 18395
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'abe9d2ce143dd12de2c9667062a0ea4c9ddfda29':
  test: distinguish status-card candidate and revision reads
  perf(server): stop recurring attention retention scans (#18388)
2026-10-31 13:00:55 -05:00
DottaandPaperclip abe9d2ce14 Merge qualified routine query-accounting repair into PR 18380
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '820101c4cb49d5d1cf7853ffa8601f7c49a634a8':
  test: distinguish status-card candidate and revision reads
  perf(server): stop recurring attention retention scans (#18388)
2026-10-31 13:00:54 -05:00
DottaandPaperclip 820101c4cb Merge qualified routine query-accounting repair into PR 18384
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '85a1e9243e08f6864ef8b317daa9a1838fe1bdb5':
  test: distinguish status-card candidate and revision reads
  perf(server): stop recurring attention retention scans (#18388)
2026-10-31 13:00:53 -05:00
DottaandPaperclip 85a1e9243e Merge qualified routine query-accounting repair into PR 18382
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '0b65f490d98d53c7031d9d306d4f65da9e821ed3':
  test: distinguish status-card candidate and revision reads
  perf(server): stop recurring attention retention scans (#18388)
2026-10-31 13:00:53 -05:00
DottaandPaperclip 0b65f490d9 test: distinguish status-card candidate and revision reads
Retain independent coalescing budgets for candidate reconstruction and required generation-revision reads. Preserve pass/search/deadline/quiet limits; the prior classifier counted both query shapes as reconstruction.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:58:32 -05:00
DottaandPaperclip 91fdf02e95 perf(tasks): defer completed transcripts on compact opens (#18461)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Task conversations must show the saved instruction and recent
replies quickly.
> - Compact task reads already limit the saved message window.
> - The conversation still waits for completed run transcripts even when
a saved reply contains the result.
> - Removing that wait alone can insert activity after the reader starts
reading.
> - This pull request defers that output until the reader opens history
and keeps required output in the initial reveal.
> - The benefit is a useful conversation sooner, with a stable first
layout and a working composer.

## Linked Issues or Issue Description

Refs #17593, #18092, #18312, #18358, #18422.

**What happened?**

Opening a task with a long saved investigation can wait for native
events or legacy logs before showing its existing replies. A slow
transcript request can hold the conversation behind the loading screen
until the 15-second fallback.

**Expected behavior**

Show the bounded saved conversation without reading completed output
that already has a usable saved reply. Keep that output available
through the existing history controls.

**Steps to reproduce**

1. Create a task with many completed runs and long saved agent replies.
2. Delay its run events and logs.
3. Open the compact task directly. Before this change, the transcript
read blocks the saved replies and composer.

## What Changed

- Defer completed successful run transcripts on compact task opens when
a usable saved reply is present. Load that output through the existing
history controls.
- Keep required output on the initial path: live and failed runs,
yielded runs, pending interactions, placeholder/progress-only replies,
explicit anchors, chats, and full history. Retain output already
selected during this visit when its run completes.
- Keep saved plans visible when their owning run output is deferred or
still loading.
- Keep the same composer and draft through history expansion. Offer
**More run output** when a single saved run has deferred output.
- Position same-task comment links after their target arrives. Wait only
for a missing target, with a 15-second limit. Unrelated stalled metadata
cannot block an available target after the reveal deadline.
- Preserve the reading anchor when a queued scroll event arrives during
a properties-pane width transition.
- Add a 200-reply/200-run PostgreSQL browser fixture with a saved plan,
covering both task views on desktop and mobile. Correct stale browser
setup for current routes and the shared mobile scroller.
- Remove a random company-prefix collision in the isolated privacy test
fixture that failed during CI.

## Verification

- Final revision `fba3f2fcbb`: 386 focused thread/scroller unit cases
and all 32 production-browser journeys passed. The browser cases cover
both task views on desktop/mobile, saved plans, delayed transcripts,
history, comment links, Back, drafts, retry, avatar continuity, media
and pane resizing. The 25 privacy fixture cases also passed against
PostgreSQL.
- Workspace typecheck and full build passed with Node 24. A broader
local UI run passed 10,220 cases across 849 files before the final
navigation/plan review fixes; the changed components were then rechecked
in the 386-case focused run.
- Five alternating pairs compared master `12b0cc6304` with this
revision, using 200 long saved replies and 200 completed native runs.
Both production UI builds used the same loopback API/database, Chromium
151.0.7922.34, 1440 × 900, fresh browser contexts, service workers
blocked, no CPU throttle, and a controlled 3-second events/log delay.
Builds and other suites were stopped during measurement. No page errors
occurred.

| Useful conversation + editable composer | Baseline median (range) |
Fixed median (range) |
| --- | --- | --- |
| Cold direct open | 3.570s (3.538–3.616s) | 1.056s (1.022–1.141s) |
| Task-list navigation | 3.373s (3.342–3.394s) | 0.899s (0.885–0.915s) |
| Back | 22ms (22–25ms) | 25ms (25–28ms) |

- Median paired savings: 2.519s cold, 2.470s from the list.
Completed-output requests: two per baseline sample, zero per fixed
sample. Recent-comments API control medians were 13.6ms for both, with
ranges 12.1–18.7ms and 11.6–50.8ms. No Back improvement is claimed; an
earlier revision's run also included one 1-second Back outlier, retained
in the local evidence.
- The full local default test command did **not** pass: it stopped on
the existing chat test line-selection error. After restoring embedded
PostgreSQL library symlinks omitted by an install with scripts disabled,
Node 24 passed 672 cases in the first two chat shards, then failed to
select the third. This is separate from the passing focused suites and
remote CI.
- Earlier CI failures were addressed: the privacy prefix collision is
fixed; the delegated task-completion reply case passed locally after
merging master's reply-recovery fix (#18465). Browser fixture
corrections retain the original behavior assertions. Red tests
reproduced the loading, navigation, resize and saved-plan regressions
before their fixes.
- Map, module-boundary, token-gate and added-line token checks passed.
The full-tree token scan still finds pre-existing active-username
fixtures; this PR adds zero forbidden token lines.
- Greptile: **5/5**, final revision, all four review threads resolved.
The final-revision PR CI workflow passed, including build, typecheck,
all server/chat/workspace test shards, all eight E2E shards, and every
Runner lane. GitHub reports 55 successful checks and three skipped
checks. The separate **Paperclip Review** check remains queued with
**Waiting for the assigned agent**; it has not produced an assessment
and has not been bypassed. The branch has no merge conflicts.

## Risks

- The default compact task omits completed transcript details when the
saved result is sufficient. The reader must open history to inspect
them.
- Required structural data remains inside the initial reveal boundary.
Slow server responses for that data remain visible latency.
- Link positioning falls back after 15 seconds when its target never
arrives. The conversation remains readable.
- The measurements use a controlled local delay. They do not establish a
deployed staging speedup.
- No API, schema, authorization, or migration changes.

## Model Used

OpenAI Codex, GPT-6, with tool use and code execution.

## Checklist

- [x] I have included a thinking path that traces from project context
to this change
- [x] I have specified the model used (with version and capability
details)
- [x] I have checked ROADMAP.md and confirmed this PR does not duplicate
planned core work
- [x] I have searched GitHub for duplicate or related PRs and linked
them above
- [x] I have either (a) linked existing issues with `Fixes: #` / `Closes
#` / `Refs #` OR (b) described the issue in-PR following the relevant
issue template
- [x] I have not referenced internal/instance-local Paperclip issues or
links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip`
URLs)
- [x] My branch name describes the change (e.g. `docs/...`, `fix/...`)
and contains no internal Paperclip ticket id or instance-derived details
- [ ] I have run tests locally and they pass (focused suites pass; the
full default wrapper has the existing selection error documented above)
- [x] I have added or updated tests where applicable
- [x] I have updated relevant documentation to reflect my changes
- [x] I have considered and documented any risks above
- [ ] All Paperclip CI gates are green (code CI passed; the separate
assigned-agent Paperclip Review remains queued)
- [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups
- [x] I will address all Greptile and reviewer comments before
requesting merge

---------

Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-10-31 12:56:06 -05:00
DottaandPaperclip dce383c733 perf(server): stop recurring attention retention scans (#18388)
Reviewed and verified at a61af9888e.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:28:40 -05:00
DottaandPaperclip cbcb067fac Carry qualified recovery retention eligibility through 18419
Normal parent merge; only the five independently reviewed retention repair paths change. Preserve every other owner and master blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:10:34 -05:00
DottaandPaperclip c2282741db Carry qualified recovery retention eligibility through 18395
Normal parent merge; only the five independently reviewed retention repair paths change. Preserve every other owner and master blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:10:33 -05:00
DottaandPaperclip 948656c6df Carry qualified recovery retention eligibility through 18380
Normal parent merge; only the five independently reviewed retention repair paths change. Preserve every other owner and master blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:10:33 -05:00
DottaandPaperclip 33b41c3228 Carry qualified recovery retention eligibility through 18384
Normal parent merge; only the five independently reviewed retention repair paths change. Preserve every other owner and master blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:10:32 -05:00
DottaandPaperclip 6c1b783197 Carry qualified recovery retention eligibility through 18382
Normal parent merge; only the five independently reviewed retention repair paths change. Preserve every other owner and master blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:10:32 -05:00
DottaandPaperclip e67e28ee57 Carry qualified recovery retention eligibility through 18399
Normal parent merge; only the five independently reviewed retention repair paths change. Preserve every other owner and master blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:10:31 -05:00
DottaandPaperclip a61af9888e Guard first recovery-action retention by current attention eligibility
Share the canonical human/open predicate with the feed, retain source visibility and actor authority, and preserve manual controls for existing rows. Prove ordinary retry exhaustion remains visible after a denied pre-archive.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 12:07:52 -05:00
DottaandPaperclip 66b5e349d0 Carry qualified landed master through 18419
Preserve the complete owner patch and all current master behavior.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:53:19 -05:00
DottaandPaperclip 493f7e61e4 Carry qualified landed master through 18395
Preserve the complete owner patch and all current master behavior.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:53:16 -05:00
DottaandPaperclip 2e7f433ccd Carry landed native admission through backup ownership
Preserve original backup and master admission patch sequences; qualify combined managed-session, publication, cleanup and release ordering.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:53:14 -05:00
DottaandPaperclip 1bc6269c6e Carry landed master through 18384
Preserve original owner patch sequences and all new master semantics.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:49:09 -05:00
DottaandPaperclip 62eddee7db Carry landed master through 18382
Preserve original owner patch sequences and all new master semantics.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:49:08 -05:00
DottaandPaperclip 110e82d2a3 Carry landed master through 18399
Preserve original owner patch sequences and all new master semantics.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:49:06 -05:00
DottaandPaperclip 9a79769c72 Merge landed cards and current native admission into retention
Preserve the original retention owner and producers alongside current native provider-pack admission, route execution-lock protection, canonical work-signal imports, and master CI/UI changes.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:46:11 -05:00
DottaandPaperclip b6b57079b9 fix: evaluate status cards on committed changes and deadlines (#18401)
Reviewed and verified at 21795e222a.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:41:59 -05:00
DottaandPaperclip 4f2923f316 Carry qualified fixture wake reason through 18419
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:12 -05:00
DottaandPaperclip 38836b6eb5 Carry qualified fixture wake reason through 18395
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:12 -05:00
DottaandPaperclip fac8603c2a Carry qualified fixture wake reason through 18380
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:11 -05:00
DottaandPaperclip 978f13f201 Carry qualified fixture wake reason through 18384
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:11 -05:00
DottaandPaperclip 395a4fd068 Carry qualified fixture wake reason through 18382
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:11 -05:00
DottaandPaperclip c0db98d007 Carry qualified fixture wake reason through 18399
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:10 -05:00
DottaandPaperclip 8fc9220ff9 Carry qualified fixture wake reason through 18388
Normal parent merge; only the qualified queued-run fixture changes. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:20:10 -05:00
DottaandPaperclip 21795e222a test: specify assigned wake reason in held-read fixture
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:18:41 -05:00