Commit Graph
6327 Commits
Author SHA1 Message Date
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
DottaandPaperclip 7d99626bae Carry qualified queued-run fixture repair 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:13:22 -05:00
DottaandPaperclip 52c0714734 Carry qualified queued-run fixture repair 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:13:22 -05:00
DottaandPaperclip 5abe0865c6 Carry qualified queued-run fixture repair 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:13:21 -05:00
DottaandPaperclip be92e67ef5 Carry qualified queued-run fixture repair 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:13:21 -05:00
DottaandPaperclip 2c486ca6e5 Carry qualified queued-run fixture repair 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:13:21 -05:00
DottaandPaperclip f9bf5ab36d test: await admitted legacy heartbeat executions
Use tracked execution settlement and explicit adapter-entry barriers instead of independent short polls. Add a committed-read control proving the pre-registration drain gap while preserving durable state and concurrency assertions.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 11:12:55 -05:00
DottaandPaperclip dcb19ba80b Carry qualified card interval label repair through 18380
Normal parent merge; only the two qualified card interval paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:38:37 -05:00
DottaandPaperclip c45992ca20 Carry qualified card interval label repair through 18384
Normal parent merge; only the two qualified card interval paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:38:37 -05:00
DottaandPaperclip 044f4f670b Carry qualified card interval label repair through 18382
Normal parent merge; only the two qualified card interval paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:38:36 -05:00
DottaandPaperclip 4a685a8ca4 Carry qualified card interval label repair through 18399
Normal parent merge; only the two qualified card interval paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:38:36 -05:00
DottaandPaperclip 674036e758 Carry qualified card interval label repair through 18388
Normal parent merge; only the two qualified card interval paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:38:35 -05:00
DottaandPaperclip 8c99d86e16 Label interval summary writeback with its refresh deadline
Keep membership provenance from describing an interval-owned evaluation deadline; retain existing cadence and source handling.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:37:56 -05:00
DottaandPaperclip cf87b23cbd Carry qualified card search repair through 18380
Normal parent merge; only the five qualified card/search paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:33:39 -05:00
DottaandPaperclip e633b0fcfd Carry qualified card search repair through 18384
Normal parent merge; only the five qualified card/search paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:33:39 -05:00
DottaandPaperclip 4c3bb2946d Carry qualified card search repair through 18382
Normal parent merge; only the five qualified card/search paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:33:38 -05:00
DottaandPaperclip bd78176b40 Carry qualified card search repair through 18399
Normal parent merge; only the five qualified card/search paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:33:38 -05:00
DottaandPaperclip d2ef6c81d0 Carry qualified card search repair through 18388
Normal parent merge; only the five qualified card/search paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:33:37 -05:00
DottaandPaperclip e0986ac344 Paginate watched status-card issues before unrelated search results
Add an internal result-kind constraint owned by company search, preserving all/comments/documents task matching and default mixed search. Apply it to card snapshots and preview without unrelated entity producer fanout.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:30:16 -05:00
DottaandPaperclip e888175217 Carry final qualified cards repair through 18380
Normal parent merge; only the three qualified status-card paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:19:45 -05:00
DottaandPaperclip 274d50430d Carry final qualified cards repair through 18384
Normal parent merge; only the three qualified status-card paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:19:44 -05:00
DottaandPaperclip 74a3b3c129 Carry final qualified cards repair through 18382
Normal parent merge; only the three qualified status-card paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:19:44 -05:00
DottaandPaperclip 3dc77ca942 Carry final qualified cards repair through 18399
Normal parent merge; only the three qualified status-card paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:19:43 -05:00
DottaandPaperclip 42ece47d98 Carry final qualified cards repair through 18388
Normal parent merge; only the three qualified status-card paths change. Preserve every other owned and upstream blob.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:19:43 -05:00
DottaandPaperclip 9a9668425b Preserve completed shared status-card refresh generations
Guard stale cleanup with the durable generation ledger and a transaction-bound canonical cancellation. Coalesce the original completed manual request, retain future manual work, and preserve one-connection and outer-commit effects.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:18:18 -05:00
DottaandPaperclip 304e8dc62f Carry landed deferred-execution ancestry into status cards
The actual master tree equals the already-qualified C1 parent. Resolve squash ancestry conflicts to retain the entire qualified cards source tree byte for byte.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 10:04:52 -05:00
DottaandPaperclip 3ee4c5b613 Make saved execution receipt recovery react to durable work (#18409)
Reviewed and verified at 8f306e0a6e.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
canary/v2026.1031.0-canary.9
2026-10-31 10:03:59 -05:00
DottaandPaperclip af159db36b Carry final status-card parent ancestry into retention
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'c663a3761f94ef671128aa786f11c6dbf8947358':
  Drive issue recovery from committed changes and exact deadlines (#18402)
2026-10-31 09:43:51 -05:00
DottaandPaperclip c663a3761f Carry landed issue-recovery ancestry into status cards
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '8f306e0a6e26475e83207f02564c89dbfee5e998':
  Drive issue recovery from committed changes and exact deadlines (#18402)
2026-10-31 09:43:44 -05:00
DottaandPaperclip 8f306e0a6e Merge landed issue recovery ancestry into deferred receipts
Resolve fourteen ancestry-only regions in six files by retaining the already qualified deferred owner registration, queue topics, reaper delegation and transactional eligibility producers. Landed master tree equals the qualified B parent; resulting whole candidate tree remains byte-identical to d6d0b67e8a.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:43:01 -05:00
DottaandPaperclip 42fd568cf8 Drive issue recovery from committed changes and exact deadlines (#18402)
Reviewed and verified at 11b49125db.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:41:27 -05:00
DottaandPaperclip aae32f2f49 Merge qualified external-object parent into backup expiration
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '5eb3d14f3b4e2c4d74e37d672a8bdb0c1f335a5b': (30 commits)
  Scope status-card refresh tasks to their claim revision
  test(chat): retain completion identity before link metadata loads
  test(chat): locate completion through its rendered task link
  fix(chat): recover committed native Agent Chat replies (#18465)
  perf(heartbeat): drive retry promotion from durable deadlines (#18387)
  fix(ui): make the Coordinator composer footer opaque (#18455)
  fix(testops): verify unexpanded result job runs (#18462)
  test(server): observe restored Retry before draining unrelated work
  test(runner): own listener cleanup across setup failures
  test(runner): buffer upgrade frames until the wire subscribes
  fix(runner): preserve OpenCode written-answer defaults (#18456)
  fix(native): fence retries when replaying an audited Stop (#18457)
  test: await async outcomes and drive saved deadlines deterministically (#18416)
  fix(ui): retain startup autosave through session recovery (#18412)
  perf(server): recover independent native replies concurrently (#18421)
  perf(chat): scope task questions and batch inbox queue checks (#18422)
  fix(native): recover controllers across webserver replacement (#18343)
  fix(ui): restore task document authoring and add persistence journey (#18356)
  fix(tools): stabilize tied profile entry order (#18427)
  fix(adapter-utils): tolerate entries removed during workspace snapshots (#18426)
  ...
2026-10-31 09:36:58 -05:00
DottaandPaperclip 5eb3d14f3b Merge qualified cards and routine parents into external object work
Preserve scoped reconstruction cooldown alongside keyed concurrency and the current issue authorization and deletion boundaries.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:35:30 -05:00
DottaandPaperclip f0abcbb18e Carry qualified cards repair through merge confirmations
Keep the complete confirmation owner and latest routine parent intact.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:31:16 -05:00
DottaandPaperclip 508115ef70 Carry qualified cards repair through routine status work
Preserve the complete routine status slice and additive retention ownership.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:30:58 -05:00
DottaandPaperclip 8e414f54f4 Merge final cards revision ownership and parent acceptance
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* fix/sleep-merge-18401:
  Scope status-card refresh tasks to their claim revision
  test(chat): retain completion identity before link metadata loads
  test(chat): locate completion through its rendered task link
  fix(chat): recover committed native Agent Chat replies (#18465)
  perf(heartbeat): drive retry promotion from durable deadlines (#18387)
  fix(ui): make the Coordinator composer footer opaque (#18455)
  fix(testops): verify unexpanded result job runs (#18462)
  fix(runner): preserve OpenCode written-answer defaults (#18456)
  fix(native): fence retries when replaying an audited Stop (#18457)
  test: await async outcomes and drive saved deadlines deterministically (#18416)
2026-10-31 09:29:14 -05:00
DottaandPaperclip 37bbb20cda Merge final deferred execution acceptance and locator proof
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit 'd6d0b67e8a7574ee63271bbc49e6b207a3065e80':
  test(chat): retain completion identity before link metadata loads
  test(chat): locate completion through its rendered task link
  fix(chat): recover committed native Agent Chat replies (#18465)
  perf(heartbeat): drive retry promotion from durable deadlines (#18387)
  fix(ui): make the Coordinator composer footer opaque (#18455)
  fix(testops): verify unexpanded result job runs (#18462)
  fix(runner): preserve OpenCode written-answer defaults (#18456)
  fix(native): fence retries when replaying an audited Stop (#18457)
  test: await async outcomes and drive saved deadlines deterministically (#18416)
2026-10-31 09:29:00 -05:00
DottaandPaperclip 1d800abd49 Scope status-card refresh tasks to their claim revision
Keep concurrent refreshes of one revision deduplicated while preventing a superseded refresh from cancelling a newer revision task before its claim.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:26:46 -05:00
DottaandPaperclip d6d0b67e8a Merge current master native chat recovery into deferred receipts
Co-Authored-By: Paperclip <noreply@paperclip.ing>

* commit '11b49125db5ea1b274e69faf9d1abe057cdbb551':
  fix(chat): recover committed native Agent Chat replies (#18465)
  perf(heartbeat): drive retry promotion from durable deadlines (#18387)
  fix(ui): make the Coordinator composer footer opaque (#18455)
  fix(testops): verify unexpanded result job runs (#18462)
  fix(runner): preserve OpenCode written-answer defaults (#18456)
  fix(native): fence retries when replaying an audited Stop (#18457)
  test: await async outcomes and drive saved deadlines deterministically (#18416)
2026-10-31 09:22:28 -05:00
DottaandPaperclip 11b49125db Merge current master into scoped issue recovery work
Retain scoped recovery registration and producer gates while preserving landed audited-Stop retry fencing and committed native Agent Chat response recovery.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:19:17 -05:00
DottaandPaperclip 4a2355d8cf test(chat): retain completion identity before link metadata loads
Match the specific task href within the completion message while retaining link semantics. Both hydrated issue chips and links awaiting their title now satisfy the same target identity assertion; other tasks cannot match.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:16:56 -05:00
DottaandPaperclip d7d80782df test(chat): locate completion through its rendered task link
The delegated completion paragraph includes a task link whose SVG status title contributes to Playwright text matching. Assert the completion prefix and exact accessible task identity together without assuming flat text. Keep the existing visibility deadline and delivery/document assertions.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:12:31 -05:00
DottaandPaperclip cc25f28525 Merge qualified routine parent into merge confirmation work
Preserve confirmation candidates and notification ownership alongside the current routine, native, security, and retention changes.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:10:30 -05:00
Dotta 12b0cc6304 fix(chat): recover committed native Agent Chat replies (#18465)
## Thinking Path

> - Paperclip manages agent work and keeps its results available to
users.
> - Agent Chat needs a visible reply before the conversation can wait
for more input.
> - Native result commitment and reply presentation are separate
obligations.
> - A completed conversation can retain a valid final message without a
saved reply.
> - Existing reply recovery excludes these completed conversation turns.
> - This pull request repairs that persistence gap through the existing
recovery worker.

## Linked Issues or Issue Description

**What happened?**

A native Agent Chat turn completed successfully and saved its workspace.
Its accepted result and final assistant message were durable, but no
reply appeared in the conversation. The chat stayed active. The
deployment hiring journey in #18351 then reached its deadline while
waiting for the first reply.

**Expected behavior**

Recover the exact accepted turn's final reply once, then use normal
conversation settlement. Keep later user input active. Do not run the
agent again or replace a selected or deleted reply.

**Steps to reproduce**

1. Create an active conversation with one admitted native turn.
2. Commit an accepted DONE result and a final-channel assistant message
for that exact run, session and turn.
3. Finish workspace finalization before live heartbeat reply
presentation. Leave no saved reply.
4. Run normal response recovery. Before this fix it finds no
conversation candidate and leaves the chat active.

**Paperclip version or commit**

Reproduced with actual services at frozen master
`8bcc5a01edd5d87540401521e6f30d3df43e1848`. The production predicate
also exists in the deployed revision that exposed the failure.

Related work: #18351. The broader receipt and recovery work in #18118
and #18409 does not touch these source files.

## What Changed

- Discover unanswered committed Agent Chat turns through the existing
native response presentation worker.
- Recheck company, agent, responsible user, current execution and
conversation generation under the normal transaction locks.
- Require the accepted result digest and an exact final message from the
same native run, session and accepted turn. Keep external publication
authority separate.
- Commit the reply and presentation receipt before normal conversation
settlement. Later input stays active. Recovery does not repeat agent
work.
- Preserve skip decisions and selected or deleted replies. Add database
controls for foreign identity, stale sessions, partial commitment,
duplicates and ordinary internal task behavior.
- Document the recovery boundary in the developer guide.

## Verification

- Real-service RED/GREEN uses all 418 canonical migrations in isolated
PGlite and the exact new regression fixture. Before the fix: zero
candidates, no reply, recovery returns false and the chat stays active.
After the fix: one candidate, one exact reply, recovery returns true and
the chat waits. A repeat returns false and creates no second reply.
- All 20 canonical regression cases pass locally through a fixture-only
PGlite bridge. Only local database provisioning and `createDb` selection
differ from the normal embedded PostgreSQL fixture. Production services,
SQL queries, transactions, protocol validation and assertions remain
real. Linux embedded PostgreSQL CI is required before merge.
- Focused current-source no-emit typing passes for both production
modules and the new regression file, with normal Express augmentation
and source aliases. The broader local presentation/ownership and
conversation-settlement PGlite bridge run was interrupted before it
reported results; it is not counted as a pass. No repository-wide local
build is claimed from borrowed workspace dependencies. Clean-build CI
and canonical PostgreSQL consumer tests remain required.
- `git diff --check` and the scoped source/test secret scan pass. No
captured run data, credentials or private target identities are
committed.
- No live journey retry, deployment, configuration change or test-plan
admission was performed. The original failed journey remains failed;
this production fix still needs deployed qualification through the
unchanged journey.

- Current-head [canonical Linux
CI](https://github.com/paperclipai/paperclip/actions/runs/41207018345)
passed all 57 terminal checks with no failure or pending check. The new
20-case database regression actually passed in [server shard
8](https://github.com/paperclipai/paperclip/actions/runs/41207018345/job/124555006090),
at 13:59:25 UTC (2,643 ms). Typecheck, build and the existing consumer
lanes passed. Fresh [Greptile
review](https://github.com/paperclipai/paperclip/pull/18465#issuecomment-6544208002)
on exact `f32a432e10b377ae6277d6f728995d5fedcf9d7b` is 5/5; the
review-thread inventory is empty with no pagination. No live deployment
or journey pass is claimed by these checks.

## Risks

Eligible active conversations can gain a previously missing reply.
Recovery accepts only the exact saved final message under its accepted
result and current conversation identity. It does not run a model,
repeat hiring or change a prior test grade. Reply persistence precedes
waiting-state settlement; existing conversation recovery retains
ownership of a later interrupted settlement. No schema or public API
changes are included.

## Model Used

OpenAI Codex, GPT-6 family. The session does not expose a more specific
backend model ID or fixed context window. Used reasoning, repository
tools, TypeScript and real database test 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
- [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
2026-10-31 09:08:20 -05:00
DottaandPaperclip 63c77102a8 Merge qualified retention parent into routine status work
Preserve routine status producers alongside current native, security, retention, and deferred execution owners.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-31 09:08:08 -05:00