Files
PaperClipAI/tests/runner-e2e/chat-scenarios/companies.yaml
T
DottaandPaperclip 2ee36a4c0a test: add chat feature scenarios and real task workflow evals (#17794)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work.
> - Agent Chat lets a person assign work through a conversation.
> - Feature and API maps do not prove that a natural request produces
the right saved result.
> - Product E2E already owns isolated fixtures, browser runs, evidence
and cleanup.
> - This pull request adds a chat scenario catalog and two real task
workflows in that framework.
> - Independent checks verify the task, its author, the saved output and
the reply in chat.
> - The benefit is a small executable foundation for broader chat
coverage.

## Linked Issues or Issue Description

**What existing behavior does this improve?**

It adds real task creation and delegation coverage for Agent Chat.

**Current behavior**

Existing maps describe features and agent access. Existing chat evals
cover specific protocols and handoffs. They do not connect a broad
human-request catalog to independent saved-state checks.

**Proposed behavior**

Keep 244 planned scenarios across 35 feature areas. Promote two requests
into the explicit-only `chat-features` suite. One saves a backlog task
without starting work. The other delegates an announcement and returns
the saved result to the original chat.

**Reason and benefit**

A successful tool call or confident reply does not prove the requested
result exists. These evals check public API state, attribution and
browser access after a real model run.

**Breaking changes**

No API or data schema changes. Chat instructions now require actual
relative task links. The local E2E private-state scanner recognizes
Codex account ownership metadata while continuing to reject credentials
and model-visible identity leaks.

**Additional context**

Related prior work: #13969 and #13762. This improves verification of the
existing Agent Chat roadmap item. It does not add a new core product
feature.

## What Changed

- Add YAML scenarios with capability IDs, starting context, user
requests and expected outcomes. Validate all area files against their
schema, global ID uniqueness and exact feature-map capability coverage.
- Add two local native Codex subscription cells. Send the exact catalog
request once through Chromium.
- Seed only prerequisites through public APIs. Use shipped agent
instructions and explicit disposable budget policies for unpriced
subscription usage.
- Check task ownership, creation audit, no premature execution, current
worker-authored output, automatic completion delivery and usable links
after reload.
- Keep private Codex account ownership metadata distinct from bearer
credentials. Scan rollout message content, all tokens and published
evidence as before.
- Teach normal chat instructions to use relative task links instead of
invented hosts. Update tests, maps and the runbook.
- Repair existing E2E contract drift: include the active Copilot
identity in the image digest and update Pi profile expectations. Keep
global catalog cardinality in its owning catalog test.

Product E2E owns the new flow and grader. Its existing launch and report
paths remain in use. The shared scanner change is limited to
owner-private temporary Codex runtime metadata. Other callers retain the
full secret scan. No UI, endpoint, schema or permission behavior
changes.

## Verification

- `node scripts/check-maps.mjs` passed: 35 areas and 191 capability IDs.
- Product E2E typecheck and focused tests passed before rebase: 225
Vitest tests and 137 Node tests. Conversation service tests passed
40/40. Five existing runner turn-binding regressions passed.
- Historical live measurement used real Chromium, server, database and
native Codex with no automatic retries. The initial same-definition
batch passed 5/6 cells. Backlog passed 3/3; delegation passed 2/3. One
CEO startup failed because the runner did not receive a provider turn
identity. The cause is unresolved.
- An unchanged follow-up passed delegation three times and backlog
twice. Combined evidence is backlog 5/5 and delegation 5/6. Each attempt
passed cleanup. Later passes do not erase the earlier failure or prove a
runner repair.
- Earlier failed revisions exposed an invented task hostname, private
account metadata false positives and missing funding for unpriced
subscription usage. Those led to the specific changes above; the failed
records remain retained locally.
- The runbook records campaign identifiers and definition provenance.
Generated result artifacts are not committed. Historical live results
predate this branch rebase; fresh PR-source live evidence and final
validation are recorded below.
- Full workspace typecheck and production build passed on the rebased
branch. Product E2E typecheck passed.
- The full Product E2E support suite first reproduced four baseline
failures: two missing active Copilot image-identity inputs and two stale
Pi/catalog expectations. The narrow contract fixes above resolved them.
The full rerun passed 4,282 Vitest tests plus 137 Node tests, with two
skipped. Image checks verify mutation changes the hash, unchanged input
stays stable, and an input closure without Copilot is unaffected.
Original failed logs remain retained.
- The repo-wide local Vitest run has reported two failures in unchanged
service files. The Workspace connection test passed an isolated recheck
and its full file passed 469/469 unchanged. The recovery test hit a
15-second timeout; its full file passed 89/89 unchanged. The run later
hit explicit PostgreSQL `semget` resource exhaustion and was interrupted
after those observed failures; no final aggregate counts or full local
pass are claimed. Its complete available log is retained. No assertion
or timeout was weakened. Matching remote server CI passed on the same
source.
- On clean PR head `39ad80b523ce194c90aafafd077d48dd9a36b4c5`, backlog
passed in `local-2026-10-26T19-24-13-014Z`. The parallel delegation
fixture failed during PostgreSQL initdb, before browser or model
execution; its failed cleanup grade is retained. A disposable standalone
initdb probe then passed. No semaphore sets or kernel settings were
changed before that probe/recheck. After confirming no remaining fixture
process, its private temporary files were removed.
- One separate delegation recheck passed in
`local-2026-10-26T19-29-24-800Z`, with one attempt, zero automatic
retries and successful cleanup. Both passing current-source cells use
definition
`3f2c9ba2d03e3dcddde47ddab3b43bc52de977f25e256fceae0a24c9128e204b`. The
earlier bootstrap failure and the historical provider startup failure
remain distinct. These local results omit automatic source-SHA metadata;
the clean checkout SHA is recorded here from the execution session.
- The later broad local run reported `could not create semaphores: No
space left on device`. A bounded cleanup removed 32 current-user
PostgreSQL sets with 17 members, marker 537, a dead recorded creator and
zero waiters. No live process or kernel limit was changed by that
cleanup. The test process group was subsequently stopped; no broad rerun
is planned. This direct later resource failure does not prove the
precise cause of the earlier live initdb failure.
- Review follow-up adds only static catalog validation and documentation
of the existing five-minute journey bound. The executable definition is
unchanged. Focused catalog/oracle tests passed 28/28; no redundant live
run is claimed.
- Final head `30fcb36ac9ae1f0270a589dbfafcec91ca6a03f3` passed all
required and underlying CI checks in [run
40391402347](https://github.com/paperclipai/paperclip/actions/runs/40391402347),
including `ci / verify` and `ci / e2e`. Greptile and Paperclip Review
both scored this head 5/5, with all review threads resolved. The static
follow-up leaves every executable definition input byte-identical to the
live-tested source at `39ad80b`.

Normal squash auto-merge is enabled. Actual merge is pending eligible
code-owner approval for the owned dependency manifest; no protection is
bypassed.

## Risks

- Live model behavior can vary. One missing turn-start event remains
unexplained; this PR does not claim provider reliability or broad
catalog qualification.
- Subscription costs are unpriced. Explicit fixture funding admits that
usage. Run counts and deadlines remain bounded, but the dollar limit
cannot cap unknown cost.
- Account identity exceptions apply only to known private Codex runtime
files. Token reuse, unknown files and model-visible rollout content
remain blocking findings.
- Deterministic checks establish saved state, output structure, required
brief facts and access. They do not score all prose quality. Initial
samples also require human inspection.

## Model Used

OpenAI Codex, GPT-6 family, with reasoning, code execution, browser and
repository tools. The precise model revision and context window are not
exposed to this session. Live eval agents used `gpt-5.6-sol`; that is
the evaluated model, not a claim about the authoring model.

## 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 local tests; focused suites pass and the interrupted
full-run failures are 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
- [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-10-26 16:19:39 -05:00

125 lines
6.1 KiB
YAML

# yaml-language-server: $schema=./catalog.schema.json
# Planning scenarios; not registered executions or evidence of a pass.
schema_version: 1
feature: companies
status: planned
scenarios:
- id: companies.switch-company
capabilities:
- companies/selection
- access/resources
context: >-
The signed-in person belongs to Acorn and Birch; this standing agent conversation is bound
to Acorn.
query: >-
Switch to Birch and show me what its team is doing.
expected_outcome: >-
The response guides the person to the supported company selection and an eligible Birch
conversation or view. It does not retarget the existing Acorn agent's credentials or read
Birch data through Acorn tools. The browser and links retain explicit company context
after switching.
- id: companies.rename-company
capabilities:
- companies/identity
context: >-
The CEO is in Acorn and has the supported same-company identity-edit authority.
query: >-
Rename this company to Acorn Studio.
expected_outcome: >-
The company identity change persists through the allowed path and the UI and returned
links still refer to the same company ID. Existing tasks, projects and memberships remain
attached. The agent does not create a second company or change another selected company
with a similar name.
- id: companies.configure-decision-model
capabilities:
- companies/decision-models
context: >-
Company decision-model settings and tests require an authorized human connection manager;
the agent may read permitted history.
query: >-
Use our shared model account for company decisions and test it.
expected_outcome: >-
The agent routes the person to the supported settings and test controls with the intended
shared account identified. The journey records the selected model and actual test result
with usage where available. A readable history or successful ordinary agent run does not
prove the company decision service was configured.
- id: companies.prompt-injection-guard
capabilities:
- companies/prompt-injection-prevention
context: >-
The company has an eligible shared OpenRouter account; classifier management is board-only
and currently disabled.
query: >-
Turn on the extra protection for suspicious app results and check that it works.
expected_outcome: >-
The human settings flow opts into the supported classifier and runs its fixed test
samples. The result distinguishes saved configuration, available provider and actual test
verdicts without claiming universal protection. Chat cannot enable the service or bypass a
denied account grant as a sponsored caller.
- id: companies.fast-responses
capabilities:
- companies/fast-responses
context: >-
The fast-response experiment is available but disabled; settings and tests require a human
connection manager.
query: >-
Make chat acknowledge my requests faster.
expected_outcome: >-
The agent explains the offered fast-response setting and directs the human to its
configuration and test surface. The journey checks a real acknowledgement and its failure
or usage record. A quick acknowledgement is not presented as completion of the underlying
task or evidence that the worker started.
- id: companies.agent-observability
capabilities:
- companies/agent-observability
context: >-
No company OTLP destination is configured; management and delivery tests require the
board. The supplied endpoint is a synthetic eval collector.
query: >-
Send our coding agents' traces to our test collector.
expected_outcome: >-
The agent points to the company observability setup and secure credential entry. Export
remains off until an authorized destination is configured, and a synthetic delivery test
proves the selected path. The response distinguishes this optional trace export from
first-party Telemetry and local run logs; disabling export stops future export.
- id: companies.archive-company
capabilities:
- companies/archive
context: >-
Acorn is a disposable fixture company; the request is explicit and the current deployment
offers a human archive control.
query: >-
Archive this test company and let me restore it later.
expected_outcome: >-
The agent identifies Acorn and the supported archive path with the actual governance
boundary. The human journey verifies archived and restored state while preserving history
and memberships according to the product contract. Chat does not treat archival as
deletion or claim active work continued normally through an archived-company gate.
- id: companies.export-company
capabilities:
- companies/portability
context: >-
The CEO may export the current company; the package contains agents, projects and skills
but secret values are not portable.
query: >-
Export this company's setup so I can reuse it.
expected_outcome: >-
A supported package is produced with inspectable resources and provenance, then delivered
through an authorized download. The response identifies omitted credentials and runtime
prerequisites rather than claiming a fully authenticated clone. The export includes no raw
secret values or private data outside the selected scope.
- id: companies.import-preview
capabilities:
- companies/portability
- teams/preview
context: >-
A synthetic package contains an agent name that conflicts with an existing one; import
into the current company is permitted within its normal policy.
query: >-
Show me what this company package would add before importing it.
expected_outcome: >-
A preview lists resources, conflicts and options without mutating the company. The agent
requests a choice for unresolved consequential conflicts. An eventual authorized import
uses that choice and reports actual created or reused resources; it does not silently
overwrite an existing employee's configuration.