Commit Graph
4652 Commits
Author SHA1 Message Date
DottaandPaperclip 97df59cb3a fix(db): make instruction migrations safe to replay
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:58:49 -05:00
DottaandPaperclip 69549d4248 fix(api): document preserved instruction candidate endpoints
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:55:53 -05:00
DottaandPaperclip 14c3d810c9 test: admit active coordinator in combined export fixture
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:46:03 -05:00
DottaandPaperclip d0d0003d51 fix: recheck native recovery admission under workspace ownership
Preserve terminal unsafe-archive repairs and future retry delays when an earlier reconciler snapshot enters after the live owner releases copyback.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:45:59 -05:00
DottaandPaperclip d3199cf076 test: regenerate combined instruction and API tool contracts
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:36:02 -05:00
Dotta ecc6752b6a test(e2e): prove saved API response pagination through EOF 2026-09-27 18:34:12 -05:00
DottaandPaperclip 30b391e7de test: separate instruction proof nonce from fixture identity
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip ffac79eb55 test: seed instruction drift fixture without versioned writer bypass
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip 64e2492d30 test: verify instruction history and conflict resolution in browser
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip fdeab1c38a test: specify exact instruction append bytes
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip def43036d9 test: conceal persisted nonce from fresh instruction task
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip 6e79377539 test(instructions): package canonical API evidence for live proof
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip 4340f51e16 fix(instructions): persist registered edits after provider shutdown
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:40 -05:00
DottaandPaperclip a5119d40eb feat(adapters): collect instruction edits at verified provider stop boundary
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:11 -05:00
DottaandPaperclip 3943048383 feat: review and resolve preserved agent instruction edits
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:33:11 -05:00
DottaandPaperclip 5b8dd74c08 feat(runner): expose canonical instruction revision tools
Add native read, update, history, and restore operations with server-bound identity and revision compare-and-swap safety. Register the default catalog and API discovery paths; cover real authority authorization and exact revision restore.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:32:34 -05:00
Fry (Paperclip) 7dfb327bb7 feat(instructions): persist canonical revisions with authorized history and restore
Implement PAP-66 foundation: exact content history, transactional compare-and-swap saves, current responsible-user authorization, recoverable materialization, and editor history. Keep run staging and cleanup integration with PAP-63.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:32:34 -05:00
DottaandPaperclip c2c9996e81 test: match ownership fixture callback and acquired result
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:31:36 -05:00
DottaandPaperclip b727a5659d test: compose unsafe export fixture with finalization ownership
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:28:32 -05:00
DottaandPaperclip 9e3b48fc0c test(runner): persist regression journal through public control-plane API
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:28:32 -05:00
DottaandPaperclip d02e0f45e7 fix: preserve agent-owned native result recovery
Keep settled and foreign-owner failures fenced while allowing audit-only malformed-result outcomes to materialize their existing bounded recovery action.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:26:54 -05:00
DottaandPaperclip c5b2a16a28 fix: recover joined workspace ownership after database reconnect
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:26:54 -05:00
DottaandPaperclip 51f200243f fix: require copyback stop proof after abrupt controller death
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:26:54 -05:00
DottaandPaperclip 2b745708bd fix: serialize native workspace finalization and preserve committed outcomes
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:26:54 -05:00
DottaandPaperclip 372823f0f7 fix(runner): accept valid large journals during session continuation
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:25:16 -05:00
Dotta 6514d4114d test(daytona): allow child startup before deadline witness 2026-09-27 18:25:16 -05:00
Dotta 0ec73dfd1b fix(daytona): stream confined archive listings with bounded entries 2026-09-27 18:25:16 -05:00
DottaandPaperclip 3564925508 Bound saved API text pages with authenticated storage ranges
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 18:25:16 -05:00
DottaandPaperclip d13aeb36f4 fix(ui): preserve review and download actions for text artifacts
Keep Markdown review documents available alongside explicit attachment tabs. Preserve direct card downloads and separate the preview action. Regressions fail with the text context enabled before the fix; 199 focused tests and both desktop/mobile browser cases pass afterward.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:54:33 -05:00
Dotta 92867f4173 test(e2e): select visible proof when delivery repeats its card 2026-09-27 16:49:05 -05:00
DottaandPaperclip ddc9422e20 fix(ui): preserve explicit document selections on refresh
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:49:05 -05:00
DottaandPaperclip 7ba05522ec test: verify the visible response proof download link
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:28:57 -05:00
DottaandPaperclip 0d0afb4b30 test: assert delivered response file presentation
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:28:57 -05:00
DottaandPaperclip 7f4b3dccbc test: verify downloaded API response proof bytes
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:28:57 -05:00
DottaandPaperclip f1ced64df0 fix(runtime): stop retrying unsafe native workspace archives
Preserve the accepted result and retained sandbox, distinguish repairable unsafe paths from missing sandboxes, and keep transient copy-back failures retryable.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:03:53 -05:00
DottaandPaperclip c2744f77b4 fix(runner): read saved API responses in bounded text pages
Keep large response artifacts inspectable through the existing authenticated API route. Preserve company and run authority, UTF-8 boundaries, and transfer limits. Reproduce the artifact loop through real HTTP and add an explicit full-stack fixture.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:03:15 -05:00
Paperclip 6131a5858f test(workspaces): stream Git output in bootstrap retry fixture
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
Paperclip e5fa1b1e4a fix(runtime): admit manifests against available disk capacity
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
Paperclip fab666b131 fix(runtime): preserve restore conflicts and reserve manifest disk space
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
Paperclip 38441fb2e0 fix(runtime): stream workspace snapshots through disk manifests
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
cryppadottaandPaperclip 637b6615d5 docs: avoid lock classifier collision in question heading
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
cryppadottaandPaperclip 5599e62144 docs: align blocker question classification in capability inventories
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
cryppadottaandPaperclip 76fe657b28 docs: synchronize live capability inventory with skill anchors
Preserve the existing eval and MCP inventories; rebuild only the skill inventory and its derived outputs with the canonical generator functions.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
cryppadottaandPaperclip c0025024b6 docs: refresh capability anchors after skill guidance edits
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
cryppadottaandPaperclip 16af308f1d docs: target cross-team scope questions to the requester
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
cryppadottaandPaperclip 6dd896de07 docs: remove automatic agent escalation from coordination skill
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 16:00:45 -05:00
DottaandPaperclip 6beece96ed feat(ui): open text attachments in task tabs
Restore the recovered PAP-61 viewer, use accessible icon controls for rendered/raw Markdown and downloads, and keep explicit mobile file requests on the visible panel. Verify uploads, rendering, tab selection, and exact original downloads on desktop and mobile.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 15:59:17 -05:00
DottaandPaperclip 23fc19ffb7 fix(ui): keep artifact tab arrivals passive
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 15:59:17 -05:00
DottaandPaperclip e4317c8683 fix(ui): distinguish finalization recovery from live observation
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-09-27 15:59:17 -05:00
DottaandPaperclip 0f14d26123 fix(runtime): allow bounded large untracked workspace snapshots (#14194)
## Thinking Path

> - Paperclip manages AI agents and their work.
> - Remote runs need a snapshot of the task workspace before the agent
starts.
> - The snapshot lists untracked filenames through the shared Git scan
scheduler.
> - A generated directory with a few thousand long filenames can exceed
the 1 MiB output limit.
> - This stops setup and prevents the agent from continuing its task.
> - This change gives that listing a 32 MiB bound and keeps the explicit
file snapshot.
> - Normal generated trees can now pass setup, while larger snapshots
still fail at a finite limit.

## Linked Issues or Issue Description

Refs #11572 and #12214 for the existing bounded scan and ignore-scan
protections.

**What happened?**

An agent continuation failed during workspace setup with `Workspace Git
scan exceeded its output limit`. A real Git fixture reproduces the
untracked-file path: 5,000 long filenames in one generated directory
exceed its 1 MiB output limit.

**Expected behavior**

The workspace snapshot must support ordinary generated trees with
thousands of files. It must keep a finite output bound and select
explicit files before staging.

**Steps to reproduce**

1. Commit a base file in a Git repository.
2. Add 5,000 untracked files with long names in one new directory.
3. Call `readGitWorkspaceSnapshot` with the normal scan limits.
4. Observe the output-limit error before this change.

**Paperclip version or commit**

Base commit: `640dee1`.

**Deployment mode**

Remote sandbox execution from source.

## What Changed

- Increase the untracked-file snapshot output bound from 1 MiB to 32
MiB.
- Keep explicit file selection, the shared scheduler, the timeout, and
the other scan bounds.
- Test that 40,000 long filenames above the old 8 MiB bound reach the
snapshot. Reuse those files with deeper paths to prove that output above
32 MiB still fails.
- Test that files created after the snapshot, including an ignored
secret, stay out of the overlay archive.
- Check the workspace root identity and reject selected paths with
symlinked parent directories before upload.
- Test root replacement after path resolution, including root-level
selected files.
- Preserve existing workspace root aliases by capturing the resolved
root before snapshot selection. Test that later alias retargeting cannot
change the archive contents.
- Stop staging on permission and I/O errors; continue to allow missing
files.
- Test these failures and preserve selected symlink entries.
- Accept valid case-renamed directories by checking ancestor file types.
A modeled case-insensitive regression failed before this correction and
now passes.
- Give the 40,000-file fixture enough time to remove its files.
- Document the larger bound and staging behavior.

## Verification

- Red: the 5,000-file regression failed with `stdout maxBuffer length
exceeded` before the fix.
- A separate check through the real server scheduler reproduced
`workspace_git_scan_output_limit` on the original code. The revised code
selected all 5,000 files.
- The late-file regression failed against the first PR revision because
the archive contained `drafts/late.secret`. It passes with the final
explicit-file approach.
- The staging regressions failed before the review fix: a substituted
parent directory and permission/I/O errors were accepted. All three
cases now stop before upload.
- Green: 134 tests passed across `git-workspace-sync.test.ts` and
`sandbox-managed-runtime.test.ts` with Vitest 4.1.11. This includes
complete selection above 8 MiB and rejection above 32 MiB.
- `pnpm --filter @paperclipai/adapter-utils... typecheck` passed after
the revision.
- The module-boundary check and `git diff --check` passed.
- `pnpm -r typecheck` and `pnpm build` stopped in the Rust runner steps
because this environment has no `cargo` executable.
- The full `pnpm test:run` attempt ended with `SIGKILL` during the
general server suite. It did not finish. That full-suite result belongs
to the earlier revision. Fresh checks are required for this revision.

- The new regression fails at the old 8 MiB bound with `stdout maxBuffer
length exceeded`. All 134 focused tests pass with the 32 MiB change.
- The affected typechecks and module-boundary check pass. The full local
typecheck requires Cargo, which is absent in this environment.
- Final verification for `b43e9bc95e55382c6a9bfe200487c164770c8be8`: 54
successful checks/statuses and two skipped Storybook checks. No checks
remain pending or failed.
- The [CI
run](https://github.com/paperclipai/paperclip/actions/runs/36315569674)
passes on attempt 2. The first attempt had one unrelated preview-fixture
readiness timeout. That exact test passed locally; its CI shard passed
on the single rerun.
- [Greptile reports
5/5](https://github.com/paperclipai/paperclip/pull/14194#issuecomment-5852045501)
on this revision. All review threads are resolved.
- [Security review accepts the documented memory
tradeoff](https://github.com/paperclipai/paperclip/pull/14194#discussion_r4115149465)
for this finite mitigation. The separate streaming follow-up will remove
full-list buffering.
- This revision also passes affected local typechecks and the
module-boundary check. Full local typecheck/build stop because Cargo is
absent. The full local Vitest attempt was stopped after about 18 minutes
once all remote gates passed; it did not complete locally.

## Risks

- Each untracked-file scan can buffer up to 32 MiB instead of 1 MiB. The
scheduler still limits concurrent scans and execution time.
- Snapshots above 32 MiB still fail with the existing error. Tracked and
ignored-file scan bounds stay unchanged.
- A workspace that replaces a selected path’s parent with a symlink now
fails staging.
- Detailed logs from the reported host were unavailable. The exact
command that exceeded its limit on that host is unconfirmed.

## Model Used

OpenAI GPT-6 through Codex, with reasoning, tool use, and code
execution. The runtime does not expose a more specific model build or
context window size.

## 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 references)
- [x] My branch name describes the change and contains no internal
Paperclip ticket id or instance-derived details
- [x] I have run tests locally and they pass
- [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
- [x] All Paperclip CI gates are green
- [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-09-27 06:42:19 -05:00