Files
PaperClipAI/tests
DottaandClaude Opus 5.5 ba905c7254 fix(evals): name each team member's readiness and grade configure-team structurally (#20879)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work
> - The chat catalog eval `teams.configure-team` checks that chat gets
an installed team ready member by member
> - Its setup installs Product Engineering, removes the QA member's
account, and requires a real probe split: QA missing an account, the
senior coder ready
> - The QA probe returned a generic `opencode_hello_probe_failed` error,
so the setup stopped with "probes do not establish the required
missing-versus-ready account split"
> - The cause is a product classification gap: OpenRouter answers an
empty key with HTTP 401 "Missing Authentication header", which the
OpenCode probe did not treat as authentication (fixed in #20878,
cherry-picked here)
> - This pull request makes the setup blocker name each member's
observed readiness, and replaces reply keyword checks with structural
checks
> - The benefit is that the eval can reach the chat journey and grades
it without matching words

## Linked Issues or Issue Description

Refs #20878

**What happened**
`teams.configure-team` failed in setup. The QA member's probe was `fail`
with `opencode_hello_probe_failed`. The senior coder passed. The setup
error did not say which member was in which state.

**Expected behavior**
The QA member's probe reports the missing-authentication check, so the
split forms and the chat journey runs. When the split does not form, the
setup error names each member's observed status and checks.

**Steps to reproduce**
1. Run `chat-features.runner-opencode.local.teams.configure-team` on
master.
2. Read `snapshots/chat-catalog-team-initial-probes.json`.
3. QA shows `fail` with `opencode_hello_probe_failed:error`; the setup
stops.

## What Changed

- Cherry-pick of #20878: the OpenCode probe classifies a provider 401 as
`opencode_hello_probe_auth_required`.
- The setup blocker now lists each member as `name (expected missing
account | expected ready | other member): status [non-info checks]`.
- Grader: remove the member-name substring check and the "team is ready"
regex. Identification is the rendered link to the missing member's own
page, which the case already required. The followup is graded by a
non-empty reply from its own succeeded run, not by the words
"ready/configured/verified/account". Fresh per-member probes, preserved
working configuration and revisions, and the attributed repair stay
unchanged.
- Calibration: reworded and non-English valid followups pass; missing
handoff, empty followup, and failed followup run fail. A setup test with
the recorded failure shape checks the new error text.
- `oracleVersion` bumped to `paperclip.chat-catalog.team-configure.v3`;
`parse.ts` added to `sourceFiles`.

## Verification

- `pnpm exec vitest run --config tests/runner-e2e/vitest.config.ts
tests/runner-e2e/chat-catalog-domains/external-team-configure.test.ts
tests/runner-e2e/chat-catalog-domains/external-team-configure-prerequisite.test.ts
tests/runner-e2e/chat-runtime-profile.test.ts
tests/runner-e2e/chat-catalog-contract.test.ts
tests/runner-e2e/chat-catalog-consistency.test.ts` passes.
- `node tests/runner-e2e/source-sdk-public-inputs.mjs <HEAD> --check`
reports no change.
- `node --test
tests/runner-e2e/chat-full-catalog-testops-manifest.test.mjs` passes.
- The paid run
`chat-features.runner-opencode.local.teams.configure-team` is still to
run.

## Risks

- The removed "team is ready" regex failed open. A false whole-team
claim in the reply now needs human reading of the transcript. The
structural checks still reject a missing handoff, a missing repair, and
any member that fails its fresh probe.

## Model Used

- Anthropic Claude Opus 5.5 (`claude-opus-5-5`), tool use and code
execution in Claude Code.

## 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

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 17:26:01 -06:00
..