Files
PaperClipAI/ui
DottaandPaperclip 0111689d0a test(ui): cover monitor-only task policies (#15587)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for work.
> - Operators open tasks to read progress and edit reviewers and approvers.
> - Stored execution policies can contain a monitor and omit the stages array.
> - These policies previously crashed the task properties panel.
> - The policy reader now applies schema defaults through the fix in #15593.
> - This pull request adds regression coverage for monitor-only policies with external service metadata.
> - The tests check that the panel renders and participant edits keep the existing monitor.

## Linked Issues or Issue Description

**What happened?**

A task with a monitor-only execution policy could crash with `Cannot read properties of undefined (reading 'find')`. The stored policy omitted `stages`.

**Expected behavior**

The task shows no reviewers or approvers. Adding both kinds of participant keeps the monitor and its external service metadata.

**Steps to reproduce**

1. Load a task whose execution policy contains an external service monitor and omits `stages`.
2. Render its properties panel and inspect both participant controls.
3. Add reviewers and approvers. Check that the resulting policy keeps the monitor.

Refs #15593, which provides the policy normalization used by these tests.

## What Changed

- Test that both stage types return empty participant lists for a monitor-only policy.
- Test adding reviewers and approvers while keeping the external service monitor.
- Test retaining a monitor when no review or approval stages exist.
- Render the properties panel with omitted stages and check its participant and monitor controls.

## Verification

- The helper and properties panel suites pass on current master with these tests: 108 tests.
- `pnpm check:token-gates` passes.
- All CI gates pass on the updated PR commit, including build, types, Runner verification, full test suites, browser suites, security scans, and canary checks.
- Greptile gives commit `2634bd1d` 5/5 with no actionable findings or unresolved review threads.
- The full local workspace suite was not repeated for this test-only rebase. CI verifies the full suite, build, types, Runner checks, browser suites, security scans, and canary run.

## Risks

- Low risk. This change adds tests against the existing policy behavior.
- The fixture uses example external references and test participant IDs.
- Existing documentation remains accurate for this regression coverage.

## Model Used

- OpenAI Codex, based on GPT-6, with tool use and code execution. The exact serving model ID and context window were not exposed in this session.

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

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-10-08 14:36:46 -05:00
..
…

@paperclipai/ui

Published static assets for the Paperclip board UI.

What gets published

The npm package contains the production build under dist/. It does not ship the UI source tree or workspace-only dependencies.

Storybook

Storybook config, stories, and fixtures live under ui/storybook/.

pnpm --filter @paperclipai/ui storybook
pnpm --filter @paperclipai/ui build-storybook

Typical use

Install the package, then serve or copy the built files from node_modules/@paperclipai/ui/dist.

Editor dependency identity

Keep the root and workspace overrides for @codemirror/state, @codemirror/view, and @lezer/common aligned. CodeMirror requires shared extension identity, while Lezer parsers and syntax highlighters require shared NodeProp IDs. Multiple Lezer copies can crash code-block highlighting with tags is not iterable. src/lib/codemirror-single-instance.test.ts checks the installed dependency graph and highlights sample code through the editor's real language dependencies. GitHub Actions owns regeneration of pnpm-lock.yaml.