@kujolang/paperclip 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +2 -1
- package/VERSION +1 -1
- package/dist/manifest.js +6002 -1650
- package/dist/ui/index.js +23 -13
- package/dist/worker.js +6570 -2218
- package/docs/MAINTENANCE_HANDOFF.md +237 -0
- package/docs/README.md +1 -0
- package/docs/RELEASE_READINESS.md +4 -3
- package/package.json +13 -9
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Paperclip maintenance handoff
|
|
2
|
+
|
|
3
|
+
Updated September 3, 2026.
|
|
4
|
+
|
|
5
|
+
## Current state
|
|
6
|
+
|
|
7
|
+
`@kujolang/paperclip` is ready for public use within its documented scope. Version
|
|
8
|
+
`0.1.6` is published on npm and GitHub. The released plugin:
|
|
9
|
+
|
|
10
|
+
- works in Paperclip's current task view without requiring the Classic Task Interface;
|
|
11
|
+
- provides Review, Context, and Failure Evidence workflows in the inline workspace and
|
|
12
|
+
the shared Kujo detail tab;
|
|
13
|
+
- uses the official Kujo logomark;
|
|
14
|
+
- protects both UI surfaces with browser behavior, accessibility, responsive, and
|
|
15
|
+
visual-regression checks;
|
|
16
|
+
- bundles checksummed Kujo components for every supported platform; and
|
|
17
|
+
- publishes through GitHub Actions with npm trusted publishing and provenance.
|
|
18
|
+
|
|
19
|
+
No known plugin defect blocks normal public use. The remaining work is upstream or
|
|
20
|
+
distribution work: the host-version change is waiting on Paperclip maintainers, and
|
|
21
|
+
catalog distribution is not available yet.
|
|
22
|
+
|
|
23
|
+
## At a glance
|
|
24
|
+
|
|
25
|
+
| Work | State | Next action |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| Exact scoped-version install | Upstream PR ready and green | Get Paperclip PR #12745 reviewed and merged |
|
|
28
|
+
| Real minimum host version | Externally blocked | Wait for a Paperclip release containing PR #12745 |
|
|
29
|
+
| Browser/UI regression coverage | Complete | Maintain the approved baselines with UI changes |
|
|
30
|
+
| Dependency updates | Complete | Continue normal Dependabot review |
|
|
31
|
+
| Paperclip catalog listing | Not currently available | Recheck when Paperclip publishes a marketplace process |
|
|
32
|
+
| Kujo plugin release | Complete | Verify and retain the v0.1.6 release evidence |
|
|
33
|
+
|
|
34
|
+
## Work queue
|
|
35
|
+
|
|
36
|
+
### 1. Fix pinned scoped-package installs in Paperclip
|
|
37
|
+
|
|
38
|
+
**Priority:** High
|
|
39
|
+
**Owner:** Paperclip host CLI, not this plugin
|
|
40
|
+
|
|
41
|
+
**State:** Implemented in a green upstream PR awaiting maintainer review
|
|
42
|
+
|
|
43
|
+
The Paperclip CLI currently misparses an exact scoped npm package reference:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx paperclipai plugin install @kujolang/paperclip@0.1.6
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
It looks for a directory named `@kujolang/paperclip@0.1.6` after npm installs the
|
|
50
|
+
package. Installing the current version without a version suffix works:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx paperclipai plugin install @kujolang/paperclip
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The fix is implemented and pushed from the isolated worktree
|
|
57
|
+
`/Users/robertdevore/2026/paperclip-kujo-fixes` on branch
|
|
58
|
+
`codex/kujo-plugin-host-fixes`. The upstream pull request is
|
|
59
|
+
[paperclipai/paperclip#12745](https://github.com/paperclipai/paperclip/pull/12745).
|
|
60
|
+
It adds a shared npm-package-spec parser, CLI and server regression tests, and real
|
|
61
|
+
host-version detection. Local targeted verification passed 59 tests across four test
|
|
62
|
+
files, plus shared, CLI, and direct server TypeScript checks. The complete upstream CI
|
|
63
|
+
matrix, Greptile, Snyk, Socket, policy, and automated review checks passed. The PR is
|
|
64
|
+
ready for maintainer review.
|
|
65
|
+
|
|
66
|
+
Next steps:
|
|
67
|
+
|
|
68
|
+
1. Address any maintainer review request.
|
|
69
|
+
2. Merge through the upstream project's normal process.
|
|
70
|
+
3. Verify a clean exact-version install from the first Paperclip release containing
|
|
71
|
+
the change.
|
|
72
|
+
|
|
73
|
+
Acceptance criteria:
|
|
74
|
+
|
|
75
|
+
- `@scope/name@version` installs the requested exact version;
|
|
76
|
+
- unscoped, scoped-without-version, file, and directory installs still work;
|
|
77
|
+
- regression tests cover scoped exact versions; and
|
|
78
|
+
- Kujo's upgrade and rollback documentation is retested and updated.
|
|
79
|
+
|
|
80
|
+
Tracking evidence: SignalBox capture
|
|
81
|
+
`cap_2bb9af3e-0a67-4b90-b242-d8edf54d3448` and signal
|
|
82
|
+
`sig_9bac6b5c-871d-42e0-91a2-7bd99f78f3c0`.
|
|
83
|
+
|
|
84
|
+
### 2. Restore the real minimum-host manifest constraint
|
|
85
|
+
|
|
86
|
+
**Priority:** High
|
|
87
|
+
**Owner:** Paperclip host integration, followed by this plugin
|
|
88
|
+
|
|
89
|
+
**State:** Blocked until the upstream fix is released
|
|
90
|
+
|
|
91
|
+
Paperclip `2026.831.1` reported host version `0.0.0` to the plugin loader. The plugin
|
|
92
|
+
therefore keeps `MINIMUM_HOST_VERSION = "0.0.0"` in `src/config/defaults.ts` as a
|
|
93
|
+
temporary loader workaround. Documentation and CI enforce the actual supported floor,
|
|
94
|
+
Paperclip `2026.824.1`.
|
|
95
|
+
|
|
96
|
+
PR #12745 includes the host-version reporting fix, but the published Kujo plugin must
|
|
97
|
+
keep the temporary `0.0.0` manifest value until that change reaches a public Paperclip
|
|
98
|
+
release. Raising the floor earlier would reject users on the current host even though
|
|
99
|
+
their Paperclip version is otherwise supported.
|
|
100
|
+
|
|
101
|
+
After the upstream release:
|
|
102
|
+
|
|
103
|
+
1. set the manifest minimum to the real supported host floor;
|
|
104
|
+
2. update `tests/plugin.spec.ts` and `docs/COMPATIBILITY.md`;
|
|
105
|
+
3. run the full verification matrix;
|
|
106
|
+
4. install the packed plugin on the declared minimum and latest Paperclip versions; and
|
|
107
|
+
5. issue a patch release if the published manifest changes.
|
|
108
|
+
|
|
109
|
+
Acceptance criteria: a compatible host loads the plugin, an older host rejects it with
|
|
110
|
+
a clear message, and no `0.0.0` compatibility exception remains.
|
|
111
|
+
|
|
112
|
+
### 3. Add automated browser coverage for both UI surfaces
|
|
113
|
+
|
|
114
|
+
**Priority:** Medium
|
|
115
|
+
**Owner:** Plugin repository
|
|
116
|
+
|
|
117
|
+
**State:** Complete in plugin PR #11
|
|
118
|
+
|
|
119
|
+
The UI has contract tests, manual browser evidence, and automated browser and visual
|
|
120
|
+
regression coverage for:
|
|
121
|
+
|
|
122
|
+
- the inline current-task workspace registered through `taskDetailView`;
|
|
123
|
+
- the shared `detailTab` on project, issue, and run pages;
|
|
124
|
+
- Review, Context, and Failure Evidence actions and result states;
|
|
125
|
+
- the official Kujo mark and accessible labels; and
|
|
126
|
+
- light and dark themes at desktop and narrow widths.
|
|
127
|
+
|
|
128
|
+
The implementation uses Playwright with a deterministic SDK fixture. It covers the
|
|
129
|
+
current-task surface, the project and issue detail tabs, the read-only run detail tab,
|
|
130
|
+
all three primary actions, the official mark, accessible labels, and approved
|
|
131
|
+
desktop-light and narrow-dark screenshots. The `browser-ui` CI job installs its own
|
|
132
|
+
Chromium build and uploads the Playwright report on failure.
|
|
133
|
+
|
|
134
|
+
The hosted Linux browser job passed before merge. Pull requests and releases fail if
|
|
135
|
+
either surface disappears, loses its primary actions, or exceeds the approved visual
|
|
136
|
+
baseline tolerance. Lens also passed its full desktop/mobile accessibility and link
|
|
137
|
+
check with no findings at warning or higher.
|
|
138
|
+
|
|
139
|
+
### 4. Review the open dependency pull requests
|
|
140
|
+
|
|
141
|
+
**Priority:** Medium
|
|
142
|
+
**Owner:** Plugin maintainers
|
|
143
|
+
|
|
144
|
+
**State:** Complete
|
|
145
|
+
|
|
146
|
+
The four reviewed Dependabot pull requests were [artifact attestation
|
|
147
|
+
#1](https://github.com/kujolang/paperclip/pull/1), [the grouped development update
|
|
148
|
+
#2](https://github.com/kujolang/paperclip/pull/2), [Zod
|
|
149
|
+
#3](https://github.com/kujolang/paperclip/pull/3), and [dependency review
|
|
150
|
+
#4](https://github.com/kujolang/paperclip/pull/4). All four are merged.
|
|
151
|
+
|
|
152
|
+
The grouped TypeScript 7 update initially failed because compiler types were implicit.
|
|
153
|
+
The repaired branch declares Node and React types explicitly. Local verification and
|
|
154
|
+
the complete hosted compatibility matrix passed before merge.
|
|
155
|
+
|
|
156
|
+
### 5. Submit to the Paperclip catalog
|
|
157
|
+
|
|
158
|
+
**Priority:** Medium
|
|
159
|
+
**Owner:** Release or ecosystem maintainer
|
|
160
|
+
|
|
161
|
+
**State:** Waiting for an upstream submission channel
|
|
162
|
+
|
|
163
|
+
Paperclip's current implementation specification explicitly keeps a public plugin
|
|
164
|
+
marketplace and packaged public distribution out of scope. No official catalog
|
|
165
|
+
submission path is present in the upstream repository as of this update. Do not invent
|
|
166
|
+
an unofficial submission process.
|
|
167
|
+
|
|
168
|
+
Keep [CATALOG_SUBMISSION.md](CATALOG_SUBMISSION.md) ready as the evidence brief. When
|
|
169
|
+
Paperclip publishes a submission channel, attach the tagged release, npm provenance,
|
|
170
|
+
cross-platform checks, permissions summary, and current UI screenshots.
|
|
171
|
+
|
|
172
|
+
This is a distribution task, not a prerequisite for installing the public npm package.
|
|
173
|
+
|
|
174
|
+
### 6. Cut the next release only after plugin-owned work lands
|
|
175
|
+
|
|
176
|
+
**Priority:** Medium
|
|
177
|
+
|
|
178
|
+
**Owner:** Plugin release maintainer
|
|
179
|
+
|
|
180
|
+
**State:** v0.1.6 released
|
|
181
|
+
|
|
182
|
+
Version 0.1.6 consolidates the browser coverage and dependency maintenance. Its tagged
|
|
183
|
+
workflow runs the full repository, browser, compatibility, supply-chain, packaging,
|
|
184
|
+
and clean-install gates before publication through npm trusted publishing.
|
|
185
|
+
|
|
186
|
+
## Recommended next-agent sequence
|
|
187
|
+
|
|
188
|
+
1. Monitor upstream PR #12745 through review and merge; do not change the published
|
|
189
|
+
minimum-host constraint yet.
|
|
190
|
+
2. After an upstream Paperclip release contains the host fix, restore the real host
|
|
191
|
+
floor and run minimum/latest clean-install tests.
|
|
192
|
+
3. Publish a follow-up patch only if restoring the manifest floor changes the package.
|
|
193
|
+
|
|
194
|
+
The catalog task stays parked until Paperclip exposes an official public submission
|
|
195
|
+
process.
|
|
196
|
+
|
|
197
|
+
## Optional business work
|
|
198
|
+
|
|
199
|
+
The repository documents secure operation and incident response, but it does not promise
|
|
200
|
+
an SLA. If the plugin will be sold as an enterprise-supported product, define support
|
|
201
|
+
ownership, response targets, vulnerability intake, data-processing posture, and any
|
|
202
|
+
required compliance evidence. These are commercial-operating commitments, not missing
|
|
203
|
+
plugin functionality.
|
|
204
|
+
|
|
205
|
+
## Guardrails
|
|
206
|
+
|
|
207
|
+
- Keep the plugin a thin integration over the pinned Kujo components. Do not duplicate
|
|
208
|
+
their implementations in TypeScript.
|
|
209
|
+
- Do not add a generic command runner or accept arbitrary workspace paths.
|
|
210
|
+
- Preserve bounded output, redaction, canonical workspace checks, and the two-stage
|
|
211
|
+
Context Pack read boundary.
|
|
212
|
+
- Do not add a Classic Task Interface requirement.
|
|
213
|
+
- Keep npm publishing tokenless through trusted publishing; do not add repository npm
|
|
214
|
+
tokens.
|
|
215
|
+
- Do not claim suggested checks ran unless the plugin has execution evidence.
|
|
216
|
+
|
|
217
|
+
## Agent start checklist
|
|
218
|
+
|
|
219
|
+
1. Read `AGENTS.md`, `README.md`, this handoff, and the document for the selected task.
|
|
220
|
+
2. Confirm `git status --short --branch` is clean and create a focused branch.
|
|
221
|
+
3. Run `npm ci --ignore-scripts` and `npm run verify` before changing behavior.
|
|
222
|
+
4. Inspect current GitHub issues, pull requests, and workflow results.
|
|
223
|
+
5. Make small signed commits, push them, and use required pull-request checks.
|
|
224
|
+
6. For a release, follow [RELEASE_READINESS.md](RELEASE_READINESS.md), test a clean
|
|
225
|
+
public install, and verify the npm and GitHub artifacts after publication.
|
|
226
|
+
|
|
227
|
+
## Completion standard
|
|
228
|
+
|
|
229
|
+
A maintenance item is complete only when its tests, documentation, compatibility
|
|
230
|
+
evidence, and hosted checks agree; the branch is merged; and the working tree is clean.
|
|
231
|
+
A version change is complete only after the signed tag, GitHub release, npm package,
|
|
232
|
+
provenance, and clean public install are all verified.
|
|
233
|
+
|
|
234
|
+
## Release evidence
|
|
235
|
+
|
|
236
|
+
- GitHub release: <https://github.com/kujolang/paperclip/releases/tag/v0.1.6>
|
|
237
|
+
- npm package: <https://www.npmjs.com/package/@kujolang/paperclip/v/0.1.6>
|
package/docs/README.md
CHANGED
|
@@ -14,5 +14,6 @@ Start with [Installation](INSTALLATION.md), then [Usage](USAGE.md).
|
|
|
14
14
|
| [Release readiness](RELEASE_READINESS.md) | Release order, test matrix, and operator checks. |
|
|
15
15
|
| [Operations](OPERATIONS.md) | Health, audit, retention, upgrades, rollback, recovery, and incident response. |
|
|
16
16
|
| [Catalog submission](CATALOG_SUBMISSION.md) | Paperclip catalog metadata and review evidence. |
|
|
17
|
+
| [Maintenance handoff](MAINTENANCE_HANDOFF.md) | Current release state, remaining work, priorities, and completion criteria. |
|
|
17
18
|
|
|
18
19
|
Repository policy lives in [SECURITY.md](../SECURITY.md), [CONTRIBUTING.md](../CONTRIBUTING.md), and [AGENTS.md](../AGENTS.md).
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
| --- | --- |
|
|
7
7
|
| TypeScript strict typecheck | automated by `npm run verify` |
|
|
8
8
|
| Unit/contract tests | automated by Vitest |
|
|
9
|
+
| Browser behavior and visual baselines | automated by Playwright in `browser-ui` CI |
|
|
9
10
|
| Official Paperclip SDK worker harness | automated by Vitest |
|
|
10
11
|
| Real ChangeBucket/PatchBrief fixture | automated by Vitest |
|
|
11
12
|
| Real CaseFile redaction fixture | automated by Vitest |
|
|
@@ -27,7 +28,7 @@ The release order is platform runtime packages, neutral `@kujolang/kujo-runtime`
|
|
|
27
28
|
|
|
28
29
|
The runtime release workflows build and smoke macOS arm64/x64, Linux arm64/x64, and Windows x64. Paperclip CI tests those five targets. A separate compatibility matrix tests Node.js 24.11 and current Node.js 24 against the minimum, locked, and latest compatible Paperclip SDK versions. Local plugin feature execution is verified on the developer host; every supported target is exercised during a tagged release.
|
|
29
30
|
|
|
30
|
-
The tag workflow accepts only an annotated tag with a GitHub-verified SSH or PGP signature whose name matches `package.json`. It verifies the repository, packs once, attests that tarball, publishes that exact file through npm trusted publishing with short-lived OIDC credentials, and attaches its checksum, CycloneDX SBOM, component lock, and JSON schemas to the GitHub release. Package settings require two-factor authentication and disallow traditional token publishing.
|
|
31
|
+
The tag workflow accepts only an annotated tag with a GitHub-verified SSH or PGP signature whose name matches `package.json`. It verifies the repository and browser UI, packs once, attests that tarball, publishes that exact file through npm trusted publishing with short-lived OIDC credentials, and attaches its checksum, CycloneDX SBOM, component lock, and JSON schemas to the GitHub release. Package settings require two-factor authentication and disallow traditional token publishing.
|
|
31
32
|
|
|
32
33
|
## Performance bounds
|
|
33
34
|
|
|
@@ -39,8 +40,8 @@ The tag workflow accepts only an annotated tag with a GitHub-verified SSH or PGP
|
|
|
39
40
|
- context file: 2 KB during selection and 1 MB hard read refusal
|
|
40
41
|
- Review file rows retained by canonical output; UI eagerly renders at most 20 context entries and 12 suggested tests
|
|
41
42
|
|
|
42
|
-
The v0.1 deterministic suite remains in Vitest because these contracts combine the Paperclip SDK harness, native-process bounds, filesystem escape checks, and JSON assertions directly. Kujo Spec/Eval would add a second runner without improving determinism for this release; the versioned schemas and fixture cases are ready to export into Eval when the plugin adds executable verification.
|
|
43
|
+
The v0.1 deterministic contract suite remains in Vitest because these contracts combine the Paperclip SDK harness, native-process bounds, filesystem escape checks, and JSON assertions directly. Playwright separately renders both registered UI surfaces in a deterministic SDK fixture, exercises every primary action, verifies the project, issue, and read-only run states, and compares desktop-light and narrow-dark screenshots. Kujo Spec/Eval would add a second contract runner without improving determinism for this release; the versioned schemas and fixture cases are ready to export into Eval when the plugin adds executable verification.
|
|
43
44
|
|
|
44
45
|
## Release decision
|
|
45
46
|
|
|
46
|
-
SHIP only after the protected-branch checks
|
|
47
|
+
SHIP only after the protected-branch checks, browser UI suite, and compatibility workflow pass; the signed-tag workflow succeeds; the seven runtime/plugin npm names are available; a clean-room npm install passes; and a real Paperclip host loads the published package and exercises its tools.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kujolang/paperclip",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Make Paperclip agent work easier to scope, review, reproduce, and verify.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/kujolang/paperclip#readme",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"build": "node esbuild.config.mjs",
|
|
38
38
|
"typecheck": "tsc --noEmit",
|
|
39
39
|
"test": "vitest run",
|
|
40
|
+
"test:ui": "playwright test",
|
|
40
41
|
"test:watch": "vitest",
|
|
41
42
|
"components:sync": "node scripts/sync-components.mjs --local-root ..",
|
|
42
43
|
"components:verify": "node scripts/verify-components.mjs",
|
|
@@ -44,13 +45,13 @@
|
|
|
44
45
|
"supply-chain:verify": "node scripts/verify-supply-chain.mjs",
|
|
45
46
|
"verify": "npm run repository:verify && npm run typecheck && npm test && npm run components:verify && npm run supply-chain:verify && npm run build && npm run pack:verify",
|
|
46
47
|
"pack:verify": "node scripts/verify-package.mjs",
|
|
47
|
-
"release:dry-run": "npm run verify",
|
|
48
|
+
"release:dry-run": "npm run verify && npm run test:ui",
|
|
48
49
|
"prepublishOnly": "npm run verify"
|
|
49
50
|
},
|
|
50
51
|
"dependencies": {
|
|
51
52
|
"@kujolang/kujo-runtime": "1.2.2",
|
|
52
53
|
"@paperclipai/plugin-sdk": "2026.824.1",
|
|
53
|
-
"zod": "4.4
|
|
54
|
+
"zod": "4.5.4"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
56
57
|
"react": ">=18"
|
|
@@ -61,13 +62,16 @@
|
|
|
61
62
|
}
|
|
62
63
|
},
|
|
63
64
|
"devDependencies": {
|
|
64
|
-
"@
|
|
65
|
-
"@types/
|
|
65
|
+
"@playwright/test": "1.62.1",
|
|
66
|
+
"@types/node": "26.4.0",
|
|
67
|
+
"@types/react": "19.2.18",
|
|
68
|
+
"@types/react-dom": "19.2.5",
|
|
66
69
|
"esbuild": "0.28.2",
|
|
67
|
-
"react": "19.
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
70
|
+
"react": "19.2.8",
|
|
71
|
+
"react-dom": "19.2.8",
|
|
72
|
+
"rollup": "4.63.1",
|
|
73
|
+
"typescript": "7.0.2",
|
|
74
|
+
"vitest": "4.1.11"
|
|
71
75
|
},
|
|
72
76
|
"publishConfig": {
|
|
73
77
|
"access": "public",
|