Files
PaperClipAI/tests/runner-e2e/CATALOG-PRESERVATION.md
T
Dotta de0941835c test(evals): admit the bounded TestOps chat completion pilot (#18515)
## Thinking Path

> - Paperclip evals verify real agent workflows.
> - The preserved chat catalog runs on authenticated AWS hosts.
> - Its host guard currently admits only the full-stack workflow.
> - A dedicated TestOps pilot needs the same host verification.
> - This change admits only its three selected scenarios and fixed
profile.
> - The existing workflow and all other catalog cases retain their
gates.

## Linked Issues or Issue Description

Refs #18377 and #18516. This is intentionally the catalog-only
prerequisite for a dedicated TestOps connection to project work, project
defaults and instance restart. The full catalog remains on the
integration branch. This admission is inert until the companion
main-only workflow in #18516 exists. No TestOps dispatch may run until
both PRs pass their gates and the companion source pin is final. The
companion exercises its real YAML environment against the actual pinned
source host function before provider access. Registration and source
checks do not establish a new live TestOps pass.

## What Changed

- Admit the main-only `chat-completion-testops.yml` entry point for the
three exact pilot IDs.
- Require its admission marker, job-run identity and original attempt
one. Preserve profile, source, actual AWS metadata, lifecycle and
zero-retry checks.
- Record the actual admitted workflow in the existing host receipt.
Document the limited entry point.

## Verification

- Red: all three new positive controls fail at the old workflow guard.
The other 22 host controls pass.
- Green: all 30 host controls pass. Negative controls reject foreign
cases, missing authority, missing job identity, replay and candidate
workflows before metadata or inference.
- This guard and the new dedicated dispatcher both require at most 16
digits and a positive JavaScript-safe integer. The old backlog
dispatcher is a separate entry point; its 20-digit string bound is not
used here. Controls cover leading zeroes, unsafe 16-digit and 17-digit
IDs, and exact maximum-safe ID preservation.
- The receipt retains the admitted TestOps job-run ID and marker.
Scenario admission cross-checks both execution ID and actual task ID.
- Full catalog typecheck passes with the existing qualified dependency
graph. The first fresh-checkout attempts lacked dependency links; the
first broad unit startup also lacked prepared provider bundles. Those
setup failures remain retained. The focused host controls make no native
or provider calls.
- Current-head CI and review are pending. No live run has been
dispatched from this new entry point.

## Risks

The new entry point has access only through a trusted main workflow.
That workflow must authenticate the exact TestOps selection before
provider access and retain private evidence through its existing owner.
The prerequisite alone does not register cases, expose credentials, or
grant a live pass. Model, queries, case clocks and graders are
unchanged.

## Model Used

OpenAI GPT-6 through Codex, with repository inspection and code
execution. Exact hosted model revision and context-window size are not
exposed.

## 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
- [ ] All Paperclip CI gates are green
- [ ] 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 23:22:44 -05:00

6.6 KiB

Preserved chat catalog source

This branch consolidates reviewed eval changes for all 244 frozen scenarios: 242 lazy catalog entries and the two existing standalone chat flows. It preserves source implementations, controls and evidence contracts. It does not establish that all scenarios are ready to run or that this composed head has passed a live campaign. The machine-readable inventory is chat-catalog-preservation.json.

The production baseline remains 39e811c9c5226979fce42e052a27cfb28301018a. No production, workflow, lockfile or SDK source change is included. The real new-company, formal-hire and routine-history definitions retain prerequisites 18103, 18105 and 18033 respectively. Those focused fixes are excluded here; their candidate outcomes remain separate from frozen-baseline qualification.

Composition preserves the per-scenario descriptor union, both independent SDK privacy and new-company security sections, the final formal-hire clock module, and the stronger shared Notes provider used by status cards and routine history. The accepted original-deadline and multipart controls are included, as is the new-company successor's original phase deadline and remaining-time wizard clamp. Frozen queries, contexts, outcomes, turn/human counts and overall caps are retained.

The accepted SDK2 overlay binds least-scope setup to the actual public Agent lifecycle/version and a new real plugin resume receipt within the existing 90-second wait. Managed-routine setup identifies only its saved routine and plugin through ordinary conversation context and independent CEO readback; structural JSON comparisons ignore object key order while preserving all values, arrays, ownership and explanation checks. A pending question still fails the required outcome.

The task prerequisite overlay binds two genuine ready owners to their completed public manual pauses, exact versions and holds before inventory seeding. It also adds the owned browser Origin to the existing human attachment upload, preserving the real board mutation guard and exact company/task/comment/byte checks. Neither overlay changes canonical messages, native/human counts, overall caps or an exhausted case's result. The production core fixes remain excluded.

The document and decision-audience overlay preserves exact public document identity, revision and bytes through the shipped Plans control, and reads a pending addressed decision through the actual authenticated recipient's feed. It requires both the owner and recipient identities. Its measured final failures remain unchanged and exhausted; source preservation gives them no new cycle.

The outbound-email observer accepts ordinary standing-chat work with a null parent only when the canonical source run, creator, public audit and real native assignment admission agree. It also preserves the supported public issue-create wake shape. The email task still links explicitly to that work and the exact owned thread/endpoint; original draft, recipient, native send, provider receipt, duplicate and truthful delivery checks remain. Actual authorized AgentMail resources and input delivery are separate prerequisites, with no source-only runtime pass or implicit credential-transfer permission.

Readiness is separate from importability. Declared unsupported fresh contexts, public capability/profile gaps and external resource/authorization requirements remain explicit. The preserved plugin configure/disable fixture still has a known secret-ref schema mismatch: it sends an object where its public string schema requires a secret UUID. Disable's returned final reached that setup request and received HTTP 400. Configure's returned final stopped earlier while waiting for the initial chat response; its later UI/configuration leg was not exercised, so the schema mismatch there is a source finding. Both spent raw failures remain unchanged and are not rerun by this consolidation. Other measured failures retain their actual interpretation. The legacy Projects manual-order surface required by sidebar-order is absent from both frozen-production layouts; this source does not revive it or inject a classic interface to manufacture the frozen context.

Every historical result remains attached to its original source revision, full fingerprint, provider/model/build/database evidence, ordinal, usage, cost, privacy and cleanup. The integrated source changes broad fingerprint closures; none of the older qualified passes is transferred to this head. No attempt budget is reset, and no live launch or publication authority comes from this source preservation.

Integration candidate, 2026-10-31

This owned integration branch combines preserved source e2b35be76f with master 51ea624344. The original preservation branch and its historical results remain unchanged. No historical pass transfers to this composed source. The frozen 244-case OpenCode catalog keeps its historical IDs and DeepSeek 1017 model. The two shipped subscription aliases and the separate TestOps backlog cell remain selectable alongside it; they do not change the frozen denominator. The standalone aliases retain the current shipped 120-second turn limit. Catalog phase and attempt budgets remain separately declared by their fixtures.

The integration compatibility checks distinguish the 244 historical cells from the three shipped aliases. Fixtures implement current run-observation and conversation-link custody contracts. The standalone flows keep shipped timeout behavior; catalog-native setup still verifies its separately declared policy. Synthetic public-schema tests hash their copied synthetic inputs, while the production frozen source manifest and all private-value rejection checks remain unchanged. No SDK runtime qualification follows from those synthetic tests.

The refreshed base includes current master's committed Agent Chat reply recovery and durable retry deadlines. It also contains event-driven issue/receipt recovery and the guard against a native run changing its own task status. These are upstream product changes, not qualifications of the preserved scenarios. Fresh pilots remain bound to their exact source.

TestOps completion pilot

The dedicated main-only chat-completion-testops.yml workflow may select only projects.project-work, projects.project-defaults, and instance-operations.restart-service on the native OpenCode 1017 profile. It needs the TestOps admission marker, a real job-run identity, attempt one, and the same source-bound AWS host verification as the existing campaign. The entry point preserves original queries, grading, clocks and zero retries. Registration is separate from a real TestOps pass and verified result upload. The broader catalog remains on this integration branch.