mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-03 09:37:19 +01:00
fix(cloud): persist configuration and load release-image packages (#18335)
Land the approved Cloud configuration and release-image package stack.
Includes the separately reviewed adapter settings (#18335), external adapters (#18333), bundled plugins (#18336), startup configuration (#18339), and migration/package checks (#18341).
Includes the final image-owned loader and linked-dependency inventory corrections.
Verified stack head: 462716170d.
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
36f4422389
commit
8f822bfcf7
57 files changed
+3670
-250
No files matched your search
@@ -74,6 +74,9 @@ API: `present` — representative operation IDs:
|
||||
- `PATCH /api/instance/settings`.
|
||||
- `GET /api/instance/settings/experimental`.
|
||||
- `PATCH /api/instance/settings/experimental`.
|
||||
- `GET /api/adapters`.
|
||||
- `GET /api/adapters/{type}`.
|
||||
- `PATCH /api/adapters/{type}`.
|
||||
|
||||
Agent access: `restricted` — Board/admin instance settings; CLI configure/env; local
|
||||
configuration files.
|
||||
@@ -88,9 +91,38 @@ Verification: `not-run` — assert the documented agent denial with an owned tes
|
||||
verify any listed agent request/result path separately. A delegated operation needs its
|
||||
own policy and access review.
|
||||
|
||||
Cloud runtime configuration uses a separate private PostgreSQL singleton and
|
||||
adds no public read or mutation endpoint. Existing instance settings APIs do not
|
||||
expose it. Bootstrap database credentials and trust keys remain in the supplied
|
||||
environment; the strict saved allowlist excludes API keys and connection URLs.
|
||||
Internal configuration updates require a matching revision and transaction lock.
|
||||
[Database controls](../../server/src/__tests__/cloud-runtime-config.test.ts) cover
|
||||
seed/restart, credential exclusion, conflicts and rollback. These are local
|
||||
controls, not agent authorization or deployed Cloud qualification.
|
||||
|
||||
Gaps: Settings APIs cover parts of configuration; pre-start database/binding/storage
|
||||
configuration is local operator tooling.
|
||||
|
||||
Adapter toggles require instance-admin authority and remain blocked when
|
||||
`instance.adapters` is hidden. Ordinary board members can read the catalog;
|
||||
agent keys cannot toggle adapters. Managed Cloud preferences are stored in a
|
||||
private database singleton. The operator adapter declaration sets the effective
|
||||
list and rejects conflicting toggles. [PostgreSQL regression coverage](../../server/src/services/adapter-settings-postgres.test.ts)
|
||||
exercises persistence, concurrent writers, admission freshness, activity audit,
|
||||
and failed writes; [authorization tests](../../server/src/__tests__/adapter-routes-authz.test.ts)
|
||||
cover admin and hidden-setting gates. These are local tests, not deployed proof.
|
||||
|
||||
Cloud configuration migration and package qualification are operator commands,
|
||||
not agent-accessible REST capabilities. They require the managed environment and
|
||||
database operator access. The [command](../../server/src/qualify-cloud-configuration.ts)
|
||||
composes transaction-safe owner seeds and writes a private receipt. Every
|
||||
qualification rereads current revisions and image package evidence; a completed
|
||||
historical receipt grants no deployment or execution authority. [PostgreSQL coverage](../../server/src/__tests__/cloud-configuration-migration-postgres.test.ts)
|
||||
uses independent clients, lost-home reconstruction, a real replacement fixture
|
||||
worker, rollback/retry, and durable blockers. [Reader coverage](../../server/src/__tests__/cloud-configuration-readers.test.ts)
|
||||
checks bounded sources and pnpm-style link integrity. These are local fixtures;
|
||||
see the [scope and operator procedure](../../doc/cloud-configuration-migration.md).
|
||||
|
||||
Cloud stack Admins may update experimental settings through the trusted Cloud
|
||||
actor without receiving other instance-admin powers. This uses the current
|
||||
stack role on each request; company membership alone does not grant it.
|
||||
|
||||
@@ -55,7 +55,14 @@ Policy: Company model discovery requires company access; account-backed discover
|
||||
also enforces its account/pool and target-agent rules. Instance adapter inventory
|
||||
and installation retain board/admin gates. Delegated managed
|
||||
AI-account login operations are enumerated under `model-accounts`; they do not
|
||||
grant raw host administration or execution-session reset.
|
||||
grant raw host administration or execution-session reset. On Cloud-managed
|
||||
instances, external adapter install, reinstall, reload, removal and override
|
||||
operations return `403` with `adapter_install_platform_managed`, including for
|
||||
instance admins. Built-in metadata remains available to board users. Startup
|
||||
and UI parser reads do not consume saved external registrations or package code.
|
||||
[Local fixture controls](../../server/src/adapters/cloud-external-adapters.test.ts)
|
||||
and [route controls](../../server/src/__tests__/adapter-routes-authz.test.ts)
|
||||
cover this boundary; they do not establish live agent or provider qualification.
|
||||
|
||||
Evidence: `source-only` — [implementation](../../server/src/routes/agents.ts#L6608) at
|
||||
the reviewed commit above.
|
||||
|
||||
@@ -63,8 +63,38 @@ unfinished application write must still prevent sleep after its client leaves.
|
||||
|
||||
### `settings-backup`
|
||||
|
||||
Cloud startup reads nonsecret application choices from a private, versioned
|
||||
PostgreSQL singleton after a bounded one-time legacy config seed. A fresh
|
||||
process and different home restore the saved choices without consulting a stale
|
||||
`.env` file. Invalid saved data or an unavailable database prevents startup;
|
||||
saved telemetry opt-out applies before client creation. The
|
||||
[database controls](../../server/src/__tests__/cloud-runtime-config.test.ts) and
|
||||
[startup-order controls](../../server/src/__tests__/server-startup-feedback-export.test.ts)
|
||||
cover these local boundaries. See [field ownership](../../doc/cloud-runtime-configuration.md).
|
||||
These controls do not qualify a deployed Cloud rollout or durable file storage.
|
||||
|
||||
Automated: [experimental settings](../../ui/src/pages/InstanceExperimentalSettings.test.tsx) and [database backup routes](../../server/src/__tests__/instance-database-backups-routes.test.ts) cover their UI/API contracts.
|
||||
|
||||
Cloud migration: in one maintenance window, stop legacy file writers and run the
|
||||
[configuration/package qualification command](../../doc/cloud-configuration-migration.md).
|
||||
Inspect its database receipt, update a saved preference, then repeat against a
|
||||
second owned application/image root with the first home unavailable. Use an
|
||||
explicit package evidence digest for same-package comparison. Confirm stale
|
||||
qualification and missing legacy files cannot clear blockers. This recipe covers
|
||||
configuration/packages and does not qualify whole-server zero downtime, secret
|
||||
bytes, or volume removal. [Local PostgreSQL evidence path](../../server/src/__tests__/cloud-configuration-migration-postgres.test.ts)
|
||||
includes a real fixture worker; it does not establish a hosted replacement.
|
||||
|
||||
Managed adapters: change a visible adapter preference as an instance admin,
|
||||
then use a second application process against the same disposable database to
|
||||
confirm catalog and new-agent selection reflect it. Verify saved agents remain
|
||||
usable. Restart with an operator adapter declaration, confirm its effective
|
||||
list, and reject conflicting toggles. Remove the declaration and confirm saved
|
||||
preferences return. [Database tests](../../server/src/services/adapter-settings-postgres.test.ts)
|
||||
cover local persistence, concurrent writers, audit rollback, and failure responses;
|
||||
[local compatibility tests](../../server/src/services/adapter-settings-local.test.ts)
|
||||
cover the legacy file. No deployed walkthrough is claimed.
|
||||
|
||||
Manual: Change a harmless experimental setting, reload, and confirm the affected route honors it. Back up a disposable instance, inspect the reported file and metadata, and restore using the documented procedure into a second isolated target. Verify a known record after restoration.
|
||||
|
||||
Cloud staging: On a managed `*.staging.paperclip.app` instance, verify experiments
|
||||
|
||||
@@ -170,6 +170,15 @@ controls do not establish live provider acceptance.
|
||||
|
||||
### `adapter-setup`
|
||||
|
||||
Cloud-managed instances load adapters from the release image. Saved external
|
||||
registrations cannot replace built-ins or supply UI parser code. Install,
|
||||
reinstall, reload, remove, and override operations remain platform-managed.
|
||||
The [fixture loader controls](../../server/src/adapters/cloud-external-adapters.test.ts)
|
||||
exercise real packages, import side effects, both managed-instance signals and
|
||||
self-hosted compatibility. The [route authorization controls](../../server/src/__tests__/adapter-routes-authz.test.ts)
|
||||
check managed denials before package or registration access. These are local
|
||||
controls, not live Cloud provider qualification.
|
||||
|
||||
Automated: [adapter validation routes](../../server/src/__tests__/agent-adapter-validation-routes.test.ts) and [model refresh](../../server/src/__tests__/adapter-model-refresh-routes.test.ts) cover server behavior.
|
||||
|
||||
Claude native setup uses the existing Anthropic API-key or subscription connection
|
||||
|
||||
Reference in new issue
Block a user